Chromium Code Reviews| 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 "core/fpdfapi/parser/cpdf_document.h" | 7 #include "core/fpdfapi/parser/cpdf_document.h" |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 485 if (objnum) { | 485 if (objnum) { |
| 486 if (CPDF_Dictionary* pDict = ToDictionary(GetOrParseIndirectObject(objnum))) | 486 if (CPDF_Dictionary* pDict = ToDictionary(GetOrParseIndirectObject(objnum))) |
| 487 return pDict; | 487 return pDict; |
| 488 return nullptr; | 488 return nullptr; |
| 489 } | 489 } |
| 490 | 490 |
| 491 CPDF_Dictionary* pPages = GetPagesDict(); | 491 CPDF_Dictionary* pPages = GetPagesDict(); |
| 492 if (!pPages) | 492 if (!pPages) |
| 493 return nullptr; | 493 return nullptr; |
| 494 | 494 |
| 495 int nPagesToGo = iPage - m_iNextPageToTraverse + 1; | |
| 496 if (nPagesToGo <= 0) { | |
|
npm
2016/11/09 20:32:56
This could also happen in cases where we just skip
snake
2016/11/09 20:46:47
I see this before. I will check this case.
| |
| 497 // This can be happened, when page have not objNum. | |
|
Lei Zhang
2016/11/09 20:19:41
Rephrase: "This can happen when the page does not
snake
2016/11/09 20:30:41
Done.
| |
| 498 // And on call GetPage with page index, which was traversed before, | |
| 499 // nPagesToGo will be less or zero and TraversePDFPages returns nullptr; | |
| 500 // Example "testing\corpus\fx\other\jetman_std.pdf" | |
|
Lei Zhang
2016/11/09 20:19:41
I would prefer to use "/" for path separator, sinc
snake
2016/11/09 20:30:41
Done.
| |
| 501 // We should restart traversing in this case. | |
| 502 // TODO(art-snake): optimize this. | |
|
npm
2016/11/09 20:32:56
To optimize, we could store the dict pointer when
snake
2016/11/09 20:46:47
I should think about this. May be more better gene
npm
2016/11/09 21:55:03
AFAIK objNum is 0 for CPDF_Object when its direct
snake
2016/11/09 22:39:47
Anyway, i will do this in other CL.
| |
| 503 m_pTreeTraversal.clear(); | |
|
npm
2016/11/09 20:32:56
nit: use ResetTraversal() instead.
snake
2016/11/09 20:46:47
Done.
| |
| 504 m_iNextPageToTraverse = 0; | |
| 505 nPagesToGo = iPage - m_iNextPageToTraverse + 1; | |
|
Lei Zhang
2016/11/09 20:19:41
nit: You already know |m_iNextPageToTraverse| is 0
snake
2016/11/09 20:30:41
Done.
| |
| 506 } | |
| 495 if (m_pTreeTraversal.empty()) | 507 if (m_pTreeTraversal.empty()) |
| 496 m_pTreeTraversal.push_back(std::make_pair(pPages, 0)); | 508 m_pTreeTraversal.push_back(std::make_pair(pPages, 0)); |
| 497 int nPagesToGo = iPage - m_iNextPageToTraverse + 1; | |
| 498 CPDF_Dictionary* pPage = TraversePDFPages(iPage, &nPagesToGo, 0); | 509 CPDF_Dictionary* pPage = TraversePDFPages(iPage, &nPagesToGo, 0); |
| 499 m_iNextPageToTraverse = iPage + 1; | 510 m_iNextPageToTraverse = iPage + 1; |
| 500 return pPage; | 511 return pPage; |
| 501 } | 512 } |
| 502 | 513 |
| 503 void CPDF_Document::SetPageObjNum(int iPage, uint32_t objNum) { | 514 void CPDF_Document::SetPageObjNum(int iPage, uint32_t objNum) { |
| 504 m_PageList.SetAt(iPage, objNum); | 515 m_PageList.SetAt(iPage, objNum); |
| 505 } | 516 } |
| 506 | 517 |
| 507 int CPDF_Document::FindPageIndex(CPDF_Dictionary* pNode, | 518 int CPDF_Document::FindPageIndex(CPDF_Dictionary* pNode, |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1037 pBBox, pLogFont->lfWeight / 5); | 1048 pBBox, pLogFont->lfWeight / 5); |
| 1038 pFontDesc->SetIntegerFor("CapHeight", capheight); | 1049 pFontDesc->SetIntegerFor("CapHeight", capheight); |
| 1039 pFontDict->SetReferenceFor("FontDescriptor", this, | 1050 pFontDict->SetReferenceFor("FontDescriptor", this, |
| 1040 AddIndirectObject(pFontDesc)); | 1051 AddIndirectObject(pFontDesc)); |
| 1041 hFont = SelectObject(hDC, hFont); | 1052 hFont = SelectObject(hDC, hFont); |
| 1042 DeleteObject(hFont); | 1053 DeleteObject(hFont); |
| 1043 DeleteDC(hDC); | 1054 DeleteDC(hDC); |
| 1044 return LoadFont(pBaseDict); | 1055 return LoadFont(pBaseDict); |
| 1045 } | 1056 } |
| 1046 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 1057 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
| OLD | NEW |