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