Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
cfx_unicodeencodingex.cpp
Go to the documentation of this file.
1
// Copyright 2016 The PDFium Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7
#
include
"core/fxge/cfx_unicodeencodingex.h"
8
9
#
include
<
memory
>
10
11
#
include
"core/fxge/cfx_font.h"
12
#
include
"core/fxge/freetype/fx_freetype.h"
13
#
include
"core/fxge/fx_font.h"
14
#
include
"core/fxge/fx_fontencoding.h"
15
16
namespace
{
17
18
constexpr
fxge
::
FontEncoding
kEncodingIDs[] = {
19
fxge
::
FontEncoding
::
kSymbol
,
fxge
::
FontEncoding
::
kUnicode
,
20
fxge
::
FontEncoding
::
kSjis
,
fxge
::
FontEncoding
::
kGB2312
,
21
fxge
::
FontEncoding
::
kBig5
,
fxge
::
FontEncoding
::
kWansung
,
22
fxge
::
FontEncoding
::
kJohab
,
fxge
::
FontEncoding
::
kAdobeStandard
,
23
fxge
::
FontEncoding
::
kAdobeExpert
,
fxge
::
FontEncoding
::
kAdobeCustom
,
24
fxge
::
FontEncoding
::
kLatin1
,
fxge
::
FontEncoding
::
kOldLatin2
,
25
fxge
::
FontEncoding
::
kAppleRoman
,
26
};
27
28
std::unique_ptr<CFX_UnicodeEncodingEx> FXFM_CreateFontEncoding(
29
CFX_Font
* pFont,
30
fxge
::
FontEncoding
encoding_id) {
31
if
(!pFont->GetFace()->SelectCharMap(encoding_id)) {
32
return
nullptr
;
33
}
34
return
std
::make_unique<CFX_UnicodeEncodingEx>(pFont, encoding_id);
35
}
36
37
}
// namespace
38
39
CFX_UnicodeEncodingEx::
CFX_UnicodeEncodingEx
(
CFX_Font
* pFont,
40
fxge
::
FontEncoding
encoding_id)
41
:
CFX_UnicodeEncoding
(
pFont
)
, encoding_id_(encoding_id) {}
42
43
CFX_UnicodeEncodingEx::~
CFX_UnicodeEncodingEx
() =
default
;
44
45
uint32_t CFX_UnicodeEncodingEx::
GlyphFromCharCode
(uint32_t charcode) {
46
RetainPtr
<CFX_Face> face = m_pFont->GetFace();
47
FT_UInt nIndex = face->GetCharIndex(charcode);
48
if
(nIndex > 0)
49
return
nIndex;
50
51
size_t map_index = 0;
52
while
(map_index < face->GetCharMapCount()) {
53
fxge
::
FontEncoding
encoding_id =
54
face->GetCharMapEncodingByIndex(map_index++);
55
if
(encoding_id_ == encoding_id) {
56
continue
;
57
}
58
if
(!face->SelectCharMap(encoding_id)) {
59
continue
;
60
}
61
nIndex = face->GetCharIndex(charcode);
62
if
(nIndex > 0) {
63
encoding_id_ = encoding_id;
64
return
nIndex;
65
}
66
}
67
face->SelectCharMap(encoding_id_);
68
return
0;
69
}
70
71
uint32_t CFX_UnicodeEncodingEx::
CharCodeFromUnicode
(
wchar_t
Unicode)
const
{
72
if
(encoding_id_ ==
fxge
::
FontEncoding
::
kUnicode
||
73
encoding_id_ ==
fxge
::
FontEncoding
::
kSymbol
) {
74
return
Unicode;
75
}
76
RetainPtr
<CFX_Face> face = m_pFont->GetFace();
77
for
(size_t i = 0; i < face->GetCharMapCount(); i++) {
78
fxge
::
FontEncoding
encoding_id = face->GetCharMapEncodingByIndex(i);
79
if
(encoding_id ==
fxge
::
FontEncoding
::
kUnicode
||
80
encoding_id ==
fxge
::
FontEncoding
::
kSymbol
) {
81
return
Unicode;
82
}
83
}
84
return
kInvalidCharCode
;
85
}
86
87
std
::
unique_ptr
<
CFX_UnicodeEncodingEx
>
FX_CreateFontEncodingEx
(
88
CFX_Font
* pFont) {
89
if
(!pFont || !pFont->GetFace()) {
90
return
nullptr
;
91
}
92
93
for
(
fxge
::
FontEncoding
id : kEncodingIDs) {
94
auto
pFontEncoding = FXFM_CreateFontEncoding(pFont, id);
95
if
(pFontEncoding)
96
return
pFontEncoding;
97
}
98
return
nullptr
;
99
}
FX_CreateFontEncodingEx
std::unique_ptr< CFX_UnicodeEncodingEx > FX_CreateFontEncodingEx(CFX_Font *pFont)
Definition
cfx_unicodeencodingex.cpp:87
CFX_Font
Definition
cfx_font.h:38
CFX_UnicodeEncodingEx::kInvalidCharCode
static constexpr uint32_t kInvalidCharCode
Definition
cfx_unicodeencodingex.h:20
CFX_UnicodeEncodingEx::CFX_UnicodeEncodingEx
CFX_UnicodeEncodingEx(CFX_Font *pFont, fxge::FontEncoding encoding_id)
Definition
cfx_unicodeencodingex.cpp:39
CFX_UnicodeEncodingEx::CharCodeFromUnicode
uint32_t CharCodeFromUnicode(wchar_t Unicode) const
Definition
cfx_unicodeencodingex.cpp:71
CFX_UnicodeEncodingEx::GlyphFromCharCode
uint32_t GlyphFromCharCode(uint32_t charcode) override
Definition
cfx_unicodeencodingex.cpp:45
CFX_UnicodeEncodingEx::~CFX_UnicodeEncodingEx
~CFX_UnicodeEncodingEx() override
CFX_UnicodeEncoding
Definition
cfx_unicodeencoding.h:16
CFX_UnicodeEncoding::CFX_UnicodeEncoding
CFX_UnicodeEncoding(const CFX_Font *pFont)
Definition
cfx_unicodeencoding.cpp:15
fxcrt::RetainPtr
Definition
retain_ptr.h:28
fxge
Definition
cfx_face.h:23
fxge::FontEncoding
FontEncoding
Definition
fx_fontencoding.h:12
fxge::FontEncoding::kSymbol
@ kSymbol
Definition
fx_fontencoding.h:24
fxge::FontEncoding::kAdobeCustom
@ kAdobeCustom
Definition
fx_fontencoding.h:13
fxge::FontEncoding::kGB2312
@ kGB2312
Definition
fx_fontencoding.h:18
fxge::FontEncoding::kOldLatin2
@ kOldLatin2
Definition
fx_fontencoding.h:22
fxge::FontEncoding::kSjis
@ kSjis
Definition
fx_fontencoding.h:23
fxge::FontEncoding::kJohab
@ kJohab
Definition
fx_fontencoding.h:19
fxge::FontEncoding::kBig5
@ kBig5
Definition
fx_fontencoding.h:17
fxge::FontEncoding::kAdobeStandard
@ kAdobeStandard
Definition
fx_fontencoding.h:15
fxge::FontEncoding::kAppleRoman
@ kAppleRoman
Definition
fx_fontencoding.h:16
fxge::FontEncoding::kAdobeExpert
@ kAdobeExpert
Definition
fx_fontencoding.h:14
fxge::FontEncoding::kUnicode
@ kUnicode
Definition
fx_fontencoding.h:25
fxge::FontEncoding::kWansung
@ kWansung
Definition
fx_fontencoding.h:26
fxge::FontEncoding::kLatin1
@ kLatin1
Definition
fx_fontencoding.h:20
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qtwebengine
src
3rdparty
chromium
third_party
pdfium
core
fxge
cfx_unicodeencodingex.cpp
Generated on
for Qt by
1.18.0