OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkPdfNativeDoc.h" | 8 #include "SkPdfNativeDoc.h" |
9 | 9 |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 readTrailer(trailerStart, xrefstartKeywordLine, storeCatalog, &xrefB
yteOffset, false); | 133 readTrailer(trailerStart, xrefstartKeywordLine, storeCatalog, &xrefB
yteOffset, false); |
134 storeCatalog = false; | 134 storeCatalog = false; |
135 } | 135 } |
136 } | 136 } |
137 | 137 |
138 // TODO(edisonn): warn/error expect fObjects[fRefCatalogId].fGeneration == f
RefCatalogGeneration | 138 // TODO(edisonn): warn/error expect fObjects[fRefCatalogId].fGeneration == f
RefCatalogGeneration |
139 // TODO(edisonn): security, verify that SkPdfCatalogDictionary is indeed usi
ng mapper | 139 // TODO(edisonn): security, verify that SkPdfCatalogDictionary is indeed usi
ng mapper |
140 | 140 |
141 if (fRootCatalogRef) { | 141 if (fRootCatalogRef) { |
142 fRootCatalog = (SkPdfCatalogDictionary*)resolveReference(fRootCatalogRef
); | 142 fRootCatalog = (SkPdfCatalogDictionary*)resolveReference(fRootCatalogRef
); |
143 if (fRootCatalog->isDictionary() && fRootCatalog->valid()) { | 143 if (fRootCatalog != NULL && fRootCatalog->isDictionary() && fRootCatalog
->valid()) { |
144 SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this); | 144 SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this); |
145 if (tree && tree->isDictionary() && tree->valid()) { | 145 if (tree && tree->isDictionary() && tree->valid()) { |
146 fillPages(tree); | 146 fillPages(tree); |
147 } | 147 } |
148 } | 148 } |
149 } | 149 } |
150 | 150 |
151 if (pages() == 0) { | 151 if (pages() == 0) { |
152 // TODO(edisonn): probably it would be better to return NULL and make a
clean document. | 152 // TODO(edisonn): probably it would be better to return NULL and make a
clean document. |
153 loadWithoutXRef(); | 153 loadWithoutXRef(); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 SkPdfNativeObject* obj = object(i); | 215 SkPdfNativeObject* obj = object(i); |
216 SkPdfNativeObject* root = (obj && obj->isDictionary()) ? obj->get("R
oot") : NULL; | 216 SkPdfNativeObject* root = (obj && obj->isDictionary()) ? obj->get("R
oot") : NULL; |
217 if (root && root->isReference()) { | 217 if (root && root->isReference()) { |
218 fRootCatalogRef = root; | 218 fRootCatalogRef = root; |
219 } | 219 } |
220 } | 220 } |
221 } | 221 } |
222 | 222 |
223 if (fRootCatalogRef) { | 223 if (fRootCatalogRef) { |
224 fRootCatalog = (SkPdfCatalogDictionary*)resolveReference(fRootCatalogRef
); | 224 fRootCatalog = (SkPdfCatalogDictionary*)resolveReference(fRootCatalogRef
); |
225 if (fRootCatalog->isDictionary() && fRootCatalog->valid()) { | 225 if (fRootCatalog != NULL && fRootCatalog->isDictionary() && fRootCatalog
->valid()) { |
226 SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this); | 226 SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this); |
227 if (tree && tree->isDictionary() && tree->valid()) { | 227 if (tree && tree->isDictionary() && tree->valid()) { |
228 fillPages(tree); | 228 fillPages(tree); |
229 } | 229 } |
230 } | 230 } |
231 } | 231 } |
232 | 232 |
233 | 233 |
234 } | 234 } |
235 | 235 |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 // here unless we check for resolved reference on next line. | 576 // here unless we check for resolved reference on next line. |
577 // Determine if the pdf is corrupted, or we have a bug here. | 577 // Determine if the pdf is corrupted, or we have a bug here. |
578 | 578 |
579 // Avoids recursive calls | 579 // Avoids recursive calls |
580 fObjects[id].fIsReferenceResolved = true; | 580 fObjects[id].fIsReferenceResolved = true; |
581 | 581 |
582 if (fObjects[id].fObj == NULL) { | 582 if (fObjects[id].fObj == NULL) { |
583 fObjects[id].fObj = readObject(id); | 583 fObjects[id].fObj = readObject(id); |
584 } | 584 } |
585 | 585 |
586 if (fObjects[id].fResolvedReference == NULL) { | 586 if (fObjects[id].fObj != NULL && fObjects[id].fResolvedReference == NULL
) { |
587 if (!fObjects[id].fObj->isReference()) { | 587 if (!fObjects[id].fObj->isReference()) { |
588 fObjects[id].fResolvedReference = fObjects[id].fObj; | 588 fObjects[id].fResolvedReference = fObjects[id].fObj; |
589 } else { | 589 } else { |
590 fObjects[id].fResolvedReference = resolveReference(fObjects[id].
fObj); | 590 fObjects[id].fResolvedReference = resolveReference(fObjects[id].
fObj); |
591 } | 591 } |
592 } | 592 } |
593 | 593 |
594 return fObjects[id].fResolvedReference; | 594 return fObjects[id].fResolvedReference; |
595 } | 595 } |
596 | 596 |
597 return (SkPdfNativeObject*)ref; | 597 return (SkPdfNativeObject*)ref; |
598 } | 598 } |
599 | 599 |
600 size_t SkPdfNativeDoc::bytesUsed() const { | 600 size_t SkPdfNativeDoc::bytesUsed() const { |
601 return fAllocator->bytesUsed() + | 601 return fAllocator->bytesUsed() + |
602 fContentLength + | 602 fContentLength + |
603 fObjects.count() * sizeof(PublicObjectEntry) + | 603 fObjects.count() * sizeof(PublicObjectEntry) + |
604 fPages.count() * sizeof(SkPdfPageObjectDictionary*) + | 604 fPages.count() * sizeof(SkPdfPageObjectDictionary*) + |
605 sizeof(*this); | 605 sizeof(*this); |
606 } | 606 } |
OLD | NEW |