Index: experimental/PdfViewer/pdfparser/podofo/SkPodofoUtils.cpp |
=================================================================== |
--- experimental/PdfViewer/pdfparser/podofo/SkPodofoUtils.cpp (revision 9961) |
+++ experimental/PdfViewer/pdfparser/podofo/SkPodofoUtils.cpp (working copy) |
@@ -1,414 +0,0 @@ |
- |
-#include "SkPodofoUtils.h" |
-#include "SkMatrix.h" |
-#include "SkPdfHeaders_autogen.h" |
-#include "SkPdfMapper_autogen.h" |
- |
-#include "podofo.h" |
- |
-const PoDoFo::PdfObject* resolveReferenceObject(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfObject* obj, |
- bool resolveOneElementArrays) { |
- while (obj && (obj->IsReference() || (resolveOneElementArrays && |
- obj->IsArray() && |
- obj->GetArray().GetSize() == 1))) { |
- if (obj->IsReference()) { |
- // We need to force the non const, the only update we will do is for recurssion checks. |
- PoDoFo::PdfReference& ref = (PoDoFo::PdfReference&)obj->GetReference(); |
- obj = pdfDoc->podofo()->GetObjects().GetObject(ref); |
- } else { |
- obj = &obj->GetArray()[0]; |
- } |
- } |
- |
- return obj; |
-} |
- |
-// TODO(edisonn): deal with synonyms (/BPC == /BitsPerComponent), here or in GetKey? |
-// Always pass long form in key, and have a map of long -> short key |
-bool LongFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- long* data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key))); |
- |
- if (value == NULL || !value->IsNumber()) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- |
- *data = value->GetNumber(); |
- return true; |
-} |
- |
-bool LongFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- long* data) { |
- if (LongFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return LongFromDictionary(pdfDoc, dict, abr, data); |
-} |
- |
-bool DoubleFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- double* data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key))); |
- |
- if (value == NULL || (!value->IsReal() && !value->IsNumber())) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- |
- *data = value->GetReal(); |
- return true; |
-} |
- |
-bool DoubleFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- double* data) { |
- if (DoubleFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return DoubleFromDictionary(pdfDoc, dict, abr, data); |
-} |
- |
- |
-bool BoolFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- bool* data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key))); |
- |
- if (value == NULL || !value->IsBool()) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- |
- *data = value->GetBool(); |
- return true; |
-} |
- |
-bool BoolFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- bool* data) { |
- if (BoolFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return BoolFromDictionary(pdfDoc, dict, abr, data); |
-} |
- |
-bool NameFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- std::string* data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key)), |
- true); |
- if (value == NULL || !value->IsName()) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- |
- *data = value->GetName().GetName(); |
- return true; |
-} |
- |
-bool NameFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- std::string* data) { |
- if (NameFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return NameFromDictionary(pdfDoc, dict, abr, data); |
-} |
- |
-bool StringFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- std::string* data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key)), |
- true); |
- if (value == NULL || (!value->IsString() && !value->IsHexString())) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- |
- *data = value->GetString().GetString(); |
- return true; |
-} |
- |
-bool StringFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- std::string* data) { |
- if (StringFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return StringFromDictionary(pdfDoc, dict, abr, data); |
-} |
- |
- |
-bool SkMatrixFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- SkMatrix** matrix) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key))); |
- |
- if (value == NULL || !value->IsArray()) { |
- return false; |
- } |
- |
- if (value->GetArray().GetSize() != 6) { |
- return false; |
- } |
- |
- double array[6]; |
- for (int i = 0; i < 6; i++) { |
- const PoDoFo::PdfObject* elem = resolveReferenceObject(pdfDoc, &value->GetArray()[i]); |
- if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) { |
- return false; |
- } |
- array[i] = elem->GetReal(); |
- } |
- |
- *matrix = new SkMatrix(); |
- **matrix = SkMatrixFromPdfMatrix(array); |
- return true; |
-} |
- |
-bool SkMatrixFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkMatrix** data) { |
- if (SkMatrixFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return SkMatrixFromDictionary(pdfDoc, dict, abr, data); |
- |
-} |
- |
-bool SkRectFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- SkRect** rect) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key))); |
- |
- if (value == NULL || !value->IsArray()) { |
- return false; |
- } |
- |
- if (value->GetArray().GetSize() != 4) { |
- return false; |
- } |
- |
- double array[4]; |
- for (int i = 0; i < 4; i++) { |
- const PoDoFo::PdfObject* elem = resolveReferenceObject(pdfDoc, &value->GetArray()[i]); |
- if (elem == NULL || (!elem->IsReal() && !elem->IsNumber())) { |
- return false; |
- } |
- array[i] = elem->GetReal(); |
- } |
- |
- *rect = new SkRect(); |
- **rect = SkRect::MakeLTRB(SkDoubleToScalar(array[0]), |
- SkDoubleToScalar(array[1]), |
- SkDoubleToScalar(array[2]), |
- SkDoubleToScalar(array[3])); |
- return true; |
-} |
- |
-bool SkRectFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkRect** data) { |
- if (SkRectFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return SkRectFromDictionary(pdfDoc, dict, abr, data); |
- |
-} |
- |
- |
-SkPdfObject* get(const SkPdfObject* obj, const char* key, const char* abr = "") { |
- PoDoFo::PdfObject* podofoObj = NULL; |
- if (obj == NULL) return NULL; |
- const SkPdfDictionary* dict = obj->asDictionary(); |
- if (dict == NULL) return NULL; |
- if (!dict->podofo()->IsDictionary()) return NULL; |
- ObjectFromDictionary(dict->doc(), dict->podofo()->GetDictionary(), key, abr, &podofoObj); |
- SkPdfObject* ret = NULL; |
- obj->doc()->mapper()->mapObject(podofoObj, &ret); |
- return ret; |
-} |
- |
-bool ArrayFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfArray* data) {return false;} |
- |
-bool FileSpecFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfFileSpec* data) {return false;} |
- |
-bool StreamFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfStream** data); |
- |
-bool TreeFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfTree** data) {return false;} |
- |
-bool DateFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfDate* data) {return false;} |
- |
-bool FunctionFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfFunction* data) {return false;} |
- |
- |
- |
- |
-bool ArrayFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- SkPdfArray** data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key)), |
- true); |
- if (value == NULL || !value->IsArray()) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- |
- return pdfDoc->mapper()->mapArray(value, data); |
-} |
- |
- |
-bool ArrayFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfArray** data) { |
- if (ArrayFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return ArrayFromDictionary(pdfDoc, dict, abr, data); |
-} |
- |
-/* |
-bool DictionaryFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- SkPoDoFo::PdfDictionary** data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key)), |
- true); |
- if (value == NULL || !value->IsDictionary()) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- |
- return pdfDoc->mapper()->mapDictionary(value, data); |
-} |
- |
-bool DictionaryFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPoDoFo::PdfDictionary** data) { |
- if (DictionaryFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return DictionaryFromDictionary(pdfDoc, dict, abr, data); |
-} |
-*/ |
- |
-bool ObjectFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- PoDoFo::PdfObject** data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key)), |
- true); |
- if (value == NULL) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- *data = (PoDoFo::PdfObject*)value; |
- return true; |
-} |
- |
-bool ObjectFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- PoDoFo::PdfObject** data) { |
- if (ObjectFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return ObjectFromDictionary(pdfDoc, dict, abr, data); |
-} |
- |
-bool StreamFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- SkPdfStream** data) { |
- const PoDoFo::PdfObject* value = resolveReferenceObject(pdfDoc, |
- dict.GetKey(PoDoFo::PdfName(key)), |
- true); |
- if (value == NULL) { |
- return false; |
- } |
- if (data == NULL) { |
- return true; |
- } |
- return pdfDoc->mapper()->mapStream(value, data); |
-} |
- |
-bool StreamFromDictionary(const SkPodofoParsedPDF* pdfDoc, |
- const PoDoFo::PdfDictionary& dict, |
- const char* key, |
- const char* abr, |
- SkPdfStream** data) { |
- if (StreamFromDictionary(pdfDoc, dict, key, data)) return true; |
- if (abr == NULL || *abr == '\0') return false; |
- return StreamFromDictionary(pdfDoc, dict, abr, data); |
-} |