Commit 1d88955fa68fb7fb0fd2d705bc80655edb7a5972
1 parent
a844c2a3
Added new QPDFObjectHandle types Keyword and InlineImage
These object types are to facilitate content stream parsing.
Showing
9 changed files
with
178 additions
and
3 deletions
ChangeLog
| 1 | +2013-01-20 Jay Berkenbilt <ejb@ql.org> | |
| 2 | + | |
| 3 | + * Added QPDF_Keyword and QPDF_InlineImage types along with | |
| 4 | + appropriate wrapper methods in QPDFObjectHandle. These new object | |
| 5 | + types are to facilitate content stream parsing. | |
| 6 | + | |
| 1 | 7 | 2013-01-17 Jay Berkenbilt <ejb@ql.org> |
| 2 | 8 | |
| 3 | 9 | * 4.0.1: release | ... | ... |
TODO
include/qpdf/QPDFObjectHandle.hh
| ... | ... | @@ -76,7 +76,8 @@ class QPDFObjectHandle |
| 76 | 76 | QPDF_DLL |
| 77 | 77 | bool isInitialized() const; |
| 78 | 78 | |
| 79 | - // Exactly one of these will return true for any object. | |
| 79 | + // Exactly one of these will return true for any object. Keyword | |
| 80 | + // and InlineImage are only allowed in content streams. | |
| 80 | 81 | QPDF_DLL |
| 81 | 82 | bool isBool(); |
| 82 | 83 | QPDF_DLL |
| ... | ... | @@ -90,6 +91,10 @@ class QPDFObjectHandle |
| 90 | 91 | QPDF_DLL |
| 91 | 92 | bool isString(); |
| 92 | 93 | QPDF_DLL |
| 94 | + bool isKeyword(); | |
| 95 | + QPDF_DLL | |
| 96 | + bool isInlineImage(); | |
| 97 | + QPDF_DLL | |
| 93 | 98 | bool isArray(); |
| 94 | 99 | QPDF_DLL |
| 95 | 100 | bool isDictionary(); |
| ... | ... | @@ -103,7 +108,8 @@ class QPDFObjectHandle |
| 103 | 108 | QPDF_DLL |
| 104 | 109 | bool isIndirect(); |
| 105 | 110 | |
| 106 | - // True for everything except array, dictionary, and stream | |
| 111 | + // True for everything except array, dictionary, stream, word, and | |
| 112 | + // inline image. | |
| 107 | 113 | QPDF_DLL |
| 108 | 114 | bool isScalar(); |
| 109 | 115 | |
| ... | ... | @@ -148,6 +154,10 @@ class QPDFObjectHandle |
| 148 | 154 | QPDF_DLL |
| 149 | 155 | static QPDFObjectHandle newString(std::string const& str); |
| 150 | 156 | QPDF_DLL |
| 157 | + static QPDFObjectHandle newKeyword(std::string const&); | |
| 158 | + QPDF_DLL | |
| 159 | + static QPDFObjectHandle newInlineImage(std::string const&); | |
| 160 | + QPDF_DLL | |
| 151 | 161 | static QPDFObjectHandle newArray(); |
| 152 | 162 | QPDF_DLL |
| 153 | 163 | static QPDFObjectHandle newArray( |
| ... | ... | @@ -239,6 +249,12 @@ class QPDFObjectHandle |
| 239 | 249 | QPDF_DLL |
| 240 | 250 | std::string getUTF8Value(); |
| 241 | 251 | |
| 252 | + // Methods for content stream objects | |
| 253 | + QPDF_DLL | |
| 254 | + std::string getKeywordValue(); | |
| 255 | + QPDF_DLL | |
| 256 | + std::string getInlineImageValue(); | |
| 257 | + | |
| 242 | 258 | // Methods for array objects; see also name and array objects |
| 243 | 259 | QPDF_DLL |
| 244 | 260 | int getArrayNItems(); |
| ... | ... | @@ -510,6 +526,10 @@ class QPDFObjectHandle |
| 510 | 526 | QPDF_DLL |
| 511 | 527 | void assertString(); |
| 512 | 528 | QPDF_DLL |
| 529 | + void assertKeyword(); | |
| 530 | + QPDF_DLL | |
| 531 | + void assertInlineImage(); | |
| 532 | + QPDF_DLL | |
| 513 | 533 | void assertArray(); |
| 514 | 534 | QPDF_DLL |
| 515 | 535 | void assertDictionary(); | ... | ... |
libqpdf/QPDFObjectHandle.cc
| ... | ... | @@ -7,6 +7,8 @@ |
| 7 | 7 | #include <qpdf/QPDF_Real.hh> |
| 8 | 8 | #include <qpdf/QPDF_Name.hh> |
| 9 | 9 | #include <qpdf/QPDF_String.hh> |
| 10 | +#include <qpdf/QPDF_Keyword.hh> | |
| 11 | +#include <qpdf/QPDF_InlineImage.hh> | |
| 10 | 12 | #include <qpdf/QPDF_Array.hh> |
| 11 | 13 | #include <qpdf/QPDF_Dictionary.hh> |
| 12 | 14 | #include <qpdf/QPDF_Stream.hh> |
| ... | ... | @@ -152,6 +154,20 @@ QPDFObjectHandle::isString() |
| 152 | 154 | } |
| 153 | 155 | |
| 154 | 156 | bool |
| 157 | +QPDFObjectHandle::isKeyword() | |
| 158 | +{ | |
| 159 | + dereference(); | |
| 160 | + return QPDFObjectTypeAccessor<QPDF_Keyword>::check(obj.getPointer()); | |
| 161 | +} | |
| 162 | + | |
| 163 | +bool | |
| 164 | +QPDFObjectHandle::isInlineImage() | |
| 165 | +{ | |
| 166 | + dereference(); | |
| 167 | + return QPDFObjectTypeAccessor<QPDF_InlineImage>::check(obj.getPointer()); | |
| 168 | +} | |
| 169 | + | |
| 170 | +bool | |
| 155 | 171 | QPDFObjectHandle::isArray() |
| 156 | 172 | { |
| 157 | 173 | dereference(); |
| ... | ... | @@ -190,7 +206,8 @@ QPDFObjectHandle::isIndirect() |
| 190 | 206 | bool |
| 191 | 207 | QPDFObjectHandle::isScalar() |
| 192 | 208 | { |
| 193 | - return (! (isArray() || isDictionary() || isStream())); | |
| 209 | + return (! (isArray() || isDictionary() || isStream() || | |
| 210 | + isKeyword() || isInlineImage())); | |
| 194 | 211 | } |
| 195 | 212 | |
| 196 | 213 | // Bool accessors |
| ... | ... | @@ -245,6 +262,22 @@ QPDFObjectHandle::getUTF8Value() |
| 245 | 262 | return dynamic_cast<QPDF_String*>(obj.getPointer())->getUTF8Val(); |
| 246 | 263 | } |
| 247 | 264 | |
| 265 | +// Keyword and Inline Image accessors | |
| 266 | + | |
| 267 | +std::string | |
| 268 | +QPDFObjectHandle::getKeywordValue() | |
| 269 | +{ | |
| 270 | + assertKeyword(); | |
| 271 | + return dynamic_cast<QPDF_Keyword*>(obj.getPointer())->getVal(); | |
| 272 | +} | |
| 273 | + | |
| 274 | +std::string | |
| 275 | +QPDFObjectHandle::getInlineImageValue() | |
| 276 | +{ | |
| 277 | + assertInlineImage(); | |
| 278 | + return dynamic_cast<QPDF_InlineImage*>(obj.getPointer())->getVal(); | |
| 279 | +} | |
| 280 | + | |
| 248 | 281 | // Array accessors |
| 249 | 282 | |
| 250 | 283 | int |
| ... | ... | @@ -929,6 +962,18 @@ QPDFObjectHandle::newString(std::string const& str) |
| 929 | 962 | } |
| 930 | 963 | |
| 931 | 964 | QPDFObjectHandle |
| 965 | +QPDFObjectHandle::newKeyword(std::string const& value) | |
| 966 | +{ | |
| 967 | + return QPDFObjectHandle(new QPDF_Keyword(value)); | |
| 968 | +} | |
| 969 | + | |
| 970 | +QPDFObjectHandle | |
| 971 | +QPDFObjectHandle::newInlineImage(std::string const& value) | |
| 972 | +{ | |
| 973 | + return QPDFObjectHandle(new QPDF_InlineImage(value)); | |
| 974 | +} | |
| 975 | + | |
| 976 | +QPDFObjectHandle | |
| 932 | 977 | QPDFObjectHandle::newArray() |
| 933 | 978 | { |
| 934 | 979 | return newArray(std::vector<QPDFObjectHandle>()); |
| ... | ... | @@ -1213,6 +1258,18 @@ QPDFObjectHandle::assertString() |
| 1213 | 1258 | } |
| 1214 | 1259 | |
| 1215 | 1260 | void |
| 1261 | +QPDFObjectHandle::assertKeyword() | |
| 1262 | +{ | |
| 1263 | + assertType("Keyword", isKeyword()); | |
| 1264 | +} | |
| 1265 | + | |
| 1266 | +void | |
| 1267 | +QPDFObjectHandle::assertInlineImage() | |
| 1268 | +{ | |
| 1269 | + assertType("InlineImage", isInlineImage()); | |
| 1270 | +} | |
| 1271 | + | |
| 1272 | +void | |
| 1216 | 1273 | QPDFObjectHandle::assertArray() |
| 1217 | 1274 | { |
| 1218 | 1275 | assertType("Array", isArray()); | ... | ... |
libqpdf/QPDF_InlineImage.cc
0 → 100644
| 1 | +#include <qpdf/QPDF_InlineImage.hh> | |
| 2 | + | |
| 3 | +#include <qpdf/QUtil.hh> | |
| 4 | + | |
| 5 | +QPDF_InlineImage::QPDF_InlineImage(std::string const& val) : | |
| 6 | + val(val) | |
| 7 | +{ | |
| 8 | +} | |
| 9 | + | |
| 10 | +QPDF_InlineImage::~QPDF_InlineImage() | |
| 11 | +{ | |
| 12 | +} | |
| 13 | + | |
| 14 | +std::string | |
| 15 | +QPDF_InlineImage::unparse() | |
| 16 | +{ | |
| 17 | + return this->val; | |
| 18 | +} | |
| 19 | + | |
| 20 | +std::string | |
| 21 | +QPDF_InlineImage::getVal() const | |
| 22 | +{ | |
| 23 | + return this->val; | |
| 24 | +} | ... | ... |
libqpdf/QPDF_Keyword.cc
0 → 100644
| 1 | +#include <qpdf/QPDF_Keyword.hh> | |
| 2 | + | |
| 3 | +#include <qpdf/QUtil.hh> | |
| 4 | + | |
| 5 | +QPDF_Keyword::QPDF_Keyword(std::string const& val) : | |
| 6 | + val(val) | |
| 7 | +{ | |
| 8 | +} | |
| 9 | + | |
| 10 | +QPDF_Keyword::~QPDF_Keyword() | |
| 11 | +{ | |
| 12 | +} | |
| 13 | + | |
| 14 | +std::string | |
| 15 | +QPDF_Keyword::unparse() | |
| 16 | +{ | |
| 17 | + return this->val; | |
| 18 | +} | |
| 19 | + | |
| 20 | +std::string | |
| 21 | +QPDF_Keyword::getVal() const | |
| 22 | +{ | |
| 23 | + return this->val; | |
| 24 | +} | ... | ... |
libqpdf/build.mk
| ... | ... | @@ -40,8 +40,10 @@ SRCS_libqpdf = \ |
| 40 | 40 | libqpdf/QPDF_Array.cc \ |
| 41 | 41 | libqpdf/QPDF_Bool.cc \ |
| 42 | 42 | libqpdf/QPDF_Dictionary.cc \ |
| 43 | + libqpdf/QPDF_InlineImage.cc \ | |
| 43 | 44 | libqpdf/QPDF_Integer.cc \ |
| 44 | 45 | libqpdf/QPDF_Name.cc \ |
| 46 | + libqpdf/QPDF_Keyword.cc \ | |
| 45 | 47 | libqpdf/QPDF_Null.cc \ |
| 46 | 48 | libqpdf/QPDF_Real.cc \ |
| 47 | 49 | libqpdf/QPDF_Reserved.cc \ | ... | ... |
libqpdf/qpdf/QPDF_InlineImage.hh
0 → 100644
| 1 | +#ifndef __QPDF_INLINEIMAGE_HH__ | |
| 2 | +#define __QPDF_INLINEIMAGE_HH__ | |
| 3 | + | |
| 4 | +#include <qpdf/QPDFObject.hh> | |
| 5 | + | |
| 6 | +class QPDF_InlineImage: public QPDFObject | |
| 7 | +{ | |
| 8 | + public: | |
| 9 | + QPDF_InlineImage(std::string const& val); | |
| 10 | + virtual ~QPDF_InlineImage(); | |
| 11 | + virtual std::string unparse(); | |
| 12 | + std::string getVal() const; | |
| 13 | + | |
| 14 | + private: | |
| 15 | + std::string val; | |
| 16 | +}; | |
| 17 | + | |
| 18 | +#endif // __QPDF_INLINEIMAGE_HH__ | ... | ... |
libqpdf/qpdf/QPDF_Keyword.hh
0 → 100644
| 1 | +#ifndef __QPDF_KEYWORD_HH__ | |
| 2 | +#define __QPDF_KEYWORD_HH__ | |
| 3 | + | |
| 4 | +#include <qpdf/QPDFObject.hh> | |
| 5 | + | |
| 6 | +class QPDF_Keyword: public QPDFObject | |
| 7 | +{ | |
| 8 | + public: | |
| 9 | + QPDF_Keyword(std::string const& val); | |
| 10 | + virtual ~QPDF_Keyword(); | |
| 11 | + virtual std::string unparse(); | |
| 12 | + std::string getVal() const; | |
| 13 | + | |
| 14 | + private: | |
| 15 | + std::string val; | |
| 16 | +}; | |
| 17 | + | |
| 18 | +#endif // __QPDF_KEYWORD_HH__ | ... | ... |