OLD | NEW |
1 | 1 |
2 #include "SkPdfNativeTokenizer.h" | 2 #include "SkPdfNativeTokenizer.h" |
3 #include "SkPdfObject.h" | 3 #include "SkPdfObject.h" |
4 #include "SkPdfConfig.h" | 4 #include "SkPdfConfig.h" |
5 | 5 |
6 #include "SkPdfStreamCommonDictionary_autogen.h" | 6 #include "SkPdfStreamCommonDictionary_autogen.h" |
7 #include "SkPdfImageDictionary_autogen.h" | 7 #include "SkPdfImageDictionary_autogen.h" |
8 | 8 |
9 // TODO(edisonn): perf!!! | 9 // TODO(edisonn): perf!!! |
10 // there could be 0s between start and end! but not in the needle. | 10 // there could be 0s between start and end! but not in the needle. |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 | 76 |
77 #else | 77 #else |
78 #define TRACE_INDENT(level,type) | 78 #define TRACE_INDENT(level,type) |
79 #define TRACE_COMMENT(ch) | 79 #define TRACE_COMMENT(ch) |
80 #define TRACE_TK(ch) | 80 #define TRACE_TK(ch) |
81 #define TRACE_NAME(start,end) | 81 #define TRACE_NAME(start,end) |
82 #define TRACE_STRING(start,end) | 82 #define TRACE_STRING(start,end) |
83 #define TRACE_HEXSTRING(start,end) | 83 #define TRACE_HEXSTRING(start,end) |
84 #endif | 84 #endif |
85 | 85 |
86 static const unsigned char* skipPdfWhiteSpaces(int level, const unsigned char* s
tart, const unsigned char* end) { | 86 const unsigned char* skipPdfWhiteSpaces(int level, const unsigned char* start, c
onst unsigned char* end) { |
87 TRACE_INDENT(level, "White Space"); | 87 TRACE_INDENT(level, "White Space"); |
88 while (start < end && isPdfWhiteSpace(*start)) { | 88 while (start < end && (isPdfWhiteSpace(*start) || *start == kComment_PdfDeli
miter)) { |
89 TRACE_COMMENT(*start); | 89 TRACE_COMMENT(*start); |
90 if (*start == kComment_PdfDelimiter) { | 90 if (*start == kComment_PdfDelimiter) { |
91 // skip the comment until end of line | 91 // skip the comment until end of line |
92 while (start < end && !isPdfEOL(*start)) { | 92 while (start < end && !isPdfEOL(*start)) { |
93 //*start = '\0'; | 93 //*start = '\0'; |
94 start++; | 94 start++; |
95 TRACE_COMMENT(*start); | 95 TRACE_COMMENT(*start); |
96 } | 96 } |
97 } else { | 97 } else { |
98 //*start = '\0'; | 98 //*start = '\0'; |
99 start++; | 99 start++; |
100 } | 100 } |
101 } | 101 } |
102 return start; | 102 return start; |
103 } | 103 } |
104 | 104 |
105 // TODO(edisonn) '(' can be used, will it break the string a delimiter or space
inside () ? | 105 // TODO(edisonn) '(' can be used, will it break the string a delimiter or space
inside () ? |
106 static const unsigned char* endOfPdfToken(int level, const unsigned char* start,
const unsigned char* end) { | 106 const unsigned char* endOfPdfToken(int level, const unsigned char* start, const
unsigned char* end) { |
107 //int opened brackets | 107 //int opened brackets |
108 //TODO(edisonn): what out for special chars, like \n, \032 | 108 //TODO(edisonn): what out for special chars, like \n, \032 |
109 TRACE_INDENT(level, "Token"); | 109 TRACE_INDENT(level, "Token"); |
110 | 110 |
111 SkASSERT(!isPdfWhiteSpace(*start)); | 111 SkASSERT(!isPdfWhiteSpace(*start)); |
112 | 112 |
113 if (start < end && isPdfDelimiter(*start)) { | 113 if (start < end && isPdfDelimiter(*start)) { |
114 TRACE_TK(*start); | 114 TRACE_TK(*start); |
115 start++; | 115 start++; |
116 return start; | 116 return start; |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 int64_t length = -1; | 629 int64_t length = -1; |
630 | 630 |
631 // TODO(edisonn): very basic implementation | 631 // TODO(edisonn): very basic implementation |
632 if (stream->has_Length() && stream->Length(doc) > 0) { | 632 if (stream->has_Length() && stream->Length(doc) > 0) { |
633 length = stream->Length(doc); | 633 length = stream->Length(doc); |
634 } | 634 } |
635 | 635 |
636 // TODO(edisonn): laod external streams | 636 // TODO(edisonn): laod external streams |
637 // TODO(edisonn): look at the last filter, to determione how to deal with po
ssible issue | 637 // TODO(edisonn): look at the last filter, to determione how to deal with po
ssible issue |
638 | 638 |
| 639 |
| 640 if (length >= 0) { |
| 641 const unsigned char* endstream = start + length; |
| 642 |
| 643 if (endstream[0] == kCR_PdfWhiteSpace && endstream[1] == kLF_PdfWhiteSpa
ce) { |
| 644 endstream += 2; |
| 645 } else if (endstream[0] == kLF_PdfWhiteSpace) { |
| 646 endstream += 1; |
| 647 } |
| 648 |
| 649 if (strncmp((const char*)endstream, "endstream", strlen("endstream")) !=
0) { |
| 650 length = -1; |
| 651 } |
| 652 } |
| 653 |
639 if (length < 0) { | 654 if (length < 0) { |
640 // scan the buffer, until we find first endstream | 655 // scan the buffer, until we find first endstream |
641 // TODO(edisonn): all buffers must have a 0 at the end now, | 656 // TODO(edisonn): all buffers must have a 0 at the end now, |
642 const unsigned char* endstream = (const unsigned char*)strrstrk((char*)s
tart, (char*)end, "endstream"); | 657 const unsigned char* endstream = (const unsigned char*)strrstrk((char*)s
tart, (char*)end, "endstream"); |
643 | 658 |
644 if (endstream) { | 659 if (endstream) { |
645 length = endstream - start; | 660 length = endstream - start; |
646 if (*(endstream-1) == kLF_PdfWhiteSpace) length--; | 661 if (*(endstream-1) == kLF_PdfWhiteSpace) length--; |
647 if (*(endstream-2) == kCR_PdfWhiteSpace) length--; | 662 if (*(endstream-2) == kCR_PdfWhiteSpace) length--; |
648 } | 663 } |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 SkPdfObject* obj = fAllocator->allocObject(); | 1084 SkPdfObject* obj = fAllocator->allocObject(); |
1070 fUncompressedStream = nextObject(0, fUncompressedStream, fUncompress
edStreamEnd, obj, fAllocator, fDoc); | 1085 fUncompressedStream = nextObject(0, fUncompressedStream, fUncompress
edStreamEnd, obj, fAllocator, fDoc); |
1071 // TODO(edisonn): perf maybe we should not expand abreviation like t
his | 1086 // TODO(edisonn): perf maybe we should not expand abreviation like t
his |
1072 inlineImage->set(inlineImageKeyAbbreviationExpand(key), | 1087 inlineImage->set(inlineImageKeyAbbreviationExpand(key), |
1073 inlineImageValueAbbreviationExpand(obj)); | 1088 inlineImageValueAbbreviationExpand(obj)); |
1074 } | 1089 } |
1075 } | 1090 } |
1076 // TODO(edisonn): report end of data with inline image without an EI | 1091 // TODO(edisonn): report end of data with inline image without an EI |
1077 return inlineImage; | 1092 return inlineImage; |
1078 } | 1093 } |
OLD | NEW |