| Index: experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp
|
| ===================================================================
|
| --- experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp (revision 9987)
|
| +++ experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp (working copy)
|
| @@ -128,14 +128,14 @@
|
| while (current < trailerEnd) {
|
| token.reset();
|
| unsigned char* previous = current;
|
| - current = nextObject(current, trailerEnd, &token, NULL);
|
| + current = nextObject(current, trailerEnd, &token, NULL, NULL);
|
| if (!token.isInteger()) {
|
| return previous;
|
| }
|
|
|
| int startId = (int)token.intValue();
|
| token.reset();
|
| - current = nextObject(current, trailerEnd, &token, NULL);
|
| + current = nextObject(current, trailerEnd, &token, NULL, NULL);
|
|
|
| if (!token.isInteger()) {
|
| // TODO(edisonn): report/warning
|
| @@ -146,7 +146,7 @@
|
|
|
| for (int i = 0; i < entries; i++) {
|
| token.reset();
|
| - current = nextObject(current, trailerEnd, &token, NULL);
|
| + current = nextObject(current, trailerEnd, &token, NULL, NULL);
|
| if (!token.isInteger()) {
|
| // TODO(edisonn): report/warning
|
| return current;
|
| @@ -154,7 +154,7 @@
|
| int offset = (int)token.intValue();
|
|
|
| token.reset();
|
| - current = nextObject(current, trailerEnd, &token, NULL);
|
| + current = nextObject(current, trailerEnd, &token, NULL, NULL);
|
| if (!token.isInteger()) {
|
| // TODO(edisonn): report/warning
|
| return current;
|
| @@ -162,7 +162,7 @@
|
| int generation = (int)token.intValue();
|
|
|
| token.reset();
|
| - current = nextObject(current, trailerEnd, &token, NULL);
|
| + current = nextObject(current, trailerEnd, &token, NULL, NULL);
|
| if (!token.isKeyword() || token.len() != 1 || (*token.c_str() != 'f' && *token.c_str() != 'n')) {
|
| // TODO(edisonn): report/warning
|
| return current;
|
| @@ -179,7 +179,7 @@
|
| unsigned char* current = ignoreLine(trailerStart, trailerEnd); // TODO(edisonn): verify next keyord is "trailer" use nextObject here
|
|
|
| SkPdfObject token;
|
| - current = nextObject(current, trailerEnd, &token, fAllocator);
|
| + current = nextObject(current, trailerEnd, &token, fAllocator, NULL);
|
| if (!token.isDictionary()) {
|
| return -1;
|
| }
|
| @@ -214,7 +214,7 @@
|
| fObjects[id].fObj = NULL;
|
| }
|
|
|
| -SkPdfObject* SkNativeParsedPDF::readObject(int id/*, int expectedGeneration*/) const {
|
| +SkPdfObject* SkNativeParsedPDF::readObject(int id/*, int expectedGeneration*/) {
|
| long startOffset = fObjects[id].fOffset;
|
| //long endOffset = fObjects[id].fOffsetEnd;
|
| // TODO(edisonn): use hinted endOffset
|
| @@ -225,26 +225,26 @@
|
| unsigned char* current = fFileContent + startOffset;
|
| unsigned char* end = fFileContent + fContentLength;
|
|
|
| - SkPdfNativeTokenizer tokenizer(current, end - current, fMapper, fAllocator);
|
| + SkPdfNativeTokenizer tokenizer(current, end - current, fMapper, fAllocator, this);
|
|
|
| SkPdfObject idObj;
|
| SkPdfObject generationObj;
|
| SkPdfObject objKeyword;
|
| SkPdfObject* dict = fAllocator->allocObject();
|
|
|
| - current = nextObject(current, end, &idObj, NULL);
|
| + current = nextObject(current, end, &idObj, NULL, NULL);
|
| if (current >= end) {
|
| // TODO(edisonn): report warning/error
|
| return NULL;
|
| }
|
|
|
| - current = nextObject(current, end, &generationObj, NULL);
|
| + current = nextObject(current, end, &generationObj, NULL, NULL);
|
| if (current >= end) {
|
| // TODO(edisonn): report warning/error
|
| return NULL;
|
| }
|
|
|
| - current = nextObject(current, end, &objKeyword, NULL);
|
| + current = nextObject(current, end, &objKeyword, NULL, NULL);
|
| if (current >= end) {
|
| // TODO(edisonn): report warning/error
|
| return NULL;
|
| @@ -258,7 +258,7 @@
|
| // TODO(edisonn): report warning/error
|
| }
|
|
|
| - current = nextObject(current, end, dict, fAllocator);
|
| + current = nextObject(current, end, dict, fAllocator, this);
|
|
|
| // TODO(edisonn): report warning/error - verify last token is endobj
|
|
|
| @@ -293,7 +293,7 @@
|
| }
|
|
|
| // TODO(edisonn): Partial implemented. Move the logics directly in the code generator for inheritable and default value?
|
| -SkRect SkNativeParsedPDF::MediaBox(int page) const {
|
| +SkRect SkNativeParsedPDF::MediaBox(int page) {
|
| SkPdfPageObjectDictionary* current = fPages[page];
|
| while (!current->has_MediaBox() && current->has_Parent()) {
|
| current = (SkPdfPageObjectDictionary*)current->Parent(this);
|
| @@ -305,7 +305,7 @@
|
| }
|
|
|
| // TODO(edisonn): stream or array ... ? for now only array
|
| -SkPdfNativeTokenizer* SkNativeParsedPDF::tokenizerOfPage(int page) const {
|
| +SkPdfNativeTokenizer* SkNativeParsedPDF::tokenizerOfPage(int page) {
|
| if (fPages[page]->isContentsAStream(this)) {
|
| return tokenizerOfStream(fPages[page]->getContentsAsStream(this));
|
| } else {
|
| @@ -315,19 +315,19 @@
|
| }
|
| }
|
|
|
| -SkPdfNativeTokenizer* SkNativeParsedPDF::tokenizerOfStream(SkPdfObject* stream) const {
|
| +SkPdfNativeTokenizer* SkNativeParsedPDF::tokenizerOfStream(SkPdfObject* stream) {
|
| if (stream == NULL) {
|
| return NULL;
|
| }
|
|
|
| - return new SkPdfNativeTokenizer(stream, fMapper, fAllocator);
|
| + return new SkPdfNativeTokenizer(stream, fMapper, fAllocator, this);
|
| }
|
|
|
| // TODO(edisonn): NYI
|
| -SkPdfNativeTokenizer* SkNativeParsedPDF::tokenizerOfBuffer(unsigned char* buffer, size_t len) const {
|
| +SkPdfNativeTokenizer* SkNativeParsedPDF::tokenizerOfBuffer(unsigned char* buffer, size_t len) {
|
| // warning does not track two calls in the same buffer! the buffer is updated!
|
| // make a clean copy if needed!
|
| - return new SkPdfNativeTokenizer(buffer, len, fMapper, fAllocator);
|
| + return new SkPdfNativeTokenizer(buffer, len, fMapper, fAllocator, this);
|
| }
|
|
|
| size_t SkNativeParsedPDF::objects() const {
|
| @@ -376,13 +376,9 @@
|
| return fAllocator;
|
| }
|
|
|
| -SkPdfObject* SkNativeParsedPDF::resolveReference(SkPdfObject* ref) const {
|
| - return (SkPdfObject*)resolveReference((const SkPdfObject*)ref);
|
| -}
|
| -
|
| // TODO(edisonn): fix infinite loop if ref to itself!
|
| // TODO(edisonn): perf, fix refs at load, and resolve will simply return fResolvedReference?
|
| -SkPdfObject* SkNativeParsedPDF::resolveReference(const SkPdfObject* ref) const {
|
| +SkPdfObject* SkNativeParsedPDF::resolveReference(const SkPdfObject* ref) {
|
| if (ref && ref->isReference()) {
|
| int id = ref->referenceId();
|
| // TODO(edisonn): generation/updates not supported now
|
|
|