00001
00002
00003
00004
00005
00006 #ifndef H_CPPSDFObj
00007 #define H_CPPSDFObj
00008
00009 #include <Common/Exception.h>
00010 #include <Common/UString.h>
00011 #include <Common/Matrix2D.h>
00012 #include <Filters/FilterWriter.h>
00013 #include <Filters/Filter.h>
00014
00015
00016 namespace pdftron {
00017 namespace SDF {
00018
00019 class DictIterator;
00020
00041 class Obj
00042 {
00043 public:
00044
00045
00046
00050 enum Type
00051 {
00052 e_null,
00053 e_bool,
00054 e_number,
00055 e_name,
00056 e_string,
00057 e_dict,
00058 e_array,
00059 e_stream
00060 };
00061
00066 Type GetType () const;
00067
00072 bool IsBool () const;
00073
00078 bool IsNumber () const;
00079
00084 bool IsNull () const;
00085
00090 bool IsString () const;
00091
00096 bool IsName () const;
00097
00103 bool IsIndirect () const;
00104
00110 bool IsContainer () const;
00111
00116 bool IsDict () const;
00117
00122 bool IsArray () const;
00123
00128 bool IsStream () const;
00129
00134 class SDFDoc& GetDoc () const;
00135
00141 void Write(Filters::FilterWriter& stream);
00142
00156 size_t Size () const;
00157
00158
00159
00165 UInt32 GetObjNum () const;
00166
00172 UInt16 GetGenNum () const;
00173
00179 size_t GetOffset () const;
00180
00185 bool IsFree () const;
00186
00193 void SetMark (bool mark);
00194
00199 bool IsMarked () const;
00200
00205 bool IsLoaded () const;
00206
00207
00208
00209
00214 bool GetBool () const;
00215
00220 void SetBool (bool b);
00221
00222
00223
00228 double GetNumber () const;
00229
00234 void SetNumber (double n);
00235
00236
00237
00238
00253 const UChar* GetBuffer () const;
00254
00270 void GetAsPDFText(UString& out_str) const;
00271
00279 void SetString(const UChar* value, size_t size);
00280
00286 void SetString(const UString& str);
00287
00288
00289
00294 const char* GetName () const;
00295
00300 void SetName (const char* name);
00301
00302
00303
00304
00321 DictIterator GetDictIterator ();
00322
00344 DictIterator Find (const char* key);
00345
00355 Obj FindObj (const char* key);
00356
00366 DictIterator Get (const char* key);
00367
00380 Obj PutName (const char* key, const char* name);
00381
00393 Obj PutArray (const char* key);
00394
00407 Obj PutBool (const char* key, bool value);
00408
00419 Obj PutDict (const char* key);
00420
00433 Obj PutNumber (const char* key, double value);
00434
00447 Obj PutString (const char* key, const char* value);
00448
00462 Obj PutString (const char* key, const char* value, int size);
00463
00477 Obj PutText(const char* key, const UString& value);
00478
00485 void PutNull (const char* key);
00486
00496 Obj Put(const char* key, Obj obj);
00497
00510 Obj PutRect (const char* key, double x1, double y1, double x2, double y2);
00511
00524 Obj PutMatrix(const char* key, const Common::Matrix2D& value);
00525
00530 void Erase (const char* key);
00531
00536 void Erase (DictIterator pos);
00537
00545 bool Rename (const char* old_key, const char* new_key);
00546
00547
00548
00549
00556 Obj GetAt (size_t index) const;
00557
00569 Obj InsertName (size_t pos, const char* name);
00570
00581 Obj InsertArray (size_t pos);
00582
00594 Obj InsertBool (size_t pos, bool value);
00595
00606 Obj InsertDict (size_t pos);
00607
00619 Obj InsertNumber (size_t pos, double value);
00620
00632 Obj InsertString (size_t pos, const char* value);
00633
00647 Obj InsertString (size_t pos, const char* value, int size);
00648
00661 Obj InsertText(size_t pos, const UString& value);
00662
00671 Obj InsertNull(size_t pos);
00672
00684 Obj Insert(size_t pos, Obj obj);
00685
00697 Obj InsertRect (size_t pos, double x1, double y1, double x2, double y2);
00698
00710 Obj InsertMatrix(size_t pos, Common::Matrix2D& value);
00711
00718 Obj PushBackName (const char* name);
00719
00725 Obj PushBackArray ();
00726
00733 Obj PushBackBool (bool value);
00734
00740 Obj PushBackDict ();
00741
00748 Obj PushBackNumber (double value);
00749
00756 Obj PushBackString (const char* value);
00757
00766 Obj PushBackString (const char* value, int size);
00767
00775 Obj PushBackText (const UString& value);
00776
00782 Obj PushBackNull ();
00783
00792 Obj PushBack(Obj obj);
00793
00801 Obj PushBackRect (double x1, double y1, double x2, double y2);
00802
00810 Obj PushBackMatrix(Common::Matrix2D& value);
00811
00821 void EraseAt (size_t pos);
00822
00823
00824
00825
00830 size_t GetRawStreamLength () const;
00831
00837 Filters::Filter GetRawStream (bool decrypt) const;
00838
00843 Filters::Filter GetDecodedStream () const;
00844
00849 void SetStreamData(
00850 const char* data,
00851 const size_t data_size,
00852 Filters::Filter filter_chain = Filters::Filter() );
00853
00854
00855
00856 Obj() : mp_obj(0) {}
00857 Obj(const Obj& c) : mp_obj(c.mp_obj) {}
00858 Obj& operator=(const Obj& c) {mp_obj=c.mp_obj; return *this;}
00859
00863 operator bool () { return mp_obj!=0;}
00864
00871 bool IsEqual(const Obj& to) const;
00872 bool operator ==(const Obj& to) const;
00873
00875 Obj(TRN_Obj impl);
00876 TRN_Obj mp_obj;
00877 private:
00878 mutable TRN_SDFDoc temp_doc;
00880 };
00881
00882
00883
00884 };
00885 };
00886
00887
00888
00889 #include <Impl/SDFDoc.inl>
00890 #endif
00891