| OLD | NEW |
| 1 #include "SkPdfNativeDoc.h" | 1 #include "SkPdfNativeDoc.h" |
| 2 #include "SkPdfNativeTokenizer.h" | 2 #include "SkPdfNativeTokenizer.h" |
| 3 #include "SkPdfNativeObject.h" | 3 #include "SkPdfNativeObject.h" |
| 4 | 4 |
| 5 #include <stdio.h> | 5 #include <stdio.h> |
| 6 #include <string.h> | 6 #include <string.h> |
| 7 #include <sys/types.h> | 7 #include <sys/types.h> |
| 8 #include <sys/stat.h> | 8 #include <sys/stat.h> |
| 9 | 9 |
| 10 #include "SkPdfFileTrailerDictionary_autogen.h" | 10 // TODO(edisonn): for some reason on mac these files are found here, but are fou
nd from headers |
| 11 #include "SkPdfCatalogDictionary_autogen.h" | 11 //#include "SkPdfFileTrailerDictionary_autogen.h" |
| 12 #include "SkPdfPageObjectDictionary_autogen.h" | 12 //#include "SkPdfCatalogDictionary_autogen.h" |
| 13 #include "SkPdfPageTreeNodeDictionary_autogen.h" | 13 //#include "SkPdfPageObjectDictionary_autogen.h" |
| 14 //#include "SkPdfPageTreeNodeDictionary_autogen.h" |
| 15 #include "SkPdfHeaders_autogen.h" |
| 16 |
| 14 #include "SkPdfMapper_autogen.h" | 17 #include "SkPdfMapper_autogen.h" |
| 15 | 18 |
| 16 #include "SkStream.h" | 19 #include "SkStream.h" |
| 17 | 20 |
| 18 | 21 |
| 19 static long getFileSize(const char* filename) | 22 static long getFileSize(const char* filename) |
| 20 { | 23 { |
| 21 struct stat stat_buf; | 24 struct stat stat_buf; |
| 22 int rc = stat(filename, &stat_buf); | 25 int rc = stat(filename, &stat_buf); |
| 23 return rc == 0 ? (long)stat_buf.st_size : -1; | 26 return rc == 0 ? (long)stat_buf.st_size : -1; |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 long startOffset = fObjects[id].fOffset; | 357 long startOffset = fObjects[id].fOffset; |
| 355 //long endOffset = fObjects[id].fOffsetEnd; | 358 //long endOffset = fObjects[id].fOffsetEnd; |
| 356 // TODO(edisonn): use hinted endOffset | 359 // TODO(edisonn): use hinted endOffset |
| 357 // TODO(edisonn): current implementation will result in a lot of memory usag
e | 360 // TODO(edisonn): current implementation will result in a lot of memory usag
e |
| 358 // to decrease memory usage, we wither need to be smart and know where objec
ts end, and we will | 361 // to decrease memory usage, we wither need to be smart and know where objec
ts end, and we will |
| 359 // alocate only the chancks needed, or the tokenizer will not make copies, b
ut then it needs to | 362 // alocate only the chancks needed, or the tokenizer will not make copies, b
ut then it needs to |
| 360 // cache the results so it does not go twice on the same buffer | 363 // cache the results so it does not go twice on the same buffer |
| 361 const unsigned char* current = fFileContent + startOffset; | 364 const unsigned char* current = fFileContent + startOffset; |
| 362 const unsigned char* end = fFileContent + fContentLength; | 365 const unsigned char* end = fFileContent + fContentLength; |
| 363 | 366 |
| 364 SkPdfNativeTokenizer tokenizer(current, end - current, fMapper, fAllocator,
this); | 367 SkPdfNativeTokenizer tokenizer(current, end - current, fAllocator, this); |
| 365 | 368 |
| 366 SkPdfNativeObject idObj; | 369 SkPdfNativeObject idObj; |
| 367 SkPdfNativeObject generationObj; | 370 SkPdfNativeObject generationObj; |
| 368 SkPdfNativeObject objKeyword; | 371 SkPdfNativeObject objKeyword; |
| 369 SkPdfNativeObject* dict = fAllocator->allocObject(); | 372 SkPdfNativeObject* dict = fAllocator->allocObject(); |
| 370 | 373 |
| 371 current = nextObject(0, current, end, &idObj, NULL, NULL); | 374 current = nextObject(0, current, end, &idObj, NULL, NULL); |
| 372 if (current >= end) { | 375 if (current >= end) { |
| 373 // TODO(edisonn): report warning/error | 376 // TODO(edisonn): report warning/error |
| 374 return NULL; | 377 return NULL; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 return NULL; | 461 return NULL; |
| 459 } | 462 } |
| 460 } | 463 } |
| 461 | 464 |
| 462 SkPdfNativeTokenizer* SkPdfNativeDoc::tokenizerOfStream(SkPdfNativeObject* strea
m, | 465 SkPdfNativeTokenizer* SkPdfNativeDoc::tokenizerOfStream(SkPdfNativeObject* strea
m, |
| 463 SkPdfAllocator* alloc
ator) { | 466 SkPdfAllocator* alloc
ator) { |
| 464 if (stream == NULL) { | 467 if (stream == NULL) { |
| 465 return NULL; | 468 return NULL; |
| 466 } | 469 } |
| 467 | 470 |
| 468 return new SkPdfNativeTokenizer(stream, fMapper, allocator, this); | 471 return new SkPdfNativeTokenizer(stream, allocator, this); |
| 469 } | 472 } |
| 470 | 473 |
| 471 // TODO(edisonn): NYI | 474 // TODO(edisonn): NYI |
| 472 SkPdfNativeTokenizer* SkPdfNativeDoc::tokenizerOfBuffer(const unsigned char* buf
fer, size_t len, | 475 SkPdfNativeTokenizer* SkPdfNativeDoc::tokenizerOfBuffer(const unsigned char* buf
fer, size_t len, |
| 473 SkPdfAllocator* alloc
ator) { | 476 SkPdfAllocator* alloc
ator) { |
| 474 // warning does not track two calls in the same buffer! the buffer is update
d! | 477 // warning does not track two calls in the same buffer! the buffer is update
d! |
| 475 // make a clean copy if needed! | 478 // make a clean copy if needed! |
| 476 return new SkPdfNativeTokenizer(buffer, len, fMapper, allocator, this); | 479 return new SkPdfNativeTokenizer(buffer, len, allocator, this); |
| 477 } | 480 } |
| 478 | 481 |
| 479 size_t SkPdfNativeDoc::objects() const { | 482 size_t SkPdfNativeDoc::objects() const { |
| 480 return fObjects.count(); | 483 return fObjects.count(); |
| 481 } | 484 } |
| 482 | 485 |
| 483 SkPdfNativeObject* SkPdfNativeDoc::object(int i) { | 486 SkPdfNativeObject* SkPdfNativeDoc::object(int i) { |
| 484 SkASSERT(!(i < 0 || i > fObjects.count())); | 487 SkASSERT(!(i < 0 || i > fObjects.count())); |
| 485 | 488 |
| 486 if (i < 0 || i > fObjects.count()) { | 489 if (i < 0 || i > fObjects.count()) { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 return (SkPdfNativeObject*)ref; | 570 return (SkPdfNativeObject*)ref; |
| 568 } | 571 } |
| 569 | 572 |
| 570 size_t SkPdfNativeDoc::bytesUsed() const { | 573 size_t SkPdfNativeDoc::bytesUsed() const { |
| 571 return fAllocator->bytesUsed() + | 574 return fAllocator->bytesUsed() + |
| 572 fContentLength + | 575 fContentLength + |
| 573 fObjects.count() * sizeof(PublicObjectEntry) + | 576 fObjects.count() * sizeof(PublicObjectEntry) + |
| 574 fPages.count() * sizeof(SkPdfPageObjectDictionary*) + | 577 fPages.count() * sizeof(SkPdfPageObjectDictionary*) + |
| 575 sizeof(*this); | 578 sizeof(*this); |
| 576 } | 579 } |
| OLD | NEW |