kviewshell
DjVuText.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #ifndef _DJVUTEXT_H
00058 #define _DJVUTEXT_H
00059 #ifdef HAVE_CONFIG_H
00060 #include "config.h"
00061 #endif
00062 #if NEED_GNUG_PRAGMAS
00063 # pragma interface
00064 #endif
00065
00066
00067
00087
00088
00089 #include "GMapAreas.h"
00090
00091 #ifdef HAVE_NAMESPACES
00092 namespace DJVU {
00093 # ifdef NOT_DEFINED // Just to fool emacs c++ mode
00094 }
00095 #endif
00096 #endif
00097
00098
00099 class ByteStream;
00100
00101
00102
00109 class DjVuTXT : public GPEnabled
00110 {
00111 protected:
00112 DjVuTXT(void) {}
00113 public:
00115 static GP<DjVuTXT> create(void) {return new DjVuTXT();}
00116
00120 enum ZoneType { PAGE=1, COLUMN=2, REGION=3, PARAGRAPH=4,
00121 LINE=5, WORD=6, CHARACTER=7 };
00124 class Zone
00125 {
00126 public:
00127 Zone();
00129 enum ZoneType ztype;
00131 GRect rect;
00133 int text_start;
00135 int text_length;
00137 GList<Zone> children;
00141 Zone *append_child();
00143 void get_text_with_rect(const GRect &box,
00144 int &string_start,int &string_end ) const;
00146 void find_zones(GList<Zone *> &list,
00147 const int string_start, const int string_end) const;
00149 void get_smallest(GList<GRect> &list) const;
00153 void get_smallest(GList<GRect> &list,const int padding) const;
00155 const Zone *get_parent(void) const;
00156 private:
00157 friend class DjVuTXT;
00158 const Zone *zone_parent;
00159 void cleartext();
00160 void normtext(const char *instr, GUTF8String &outstr);
00161 unsigned int memuse() const;
00162 static const int version;
00163 void encode(const GP<ByteStream> &bs,
00164 const Zone * parent=0, const Zone * prev=0) const;
00165 void decode(const GP<ByteStream> &bs, int maxtext,
00166 const Zone * parent=0, const Zone * prev=0);
00167 };
00180 GUTF8String textUTF8;
00181 static const char end_of_column ;
00182 static const char end_of_region ;
00183 static const char end_of_paragraph ;
00184 static const char end_of_line ;
00187 Zone page_zone;
00189 int has_valid_zones() const;
00195 void normalize_text();
00197 void encode(const GP<ByteStream> &bs) const;
00199 void decode(const GP<ByteStream> &bs);
00201 GP<DjVuTXT> copy(void) const;
00203 void writeText(ByteStream &bs,const int height) const;
00205 GUTF8String get_xmlText(const int height) const;
00207 GList<Zone*> find_text_in_rect(GRect target_rect, GUTF8String &text) const;
00209 GList<GRect> find_text_with_rect(const GRect &box, GUTF8String &text, const int padding=0) const;
00212 void get_zones(int zone_type, const Zone *parent, GList<Zone *> & zone_list) const;
00215 unsigned int get_memory_usage() const;
00216 };
00217
00218 inline const DjVuTXT::Zone *
00219 DjVuTXT::Zone::get_parent(void) const
00220 {
00221 return zone_parent;
00222 }
00223
00224
00225 class DjVuText : public GPEnabled
00226 {
00227 protected:
00228 DjVuText(void) {}
00229 public:
00231 static GP<DjVuText> create(void) {return new DjVuText();}
00232
00237 void decode(const GP<ByteStream> &bs);
00238
00241 void encode(const GP<ByteStream> &bs);
00242
00244 GP<DjVuText> copy(void) const;
00245
00248 inline unsigned int get_memory_usage() const;
00249
00251 void writeText(ByteStream &bs,const int height) const;
00252
00254 GUTF8String get_xmlText(const int height) const;
00255
00256 GP<DjVuTXT> txt;
00257 private:
00258 static void decode(ByteStream *);
00259 static void encode(ByteStream *);
00260 };
00261
00263
00264 inline unsigned int
00265 DjVuText::get_memory_usage() const
00266 {
00267 return (txt)?(txt->get_memory_usage()):0;
00268 }
00269
00270
00271
00272
00273 #ifdef HAVE_NAMESPACES
00274 }
00275 # ifndef NOT_USING_DJVU_NAMESPACE
00276 using namespace DJVU;
00277 # endif
00278 #endif
00279 #endif
00280
00281