Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: core/fpdfapi/fpdf_font/cpdf_font.cpp

Issue 2334323005: Rename dictionary set and get methods (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fpdfapi/fpdf_font/cpdf_cidfont.cpp ('k') | core/fpdfapi/fpdf_font/cpdf_fontencoding.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 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 "core/fpdfapi/fpdf_font/include/cpdf_font.h" 7 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h"
8 8
9 #include <memory> 9 #include <memory>
10 #include <vector> 10 #include <vector>
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 } 156 }
157 157
158 uint32_t CPDF_Font::CharCodeFromUnicode(FX_WCHAR unicode) const { 158 uint32_t CPDF_Font::CharCodeFromUnicode(FX_WCHAR unicode) const {
159 if (!m_bToUnicodeLoaded) 159 if (!m_bToUnicodeLoaded)
160 LoadUnicodeMap(); 160 LoadUnicodeMap();
161 161
162 return m_pToUnicodeMap ? m_pToUnicodeMap->ReverseLookup(unicode) : 0; 162 return m_pToUnicodeMap ? m_pToUnicodeMap->ReverseLookup(unicode) : 0;
163 } 163 }
164 164
165 void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) { 165 void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) {
166 m_Flags = pFontDesc->GetIntegerBy("Flags", PDFFONT_NONSYMBOLIC); 166 m_Flags = pFontDesc->GetIntegerFor("Flags", PDFFONT_NONSYMBOLIC);
167 int ItalicAngle = 0; 167 int ItalicAngle = 0;
168 FX_BOOL bExistItalicAngle = FALSE; 168 FX_BOOL bExistItalicAngle = FALSE;
169 if (pFontDesc->KeyExist("ItalicAngle")) { 169 if (pFontDesc->KeyExist("ItalicAngle")) {
170 ItalicAngle = pFontDesc->GetIntegerBy("ItalicAngle"); 170 ItalicAngle = pFontDesc->GetIntegerFor("ItalicAngle");
171 bExistItalicAngle = TRUE; 171 bExistItalicAngle = TRUE;
172 } 172 }
173 if (ItalicAngle < 0) { 173 if (ItalicAngle < 0) {
174 m_Flags |= PDFFONT_ITALIC; 174 m_Flags |= PDFFONT_ITALIC;
175 m_ItalicAngle = ItalicAngle; 175 m_ItalicAngle = ItalicAngle;
176 } 176 }
177 FX_BOOL bExistStemV = FALSE; 177 FX_BOOL bExistStemV = FALSE;
178 if (pFontDesc->KeyExist("StemV")) { 178 if (pFontDesc->KeyExist("StemV")) {
179 m_StemV = pFontDesc->GetIntegerBy("StemV"); 179 m_StemV = pFontDesc->GetIntegerFor("StemV");
180 bExistStemV = TRUE; 180 bExistStemV = TRUE;
181 } 181 }
182 FX_BOOL bExistAscent = FALSE; 182 FX_BOOL bExistAscent = FALSE;
183 if (pFontDesc->KeyExist("Ascent")) { 183 if (pFontDesc->KeyExist("Ascent")) {
184 m_Ascent = pFontDesc->GetIntegerBy("Ascent"); 184 m_Ascent = pFontDesc->GetIntegerFor("Ascent");
185 bExistAscent = TRUE; 185 bExistAscent = TRUE;
186 } 186 }
187 FX_BOOL bExistDescent = FALSE; 187 FX_BOOL bExistDescent = FALSE;
188 if (pFontDesc->KeyExist("Descent")) { 188 if (pFontDesc->KeyExist("Descent")) {
189 m_Descent = pFontDesc->GetIntegerBy("Descent"); 189 m_Descent = pFontDesc->GetIntegerFor("Descent");
190 bExistDescent = TRUE; 190 bExistDescent = TRUE;
191 } 191 }
192 FX_BOOL bExistCapHeight = FALSE; 192 FX_BOOL bExistCapHeight = FALSE;
193 if (pFontDesc->KeyExist("CapHeight")) { 193 if (pFontDesc->KeyExist("CapHeight")) {
194 bExistCapHeight = TRUE; 194 bExistCapHeight = TRUE;
195 } 195 }
196 if (bExistItalicAngle && bExistAscent && bExistCapHeight && bExistDescent && 196 if (bExistItalicAngle && bExistAscent && bExistCapHeight && bExistDescent &&
197 bExistStemV) { 197 bExistStemV) {
198 m_Flags |= PDFFONT_USEEXTERNATTR; 198 m_Flags |= PDFFONT_USEEXTERNATTR;
199 } 199 }
200 if (m_Descent > 10) { 200 if (m_Descent > 10) {
201 m_Descent = -m_Descent; 201 m_Descent = -m_Descent;
202 } 202 }
203 CPDF_Array* pBBox = pFontDesc->GetArrayBy("FontBBox"); 203 CPDF_Array* pBBox = pFontDesc->GetArrayFor("FontBBox");
204 if (pBBox) { 204 if (pBBox) {
205 m_FontBBox.left = pBBox->GetIntegerAt(0); 205 m_FontBBox.left = pBBox->GetIntegerAt(0);
206 m_FontBBox.bottom = pBBox->GetIntegerAt(1); 206 m_FontBBox.bottom = pBBox->GetIntegerAt(1);
207 m_FontBBox.right = pBBox->GetIntegerAt(2); 207 m_FontBBox.right = pBBox->GetIntegerAt(2);
208 m_FontBBox.top = pBBox->GetIntegerAt(3); 208 m_FontBBox.top = pBBox->GetIntegerAt(3);
209 } 209 }
210 210
211 CPDF_Stream* pFontFile = pFontDesc->GetStreamBy("FontFile"); 211 CPDF_Stream* pFontFile = pFontDesc->GetStreamFor("FontFile");
212 if (!pFontFile) 212 if (!pFontFile)
213 pFontFile = pFontDesc->GetStreamBy("FontFile2"); 213 pFontFile = pFontDesc->GetStreamFor("FontFile2");
214 if (!pFontFile) 214 if (!pFontFile)
215 pFontFile = pFontDesc->GetStreamBy("FontFile3"); 215 pFontFile = pFontDesc->GetStreamFor("FontFile3");
216 if (!pFontFile) 216 if (!pFontFile)
217 return; 217 return;
218 218
219 m_pFontFile = m_pDocument->LoadFontFile(pFontFile); 219 m_pFontFile = m_pDocument->LoadFontFile(pFontFile);
220 if (!m_pFontFile) 220 if (!m_pFontFile)
221 return; 221 return;
222 222
223 const uint8_t* pFontData = m_pFontFile->GetData(); 223 const uint8_t* pFontData = m_pFontFile->GetData();
224 uint32_t dwFontSize = m_pFontFile->GetSize(); 224 uint32_t dwFontSize = m_pFontFile->GetSize();
225 if (!m_Font.LoadEmbedded(pFontData, dwFontSize)) { 225 if (!m_Font.LoadEmbedded(pFontData, dwFontSize)) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 if (m_Ascent == 0 && m_Descent == 0) { 270 if (m_Ascent == 0 && m_Descent == 0) {
271 FX_RECT rect = GetCharBBox('A'); 271 FX_RECT rect = GetCharBBox('A');
272 m_Ascent = rect.bottom == rect.top ? m_FontBBox.top : rect.top; 272 m_Ascent = rect.bottom == rect.top ? m_FontBBox.top : rect.top;
273 rect = GetCharBBox('g'); 273 rect = GetCharBBox('g');
274 m_Descent = rect.bottom == rect.top ? m_FontBBox.bottom : rect.bottom; 274 m_Descent = rect.bottom == rect.top ? m_FontBBox.bottom : rect.bottom;
275 } 275 }
276 } 276 }
277 277
278 void CPDF_Font::LoadUnicodeMap() const { 278 void CPDF_Font::LoadUnicodeMap() const {
279 m_bToUnicodeLoaded = TRUE; 279 m_bToUnicodeLoaded = TRUE;
280 CPDF_Stream* pStream = m_pFontDict->GetStreamBy("ToUnicode"); 280 CPDF_Stream* pStream = m_pFontDict->GetStreamFor("ToUnicode");
281 if (!pStream) { 281 if (!pStream) {
282 return; 282 return;
283 } 283 }
284 m_pToUnicodeMap.reset(new CPDF_ToUnicodeMap); 284 m_pToUnicodeMap.reset(new CPDF_ToUnicodeMap);
285 m_pToUnicodeMap->Load(pStream); 285 m_pToUnicodeMap->Load(pStream);
286 } 286 }
287 287
288 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) { 288 int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) {
289 int offset = 0; 289 int offset = 0;
290 int width = 0; 290 int width = 0;
(...skipping 11 matching lines...) Expand all
302 if (font_id < 0) { 302 if (font_id < 0) {
303 return nullptr; 303 return nullptr;
304 } 304 }
305 CPDF_FontGlobals* pFontGlobals = 305 CPDF_FontGlobals* pFontGlobals =
306 CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals(); 306 CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
307 CPDF_Font* pFont = pFontGlobals->Find(pDoc, font_id); 307 CPDF_Font* pFont = pFontGlobals->Find(pDoc, font_id);
308 if (pFont) { 308 if (pFont) {
309 return pFont; 309 return pFont;
310 } 310 }
311 CPDF_Dictionary* pDict = new CPDF_Dictionary; 311 CPDF_Dictionary* pDict = new CPDF_Dictionary;
312 pDict->SetAtName("Type", "Font"); 312 pDict->SetNameFor("Type", "Font");
313 pDict->SetAtName("Subtype", "Type1"); 313 pDict->SetNameFor("Subtype", "Type1");
314 pDict->SetAtName("BaseFont", fontname); 314 pDict->SetNameFor("BaseFont", fontname);
315 pDict->SetAtName("Encoding", "WinAnsiEncoding"); 315 pDict->SetNameFor("Encoding", "WinAnsiEncoding");
316 pFont = CPDF_Font::CreateFontF(nullptr, pDict); 316 pFont = CPDF_Font::CreateFontF(nullptr, pDict);
317 pFontGlobals->Set(pDoc, font_id, pFont); 317 pFontGlobals->Set(pDoc, font_id, pFont);
318 return pFont; 318 return pFont;
319 } 319 }
320 320
321 CPDF_Font* CPDF_Font::CreateFontF(CPDF_Document* pDoc, 321 CPDF_Font* CPDF_Font::CreateFontF(CPDF_Document* pDoc,
322 CPDF_Dictionary* pFontDict) { 322 CPDF_Dictionary* pFontDict) {
323 CFX_ByteString type = pFontDict->GetStringBy("Subtype"); 323 CFX_ByteString type = pFontDict->GetStringFor("Subtype");
324 std::unique_ptr<CPDF_Font> pFont; 324 std::unique_ptr<CPDF_Font> pFont;
325 if (type == "TrueType") { 325 if (type == "TrueType") {
326 CFX_ByteString tag = pFontDict->GetStringBy("BaseFont").Left(4); 326 CFX_ByteString tag = pFontDict->GetStringFor("BaseFont").Left(4);
327 for (size_t i = 0; i < FX_ArraySize(kChineseFontNames); ++i) { 327 for (size_t i = 0; i < FX_ArraySize(kChineseFontNames); ++i) {
328 if (tag == CFX_ByteString(kChineseFontNames[i], 4)) { 328 if (tag == CFX_ByteString(kChineseFontNames[i], 4)) {
329 CPDF_Dictionary* pFontDesc = pFontDict->GetDictBy("FontDescriptor"); 329 CPDF_Dictionary* pFontDesc = pFontDict->GetDictFor("FontDescriptor");
330 if (!pFontDesc || !pFontDesc->KeyExist("FontFile2")) 330 if (!pFontDesc || !pFontDesc->KeyExist("FontFile2"))
331 pFont.reset(new CPDF_CIDFont); 331 pFont.reset(new CPDF_CIDFont);
332 break; 332 break;
333 } 333 }
334 } 334 }
335 if (!pFont) 335 if (!pFont)
336 pFont.reset(new CPDF_TrueTypeFont); 336 pFont.reset(new CPDF_TrueTypeFont);
337 } else if (type == "Type3") { 337 } else if (type == "Type3") {
338 pFont.reset(new CPDF_Type3Font); 338 pFont.reset(new CPDF_Type3Font);
339 } else if (type == "Type0") { 339 } else if (type == "Type0") {
340 pFont.reset(new CPDF_CIDFont); 340 pFont.reset(new CPDF_CIDFont);
341 } else { 341 } else {
342 pFont.reset(new CPDF_Type1Font); 342 pFont.reset(new CPDF_Type1Font);
343 } 343 }
344 pFont->m_pFontDict = pFontDict; 344 pFont->m_pFontDict = pFontDict;
345 pFont->m_pDocument = pDoc; 345 pFont->m_pDocument = pDoc;
346 pFont->m_BaseFont = pFontDict->GetStringBy("BaseFont"); 346 pFont->m_BaseFont = pFontDict->GetStringFor("BaseFont");
347 return pFont->Load() ? pFont.release() : nullptr; 347 return pFont->Load() ? pFont.release() : nullptr;
348 } 348 }
349 349
350 uint32_t CPDF_Font::GetNextChar(const FX_CHAR* pString, 350 uint32_t CPDF_Font::GetNextChar(const FX_CHAR* pString,
351 int nStrLen, 351 int nStrLen,
352 int& offset) const { 352 int& offset) const {
353 if (offset < 0 || nStrLen < 1) { 353 if (offset < 0 || nStrLen < 1) {
354 return 0; 354 return 0;
355 } 355 }
356 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1]; 356 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1];
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 GetPredefinedEncoding(bsEncoding, &iBaseEncoding); 389 GetPredefinedEncoding(bsEncoding, &iBaseEncoding);
390 return; 390 return;
391 } 391 }
392 392
393 CPDF_Dictionary* pDict = pEncoding->AsDictionary(); 393 CPDF_Dictionary* pDict = pEncoding->AsDictionary();
394 if (!pDict) 394 if (!pDict)
395 return; 395 return;
396 396
397 if (iBaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL && 397 if (iBaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL &&
398 iBaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS) { 398 iBaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS) {
399 CFX_ByteString bsEncoding = pDict->GetStringBy("BaseEncoding"); 399 CFX_ByteString bsEncoding = pDict->GetStringFor("BaseEncoding");
400 if (bsEncoding.Compare("MacExpertEncoding") == 0 && bTrueType) { 400 if (bsEncoding.Compare("MacExpertEncoding") == 0 && bTrueType) {
401 bsEncoding = "WinAnsiEncoding"; 401 bsEncoding = "WinAnsiEncoding";
402 } 402 }
403 GetPredefinedEncoding(bsEncoding, &iBaseEncoding); 403 GetPredefinedEncoding(bsEncoding, &iBaseEncoding);
404 } 404 }
405 if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) 405 if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN)
406 iBaseEncoding = PDFFONT_ENCODING_STANDARD; 406 iBaseEncoding = PDFFONT_ENCODING_STANDARD;
407 407
408 CPDF_Array* pDiffs = pDict->GetArrayBy("Differences"); 408 CPDF_Array* pDiffs = pDict->GetArrayFor("Differences");
409 if (!pDiffs) 409 if (!pDiffs)
410 return; 410 return;
411 411
412 pCharNames->resize(256); 412 pCharNames->resize(256);
413 uint32_t cur_code = 0; 413 uint32_t cur_code = 0;
414 for (uint32_t i = 0; i < pDiffs->GetCount(); i++) { 414 for (uint32_t i = 0; i < pDiffs->GetCount(); i++) {
415 CPDF_Object* pElement = pDiffs->GetDirectObjectAt(i); 415 CPDF_Object* pElement = pDiffs->GetDirectObjectAt(i);
416 if (!pElement) 416 if (!pElement)
417 continue; 417 continue;
418 418
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 if (fallbackFont < 0 || 468 if (fallbackFont < 0 ||
469 fallbackFont >= pdfium::CollectionSize<int>(m_FontFallbacks)) { 469 fallbackFont >= pdfium::CollectionSize<int>(m_FontFallbacks)) {
470 return -1; 470 return -1;
471 } 471 }
472 int glyph = 472 int glyph =
473 FXFT_Get_Char_Index(m_FontFallbacks[fallbackFont]->GetFace(), charcode); 473 FXFT_Get_Char_Index(m_FontFallbacks[fallbackFont]->GetFace(), charcode);
474 if (glyph == 0 || glyph == 0xffff) 474 if (glyph == 0 || glyph == 0xffff)
475 return -1; 475 return -1;
476 return glyph; 476 return glyph;
477 } 477 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_font/cpdf_cidfont.cpp ('k') | core/fpdfapi/fpdf_font/cpdf_fontencoding.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698