gHtmlOpt.h

Go to the documentation of this file.
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 // Forward declarations
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,  // Not used
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     // Get methods
00039     char* GetBeginLineStr (t_uint16 state, t_uint16 rLine) ;
00040 
00041     // Set methods
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;         // -2 for the first element (all tags norms)
00050     char* strAttrSeq;      // comma separated list of attributes, uppercase: e.g. "SRC, ALT" (for IMG tags)
00051     gSmartList* pAttrSeq;  // depends on strAttrSeq
00052 };
00053 
00054 struct sAttrsTagNorm {
00055     sAttrsTagNorm ()
00056         : lstNorms( nil ) {
00057     }
00058     ~sAttrsTagNorm () {
00059         delete[] lstNorms;
00060     }
00061 
00062     gSmartList allTagNorm;
00063     gSmartList* lstNorms;  // [0:idxTag=0, gHtmlParser::nElems:last-tag]
00064 
00065     // Set methods
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     // Public data-members
00080     gListInt lLineAdd;
00081     int vLineLTE, vLineGTE;
00082     gListInt lLineSuppress;  // suppress
00083     int vLineSupLTE, vLineSupGTE; // suppress
00084 
00085     // Get methods
00086     virtual bool HasToSkip (int iLine) ;
00087 
00088     // Special methods
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     // Operators,empty
00101     gHInOpt (gHInOpt& ) ; //empty
00102     gHInOpt& operator= (gHInOpt& ) ; //empty
00103 };
00104 ////////////////////////////////////////////////////////////
00105 struct sTidyElem {
00106     sTidyElem ()
00107         : pElem( nil ) {
00108     }
00109     ~sTidyElem () {
00110     }
00111     sHtmlElement* pElem;  // never allocated
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;  // 1..n tidy elements
00133     bool doTidyAll;  // all tags&attrs
00134 
00135     // Methods
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     // Public data-members
00150     FILE* fRepErr;
00151     sTidyArray aTidy;
00152     sAttrsTagNorm lAttrsNorm;  // List of configured attributes norms
00153 
00154     // Get methods
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     // Set methods
00179     void CopyHOutOpt (gHOutOpt& copy) ;
00180     virtual int CopyDefaultAttrs () ;
00181     virtual int CopyDefaultAttrNorms (t_int16 idTag0, t_int16 idTag1, bool doDefault) ;
00182 
00183     // Special methods
00184     virtual int ConfigFromFile (char* fName) ;
00185 
00186     // Show methods
00187     virtual void Show (bool doShowAll=true) ;
00188 
00189 protected:
00190     gConfig* myConfig;
00191     gList lSkipTag;  // List of tags skipped (only tag, e.g. B)
00192     gList lSkipFSt;  // List of full string skipped tags (e.g. <B> and </B>)
00193     gList lSkipStt;  // List of full string skipped tag begining (e.g. <B>)
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     // Operators,empty
00202     gHOutOpt (gHOutOpt& ) ; //empty
00203     gHOutOpt& operator= (gHOutOpt& ) ; //empty
00204 };
00205 ////////////////////////////////////////////////////////////
00206 class gHtmlOpt : public gControl {
00207 public:
00208     gHtmlOpt () ;
00209     virtual ~gHtmlOpt () ;
00210 
00211     // Public data-members
00212     gString sBaseHREF;
00213     gSwitch oErrStateAllSuppress;
00214     gSwitch oErrStateSuppress[10];  // nr of states (<10)
00215     gSwitch oErrInvTagWrite;  // Write out invalid tags
00216     gList lIdTagOptEnd;  // set of id's of tags
00217 
00218     sHOutFormat outFmt;
00219     gHInOpt inOpt;
00220     gHOutOpt outOpt;
00221 
00222     // Get methods
00223     virtual bool DoBaseHRef () {
00224         return sBaseHREF.IsEmpty()==false;
00225     }
00226     virtual char* GetBaseHRef () ;
00227 
00228     // Set methods
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     // Operators,empty
00242     gHtmlOpt (gHtmlOpt& ) ; //empty
00243     gHtmlOpt& operator= (gHtmlOpt& ) ; //empty
00244 };
00245 ////////////////////////////////////////////////////////////
00246 #endif //gHTML_OPT_X_H
00247 

Generated on Sat Aug 18 02:40:55 2007 for xpfweb_v2x lib by  doxygen 1.4.2