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

Side by Side Diff: fpdfsdk/src/fpdfppo.cpp

Issue 1410343003: [Merge to XFA] Revert "Revert "Add type cast definitions for CPDF_Dictionary."" (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Rebase to origin/xfa Created 5 years, 2 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 | « fpdfsdk/src/fpdfeditpage.cpp ('k') | fpdfsdk/src/fpdfview.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 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 "../../public/fpdf_ppo.h" 7 #include "../../public/fpdf_ppo.h"
8 #include "../include/fsdk_define.h" 8 #include "../include/fsdk_define.h"
9 #include "../include/fpdfxfa/fpdfxfa_doc.h" 9 #include "../include/fpdfxfa/fpdfxfa_doc.h"
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 CFX_ByteString producerstr; 52 CFX_ByteString producerstr;
53 producerstr.Format("PDFium"); 53 producerstr.Format("PDFium");
54 DInfoDict->SetAt("Producer", new CPDF_String(producerstr)); 54 DInfoDict->SetAt("Producer", new CPDF_String(producerstr));
55 55
56 // Set type//////////////////////////////////////////////////////////////// 56 // Set type////////////////////////////////////////////////////////////////
57 CFX_ByteString cbRootType = pNewRoot->GetString("Type", ""); 57 CFX_ByteString cbRootType = pNewRoot->GetString("Type", "");
58 if (cbRootType.Equal("")) { 58 if (cbRootType.Equal("")) {
59 pNewRoot->SetAt("Type", new CPDF_Name("Catalog")); 59 pNewRoot->SetAt("Type", new CPDF_Name("Catalog"));
60 } 60 }
61 61
62 CPDF_Dictionary* pNewPages = 62 CPDF_Dictionary* pNewPages = ToDictionary(
63 (CPDF_Dictionary*)(pNewRoot->GetElement("Pages") 63 pNewRoot->GetElement("Pages") ? pNewRoot->GetElement("Pages")->GetDirect()
64 ? pNewRoot->GetElement("Pages")->GetDirect() 64 : nullptr);
65 : NULL); 65
66 if (!pNewPages) { 66 if (!pNewPages) {
67 pNewPages = new CPDF_Dictionary; 67 pNewPages = new CPDF_Dictionary;
68 FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages); 68 FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages);
69 pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON)); 69 pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON));
70 } 70 }
71 71
72 CFX_ByteString cbPageType = pNewPages->GetString("Type", ""); 72 CFX_ByteString cbPageType = pNewPages->GetString("Type", "");
73 if (cbPageType.Equal("")) { 73 if (cbPageType.Equal("")) {
74 pNewPages->SetAt("Type", new CPDF_Name("Pages")); 74 pNewPages->SetAt("Type", new CPDF_Name("Pages"));
75 } 75 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 CFX_ByteString nSrctag) { 184 CFX_ByteString nSrctag) {
185 if (!pDict || !pDict->KeyExist("Type") || nSrctag.IsEmpty()) 185 if (!pDict || !pDict->KeyExist("Type") || nSrctag.IsEmpty())
186 return NULL; 186 return NULL;
187 187
188 CPDF_Object* pType = pDict->GetElement("Type")->GetDirect(); 188 CPDF_Object* pType = pDict->GetElement("Type")->GetDirect();
189 if (!pType || pType->GetType() != PDFOBJ_NAME) 189 if (!pType || pType->GetType() != PDFOBJ_NAME)
190 return NULL; 190 return NULL;
191 191
192 if (pType->GetString().Compare("Page")) 192 if (pType->GetString().Compare("Page"))
193 return NULL; 193 return NULL;
194
195 if (!pDict->KeyExist("Parent")) 194 if (!pDict->KeyExist("Parent"))
196 return NULL; 195 return NULL;
197 CPDF_Object* pParent = pDict->GetElement("Parent")->GetDirect();
198 if (!pParent || pParent->GetType() != PDFOBJ_DICTIONARY)
199 return NULL;
200 196
201 CPDF_Dictionary* pp = (CPDF_Dictionary*)pParent; 197 CPDF_Dictionary* pp = ToDictionary(pDict->GetElement("Parent")->GetDirect());
198 if (!pp)
199 return nullptr;
202 200
203 if (pDict->KeyExist((const char*)nSrctag)) 201 if (pDict->KeyExist((const char*)nSrctag))
204 return pDict->GetElement((const char*)nSrctag); 202 return pDict->GetElement((const char*)nSrctag);
203
205 while (pp) { 204 while (pp) {
206 if (pp->KeyExist((const char*)nSrctag)) 205 if (pp->KeyExist((const char*)nSrctag))
207 return pp->GetElement((const char*)nSrctag); 206 return pp->GetElement((const char*)nSrctag);
208 if (pp->KeyExist("Parent")) { 207 if (!pp->KeyExist("Parent")) {
209 pp = (CPDF_Dictionary*)pp->GetElement("Parent")->GetDirect();
210 if (pp->GetType() == PDFOBJ_NULL)
211 break;
212 } else
213 break; 208 break;
209 }
210 pp = ToDictionary(pp->GetElement("Parent")->GetDirect());
214 } 211 }
215 212 return nullptr;
216 return NULL;
217 } 213 }
218 214
219 FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj, 215 FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
220 CPDF_Document* pDoc, 216 CPDF_Document* pDoc,
221 CFX_MapPtrToPtr* pMapPtrToPtr) { 217 CFX_MapPtrToPtr* pMapPtrToPtr) {
222 switch (pObj->GetType()) { 218 switch (pObj->GetType()) {
223 case PDFOBJ_REFERENCE: { 219 case PDFOBJ_REFERENCE: {
224 CPDF_Reference* pReference = (CPDF_Reference*)pObj; 220 CPDF_Reference* pReference = (CPDF_Reference*)pObj;
225 int newobjnum = GetNewObjId(pDoc, pMapPtrToPtr, pReference); 221 int newobjnum = GetNewObjId(pDoc, pMapPtrToPtr, pReference);
226 if (newobjnum == 0) 222 if (newobjnum == 0)
227 return FALSE; 223 return FALSE;
228 pReference->SetRef(pDoc, newobjnum); //, 0); 224 pReference->SetRef(pDoc, newobjnum); //, 0);
229 break; 225 break;
230 } 226 }
231 case PDFOBJ_DICTIONARY: { 227 case PDFOBJ_DICTIONARY: {
232 CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; 228 CPDF_Dictionary* pDict = pObj->AsDictionary();
233 229
234 FX_POSITION pos = pDict->GetStartPos(); 230 FX_POSITION pos = pDict->GetStartPos();
235 while (pos) { 231 while (pos) {
236 CFX_ByteString key(""); 232 CFX_ByteString key("");
237 CPDF_Object* pNextObj = pDict->GetNextElement(pos, key); 233 CPDF_Object* pNextObj = pDict->GetNextElement(pos, key);
238 if (!FXSYS_strcmp(key, "Parent") || !FXSYS_strcmp(key, "Prev") || 234 if (!FXSYS_strcmp(key, "Parent") || !FXSYS_strcmp(key, "Prev") ||
239 !FXSYS_strcmp(key, "First")) 235 !FXSYS_strcmp(key, "First"))
240 continue; 236 continue;
241 if (pNextObj) { 237 if (pNextObj) {
242 if (!UpdateReference(pNextObj, pDoc, pMapPtrToPtr)) 238 if (!UpdateReference(pNextObj, pDoc, pMapPtrToPtr))
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 CPDF_Object* pDirect = pRef->GetDirect(); 289 CPDF_Object* pDirect = pRef->GetDirect();
294 if (!pDirect) { 290 if (!pDirect) {
295 return 0; 291 return 0;
296 } 292 }
297 293
298 CPDF_Object* pClone = pDirect->Clone(); 294 CPDF_Object* pClone = pDirect->Clone();
299 if (!pClone) { 295 if (!pClone) {
300 return 0; 296 return 0;
301 } 297 }
302 298
303 if (pClone->GetType() == PDFOBJ_DICTIONARY) { 299 if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) {
304 CPDF_Dictionary* pDictClone = (CPDF_Dictionary*)pClone;
305 if (pDictClone->KeyExist("Type")) { 300 if (pDictClone->KeyExist("Type")) {
306 CFX_ByteString strType = pDictClone->GetString("Type"); 301 CFX_ByteString strType = pDictClone->GetString("Type");
307 if (!FXSYS_stricmp(strType, "Pages")) { 302 if (!FXSYS_stricmp(strType, "Pages")) {
308 pDictClone->Release(); 303 pDictClone->Release();
309 return 4; 304 return 4;
310 } else if (!FXSYS_stricmp(strType, "Page")) { 305 } else if (!FXSYS_stricmp(strType, "Page")) {
311 pDictClone->Release(); 306 pDictClone->Release();
312 return 0; 307 return 0;
313 } 308 }
314 } 309 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 if (!pSrcDict) 413 if (!pSrcDict)
419 return FALSE; 414 return FALSE;
420 415
421 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot(); 416 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
422 if (!pDstDict) 417 if (!pDstDict)
423 return FALSE; 418 return FALSE;
424 419
425 pDstDict->SetAt(FX_BSTRC("ViewerPreferences"), pSrcDict->Clone(TRUE)); 420 pDstDict->SetAt(FX_BSTRC("ViewerPreferences"), pSrcDict->Clone(TRUE));
426 return TRUE; 421 return TRUE;
427 } 422 }
OLDNEW
« no previous file with comments | « fpdfsdk/src/fpdfeditpage.cpp ('k') | fpdfsdk/src/fpdfview.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698