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 "SkPdfConfig.h" | 8 #include "SkPdfConfig.h" |
| 9 #include "SkPdfDiffEncoder.h" |
9 #include "SkPdfNativeObject.h" | 10 #include "SkPdfNativeObject.h" |
10 #include "SkPdfNativeTokenizer.h" | 11 #include "SkPdfNativeTokenizer.h" |
11 #include "SkPdfUtils.h" | 12 #include "SkPdfUtils.h" |
12 | 13 |
13 // TODO(edisonn): mac builder does not find the header ... but from headers is o
k | 14 // TODO(edisonn): mac builder does not find the header ... but from headers is o
k |
14 //#include "SkPdfStreamCommonDictionary_autogen.h" | 15 //#include "SkPdfStreamCommonDictionary_autogen.h" |
15 //#include "SkPdfImageDictionary_autogen.h" | 16 //#include "SkPdfImageDictionary_autogen.h" |
16 #include "SkPdfHeaders_autogen.h" | 17 #include "SkPdfHeaders_autogen.h" |
17 | 18 |
18 | 19 |
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
933 bool SkPdfNativeTokenizer::readTokenCore(PdfToken* token) { | 934 bool SkPdfNativeTokenizer::readTokenCore(PdfToken* token) { |
934 #ifdef PDF_TRACE_READ_TOKEN | 935 #ifdef PDF_TRACE_READ_TOKEN |
935 static int read_op = 0; | 936 static int read_op = 0; |
936 #endif | 937 #endif |
937 | 938 |
938 token->fKeyword = NULL; | 939 token->fKeyword = NULL; |
939 token->fObject = NULL; | 940 token->fObject = NULL; |
940 | 941 |
941 fUncompressedStream = skipPdfWhiteSpaces(fUncompressedStream, fUncompressedS
treamEnd); | 942 fUncompressedStream = skipPdfWhiteSpaces(fUncompressedStream, fUncompressedS
treamEnd); |
942 if (fUncompressedStream >= fUncompressedStreamEnd) { | 943 if (fUncompressedStream >= fUncompressedStreamEnd) { |
| 944 fEmpty = true; |
943 return false; | 945 return false; |
944 } | 946 } |
945 | 947 |
946 SkPdfNativeObject obj; | 948 SkPdfNativeObject obj; |
947 fUncompressedStream = nextObject(fUncompressedStream, fUncompressedStreamEnd
, &obj, fAllocator, fDoc); | 949 fUncompressedStream = nextObject(fUncompressedStream, fUncompressedStreamEnd
, &obj, fAllocator, fDoc); |
948 // PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart) | 950 // PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart) |
949 | 951 |
950 // If it is a keyword, we will only get the pointer of the string. | 952 // If it is a keyword, we will only get the pointer of the string. |
951 if (obj.type() == SkPdfNativeObject::kKeyword_PdfObjectType) { | 953 if (obj.type() == SkPdfNativeObject::kKeyword_PdfObjectType) { |
952 token->fKeyword = obj.c_str(); | 954 token->fKeyword = obj.c_str(); |
(...skipping 25 matching lines...) Expand all Loading... |
978 SkASSERT(!fHasPutBack); | 980 SkASSERT(!fHasPutBack); |
979 fHasPutBack = true; | 981 fHasPutBack = true; |
980 fPutBack = token; | 982 fPutBack = token; |
981 #ifdef PDF_TRACE_READ_TOKEN | 983 #ifdef PDF_TRACE_READ_TOKEN |
982 printf("PUT_BACK %s %s\n", token.fType == kKeyword_TokenType ? "Keyword" : "
Object", | 984 printf("PUT_BACK %s %s\n", token.fType == kKeyword_TokenType ? "Keyword" : "
Object", |
983 token.fKeyword ? SkString(token.fKeyword, token.fKeywordLength).c_str
() : | 985 token.fKeyword ? SkString(token.fKeyword, token.fKeywordLength).c_str
() : |
984 token.fObject->toString().c_str()); | 986 token.fObject->toString().c_str()); |
985 #endif | 987 #endif |
986 } | 988 } |
987 | 989 |
988 bool SkPdfNativeTokenizer::readToken(PdfToken* token) { | 990 bool SkPdfNativeTokenizer::readToken(PdfToken* token, bool write) { |
989 if (fHasPutBack) { | 991 if (fHasPutBack) { |
990 *token = fPutBack; | 992 *token = fPutBack; |
991 fHasPutBack = false; | 993 fHasPutBack = false; |
992 #ifdef PDF_TRACE_READ_TOKEN | 994 #ifdef PDF_TRACE_READ_TOKEN |
993 printf("READ_BACK %s %s\n", token->fType == kKeyword_TokenType ? "Keyword" :
"Object", | 995 printf("READ_BACK %s %s\n", token->fType == kKeyword_TokenType ? "Keywor
d" : "Object", |
994 token->fKeyword ? SkString(token->fKeyword, token->fKeywordLength).c_
str() : | 996 token->fKeyword ? SkString(token->fKeyword, token->fKeywordLength
).c_str() : |
995 token->fObject->toString().c_str()); | 997 token->fObject->toString().c_str()); |
996 #endif | 998 #endif |
| 999 if (write) { |
| 1000 SkPdfDiffEncoder::WriteToFile(token); |
| 1001 } |
997 return true; | 1002 return true; |
998 } | 1003 } |
999 | 1004 |
1000 if (fEmpty) { | 1005 if (fEmpty) { |
1001 #ifdef PDF_TRACE_READ_TOKEN | 1006 #ifdef PDF_TRACE_READ_TOKEN |
1002 printf("EMPTY TOKENIZER\n"); | 1007 printf("EMPTY TOKENIZER\n"); |
1003 #endif | 1008 #endif |
1004 return false; | 1009 return false; |
1005 } | 1010 } |
1006 | 1011 |
1007 return readTokenCore(token); | 1012 const bool result = readTokenCore(token); |
| 1013 if (result && write) { |
| 1014 SkPdfDiffEncoder::WriteToFile(token); |
| 1015 } |
| 1016 return result; |
1008 } | 1017 } |
1009 | 1018 |
1010 #define DECLARE_PDF_NAME(longName) SkPdfName longName((char*)#longName) | 1019 #define DECLARE_PDF_NAME(longName) SkPdfName longName((char*)#longName) |
1011 | 1020 |
1012 // keys | 1021 // keys |
1013 DECLARE_PDF_NAME(BitsPerComponent); | 1022 DECLARE_PDF_NAME(BitsPerComponent); |
1014 DECLARE_PDF_NAME(ColorSpace); | 1023 DECLARE_PDF_NAME(ColorSpace); |
1015 DECLARE_PDF_NAME(Decode); | 1024 DECLARE_PDF_NAME(Decode); |
1016 DECLARE_PDF_NAME(DecodeParms); | 1025 DECLARE_PDF_NAME(DecodeParms); |
1017 DECLARE_PDF_NAME(Filter); | 1026 DECLARE_PDF_NAME(Filter); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 fAllocator, fDoc); | 1116 fAllocator, fDoc); |
1108 // PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart)
s | 1117 // PUT_TRACK_STREAM_ARGS_EXPL2(fStreamId, fUncompressedStreamStart)
s |
1109 // TODO(edisonn): perf maybe we should not expand abBreviation like
this | 1118 // TODO(edisonn): perf maybe we should not expand abBreviation like
this |
1110 inlineImage->set(inlineImageKeyAbbreviationExpand(key), | 1119 inlineImage->set(inlineImageKeyAbbreviationExpand(key), |
1111 inlineImageValueAbbreviationExpand(obj)); | 1120 inlineImageValueAbbreviationExpand(obj)); |
1112 } | 1121 } |
1113 } | 1122 } |
1114 // TODO(edisonn): report end of data with inline image without an EI | 1123 // TODO(edisonn): report end of data with inline image without an EI |
1115 return inlineImage; | 1124 return inlineImage; |
1116 } | 1125 } |
OLD | NEW |