SkPdfNativeObject.h revision 222382b30a176db9d9044d9df1ae14e0fbe27181
1571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#ifndef EXPERIMENTAL_PDFVIEWER_PDFPARSER_NATIVE_SKPDFOBJECT_H_ 2571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#define EXPERIMENTAL_PDFVIEWER_PDFPARSER_NATIVE_SKPDFOBJECT_H_ 3571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 4571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include <stdint.h> 5571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include <string.h> 6571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include <string> 7571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include "SkTDArray.h" 8571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include "SkTDict.h" 9571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include "SkRect.h" 10571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include "SkMatrix.h" 11571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include "SkString.h" 12571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 13571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include "SkPdfNYI.h" 14571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#include "SkPdfConfig.h" 15571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 16571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfDictionary; 17571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfStream; 18571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfAllocator; 19571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 20571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com// TODO(edisonn): macro it and move it to utils 21571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comSkMatrix SkMatrixFromPdfMatrix(double array[6]); 22571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 23571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 24571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#define kFilteredStreamBit 0 25571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#define kUnfilteredStreamBit 1 26571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 27571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 28571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfObject { 29571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com public: 30571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com enum ObjectType { 31571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kInvalid_PdfObjectType, 32571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 33571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kBoolean_PdfObjectType, 34571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kInteger_PdfObjectType, 35571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kReal_PdfObjectType, 36571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kString_PdfObjectType, 37571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kHexString_PdfObjectType, 38571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kName_PdfObjectType, 39571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kKeyword_PdfObjectType, 40571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com //kStream_PdfObjectType, // attached to a Dictionary 41571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kArray_PdfObjectType, 42571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kDictionary_PdfObjectType, 43571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kNull_PdfObjectType, 44571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 45571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): after the pdf has been loaded completely, resolve all references 46571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // try the same thing with delayed loaded ... 47571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kReference_PdfObjectType, 48571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 49571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com kUndefined_PdfObjectType, // per 1.4 spec, if the same key appear twice in the dictionary, the value is undefined 50571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com }; 51571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 52571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comprivate: 53571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com struct NotOwnedString { 54571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com unsigned char* fBuffer; 55571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com size_t fBytes; 56571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com }; 57571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 58571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com struct Reference { 59571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com unsigned int fId; 60571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com unsigned int fGen; 61571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com }; 62571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 63571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): add stream start, stream end, where stream is weither the file 64571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // or decoded/filtered pdf stream 65571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 66571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): add warning/report per object 67571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): add flag fUsed, to be used once the parsing is complete, 68571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // so we could show what parts have been proccessed, ignored, or generated errors 69571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 70571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com ObjectType fObjectType; 71571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 72571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com union { 73571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool fBooleanValue; 74571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com int64_t fIntegerValue; 75571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): double, float? typedefed 76571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com double fRealValue; 77571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com NotOwnedString fStr; 78571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 79571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): make sure the foorprint of fArray and fMap is small, otherwise, use pointers, or classes with up to 8 bytes in footprint 80571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkTDArray<SkPdfObject*>* fArray; 81571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com Reference fRef; 82571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com }; 83571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkTDict<SkPdfObject*>* fMap; 84571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com void* fData; 85571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 86571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 87571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.compublic: 88571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 89222382b30a176db9d9044d9df1ae14e0fbe27181edisonn@google.com SkPdfObject() : fObjectType(kInvalid_PdfObjectType), fMap(NULL), fData(NULL) {} 90571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 91571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline void* data() { 92571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fData; 93571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 94571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 95571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline void setData(void* data) { 96571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fData = data; 97571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 98571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 99222382b30a176db9d9044d9df1ae14e0fbe27181edisonn@google.com// ~SkPdfObject() { 100222382b30a176db9d9044d9df1ae14e0fbe27181edisonn@google.com// //reset(); must be called manually! 101222382b30a176db9d9044d9df1ae14e0fbe27181edisonn@google.com// } 102571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 103571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com void reset() { 104571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com switch (fObjectType) { 105571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kArray_PdfObjectType: 106571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com delete fArray; 107571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 108571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 109571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kDictionary_PdfObjectType: 110571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com delete fMap; 111571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 112571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 113571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com default: 114571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 115571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 116571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fObjectType = kInvalid_PdfObjectType; 117571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 118571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 119571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com ObjectType type() { return fObjectType; } 120571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 121571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const char* c_str() const { 122571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com switch (fObjectType) { 123571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kString_PdfObjectType: 124571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kHexString_PdfObjectType: 125571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kKeyword_PdfObjectType: 126571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (const char*)fStr.fBuffer; 127571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 128571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com default: 129571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report/warning 130571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return NULL; 131571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 132571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 133571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 134571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com size_t len() const { 135571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com switch (fObjectType) { 136571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kString_PdfObjectType: 137571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kHexString_PdfObjectType: 138571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kKeyword_PdfObjectType: 139571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fStr.fBytes; 140571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 141571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com default: 142571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report/warning 143571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return 0; 144571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 145571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 146571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 147571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 148571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): NYI 149571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfDate& dateValue() const { 150571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static SkPdfDate nyi; 151571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return nyi; 152571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 153571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 154571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): NYI 155571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfFunction& functionValue() const { 156571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static SkPdfFunction nyi; 157571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return nyi; 158571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 159571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 160571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): NYI 161571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfFileSpec& fileSpecValue() const { 162571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static SkPdfFileSpec nyi; 163571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return nyi; 164571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 165571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 166571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): NYI 167571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfTree& treeValue() const { 168571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static SkPdfTree nyi; 169571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return nyi; 170571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 171571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 172571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 173571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeBoolean(bool value, SkPdfObject* obj) { 174571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 175571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 176571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = kBoolean_PdfObjectType; 177571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fBooleanValue = value; 178571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 179571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 180571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static SkPdfObject makeBoolean(bool value) { 181571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject obj; 182571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj.fObjectType = kBoolean_PdfObjectType; 183571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj.fBooleanValue = value; 184571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return obj; 185571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 186571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 187571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeInteger(int64_t value, SkPdfObject* obj) { 188571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 189571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 190571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = kInteger_PdfObjectType; 191571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fIntegerValue = value; 192571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 193571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 194571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeReal(double value, SkPdfObject* obj) { 195571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 196571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 197571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = kReal_PdfObjectType; 198571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fRealValue = value; 199571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 200571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 201571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeNull(SkPdfObject* obj) { 202571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 203571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 204571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = kNull_PdfObjectType; 205571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 206571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 207571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static SkPdfObject makeNull() { 208571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject obj; 209571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj.fObjectType = kNull_PdfObjectType; 210571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return obj; 211571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 212571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 213571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static SkPdfObject kNull; 214571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 215571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeNumeric(unsigned char* start, unsigned char* end, SkPdfObject* obj) { 216571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 217571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 218571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): NYI properly 219571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // if has dot (impl), or exceeds max int, is real, otherwise is int 220571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isInt = true; 221571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com for (unsigned char* current = start; current < end; current++) { 222571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (*current == '.') { 223571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com isInt = false; 224571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 225571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 226571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report parse issue with numbers like "24asdasd123" 227571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 228571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (isInt) { 229571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeInteger(atol((const char*)start), obj); 230571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } else { 231571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeReal(atof((const char*)start), obj); 232571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 233571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 234571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 235571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeReference(unsigned int id, unsigned int gen, SkPdfObject* obj) { 236571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 237571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 238571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = kReference_PdfObjectType; 239571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fRef.fId = id; 240571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fRef.fGen = gen; 241571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 242571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 243571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 244571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeString(unsigned char* start, SkPdfObject* obj) { 245571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, strlen((const char*)start), obj, kString_PdfObjectType); 246571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 247571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 248571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeString(unsigned char* start, unsigned char* end, SkPdfObject* obj) { 249571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, end - start, obj, kString_PdfObjectType); 250571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 251571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 252571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeString(unsigned char* start, size_t bytes, SkPdfObject* obj) { 253571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, bytes, obj, kString_PdfObjectType); 254571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 255571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 256571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 257571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeHexString(unsigned char* start, SkPdfObject* obj) { 258571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, strlen((const char*)start), obj, kHexString_PdfObjectType); 259571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 260571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 261571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeHexString(unsigned char* start, unsigned char* end, SkPdfObject* obj) { 262571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, end - start, obj, kHexString_PdfObjectType); 263571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 264571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 265571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeHexString(unsigned char* start, size_t bytes, SkPdfObject* obj) { 266571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, bytes, obj, kHexString_PdfObjectType); 267571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 268571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 269571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 270571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeName(unsigned char* start, SkPdfObject* obj) { 271571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, strlen((const char*)start), obj, kName_PdfObjectType); 272571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 273571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 274571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeName(unsigned char* start, unsigned char* end, SkPdfObject* obj) { 275571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, end - start, obj, kName_PdfObjectType); 276571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 277571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 278571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeName(unsigned char* start, size_t bytes, SkPdfObject* obj) { 279571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, bytes, obj, kName_PdfObjectType); 280571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 281571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 282571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 283571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeKeyword(unsigned char* start, SkPdfObject* obj) { 284571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, strlen((const char*)start), obj, kKeyword_PdfObjectType); 285571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 286571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 287571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeKeyword(unsigned char* start, unsigned char* end, SkPdfObject* obj) { 288571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, end - start, obj, kKeyword_PdfObjectType); 289571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 290571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 291571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeKeyword(unsigned char* start, size_t bytes, SkPdfObject* obj) { 292571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, bytes, obj, kKeyword_PdfObjectType); 293571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 294571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 295571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 296571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 297571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): make the functions to return SkPdfArray, move these functions in SkPdfArray 298571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeEmptyArray(SkPdfObject* obj) { 299571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 300571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 301571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = kArray_PdfObjectType; 302571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fArray = new SkTDArray<SkPdfObject*>(); 303571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // return (SkPdfArray*)obj; 304571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 305571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 306571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool appendInArray(SkPdfObject* obj) { 307571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kArray_PdfObjectType); 308571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kArray_PdfObjectType) { 309571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report err 310571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 311571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 312571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 313571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fArray->push(obj); 314571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return true; 315571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 316571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 317571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com size_t size() const { 318571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kArray_PdfObjectType); 319571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 320571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fArray->count(); 321571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 322571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 323571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* objAtAIndex(int i) { 324571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kArray_PdfObjectType); 325571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 326571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (*fArray)[i]; 327571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 328571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 329571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* removeLastInArray() { 330571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kArray_PdfObjectType); 331571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 332571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* ret = NULL; 333571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fArray->pop(&ret); 334571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 335571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ret; 336571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 337571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 338571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 339571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* objAtAIndex(int i) const { 340571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kArray_PdfObjectType); 341571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 342571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (*fArray)[i]; 343571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 344571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 345571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* operator[](int i) { 346571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kArray_PdfObjectType); 347571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 348571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (*fArray)[i]; 349571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 350571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 351571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* operator[](int i) const { 352571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kArray_PdfObjectType); 353571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 354571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (*fArray)[i]; 355571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 356571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 357571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 358571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): make the functions to return SkPdfDictionary, move these functions in SkPdfDictionary 359571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeEmptyDictionary(SkPdfObject* obj) { 360571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 361571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 362571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = kDictionary_PdfObjectType; 363571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fMap = new SkTDict<SkPdfObject*>(1); 364571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fStr.fBuffer = NULL; 365571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fStr.fBytes = 0; 366571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 367571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 368571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): get all the possible names from spec, and compute a hash function 369571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // that would create no overlaps in the same dictionary 370571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // or build a tree of chars that when followed goes to a unique id/index/hash 371571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): generate constants like kDictFoo, kNameDict_name 372571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // which will be used in code 373571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // add function SkPdfFastNameKey key(const char* key); 374571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): setting the same key twike, will make the value undefined! 375571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool set(SkPdfObject* key, SkPdfObject* value) { 376571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kDictionary_PdfObjectType); 377571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key->fObjectType == kName_PdfObjectType); 378571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 379571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (key->fObjectType != kName_PdfObjectType || fObjectType != kDictionary_PdfObjectType) { 380571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report err 381571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 382571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 383571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 384571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // we rewrite all delimiters and white spaces with '\0', so we expect the end of name to be '\0' 385571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key->fStr.fBuffer[key->fStr.fBytes] == '\0'); 386571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 387571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return set((char*)key->fStr.fBuffer, value); 388571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 389571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 390571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool set(const char* key, SkPdfObject* value) { 391571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kDictionary_PdfObjectType); 392571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 393571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kDictionary_PdfObjectType) { 394571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report err 395571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 396571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 397571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 398571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fMap->set(key, value); 399571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 400571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 401571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* get(SkPdfObject* key) { 402571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kDictionary_PdfObjectType); 403571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key->fObjectType == kName_PdfObjectType); 404571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 405571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (key->fObjectType != kName_PdfObjectType || fObjectType != kDictionary_PdfObjectType) { 406571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report err 407571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 408571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 409571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 410571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key->fStr.fBuffer[key->fStr.fBytes] == '\0'); 411571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 412571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return get((char*)key->fStr.fBuffer); 413571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 414571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 415571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* get(const char* key) { 416571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kDictionary_PdfObjectType); 417571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key); 418571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kDictionary_PdfObjectType) { 419571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report err 420571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return NULL; 421571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 422571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* ret = NULL; 423571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fMap->find(key, &ret); 424571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ret; 425571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 426571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 427571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* get(SkPdfObject* key) const { 428571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kDictionary_PdfObjectType); 429571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key->fObjectType == kName_PdfObjectType); 430571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 431571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (key->fObjectType != kName_PdfObjectType || fObjectType != kDictionary_PdfObjectType) { 432571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report err 433571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 434571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 435571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 436571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key->fStr.fBuffer[key->fStr.fBytes] == '\0'); 437571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 438571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return get((char*)key->fStr.fBuffer); 439571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 440571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 441571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 442571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* get(const char* key) const { 443571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kDictionary_PdfObjectType); 444571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(key); 445571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kDictionary_PdfObjectType) { 446571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report err 447571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return NULL; 448571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 449571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* ret = NULL; 450571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fMap->find(key, &ret); 451571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ret; 452571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 453571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 454571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* get(const char* key, const char* abr) const { 455571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* ret = get(key); 456571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): / is a valid name, and it might be an abreviation, so "" should not be like NULL 457571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // make this distiontion in generator, and remove "" from condition 458571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (ret != NULL || abr == NULL || *abr == '\0') { 459571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ret; 460571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 461571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return get(abr); 462571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 463571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 464571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* get(const char* key, const char* abr) { 465571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfObject* ret = get(key); 466571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): / is a valid name, and it might be an abreviation, so "" should not be like NULL 467571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // make this distiontion in generator, and remove "" from condition 468571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (ret != NULL || abr == NULL || *abr == '\0') { 469571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ret; 470571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 471571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return get(abr); 472571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 473571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 474571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfDictionary* asDictionary() { 475571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(isDictionary()); 476571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!isDictionary()) { 477571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return NULL; 478571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 479571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (SkPdfDictionary*) this; 480571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 481571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 482571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfDictionary* asDictionary() const { 483571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(isDictionary()); 484571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!isDictionary()) { 485571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return NULL; 486571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 487571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (SkPdfDictionary*) this; 488571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 489571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 490571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 491571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isReference() const { 492571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kReference_PdfObjectType; 493571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 494571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 495571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isBoolean() const { 496571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kBoolean_PdfObjectType; 497571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 498571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 499571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isInteger() const { 500571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kInteger_PdfObjectType; 501571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 502571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comprivate: 503571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isReal() const { 504571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kReal_PdfObjectType; 505571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 506571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.compublic: 507571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isNumber() const { 508571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kInteger_PdfObjectType || fObjectType == kReal_PdfObjectType; 509571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 510571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 511571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isKeywordReference() const { 512571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kKeyword_PdfObjectType && fStr.fBytes == 1 && fStr.fBuffer[0] == 'R'; 513571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 514571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 515571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isKeyword() const { 516571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kKeyword_PdfObjectType; 517571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 518571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 519571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isName() const { 520571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kName_PdfObjectType; 521571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 522571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 523571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isArray() const { 524571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kArray_PdfObjectType; 525571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 526571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 527571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isDate() const { 528571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kString_PdfObjectType || fObjectType == kHexString_PdfObjectType; 529571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 530571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 531571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isDictionary() const { 532571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kDictionary_PdfObjectType; 533571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 534571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 535571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isFunction() const { 536571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; // NYI 537571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 538571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 539571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isRectangle() const { 540571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kArray_PdfObjectType && fArray->count() == 4; // NYI + and elems are numbers 541571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 542571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 543571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): has stream .. or is stream ... TBD 544571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool hasStream() const { 545571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return isDictionary() && fStr.fBuffer != NULL; 546571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 547571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 548571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): has stream .. or is stream ... TBD 549571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfStream* getStream() const { 550571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return hasStream() ? (const SkPdfStream*)this : NULL; 551571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 552571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 553571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkPdfStream* getStream() { 554571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return hasStream() ? (SkPdfStream*)this : NULL; 555571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 556571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 557571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isAnyString() const { 558571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kString_PdfObjectType || fObjectType == kHexString_PdfObjectType; 559571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 560571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 561571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isMatrix() const { 562571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kArray_PdfObjectType && fArray->count() == 6; // NYI + and elems are numbers 563571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 564571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 565571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline int64_t intValue() const { 566571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kInteger_PdfObjectType); 567571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 568571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kInteger_PdfObjectType) { 569571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 570571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return 0; 571571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 572571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fIntegerValue; 573571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 574571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comprivate: 575571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline double realValue() const { 576571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kReal_PdfObjectType); 577571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 578571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kReal_PdfObjectType) { 579571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 580571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return 0; 581571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 582571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fRealValue; 583571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 584571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.compublic: 585571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline double numberValue() const { 586571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(isNumber()); 587571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 588571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!isNumber()) { 589571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 590571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return 0; 591571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 592571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fObjectType == kReal_PdfObjectType ? fRealValue : fIntegerValue; 593571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 594571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 595571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com int referenceId() const { 596571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kReference_PdfObjectType); 597571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fRef.fId; 598571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 599571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 600571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com int referenceGeneration() const { 601571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kReference_PdfObjectType); 602571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fRef.fGen; 603571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 604571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 605571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline const char* nameValue() const { 606571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kName_PdfObjectType); 607571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 608571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kName_PdfObjectType) { 609571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 610571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ""; 611571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 612571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (const char*)fStr.fBuffer; 613571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 614571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 615571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline const char* stringValue() const { 616571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kString_PdfObjectType || fObjectType == kHexString_PdfObjectType); 617571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 618571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kString_PdfObjectType && fObjectType != kHexString_PdfObjectType) { 619571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 620571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ""; 621571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 622571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (const char*)fStr.fBuffer; 623571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 624571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 625571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): nameValue2 and stringValue2 are used to make code generation easy, 626571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // but it is not a performat way to do it, since it will create an extra copy 627571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // remove these functions and make code generated faster 628571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline std::string nameValue2() const { 629571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kName_PdfObjectType); 630571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 631571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kName_PdfObjectType) { 632571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 633571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ""; 634571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 635571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (const char*)fStr.fBuffer; 636571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 637571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 638571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline std::string stringValue2() const { 639571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kString_PdfObjectType || fObjectType == kHexString_PdfObjectType); 640571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 641571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType != kString_PdfObjectType && fObjectType != kHexString_PdfObjectType) { 642571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 643571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return ""; 644571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 645571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return (const char*)fStr.fBuffer; 646571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 647571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 648571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com inline bool boolValue() const { 649571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(fObjectType == kBoolean_PdfObjectType); 650571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 651571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (fObjectType == kBoolean_PdfObjectType) { 652571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): log err 653571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 654571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 655571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return fBooleanValue; 656571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 657571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 658571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkRect rectangleValue() const { 659571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(isRectangle()); 660571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!isRectangle()) { 661571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return SkRect::MakeEmpty(); 662571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 663571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 664571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com double array[4]; 665571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com for (int i = 0; i < 4; i++) { 666571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): version where we could resolve references? 667571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* elem = objAtAIndex(i); 668571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (elem == NULL || !elem->isNumber()) { 669571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report error 670571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return SkRect::MakeEmpty(); 671571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 672571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com array[i] = elem->numberValue(); 673571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 674571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 675571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return SkRect::MakeLTRB(SkDoubleToScalar(array[0]), 676571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkDoubleToScalar(array[1]), 677571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkDoubleToScalar(array[2]), 678571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkDoubleToScalar(array[3])); 679571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 680571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 681571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkMatrix matrixValue() const { 682571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(isMatrix()); 683571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!isMatrix()) { 684571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return SkMatrix::I(); 685571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 686571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 687571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com double array[6]; 688571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com for (int i = 0; i < 6; i++) { 689571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): version where we could resolve references? 690571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com const SkPdfObject* elem = objAtAIndex(i); 691571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (elem == NULL || !elem->isNumber()) { 692571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): report error 693571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return SkMatrix::I(); 694571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 695571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com array[i] = elem->numberValue(); 696571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 697571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 698571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return SkMatrixFromPdfMatrix(array); 699571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 700571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 701571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool filterStream(SkPdfAllocator* allocator); 702571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 703571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 704571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool GetFilteredStreamRef(unsigned char** buffer, size_t* len, SkPdfAllocator* allocator) { 705571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): add params that couls let the last filter in place if it is jpeg or png to fast load images 706571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!hasStream()) { 707571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 708571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 709571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 710571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com filterStream(allocator); 711571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 712571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (buffer) { 713571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com *buffer = fStr.fBuffer; 714571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 715571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 716571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (len) { 717571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com *len = fStr.fBytes >> 1; // last bit 718571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 719571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 720571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return true; 721571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 722571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 723571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool isStreamFiltered() const { 724571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return hasStream() && ((fStr.fBytes & 1) == kFilteredStreamBit); 725571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 726571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 727571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool GetUnfilteredStreamRef(unsigned char** buffer, size_t* len) const { 728571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (isStreamFiltered()) { 729571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 730571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 731571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 732571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!hasStream()) { 733571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 734571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 735571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 736571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (buffer) { 737571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com *buffer = fStr.fBuffer; 738571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 739571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 740571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (len) { 741571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com *len = fStr.fBytes >> 1; // remove slast bit 742571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 743571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 744571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return true; 745571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 746571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 747571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool addStream(unsigned char* buffer, size_t len) { 748571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(!hasStream()); 749571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(isDictionary()); 750571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 751571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (!isDictionary() || hasStream()) { 752571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return false; 753571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 754571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 755571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fStr.fBuffer = buffer; 756571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com fStr.fBytes = (len << 2) + kUnfilteredStreamBit; 757571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 758571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return true; 759571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 760571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 761571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkString toString() { 762571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkString str; 763571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com switch (fObjectType) { 764571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kInvalid_PdfObjectType: 765571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append("Invalid"); 766571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 767571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 768571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kBoolean_PdfObjectType: 769571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("Boolean: %s", fBooleanValue ? "true" : "false"); 770571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 771571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 772571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kInteger_PdfObjectType: 773571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("Integer: %i", (int)fIntegerValue); 774571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 775571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 776571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kReal_PdfObjectType: 777571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("Real: %f", fRealValue); 778571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 779571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 780571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kString_PdfObjectType: 781571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("String, len() = %u: ", (unsigned int)fStr.fBytes); 782571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append((const char*)fStr.fBuffer, fStr.fBytes); 783571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 784571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 785571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kHexString_PdfObjectType: 786571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("HexString, len() = %u: ", (unsigned int)fStr.fBytes); 787571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append((const char*)fStr.fBuffer, fStr.fBytes); 788571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 789571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 790571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kName_PdfObjectType: 791571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("Name, len() = %u: ", (unsigned int)fStr.fBytes); 792571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append((const char*)fStr.fBuffer, fStr.fBytes); 793571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 794571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 795571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kKeyword_PdfObjectType: 796571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("Keyword, len() = %u: ", (unsigned int)fStr.fBytes); 797571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append((const char*)fStr.fBuffer, fStr.fBytes); 798571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 799571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 800571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kArray_PdfObjectType: 801571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append("Array, size() = %i [", size()); 802571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com for (unsigned int i = 0; i < size(); i++) { 803571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append(objAtAIndex(i)->toString()); 804571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 805571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append("]"); 806571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 807571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 808571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kDictionary_PdfObjectType: 809571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com // TODO(edisonn): NYI 810571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append("Dictionary: NYI"); 811571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com if (hasStream()) { 812571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.append(" HAS_STREAM"); 813571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 814571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 815571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 816571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kNull_PdfObjectType: 817571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str = "NULL"; 818571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 819571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 820571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kReference_PdfObjectType: 821571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str.appendf("Reference: %i %i", fRef.fId, fRef.fGen); 822571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 823571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 824571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com case kUndefined_PdfObjectType: 825571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str = "Undefined"; 826571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 827571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 828571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com default: 829571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com str = "Internal Error Object Type"; 830571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com break; 831571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 832571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 833571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com return str; 834571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 835571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 836571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comprivate: 837571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeStringCore(unsigned char* start, SkPdfObject* obj, ObjectType type) { 838571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, strlen((const char*)start), obj, type); 839571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 840571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 841571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeStringCore(unsigned char* start, unsigned char* end, SkPdfObject* obj, ObjectType type) { 842571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com makeStringCore(start, end - start, obj, type); 843571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 844571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 845571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com static void makeStringCore(unsigned char* start, size_t bytes, SkPdfObject* obj, ObjectType type) { 846571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com SkASSERT(obj->fObjectType == kInvalid_PdfObjectType); 847571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 848571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fObjectType = type; 849571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fStr.fBuffer = start; 850571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com obj->fStr.fBytes = bytes; 851571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com } 852571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 853571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool applyFilter(const char* name, SkPdfAllocator* allocator); 854571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool applyFlateDecodeFilter(SkPdfAllocator* allocator); 855571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com bool applyDCTDecodeFilter(SkPdfAllocator* allocator); 856571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com}; 857571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 858571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfStream : public SkPdfObject {}; 859571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfArray : public SkPdfObject {}; 860571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfString : public SkPdfObject {}; 861571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfHexString : public SkPdfObject {}; 862571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfInteger : public SkPdfObject {}; 863571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfReal : public SkPdfObject {}; 864571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.comclass SkPdfNumber : public SkPdfObject {}; 865571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com 866571c70b95f56e22b5a7d6f4f288aa6c9a925a64fedisonn@google.com#endif // EXPERIMENTAL_PDFVIEWER_PDFPARSER_NATIVE_SKPDFOBJECT_H_ 867