| 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/fpdf_parser/include/cpdf_array.h" | 7 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" |
| 8 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" | 8 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" |
| 9 #include "core/fpdfdoc/doc_utils.h" | 9 #include "core/fpdfdoc/doc_utils.h" |
| 10 #include "core/include/fpdfdoc/fpdf_doc.h" | 10 #include "core/include/fpdfdoc/fpdf_doc.h" |
| 11 | 11 |
| 12 namespace { | 12 namespace { |
| 13 | 13 |
| 14 const int nMaxRecursion = 32; | 14 const int nMaxRecursion = 32; |
| 15 const FX_CHAR* const g_sZoomModes[] = {"XYZ", "Fit", "FitH", "FitV", "FitR", | 15 const FX_CHAR* const g_sZoomModes[] = {"XYZ", "Fit", "FitH", "FitV", "FitR", |
| 16 "FitB", "FitBH", "FitBV", nullptr}; | 16 "FitB", "FitBH", "FitBV", nullptr}; |
| 17 | 17 |
| 18 } // namespace | 18 } // namespace |
| 19 | 19 |
| 20 int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) { | 20 int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) { |
| 21 CPDF_Array* pArray = ToArray(m_pObj); | 21 CPDF_Array* pArray = ToArray(m_pObj); |
| 22 if (!pArray) | 22 if (!pArray) |
| 23 return 0; | 23 return 0; |
| 24 | 24 |
| 25 CPDF_Object* pPage = pArray->GetElementValue(0); | 25 CPDF_Object* pPage = pArray->GetDirectObjectAt(0); |
| 26 if (!pPage) | 26 if (!pPage) |
| 27 return 0; | 27 return 0; |
| 28 if (pPage->IsNumber()) | 28 if (pPage->IsNumber()) |
| 29 return pPage->GetInteger(); | 29 return pPage->GetInteger(); |
| 30 if (!pPage->IsDictionary()) | 30 if (!pPage->IsDictionary()) |
| 31 return 0; | 31 return 0; |
| 32 return pDoc->GetPageIndex(pPage->GetObjNum()); | 32 return pDoc->GetPageIndex(pPage->GetObjNum()); |
| 33 } | 33 } |
| 34 uint32_t CPDF_Dest::GetPageObjNum() { | 34 uint32_t CPDF_Dest::GetPageObjNum() { |
| 35 CPDF_Array* pArray = ToArray(m_pObj); | 35 CPDF_Array* pArray = ToArray(m_pObj); |
| 36 if (!pArray) | 36 if (!pArray) |
| 37 return 0; | 37 return 0; |
| 38 | 38 |
| 39 CPDF_Object* pPage = pArray->GetElementValue(0); | 39 CPDF_Object* pPage = pArray->GetDirectObjectAt(0); |
| 40 if (!pPage) | 40 if (!pPage) |
| 41 return 0; | 41 return 0; |
| 42 if (pPage->IsNumber()) | 42 if (pPage->IsNumber()) |
| 43 return pPage->GetInteger(); | 43 return pPage->GetInteger(); |
| 44 if (pPage->IsDictionary()) | 44 if (pPage->IsDictionary()) |
| 45 return pPage->GetObjNum(); | 45 return pPage->GetObjNum(); |
| 46 return 0; | 46 return 0; |
| 47 } | 47 } |
| 48 | 48 |
| 49 int CPDF_Dest::GetZoomMode() { | 49 int CPDF_Dest::GetZoomMode() { |
| 50 CPDF_Array* pArray = ToArray(m_pObj); | 50 CPDF_Array* pArray = ToArray(m_pObj); |
| 51 if (!pArray) | 51 if (!pArray) |
| 52 return 0; | 52 return 0; |
| 53 | 53 |
| 54 CPDF_Object* pObj = pArray->GetElementValue(1); | 54 CPDF_Object* pObj = pArray->GetDirectObjectAt(1); |
| 55 if (!pObj) | 55 if (!pObj) |
| 56 return 0; | 56 return 0; |
| 57 | 57 |
| 58 CFX_ByteString mode = pObj->GetString(); | 58 CFX_ByteString mode = pObj->GetString(); |
| 59 for (int i = 0; g_sZoomModes[i]; ++i) { | 59 for (int i = 0; g_sZoomModes[i]; ++i) { |
| 60 if (mode == g_sZoomModes[i]) | 60 if (mode == g_sZoomModes[i]) |
| 61 return i + 1; | 61 return i + 1; |
| 62 } | 62 } |
| 63 | 63 |
| 64 return 0; | 64 return 0; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 if (ppFind) { | 109 if (ppFind) { |
| 110 *ppFind = pNames; | 110 *ppFind = pNames; |
| 111 } | 111 } |
| 112 if (iCompare < 0) { | 112 if (iCompare < 0) { |
| 113 continue; | 113 continue; |
| 114 } | 114 } |
| 115 } else { | 115 } else { |
| 116 break; | 116 break; |
| 117 } | 117 } |
| 118 nIndex += i; | 118 nIndex += i; |
| 119 return pNames->GetElementValue(i * 2 + 1); | 119 return pNames->GetDirectObjectAt(i * 2 + 1); |
| 120 } | 120 } |
| 121 nIndex += dwCount; | 121 nIndex += dwCount; |
| 122 return NULL; | 122 return NULL; |
| 123 } | 123 } |
| 124 CPDF_Array* pKids = pNode->GetArrayBy("Kids"); | 124 CPDF_Array* pKids = pNode->GetArrayBy("Kids"); |
| 125 if (!pKids) { | 125 if (!pKids) { |
| 126 return NULL; | 126 return NULL; |
| 127 } | 127 } |
| 128 for (uint32_t i = 0; i < pKids->GetCount(); i++) { | 128 for (uint32_t i = 0; i < pKids->GetCount(); i++) { |
| 129 CPDF_Dictionary* pKid = pKids->GetDictAt(i); | 129 CPDF_Dictionary* pKid = pKids->GetDictAt(i); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 151 if (pNames) { | 151 if (pNames) { |
| 152 int nCount = pNames->GetCount() / 2; | 152 int nCount = pNames->GetCount() / 2; |
| 153 if (nIndex >= nCurIndex + nCount) { | 153 if (nIndex >= nCurIndex + nCount) { |
| 154 nCurIndex += nCount; | 154 nCurIndex += nCount; |
| 155 return NULL; | 155 return NULL; |
| 156 } | 156 } |
| 157 if (ppFind) { | 157 if (ppFind) { |
| 158 *ppFind = pNames; | 158 *ppFind = pNames; |
| 159 } | 159 } |
| 160 csName = pNames->GetStringAt((nIndex - nCurIndex) * 2); | 160 csName = pNames->GetStringAt((nIndex - nCurIndex) * 2); |
| 161 return pNames->GetElementValue((nIndex - nCurIndex) * 2 + 1); | 161 return pNames->GetDirectObjectAt((nIndex - nCurIndex) * 2 + 1); |
| 162 } | 162 } |
| 163 CPDF_Array* pKids = pNode->GetArrayBy("Kids"); | 163 CPDF_Array* pKids = pNode->GetArrayBy("Kids"); |
| 164 if (!pKids) { | 164 if (!pKids) { |
| 165 return NULL; | 165 return NULL; |
| 166 } | 166 } |
| 167 for (uint32_t i = 0; i < pKids->GetCount(); i++) { | 167 for (uint32_t i = 0; i < pKids->GetCount(); i++) { |
| 168 CPDF_Dictionary* pKid = pKids->GetDictAt(i); | 168 CPDF_Dictionary* pKid = pKids->GetDictAt(i); |
| 169 if (!pKid) { | 169 if (!pKid) { |
| 170 continue; | 170 continue; |
| 171 } | 171 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 int nIndex = 0; | 230 int nIndex = 0; |
| 231 return SearchNameNode(m_pRoot, csName, nIndex, NULL); | 231 return SearchNameNode(m_pRoot, csName, nIndex, NULL); |
| 232 } | 232 } |
| 233 CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc, | 233 CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc, |
| 234 const CFX_ByteStringC& sName) { | 234 const CFX_ByteStringC& sName) { |
| 235 CPDF_Object* pValue = LookupValue(sName); | 235 CPDF_Object* pValue = LookupValue(sName); |
| 236 if (!pValue) { | 236 if (!pValue) { |
| 237 CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDictBy("Dests"); | 237 CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDictBy("Dests"); |
| 238 if (!pDests) | 238 if (!pDests) |
| 239 return nullptr; | 239 return nullptr; |
| 240 pValue = pDests->GetElementValue(sName); | 240 pValue = pDests->GetDirectObjectBy(sName); |
| 241 } | 241 } |
| 242 if (!pValue) | 242 if (!pValue) |
| 243 return nullptr; | 243 return nullptr; |
| 244 if (CPDF_Array* pArray = pValue->AsArray()) | 244 if (CPDF_Array* pArray = pValue->AsArray()) |
| 245 return pArray; | 245 return pArray; |
| 246 if (CPDF_Dictionary* pDict = pValue->AsDictionary()) | 246 if (CPDF_Dictionary* pDict = pValue->AsDictionary()) |
| 247 return pDict->GetArrayBy("D"); | 247 return pDict->GetArrayBy("D"); |
| 248 return nullptr; | 248 return nullptr; |
| 249 } | 249 } |
| 250 | 250 |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 int nPage = FXSYS_atoi(bsLbl); | 508 int nPage = FXSYS_atoi(bsLbl); |
| 509 if (nPage > 0 && nPage <= nPages) { | 509 if (nPage > 0 && nPage <= nPages) { |
| 510 return nPage; | 510 return nPage; |
| 511 } | 511 } |
| 512 return -1; | 512 return -1; |
| 513 } | 513 } |
| 514 int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const { | 514 int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const { |
| 515 CFX_ByteString bsLabel = PDF_EncodeText(wsLabel.GetPtr()); | 515 CFX_ByteString bsLabel = PDF_EncodeText(wsLabel.GetPtr()); |
| 516 return GetPageByLabel(bsLabel); | 516 return GetPageByLabel(bsLabel); |
| 517 } | 517 } |
| OLD | NEW |