| Index: experimental/PdfViewer/pdfparser/podofo/SkPdfPodofoTokenizer.cpp
|
| ===================================================================
|
| --- experimental/PdfViewer/pdfparser/podofo/SkPdfPodofoTokenizer.cpp (revision 9961)
|
| +++ experimental/PdfViewer/pdfparser/podofo/SkPdfPodofoTokenizer.cpp (working copy)
|
| @@ -1,102 +0,0 @@
|
| -#include "SkPdfPodofoTokenizer.h"
|
| -
|
| -#include "SkTypes.h"
|
| -#include "SkPdfStream_autogen.h"
|
| -#include "SkPdfMapper_autogen.h"
|
| -
|
| -#include "podofo.h"
|
| -
|
| -// maps to a null doc, if the code asks for it, we should err/crash.
|
| -SkPdfMapper gNullMapper(NULL);
|
| -
|
| -SkPdfPodofoTokenizer::SkPdfPodofoTokenizer(const SkPodofoParsedPDF* parser, PoDoFo::PdfContentsTokenizer* tokenizer)
|
| - : fMapper(parser->mapper()), fDoc(parser->podofo()), fTokenizer(tokenizer), fUncompressedStream(NULL), fUncompressedStreamLength(0), fEmpty(false), fHasPutBack(false) {}
|
| -
|
| -SkPdfPodofoTokenizer::SkPdfPodofoTokenizer(const SkPdfObject* objWithStream) : fMapper(&gNullMapper), fDoc(NULL), fTokenizer(NULL), fUncompressedStream(NULL), fUncompressedStreamLength(0), fEmpty(false), fHasPutBack(false) {
|
| - fUncompressedStream = NULL;
|
| - fUncompressedStreamLength = 0;
|
| -
|
| - fDoc = NULL;
|
| -
|
| - SkPdfStream* stream = NULL;
|
| - if (objWithStream &&
|
| - objWithStream->doc()->mapper()->mapStream(objWithStream, &stream) &&
|
| - stream->GetFilteredCopy(&fUncompressedStream, &fUncompressedStreamLength) &&
|
| - fUncompressedStream != NULL &&
|
| - fUncompressedStreamLength != 0) {
|
| - fTokenizer = new PoDoFo::PdfContentsTokenizer(fUncompressedStream, fUncompressedStreamLength);
|
| - fDoc = objWithStream->doc()->podofo();
|
| - } else {
|
| - fEmpty = true;
|
| - }
|
| -}
|
| -
|
| -SkPdfPodofoTokenizer::SkPdfPodofoTokenizer(const char* buffer, int len) : fMapper(&gNullMapper), fDoc(NULL), fTokenizer(NULL), fUncompressedStream(NULL), fUncompressedStreamLength(0), fEmpty(false), fHasPutBack(false) {
|
| - try {
|
| - fTokenizer = new PoDoFo::PdfContentsTokenizer(buffer, len);
|
| - } catch (PoDoFo::PdfError& e) {
|
| - fEmpty = true;
|
| - }
|
| -}
|
| -
|
| -SkPdfPodofoTokenizer::~SkPdfPodofoTokenizer() {
|
| - free(fUncompressedStream);
|
| -}
|
| -
|
| -bool SkPdfPodofoTokenizer::readTokenCore(PdfToken* token) {
|
| - PoDoFo::PdfVariant var;
|
| - PoDoFo::EPdfContentsType type;
|
| -
|
| - token->fKeyword = NULL;
|
| - token->fObject = NULL;
|
| -
|
| - bool ret = fTokenizer->ReadNext(type, token->fKeyword, var);
|
| -
|
| - if (!ret) return ret;
|
| -
|
| - switch (type) {
|
| - case PoDoFo::ePdfContentsType_Keyword:
|
| - token->fType = kKeyword_TokenType;
|
| - break;
|
| -
|
| - case PoDoFo::ePdfContentsType_Variant: {
|
| - token->fType = kObject_TokenType;
|
| - PoDoFo::PdfObject* obj = new PoDoFo::PdfObject(var);
|
| - fMapper->mapObject(obj, &token->fObject);
|
| - }
|
| - break;
|
| -
|
| - case PoDoFo::ePdfContentsType_ImageData:
|
| - token->fType = kImageData_TokenType;
|
| - // TODO(edisonn): inline images seem to work without it
|
| - break;
|
| - }
|
| -#ifdef PDF_TRACE
|
| - std::string str;
|
| - if (token->fObject) {
|
| - token->fObject->podofo()->ToString(str);
|
| - }
|
| - printf("%s %s\n", token->fType == kKeyword_TokenType ? "Keyword" : token->fType == kObject_TokenType ? "Object" : "ImageData", token->fKeyword ? token->fKeyword : str.c_str());
|
| -#endif
|
| - return ret;
|
| -}
|
| -
|
| -void SkPdfPodofoTokenizer::PutBack(PdfToken token) {
|
| - SkASSERT(!fHasPutBack);
|
| - fHasPutBack = true;
|
| - fPutBack = token;
|
| -}
|
| -
|
| -bool SkPdfPodofoTokenizer::readToken(PdfToken* token) {
|
| - if (fHasPutBack) {
|
| - *token = fPutBack;
|
| - fHasPutBack = false;
|
| - return true;
|
| - }
|
| -
|
| - if (fEmpty) {
|
| - return false;
|
| - }
|
| -
|
| - return readTokenCore(token);
|
| -}
|
|
|