diff options
author | 2013-10-09 15:13:19 +0000 | |
---|---|---|
committer | 2013-10-09 15:13:19 +0000 | |
commit | 598cf5d3cfc428108cf21ab45d73a995d7e5c2a8 (patch) | |
tree | e9f4fb0a8b4279f78aa719cbf71296fb36ca3d26 | |
parent | aadb4d9a53d406b4bf40089a10ef94302d21b6bb (diff) |
remove tracking code, as it polutes the code readability. Should be added back, in a less eficient way, by registering streams instead, so we don't have to pass arround the streams, and the code will be cleaner.
Review URL: https://codereview.chromium.org/26700002
git-svn-id: http://skia.googlecode.com/svn/trunk@11671 2bbb7eff-a529-9590-31e7-b0007b416f81
7 files changed, 189 insertions, 222 deletions
diff --git a/experimental/PdfViewer/SkPdfConfig.h b/experimental/PdfViewer/SkPdfConfig.h index 11e0319ae4..d920718df9 100644 --- a/experimental/PdfViewer/SkPdfConfig.h +++ b/experimental/PdfViewer/SkPdfConfig.h @@ -11,15 +11,38 @@ #include "stddef.h" class SkPdfNativeObject; +// shows what objects have not been used in rendering. can be used to track what features we might +// have not implemented, or where we implemented only the default behaivour //#define PDF_TRACK_OBJECT_USAGE + +// tracks the position in the stream, it can be used to show where exactly the errors happened //#define PDF_TRACK_STREAM_OFFSETS + +// reports issues, warning, NYI, errors, ... +// enable PDF_TRACK_STREAM_OFFSETS to also have the offset in the stream where the error happened //#define PDF_REPORT + +// At various points in code we show the value of important variables with this flag //#define PDF_TRACE + +// displays the result of each read token, individual result //#define PDF_TRACE_READ_TOKEN + +// Every drawtext draws before a rectangle, in this way we see the one that might have failed //#define PDF_TRACE_DRAWTEXT + +// For each render operations, it will dump the canvas in a png //#define PDF_TRACE_DIFF_IN_PNG + +// Does not clip at all, can be used in debugging issues //#define PDF_DEBUG_NO_CLIPING + +// Does not click the page, use is with 3x //#define PDF_DEBUG_NO_PAGE_CLIPING + +// render the page 3X bigger (with content in center) - used to make sure we don't mess up +// positioning +// like a tick tac toe board, only the center one has content, all the rest of them have to be clean //#define PDF_DEBUG_3X @@ -38,41 +61,9 @@ class SkPdfNativeObject; #endif // PDF_TRACK_OBJECT_USAGE #ifdef PDF_TRACK_STREAM_OFFSETS - -// TODO(edisonn): track source files -#define SkPdfTrackSrourceFile(foo) -2 - -#define GET_TRACK_STREAM , int streamId, const unsigned char* streamStart -#define PUT_TRACK_STREAM_ARGS , streamId, streamStart -#define PUT_TRACK_STREAM(start,end) , streamId, start-streamStart, end-streamStart -#define PUT_TRACK_STREAM_ARGS_EXPL(a,b,c) , a, b, c -#define PUT_TRACK_STREAM_ARGS_EXPL2(a,b) , a, b - - -#define PUT_TRACK_PARAMETERS , streamId, offsetStart, offsetEnd -#define PUT_TRACK_PARAMETERS_OBJ(obj) , (obj)->streamId(), (obj)->offsetStart(), (obj)->offsetEnd() -#define PUT_TRACK_PARAMETERS_OBJ2(obj,objEnd) , (obj)->streamId(), (obj)->offsetStart(), (objEnd)->offsetEnd() -#define PUT_TRACK_PARAMETERS_SRC , SkPdfTrackSrourceFile(__FILE__), __LINE__, __LINE__ -#define PUT_TRACK_PARAMETERS_SRC0 SkPdfTrackSrourceFile(__FILE__), __LINE__, __LINE__ -#define GET_TRACK_PARAMETERS , int streamId, int offsetStart, int offsetEnd -#define GET_TRACK_PARAMETERS0 int streamId, int offsetStart, int offsetEnd #define STORE_TRACK_PARAMETERS(obj) (obj)->fStreamId = streamId; (obj)->fOffsetStart = offsetStart; (obj)->fOffsetEnd = offsetEnd; #define STORE_TRACK_PARAMETER_OFFSET_END(obj,offsetEnd) (obj)->fOffsetEnd = (offsetEnd)-streamStart; #else -#define GET_TRACK_STREAM -#define PUT_TRACK_STREAM_ARGS -#define PUT_TRACK_STREAM(start,end) -#define PUT_TRACK_STREAM_ARGS_EXPL(a,b,c) -#define PUT_TRACK_STREAM_ARGS_EXPL2(a,b) - - -#define PUT_TRACK_PARAMETERS -#define PUT_TRACK_PARAMETERS_OBJ(obj) -#define PUT_TRACK_PARAMETERS_OBJ2(obj,objEnd) -#define PUT_TRACK_PARAMETERS_SRC -#define PUT_TRACK_PARAMETERS_SRC0 -#define GET_TRACK_PARAMETERS -#define GET_TRACK_PARAMETERS0 #define STORE_TRACK_PARAMETERS(obj) #define STORE_TRACK_PARAMETER_OFFSET_END(obj,offsetEnd) #endif //PDF_TRACK_STREAM_OFFSETS diff --git a/experimental/PdfViewer/pdf_viewer_main.cpp b/experimental/PdfViewer/pdf_viewer_main.cpp index 5fe99ad180..a679d7c4be 100644 --- a/experimental/PdfViewer/pdf_viewer_main.cpp +++ b/experimental/PdfViewer/pdf_viewer_main.cpp @@ -49,6 +49,7 @@ DEFINE_string2(config, c, "8888", "Canvas to render:\n" #endif "\tnul - render in null canvas, any draw will just return.\n" ); +DEFINE_bool2(transparentBackground, t, false, "Make background transparent instead of white."); // TODO(edisonn): add config for device target(gpu, raster, pdf), + ability not to render at all @@ -156,7 +157,7 @@ static bool make_output_filepath(SkString* path, const SkString& dir, PNG_FILE_EXTENSION); } -static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color = SK_ColorTRANSPARENT) { +static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color) { bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); bitmap->allocPixels(); @@ -199,10 +200,12 @@ static bool render_page(const SkString& outputDir, rect = SkRect::MakeWH(width, height); + SkColor background = FLAGS_transparentBackground ? SK_ColorTRANSPARENT : SK_ColorWHITE; + #ifdef PDF_DEBUG_3X - setup_bitmap(&bitmap, 3 * (int)SkScalarToDouble(width), 3 * (int)SkScalarToDouble(height)); + setup_bitmap(&bitmap, 3 * (int)SkScalarToDouble(width), 3 * (int)SkScalarToDouble(height), background); #else - setup_bitmap(&bitmap, (int)SkScalarToDouble(width), (int)SkScalarToDouble(height)); + setup_bitmap(&bitmap, (int)SkScalarToDouble(width), (int)SkScalarToDouble(height), background); #endif SkAutoTUnref<SkBaseDevice> device; if (strcmp(FLAGS_config[0], "8888") == 0) { diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp b/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp index ef5276bf30..f6b323abc2 100644 --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp +++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp @@ -175,19 +175,19 @@ void SkPdfNativeDoc::loadWithoutXRef() { // TODO(edisonn): read pdf version current = ignoreLine(current, end); - current = skipPdfWhiteSpaces(0, current, end); + current = skipPdfWhiteSpaces(current, end); while (current < end) { SkPdfNativeObject token; - current = nextObject(0, current, end, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, &token, NULL, NULL); if (token.isInteger()) { int id = (int)token.intValue(); token.reset(); - current = nextObject(0, current, end, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, &token, NULL, NULL); // int generation = (int)token.intValue(); // TODO(edisonn): ignored for now token.reset(); - current = nextObject(0, current, end, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, &token, NULL, NULL); // TODO(edisonn): must be obj, return error if not? ignore ? if (!token.isKeyword("obj")) { SkPdfReport(kWarning_SkPdfIssueSeverity, kMissingToken_SkPdfIssue, "Could not find obj", NULL, NULL); @@ -201,7 +201,7 @@ void SkPdfNativeDoc::loadWithoutXRef() { fObjects[id].fOffset = current - fFileContent; SkPdfNativeObject* obj = fAllocator->allocObject(); - current = nextObject(0, current, end, obj, fAllocator, this PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, obj, fAllocator, this); fObjects[id].fResolvedReference = obj; fObjects[id].fObj = obj; @@ -214,10 +214,10 @@ void SkPdfNativeDoc::loadWithoutXRef() { current = readTrailer(current, end, true, &dummy, true); } else if (token.isKeyword("startxref")) { token.reset(); - current = nextObject(0, current, end, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); // ignore + current = nextObject(current, end, &token, NULL, NULL); // ignore } - current = skipPdfWhiteSpaces(0, current, end); + current = skipPdfWhiteSpaces(current, end); } // TODO(edisonn): hack, detect root catalog - we need to implement liniarized support, and remove this hack. @@ -252,7 +252,7 @@ SkPdfNativeDoc::~SkPdfNativeDoc() { const unsigned char* SkPdfNativeDoc::readCrossReferenceSection(const unsigned char* xrefStart, const unsigned char* trailerEnd) { SkPdfNativeObject xref; - const unsigned char* current = nextObject(0, xrefStart, trailerEnd, &xref, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + const unsigned char* current = nextObject(xrefStart, trailerEnd, &xref, NULL, NULL); if (!xref.isKeyword("xref")) { SkPdfReport(kWarning_SkPdfIssueSeverity, kMissingToken_SkPdfIssue, "Could not find sref", NULL, NULL); @@ -263,7 +263,7 @@ const unsigned char* SkPdfNativeDoc::readCrossReferenceSection(const unsigned ch while (current < trailerEnd) { token.reset(); const unsigned char* previous = current; - current = nextObject(0, current, trailerEnd, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, trailerEnd, &token, NULL, NULL); if (!token.isInteger()) { SkPdfReport(kInfo_SkPdfIssueSeverity, kNoIssue_SkPdfIssue, "Done readCrossReferenceSection", NULL, NULL); return previous; @@ -271,7 +271,7 @@ const unsigned char* SkPdfNativeDoc::readCrossReferenceSection(const unsigned ch int startId = (int)token.intValue(); token.reset(); - current = nextObject(0, current, trailerEnd, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, trailerEnd, &token, NULL, NULL); if (!token.isInteger()) { SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, "readCrossReferenceSection", &token, SkPdfNativeObject::kInteger_PdfObjectType, NULL); @@ -282,7 +282,7 @@ const unsigned char* SkPdfNativeDoc::readCrossReferenceSection(const unsigned ch for (int i = 0; i < entries; i++) { token.reset(); - current = nextObject(0, current, trailerEnd, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, trailerEnd, &token, NULL, NULL); if (!token.isInteger()) { SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, "readCrossReferenceSection", &token, SkPdfNativeObject::kInteger_PdfObjectType, NULL); return current; @@ -290,7 +290,7 @@ const unsigned char* SkPdfNativeDoc::readCrossReferenceSection(const unsigned ch int offset = (int)token.intValue(); token.reset(); - current = nextObject(0, current, trailerEnd, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, trailerEnd, &token, NULL, NULL); if (!token.isInteger()) { SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, "readCrossReferenceSection", &token, SkPdfNativeObject::kInteger_PdfObjectType, NULL); return current; @@ -298,7 +298,7 @@ const unsigned char* SkPdfNativeDoc::readCrossReferenceSection(const unsigned ch int generation = (int)token.intValue(); token.reset(); - current = nextObject(0, current, trailerEnd, &token, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, trailerEnd, &token, NULL, NULL); if (!token.isKeyword() || token.lenstr() != 1 || (*token.c_str() != 'f' && *token.c_str() != 'n')) { SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, "readCrossReferenceSection: f or n expected", &token, SkPdfNativeObject::kKeyword_PdfObjectType, NULL); return current; @@ -319,7 +319,7 @@ const unsigned char* SkPdfNativeDoc::readTrailer(const unsigned char* trailerSta SkPdfNativeObject trailerKeyword; // TODO(edisonn): use null allocator, and let it just fail if memory // needs allocated (but no crash)! - current = nextObject(0, current, trailerEnd, &trailerKeyword, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, trailerEnd, &trailerKeyword, NULL, NULL); if (!trailerKeyword.isKeyword() || strlen("trailer") != trailerKeyword.lenstr() || strncmp(trailerKeyword.c_str(), "trailer", strlen("trailer")) != 0) { @@ -330,7 +330,7 @@ const unsigned char* SkPdfNativeDoc::readTrailer(const unsigned char* trailerSta } SkPdfNativeObject token; - current = nextObject(0, current, trailerEnd, &token, fAllocator, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, trailerEnd, &token, fAllocator, NULL); if (!token.isDictionary()) { return current; } @@ -385,19 +385,19 @@ SkPdfNativeObject* SkPdfNativeDoc::readObject(int id/*, int expectedGeneration*/ SkPdfNativeObject objKeyword; SkPdfNativeObject* dict = fAllocator->allocObject(); - current = nextObject(0, current, end, &idObj, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, &idObj, NULL, NULL); if (current >= end) { SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kReadStreamError_SkPdfIssue, "reading id", NULL, NULL); return NULL; } - current = nextObject(0, current, end, &generationObj, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, &generationObj, NULL, NULL); if (current >= end) { SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kReadStreamError_SkPdfIssue, "reading generation", NULL, NULL); return NULL; } - current = nextObject(0, current, end, &objKeyword, NULL, NULL PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, &objKeyword, NULL, NULL); if (current >= end) { SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kReadStreamError_SkPdfIssue, "reading keyword obj", NULL, NULL); return NULL; @@ -416,7 +416,7 @@ SkPdfNativeObject* SkPdfNativeDoc::readObject(int id/*, int expectedGeneration*/ SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, "readObject: unexpected obj keyword", &objKeyword, SkPdfNativeObject::kKeyword_PdfObjectType, NULL); } - current = nextObject(1, current, end, dict, fAllocator, this PUT_TRACK_STREAM_ARGS_EXPL2(0, fFileContent)); + current = nextObject(current, end, dict, fAllocator, this); // TODO(edisonn): report warning/error - verify last token is endobj @@ -524,19 +524,22 @@ const SkPdfMapper* SkPdfNativeDoc::mapper() const { SkPdfReal* SkPdfNativeDoc::createReal(double value) const { SkPdfNativeObject* obj = fAllocator->allocObject(); - SkPdfNativeObject::makeReal(value, obj PUT_TRACK_PARAMETERS_SRC); + SkPdfNativeObject::makeReal(value, obj); + // TODO(edisonn): TRACK_FROM_CODE(obj); return (SkPdfReal*)obj; } SkPdfInteger* SkPdfNativeDoc::createInteger(int value) const { SkPdfNativeObject* obj = fAllocator->allocObject(); - SkPdfNativeObject::makeInteger(value, obj PUT_TRACK_PARAMETERS_SRC); + SkPdfNativeObject::makeInteger(value, obj); + // TODO(edisonn): TRACK_FROM_CODE(obj); return (SkPdfInteger*)obj; } SkPdfString* SkPdfNativeDoc::createString(const unsigned char* sz, size_t len) const { SkPdfNativeObject* obj = fAllocator->allocObject(); - SkPdfNativeObject::makeString(sz, len, obj PUT_TRACK_PARAMETERS_SRC); + SkPdfNativeObject::makeString(sz, len, obj); + // TODO(edisonn): TRACK_FROM_CODE(obj); return (SkPdfString*)obj; } diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.cpp b/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.cpp index 73f765d3c7..328d6fea25 100644 --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.cpp +++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.cpp @@ -20,7 +20,7 @@ #include "SkPdfReporter.h" -SkPdfNativeObject SkPdfNativeObject::kNull = SkPdfNativeObject::makeNull(PUT_TRACK_PARAMETERS_SRC0); +SkPdfNativeObject SkPdfNativeObject::kNull = SkPdfNativeObject::makeNull(); bool SkPdfNativeObject::applyFlateDecodeFilter() { if (!SkFlate::HaveFlate()) { @@ -106,7 +106,7 @@ bool SkPdfNativeObject::filterStream() { void SkPdfNativeObject::releaseData() { #ifdef PDF_TRACK_OBJECT_USAGE - SkPdfReportIf(!fUsed, kInfo_SkPdfIssueSeverity, NULL, this, "Unused object in rendering"); + SkPdfReportIf(!fUsed, kInfo_SkPdfIssueSeverity, kNoIssue_SkPdfIssue, "Unused object in rendering", this, NULL); #endif // PDF_TRACK_OBJECT_USAGE SkPdfMarkObjectUnused(); diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h b/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h index 94c0547c22..8c6bf28176 100644 --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h +++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h @@ -257,8 +257,10 @@ public: return nyi; } - static void makeBoolean(bool value, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); + // TODO(edisonn) impl store + //STORE_TRACK_PARAMETERS(obj); + + static void makeBoolean(bool value, SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); @@ -266,54 +268,44 @@ public: obj->fBooleanValue = value; } - static SkPdfNativeObject makeBoolean(bool value GET_TRACK_PARAMETERS) { + static SkPdfNativeObject makeBoolean(bool value) { SkPdfNativeObject obj; - STORE_TRACK_PARAMETERS(&obj); - obj.fObjectType = kBoolean_PdfObjectType; obj.fBooleanValue = value; return obj; } - static void makeInteger(int64_t value, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); - + static void makeInteger(int64_t value, SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); obj->fObjectType = kInteger_PdfObjectType; obj->fIntegerValue = value; } - static void makeReal(double value, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); - + static void makeReal(double value, SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); obj->fObjectType = kReal_PdfObjectType; obj->fRealValue = value; } - static void makeNull(SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); - + static void makeNull(SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); obj->fObjectType = kNull_PdfObjectType; } - static SkPdfNativeObject makeNull(GET_TRACK_PARAMETERS0) { + static SkPdfNativeObject makeNull() { SkPdfNativeObject obj; - STORE_TRACK_PARAMETERS(&obj); - obj.fObjectType = kNull_PdfObjectType; return obj; } static SkPdfNativeObject kNull; - static void makeNumeric(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { + static void makeNumeric(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); // TODO(edisonn): NYI properly @@ -327,15 +319,13 @@ public: // TODO(edisonn): report parse issue with numbers like "24asdasd123" } if (isInt) { - makeInteger(atol((const char*)start), obj PUT_TRACK_PARAMETERS); + makeInteger(atol((const char*)start), obj); } else { - makeReal(atof((const char*)start), obj PUT_TRACK_PARAMETERS); + makeReal(atof((const char*)start), obj); } } - static void makeReference(unsigned int id, unsigned int gen, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); - + static void makeReference(unsigned int id, unsigned int gen, SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); obj->fObjectType = kReference_PdfObjectType; @@ -343,69 +333,67 @@ public: obj->fRef.fGen = gen; } - static void resetAndMakeReference(unsigned int id, unsigned int gen, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { + static void resetAndMakeReference(unsigned int id, unsigned int gen, SkPdfNativeObject* obj) { obj->reset(); - makeReference(id, gen, obj PUT_TRACK_PARAMETERS); + makeReference(id, gen, obj); } - static void makeString(const unsigned char* start, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, strlen((const char*)start), obj, kString_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeString(const unsigned char* start, SkPdfNativeObject* obj) { + makeStringCore(start, strlen((const char*)start), obj, kString_PdfObjectType); } - static void makeString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, end - start, obj, kString_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) { + makeStringCore(start, end - start, obj, kString_PdfObjectType); } - static void makeString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, bytes, obj, kString_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) { + makeStringCore(start, bytes, obj, kString_PdfObjectType); } - static void makeHexString(const unsigned char* start, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, strlen((const char*)start), obj, kHexString_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeHexString(const unsigned char* start, SkPdfNativeObject* obj) { + makeStringCore(start, strlen((const char*)start), obj, kHexString_PdfObjectType); } - static void makeHexString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, end - start, obj, kHexString_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeHexString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) { + makeStringCore(start, end - start, obj, kHexString_PdfObjectType); } - static void makeHexString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, bytes, obj, kHexString_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeHexString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) { + makeStringCore(start, bytes, obj, kHexString_PdfObjectType); } - static void makeName(const unsigned char* start, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, strlen((const char*)start), obj, kName_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeName(const unsigned char* start, SkPdfNativeObject* obj) { + makeStringCore(start, strlen((const char*)start), obj, kName_PdfObjectType); } - static void makeName(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, end - start, obj, kName_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeName(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) { + makeStringCore(start, end - start, obj, kName_PdfObjectType); } - static void makeName(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, bytes, obj, kName_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeName(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) { + makeStringCore(start, bytes, obj, kName_PdfObjectType); } - static void makeKeyword(const unsigned char* start, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, strlen((const char*)start), obj, kKeyword_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeKeyword(const unsigned char* start, SkPdfNativeObject* obj) { + makeStringCore(start, strlen((const char*)start), obj, kKeyword_PdfObjectType); } - static void makeKeyword(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, end - start, obj, kKeyword_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeKeyword(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) { + makeStringCore(start, end - start, obj, kKeyword_PdfObjectType); } - static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - makeStringCore(start, bytes, obj, kKeyword_PdfObjectType PUT_TRACK_PARAMETERS); + static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) { + makeStringCore(start, bytes, obj, kKeyword_PdfObjectType); } // TODO(edisonn): make the functions to return SkPdfArray, move these functions in SkPdfArray - static void makeEmptyArray(SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); - + static void makeEmptyArray(SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); obj->fObjectType = kArray_PdfObjectType; @@ -476,9 +464,7 @@ public: // TODO(edisonn): make the functions to return SkPdfDictionary, move these functions in SkPdfDictionary - static void makeEmptyDictionary(SkPdfNativeObject* obj GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); - + static void makeEmptyDictionary(SkPdfNativeObject* obj) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); obj->fObjectType = kDictionary_PdfObjectType; @@ -1195,16 +1181,15 @@ public: } private: - static void makeStringCore(const unsigned char* start, SkPdfNativeObject* obj, ObjectType type GET_TRACK_PARAMETERS) { - makeStringCore(start, strlen((const char*)start), obj, type PUT_TRACK_PARAMETERS); + static void makeStringCore(const unsigned char* start, SkPdfNativeObject* obj, ObjectType type) { + makeStringCore(start, strlen((const char*)start), obj, type); } - static void makeStringCore(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj, ObjectType type GET_TRACK_PARAMETERS) { - makeStringCore(start, end - start, obj, type PUT_TRACK_PARAMETERS); + static void makeStringCore(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj, ObjectType type) { + makeStringCore(start, end - start, obj, type); } - static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj, ObjectType type GET_TRACK_PARAMETERS) { - STORE_TRACK_PARAMETERS(obj); + static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj, ObjectType type) { SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); @@ -1228,11 +1213,11 @@ class SkPdfNumber : public SkPdfNativeObject {}; class SkPdfName : public SkPdfNativeObject { SkPdfName() : SkPdfNativeObject() { - SkPdfNativeObject::makeName((const unsigned char*)"", this PUT_TRACK_PARAMETERS_SRC); + SkPdfNativeObject::makeName((const unsigned char*)"", this); } public: SkPdfName(char* name) : SkPdfNativeObject() { - this->makeName((const unsigned char*)name, this PUT_TRACK_PARAMETERS_SRC); + this->makeName((const unsigned char*)name, this); } }; diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp index 64388552a5..aa8dae8bbb 100644 --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp +++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp @@ -38,20 +38,6 @@ static char* strrstrk(char* hayStart, char* hayEnd, const char* needle) { } #ifdef PDF_TRACE_TOKENIZER -static void TRACE_INDENT(int level, const char* type) { - static int id = 0; - id++; -#if 0 - if (478613 == id) { - printf("break;\n"); - } -#endif - // all types should have 2 letters, so the text is alligned nicely - printf("\n%10i %15s: ", id, type); - for (int i = 0 ; i < level; i++) { - printf(" "); - } -} static void TRACE_COMMENT(char ch) { printf("%c", ch); @@ -86,7 +72,6 @@ static void TRACE_HEXSTRING(const unsigned char* start, const unsigned char* end } #else -#define TRACE_INDENT(level,type) #define TRACE_COMMENT(ch) #define TRACE_TK(ch) #define TRACE_NAME(start,end) @@ -94,8 +79,7 @@ static void TRACE_HEXSTRING(const unsigned char* start, const unsigned char* end #define TRACE_HEXSTRING(start,end) #endif -const unsigned char* skipPdfWhiteSpaces(int level, const unsigned char* start, const unsigned char* end) { - TRACE_INDENT(level, "White Space"); +const unsigned char* skipPdfWhiteSpaces(const unsigned char* start, const unsigned char* end) { while (start < end && (isPdfWhiteSpace(*start) || *start == kComment_PdfDelimiter)) { TRACE_COMMENT(*start); if (*start == kComment_PdfDelimiter) { @@ -114,11 +98,7 @@ const unsigned char* skipPdfWhiteSpaces(int level, const unsigned char* start, c } // TODO(edisonn) '(' can be used, will it break the string a delimiter or space inside () ? -const unsigned char* endOfPdfToken(int level, const unsigned char* start, const unsigned char* end) { - //int opened brackets - //TODO(edisonn): what out for special chars, like \n, \032 - TRACE_INDENT(level, "Token"); - +const unsigned char* endOfPdfToken(const unsigned char* start, const unsigned char* end) { SkASSERT(!isPdfWhiteSpace(*start)); if (start < end && isPdfDelimiter(*start)) { @@ -135,20 +115,20 @@ const unsigned char* endOfPdfToken(int level, const unsigned char* start, const } // last elem has to be ] -static const unsigned char* readArray(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* array, SkPdfAllocator* allocator, SkPdfNativeDoc* doc GET_TRACK_STREAM) { - SkPdfNativeObject::makeEmptyArray(array PUT_TRACK_STREAM(start, start)); +static const unsigned char* readArray(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* array, SkPdfAllocator* allocator, SkPdfNativeDoc* doc) { + SkPdfNativeObject::makeEmptyArray(array); + // PUT_TRACK_STREAM(array, start, start) if (allocator == NULL) { // TODO(edisonn): report/warning error return end; } - TRACE_INDENT(level, "Array"); while (start < end) { // skip white spaces - start = skipPdfWhiteSpaces(level + 1, start, end); + start = skipPdfWhiteSpaces(start, end); - const unsigned char* endOfToken = endOfPdfToken(level + 1, start, end); + const unsigned char* endOfToken = endOfPdfToken(start, end); if (endOfToken == start) { // TODO(edisonn): report error in pdf file (end of stream with ] for end of aray @@ -160,14 +140,15 @@ static const unsigned char* readArray(int level, const unsigned char* start, con } SkPdfNativeObject* newObj = allocator->allocObject(); - start = nextObject(level + 1, start, end, newObj, allocator, doc PUT_TRACK_STREAM_ARGS); + start = nextObject(start, end, newObj, allocator, doc); // TODO(edisonn): perf/memory: put the variables on the stack, and flush them on the array only when // we are sure they are not references! if (newObj->isKeywordReference() && array->size() >= 2 && array->objAtAIndex(array->size() - 1)->isInteger() && array->objAtAIndex(array->size() - 2)->isInteger()) { SkPdfNativeObject* gen = array->removeLastInArray(); SkPdfNativeObject* id = array->removeLastInArray(); - SkPdfNativeObject::resetAndMakeReference((unsigned int)id->intValue(), (unsigned int)gen->intValue(), newObj PUT_TRACK_PARAMETERS_OBJ2(id, newObj)); + SkPdfNativeObject::resetAndMakeReference((unsigned int)id->intValue(), (unsigned int)gen->intValue(), newObj); + // newObj PUT_TRACK_PARAMETERS_OBJ2(id, newObj) - store end, as now } array->appendInArray(newObj); @@ -183,8 +164,7 @@ static const unsigned char* readArray(int level, const unsigned char* start, con // TODO(edisonn): space: add paramater, taht would report if we need to allocate new buffer, or we can reuse the one we have -static const unsigned char* readString(int level, const unsigned char* start, const unsigned char* end, unsigned char* out) { - TRACE_INDENT(level, "String"); +static const unsigned char* readString(const unsigned char* start, const unsigned char* end, unsigned char* out) { const unsigned char* in = start; bool hasOut = (out != NULL); @@ -304,25 +284,25 @@ static const unsigned char* readString(int level, const unsigned char* start, co } } -static int readStringLength(int level, const unsigned char* start, const unsigned char* end) { - return readString(level, start, end, NULL) - start; +static int readStringLength(const unsigned char* start, const unsigned char* end) { + return readString(start, end, NULL) - start; } -static const unsigned char* readString(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* str, SkPdfAllocator* allocator GET_TRACK_STREAM) { +static const unsigned char* readString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* str, SkPdfAllocator* allocator) { if (!allocator) { return end; } - int outLength = readStringLength(level, start, end); + int outLength = readStringLength(start, end); // TODO(edisonn): optimize the allocation, don't allocate new string, but put it in a preallocated buffer unsigned char* out = (unsigned char*)allocator->alloc(outLength); - const unsigned char* now = readString(level, start, end, out); - SkPdfNativeObject::makeString(out, out + outLength, str PUT_TRACK_STREAM(start, now)); + const unsigned char* now = readString(start, end, out); + SkPdfNativeObject::makeString(out, out + outLength, str); + // PUT_TRACK_STREAM(str, start, now) TRACE_STRING(out, out + outLength); return now; // consumed already ) at the end of the string } -static const unsigned char* readHexString(int level, const unsigned char* start, const unsigned char* end, unsigned char* out) { - TRACE_INDENT(level, "HexString"); +static const unsigned char* readHexString(const unsigned char* start, const unsigned char* end, unsigned char* out) { bool hasOut = (out != NULL); const unsigned char* in = start; @@ -451,26 +431,26 @@ static const unsigned char* readHexString(int level, const unsigned char* start, } } -static int readHexStringLength(int level, const unsigned char* start, const unsigned char* end) { - return readHexString(level, start, end, NULL) - start; +static int readHexStringLength(const unsigned char* start, const unsigned char* end) { + return readHexString(start, end, NULL) - start; } -static const unsigned char* readHexString(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* str, SkPdfAllocator* allocator GET_TRACK_STREAM) { +static const unsigned char* readHexString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* str, SkPdfAllocator* allocator) { if (!allocator) { return end; } - int outLength = readHexStringLength(level, start, end); + int outLength = readHexStringLength(start, end); // TODO(edisonn): optimize the allocation, don't allocate new string, but put it in a preallocated buffer unsigned char* out = (unsigned char*)allocator->alloc(outLength); - const unsigned char* now = readHexString(level, start, end, out); - SkPdfNativeObject::makeHexString(out, out + outLength, str PUT_TRACK_STREAM(start, now)); + const unsigned char* now = readHexString(start, end, out); + SkPdfNativeObject::makeHexString(out, out + outLength, str); + // str PUT_TRACK_STREAM(start, now) TRACE_HEXSTRING(out, out + outLength); return now; // consumed already > at the end of the string } // TODO(edisonn): before PDF 1.2 name could not have special characters, add version parameter -static const unsigned char* readName(int level, const unsigned char* start, const unsigned char* end, unsigned char* out) { - TRACE_INDENT(level, "Name"); +static const unsigned char* readName(const unsigned char* start, const unsigned char* end, unsigned char* out) { bool hasOut = (out != NULL); const unsigned char* in = start; @@ -576,19 +556,20 @@ static const unsigned char* readName(int level, const unsigned char* start, cons } } -static int readNameLength(int level, const unsigned char* start, const unsigned char* end) { - return readName(level, start, end, NULL) - start; +static int readNameLength(const unsigned char* start, const unsigned char* end) { + return readName(start, end, NULL) - start; } -static const unsigned char* readName(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* name, SkPdfAllocator* allocator GET_TRACK_STREAM) { +static const unsigned char* readName(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* name, SkPdfAllocator* allocator) { if (!allocator) { return end; } - int outLength = readNameLength(level, start, end); + int outLength = readNameLength(start, end); // TODO(edisonn): optimize the allocation, don't allocate new string, but put it in a preallocated buffer unsigned char* out = (unsigned char*)allocator->alloc(outLength); - const unsigned char* now = readName(level, start, end, out); - SkPdfNativeObject::makeName(out, out + outLength, name PUT_TRACK_STREAM(start, now)); + const unsigned char* now = readName(start, end, out); + SkPdfNativeObject::makeName(out, out + outLength, name); + //PUT_TRACK_STREAM(start, now) TRACE_NAME(out, out + outLength); return now; } @@ -617,9 +598,8 @@ and it could get worse, with multiple object like this // right now implement the silly algorithm that assumes endstream is finishing the stream -static const unsigned char* readStream(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* dict, SkPdfNativeDoc* doc) { - TRACE_INDENT(level, "Stream"); - start = skipPdfWhiteSpaces(level, start, end); +static const unsigned char* readStream(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* dict, SkPdfNativeDoc* doc) { + start = skipPdfWhiteSpaces(start, end); if (!(start[0] == 's' && start[1] == 't' && start[2] == 'r' && start[3] == 'e' && start[4] == 'a' && start[5] == 'm')) { // no stream. return. return start; @@ -694,8 +674,7 @@ static const unsigned char* readStream(int level, const unsigned char* start, co return start; } -static const unsigned char* readInlineImageStream(int level, const unsigned char* start, const unsigned char* end, SkPdfImageDictionary* inlineImage, SkPdfNativeDoc* doc) { - TRACE_INDENT(level, "Inline Image"); +static const unsigned char* readInlineImageStream(const unsigned char* start, const unsigned char* end, SkPdfImageDictionary* inlineImage, SkPdfNativeDoc* doc) { // We already processed ID keyword, and we should be positioned immediately after it // TODO(edisonn): security: read after end check, or make buffers with extra 2 bytes @@ -726,42 +705,43 @@ static const unsigned char* readInlineImageStream(int level, const unsigned char return endEI; } -static const unsigned char* readDictionary(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* dict, SkPdfAllocator* allocator, SkPdfNativeDoc* doc GET_TRACK_STREAM) { +static const unsigned char* readDictionary(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* dict, SkPdfAllocator* allocator, SkPdfNativeDoc* doc) { if (allocator == NULL) { // TODO(edisonn): report/warning error return end; } - TRACE_INDENT(level, "Dictionary"); - SkPdfNativeObject::makeEmptyDictionary(dict PUT_TRACK_STREAM(start, start)); + SkPdfNativeObject::makeEmptyDictionary(dict); + // PUT_TRACK_STREAM(dict, start, start) - start = skipPdfWhiteSpaces(level, start, end); + start = skipPdfWhiteSpaces(start, end); SkPdfAllocator tmpStorage; // keys will be stored in dict, we can free them immediately after set. while (start < end && *start == kNamed_PdfDelimiter) { SkPdfNativeObject key; //*start = '\0'; start++; - start = readName(level + 1, start, end, &key, &tmpStorage PUT_TRACK_STREAM_ARGS); - start = skipPdfWhiteSpaces(level + 1, start, end); + start = readName(start, end, &key, &tmpStorage); + start = skipPdfWhiteSpaces(start, end); if (start < end) { SkPdfNativeObject* value = allocator->allocObject(); - start = nextObject(level + 1, start, end, value, allocator, doc PUT_TRACK_STREAM_ARGS); + start = nextObject(start, end, value, allocator, doc); - start = skipPdfWhiteSpaces(level + 1, start, end); + start = skipPdfWhiteSpaces(start, end); if (start < end) { // seems we have an indirect reference if (isPdfDigit(*start)) { SkPdfNativeObject generation; - start = nextObject(level + 1, start, end, &generation, allocator, doc PUT_TRACK_STREAM_ARGS); + start = nextObject(start, end, &generation, allocator, doc); SkPdfNativeObject keywordR; - start = nextObject(level + 1, start, end, &keywordR, allocator, doc PUT_TRACK_STREAM_ARGS); + start = nextObject(start, end, &keywordR, allocator, doc); if (value->isInteger() && generation.isInteger() && keywordR.isKeywordReference()) { int64_t id = value->intValue(); - SkPdfNativeObject::resetAndMakeReference((unsigned int)id, (unsigned int)generation.intValue(), value PUT_TRACK_PARAMETERS_OBJ2(value, &generation)); + SkPdfNativeObject::resetAndMakeReference((unsigned int)id, (unsigned int)generation.intValue(), value); + // PUT_TRACK_PARAMETERS_OBJ2(value, &generation) dict->set(&key, value); } else { // error, ignore @@ -776,7 +756,7 @@ static const unsigned char* readDictionary(int level, const unsigned char* start dict->set(&key, value); return end; } - start = skipPdfWhiteSpaces(level + 1, start, end); + start = skipPdfWhiteSpaces(start, end); } else { dict->set(&key, &SkPdfNativeObject::kNull); return end; @@ -786,7 +766,7 @@ static const unsigned char* readDictionary(int level, const unsigned char* start // TODO(edisonn): options to ignore these errors // now we should expect >> - start = skipPdfWhiteSpaces(level, start, end); + start = skipPdfWhiteSpaces(start, end); if (*start != kClosedInequityBracket_PdfDelimiter) { // TODO(edisonn): report/warning } @@ -798,24 +778,24 @@ static const unsigned char* readDictionary(int level, const unsigned char* start //*start = '\0'; start++; // skip > - STORE_TRACK_PARAMETER_OFFSET_END(dict,start); + //STORE_TRACK_PARAMETER_OFFSET_END(dict,start); - start = readStream(level, start, end, dict, doc); + start = readStream(start, end, dict, doc); return start; } -const unsigned char* nextObject(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* token, SkPdfAllocator* allocator, SkPdfNativeDoc* doc GET_TRACK_STREAM) { +const unsigned char* nextObject(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* token, SkPdfAllocator* allocator, SkPdfNativeDoc* doc) { const unsigned char* current; // skip white spaces - start = skipPdfWhiteSpaces(level, start, end); + start = skipPdfWhiteSpaces(start, end); if (start >= end) { return end; } - current = endOfPdfToken(level, start, end); + current = endOfPdfToken(start, end); // no token, len would be 0 if (current == start || current == end) { @@ -829,25 +809,25 @@ const unsigned char* nextObject(int level, const unsigned char* start, const uns switch (*start) { case kOpenedSquareBracket_PdfDelimiter: //*start = '\0'; - return readArray(level + 1, current, end, token, allocator, doc PUT_TRACK_STREAM_ARGS); + return readArray(current, end, token, allocator, doc); case kOpenedRoundBracket_PdfDelimiter: //*start = '\0'; - return readString(level, start + 1, end, token, allocator PUT_TRACK_STREAM_ARGS); + return readString(start + 1, end, token, allocator); case kOpenedInequityBracket_PdfDelimiter: //*start = '\0'; if (end > start + 1 && start[1] == kOpenedInequityBracket_PdfDelimiter) { //start[1] = '\0'; // optional // TODO(edisonn): pass here the length somehow? - return readDictionary(level + 1, start + 2, end, token, allocator, doc PUT_TRACK_STREAM_ARGS); // skip << + return readDictionary(start + 2, end, token, allocator, doc); // skip << } else { - return readHexString(level, start + 1, end, token, allocator PUT_TRACK_STREAM_ARGS); // skip < + return readHexString(start + 1, end, token, allocator); // skip < } case kNamed_PdfDelimiter: //*start = '\0'; - return readName(level, start + 1, end, token, allocator PUT_TRACK_STREAM_ARGS); + return readName(start + 1, end, token, allocator); // TODO(edisonn): what to do curly brackets? read spec! case kOpenedCurlyBracket_PdfDelimiter: @@ -863,24 +843,29 @@ const unsigned char* nextObject(int level, const unsigned char* start, const uns } if (tokenLen == 4 && start[0] == 'n' && start[1] == 'u' && start[2] == 'l' && start[3] == 'l') { - SkPdfNativeObject::makeNull(token PUT_TRACK_STREAM(start, start + 4)); + SkPdfNativeObject::makeNull(token); + // PUT_TRACK_STREAM(start, start + 4) return current; } if (tokenLen == 4 && start[0] == 't' && start[1] == 'r' && start[2] == 'u' && start[3] == 'e') { - SkPdfNativeObject::makeBoolean(true, token PUT_TRACK_STREAM(start, start + 4)); + SkPdfNativeObject::makeBoolean(true, token); + // PUT_TRACK_STREAM(start, start + 4) return current; } if (tokenLen == 5 && start[0] == 'f' && start[1] == 'a' && start[2] == 'l' && start[3] == 's' && start[4] == 'e') { - SkPdfNativeObject::makeBoolean(false, token PUT_TRACK_STREAM(start, start + 5)); + SkPdfNativeObject::makeBoolean(false, token); + // PUT_TRACK_STREAM(start, start + 5) return current; } if (isPdfNumeric(*start)) { - SkPdfNativeObject::makeNumeric(start, current, token PUT_TRACK_STREAM(start, current)); + SkPdfNativeObject::makeNumeric(start, current, token); + // PUT_TRACK_STREAM(start, current) } else { - SkPdfNativeObject::makeKeyword(start, current, token PUT_TRACK_STREAM(start, current)); + SkPdfNativeObject::makeKeyword(start, current, token); + // PUT_TRACK_STREAM(start, current) } return current; } @@ -952,12 +937,13 @@ bool SkPdfNativeTokenizer::readTokenCore(PdfToken* token) { token->fKeyword = NULL; token->fObject = NULL; - fUncompressedStream = skipPdfWhiteSpaces(0, fUncompressedStream, fUncompressedStreamEnd); + fUncompressedStream = skipPdfWhiteSpaces(fUncompressedStream, fUncompressedStreamEnd); if (fUncompressedStream >= fUncompressedStreamEnd) { return false; } - fUncompressedStream = nextObject(0, fUncompressedStream, fUncompressedStreamEnd, &obj, fAllocator, fDoc PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart)); + fUncompressedStream = nextObject(fUncompressedStream, fUncompressedStreamEnd, &obj, fAllocator, fDoc); + // PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart) // If it is a keyword, we will only get the pointer of the string if (obj.type() == SkPdfNativeObject::kKeyword_PdfObjectType) { @@ -1086,24 +1072,27 @@ static SkPdfNativeObject* inlineImageValueAbbreviationExpand(SkPdfNativeObject* SkPdfImageDictionary* SkPdfNativeTokenizer::readInlineImage() { // BI already processed - fUncompressedStream = skipPdfWhiteSpaces(0, fUncompressedStream, fUncompressedStreamEnd); + fUncompressedStream = skipPdfWhiteSpaces(fUncompressedStream, fUncompressedStreamEnd); if (fUncompressedStream >= fUncompressedStreamEnd) { return NULL; } SkPdfImageDictionary* inlineImage = (SkPdfImageDictionary*)fAllocator->allocObject(); - SkPdfNativeObject::makeEmptyDictionary(inlineImage PUT_TRACK_STREAM_ARGS_EXPL(fStreamId, fUncompressedStream - fUncompressedStreamStart, fUncompressedStream - fUncompressedStreamStart)); + SkPdfNativeObject::makeEmptyDictionary(inlineImage); + // PUT_TRACK_STREAM_ARGS_EXPL(fStreamId, fUncompressedStream - fUncompressedStreamStart, fUncompressedStream - fUncompressedStreamStart) while (fUncompressedStream < fUncompressedStreamEnd) { SkPdfNativeObject* key = fAllocator->allocObject(); - fUncompressedStream = nextObject(0, fUncompressedStream, fUncompressedStreamEnd, key, fAllocator, fDoc PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart)); + fUncompressedStream = nextObject(fUncompressedStream, fUncompressedStreamEnd, key, fAllocator, fDoc); + // PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart)s if (key->isKeyword() && key->lenstr() == 2 && key->c_str()[0] == 'I' && key->c_str()[1] == 'D') { // ID - fUncompressedStream = readInlineImageStream(0, fUncompressedStream, fUncompressedStreamEnd, inlineImage, fDoc); + fUncompressedStream = readInlineImageStream(fUncompressedStream, fUncompressedStreamEnd, inlineImage, fDoc); return inlineImage; } else { SkPdfNativeObject* obj = fAllocator->allocObject(); - fUncompressedStream = nextObject(0, fUncompressedStream, fUncompressedStreamEnd, obj, fAllocator, fDoc PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart)); + fUncompressedStream = nextObject(fUncompressedStream, fUncompressedStreamEnd, obj, fAllocator, fDoc); + // PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart)s // TODO(edisonn): perf maybe we should not expand abreviation like this inlineImage->set(inlineImageKeyAbbreviationExpand(key), inlineImageValueAbbreviationExpand(obj)); diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h index 53169ca369..77bd8b5a02 100644 --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h +++ b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h @@ -70,8 +70,8 @@ class SkPdfImageDictionary; #define isPdfDigit(ch) ((ch)>='0'&&(ch)<='9') #define isPdfNumeric(ch) (isPdfDigit(ch)||(ch)=='+'||(ch)=='-'||(ch)=='.') -const unsigned char* skipPdfWhiteSpaces(int level, const unsigned char* buffer, const unsigned char* end); -const unsigned char* endOfPdfToken(int level, const unsigned char* start, const unsigned char* end); +const unsigned char* skipPdfWhiteSpaces(const unsigned char* buffer, const unsigned char* end); +const unsigned char* endOfPdfToken(const unsigned char* start, const unsigned char* end); // TODO(edisonn): typedef read and integer tyepes? make less readable... //typedef double SkPdfReal; @@ -118,7 +118,7 @@ public: }; class SkPdfNativeDoc; -const unsigned char* nextObject(int level, const unsigned char* start, const unsigned char* end, SkPdfNativeObject* token, SkPdfAllocator* allocator, SkPdfNativeDoc* doc GET_TRACK_STREAM); +const unsigned char* nextObject(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* token, SkPdfAllocator* allocator, SkPdfNativeDoc* doc); enum SkPdfTokenType { kKeyword_TokenType, @@ -157,10 +157,6 @@ private: bool fEmpty; bool fHasPutBack; PdfToken fPutBack; - -#ifdef PDF_TRACK_STREAM_OFFSETS - int fStreamId; -#endif // PDF_TRACK_STREAM_OFFSETS }; #endif // SkPdfNativeTokenizer_DEFINED |