OLD | NEW |
1 #include "SkNativeParsedPDF.h" | 1 #include "SkNativeParsedPDF.h" |
2 #include "SkPdfNativeTokenizer.h" | 2 #include "SkPdfNativeTokenizer.h" |
3 #include "SkPdfBasics.h" | 3 #include "SkPdfBasics.h" |
4 #include "SkPdfObject.h" | 4 #include "SkPdfObject.h" |
5 | 5 |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <string.h> | 7 #include <string.h> |
8 #include <sys/types.h> | 8 #include <sys/types.h> |
9 #include <sys/stat.h> | 9 #include <sys/stat.h> |
10 | 10 |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 long dummy; | 200 long dummy; |
201 current = readTrailer(current, end, true, &dummy, true); | 201 current = readTrailer(current, end, true, &dummy, true); |
202 } else if (token.isKeyword("startxref")) { | 202 } else if (token.isKeyword("startxref")) { |
203 token.reset(); | 203 token.reset(); |
204 current = nextObject(0, current, end, &token, NULL, NULL); // ignor
e | 204 current = nextObject(0, current, end, &token, NULL, NULL); // ignor
e |
205 } | 205 } |
206 | 206 |
207 current = skipPdfWhiteSpaces(0, current, end); | 207 current = skipPdfWhiteSpaces(0, current, end); |
208 } | 208 } |
209 | 209 |
| 210 // TODO(edisonn): hack, detect root catalog - we need to implement liniarize
d support, and remove this hack. |
| 211 if (!fRootCatalogRef) { |
| 212 for (unsigned int i = 0 ; i < objects(); i++) { |
| 213 SkPdfObject* obj = object(i); |
| 214 SkPdfObject* root = (obj && obj->isDictionary()) ? obj->get("Root")
: NULL; |
| 215 if (root && root->isReference()) { |
| 216 fRootCatalogRef = root; |
| 217 } |
| 218 } |
| 219 } |
| 220 |
| 221 |
210 if (fRootCatalogRef) { | 222 if (fRootCatalogRef) { |
211 fRootCatalog = (SkPdfCatalogDictionary*)resolveReference(fRootCatalogRef
); | 223 fRootCatalog = (SkPdfCatalogDictionary*)resolveReference(fRootCatalogRef
); |
212 if (fRootCatalog->isDictionary() && fRootCatalog->valid()) { | 224 if (fRootCatalog->isDictionary() && fRootCatalog->valid()) { |
213 SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this); | 225 SkPdfPageTreeNodeDictionary* tree = fRootCatalog->Pages(this); |
214 if (tree && tree->isDictionary() && tree->valid()) { | 226 if (tree && tree->isDictionary() && tree->valid()) { |
215 fillPages(tree); | 227 fillPages(tree); |
216 } | 228 } |
217 } | 229 } |
218 } | 230 } |
219 | 231 |
| 232 |
220 } | 233 } |
221 | 234 |
222 // TODO(edisonn): NYI | 235 // TODO(edisonn): NYI |
223 SkNativeParsedPDF::~SkNativeParsedPDF() { | 236 SkNativeParsedPDF::~SkNativeParsedPDF() { |
224 sk_free((void*)fFileContent); | 237 sk_free((void*)fFileContent); |
225 delete fAllocator; | 238 delete fAllocator; |
226 } | 239 } |
227 | 240 |
228 const unsigned char* SkNativeParsedPDF::readCrossReferenceSection(const unsigned
char* xrefStart, const unsigned char* trailerEnd) { | 241 const unsigned char* SkNativeParsedPDF::readCrossReferenceSection(const unsigned
char* xrefStart, const unsigned char* trailerEnd) { |
229 SkPdfObject xref; | 242 SkPdfObject xref; |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 return (SkPdfObject*)ref; | 570 return (SkPdfObject*)ref; |
558 } | 571 } |
559 | 572 |
560 size_t SkNativeParsedPDF::bytesUsed() const { | 573 size_t SkNativeParsedPDF::bytesUsed() const { |
561 return fAllocator->bytesUsed() + | 574 return fAllocator->bytesUsed() + |
562 fContentLength + | 575 fContentLength + |
563 fObjects.count() * sizeof(PublicObjectEntry) + | 576 fObjects.count() * sizeof(PublicObjectEntry) + |
564 fPages.count() * sizeof(SkPdfPageObjectDictionary*) + | 577 fPages.count() * sizeof(SkPdfPageObjectDictionary*) + |
565 sizeof(*this); | 578 sizeof(*this); |
566 } | 579 } |
OLD | NEW |