00001 #ifndef gHTML_OPT_X_H
00002 #define gHTML_OPT_X_H
00003
00004 #include "glistext.h"
00005 #include "gstring.h"
00006 #include "gconfig.h"
00007
00008
00009 struct sHtmlElement;
00010
00011 enum eHState {
00012 e_HS_Start = 0,
00013 e_HS_StartAfter = 1,
00014 e_HS_Html = 2,
00015 e_HS_Head = 3,
00016 e_HS_HeadAfter = 4,
00017 e_HS_Body = 5,
00018 e_HS_BodyAfter = 6,
00019 e_HS_End = 7,
00020 e_HS_Last,
00021 e_HS_Sp_FakeBody
00022 };
00023
00024 struct sHOutFormat {
00025 sHOutFormat ()
00026 : cIndentLevel( '\t' ),
00027 oIndentLevel1( 'T' ) {
00028 Prepare();
00029 }
00030 ~sHOutFormat () {
00031 }
00032
00033 char cIndentLevel;
00034 gSwitch oIndentLevel1;
00035
00036 gString sBeginLine[e_HS_Last+1];
00037
00038
00039 char* GetBeginLineStr (t_uint16 state, t_uint16 rLine) ;
00040
00041
00042 void Prepare () ;
00043 int SetIndentString (char cIndent, t_uint16 nBlanks, gString& sResult) ;
00044
00045 void CopyHOutFormat (sHOutFormat& copy) ;
00046 };
00047
00048 struct sAttrNorm {
00049 t_int16 idTag;
00050 char* strAttrSeq;
00051 gSmartList* pAttrSeq;
00052 };
00053
00054 struct sAttrsTagNorm {
00055 sAttrsTagNorm ()
00056 : lstNorms( nil ) {
00057 }
00058 ~sAttrsTagNorm () {
00059 delete[] lstNorms;
00060 }
00061
00062 gSmartList allTagNorm;
00063 gSmartList* lstNorms;
00064
00065
00066 void Reset () {
00067 delete[] lstNorms;
00068 lstNorms = nil;
00069 }
00070
00071 int CopyDefaultAttrNorms (t_int16 idTag0, t_int16 idTag1, bool doDefault) ;
00072 };
00073
00074 class gHInOpt : public gControl {
00075 public:
00076 gHInOpt () ;
00077 virtual ~gHInOpt () ;
00078
00079
00080 gListInt lLineAdd;
00081 int vLineLTE, vLineGTE;
00082 gListInt lLineSuppress;
00083 int vLineSupLTE, vLineSupGTE;
00084
00085
00086 virtual bool HasToSkip (int iLine) ;
00087
00088
00089 virtual bool ConvertToInt (char* str, int& v) ;
00090 virtual bool SetFromString (char* str) ;
00091
00092 protected:
00093 bool hasLineAddRestriction;
00094
00095 int thisAddLineSup (int v, bool doExclude) ;
00096 int thisAddLineSupGTE (int v, bool doExclude) ;
00097 bool thisHasToShow (int iLine) ;
00098
00099 private:
00100
00101 gHInOpt (gHInOpt& ) ;
00102 gHInOpt& operator= (gHInOpt& ) ;
00103 };
00104
00105 struct sTidyElem {
00106 sTidyElem ()
00107 : pElem( nil ) {
00108 }
00109 ~sTidyElem () {
00110 }
00111 sHtmlElement* pElem;
00112 gString sAttr;
00113 bool AnyAttr () {
00114 return sAttr.IsEmpty();
00115 }
00116 void Copy (sTidyElem& copy) {
00117 pElem = copy.pElem;
00118 sAttr = copy.sAttr;
00119 }
00120 };
00121
00122 struct sTidyArray {
00123 sTidyArray ()
00124 : n( 0 ),
00125 lst( nil ),
00126 doTidyAll( false ) {
00127 }
00128 ~sTidyArray () {
00129 Release();
00130 }
00131 unsigned n;
00132 sTidyElem* lst;
00133 bool doTidyAll;
00134
00135
00136 void Release () {
00137 n = 0;
00138 delete[] lst;
00139 lst = nil;
00140 }
00141 void Copy (sTidyArray& copy) ;
00142 };
00143
00144 class gHOutOpt : public gControl {
00145 public:
00146 gHOutOpt (FILE* afRepErr) ;
00147 virtual ~gHOutOpt () ;
00148
00149
00150 FILE* fRepErr;
00151 sTidyArray aTidy;
00152 sAttrsTagNorm lAttrsNorm;
00153
00154
00155 virtual gConfig& Config () ;
00156
00157 virtual bool HasToSkip (char* sFullTagStr) ;
00158
00159 virtual bool IsTagSkipped (char* sTagStr) {
00160 return lSkipTag.Match( sTagStr )>0;
00161 }
00162
00163 bool HasTidy (char* strTag) {
00164 unsigned idx;
00165 return thisHasTidy( strTag, idx );
00166 }
00167 bool HasTidy (char* strTag, unsigned& idx) {
00168 return thisHasTidy( strTag, idx );
00169 }
00170 bool HasTidyAttr (char* strTag, gString& sAttr) {
00171 unsigned idx;
00172 return thisHasTidyAttr( strTag, sAttr, idx );
00173 }
00174 bool HasTidyAttr (char* strTag, gString& sAttr, unsigned& idx) {
00175 return thisHasTidyAttr( strTag, sAttr, idx );
00176 }
00177
00178
00179 void CopyHOutOpt (gHOutOpt& copy) ;
00180 virtual int CopyDefaultAttrs () ;
00181 virtual int CopyDefaultAttrNorms (t_int16 idTag0, t_int16 idTag1, bool doDefault) ;
00182
00183
00184 virtual int ConfigFromFile (char* fName) ;
00185
00186
00187 virtual void Show (bool doShowAll=true) ;
00188
00189 protected:
00190 gConfig* myConfig;
00191 gList lSkipTag;
00192 gList lSkipFSt;
00193 gList lSkipStt;
00194
00195 bool thisHasTidy (char* strTag, unsigned& idx) ;
00196 bool thisHasTidyAttr (char* strTag, gString& sAttr, unsigned& idx) ;
00197
00198 int thisConfig (gConfig& cfg) ;
00199
00200 private:
00201
00202 gHOutOpt (gHOutOpt& ) ;
00203 gHOutOpt& operator= (gHOutOpt& ) ;
00204 };
00205
00206 class gHtmlOpt : public gControl {
00207 public:
00208 gHtmlOpt () ;
00209 virtual ~gHtmlOpt () ;
00210
00211
00212 gString sBaseHREF;
00213 gSwitch oErrStateAllSuppress;
00214 gSwitch oErrStateSuppress[10];
00215 gSwitch oErrInvTagWrite;
00216 gList lIdTagOptEnd;
00217
00218 sHOutFormat outFmt;
00219 gHInOpt inOpt;
00220 gHOutOpt outOpt;
00221
00222
00223 virtual bool DoBaseHRef () {
00224 return sBaseHREF.IsEmpty()==false;
00225 }
00226 virtual char* GetBaseHRef () ;
00227
00228
00229 virtual bool AddIdTagOptEnd (t_int16 id) {
00230 if ( id<0 ) return false;
00231 lIdTagOptEnd.Add( (int)id );
00232 return true;
00233 }
00234
00235 void CopyOptions (gHtmlOpt& copy) ;
00236
00237 protected:
00238 gString sStrAux;
00239
00240 private:
00241
00242 gHtmlOpt (gHtmlOpt& ) ;
00243 gHtmlOpt& operator= (gHtmlOpt& ) ;
00244 };
00245
00246 #endif //gHTML_OPT_X_H
00247