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

Side by Side Diff: core/fpdfapi/fpdf_parser/cpdf_document.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
OLDNEW
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 "core/fpdfapi/fpdf_parser/include/cpdf_document.h" 7 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h"
8 8
9 #include <memory> 9 #include <memory>
10 #include <set> 10 #include <set>
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 } 248 }
249 FX_Free(widths); 249 FX_Free(widths);
250 } 250 }
251 251
252 int InsertDeletePDFPage(CPDF_Document* pDoc, 252 int InsertDeletePDFPage(CPDF_Document* pDoc,
253 CPDF_Dictionary* pPages, 253 CPDF_Dictionary* pPages,
254 int nPagesToGo, 254 int nPagesToGo,
255 CPDF_Dictionary* pPage, 255 CPDF_Dictionary* pPage,
256 FX_BOOL bInsert, 256 FX_BOOL bInsert,
257 std::set<CPDF_Dictionary*>* pVisited) { 257 std::set<CPDF_Dictionary*>* pVisited) {
258 CPDF_Array* pKidList = pPages->GetArrayBy("Kids"); 258 CPDF_Array* pKidList = pPages->GetArrayFor("Kids");
259 if (!pKidList) 259 if (!pKidList)
260 return -1; 260 return -1;
261 261
262 for (size_t i = 0; i < pKidList->GetCount(); i++) { 262 for (size_t i = 0; i < pKidList->GetCount(); i++) {
263 CPDF_Dictionary* pKid = pKidList->GetDictAt(i); 263 CPDF_Dictionary* pKid = pKidList->GetDictAt(i);
264 if (pKid->GetStringBy("Type") == "Page") { 264 if (pKid->GetStringFor("Type") == "Page") {
265 if (nPagesToGo == 0) { 265 if (nPagesToGo == 0) {
266 if (bInsert) { 266 if (bInsert) {
267 pKidList->InsertAt(i, new CPDF_Reference(pDoc, pPage->GetObjNum())); 267 pKidList->InsertAt(i, new CPDF_Reference(pDoc, pPage->GetObjNum()));
268 pPage->SetAtReference("Parent", pDoc, pPages->GetObjNum()); 268 pPage->SetReferenceFor("Parent", pDoc, pPages->GetObjNum());
269 } else { 269 } else {
270 pKidList->RemoveAt(i); 270 pKidList->RemoveAt(i);
271 } 271 }
272 pPages->SetAtInteger( 272 pPages->SetIntegerFor(
273 "Count", pPages->GetIntegerBy("Count") + (bInsert ? 1 : -1)); 273 "Count", pPages->GetIntegerFor("Count") + (bInsert ? 1 : -1));
274 return 1; 274 return 1;
275 } 275 }
276 nPagesToGo--; 276 nPagesToGo--;
277 } else { 277 } else {
278 int nPages = pKid->GetIntegerBy("Count"); 278 int nPages = pKid->GetIntegerFor("Count");
279 if (nPagesToGo < nPages) { 279 if (nPagesToGo < nPages) {
280 if (pdfium::ContainsKey(*pVisited, pKid)) 280 if (pdfium::ContainsKey(*pVisited, pKid))
281 return -1; 281 return -1;
282 282
283 pdfium::ScopedSetInsertion<CPDF_Dictionary*> insertion(pVisited, pKid); 283 pdfium::ScopedSetInsertion<CPDF_Dictionary*> insertion(pVisited, pKid);
284 if (InsertDeletePDFPage(pDoc, pKid, nPagesToGo, pPage, bInsert, 284 if (InsertDeletePDFPage(pDoc, pKid, nPagesToGo, pPage, bInsert,
285 pVisited) < 0) { 285 pVisited) < 0) {
286 return -1; 286 return -1;
287 } 287 }
288 pPages->SetAtInteger( 288 pPages->SetIntegerFor(
289 "Count", pPages->GetIntegerBy("Count") + (bInsert ? 1 : -1)); 289 "Count", pPages->GetIntegerFor("Count") + (bInsert ? 1 : -1));
290 return 1; 290 return 1;
291 } 291 }
292 nPagesToGo -= nPages; 292 nPagesToGo -= nPages;
293 } 293 }
294 } 294 }
295 return 0; 295 return 0;
296 } 296 }
297 297
298 int InsertNewPage(CPDF_Document* pDoc, 298 int InsertNewPage(CPDF_Document* pDoc,
299 int iPage, 299 int iPage,
300 CPDF_Dictionary* pPageDict, 300 CPDF_Dictionary* pPageDict,
301 CFX_ArrayTemplate<uint32_t>& pageList) { 301 CFX_ArrayTemplate<uint32_t>& pageList) {
302 CPDF_Dictionary* pRoot = pDoc->GetRoot(); 302 CPDF_Dictionary* pRoot = pDoc->GetRoot();
303 CPDF_Dictionary* pPages = pRoot ? pRoot->GetDictBy("Pages") : nullptr; 303 CPDF_Dictionary* pPages = pRoot ? pRoot->GetDictFor("Pages") : nullptr;
304 if (!pPages) 304 if (!pPages)
305 return -1; 305 return -1;
306 306
307 int nPages = pDoc->GetPageCount(); 307 int nPages = pDoc->GetPageCount();
308 if (iPage < 0 || iPage > nPages) 308 if (iPage < 0 || iPage > nPages)
309 return -1; 309 return -1;
310 310
311 if (iPage == nPages) { 311 if (iPage == nPages) {
312 CPDF_Array* pPagesList = pPages->GetArrayBy("Kids"); 312 CPDF_Array* pPagesList = pPages->GetArrayFor("Kids");
313 if (!pPagesList) { 313 if (!pPagesList) {
314 pPagesList = new CPDF_Array; 314 pPagesList = new CPDF_Array;
315 pPages->SetAt("Kids", pPagesList); 315 pPages->SetFor("Kids", pPagesList);
316 } 316 }
317 pPagesList->Add(pPageDict, pDoc); 317 pPagesList->Add(pPageDict, pDoc);
318 pPages->SetAtInteger("Count", nPages + 1); 318 pPages->SetIntegerFor("Count", nPages + 1);
319 pPageDict->SetAtReference("Parent", pDoc, pPages->GetObjNum()); 319 pPageDict->SetReferenceFor("Parent", pDoc, pPages->GetObjNum());
320 } else { 320 } else {
321 std::set<CPDF_Dictionary*> stack = {pPages}; 321 std::set<CPDF_Dictionary*> stack = {pPages};
322 if (InsertDeletePDFPage(pDoc, pPages, iPage, pPageDict, TRUE, &stack) < 0) 322 if (InsertDeletePDFPage(pDoc, pPages, iPage, pPageDict, TRUE, &stack) < 0)
323 return -1; 323 return -1;
324 } 324 }
325 pageList.InsertAt(iPage, pPageDict->GetObjNum()); 325 pageList.InsertAt(iPage, pPageDict->GetObjNum());
326 return iPage; 326 return iPage;
327 } 327 }
328 328
329 int CountPages(CPDF_Dictionary* pPages, 329 int CountPages(CPDF_Dictionary* pPages,
330 std::set<CPDF_Dictionary*>* visited_pages) { 330 std::set<CPDF_Dictionary*>* visited_pages) {
331 int count = pPages->GetIntegerBy("Count"); 331 int count = pPages->GetIntegerFor("Count");
332 if (count > 0 && count < FPDF_PAGE_MAX_NUM) 332 if (count > 0 && count < FPDF_PAGE_MAX_NUM)
333 return count; 333 return count;
334 CPDF_Array* pKidList = pPages->GetArrayBy("Kids"); 334 CPDF_Array* pKidList = pPages->GetArrayFor("Kids");
335 if (!pKidList) 335 if (!pKidList)
336 return 0; 336 return 0;
337 count = 0; 337 count = 0;
338 for (size_t i = 0; i < pKidList->GetCount(); i++) { 338 for (size_t i = 0; i < pKidList->GetCount(); i++) {
339 CPDF_Dictionary* pKid = pKidList->GetDictAt(i); 339 CPDF_Dictionary* pKid = pKidList->GetDictAt(i);
340 if (!pKid || pdfium::ContainsKey(*visited_pages, pKid)) 340 if (!pKid || pdfium::ContainsKey(*visited_pages, pKid))
341 continue; 341 continue;
342 if (pKid->KeyExist("Kids")) { 342 if (pKid->KeyExist("Kids")) {
343 // Use |visited_pages| to help detect circular references of pages. 343 // Use |visited_pages| to help detect circular references of pages.
344 pdfium::ScopedSetInsertion<CPDF_Dictionary*> local_add(visited_pages, 344 pdfium::ScopedSetInsertion<CPDF_Dictionary*> local_add(visited_pages,
345 pKid); 345 pKid);
346 count += CountPages(pKid, visited_pages); 346 count += CountPages(pKid, visited_pages);
347 } else { 347 } else {
348 // This page is a leaf node. 348 // This page is a leaf node.
349 count++; 349 count++;
350 } 350 }
351 } 351 }
352 pPages->SetAtInteger("Count", count); 352 pPages->SetIntegerFor("Count", count);
353 return count; 353 return count;
354 } 354 }
355 355
356 int CalculateFlags(bool bold, 356 int CalculateFlags(bool bold,
357 bool italic, 357 bool italic,
358 bool fixedPitch, 358 bool fixedPitch,
359 bool serif, 359 bool serif,
360 bool script, 360 bool script,
361 bool symbolic) { 361 bool symbolic) {
362 int flags = 0; 362 int flags = 0;
(...skipping 18 matching lines...) Expand all
381 bool bold, 381 bool bold,
382 bool italic, 382 bool italic,
383 CFX_ByteString basefont, 383 CFX_ByteString basefont,
384 CPDF_Array* pWidths) { 384 CPDF_Array* pWidths) {
385 if (bold && italic) 385 if (bold && italic)
386 basefont += ",BoldItalic"; 386 basefont += ",BoldItalic";
387 else if (bold) 387 else if (bold)
388 basefont += ",Bold"; 388 basefont += ",Bold";
389 else if (italic) 389 else if (italic)
390 basefont += ",Italic"; 390 basefont += ",Italic";
391 pBaseDict->SetAtName("Subtype", "TrueType"); 391 pBaseDict->SetNameFor("Subtype", "TrueType");
392 pBaseDict->SetAtName("BaseFont", basefont); 392 pBaseDict->SetNameFor("BaseFont", basefont);
393 pBaseDict->SetAtNumber("FirstChar", 32); 393 pBaseDict->SetNumberFor("FirstChar", 32);
394 pBaseDict->SetAtNumber("LastChar", 255); 394 pBaseDict->SetNumberFor("LastChar", 255);
395 pBaseDict->SetAt("Widths", pWidths); 395 pBaseDict->SetFor("Widths", pWidths);
396 } 396 }
397 397
398 } // namespace 398 } // namespace
399 399
400 CPDF_Document::CPDF_Document(std::unique_ptr<CPDF_Parser> pParser) 400 CPDF_Document::CPDF_Document(std::unique_ptr<CPDF_Parser> pParser)
401 : CPDF_IndirectObjectHolder(), 401 : CPDF_IndirectObjectHolder(),
402 m_pParser(std::move(pParser)), 402 m_pParser(std::move(pParser)),
403 m_pRootDict(nullptr), 403 m_pRootDict(nullptr),
404 m_pInfoDict(nullptr), 404 m_pInfoDict(nullptr),
405 m_bLinearized(false), 405 m_bLinearized(false),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 void CPDF_Document::LoadDoc() { 439 void CPDF_Document::LoadDoc() {
440 LoadDocInternal(); 440 LoadDocInternal();
441 m_PageList.SetSize(RetrievePageCount()); 441 m_PageList.SetSize(RetrievePageCount());
442 } 442 }
443 443
444 void CPDF_Document::LoadLinearizedDoc(CPDF_Dictionary* pLinearizationParams) { 444 void CPDF_Document::LoadLinearizedDoc(CPDF_Dictionary* pLinearizationParams) {
445 m_bLinearized = true; 445 m_bLinearized = true;
446 LoadDocInternal(); 446 LoadDocInternal();
447 447
448 uint32_t dwPageCount = 0; 448 uint32_t dwPageCount = 0;
449 CPDF_Object* pCount = pLinearizationParams->GetObjectBy("N"); 449 CPDF_Object* pCount = pLinearizationParams->GetObjectFor("N");
450 if (ToNumber(pCount)) 450 if (ToNumber(pCount))
451 dwPageCount = pCount->GetInteger(); 451 dwPageCount = pCount->GetInteger();
452 m_PageList.SetSize(dwPageCount); 452 m_PageList.SetSize(dwPageCount);
453 453
454 CPDF_Object* pNo = pLinearizationParams->GetObjectBy("P"); 454 CPDF_Object* pNo = pLinearizationParams->GetObjectFor("P");
455 if (ToNumber(pNo)) 455 if (ToNumber(pNo))
456 m_iFirstPageNo = pNo->GetInteger(); 456 m_iFirstPageNo = pNo->GetInteger();
457 457
458 CPDF_Object* pObjNum = pLinearizationParams->GetObjectBy("O"); 458 CPDF_Object* pObjNum = pLinearizationParams->GetObjectFor("O");
459 if (ToNumber(pObjNum)) 459 if (ToNumber(pObjNum))
460 m_dwFirstPageObjNum = pObjNum->GetInteger(); 460 m_dwFirstPageObjNum = pObjNum->GetInteger();
461 } 461 }
462 462
463 void CPDF_Document::LoadPages() { 463 void CPDF_Document::LoadPages() {
464 m_PageList.SetSize(RetrievePageCount()); 464 m_PageList.SetSize(RetrievePageCount());
465 } 465 }
466 466
467 CPDF_Dictionary* CPDF_Document::FindPDFPage(CPDF_Dictionary* pPages, 467 CPDF_Dictionary* CPDF_Document::FindPDFPage(CPDF_Dictionary* pPages,
468 int iPage, 468 int iPage,
469 int nPagesToGo, 469 int nPagesToGo,
470 int level) { 470 int level) {
471 CPDF_Array* pKidList = pPages->GetArrayBy("Kids"); 471 CPDF_Array* pKidList = pPages->GetArrayFor("Kids");
472 if (!pKidList) 472 if (!pKidList)
473 return nPagesToGo == 0 ? pPages : nullptr; 473 return nPagesToGo == 0 ? pPages : nullptr;
474 474
475 if (level >= FX_MAX_PAGE_LEVEL) 475 if (level >= FX_MAX_PAGE_LEVEL)
476 return nullptr; 476 return nullptr;
477 477
478 for (size_t i = 0; i < pKidList->GetCount(); i++) { 478 for (size_t i = 0; i < pKidList->GetCount(); i++) {
479 CPDF_Dictionary* pKid = pKidList->GetDictAt(i); 479 CPDF_Dictionary* pKid = pKidList->GetDictAt(i);
480 if (!pKid) { 480 if (!pKid) {
481 nPagesToGo--; 481 nPagesToGo--;
482 continue; 482 continue;
483 } 483 }
484 if (pKid == pPages) 484 if (pKid == pPages)
485 continue; 485 continue;
486 if (!pKid->KeyExist("Kids")) { 486 if (!pKid->KeyExist("Kids")) {
487 if (nPagesToGo == 0) 487 if (nPagesToGo == 0)
488 return pKid; 488 return pKid;
489 489
490 m_PageList.SetAt(iPage - nPagesToGo, pKid->GetObjNum()); 490 m_PageList.SetAt(iPage - nPagesToGo, pKid->GetObjNum());
491 nPagesToGo--; 491 nPagesToGo--;
492 } else { 492 } else {
493 int nPages = pKid->GetIntegerBy("Count"); 493 int nPages = pKid->GetIntegerFor("Count");
494 if (nPagesToGo < nPages) 494 if (nPagesToGo < nPages)
495 return FindPDFPage(pKid, iPage, nPagesToGo, level + 1); 495 return FindPDFPage(pKid, iPage, nPagesToGo, level + 1);
496 496
497 nPagesToGo -= nPages; 497 nPagesToGo -= nPages;
498 } 498 }
499 } 499 }
500 return nullptr; 500 return nullptr;
501 } 501 }
502 502
503 CPDF_Dictionary* CPDF_Document::GetPagesDict() const { 503 CPDF_Dictionary* CPDF_Document::GetPagesDict() const {
504 CPDF_Dictionary* pRoot = GetRoot(); 504 CPDF_Dictionary* pRoot = GetRoot();
505 return pRoot ? pRoot->GetDictBy("Pages") : nullptr; 505 return pRoot ? pRoot->GetDictFor("Pages") : nullptr;
506 } 506 }
507 507
508 CPDF_Dictionary* CPDF_Document::GetPage(int iPage) { 508 CPDF_Dictionary* CPDF_Document::GetPage(int iPage) {
509 if (iPage < 0 || iPage >= m_PageList.GetSize()) 509 if (iPage < 0 || iPage >= m_PageList.GetSize())
510 return nullptr; 510 return nullptr;
511 511
512 if (m_bLinearized && (iPage == m_iFirstPageNo)) { 512 if (m_bLinearized && (iPage == m_iFirstPageNo)) {
513 if (CPDF_Dictionary* pDict = 513 if (CPDF_Dictionary* pDict =
514 ToDictionary(GetOrParseIndirectObject(m_dwFirstPageObjNum))) { 514 ToDictionary(GetOrParseIndirectObject(m_dwFirstPageObjNum))) {
515 return pDict; 515 return pDict;
(...skipping 27 matching lines...) Expand all
543 if (objnum == pNode->GetObjNum()) 543 if (objnum == pNode->GetObjNum())
544 return index; 544 return index;
545 545
546 if (skip_count) 546 if (skip_count)
547 skip_count--; 547 skip_count--;
548 548
549 index++; 549 index++;
550 return -1; 550 return -1;
551 } 551 }
552 552
553 CPDF_Array* pKidList = pNode->GetArrayBy("Kids"); 553 CPDF_Array* pKidList = pNode->GetArrayFor("Kids");
554 if (!pKidList) 554 if (!pKidList)
555 return -1; 555 return -1;
556 556
557 if (level >= FX_MAX_PAGE_LEVEL) 557 if (level >= FX_MAX_PAGE_LEVEL)
558 return -1; 558 return -1;
559 559
560 size_t count = pNode->GetIntegerBy("Count"); 560 size_t count = pNode->GetIntegerFor("Count");
561 if (count <= skip_count) { 561 if (count <= skip_count) {
562 skip_count -= count; 562 skip_count -= count;
563 index += count; 563 index += count;
564 return -1; 564 return -1;
565 } 565 }
566 566
567 if (count && count == pKidList->GetCount()) { 567 if (count && count == pKidList->GetCount()) {
568 for (size_t i = 0; i < count; i++) { 568 for (size_t i = 0; i < count; i++) {
569 if (CPDF_Reference* pKid = ToReference(pKidList->GetObjectAt(i))) { 569 if (CPDF_Reference* pKid = ToReference(pKidList->GetObjectAt(i))) {
570 if (pKid->GetRefObjNum() == objnum) { 570 if (pKid->GetRefObjNum() == objnum) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 if (!pObj) 666 if (!pObj)
667 return nullptr; 667 return nullptr;
668 668
669 ASSERT(pObj->GetObjNum()); 669 ASSERT(pObj->GetObjNum());
670 return m_pDocPage->GetImage(pObj); 670 return m_pDocPage->GetImage(pObj);
671 } 671 }
672 672
673 void CPDF_Document::CreateNewDoc() { 673 void CPDF_Document::CreateNewDoc() {
674 ASSERT(!m_pRootDict && !m_pInfoDict); 674 ASSERT(!m_pRootDict && !m_pInfoDict);
675 m_pRootDict = new CPDF_Dictionary; 675 m_pRootDict = new CPDF_Dictionary;
676 m_pRootDict->SetAtName("Type", "Catalog"); 676 m_pRootDict->SetNameFor("Type", "Catalog");
677 int objnum = AddIndirectObject(m_pRootDict); 677 int objnum = AddIndirectObject(m_pRootDict);
678 CPDF_Dictionary* pPages = new CPDF_Dictionary; 678 CPDF_Dictionary* pPages = new CPDF_Dictionary;
679 pPages->SetAtName("Type", "Pages"); 679 pPages->SetNameFor("Type", "Pages");
680 pPages->SetAtNumber("Count", 0); 680 pPages->SetNumberFor("Count", 0);
681 pPages->SetAt("Kids", new CPDF_Array); 681 pPages->SetFor("Kids", new CPDF_Array);
682 objnum = AddIndirectObject(pPages); 682 objnum = AddIndirectObject(pPages);
683 m_pRootDict->SetAtReference("Pages", this, objnum); 683 m_pRootDict->SetReferenceFor("Pages", this, objnum);
684 m_pInfoDict = new CPDF_Dictionary; 684 m_pInfoDict = new CPDF_Dictionary;
685 AddIndirectObject(m_pInfoDict); 685 AddIndirectObject(m_pInfoDict);
686 } 686 }
687 687
688 CPDF_Dictionary* CPDF_Document::CreateNewPage(int iPage) { 688 CPDF_Dictionary* CPDF_Document::CreateNewPage(int iPage) {
689 CPDF_Dictionary* pDict = new CPDF_Dictionary; 689 CPDF_Dictionary* pDict = new CPDF_Dictionary;
690 pDict->SetAtName("Type", "Page"); 690 pDict->SetNameFor("Type", "Page");
691 uint32_t dwObjNum = AddIndirectObject(pDict); 691 uint32_t dwObjNum = AddIndirectObject(pDict);
692 if (InsertNewPage(this, iPage, pDict, m_PageList) < 0) { 692 if (InsertNewPage(this, iPage, pDict, m_PageList) < 0) {
693 ReleaseIndirectObject(dwObjNum); 693 ReleaseIndirectObject(dwObjNum);
694 return nullptr; 694 return nullptr;
695 } 695 }
696 return pDict; 696 return pDict;
697 } 697 }
698 698
699 void CPDF_Document::DeletePage(int iPage) { 699 void CPDF_Document::DeletePage(int iPage) {
700 CPDF_Dictionary* pPages = GetPagesDict(); 700 CPDF_Dictionary* pPages = GetPagesDict();
701 if (!pPages) 701 if (!pPages)
702 return; 702 return;
703 703
704 int nPages = pPages->GetIntegerBy("Count"); 704 int nPages = pPages->GetIntegerFor("Count");
705 if (iPage < 0 || iPage >= nPages) 705 if (iPage < 0 || iPage >= nPages)
706 return; 706 return;
707 707
708 std::set<CPDF_Dictionary*> stack = {pPages}; 708 std::set<CPDF_Dictionary*> stack = {pPages};
709 if (InsertDeletePDFPage(this, pPages, iPage, nullptr, FALSE, &stack) < 0) 709 if (InsertDeletePDFPage(this, pPages, iPage, nullptr, FALSE, &stack) < 0)
710 return; 710 return;
711 711
712 m_PageList.RemoveAt(iPage); 712 m_PageList.RemoveAt(iPage);
713 } 713 }
714 714
715 CPDF_Font* CPDF_Document::AddStandardFont(const FX_CHAR* font, 715 CPDF_Font* CPDF_Document::AddStandardFont(const FX_CHAR* font,
716 CPDF_FontEncoding* pEncoding) { 716 CPDF_FontEncoding* pEncoding) {
717 CFX_ByteString name(font); 717 CFX_ByteString name(font);
718 if (PDF_GetStandardFontName(&name) < 0) 718 if (PDF_GetStandardFontName(&name) < 0)
719 return nullptr; 719 return nullptr;
720 return GetPageData()->GetStandardFont(name, pEncoding); 720 return GetPageData()->GetStandardFont(name, pEncoding);
721 } 721 }
722 722
723 size_t CPDF_Document::CalculateEncodingDict(int charset, 723 size_t CPDF_Document::CalculateEncodingDict(int charset,
724 CPDF_Dictionary* pBaseDict) { 724 CPDF_Dictionary* pBaseDict) {
725 size_t i; 725 size_t i;
726 for (i = 0; i < FX_ArraySize(g_FX_CharsetUnicodes); ++i) { 726 for (i = 0; i < FX_ArraySize(g_FX_CharsetUnicodes); ++i) {
727 if (g_FX_CharsetUnicodes[i].m_Charset == charset) 727 if (g_FX_CharsetUnicodes[i].m_Charset == charset)
728 break; 728 break;
729 } 729 }
730 if (i == FX_ArraySize(g_FX_CharsetUnicodes)) 730 if (i == FX_ArraySize(g_FX_CharsetUnicodes))
731 return i; 731 return i;
732 CPDF_Dictionary* pEncodingDict = new CPDF_Dictionary; 732 CPDF_Dictionary* pEncodingDict = new CPDF_Dictionary;
733 pEncodingDict->SetAtName("BaseEncoding", "WinAnsiEncoding"); 733 pEncodingDict->SetNameFor("BaseEncoding", "WinAnsiEncoding");
734 CPDF_Array* pArray = new CPDF_Array; 734 CPDF_Array* pArray = new CPDF_Array;
735 pArray->AddInteger(128); 735 pArray->AddInteger(128);
736 const uint16_t* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes; 736 const uint16_t* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
737 for (int j = 0; j < 128; j++) { 737 for (int j = 0; j < 128; j++) {
738 CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]); 738 CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
739 pArray->AddName(name.IsEmpty() ? ".notdef" : name); 739 pArray->AddName(name.IsEmpty() ? ".notdef" : name);
740 } 740 }
741 pEncodingDict->SetAt("Differences", pArray); 741 pEncodingDict->SetFor("Differences", pArray);
742 AddIndirectObject(pEncodingDict); 742 AddIndirectObject(pEncodingDict);
743 pBaseDict->SetAtReference("Encoding", this, pEncodingDict); 743 pBaseDict->SetReferenceFor("Encoding", this, pEncodingDict);
744 return i; 744 return i;
745 } 745 }
746 746
747 CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert) { 747 CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert) {
748 if (!pFont) 748 if (!pFont)
749 return nullptr; 749 return nullptr;
750 750
751 bool bCJK = charset == FXFONT_CHINESEBIG5_CHARSET || 751 bool bCJK = charset == FXFONT_CHINESEBIG5_CHARSET ||
752 charset == FXFONT_GB2312_CHARSET || 752 charset == FXFONT_GB2312_CHARSET ||
753 charset == FXFONT_HANGEUL_CHARSET || 753 charset == FXFONT_HANGEUL_CHARSET ||
754 charset == FXFONT_SHIFTJIS_CHARSET; 754 charset == FXFONT_SHIFTJIS_CHARSET;
755 CFX_ByteString basefont = pFont->GetFamilyName(); 755 CFX_ByteString basefont = pFont->GetFamilyName();
756 basefont.Replace(" ", ""); 756 basefont.Replace(" ", "");
757 int flags = 757 int flags =
758 CalculateFlags(pFont->IsBold(), pFont->IsItalic(), pFont->IsFixedWidth(), 758 CalculateFlags(pFont->IsBold(), pFont->IsItalic(), pFont->IsFixedWidth(),
759 false, false, charset == FXFONT_SYMBOL_CHARSET); 759 false, false, charset == FXFONT_SYMBOL_CHARSET);
760 760
761 CPDF_Dictionary* pBaseDict = new CPDF_Dictionary; 761 CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
762 pBaseDict->SetAtName("Type", "Font"); 762 pBaseDict->SetNameFor("Type", "Font");
763 std::unique_ptr<CFX_UnicodeEncoding> pEncoding( 763 std::unique_ptr<CFX_UnicodeEncoding> pEncoding(
764 new CFX_UnicodeEncoding(pFont)); 764 new CFX_UnicodeEncoding(pFont));
765 CPDF_Dictionary* pFontDict = pBaseDict; 765 CPDF_Dictionary* pFontDict = pBaseDict;
766 if (!bCJK) { 766 if (!bCJK) {
767 CPDF_Array* pWidths = new CPDF_Array; 767 CPDF_Array* pWidths = new CPDF_Array;
768 for (int charcode = 32; charcode < 128; charcode++) { 768 for (int charcode = 32; charcode < 128; charcode++) {
769 int glyph_index = pEncoding->GlyphFromCharCode(charcode); 769 int glyph_index = pEncoding->GlyphFromCharCode(charcode);
770 int char_width = pFont->GetGlyphWidth(glyph_index); 770 int char_width = pFont->GetGlyphWidth(glyph_index);
771 pWidths->AddInteger(char_width); 771 pWidths->AddInteger(char_width);
772 } 772 }
773 if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_DEFAULT_CHARSET || 773 if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_DEFAULT_CHARSET ||
774 charset == FXFONT_SYMBOL_CHARSET) { 774 charset == FXFONT_SYMBOL_CHARSET) {
775 pBaseDict->SetAtName("Encoding", "WinAnsiEncoding"); 775 pBaseDict->SetNameFor("Encoding", "WinAnsiEncoding");
776 for (int charcode = 128; charcode <= 255; charcode++) { 776 for (int charcode = 128; charcode <= 255; charcode++) {
777 int glyph_index = pEncoding->GlyphFromCharCode(charcode); 777 int glyph_index = pEncoding->GlyphFromCharCode(charcode);
778 int char_width = pFont->GetGlyphWidth(glyph_index); 778 int char_width = pFont->GetGlyphWidth(glyph_index);
779 pWidths->AddInteger(char_width); 779 pWidths->AddInteger(char_width);
780 } 780 }
781 } else { 781 } else {
782 size_t i = CalculateEncodingDict(charset, pBaseDict); 782 size_t i = CalculateEncodingDict(charset, pBaseDict);
783 if (i < FX_ArraySize(g_FX_CharsetUnicodes)) { 783 if (i < FX_ArraySize(g_FX_CharsetUnicodes)) {
784 const uint16_t* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes; 784 const uint16_t* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
785 for (int j = 0; j < 128; j++) { 785 for (int j = 0; j < 128; j++) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 pWidthArray->AddInteger(231); 829 pWidthArray->AddInteger(231);
830 InsertWidthArray1(pFont, pEncoding.get(), 0x20, 0x7d, pWidthArray); 830 InsertWidthArray1(pFont, pEncoding.get(), 0x20, 0x7d, pWidthArray);
831 pWidthArray->AddInteger(326); 831 pWidthArray->AddInteger(326);
832 InsertWidthArray1(pFont, pEncoding.get(), 0xa0, 0xa0, pWidthArray); 832 InsertWidthArray1(pFont, pEncoding.get(), 0xa0, 0xa0, pWidthArray);
833 pWidthArray->AddInteger(327); 833 pWidthArray->AddInteger(327);
834 InsertWidthArray1(pFont, pEncoding.get(), 0xa1, 0xdf, pWidthArray); 834 InsertWidthArray1(pFont, pEncoding.get(), 0xa1, 0xdf, pWidthArray);
835 pWidthArray->AddInteger(631); 835 pWidthArray->AddInteger(631);
836 InsertWidthArray1(pFont, pEncoding.get(), 0x7e, 0x7e, pWidthArray); 836 InsertWidthArray1(pFont, pEncoding.get(), 0x7e, 0x7e, pWidthArray);
837 break; 837 break;
838 } 838 }
839 pBaseDict->SetAtName("Subtype", "Type0"); 839 pBaseDict->SetNameFor("Subtype", "Type0");
840 pBaseDict->SetAtName("BaseFont", basefont); 840 pBaseDict->SetNameFor("BaseFont", basefont);
841 pBaseDict->SetAtName("Encoding", cmap); 841 pBaseDict->SetNameFor("Encoding", cmap);
842 pFontDict->SetAt("W", pWidthArray); 842 pFontDict->SetFor("W", pWidthArray);
843 pFontDict->SetAtName("Type", "Font"); 843 pFontDict->SetNameFor("Type", "Font");
844 pFontDict->SetAtName("Subtype", "CIDFontType2"); 844 pFontDict->SetNameFor("Subtype", "CIDFontType2");
845 pFontDict->SetAtName("BaseFont", basefont); 845 pFontDict->SetNameFor("BaseFont", basefont);
846 CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary; 846 CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
847 pCIDSysInfo->SetAtString("Registry", "Adobe"); 847 pCIDSysInfo->SetStringFor("Registry", "Adobe");
848 pCIDSysInfo->SetAtString("Ordering", ordering); 848 pCIDSysInfo->SetStringFor("Ordering", ordering);
849 pCIDSysInfo->SetAtInteger("Supplement", supplement); 849 pCIDSysInfo->SetIntegerFor("Supplement", supplement);
850 pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo); 850 pFontDict->SetFor("CIDSystemInfo", pCIDSysInfo);
851 CPDF_Array* pArray = new CPDF_Array; 851 CPDF_Array* pArray = new CPDF_Array;
852 pBaseDict->SetAt("DescendantFonts", pArray); 852 pBaseDict->SetFor("DescendantFonts", pArray);
853 AddIndirectObject(pFontDict); 853 AddIndirectObject(pFontDict);
854 pArray->AddReference(this, pFontDict); 854 pArray->AddReference(this, pFontDict);
855 } 855 }
856 AddIndirectObject(pBaseDict); 856 AddIndirectObject(pBaseDict);
857 CPDF_Dictionary* pFontDesc = new CPDF_Dictionary; 857 CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
858 pFontDesc->SetAtName("Type", "FontDescriptor"); 858 pFontDesc->SetNameFor("Type", "FontDescriptor");
859 pFontDesc->SetAtName("FontName", basefont); 859 pFontDesc->SetNameFor("FontName", basefont);
860 pFontDesc->SetAtInteger("Flags", flags); 860 pFontDesc->SetIntegerFor("Flags", flags);
861 pFontDesc->SetAtInteger( 861 pFontDesc->SetIntegerFor(
862 "ItalicAngle", 862 "ItalicAngle",
863 pFont->GetSubstFont() ? pFont->GetSubstFont()->m_ItalicAngle : 0); 863 pFont->GetSubstFont() ? pFont->GetSubstFont()->m_ItalicAngle : 0);
864 pFontDesc->SetAtInteger("Ascent", pFont->GetAscent()); 864 pFontDesc->SetIntegerFor("Ascent", pFont->GetAscent());
865 pFontDesc->SetAtInteger("Descent", pFont->GetDescent()); 865 pFontDesc->SetIntegerFor("Descent", pFont->GetDescent());
866 FX_RECT bbox; 866 FX_RECT bbox;
867 pFont->GetBBox(bbox); 867 pFont->GetBBox(bbox);
868 CPDF_Array* pBBox = new CPDF_Array; 868 CPDF_Array* pBBox = new CPDF_Array;
869 pBBox->AddInteger(bbox.left); 869 pBBox->AddInteger(bbox.left);
870 pBBox->AddInteger(bbox.bottom); 870 pBBox->AddInteger(bbox.bottom);
871 pBBox->AddInteger(bbox.right); 871 pBBox->AddInteger(bbox.right);
872 pBBox->AddInteger(bbox.top); 872 pBBox->AddInteger(bbox.top);
873 pFontDesc->SetAt("FontBBox", pBBox); 873 pFontDesc->SetFor("FontBBox", pBBox);
874 int32_t nStemV = 0; 874 int32_t nStemV = 0;
875 if (pFont->GetSubstFont()) { 875 if (pFont->GetSubstFont()) {
876 nStemV = pFont->GetSubstFont()->m_Weight / 5; 876 nStemV = pFont->GetSubstFont()->m_Weight / 5;
877 } else { 877 } else {
878 static const FX_CHAR stem_chars[] = {'i', 'I', '!', '1'}; 878 static const FX_CHAR stem_chars[] = {'i', 'I', '!', '1'};
879 const size_t count = FX_ArraySize(stem_chars); 879 const size_t count = FX_ArraySize(stem_chars);
880 uint32_t glyph = pEncoding->GlyphFromCharCode(stem_chars[0]); 880 uint32_t glyph = pEncoding->GlyphFromCharCode(stem_chars[0]);
881 nStemV = pFont->GetGlyphWidth(glyph); 881 nStemV = pFont->GetGlyphWidth(glyph);
882 for (size_t i = 1; i < count; i++) { 882 for (size_t i = 1; i < count; i++) {
883 glyph = pEncoding->GlyphFromCharCode(stem_chars[i]); 883 glyph = pEncoding->GlyphFromCharCode(stem_chars[i]);
884 int width = pFont->GetGlyphWidth(glyph); 884 int width = pFont->GetGlyphWidth(glyph);
885 if (width > 0 && width < nStemV) 885 if (width > 0 && width < nStemV)
886 nStemV = width; 886 nStemV = width;
887 } 887 }
888 } 888 }
889 pFontDesc->SetAtInteger("StemV", nStemV); 889 pFontDesc->SetIntegerFor("StemV", nStemV);
890 AddIndirectObject(pFontDesc); 890 AddIndirectObject(pFontDesc);
891 pFontDict->SetAtReference("FontDescriptor", this, pFontDesc); 891 pFontDict->SetReferenceFor("FontDescriptor", this, pFontDesc);
892 return LoadFont(pBaseDict); 892 return LoadFont(pBaseDict);
893 } 893 }
894 894
895 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 895 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
896 CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTW* pLogFont, 896 CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTW* pLogFont,
897 FX_BOOL bVert, 897 FX_BOOL bVert,
898 FX_BOOL bTranslateName) { 898 FX_BOOL bTranslateName) {
899 LOGFONTA lfa; 899 LOGFONTA lfa;
900 FXSYS_memcpy(&lfa, pLogFont, (char*)lfa.lfFaceName - (char*)&lfa); 900 FXSYS_memcpy(&lfa, pLogFont, (char*)lfa.lfFaceName - (char*)&lfa);
901 CFX_ByteString face = CFX_ByteString::FromUnicode(pLogFont->lfFaceName); 901 CFX_ByteString face = CFX_ByteString::FromUnicode(pLogFont->lfFaceName);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 944
945 int italicangle = ptm->otmItalicAngle / 10; 945 int italicangle = ptm->otmItalicAngle / 10;
946 int ascend = ptm->otmrcFontBox.top; 946 int ascend = ptm->otmrcFontBox.top;
947 int descend = ptm->otmrcFontBox.bottom; 947 int descend = ptm->otmrcFontBox.bottom;
948 int capheight = ptm->otmsCapEmHeight; 948 int capheight = ptm->otmsCapEmHeight;
949 int bbox[4] = {ptm->otmrcFontBox.left, ptm->otmrcFontBox.bottom, 949 int bbox[4] = {ptm->otmrcFontBox.left, ptm->otmrcFontBox.bottom,
950 ptm->otmrcFontBox.right, ptm->otmrcFontBox.top}; 950 ptm->otmrcFontBox.right, ptm->otmrcFontBox.top};
951 FX_Free(tm_buf); 951 FX_Free(tm_buf);
952 basefont.Replace(" ", ""); 952 basefont.Replace(" ", "");
953 CPDF_Dictionary* pBaseDict = new CPDF_Dictionary; 953 CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
954 pBaseDict->SetAtName("Type", "Font"); 954 pBaseDict->SetNameFor("Type", "Font");
955 CPDF_Dictionary* pFontDict = pBaseDict; 955 CPDF_Dictionary* pFontDict = pBaseDict;
956 if (!bCJK) { 956 if (!bCJK) {
957 if (pLogFont->lfCharSet == ANSI_CHARSET || 957 if (pLogFont->lfCharSet == ANSI_CHARSET ||
958 pLogFont->lfCharSet == DEFAULT_CHARSET || 958 pLogFont->lfCharSet == DEFAULT_CHARSET ||
959 pLogFont->lfCharSet == SYMBOL_CHARSET) { 959 pLogFont->lfCharSet == SYMBOL_CHARSET) {
960 pBaseDict->SetAtName("Encoding", "WinAnsiEncoding"); 960 pBaseDict->SetNameFor("Encoding", "WinAnsiEncoding");
961 } else { 961 } else {
962 CalculateEncodingDict(pLogFont->lfCharSet, pBaseDict); 962 CalculateEncodingDict(pLogFont->lfCharSet, pBaseDict);
963 } 963 }
964 int char_widths[224]; 964 int char_widths[224];
965 GetCharWidth(hDC, 32, 255, char_widths); 965 GetCharWidth(hDC, 32, 255, char_widths);
966 CPDF_Array* pWidths = new CPDF_Array; 966 CPDF_Array* pWidths = new CPDF_Array;
967 for (size_t i = 0; i < 224; i++) 967 for (size_t i = 0; i < 224; i++)
968 pWidths->AddInteger(char_widths[i]); 968 pWidths->AddInteger(char_widths[i]);
969 ProcessNonbCJK(pBaseDict, pLogFont->lfWeight > FW_MEDIUM, 969 ProcessNonbCJK(pBaseDict, pLogFont->lfWeight > FW_MEDIUM,
970 pLogFont->lfItalic != 0, basefont, pWidths); 970 pLogFont->lfItalic != 0, basefont, pWidths);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 pWidthArray->AddInteger(231); 1004 pWidthArray->AddInteger(231);
1005 InsertWidthArray(hDC, 0x20, 0x7d, pWidthArray); 1005 InsertWidthArray(hDC, 0x20, 0x7d, pWidthArray);
1006 pWidthArray->AddInteger(326); 1006 pWidthArray->AddInteger(326);
1007 InsertWidthArray(hDC, 0xa0, 0xa0, pWidthArray); 1007 InsertWidthArray(hDC, 0xa0, 0xa0, pWidthArray);
1008 pWidthArray->AddInteger(327); 1008 pWidthArray->AddInteger(327);
1009 InsertWidthArray(hDC, 0xa1, 0xdf, pWidthArray); 1009 InsertWidthArray(hDC, 0xa1, 0xdf, pWidthArray);
1010 pWidthArray->AddInteger(631); 1010 pWidthArray->AddInteger(631);
1011 InsertWidthArray(hDC, 0x7e, 0x7e, pWidthArray); 1011 InsertWidthArray(hDC, 0x7e, 0x7e, pWidthArray);
1012 break; 1012 break;
1013 } 1013 }
1014 pBaseDict->SetAtName("Subtype", "Type0"); 1014 pBaseDict->SetNameFor("Subtype", "Type0");
1015 pBaseDict->SetAtName("BaseFont", basefont); 1015 pBaseDict->SetNameFor("BaseFont", basefont);
1016 pBaseDict->SetAtName("Encoding", cmap); 1016 pBaseDict->SetNameFor("Encoding", cmap);
1017 pFontDict->SetAt("W", pWidthArray); 1017 pFontDict->SetFor("W", pWidthArray);
1018 pFontDict->SetAtName("Type", "Font"); 1018 pFontDict->SetNameFor("Type", "Font");
1019 pFontDict->SetAtName("Subtype", "CIDFontType2"); 1019 pFontDict->SetNameFor("Subtype", "CIDFontType2");
1020 pFontDict->SetAtName("BaseFont", basefont); 1020 pFontDict->SetNameFor("BaseFont", basefont);
1021 CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary; 1021 CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
1022 pCIDSysInfo->SetAtString("Registry", "Adobe"); 1022 pCIDSysInfo->SetStringFor("Registry", "Adobe");
1023 pCIDSysInfo->SetAtString("Ordering", ordering); 1023 pCIDSysInfo->SetStringFor("Ordering", ordering);
1024 pCIDSysInfo->SetAtInteger("Supplement", supplement); 1024 pCIDSysInfo->SetIntegerFor("Supplement", supplement);
1025 pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo); 1025 pFontDict->SetFor("CIDSystemInfo", pCIDSysInfo);
1026 CPDF_Array* pArray = new CPDF_Array; 1026 CPDF_Array* pArray = new CPDF_Array;
1027 pBaseDict->SetAt("DescendantFonts", pArray); 1027 pBaseDict->SetFor("DescendantFonts", pArray);
1028 AddIndirectObject(pFontDict); 1028 AddIndirectObject(pFontDict);
1029 pArray->AddReference(this, pFontDict); 1029 pArray->AddReference(this, pFontDict);
1030 } 1030 }
1031 AddIndirectObject(pBaseDict); 1031 AddIndirectObject(pBaseDict);
1032 CPDF_Dictionary* pFontDesc = new CPDF_Dictionary; 1032 CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
1033 pFontDesc->SetAtName("Type", "FontDescriptor"); 1033 pFontDesc->SetNameFor("Type", "FontDescriptor");
1034 pFontDesc->SetAtName("FontName", basefont); 1034 pFontDesc->SetNameFor("FontName", basefont);
1035 pFontDesc->SetAtInteger("Flags", flags); 1035 pFontDesc->SetIntegerFor("Flags", flags);
1036 CPDF_Array* pBBox = new CPDF_Array; 1036 CPDF_Array* pBBox = new CPDF_Array;
1037 for (int i = 0; i < 4; i++) 1037 for (int i = 0; i < 4; i++)
1038 pBBox->AddInteger(bbox[i]); 1038 pBBox->AddInteger(bbox[i]);
1039 pFontDesc->SetAt("FontBBox", pBBox); 1039 pFontDesc->SetFor("FontBBox", pBBox);
1040 pFontDesc->SetAtInteger("ItalicAngle", italicangle); 1040 pFontDesc->SetIntegerFor("ItalicAngle", italicangle);
1041 pFontDesc->SetAtInteger("Ascent", ascend); 1041 pFontDesc->SetIntegerFor("Ascent", ascend);
1042 pFontDesc->SetAtInteger("Descent", descend); 1042 pFontDesc->SetIntegerFor("Descent", descend);
1043 pFontDesc->SetAtInteger("CapHeight", capheight); 1043 pFontDesc->SetIntegerFor("CapHeight", capheight);
1044 pFontDesc->SetAtInteger("StemV", pLogFont->lfWeight / 5); 1044 pFontDesc->SetIntegerFor("StemV", pLogFont->lfWeight / 5);
1045 AddIndirectObject(pFontDesc); 1045 AddIndirectObject(pFontDesc);
1046 pFontDict->SetAtReference("FontDescriptor", this, pFontDesc); 1046 pFontDict->SetReferenceFor("FontDescriptor", this, pFontDesc);
1047 hFont = SelectObject(hDC, hFont); 1047 hFont = SelectObject(hDC, hFont);
1048 DeleteObject(hFont); 1048 DeleteObject(hFont);
1049 DeleteDC(hDC); 1049 DeleteDC(hDC);
1050 return LoadFont(pBaseDict); 1050 return LoadFont(pBaseDict);
1051 } 1051 }
1052 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 1052 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_parser/cpdf_dictionary.cpp ('k') | core/fpdfapi/fpdf_parser/cpdf_hint_tables.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698