| 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 "../../include/pdfwindow/PDFWindow.h" | 7 #include "../../include/pdfwindow/PDFWindow.h" |
| 8 #include "../../include/pdfwindow/PWL_Wnd.h" | 8 #include "../../include/pdfwindow/PWL_Wnd.h" |
| 9 #include "../../include/pdfwindow/PWL_FontMap.h" | 9 #include "../../include/pdfwindow/PWL_FontMap.h" |
| 10 | 10 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 if (CPDF_ModuleMgr::Get()) | 42 if (CPDF_ModuleMgr::Get()) |
| 43 { | 43 { |
| 44 m_pPDFDoc = new CPDF_Document; | 44 m_pPDFDoc = new CPDF_Document; |
| 45 m_pPDFDoc->CreateNewDoc(); | 45 m_pPDFDoc->CreateNewDoc(); |
| 46 } | 46 } |
| 47 } | 47 } |
| 48 | 48 |
| 49 return m_pPDFDoc; | 49 return m_pPDFDoc; |
| 50 } | 50 } |
| 51 | 51 |
| 52 CPDF_Font* CPWL_FontMap::GetPDFFont(FX_INT32 nFontIndex) | 52 CPDF_Font* CPWL_FontMap::GetPDFFont(int32_t nFontIndex) |
| 53 { | 53 { |
| 54 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) | 54 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) |
| 55 { | 55 { |
| 56 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) | 56 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) |
| 57 { | 57 { |
| 58 return pData->pFont; | 58 return pData->pFont; |
| 59 } | 59 } |
| 60 } | 60 } |
| 61 | 61 |
| 62 return NULL; | 62 return NULL; |
| 63 } | 63 } |
| 64 | 64 |
| 65 CFX_ByteString CPWL_FontMap::GetPDFFontAlias(FX_INT32 nFontIndex) | 65 CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) |
| 66 { | 66 { |
| 67 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) | 67 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) |
| 68 { | 68 { |
| 69 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) | 69 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) |
| 70 { | 70 { |
| 71 return pData->sFontName; | 71 return pData->sFontName; |
| 72 } | 72 } |
| 73 } | 73 } |
| 74 | 74 |
| 75 return ""; | 75 return ""; |
| 76 } | 76 } |
| 77 | 77 |
| 78 FX_BOOL CPWL_FontMap::KnowWord(FX_INT32 nFontIndex, FX_WORD word) | 78 FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, FX_WORD word) |
| 79 { | 79 { |
| 80 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) | 80 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) |
| 81 { | 81 { |
| 82 if (m_aData.GetAt(nFontIndex)) | 82 if (m_aData.GetAt(nFontIndex)) |
| 83 { | 83 { |
| 84 return CharCodeFromUnicode(nFontIndex, word) >= 0; | 84 return CharCodeFromUnicode(nFontIndex, word) >= 0; |
| 85 } | 85 } |
| 86 } | 86 } |
| 87 | 87 |
| 88 return FALSE; | 88 return FALSE; |
| 89 } | 89 } |
| 90 | 90 |
| 91 FX_INT32 CPWL_FontMap::GetWordFontIndex(FX_WORD word, FX_INT32 nCharset, FX_INT3
2 nFontIndex) | 91 int32_t CPWL_FontMap::GetWordFontIndex(FX_WORD word, int32_t nCharset, int32_t n
FontIndex) |
| 92 { | 92 { |
| 93 if (nFontIndex > 0) | 93 if (nFontIndex > 0) |
| 94 { | 94 { |
| 95 if (KnowWord(nFontIndex, word)) | 95 if (KnowWord(nFontIndex, word)) |
| 96 return nFontIndex; | 96 return nFontIndex; |
| 97 } | 97 } |
| 98 else | 98 else |
| 99 { | 99 { |
| 100 if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) | 100 if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) |
| 101 { | 101 { |
| 102 if (nCharset == DEFAULT_CHARSET || | 102 if (nCharset == DEFAULT_CHARSET || |
| 103 pData->nCharset == SYMBOL_CHARSET || | 103 pData->nCharset == SYMBOL_CHARSET || |
| 104 nCharset == pData->nCharset) | 104 nCharset == pData->nCharset) |
| 105 { | 105 { |
| 106 if (KnowWord(0, word)) | 106 if (KnowWord(0, word)) |
| 107 { | 107 { |
| 108 return 0; | 108 return 0; |
| 109 } | 109 } |
| 110 } | 110 } |
| 111 } | 111 } |
| 112 } | 112 } |
| 113 | 113 |
| 114 » FX_INT32 nNewFontIndex = -1; | 114 » int32_t nNewFontIndex = -1; |
| 115 | 115 |
| 116 nNewFontIndex = this->GetFontIndex(GetNativeFontName(nCharset), nCharset
, TRUE); | 116 nNewFontIndex = this->GetFontIndex(GetNativeFontName(nCharset), nCharset
, TRUE); |
| 117 if (nNewFontIndex >= 0) | 117 if (nNewFontIndex >= 0) |
| 118 { | 118 { |
| 119 if (KnowWord(nNewFontIndex, word)) | 119 if (KnowWord(nNewFontIndex, word)) |
| 120 return nNewFontIndex; | 120 return nNewFontIndex; |
| 121 } | 121 } |
| 122 | 122 |
| 123 nNewFontIndex = this->GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET,
FALSE); | 123 nNewFontIndex = this->GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET,
FALSE); |
| 124 if (nNewFontIndex >= 0) | 124 if (nNewFontIndex >= 0) |
| 125 { | 125 { |
| 126 if (KnowWord(nNewFontIndex, word)) | 126 if (KnowWord(nNewFontIndex, word)) |
| 127 return nNewFontIndex; | 127 return nNewFontIndex; |
| 128 } | 128 } |
| 129 | 129 |
| 130 return -1; | 130 return -1; |
| 131 } | 131 } |
| 132 | 132 |
| 133 FX_INT32 CPWL_FontMap::CharCodeFromUnicode(FX_INT32 nFontIndex, FX_WORD word) | 133 int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) |
| 134 { | 134 { |
| 135 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) | 135 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) |
| 136 { | 136 { |
| 137 if (pData->pFont) | 137 if (pData->pFont) |
| 138 { | 138 { |
| 139 if (pData->pFont->IsUnicodeCompatible()) | 139 if (pData->pFont->IsUnicodeCompatible()) |
| 140 { | 140 { |
| 141 int nCharCode = pData->pFont->CharCodeFromUnicod
e(word); | 141 int nCharCode = pData->pFont->CharCodeFromUnicod
e(word); |
| 142 pData->pFont->GlyphFromCharCode(nCharCode); | 142 pData->pFont->GlyphFromCharCode(nCharCode); |
| 143 return nCharCode; | 143 return nCharCode; |
| 144 } | 144 } |
| 145 else | 145 else |
| 146 { | 146 { |
| 147 if (word < 0xFF) | 147 if (word < 0xFF) |
| 148 return word; | 148 return word; |
| 149 } | 149 } |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 | 152 |
| 153 return -1; | 153 return -1; |
| 154 } | 154 } |
| 155 | 155 |
| 156 CFX_ByteString CPWL_FontMap::GetNativeFontName(FX_INT32 nCharset) | 156 CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) |
| 157 { | 157 { |
| 158 //searching native font is slow, so we must save time | 158 //searching native font is slow, so we must save time |
| 159 » for (FX_INT32 i=0,sz=m_aNativeFont.GetSize(); i<sz; i++) | 159 » for (int32_t i=0,sz=m_aNativeFont.GetSize(); i<sz; i++) |
| 160 { | 160 { |
| 161 if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i)) | 161 if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i)) |
| 162 { | 162 { |
| 163 if (pData->nCharset == nCharset) | 163 if (pData->nCharset == nCharset) |
| 164 return pData->sFontName; | 164 return pData->sFontName; |
| 165 } | 165 } |
| 166 } | 166 } |
| 167 | 167 |
| 168 CFX_ByteString sNew = GetNativeFont(nCharset); | 168 CFX_ByteString sNew = GetNativeFont(nCharset); |
| 169 | 169 |
| 170 if (!sNew.IsEmpty()) | 170 if (!sNew.IsEmpty()) |
| 171 { | 171 { |
| 172 CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native; | 172 CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native; |
| 173 pNewData->nCharset = nCharset; | 173 pNewData->nCharset = nCharset; |
| 174 pNewData->sFontName = sNew; | 174 pNewData->sFontName = sNew; |
| 175 | 175 |
| 176 m_aNativeFont.Add(pNewData); | 176 m_aNativeFont.Add(pNewData); |
| 177 } | 177 } |
| 178 | 178 |
| 179 return sNew; | 179 return sNew; |
| 180 } | 180 } |
| 181 | 181 |
| 182 void CPWL_FontMap::Empty() | 182 void CPWL_FontMap::Empty() |
| 183 { | 183 { |
| 184 { | 184 { |
| 185 » » for (FX_INT32 i=0, sz=m_aData.GetSize(); i<sz; i++) | 185 » » for (int32_t i=0, sz=m_aData.GetSize(); i<sz; i++) |
| 186 delete m_aData.GetAt(i); | 186 delete m_aData.GetAt(i); |
| 187 | 187 |
| 188 m_aData.RemoveAll(); | 188 m_aData.RemoveAll(); |
| 189 } | 189 } |
| 190 { | 190 { |
| 191 » » for (FX_INT32 i=0, sz=m_aNativeFont.GetSize(); i<sz; i++) | 191 » » for (int32_t i=0, sz=m_aNativeFont.GetSize(); i<sz; i++) |
| 192 delete m_aNativeFont.GetAt(i); | 192 delete m_aNativeFont.GetAt(i); |
| 193 | 193 |
| 194 m_aNativeFont.RemoveAll(); | 194 m_aNativeFont.RemoveAll(); |
| 195 } | 195 } |
| 196 } | 196 } |
| 197 | 197 |
| 198 void CPWL_FontMap::Initial(FX_LPCSTR fontname) | 198 void CPWL_FontMap::Initial(FX_LPCSTR fontname) |
| 199 { | 199 { |
| 200 CFX_ByteString sFontName = fontname; | 200 CFX_ByteString sFontName = fontname; |
| 201 | 201 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 216 Symbol, ZapfDingbats | 216 Symbol, ZapfDingbats |
| 217 */ | 217 */ |
| 218 | 218 |
| 219 const char* g_sDEStandardFontName[] = {"Courier", "Courier-Bold", "Courier-BoldO
blique", "Courier-Oblique", | 219 const char* g_sDEStandardFontName[] = {"Courier", "Courier-Bold", "Courier-BoldO
blique", "Courier-Oblique", |
| 220 "Helvetica", "Helvetica-Bold", "Helvetica-BoldOblique", "Helvetica-Obliq
ue", | 220 "Helvetica", "Helvetica-Bold", "Helvetica-BoldOblique", "Helvetica-Obliq
ue", |
| 221 "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", | 221 "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", |
| 222 "Symbol", "ZapfDingbats"}; | 222 "Symbol", "ZapfDingbats"}; |
| 223 | 223 |
| 224 FX_BOOL CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName) | 224 FX_BOOL CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName) |
| 225 { | 225 { |
| 226 » for (FX_INT32 i=0; i<14; i++) | 226 » for (int32_t i=0; i<14; i++) |
| 227 { | 227 { |
| 228 if (sFontName == g_sDEStandardFontName[i]) | 228 if (sFontName == g_sDEStandardFontName[i]) |
| 229 return TRUE; | 229 return TRUE; |
| 230 } | 230 } |
| 231 | 231 |
| 232 return FALSE; | 232 return FALSE; |
| 233 } | 233 } |
| 234 | 234 |
| 235 FX_INT32 CPWL_FontMap::FindFont(const CFX_ByteString& sFontName, FX_INT32 nChars
et) | 235 int32_t CPWL_FontMap::FindFont(const CFX_ByteString& sFontName, int32_t nCharset
) |
| 236 { | 236 { |
| 237 » for (FX_INT32 i=0,sz=m_aData.GetSize(); i<sz; i++) | 237 » for (int32_t i=0,sz=m_aData.GetSize(); i<sz; i++) |
| 238 { | 238 { |
| 239 if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) | 239 if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) |
| 240 { | 240 { |
| 241 if (nCharset == DEFAULT_CHARSET || nCharset == pData->nC
harset) | 241 if (nCharset == DEFAULT_CHARSET || nCharset == pData->nC
harset) |
| 242 { | 242 { |
| 243 if (sFontName.IsEmpty() || pData->sFontName == s
FontName) | 243 if (sFontName.IsEmpty() || pData->sFontName == s
FontName) |
| 244 return i; | 244 return i; |
| 245 } | 245 } |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 | 248 |
| 249 return -1; | 249 return -1; |
| 250 } | 250 } |
| 251 | 251 |
| 252 FX_INT32 CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName, FX_INT32 nC
harset, FX_BOOL bFind) | 252 int32_t CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName, int32_t nCha
rset, FX_BOOL bFind) |
| 253 { | 253 { |
| 254 » FX_INT32 nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCh
arset); | 254 » int32_t nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCha
rset); |
| 255 if (nFontIndex >= 0) return nFontIndex; | 255 if (nFontIndex >= 0) return nFontIndex; |
| 256 | 256 |
| 257 // nFontIndex = FindFont("", nCharset); | 257 // nFontIndex = FindFont("", nCharset); |
| 258 // if (nFontIndex >= 0) return nFontIndex; | 258 // if (nFontIndex >= 0) return nFontIndex; |
| 259 | 259 |
| 260 CFX_ByteString sAlias; | 260 CFX_ByteString sAlias; |
| 261 CPDF_Font* pFont = NULL; | 261 CPDF_Font* pFont = NULL; |
| 262 | 262 |
| 263 if (bFind) | 263 if (bFind) |
| 264 pFont = FindFontSameCharset(sAlias, nCharset); | 264 pFont = FindFontSameCharset(sAlias, nCharset); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 278 { | 278 { |
| 279 sAlias = EncodeFontAlias(sTemp, nCharset); | 279 sAlias = EncodeFontAlias(sTemp, nCharset); |
| 280 } | 280 } |
| 281 } | 281 } |
| 282 | 282 |
| 283 AddedFont(pFont, sAlias); | 283 AddedFont(pFont, sAlias); |
| 284 | 284 |
| 285 return AddFontData(pFont, sAlias, nCharset); | 285 return AddFontData(pFont, sAlias, nCharset); |
| 286 } | 286 } |
| 287 | 287 |
| 288 FX_INT32 CPWL_FontMap::GetPWLFontIndex(FX_WORD word, FX_INT32 nCharset) | 288 int32_t CPWL_FontMap::GetPWLFontIndex(FX_WORD word, int32_t nCharset) |
| 289 { | 289 { |
| 290 » FX_INT32 nFind = -1; | 290 » int32_t nFind = -1; |
| 291 | 291 |
| 292 » for (FX_INT32 i=0,sz=m_aData.GetSize(); i<sz; i++) | 292 » for (int32_t i=0,sz=m_aData.GetSize(); i<sz; i++) |
| 293 { | 293 { |
| 294 if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) | 294 if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) |
| 295 { | 295 { |
| 296 if (pData->nCharset == nCharset) | 296 if (pData->nCharset == nCharset) |
| 297 { | 297 { |
| 298 nFind = i; | 298 nFind = i; |
| 299 break; | 299 break; |
| 300 } | 300 } |
| 301 } | 301 } |
| 302 } | 302 } |
| 303 | 303 |
| 304 CPDF_Font* pNewFont = GetPDFFont(nFind); | 304 CPDF_Font* pNewFont = GetPDFFont(nFind); |
| 305 | 305 |
| 306 if (!pNewFont) return -1; | 306 if (!pNewFont) return -1; |
| 307 | 307 |
| 308 /* | 308 /* |
| 309 if (CPDF_Font* pFont = GetPDFFont(nFind)) | 309 if (CPDF_Font* pFont = GetPDFFont(nFind)) |
| 310 { | 310 { |
| 311 PWLFont.AddWordToFontDict(pFontDict, word); | 311 PWLFont.AddWordToFontDict(pFontDict, word); |
| 312 } | 312 } |
| 313 */ | 313 */ |
| 314 | 314 |
| 315 CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset); | 315 CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset); |
| 316 AddedFont(pNewFont, sAlias); | 316 AddedFont(pNewFont, sAlias); |
| 317 | 317 |
| 318 return AddFontData(pNewFont, sAlias, nCharset); | 318 return AddFontData(pNewFont, sAlias, nCharset); |
| 319 } | 319 } |
| 320 | 320 |
| 321 CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, FX_INT3
2 nCharset) | 321 CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t
nCharset) |
| 322 { | 322 { |
| 323 return NULL; | 323 return NULL; |
| 324 } | 324 } |
| 325 | 325 |
| 326 FX_INT32 CPWL_FontMap::AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFont
Alias, FX_INT32 nCharset) | 326 int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontA
lias, int32_t nCharset) |
| 327 { | 327 { |
| 328 CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data; | 328 CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data; |
| 329 pNewData->pFont = pFont; | 329 pNewData->pFont = pFont; |
| 330 pNewData->sFontName = sFontAlias; | 330 pNewData->sFontName = sFontAlias; |
| 331 pNewData->nCharset = nCharset; | 331 pNewData->nCharset = nCharset; |
| 332 | 332 |
| 333 m_aData.Add(pNewData); | 333 m_aData.Add(pNewData); |
| 334 | 334 |
| 335 return m_aData.GetSize() -1; | 335 return m_aData.GetSize() -1; |
| 336 } | 336 } |
| 337 | 337 |
| 338 void CPWL_FontMap::AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias) | 338 void CPWL_FontMap::AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias) |
| 339 { | 339 { |
| 340 } | 340 } |
| 341 | 341 |
| 342 CFX_ByteString CPWL_FontMap::GetFontName(FX_INT32 nFontIndex) | 342 CFX_ByteString CPWL_FontMap::GetFontName(int32_t nFontIndex) |
| 343 { | 343 { |
| 344 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) | 344 if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) |
| 345 { | 345 { |
| 346 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) | 346 if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) |
| 347 { | 347 { |
| 348 return pData->sFontName; | 348 return pData->sFontName; |
| 349 } | 349 } |
| 350 } | 350 } |
| 351 | 351 |
| 352 return ""; | 352 return ""; |
| 353 } | 353 } |
| 354 | 354 |
| 355 CFX_ByteString CPWL_FontMap::GetNativeFont(FX_INT32 nCharset) | 355 CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) |
| 356 { | 356 { |
| 357 CFX_ByteString sFontName; | 357 CFX_ByteString sFontName; |
| 358 | 358 |
| 359 if (nCharset == DEFAULT_CHARSET) | 359 if (nCharset == DEFAULT_CHARSET) |
| 360 nCharset = GetNativeCharset(); | 360 nCharset = GetNativeCharset(); |
| 361 | 361 |
| 362 sFontName = GetDefaultFontByCharset(nCharset); | 362 sFontName = GetDefaultFontByCharset(nCharset); |
| 363 | 363 |
| 364 if (m_pSystemHandler) | 364 if (m_pSystemHandler) |
| 365 { | 365 { |
| 366 if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName
)) | 366 if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName
)) |
| 367 return sFontName; | 367 return sFontName; |
| 368 | 368 |
| 369 sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset); | 369 sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset); |
| 370 } | 370 } |
| 371 | 371 |
| 372 return sFontName; | 372 return sFontName; |
| 373 } | 373 } |
| 374 | 374 |
| 375 CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString&
sFontName, FX_BYTE nCharset) | 375 CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString&
sFontName, uint8_t nCharset) |
| 376 { | 376 { |
| 377 if (IsStandardFont(sFontName)) | 377 if (IsStandardFont(sFontName)) |
| 378 return AddStandardFont(pDoc, sFontName); | 378 return AddStandardFont(pDoc, sFontName); |
| 379 else | 379 else |
| 380 return AddSystemFont(pDoc, sFontName, nCharset); | 380 return AddSystemFont(pDoc, sFontName, nCharset); |
| 381 } | 381 } |
| 382 | 382 |
| 383 CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sF
ontName) | 383 CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sF
ontName) |
| 384 { | 384 { |
| 385 if (!pDoc) return NULL; | 385 if (!pDoc) return NULL; |
| 386 | 386 |
| 387 CPDF_Font* pFont = NULL; | 387 CPDF_Font* pFont = NULL; |
| 388 | 388 |
| 389 if (sFontName == "ZapfDingbats") | 389 if (sFontName == "ZapfDingbats") |
| 390 pFont = pDoc->AddStandardFont(sFontName, NULL); | 390 pFont = pDoc->AddStandardFont(sFontName, NULL); |
| 391 else | 391 else |
| 392 { | 392 { |
| 393 CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI); | 393 CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI); |
| 394 pFont = pDoc->AddStandardFont(sFontName, &fe); | 394 pFont = pDoc->AddStandardFont(sFontName, &fe); |
| 395 } | 395 } |
| 396 | 396 |
| 397 return pFont; | 397 return pFont; |
| 398 } | 398 } |
| 399 | 399 |
| 400 CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFon
tName, FX_BYTE nCharset) | 400 CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFon
tName, uint8_t nCharset) |
| 401 { | 401 { |
| 402 if (!pDoc) return NULL; | 402 if (!pDoc) return NULL; |
| 403 | 403 |
| 404 if (sFontName.IsEmpty()) sFontName = GetNativeFont(nCharset); | 404 if (sFontName.IsEmpty()) sFontName = GetNativeFont(nCharset); |
| 405 if (nCharset == DEFAULT_CHARSET) nCharset = GetNativeCharset(); | 405 if (nCharset == DEFAULT_CHARSET) nCharset = GetNativeCharset(); |
| 406 | 406 |
| 407 if (m_pSystemHandler) | 407 if (m_pSystemHandler) |
| 408 return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontN
ame, nCharset); | 408 return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontN
ame, nCharset); |
| 409 | 409 |
| 410 return NULL; | 410 return NULL; |
| 411 } | 411 } |
| 412 | 412 |
| 413 CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName, FX
_INT32 nCharset) | 413 CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName, in
t32_t nCharset) |
| 414 { | 414 { |
| 415 CFX_ByteString sPostfix; | 415 CFX_ByteString sPostfix; |
| 416 sPostfix.Format("_%02X", nCharset); | 416 sPostfix.Format("_%02X", nCharset); |
| 417 return EncodeFontAlias(sFontName) + sPostfix; | 417 return EncodeFontAlias(sFontName) + sPostfix; |
| 418 } | 418 } |
| 419 | 419 |
| 420 CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) | 420 CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) |
| 421 { | 421 { |
| 422 CFX_ByteString sRet = sFontName; | 422 CFX_ByteString sRet = sFontName; |
| 423 sRet.Remove(' '); | 423 sRet.Remove(' '); |
| 424 return sRet; | 424 return sRet; |
| 425 } | 425 } |
| 426 | 426 |
| 427 FX_INT32 CPWL_FontMap::GetFontMapCount() const | 427 int32_t CPWL_FontMap::GetFontMapCount() const |
| 428 { | 428 { |
| 429 return m_aData.GetSize(); | 429 return m_aData.GetSize(); |
| 430 } | 430 } |
| 431 | 431 |
| 432 const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(FX_INT32 nIndex) const | 432 const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(int32_t nIndex) const |
| 433 { | 433 { |
| 434 if (nIndex >=0 && nIndex < m_aData.GetSize()) | 434 if (nIndex >=0 && nIndex < m_aData.GetSize()) |
| 435 { | 435 { |
| 436 return m_aData.GetAt(nIndex); | 436 return m_aData.GetAt(nIndex); |
| 437 } | 437 } |
| 438 | 438 |
| 439 return NULL; | 439 return NULL; |
| 440 } | 440 } |
| 441 | 441 |
| 442 FX_INT32 CPWL_FontMap::GetNativeCharset() | 442 int32_t CPWL_FontMap::GetNativeCharset() |
| 443 { | 443 { |
| 444 » FX_BYTE nCharset = ANSI_CHARSET; | 444 » uint8_t nCharset = ANSI_CHARSET; |
| 445 » FX_INT32 iCodePage = FXSYS_GetACP(); | 445 » int32_t iCodePage = FXSYS_GetACP(); |
| 446 switch (iCodePage) | 446 switch (iCodePage) |
| 447 { | 447 { |
| 448 case 932://Japan | 448 case 932://Japan |
| 449 nCharset = SHIFTJIS_CHARSET; | 449 nCharset = SHIFTJIS_CHARSET; |
| 450 break; | 450 break; |
| 451 case 936://Chinese (PRC, Singapore) | 451 case 936://Chinese (PRC, Singapore) |
| 452 nCharset = GB2312_CHARSET; | 452 nCharset = GB2312_CHARSET; |
| 453 break; | 453 break; |
| 454 case 950://Chinese (Taiwan; Hong Kong SAR, PRC) | 454 case 950://Chinese (Taiwan; Hong Kong SAR, PRC) |
| 455 nCharset = GB2312_CHARSET; | 455 nCharset = GB2312_CHARSET; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 { RUSSIAN_CHARSET, "Arial" }, | 506 { RUSSIAN_CHARSET, "Arial" }, |
| 507 #if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_AP
PLE_ | 507 #if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_AP
PLE_ |
| 508 { EASTEUROPE_CHARSET, "Arial" }, | 508 { EASTEUROPE_CHARSET, "Arial" }, |
| 509 #else | 509 #else |
| 510 { EASTEUROPE_CHARSET, "Tahoma" }, | 510 { EASTEUROPE_CHARSET, "Tahoma" }, |
| 511 #endif | 511 #endif |
| 512 { ARABIC_CHARSET, "Arial" }, | 512 { ARABIC_CHARSET, "Arial" }, |
| 513 { -1, NULL } | 513 { -1, NULL } |
| 514 }; | 514 }; |
| 515 | 515 |
| 516 CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(FX_INT32 nCharset) | 516 CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) |
| 517 { | 517 { |
| 518 int i = 0; | 518 int i = 0; |
| 519 while (defaultTTFMap[i].charset != -1) { | 519 while (defaultTTFMap[i].charset != -1) { |
| 520 if (nCharset == defaultTTFMap[i].charset) | 520 if (nCharset == defaultTTFMap[i].charset) |
| 521 return defaultTTFMap[i].fontname; | 521 return defaultTTFMap[i].fontname; |
| 522 ++i; | 522 ++i; |
| 523 } | 523 } |
| 524 return ""; | 524 return ""; |
| 525 } | 525 } |
| 526 | 526 |
| 527 FX_INT32 CPWL_FontMap::CharSetFromUnicode(FX_WORD word, FX_INT32 nOldCharset) | 527 int32_t CPWL_FontMap::CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) |
| 528 { | 528 { |
| 529 if(m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet())) | 529 if(m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet())) |
| 530 return m_pSystemHandler->GetCharSet(); | 530 return m_pSystemHandler->GetCharSet(); |
| 531 //to avoid CJK Font to show ASCII | 531 //to avoid CJK Font to show ASCII |
| 532 if (word < 0x7F) return ANSI_CHARSET; | 532 if (word < 0x7F) return ANSI_CHARSET; |
| 533 //follow the old charset | 533 //follow the old charset |
| 534 if (nOldCharset != DEFAULT_CHARSET) return nOldCharset; | 534 if (nOldCharset != DEFAULT_CHARSET) return nOldCharset; |
| 535 | 535 |
| 536 //find new charset | 536 //find new charset |
| 537 if ((word >= 0x4E00 && word <= 0x9FA5) || | 537 if ((word >= 0x4E00 && word <= 0x9FA5) || |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 } | 592 } |
| 593 | 593 |
| 594 CPWL_DocFontMap::~CPWL_DocFontMap() | 594 CPWL_DocFontMap::~CPWL_DocFontMap() |
| 595 { | 595 { |
| 596 } | 596 } |
| 597 | 597 |
| 598 CPDF_Document* CPWL_DocFontMap::GetDocument() | 598 CPDF_Document* CPWL_DocFontMap::GetDocument() |
| 599 { | 599 { |
| 600 return m_pAttachedDoc; | 600 return m_pAttachedDoc; |
| 601 } | 601 } |
| OLD | NEW |