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 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 } else { | 284 } else { |
285 return start + (out - (const unsigned char*)NULL); // return where the s
tring would end if we reuse the string | 285 return start + (out - (const unsigned char*)NULL); // return where the s
tring would end if we reuse the string |
286 } | 286 } |
287 } | 287 } |
288 | 288 |
289 static int readStringLength(int level, const unsigned char* start, const unsigne
d char* end) { | 289 static int readStringLength(int level, const unsigned char* start, const unsigne
d char* end) { |
290 return readString(level, start, end, NULL) - start; | 290 return readString(level, start, end, NULL) - start; |
291 } | 291 } |
292 | 292 |
293 static const unsigned char* readString(int level, const unsigned char* start, co
nst unsigned char* end, SkPdfObject* str, SkPdfAllocator* allocator) { | 293 static const unsigned char* readString(int level, const unsigned char* start, co
nst unsigned char* end, SkPdfObject* str, SkPdfAllocator* allocator) { |
| 294 if (!allocator) { |
| 295 return end; |
| 296 } |
294 int outLength = readStringLength(level, start, end); | 297 int outLength = readStringLength(level, start, end); |
295 // TODO(edisonn): optimize the allocation, don't allocate new string, but pu
t it in a preallocated buffer | 298 // TODO(edisonn): optimize the allocation, don't allocate new string, but pu
t it in a preallocated buffer |
296 unsigned char* out = (unsigned char*)allocator->alloc(outLength); | 299 unsigned char* out = (unsigned char*)allocator->alloc(outLength); |
297 start = readString(level, start, end, out); | 300 start = readString(level, start, end, out); |
298 SkPdfObject::makeString(out, out + outLength, str); | 301 SkPdfObject::makeString(out, out + outLength, str); |
299 TRACE_STRING(out, out + outLength); | 302 TRACE_STRING(out, out + outLength); |
300 return start; // consumed already ) at the end of the string | 303 return start; // consumed already ) at the end of the string |
301 } | 304 } |
302 | 305 |
303 static const unsigned char* readHexString(int level, const unsigned char* start,
const unsigned char* end, unsigned char* out) { | 306 static const unsigned char* readHexString(int level, const unsigned char* start,
const unsigned char* end, unsigned char* out) { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 } else { | 430 } else { |
428 return start + (out - (const unsigned char*)NULL); // return where the s
tring would end if we reuse the string | 431 return start + (out - (const unsigned char*)NULL); // return where the s
tring would end if we reuse the string |
429 } | 432 } |
430 } | 433 } |
431 | 434 |
432 static int readHexStringLength(int level, const unsigned char* start, const unsi
gned char* end) { | 435 static int readHexStringLength(int level, const unsigned char* start, const unsi
gned char* end) { |
433 return readHexString(level, start, end, NULL) - start; | 436 return readHexString(level, start, end, NULL) - start; |
434 } | 437 } |
435 | 438 |
436 static const unsigned char* readHexString(int level, const unsigned char* start,
const unsigned char* end, SkPdfObject* str, SkPdfAllocator* allocator) { | 439 static const unsigned char* readHexString(int level, const unsigned char* start,
const unsigned char* end, SkPdfObject* str, SkPdfAllocator* allocator) { |
| 440 if (!allocator) { |
| 441 return end; |
| 442 } |
437 int outLength = readHexStringLength(level, start, end); | 443 int outLength = readHexStringLength(level, start, end); |
438 // TODO(edisonn): optimize the allocation, don't allocate new string, but pu
t it in a preallocated buffer | 444 // TODO(edisonn): optimize the allocation, don't allocate new string, but pu
t it in a preallocated buffer |
439 unsigned char* out = (unsigned char*)allocator->alloc(outLength); | 445 unsigned char* out = (unsigned char*)allocator->alloc(outLength); |
440 start = readHexString(level, start, end, out); | 446 start = readHexString(level, start, end, out); |
441 SkPdfObject::makeHexString(out, out + outLength, str); | 447 SkPdfObject::makeHexString(out, out + outLength, str); |
442 TRACE_HEXSTRING(out, out + outLength); | 448 TRACE_HEXSTRING(out, out + outLength); |
443 return start; // consumed already > at the end of the string | 449 return start; // consumed already > at the end of the string |
444 } | 450 } |
445 | 451 |
446 // TODO(edisonn): before PDF 1.2 name could not have special characters, add ver
sion parameter | 452 // TODO(edisonn): before PDF 1.2 name could not have special characters, add ver
sion parameter |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
549 } else { | 555 } else { |
550 return start + (out - (const unsigned char*)NULL); // return where the s
tring would end if we reuse the string | 556 return start + (out - (const unsigned char*)NULL); // return where the s
tring would end if we reuse the string |
551 } | 557 } |
552 } | 558 } |
553 | 559 |
554 static int readNameLength(int level, const unsigned char* start, const unsigned
char* end) { | 560 static int readNameLength(int level, const unsigned char* start, const unsigned
char* end) { |
555 return readName(level, start, end, NULL) - start; | 561 return readName(level, start, end, NULL) - start; |
556 } | 562 } |
557 | 563 |
558 static const unsigned char* readName(int level, const unsigned char* start, cons
t unsigned char* end, SkPdfObject* name, SkPdfAllocator* allocator) { | 564 static const unsigned char* readName(int level, const unsigned char* start, cons
t unsigned char* end, SkPdfObject* name, SkPdfAllocator* allocator) { |
| 565 if (!allocator) { |
| 566 return end; |
| 567 } |
559 int outLength = readNameLength(level, start, end); | 568 int outLength = readNameLength(level, start, end); |
560 // TODO(edisonn): optimize the allocation, don't allocate new string, but pu
t it in a preallocated buffer | 569 // TODO(edisonn): optimize the allocation, don't allocate new string, but pu
t it in a preallocated buffer |
561 unsigned char* out = (unsigned char*)allocator->alloc(outLength); | 570 unsigned char* out = (unsigned char*)allocator->alloc(outLength); |
562 start = readName(level, start, end, out); | 571 start = readName(level, start, end, out); |
563 SkPdfObject::makeName(out, out + outLength, name); | 572 SkPdfObject::makeName(out, out + outLength, name); |
564 TRACE_NAME(out, out + outLength); | 573 TRACE_NAME(out, out + outLength); |
565 return start; | 574 return start; |
566 } | 575 } |
567 | 576 |
568 // TODO(edisonn): pdf spec let Length to be an indirect object define after the
stream | 577 // TODO(edisonn): pdf spec let Length to be an indirect object define after the
stream |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1050 SkPdfObject* obj = fAllocator->allocObject(); | 1059 SkPdfObject* obj = fAllocator->allocObject(); |
1051 fUncompressedStream = nextObject(0, fUncompressedStream, fUncompress
edStreamEnd, obj, fAllocator, fDoc); | 1060 fUncompressedStream = nextObject(0, fUncompressedStream, fUncompress
edStreamEnd, obj, fAllocator, fDoc); |
1052 // TODO(edisonn): perf maybe we should not expand abreviation like t
his | 1061 // TODO(edisonn): perf maybe we should not expand abreviation like t
his |
1053 inlineImage->set(inlineImageKeyAbbreviationExpand(key), | 1062 inlineImage->set(inlineImageKeyAbbreviationExpand(key), |
1054 inlineImageValueAbbreviationExpand(obj)); | 1063 inlineImageValueAbbreviationExpand(obj)); |
1055 } | 1064 } |
1056 } | 1065 } |
1057 // TODO(edisonn): report end of data with inline image without an EI | 1066 // TODO(edisonn): report end of data with inline image without an EI |
1058 return inlineImage; | 1067 return inlineImage; |
1059 } | 1068 } |
OLD | NEW |