| Index: experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h
|
| diff --git a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h b/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h
|
| deleted file mode 100644
|
| index 79b070f12ea0c182f58d0efd18a47a7e87490fa3..0000000000000000000000000000000000000000
|
| --- a/experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.h
|
| +++ /dev/null
|
| @@ -1,201 +0,0 @@
|
| -/*
|
| - * Copyright 2013 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#ifndef SkPdfNativeTokenizer_DEFINED
|
| -#define SkPdfNativeTokenizer_DEFINED
|
| -
|
| -#include <math.h>
|
| -#include <string.h>
|
| -
|
| -#include "SkPdfConfig.h"
|
| -#include "SkTDArray.h"
|
| -#include "SkTDict.h"
|
| -
|
| -// All these constants are defined by the PDF 1.4 Spec.
|
| -
|
| -class SkPdfDictionary;
|
| -class SkPdfImageDictionary;
|
| -class SkPdfNativeDoc;
|
| -class SkPdfNativeObject;
|
| -
|
| -
|
| -// White Spaces
|
| -#define kNUL_PdfWhiteSpace '\x00'
|
| -#define kHT_PdfWhiteSpace '\x09'
|
| -#define kLF_PdfWhiteSpace '\x0A'
|
| -#define kFF_PdfWhiteSpace '\x0C'
|
| -#define kCR_PdfWhiteSpace '\x0D'
|
| -#define kSP_PdfWhiteSpace '\x20'
|
| -
|
| -// PdfDelimiters
|
| -#define kOpenedRoundBracket_PdfDelimiter '('
|
| -#define kClosedRoundBracket_PdfDelimiter ')'
|
| -#define kOpenedInequityBracket_PdfDelimiter '<'
|
| -#define kClosedInequityBracket_PdfDelimiter '>'
|
| -#define kOpenedSquareBracket_PdfDelimiter '['
|
| -#define kClosedSquareBracket_PdfDelimiter ']'
|
| -#define kOpenedCurlyBracket_PdfDelimiter '{'
|
| -#define kClosedCurlyBracket_PdfDelimiter '}'
|
| -#define kNamed_PdfDelimiter '/'
|
| -#define kComment_PdfDelimiter '%'
|
| -
|
| -#define kEscape_PdfSpecial '\\'
|
| -#define kBackspace_PdfSpecial '\x08'
|
| -
|
| -// TODO(edisonn): what is the faster way for compiler/machine type to evaluate this expressions?
|
| -// we should evaluate all options. might be even different from one machine to another
|
| -// 1) expand expression, let compiler optimize it
|
| -// 2) binary search
|
| -// 3) linear search in array
|
| -// 4) vector (e.f. T type[256] .. return type[ch] ...
|
| -// 5) manually build the expression with least number of operators, e.g. for consecutive
|
| -// chars, we can use an binary equal ignoring last bit
|
| -#define isPdfWhiteSpace(ch) (((ch)==kNUL_PdfWhiteSpace)|| \
|
| - ((ch)==kHT_PdfWhiteSpace)|| \
|
| - ((ch)==kLF_PdfWhiteSpace)|| \
|
| - ((ch)==kFF_PdfWhiteSpace)|| \
|
| - ((ch)==kCR_PdfWhiteSpace)|| \
|
| - ((ch)==kSP_PdfWhiteSpace))
|
| -
|
| -#define isPdfEOL(ch) (((ch)==kLF_PdfWhiteSpace)||((ch)==kCR_PdfWhiteSpace))
|
| -
|
| -
|
| -#define isPdfDelimiter(ch) (((ch)==kOpenedRoundBracket_PdfDelimiter)||\
|
| - ((ch)==kClosedRoundBracket_PdfDelimiter)||\
|
| - ((ch)==kOpenedInequityBracket_PdfDelimiter)||\
|
| - ((ch)==kClosedInequityBracket_PdfDelimiter)||\
|
| - ((ch)==kOpenedSquareBracket_PdfDelimiter)||\
|
| - ((ch)==kClosedSquareBracket_PdfDelimiter)||\
|
| - ((ch)==kOpenedCurlyBracket_PdfDelimiter)||\
|
| - ((ch)==kClosedCurlyBracket_PdfDelimiter)||\
|
| - ((ch)==kNamed_PdfDelimiter)||\
|
| - ((ch)==kComment_PdfDelimiter))
|
| -
|
| -#define isPdfWhiteSpaceOrPdfDelimiter(ch) (isPdfWhiteSpace(ch)||isPdfDelimiter(ch))
|
| -
|
| -#define isPdfDigit(ch) ((ch)>='0'&&(ch)<='9')
|
| -#define isPdfNumeric(ch) (isPdfDigit(ch)||(ch)=='+'||(ch)=='-'||(ch)=='.')
|
| -
|
| -const unsigned char* skipPdfWhiteSpaces(const unsigned char* buffer, const unsigned char* end);
|
| -const unsigned char* endOfPdfToken(const unsigned char* start, const unsigned char* end);
|
| -
|
| -#define BUFFER_SIZE 1024
|
| -
|
| -/** \class SkPdfAllocator
|
| - *
|
| - * An allocator only allocates memory, and it deletes it all when the allocator is destroyed.
|
| - * This strategy would allow us not to do any garbage collection while we parse and/or render
|
| - * a pdf.
|
| - *
|
| - */
|
| -class SkPdfAllocator {
|
| -public:
|
| - SkPdfAllocator() {
|
| - fSizeInBytes = sizeof(*this);
|
| - fCurrent = allocBlock();
|
| - fCurrentUsed = 0;
|
| - }
|
| -
|
| - ~SkPdfAllocator();
|
| -
|
| - // Allocates an object. It will be reset automatically when ~SkPdfAllocator() is called.
|
| - SkPdfNativeObject* allocObject();
|
| -
|
| - // Allocates a buffer. It will be freed automatically when ~SkPdfAllocator() is called.
|
| - void* alloc(size_t bytes) {
|
| - void* data = malloc(bytes);
|
| - fHandles.push(data);
|
| - fSizeInBytes += bytes;
|
| - return data;
|
| - }
|
| -
|
| - // Returns the number of bytes used in this allocator.
|
| - size_t bytesUsed() const {
|
| - return fSizeInBytes;
|
| - }
|
| -
|
| -private:
|
| - SkTDArray<SkPdfNativeObject*> fHistory;
|
| - SkTDArray<void*> fHandles;
|
| - SkPdfNativeObject* fCurrent;
|
| - int fCurrentUsed;
|
| -
|
| - SkPdfNativeObject* allocBlock();
|
| - size_t fSizeInBytes;
|
| -};
|
| -
|
| -// Type of a parsed token.
|
| -enum SkPdfTokenType {
|
| - kKeyword_TokenType,
|
| - kObject_TokenType,
|
| -};
|
| -
|
| -
|
| -/** \struct PdfToken
|
| - *
|
| - * Stores the result of the parsing - a keyword or an object.
|
| - *
|
| - */
|
| -struct PdfToken {
|
| - const char* fKeyword;
|
| - size_t fKeywordLength;
|
| - SkPdfNativeObject* fObject;
|
| - SkPdfTokenType fType;
|
| -
|
| - PdfToken() : fKeyword(NULL), fKeywordLength(0), fObject(NULL) {}
|
| -};
|
| -
|
| -/** \class SkPdfNativeTokenizer
|
| - *
|
| - * Responsible to tokenize a stream in small tokens, eityh a keyword or an object.
|
| - * A renderer can feed on the tokens and render a pdf.
|
| - *
|
| - */
|
| -class SkPdfNativeTokenizer {
|
| -public:
|
| - SkPdfNativeTokenizer(SkPdfNativeObject* objWithStream,
|
| - SkPdfAllocator* allocator, SkPdfNativeDoc* doc);
|
| - SkPdfNativeTokenizer(const unsigned char* buffer, int len,
|
| - SkPdfAllocator* allocator, SkPdfNativeDoc* doc);
|
| -
|
| - virtual ~SkPdfNativeTokenizer();
|
| -
|
| - // Reads one token. Returns false if there are no more tokens.
|
| - // If writeDiff is true, and a token was read, create a PNG highlighting
|
| - // the difference caused by this command in /tmp/log_step_by_step.
|
| - // If PDF_TRACE_DIFF_IN_PNG is not defined, writeDiff does nothing.
|
| - bool readToken(PdfToken* token, bool writeDiff = false);
|
| -
|
| - // Put back a token to be read in the nextToken read. Only one token is allowed to be put
|
| - // back. Must not necesaarely be the last token read.
|
| - void PutBack(PdfToken token);
|
| -
|
| - // Reads the inline image that is present in the stream. At this point we just consumed the ID
|
| - // token already.
|
| - SkPdfImageDictionary* readInlineImage();
|
| -
|
| -private:
|
| - bool readTokenCore(PdfToken* token);
|
| -
|
| - SkPdfNativeDoc* fDoc;
|
| - SkPdfAllocator* fAllocator;
|
| -
|
| - const unsigned char* fUncompressedStreamStart;
|
| - const unsigned char* fUncompressedStream;
|
| - const unsigned char* fUncompressedStreamEnd;
|
| -
|
| - bool fEmpty;
|
| - bool fHasPutBack;
|
| - PdfToken fPutBack;
|
| -};
|
| -
|
| -const unsigned char* nextObject(const unsigned char* start, const unsigned char* end,
|
| - SkPdfNativeObject* token,
|
| - SkPdfAllocator* allocator,
|
| - SkPdfNativeDoc* doc);
|
| -
|
| -#endif // SkPdfNativeTokenizer_DEFINED
|
|
|