OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "fpdfsdk/include/pdfwindow/PWL_FontMap.h" | 7 #include "fpdfsdk/include/pdfwindow/PWL_FontMap.h" |
8 | 8 |
9 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" | 9 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" |
10 #include "core/fpdfapi/include/cpdf_modulemgr.h" | 10 #include "core/fpdfapi/include/cpdf_modulemgr.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) { | 72 CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) { |
73 if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { | 73 if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { |
74 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { | 74 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { |
75 return pData->sFontName; | 75 return pData->sFontName; |
76 } | 76 } |
77 } | 77 } |
78 | 78 |
79 return ""; | 79 return ""; |
80 } | 80 } |
81 | 81 |
82 FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, FX_WORD word) { | 82 FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, uint16_t word) { |
83 if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { | 83 if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { |
84 if (m_aData.GetAt(nFontIndex)) { | 84 if (m_aData.GetAt(nFontIndex)) { |
85 return CharCodeFromUnicode(nFontIndex, word) >= 0; | 85 return CharCodeFromUnicode(nFontIndex, word) >= 0; |
86 } | 86 } |
87 } | 87 } |
88 | 88 |
89 return FALSE; | 89 return FALSE; |
90 } | 90 } |
91 | 91 |
92 int32_t CPWL_FontMap::GetWordFontIndex(FX_WORD word, | 92 int32_t CPWL_FontMap::GetWordFontIndex(uint16_t word, |
93 int32_t nCharset, | 93 int32_t nCharset, |
94 int32_t nFontIndex) { | 94 int32_t nFontIndex) { |
95 if (nFontIndex > 0) { | 95 if (nFontIndex > 0) { |
96 if (KnowWord(nFontIndex, word)) | 96 if (KnowWord(nFontIndex, word)) |
97 return nFontIndex; | 97 return nFontIndex; |
98 } else { | 98 } else { |
99 if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) { | 99 if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) { |
100 if (nCharset == DEFAULT_CHARSET || pData->nCharset == SYMBOL_CHARSET || | 100 if (nCharset == DEFAULT_CHARSET || pData->nCharset == SYMBOL_CHARSET || |
101 nCharset == pData->nCharset) { | 101 nCharset == pData->nCharset) { |
102 if (KnowWord(0, word)) | 102 if (KnowWord(0, word)) |
103 return 0; | 103 return 0; |
104 } | 104 } |
105 } | 105 } |
106 } | 106 } |
107 | 107 |
108 int32_t nNewFontIndex = | 108 int32_t nNewFontIndex = |
109 GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE); | 109 GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE); |
110 if (nNewFontIndex >= 0) { | 110 if (nNewFontIndex >= 0) { |
111 if (KnowWord(nNewFontIndex, word)) | 111 if (KnowWord(nNewFontIndex, word)) |
112 return nNewFontIndex; | 112 return nNewFontIndex; |
113 } | 113 } |
114 nNewFontIndex = GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE); | 114 nNewFontIndex = GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE); |
115 if (nNewFontIndex >= 0) { | 115 if (nNewFontIndex >= 0) { |
116 if (KnowWord(nNewFontIndex, word)) | 116 if (KnowWord(nNewFontIndex, word)) |
117 return nNewFontIndex; | 117 return nNewFontIndex; |
118 } | 118 } |
119 return -1; | 119 return -1; |
120 } | 120 } |
121 | 121 |
122 int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) { | 122 int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, uint16_t word) { |
123 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { | 123 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { |
124 if (pData->pFont) { | 124 if (pData->pFont) { |
125 if (pData->pFont->IsUnicodeCompatible()) { | 125 if (pData->pFont->IsUnicodeCompatible()) { |
126 int nCharCode = pData->pFont->CharCodeFromUnicode(word); | 126 int nCharCode = pData->pFont->CharCodeFromUnicode(word); |
127 pData->pFont->GlyphFromCharCode(nCharCode); | 127 pData->pFont->GlyphFromCharCode(nCharCode); |
128 return nCharCode; | 128 return nCharCode; |
129 } | 129 } |
130 if (word < 0xFF) | 130 if (word < 0xFF) |
131 return word; | 131 return word; |
132 } | 132 } |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 | 212 |
213 if (!pFont) { | 213 if (!pFont) { |
214 CFX_ByteString sTemp = sFontName; | 214 CFX_ByteString sTemp = sFontName; |
215 pFont = AddFontToDocument(GetDocument(), sTemp, nCharset); | 215 pFont = AddFontToDocument(GetDocument(), sTemp, nCharset); |
216 sAlias = EncodeFontAlias(sTemp, nCharset); | 216 sAlias = EncodeFontAlias(sTemp, nCharset); |
217 } | 217 } |
218 AddedFont(pFont, sAlias); | 218 AddedFont(pFont, sAlias); |
219 return AddFontData(pFont, sAlias, nCharset); | 219 return AddFontData(pFont, sAlias, nCharset); |
220 } | 220 } |
221 | 221 |
222 int32_t CPWL_FontMap::GetPWLFontIndex(FX_WORD word, int32_t nCharset) { | 222 int32_t CPWL_FontMap::GetPWLFontIndex(uint16_t word, int32_t nCharset) { |
223 int32_t nFind = -1; | 223 int32_t nFind = -1; |
224 | 224 |
225 for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) { | 225 for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) { |
226 if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) { | 226 if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) { |
227 if (pData->nCharset == nCharset) { | 227 if (pData->nCharset == nCharset) { |
228 nFind = i; | 228 nFind = i; |
229 break; | 229 break; |
230 } | 230 } |
231 } | 231 } |
232 } | 232 } |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) { | 427 CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) { |
428 int i = 0; | 428 int i = 0; |
429 while (defaultTTFMap[i].charset != -1) { | 429 while (defaultTTFMap[i].charset != -1) { |
430 if (nCharset == defaultTTFMap[i].charset) | 430 if (nCharset == defaultTTFMap[i].charset) |
431 return defaultTTFMap[i].fontname; | 431 return defaultTTFMap[i].fontname; |
432 ++i; | 432 ++i; |
433 } | 433 } |
434 return ""; | 434 return ""; |
435 } | 435 } |
436 | 436 |
437 int32_t CPWL_FontMap::CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) { | 437 int32_t CPWL_FontMap::CharSetFromUnicode(uint16_t word, int32_t nOldCharset) { |
438 if (m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet())) | 438 if (m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet())) |
439 return m_pSystemHandler->GetCharSet(); | 439 return m_pSystemHandler->GetCharSet(); |
440 // to avoid CJK Font to show ASCII | 440 // to avoid CJK Font to show ASCII |
441 if (word < 0x7F) | 441 if (word < 0x7F) |
442 return ANSI_CHARSET; | 442 return ANSI_CHARSET; |
443 // follow the old charset | 443 // follow the old charset |
444 if (nOldCharset != DEFAULT_CHARSET) | 444 if (nOldCharset != DEFAULT_CHARSET) |
445 return nOldCharset; | 445 return nOldCharset; |
446 | 446 |
447 // find new charset | 447 // find new charset |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 | 491 |
492 CPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, | 492 CPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, |
493 CPDF_Document* pAttachedDoc) | 493 CPDF_Document* pAttachedDoc) |
494 : CPWL_FontMap(pSystemHandler), m_pAttachedDoc(pAttachedDoc) {} | 494 : CPWL_FontMap(pSystemHandler), m_pAttachedDoc(pAttachedDoc) {} |
495 | 495 |
496 CPWL_DocFontMap::~CPWL_DocFontMap() {} | 496 CPWL_DocFontMap::~CPWL_DocFontMap() {} |
497 | 497 |
498 CPDF_Document* CPWL_DocFontMap::GetDocument() { | 498 CPDF_Document* CPWL_DocFontMap::GetDocument() { |
499 return m_pAttachedDoc; | 499 return m_pAttachedDoc; |
500 } | 500 } |
OLD | NEW |