00001 // ========== This file is under LGPL, the GNU Lesser General Public Licence 00002 // ========== Dialing Graphematical Module (www.aot.ru) 00003 // ========== Copyright by Alexey Sokirko (1996-2001) 00004 00005 00006 #ifndef graline_h 00007 #define graline_h 00008 #include "../common/utilit.h" 00009 #include "../common/gra_descr.h" 00010 00011 00012 00013 00014 const WORD stSpace = 1; 00015 const WORD stEOLN = 2; 00016 const WORD stGrouped = 4; 00017 const WORD stAbbreviation = 8; 00018 const WORD stNotPrint = 16; 00019 const WORD stParagraphChar = 64; 00020 const WORD stEnglishName = 128; 00021 00022 const WORD stKeyModifier = 256; 00023 const WORD stPunct = 512; 00024 const WORD stElectronicAddress = 1024; 00025 00026 const WORD stTextAreaEnd = 2048; 00027 const WORD stSingleSpaceAfter = 4096; 00028 const WORD stIdent = 8192 ; 00029 const WORD stParagraphTag = 8192*2 ; 00030 const WORD stPageBreak = 8192*4 ; 00031 00032 00033 class CGraphmatFile; 00034 00035 00036 struct CGraphemOborot { 00037 string m_UnitStr; 00038 WORD m_UnitNo; 00039 // статья имеет RESTR = fixed ! 00040 bool m_bFixedFet; 00041 vector<WORD> m_TokenIds; 00042 00043 bool operator == (const string& s) 00044 { 00045 return s == m_UnitStr; 00046 }; 00047 }; 00048 00049 00050 00051 const DWORD UnknownPageNumber = 0xffffffff; 00052 00053 class CGraLine 00054 { 00055 // Этот указатель либо указывает на строку выделенную специально для 00056 // одного объекта этого класса, либо в m_TokenBuf (с каким-то смещением). 00057 // Переменная m_m_UnitBuf определена в файле graphmat.cpp 00058 const char* unit; 00059 00060 // длина строки с учетом табуляции (screen length) и разрядки 00061 // Длина каждого конца строк - один символ. 00062 BYTE slen; 00063 00064 // длина строки unit 00065 BYTE ulen; 00066 QWORD m_Descriptors; 00067 WORD m_Status; 00068 DWORD m_InputOffset; 00069 00070 size_t LengthUntilDelimiters (const char *s, const CGraphmatFile* G); 00071 00072 public: 00073 00074 CGraLine(); 00075 BYTE GetTokenLength() const { return ulen; }; 00076 const char* GetToken() const {return unit; }; 00077 BYTE GetScreenLength() const {return slen;}; 00078 DWORD GetInputOffset() const {return m_InputOffset;}; 00079 QWORD GetDescriptors() const {return m_Descriptors; }; 00080 00081 bool IsNotPrint () const; 00082 // we leave these function in the header, since VC doesn't want to make them inline 00083 bool IsSpace () const {return (m_Status & stSpace) != 0; }; 00084 bool IsEOLN () const {return (m_Status & stEOLN) != 0; }; 00085 bool IsSoft () const {return IsSpace() || IsEOLN();}; 00086 bool IsPunct () const {return (m_Status & stPunct) != 0;}; 00087 00088 bool IsIdent () const; 00089 ; 00090 bool IsEnglishName () const; 00091 bool IsGrouped () const; 00092 00093 bool IsAbbreviation () const; 00094 bool IsParagraphChar () const; 00095 bool IsPageBreak() const; 00096 bool IsTextAreaEnd() const; 00097 bool IsElectronicAddress() const; 00098 bool IsParagraphTag () const; 00099 bool IsKeyModifier() const; 00100 bool IsChar (int c) const; 00101 bool IsAsterisk () const; 00102 bool HasSingleSpaceAfter() const; 00103 bool IsString (const char* s) const; 00104 int ToInt () const; 00105 bool IsEndTextPeriodDescriptor (int d) const; 00106 bool HasMacroSyntaxDelimiter () const; 00107 bool IsWordOrNumberOrAbbr() const; 00108 00109 00110 void SetSpace (); 00111 void SetPunct (); 00112 void SetEOLN (); 00113 void SetNotPrint(); 00114 void SetParagraphChar(); 00115 void SetParagraphTag(); 00116 void SetKeyModifier(); 00117 void SetSingleSpaceAfter(); 00118 void SetIdent(); 00119 void SetElectronicAddress(); 00120 void SetPageBreak(); 00121 void SetTextAreaEnd(); 00122 void SetEnglishName (); 00123 void DelDes(Descriptors d); 00124 void SetDes(Descriptors d); 00125 void MakeSpaces(size_t SpacesLength); 00126 void AddStatus(WORD add_state); 00127 void AddLength(const CGraLine& L); 00128 void SetToken(const char*); 00129 size_t ReadWord (size_t Offset, const CGraphmatFile* G, DWORD& PageNumber); 00130 bool IsSingleSpaceToDelete() const; 00131 }; 00132 00133 00134 #endif