00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #ifndef _HTMLCLASSES_H_
00023 #define _HTMLCLASSES_H_ 1
00024 
00031 #include "cgicc/CgiDefs.h"
00032 #include "cgicc/HTMLAtomicElement.h"
00033 #include "cgicc/HTMLBooleanElement.h"
00034 #include "cgicc/HTMLDoctype.h"
00035 
00036 
00037 
00038 
00039 
00046 #define TAG(name, tag) \
00047 class name##Tag   \
00048 { public: inline static const char* getName() { return tag; } }
00049 
00058 #define ATOMIC_ELEMENT(name, tag) \
00059 TAG(name, tag); typedef HTMLAtomicElement<name##Tag> name
00060 
00070 #define BOOLEAN_ELEMENT(name, tag) \
00071 TAG(name, tag); typedef HTMLBooleanElement<name##Tag> name
00072 
00073 
00074 
00075 
00076 
00077 
00078 CGICC_BEGIN_NAMESPACE
00079 
00080 
00081 
00082 
00083 
00084 class nullTag
00085 { public: inline static const char* getName() { return 0; } };
00086 
00090 class comment : public HTMLBooleanElement<nullTag>
00091 {
00092   virtual void render(STDNS ostream& out)       const
00093   {
00094     if(getData().empty() && dataSpecified() == false) {
00095       swapState();
00096       out << (getState() ? "<!-- " : " -->");
00097     }
00098     else
00099       out << "<!-- " << getData() << " -->";
00100   }
00101 };
00102 
00103 BOOLEAN_ELEMENT (html,       "html");       
00104 BOOLEAN_ELEMENT (head,       "head");       
00105 BOOLEAN_ELEMENT (title,      "title");      
00106 ATOMIC_ELEMENT  (meta,       "meta");       
00107 BOOLEAN_ELEMENT (style,      "style");      
00108 BOOLEAN_ELEMENT (body,       "body");       
00109 #if CGICC_USE_NAMESPACES
00110 BOOLEAN_ELEMENT (div,        "div");        
00111 #else
00112 BOOLEAN_ELEMENT (div_,       "div");        
00113 #endif
00114 BOOLEAN_ELEMENT (span,       "span");       
00115 BOOLEAN_ELEMENT (h1,         "h1");         
00116 BOOLEAN_ELEMENT (h2,         "h2");         
00117 BOOLEAN_ELEMENT (h3,         "h3");         
00118 BOOLEAN_ELEMENT (h4,         "h4");         
00119 BOOLEAN_ELEMENT (h5,         "h5");         
00120 BOOLEAN_ELEMENT (h6,         "h6");         
00121 BOOLEAN_ELEMENT (address,    "address");    
00122 
00123 
00124 
00125 BOOLEAN_ELEMENT (em,         "em");         
00126 BOOLEAN_ELEMENT (strong,     "strong");     
00127 BOOLEAN_ELEMENT (cite,       "cite");       
00128 BOOLEAN_ELEMENT (dfn,        "dfn");        
00129 BOOLEAN_ELEMENT (code,       "code");       
00130 BOOLEAN_ELEMENT (samp,       "samp");       
00131 BOOLEAN_ELEMENT (kbd,        "kbd");        
00132 BOOLEAN_ELEMENT (var,        "var");        
00133 BOOLEAN_ELEMENT (abbr,       "abbr");       
00134 BOOLEAN_ELEMENT (acronym,    "acronym");    
00135 BOOLEAN_ELEMENT (blockquote, "blockquote"); 
00136 BOOLEAN_ELEMENT (q,          "q");          
00137 BOOLEAN_ELEMENT (sub,        "sub");        
00138 BOOLEAN_ELEMENT (sup,        "sup");        
00139 BOOLEAN_ELEMENT (p,          "p");          
00140 ATOMIC_ELEMENT  (br,         "br");         
00141 BOOLEAN_ELEMENT (pre,        "pre");        
00142 BOOLEAN_ELEMENT (ins,        "ins");        
00143 BOOLEAN_ELEMENT (del,        "del");        
00144 BOOLEAN_ELEMENT (bdo,        "bdo");        
00145 
00146 
00147 
00148 BOOLEAN_ELEMENT (ul,         "ul");         
00149 BOOLEAN_ELEMENT (ol,         "ol");         
00150 BOOLEAN_ELEMENT (li,         "li");         
00151 BOOLEAN_ELEMENT (dl,         "dl");         
00152 BOOLEAN_ELEMENT (dt,         "dt");         
00153 BOOLEAN_ELEMENT (dd,         "dd");         
00154 
00155 
00156 
00157 BOOLEAN_ELEMENT (table,      "table");      
00158 BOOLEAN_ELEMENT (caption,    "caption");    
00159 BOOLEAN_ELEMENT (thead,      "thead");      
00160 BOOLEAN_ELEMENT (tfoot,      "tfoot");      
00161 BOOLEAN_ELEMENT (tbody,      "tbody");      
00162 BOOLEAN_ELEMENT (colgroup,   "colgroup");   
00163 ATOMIC_ELEMENT  (col,        "col");        
00164 BOOLEAN_ELEMENT (tr,         "tr");         
00165 BOOLEAN_ELEMENT (th,         "th");         
00166 BOOLEAN_ELEMENT (td,         "td");         
00167 
00168 
00169 
00170 BOOLEAN_ELEMENT (a,          "a");          
00171 #if CGICC_USE_NAMESPACES
00172 ATOMIC_ELEMENT  (link,       "link");       
00173 #else
00174 ATOMIC_ELEMENT  (link_,      "link");       
00175 #endif
00176 ATOMIC_ELEMENT  (base,       "base");       
00177 
00178 
00179 
00180 ATOMIC_ELEMENT  (img,        "img");        
00181 BOOLEAN_ELEMENT (object,     "object");     
00182 ATOMIC_ELEMENT  (param,      "param");      
00183 BOOLEAN_ELEMENT (map,        "map");        
00184 ATOMIC_ELEMENT  (area,       "area");       
00185 ATOMIC_ELEMENT  (hr,         "hr");         
00186 
00187 
00188 
00189 BOOLEAN_ELEMENT (tt,         "tt");         
00190 BOOLEAN_ELEMENT (i,          "i");          
00191 BOOLEAN_ELEMENT (b,          "b");          
00192 BOOLEAN_ELEMENT (big,        "big");        
00193 BOOLEAN_ELEMENT (small,      "small");      
00194 
00195 
00196 
00197 BOOLEAN_ELEMENT (frameset,   "frameset");   
00198 ATOMIC_ELEMENT  (frame,      "frame");      
00199 BOOLEAN_ELEMENT (noframes,   "noframes");   
00200 BOOLEAN_ELEMENT (iframe,     "iframe");     
00201 
00202 
00203 
00204 BOOLEAN_ELEMENT (form,       "form");       
00205 ATOMIC_ELEMENT  (input,      "input");      
00206 BOOLEAN_ELEMENT (button,     "button");     
00207 #if CGICC_USE_NAMESPACES
00208 BOOLEAN_ELEMENT (select,     "select");     
00209 #else
00210 BOOLEAN_ELEMENT (select_,    "select");     
00211 #endif
00212 BOOLEAN_ELEMENT (optgroup,   "optgroup");   
00213 BOOLEAN_ELEMENT (option,     "option");     
00214 BOOLEAN_ELEMENT (textarea,   "textarea");   
00215 BOOLEAN_ELEMENT (label,      "label");      
00216 BOOLEAN_ELEMENT (fieldset,   "fieldset");   
00217 BOOLEAN_ELEMENT (legend,     "legend");     
00218 
00219 
00220 
00221 BOOLEAN_ELEMENT (script,     "script");     
00222 BOOLEAN_ELEMENT (noscript,   "noscript");   
00223 
00224 CGICC_END_NAMESPACE
00225 
00226 #endif