Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1778)

Unified Diff: experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h

Issue 23020003: pdfviewer: debug code for drawText (show magenta background for text, to show text even when we fai… (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h
===================================================================
--- experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h (revision 10543)
+++ experimental/PdfViewer/pdfparser/native/SkPdfNativeObject.h (working copy)
@@ -12,7 +12,10 @@
#include "SkPdfNYI.h"
#include "SkPdfConfig.h"
+#include "SkPdfUtils.h"
+#include "SkPdfNativeTokenizer.h"
+
class SkPdfDictionary;
class SkPdfStream;
class SkPdfAllocator;
@@ -25,7 +28,7 @@
#define kUnfilteredStreamBit 1
#define kOwnedStreamBit 2
-class SkPdfObject {
+class SkPdfNativeObject {
public:
enum ObjectType {
kInvalid_PdfObjectType,
@@ -78,10 +81,10 @@
NotOwnedString fStr;
// TODO(edisonn): make sure the foorprint of fArray and fMap is small, otherwise, use pointers, or classes with up to 8 bytes in footprint
- SkTDArray<SkPdfObject*>* fArray;
+ SkTDArray<SkPdfNativeObject*>* fArray;
Reference fRef;
};
- SkTDict<SkPdfObject*>* fMap;
+ SkTDict<SkPdfNativeObject*>* fMap;
// TODO(edisonn): rename data with cache
void* fData;
@@ -90,7 +93,7 @@
public:
- SkPdfObject() : fObjectType(kInvalid_PdfObjectType), fMap(NULL), fData(NULL), fDataType(kEmpty_Data) {}
+ SkPdfNativeObject() : fObjectType(kInvalid_PdfObjectType), fMap(NULL), fData(NULL), fDataType(kEmpty_Data) {}
inline bool hasData(DataType type) {
@@ -109,7 +112,7 @@
void releaseData();
-// ~SkPdfObject() {
+// ~SkPdfNativeObject() {
// //reset(); must be called manually!
// }
@@ -190,49 +193,49 @@
return nyi;
}
- static void makeBoolean(bool value, SkPdfObject* obj) {
+ static void makeBoolean(bool value, SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = kBoolean_PdfObjectType;
obj->fBooleanValue = value;
}
- static SkPdfObject makeBoolean(bool value) {
- SkPdfObject obj;
+ static SkPdfNativeObject makeBoolean(bool value) {
+ SkPdfNativeObject obj;
obj.fObjectType = kBoolean_PdfObjectType;
obj.fBooleanValue = value;
return obj;
}
- static void makeInteger(int64_t value, SkPdfObject* obj) {
+ static void makeInteger(int64_t value, SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = kInteger_PdfObjectType;
obj->fIntegerValue = value;
}
- static void makeReal(double value, SkPdfObject* obj) {
+ static void makeReal(double value, SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = kReal_PdfObjectType;
obj->fRealValue = value;
}
- static void makeNull(SkPdfObject* obj) {
+ static void makeNull(SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = kNull_PdfObjectType;
}
- static SkPdfObject makeNull() {
- SkPdfObject obj;
+ static SkPdfNativeObject makeNull() {
+ SkPdfNativeObject obj;
obj.fObjectType = kNull_PdfObjectType;
return obj;
}
- static SkPdfObject kNull;
+ static SkPdfNativeObject kNull;
- static void makeNumeric(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
+ static void makeNumeric(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
// TODO(edisonn): NYI properly
@@ -252,7 +255,7 @@
}
}
- static void makeReference(unsigned int id, unsigned int gen, SkPdfObject* obj) {
+ static void makeReference(unsigned int id, unsigned int gen, SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = kReference_PdfObjectType;
@@ -261,69 +264,69 @@
}
- static void makeString(const unsigned char* start, SkPdfObject* obj) {
+ static void makeString(const unsigned char* start, SkPdfNativeObject* obj) {
makeStringCore(start, strlen((const char*)start), obj, kString_PdfObjectType);
}
- static void makeString(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
+ static void makeString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
makeStringCore(start, end - start, obj, kString_PdfObjectType);
}
- static void makeString(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
+ static void makeString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
makeStringCore(start, bytes, obj, kString_PdfObjectType);
}
- static void makeHexString(const unsigned char* start, SkPdfObject* obj) {
+ static void makeHexString(const unsigned char* start, SkPdfNativeObject* obj) {
makeStringCore(start, strlen((const char*)start), obj, kHexString_PdfObjectType);
}
- static void makeHexString(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
+ static void makeHexString(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
makeStringCore(start, end - start, obj, kHexString_PdfObjectType);
}
- static void makeHexString(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
+ static void makeHexString(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
makeStringCore(start, bytes, obj, kHexString_PdfObjectType);
}
- static void makeName(const unsigned char* start, SkPdfObject* obj) {
+ static void makeName(const unsigned char* start, SkPdfNativeObject* obj) {
makeStringCore(start, strlen((const char*)start), obj, kName_PdfObjectType);
}
- static void makeName(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
+ static void makeName(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
makeStringCore(start, end - start, obj, kName_PdfObjectType);
}
- static void makeName(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
+ static void makeName(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
makeStringCore(start, bytes, obj, kName_PdfObjectType);
}
- static void makeKeyword(const unsigned char* start, SkPdfObject* obj) {
+ static void makeKeyword(const unsigned char* start, SkPdfNativeObject* obj) {
makeStringCore(start, strlen((const char*)start), obj, kKeyword_PdfObjectType);
}
- static void makeKeyword(const unsigned char* start, const unsigned char* end, SkPdfObject* obj) {
+ static void makeKeyword(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj) {
makeStringCore(start, end - start, obj, kKeyword_PdfObjectType);
}
- static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfObject* obj) {
+ static void makeKeyword(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj) {
makeStringCore(start, bytes, obj, kKeyword_PdfObjectType);
}
// TODO(edisonn): make the functions to return SkPdfArray, move these functions in SkPdfArray
- static void makeEmptyArray(SkPdfObject* obj) {
+ static void makeEmptyArray(SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = kArray_PdfObjectType;
- obj->fArray = new SkTDArray<SkPdfObject*>();
+ obj->fArray = new SkTDArray<SkPdfNativeObject*>();
// return (SkPdfArray*)obj;
}
- bool appendInArray(SkPdfObject* obj) {
+ bool appendInArray(SkPdfNativeObject* obj) {
SkASSERT(fObjectType == kArray_PdfObjectType);
if (fObjectType != kArray_PdfObjectType) {
// TODO(edisonn): report err
@@ -340,35 +343,35 @@
return fArray->count();
}
- SkPdfObject* objAtAIndex(int i) {
+ SkPdfNativeObject* objAtAIndex(int i) {
SkASSERT(fObjectType == kArray_PdfObjectType);
return (*fArray)[i];
}
- SkPdfObject* removeLastInArray() {
+ SkPdfNativeObject* removeLastInArray() {
SkASSERT(fObjectType == kArray_PdfObjectType);
- SkPdfObject* ret = NULL;
+ SkPdfNativeObject* ret = NULL;
fArray->pop(&ret);
return ret;
}
- const SkPdfObject* objAtAIndex(int i) const {
+ const SkPdfNativeObject* objAtAIndex(int i) const {
SkASSERT(fObjectType == kArray_PdfObjectType);
return (*fArray)[i];
}
- SkPdfObject* operator[](int i) {
+ SkPdfNativeObject* operator[](int i) {
SkASSERT(fObjectType == kArray_PdfObjectType);
return (*fArray)[i];
}
- const SkPdfObject* operator[](int i) const {
+ const SkPdfNativeObject* operator[](int i) const {
SkASSERT(fObjectType == kArray_PdfObjectType);
return (*fArray)[i];
@@ -376,11 +379,11 @@
// TODO(edisonn): make the functions to return SkPdfDictionary, move these functions in SkPdfDictionary
- static void makeEmptyDictionary(SkPdfObject* obj) {
+ static void makeEmptyDictionary(SkPdfNativeObject* obj) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = kDictionary_PdfObjectType;
- obj->fMap = new SkTDict<SkPdfObject*>(1);
+ obj->fMap = new SkTDict<SkPdfNativeObject*>(1);
obj->fStr.fBuffer = NULL;
obj->fStr.fBytes = 0;
}
@@ -392,7 +395,7 @@
// which will be used in code
// add function SkPdfFastNameKey key(const char* key);
// TODO(edisonn): setting the same key twike, will make the value undefined!
- bool set(const SkPdfObject* key, SkPdfObject* value) {
+ bool set(const SkPdfNativeObject* key, SkPdfNativeObject* value) {
SkASSERT(fObjectType == kDictionary_PdfObjectType);
SkASSERT(key->fObjectType == kName_PdfObjectType);
@@ -407,11 +410,11 @@
return set(key->fStr.fBuffer, key->fStr.fBytes, value);
}
- bool set(const char* key, SkPdfObject* value) {
+ bool set(const char* key, SkPdfNativeObject* value) {
return set((const unsigned char*)key, strlen(key), value);
}
- bool set(const unsigned char* key, size_t len, SkPdfObject* value) {
+ bool set(const unsigned char* key, size_t len, SkPdfNativeObject* value) {
SkASSERT(fObjectType == kDictionary_PdfObjectType);
if (fObjectType != kDictionary_PdfObjectType) {
@@ -422,7 +425,7 @@
return fMap->set((const char*)key, len, value);
}
- SkPdfObject* get(const SkPdfObject* key) {
+ SkPdfNativeObject* get(const SkPdfNativeObject* key) {
SkASSERT(fObjectType == kDictionary_PdfObjectType);
SkASSERT(key->fObjectType == kName_PdfObjectType);
@@ -436,18 +439,18 @@
return get(key->fStr.fBuffer, key->fStr.fBytes);
}
- SkPdfObject* get(const char* key) {
+ SkPdfNativeObject* get(const char* key) {
return get((const unsigned char*)key, strlen(key));
}
- SkPdfObject* get(const unsigned char* key, size_t len) {
+ SkPdfNativeObject* get(const unsigned char* key, size_t len) {
SkASSERT(fObjectType == kDictionary_PdfObjectType);
SkASSERT(key);
if (fObjectType != kDictionary_PdfObjectType) {
// TODO(edisonn): report err
return NULL;
}
- SkPdfObject* ret = NULL;
+ SkPdfNativeObject* ret = NULL;
fMap->find((const char*)key, len, &ret);
#ifdef PDF_TRACE
@@ -459,7 +462,7 @@
return ret;
}
- const SkPdfObject* get(const SkPdfObject* key) const {
+ const SkPdfNativeObject* get(const SkPdfNativeObject* key) const {
SkASSERT(fObjectType == kDictionary_PdfObjectType);
SkASSERT(key->fObjectType == kName_PdfObjectType);
@@ -473,18 +476,18 @@
return get(key->fStr.fBuffer, key->fStr.fBytes);
}
- const SkPdfObject* get(const char* key) const {
+ const SkPdfNativeObject* get(const char* key) const {
return get((const unsigned char*)key, strlen(key));
}
- const SkPdfObject* get(const unsigned char* key, size_t len) const {
+ const SkPdfNativeObject* get(const unsigned char* key, size_t len) const {
SkASSERT(fObjectType == kDictionary_PdfObjectType);
SkASSERT(key);
if (fObjectType != kDictionary_PdfObjectType) {
// TODO(edisonn): report err
return NULL;
}
- SkPdfObject* ret = NULL;
+ SkPdfNativeObject* ret = NULL;
fMap->find((const char*)key, len, &ret);
#ifdef PDF_TRACE
@@ -496,8 +499,8 @@
return ret;
}
- const SkPdfObject* get(const char* key, const char* abr) const {
- const SkPdfObject* ret = get(key);
+ const SkPdfNativeObject* get(const char* key, const char* abr) const {
+ const SkPdfNativeObject* ret = get(key);
// TODO(edisonn): / is a valid name, and it might be an abreviation, so "" should not be like NULL
// make this distiontion in generator, and remove "" from condition
if (ret != NULL || abr == NULL || *abr == '\0') {
@@ -506,8 +509,8 @@
return get(abr);
}
- SkPdfObject* get(const char* key, const char* abr) {
- SkPdfObject* ret = get(key);
+ SkPdfNativeObject* get(const char* key, const char* abr) {
+ SkPdfNativeObject* ret = get(key);
// TODO(edisonn): / is a valid name, and it might be an abreviation, so "" should not be like NULL
// make this distiontion in generator, and remove "" from condition
if (ret != NULL || abr == NULL || *abr == '\0') {
@@ -758,7 +761,7 @@
double array[4];
for (int i = 0; i < 4; i++) {
// TODO(edisonn): version where we could resolve references?
- const SkPdfObject* elem = objAtAIndex(i);
+ const SkPdfNativeObject* elem = objAtAIndex(i);
if (elem == NULL || !elem->isNumber()) {
// TODO(edisonn): report error
return SkRect::MakeEmpty();
@@ -781,7 +784,7 @@
double array[6];
for (int i = 0; i < 6; i++) {
// TODO(edisonn): version where we could resolve references?
- const SkPdfObject* elem = objAtAIndex(i);
+ const SkPdfNativeObject* elem = objAtAIndex(i);
if (elem == NULL || !elem->isNumber()) {
// TODO(edisonn): report error
return SkMatrix::I();
@@ -862,6 +865,29 @@
}
}
+ static void append(SkString* str, const char* data, size_t len, const char* prefix = "\\x") {
+ for (unsigned int i = 0 ; i < len; i++) {
+ if (data[i] == kNUL_PdfWhiteSpace) {
+ str->append(prefix);
+ str->append("00");
+ } else if (data[i] == kHT_PdfWhiteSpace) {
+ str->append(prefix);
+ str->append("09");
+ } else if (data[i] == kLF_PdfWhiteSpace) {
+ str->append(prefix);
+ str->append("0A");
+ } else if (data[i] == kFF_PdfWhiteSpace) {
+ str->append(prefix);
+ str->append("0C");
+ } else if (data[i] == kCR_PdfWhiteSpace) {
+ str->append(prefix);
+ str->append("0D");
+ } else {
+ str->append(data + i, 1);
+ }
+ }
+ }
+
SkString toString(int firstRowLevel = 0, int level = 0) {
SkString str;
appendSpaces(&str, firstRowLevel);
@@ -884,7 +910,7 @@
case kString_PdfObjectType:
str.append("\"");
- str.append((const char*)fStr.fBuffer, fStr.fBytes);
+ append(&str, (const char*)fStr.fBuffer, fStr.fBytes);
str.append("\"");
break;
@@ -898,11 +924,11 @@
case kName_PdfObjectType:
str.append("/");
- str.append((const char*)fStr.fBuffer, fStr.fBytes);
+ append(&str, (const char*)fStr.fBuffer, fStr.fBytes, "#");
break;
case kKeyword_PdfObjectType:
- str.append((const char*)fStr.fBuffer, fStr.fBytes);
+ append(&str, (const char*)fStr.fBuffer, fStr.fBytes);
break;
case kArray_PdfObjectType:
@@ -919,8 +945,8 @@
break;
case kDictionary_PdfObjectType: {
- SkTDict<SkPdfObject*>::Iter iter(*fMap);
- SkPdfObject* obj = NULL;
+ SkTDict<SkPdfNativeObject*>::Iter iter(*fMap);
+ SkPdfNativeObject* obj = NULL;
const char* key = NULL;
str.append("<<\n");
while ((key = iter.next(&obj)) != NULL) {
@@ -934,7 +960,7 @@
size_t length = 0;
if (GetFilteredStreamRef(&stream, &length)) {
str.append("stream\n");
- str.append((const char*)stream, length > 256 ? 256 : length);
+ append(&str, (const char*)stream, length > 256 ? 256 : length);
str.append("\nendstream");
} else {
str.append("stream STREAM_ERROR endstream");
@@ -964,15 +990,15 @@
}
private:
- static void makeStringCore(const unsigned char* start, SkPdfObject* obj, ObjectType type) {
+ static void makeStringCore(const unsigned char* start, SkPdfNativeObject* obj, ObjectType type) {
makeStringCore(start, strlen((const char*)start), obj, type);
}
- static void makeStringCore(const unsigned char* start, const unsigned char* end, SkPdfObject* obj, ObjectType type) {
+ static void makeStringCore(const unsigned char* start, const unsigned char* end, SkPdfNativeObject* obj, ObjectType type) {
makeStringCore(start, end - start, obj, type);
}
- static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfObject* obj, ObjectType type) {
+ static void makeStringCore(const unsigned char* start, size_t bytes, SkPdfNativeObject* obj, ObjectType type) {
SkASSERT(obj->fObjectType == kInvalid_PdfObjectType);
obj->fObjectType = type;
@@ -985,20 +1011,20 @@
bool applyDCTDecodeFilter();
};
-class SkPdfStream : public SkPdfObject {};
-class SkPdfArray : public SkPdfObject {};
-class SkPdfString : public SkPdfObject {};
-class SkPdfHexString : public SkPdfObject {};
-class SkPdfInteger : public SkPdfObject {};
-class SkPdfReal : public SkPdfObject {};
-class SkPdfNumber : public SkPdfObject {};
+class SkPdfStream : public SkPdfNativeObject {};
+class SkPdfArray : public SkPdfNativeObject {};
+class SkPdfString : public SkPdfNativeObject {};
+class SkPdfHexString : public SkPdfNativeObject {};
+class SkPdfInteger : public SkPdfNativeObject {};
+class SkPdfReal : public SkPdfNativeObject {};
+class SkPdfNumber : public SkPdfNativeObject {};
-class SkPdfName : public SkPdfObject {
- SkPdfName() : SkPdfObject() {
- SkPdfObject::makeName((const unsigned char*)"", this);
+class SkPdfName : public SkPdfNativeObject {
+ SkPdfName() : SkPdfNativeObject() {
+ SkPdfNativeObject::makeName((const unsigned char*)"", this);
}
public:
- SkPdfName(char* name) : SkPdfObject() {
+ SkPdfName(char* name) : SkPdfNativeObject() {
this->makeName((const unsigned char*)name, this);
}
};

Powered by Google App Engine
This is Rietveld 408576698