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