00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00020 #ifndef TESSERACT_CSTRUCT_BOXWORD_H__
00021 #define TESSERACT_CSTRUCT_BOXWORD_H__
00022
00023 #include "genericvector.h"
00024 #include "rect.h"
00025
00026 class BLOCK;
00027 class DENORM;
00028 class PBLOB_LIST;
00029 struct TWERD;
00030 class UNICHARSET;
00031 class WERD;
00032 class WERD_CHOICE;
00033 class WERD_RES;
00034
00035 namespace tesseract {
00036
00037
00038 enum ScriptPos {
00039 SP_NORMAL,
00040 SP_SUBSCRIPT,
00041 SP_SUPERSCRIPT,
00042 SP_DROPCAP
00043 };
00044
00045
00046
00047 class BoxWord {
00048 public:
00049 BoxWord();
00050 explicit BoxWord(const BoxWord& src);
00051 ~BoxWord();
00052
00053 BoxWord& operator=(const BoxWord& src);
00054
00055 void CopyFrom(const BoxWord& src);
00056
00057
00058
00059
00060
00061 static BoxWord* CopyFromNormalized(const DENORM* denorm,
00062 TWERD* tessword);
00063
00064
00065
00066
00067
00068 void SetScriptPositions(const UNICHARSET& unicharset, bool small_caps,
00069 TWERD* tessword, WERD_CHOICE* best_choice);
00070
00071
00072
00073
00074 void ClipToOriginalWord(const BLOCK* block, WERD* original_word);
00075
00076
00077
00078 void MergeBoxes(int start, int end);
00079
00080
00081
00082 void InsertBox(int index, const TBOX& box);
00083
00084
00085
00086 void DeleteBox(int index);
00087
00088
00089 void DeleteAllBoxes();
00090
00091
00092
00093
00094 void ProcessMatchedBlobs(const TWERD& other, TessCallback1<int>* cb) const;
00095
00096 const TBOX& bounding_box() const {
00097 return bbox_;
00098 }
00099 const int length() const {
00100 return length_;
00101 }
00102 const TBOX& BlobBox(int index) const {
00103 return boxes_[index];
00104 }
00105 ScriptPos BlobPosition(int index) const {
00106 if (index < 0 || index >= script_pos_.size())
00107 return SP_NORMAL;
00108 return script_pos_[index];
00109 }
00110
00111 private:
00112 void ComputeBoundingBox();
00113
00114 TBOX bbox_;
00115 int length_;
00116 GenericVector<TBOX> boxes_;
00117 GenericVector<ScriptPos> script_pos_;
00118 };
00119
00120 }
00121
00122
00123 #endif // TESSERACT_CSTRUCT_BOXWORD_H__