1 module uim.html.h5;
2 
3 import uim.html;
4 
5 class DH5 {
6     this() { _objs = []; }
7 
8     protected DH5Obj[] _objs;
9     auto objs(this O)() { return _objs; }
10     O clear(this O)() {  _objs = []; return cast(O)this; }
11 
12     DH5Obj obj(string tag) {
13         switch(tag.toLower) {
14             case "thead": return H5Thead();
15             default: return H5Obj().tag(tag);
16         } 
17     }
18 
19 /*
20     T opBinary(string op)(DH5Obj[] someElements) {
21         static if (op, "~") return _objs~someElements;
22         else static assert(Assert(0, "Operator "~op~" not implemented");
23     }
24 */
25     mixin(H5Def!"a");
26     unittest { 
27         assert(Assert(H5.a, "<a></a>"));
28     }
29     
30     mixin(H5Def!"abbr");
31     unittest { 
32         assert(Assert(H5.abbr, "<abbr></abbr>"));
33     }
34     
35     mixin(H5Def!"address");
36     unittest { 
37         assert(Assert(H5.address, "<address></address>"));
38     }
39     
40     mixin(H5Def!"area");
41     unittest { 
42         assert(Assert(H5.area, "<area></area>"));
43     }
44     
45     mixin(H5Def!"article");
46     unittest { 
47         assert(Assert(H5.article, "<article></article>"));
48     }
49 
50     mixin(H5Def!"aside");
51     unittest { 
52         assert(Assert(H5.aside, "<aside></aside>"));
53     }
54     
55     mixin(H5Def!"audio");
56     unittest { 
57         assert(Assert(H5.audio, "<audio></audio>"));
58     }
59         
60     mixin(H5Def!"b");
61     unittest { 
62         assert(Assert(H5.b, "<b></b>"));
63     }
64     
65     mixin(H5Def!"base");
66     unittest { 
67         assert(Assert(H5.base, "<base></base>"));
68     }
69     
70     mixin(H5Def!"bdi");
71     unittest { 
72         assert(Assert(H5.bdi, "<bdi></bdi>"));
73     }
74     
75     mixin(H5Def!"bdo");
76     unittest { 
77         assert(Assert(H5.bdo, "<bdo></bdo>"));
78     }
79     
80     mixin(H5Def!"big");
81     unittest { 
82         assert(Assert(H5.big, "<big></big>"));
83     }
84     
85     mixin(H5Def!"blockquote");
86     unittest { 
87         assert(Assert(H5.blockquote, "<blockquote></blockquote>"));
88     }
89     
90     // mixin(H5Def!"body");
91     auto body_(this O)(string content) { _objs ~=  H5Body(content); return cast(O)this; }
92     auto body_(this O)(DH5Obj[] content...) { _objs ~=  H5Body(content); return cast(O)this; }
93     auto body_(this O)(DH5 content) { _objs ~=  H5Body(content); return cast(O)this; }
94 
95     auto body_(this O)(string id, string content) { _objs ~=  H5Body(id, content); return cast(O)this; }
96     auto body_(this O)(string id, DH5Obj[] content...) { _objs ~=  H5Body(id, content); return cast(O)this; }
97     auto body_(this O)(string id, DH5 content) { _objs ~=  H5Body(id, content); return cast(O)this; }
98 
99     auto body_(this O)(string id, string[] classes) { _objs ~=  H5Body(id, classes); return cast(O)this; }
100     auto body_(this O)(string id, string[] classes, string content) { _objs ~=  H5Body(id, classes, content); return cast(O)this; }
101     auto body_(this O)(string id, string[] classes, DH5Obj[] content...) { _objs ~=  H5Body(id, classes, content); return cast(O)this; }
102     auto body_(this O)(string id, string[] classes, DH5 content) { _objs ~=  H5Body(id, classes, content); return cast(O)this; }
103 
104     auto body_(this O)(string[] classes) { _objs ~=  H5Body(classes); return cast(O)this; }
105     auto body_(this O)(string content) { _objs ~=  H5Body(classes, content); return cast(O)this; }
106     auto body_(this O)(string[] classes,string[] classes,  DH5Obj[] content...) { _objs ~=  H5Body(classes, content); return cast(O)this; }
107     auto body_(this O)(string[] classes, DH5 content) { _objs ~=  H5Body(classes, content); return cast(O)this; }
108 
109     auto body_(this O)(string[string] attributes) { _objs ~=  H5Body(attributes); return cast(O)this; }
110     auto body_(this O)(string[string] attributes, string content) { _objs ~=  H5Body(attributes, content); return cast(O)this; }
111     auto body_(this O)(string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Body(attributes, content); return cast(O)this; }
112     auto body_(this O)(string[string] attributes, DH5 content) { _objs ~=  H5Body(attributes, content); return cast(O)this; }
113 
114     auto body_(this O)(string id, string[string] attributes) { _objs ~=  H5Body(id, attributes); return cast(O)this; }
115     auto body_(this O)(string id, string[string] attributes, string content) { _objs ~=  H5Body(id, attributes, content); return cast(O)this; }
116     auto body_(this O)(string id, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Body(id, attributes, content); return cast(O)this; }
117     auto body_(this O)(string id, string[string] attributes, DH5 content) { _objs ~=  H5Body(id, attributes, content); return cast(O)this; }
118 
119     auto body_(this O)(string id, string[] classes, string[string] attributes) { _objs ~=  H5Body(id, classes, attributes); return cast(O)this; }
120     auto body_(this O)(string id, string[] classes, string[string] attributes, string content) { _objs ~=  H5Body(id, classes, attributes, content); return cast(O)this; }
121     auto body_(this O)(string id, string[] classes, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Body(id, classes, attributes, content); return cast(O)this; }
122     auto body_(this O)(string id, string[] classes, string[string] attributes, DH5 content) { _objs ~=  H5Body(id, classes, attributes, content); return cast(O)this; }
123     unittest { 
124         assert(Assert(H5.body_, "<body></body>"));
125     }
126     
127     mixin(H5Def!"br");
128     unittest { 
129         assert(Assert(H5.br, "<br>"));
130     }
131     
132     mixin(H5Def!"button");
133     unittest { 
134         assert(Assert(H5.button, "<button></button>"));
135     }
136     
137     mixin(H5Def!"canvas");
138     unittest { 
139 /*	    assert(Assert(H5.canvas("test", [""]), `<canvas id="test"></canvas><script>function drawtest(){var canvas=document.getElementById('test');`~
140 		`var context=canvas.getContext('2d');}window.addEventListener("load",drawtest,true);</script>`));
141 */    }
142     
143     mixin(H5Def!"caption");
144     unittest { 
145         assert(Assert(H5.caption, "<caption></caption>"));
146     }
147     
148     mixin(H5Def!"cite");
149     unittest { 
150         assert(Assert(H5.cite, "<cite></cite>"));
151     }
152     
153     mixin(H5Def!"code");
154     unittest { 
155         assert(Assert(H5.code, "<code></code>"));
156     }
157     
158     mixin(H5Def!"col");
159     unittest { 
160         assert(Assert(H5.col, "<col></col>"));
161     }
162     
163     mixin(H5Def!"colgroup");
164     unittest { 
165         assert(Assert(H5.colgroup, "<colgroup></colgroup>"));
166     }
167     
168     mixin(H5Def!"content");
169     unittest { 
170         assert(Assert(H5.content, "<content></content>"));
171     }
172     
173     mixin(H5Def!"data");
174     unittest { 
175         assert(Assert(H5.data, "<data></data>"));
176     }
177 
178     mixin(H5Def!"datalist");
179     unittest { 
180         assert(Assert(H5.datalist, "<datalist></datalist>"));
181     }
182 
183      mixin(H5Def!"dd");
184     unittest { 
185         assert(Assert(H5.dd, "<dd></dd>"));
186     }
187 
188     mixin(H5Def!"decorator");
189     unittest { 
190         assert(Assert(H5.decorator, "<decorator></decorator>"));
191     }
192 
193     mixin(H5Def!"del");
194     unittest { 
195         assert(Assert(H5.del, "<del></del>"));
196     }
197 
198     mixin(H5Def!"details");
199     unittest { 
200         assert(Assert(H5.details, "<details></details>"));
201     }
202 
203     mixin(H5Def!"dfn");
204     unittest { 
205         assert(Assert(H5.dfn, "<dfn></dfn>"));
206     }
207 
208     mixin(H5Def!"dialog");
209     unittest { 
210         assert(Assert(H5.dialog, "<dialog></dialog>"));
211     }
212 
213     mixin(H5Def!"div");
214     unittest { 
215         assert(Assert(H5.div, "<div></div>"));
216     }
217 
218     mixin(H5Def!"dl");
219     unittest { 
220         assert(Assert(H5.dl, "<dl></dl>"));
221     }
222 
223     mixin(H5Def!"dt");
224     unittest { 
225         assert(Assert(H5.dt, "<dt></dt>"));
226     }
227 
228     mixin(H5Def!"element");
229     unittest { 
230         assert(Assert(H5.element, "<element></element>"));
231     }
232 
233     mixin(H5Def!"em");
234     unittest { 
235         assert(Assert(H5.em, "<em></em>"));
236     }
237 
238     mixin(H5Def!"embed");
239     unittest { 
240         assert(Assert(H5.embed, "<embed></embed>"));
241     }
242 
243     mixin(H5Def!"fieldset");
244     unittest { 
245         assert(Assert(H5.fieldset, "<fieldset></fieldset>"));
246     }
247 
248     mixin(H5Def!"figcaption");
249     unittest { 
250         assert(Assert(H5.figcaption, "<figcaption></figcaption>"));
251     }
252 
253     mixin(H5Def!"figure");
254     unittest { 
255         assert(Assert(H5.figure, "<figure></figure>"));
256     }
257 
258     mixin(H5Def!"footer");
259     unittest { 
260         assert(Assert(H5.footer, "<footer></footer>"));
261     }
262 
263     mixin(H5Def!"form");
264     unittest { 
265         assert(Assert(H5.form, "<form></form>"));
266     }
267 
268     mixin(H5Def!"h1");
269     unittest { 
270         assert(Assert(H5.h1, "<h1></h1>"));
271     }
272 
273     mixin(H5Def!"h2");
274     unittest { 
275         assert(Assert(H5.h2, "<h2></h2>"));
276     }
277 
278     mixin(H5Def!"h3");
279     unittest { 
280         assert(Assert(H5.h3, "<h3></h3>"));
281     }
282 
283     mixin(H5Def!"h4");
284     unittest { 
285         assert(Assert(H5.h4, "<h4></h4>"));
286     }
287 
288     mixin(H5Def!"h5");
289     unittest { 
290         assert(Assert(H5.h5, "<h5></h5>"));
291     }
292 
293     mixin(H5Def!"h6");
294     unittest { 
295         assert(Assert(H5.h6, "<h6></h6>"));
296     }
297 
298     mixin(H5Def!"head");
299     unittest { 
300         assert(Assert(H5.head, "<head></head>"));
301     }
302 
303     mixin(H5Def!"header");
304     unittest { 
305         assert(Assert(H5.header, "<header></header>"));
306     }
307 
308     mixin(H5Def!"hr");
309     unittest { 
310         assert(Assert(H5.hr, "<hr></hr>"));
311     }
312 
313     mixin(H5Def!"html");
314     unittest { 
315         assert(Assert(H5.html, "<!doctype html><html><head></head><body></body></html>"));
316     }
317 
318     mixin(H5Def!"i");
319     unittest { 
320         assert(Assert(H5.i, "<i></i>"));
321     }
322 
323     mixin(H5Def!"iframe");
324     unittest { 
325         assert(Assert(H5.iframe, "<iframe></iframe>"));
326     }
327 
328     mixin(H5Def!"img");
329     unittest { 
330         assert(Assert(H5.img, "<img>"));
331     }
332 
333     mixin(H5Def!"input");
334     unittest { 
335         assert(Assert(H5.input, "<input>"));
336     }
337 
338     mixin(H5Def!"ins");
339     unittest { 
340         assert(Assert(H5.ins, "<ins></ins>"));
341     }
342 
343     mixin(H5Def!"kbd");
344     unittest { 
345         assert(Assert(H5.kbd, "<kbd></kbd>"));
346     }
347 
348     mixin(H5Def!"keygen");
349     unittest { 
350         assert(Assert(H5.keygen, "<keygen></keygen>"));
351     }
352 
353     mixin(H5Def!"label");
354     unittest { 
355         assert(Assert(H5.label, "<label></label>"));
356     }
357 
358     mixin(H5Def!"legend");
359     unittest { 
360         assert(Assert(H5.legend, "<legend></legend>"));
361     }
362 
363     mixin(H5Def!"li");
364     unittest { 
365         assert(Assert(H5.li, "<li></li>"));
366     }
367 
368     mixin(H5Def!"link");
369     unittest { 
370         assert(Assert(H5.link, "<link>"));
371     }
372 
373     mixin(H5Def!"list");
374     unittest { 
375         assert(Assert(H5.list, "<list></list>"));
376     }
377 
378     // mixin(H5Def!"main");
379 auto main_(this O)(string content) { _objs ~=  H5Main(content); return cast(O)this; }
380 auto main_(this O)(DH5Obj[] content...) { _objs ~=  H5Main(content); return cast(O)this; }
381 auto main_(this O)(DH5 content) { _objs ~=  H5Main(content); return cast(O)this; }
382 
383 auto main_(this O)(string id, string content) { _objs ~=  H5Main(id, content); return cast(O)this; }
384 auto main_(this O)(string id, DH5Obj[] content...) { _objs ~=  H5Main(id, content); return cast(O)this; }
385 auto main_(this O)(string id, DH5 content) { _objs ~=  H5Main(id, content); return cast(O)this; }
386 
387 auto main_(this O)(string id, string[] classes) { _objs ~=  H5Main(id, classes); return cast(O)this; }
388 auto main_(this O)(string id, string[] classes, string content) { _objs ~=  H5Main(id, classes, content); return cast(O)this; }
389 auto main_(this O)(string id, string[] classes, DH5Obj[] content...) { _objs ~=  H5Main(id, classes, content); return cast(O)this; }
390 auto main_(this O)(string id, string[] classes, DH5 content) { _objs ~=  H5Main(id, classes, content); return cast(O)this; }
391 
392 auto main_(this O)(string[] classes) { _objs ~=  H5Main(classes); return cast(O)this; }
393 auto main_(this O)(string content) { _objs ~=  H5Main(classes, content); return cast(O)this; }
394 auto main_(this O)(string[] classes,string[] classes,  DH5Obj[] content...) { _objs ~=  H5Main(classes, content); return cast(O)this; }
395 auto main_(this O)(string[] classes, DH5 content) { _objs ~=  H5Main(classes, content); return cast(O)this; }
396 
397 auto main_(this O)(string[string] attributes) { _objs ~=  H5Main(attributes); return cast(O)this; }
398 auto main_(this O)(string[string] attributes, string content) { _objs ~=  H5Main(attributes, content); return cast(O)this; }
399 auto main_(this O)(string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Main(attributes, content); return cast(O)this; }
400 auto main_(this O)(string[string] attributes, DH5 content) { _objs ~=  H5Main(attributes, content); return cast(O)this; }
401 
402 auto main_(this O)(string id, string[string] attributes) { _objs ~=  H5Main(id, attributes); return cast(O)this; }
403 auto main_(this O)(string id, string[string] attributes, string content) { _objs ~=  H5Main(id, attributes, content); return cast(O)this; }
404 auto main_(this O)(string id, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Main(id, attributes, content); return cast(O)this; }
405 auto main_(this O)(string id, string[string] attributes, DH5 content) { _objs ~=  H5Main(id, attributes, content); return cast(O)this; }
406 
407 auto main_(this O)(string id, string[] classes, string[string] attributes) { _objs ~=  H5Main(id, classes, attributes); return cast(O)this; }
408 auto main_(this O)(string id, string[] classes, string[string] attributes, string content) { _objs ~=  H5Main(id, classes, attributes, content); return cast(O)this; }
409 auto main_(this O)(string id, string[] classes, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Main(id, classes, attributes, content); return cast(O)this; }
410 auto main_(this O)(string id, string[] classes, string[string] attributes, DH5 content) { _objs ~=  H5Main(id, classes, attributes, content); return cast(O)this; }
411 
412     unittest { 
413         assert(Assert(H5.main_, "<main></main>"));
414     }
415 
416     mixin(H5Def!"map");
417     unittest { 
418         assert(Assert(H5.map, "<map></map>"));
419     }
420 
421     mixin(H5Def!"mark");
422     unittest { 
423         assert(Assert(H5.mark, "<mark></mark>"));
424     }
425 
426     mixin(H5Def!"math");
427     unittest { 
428         assert(Assert(H5.math, "<math></math>"));
429     }
430 
431     mixin(H5Def!"menu");
432     unittest { 
433         assert(Assert(H5.menu, "<menu></menu>"));
434     }
435 
436     mixin(H5Def!"menuitem");
437     unittest { 
438         assert(Assert(H5.menuitem, "<menuitem></menuitem>"));
439     }
440 
441     mixin(H5Def!"meta");
442     unittest { 
443         assert(Assert(H5.meta, "<meta>"));
444     }
445 
446     mixin(H5Def!"meter");
447     unittest { 
448         assert(Assert(H5.meter, "<meter></meter>"));
449     }
450 
451     mixin(H5Def!"nav");
452     unittest { 
453         assert(Assert(H5.nav, "<nav></nav>"));
454     }
455 
456     mixin(H5Def!"noscript");
457     unittest { 
458         assert(Assert(H5.noscript, "<noscript></noscript>"));
459     }
460 
461     mixin(H5Def!"object");
462     unittest { 
463         assert(Assert(H5.object, "<object></object>"));
464     }
465 
466     mixin(H5Def!"ol");
467     unittest { 
468         assert(Assert(H5.ol, "<ol></ol>"));
469     }
470 
471     mixin(H5Def!"optgroup");
472     unittest { 
473         assert(Assert(H5.optgroup, "<optgroup></optgroup>"));
474     }
475 
476     mixin(H5Def!"option");
477     unittest { 
478         assert(Assert(H5.option, "<option></option>"));
479     }
480 
481     mixin(H5Def!"output");
482     unittest { 
483         assert(Assert(H5.output, "<output></output>"));
484     }
485 
486     mixin(H5Def!"p");
487     unittest { 
488         assert(Assert(H5.p, "<p></p>"));
489     }
490 
491     mixin(H5Def!"param");
492     unittest { 
493         assert(Assert(H5.param, "<param></param>"));
494     }
495 
496     mixin(H5Def!"picture");
497     unittest { 
498         assert(Assert(H5.picture, "<picture></picture>"));
499     }
500 
501     mixin(H5Def!"pre");
502     unittest { 
503         assert(Assert(H5.pre, "<pre></pre>"));
504     }
505 
506     mixin(H5Def!"progress");
507     unittest { 
508         assert(Assert(H5.progress, "<progress></progress>"));
509     }
510 
511     mixin(H5Def!"q");
512     unittest { 
513         assert(Assert(H5.q, "<q></q>"));
514     }
515 
516     mixin(H5Def!"rbc");
517     unittest { 
518         assert(Assert(H5.rbc, "<rbc></rbc>"));
519     }
520 
521     mixin(H5Def!"rp");
522     unittest { 
523         assert(Assert(H5.rp, "<rp></rp>"));
524     }
525 
526     mixin(H5Def!"rt");
527     unittest { 
528         assert(Assert(H5.rt, "<rt></rt>"));
529     }
530 
531    mixin(H5Def!"rtc");
532     unittest { 
533         assert(Assert(H5.rtc, "<rtc></rtc>"));
534     }
535 
536     mixin(H5Def!"ruby");
537     unittest { 
538         assert(Assert(H5.ruby, "<ruby></ruby>"));
539     }
540 
541     mixin(H5Def!"s");
542     unittest { 
543         assert(Assert(H5.s, "<s></s>"));
544     }
545 
546     mixin(H5Def!"samp");
547     unittest { 
548         assert(Assert(H5.samp, "<samp></samp>"));
549     }
550 
551     mixin(H5Def!"script");
552     unittest { 
553         assert(Assert(H5.script, "<script></script>"));
554     }
555 
556     mixin(H5Def!"section");
557     unittest { 
558         assert(Assert(H5.section, "<section></section>"));
559     }
560 
561     mixin(H5Def!"select");
562     unittest { 
563         assert(Assert(H5.script, "<script></script>"));
564     }
565 
566     mixin(H5Def!"shadow");
567     unittest { 
568         assert(Assert(H5.shadow, "<shadow></shadow>"));
569     }
570 
571 /*     mixin(H5Def!"slot");
572     unittest { 
573         assert(Assert(H5.slot, "<slot></slot>"));
574     }
575  */
576     mixin(H5Def!"small");
577     unittest { 
578         assert(Assert(H5.small, "<small></small>"));
579     }
580 
581     mixin(H5Def!"source");
582     unittest { 
583         assert(Assert(H5.source, "<source></source>"));
584     }
585 
586     mixin(H5Def!"span");
587     unittest { 
588         assert(Assert(H5.span, "<span></span>"));
589     }
590 
591     mixin(H5Def!"strong");
592     unittest { 
593         assert(Assert(H5.strong, "<strong></strong>"));
594     }
595 
596     mixin(H5Def!"style");
597     unittest { 
598         assert(Assert(H5.style, "<style></style>"));
599     }
600 
601     mixin(H5Def!"sub");
602     unittest { 
603         assert(Assert(H5.sub, "<sub></sub>"));
604     }
605 
606     mixin(H5Def!"summary");
607     unittest { 
608         assert(Assert(H5.summary, "<summary></summary>"));
609     }
610 
611     mixin(H5Def!"sup");
612     unittest { 
613         assert(Assert(H5.sup, "<sup></sup>"));
614     }
615 
616     mixin(H5Def!"svg");
617     unittest { 
618         assert(Assert(H5.svg, "<svg></svg>"));
619     }
620 
621     mixin(H5Def!"table");
622     unittest { 
623         assert(Assert(H5.table, "<table></table>"));
624     }
625 
626     mixin(H5Def!"tbody");
627     unittest { 
628         assert(Assert(H5.tbody, "<tbody></tbody>"));
629     }
630 
631     mixin(H5Def!"td");
632     unittest { 
633         assert(Assert(H5.td, "<td></td>"));
634     }
635 
636     // mixin(H5Def!"template");
637 auto template_(this O)(string content) { _objs ~=  H5Template(content); return cast(O)this; }
638 auto template_(this O)(DH5Obj[] content...) { _objs ~=  H5Template(content); return cast(O)this; }
639 auto template_(this O)(DH5 content) { _objs ~=  H5Template(content); return cast(O)this; }
640 
641 auto template_(this O)(string id, string content) { _objs ~=  H5Template(id, content); return cast(O)this; }
642 auto template_(this O)(string id, DH5Obj[] content...) { _objs ~=  H5Template(id, content); return cast(O)this; }
643 auto template_(this O)(string id, DH5 content) { _objs ~=  H5Template(id, content); return cast(O)this; }
644 
645 auto template_(this O)(string id, string[] classes) { _objs ~=  H5Template(id, classes); return cast(O)this; }
646 auto template_(this O)(string id, string[] classes, string content) { _objs ~=  H5Template(id, classes, content); return cast(O)this; }
647 auto template_(this O)(string id, string[] classes, DH5Obj[] content...) { _objs ~=  H5Template(id, classes, content); return cast(O)this; }
648 auto template_(this O)(string id, string[] classes, DH5 content) { _objs ~=  H5Template(id, classes, content); return cast(O)this; }
649 
650 auto template_(this O)(string[] classes) { _objs ~=  H5Template(classes); return cast(O)this; }
651 auto template_(this O)(string[] classes, string content) { _objs ~=  H5Template(classes, content); return cast(O)this; }
652 auto template_(this O)(string[] classes, DH5Obj[] content...) { _objs ~=  H5Template(classes, content); return cast(O)this; }
653 auto template_(this O)(string[] classes, DH5 content) { _objs ~=  H5Template(classes, content); return cast(O)this; }
654 
655 auto template_(this O)(string[string] attributes) { _objs ~=  H5Template(attributes); return cast(O)this; }
656 auto template_(this O)(string[string] attributes, string content) { _objs ~=  H5Template(attributes, content); return cast(O)this; }
657 auto template_(this O)(string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Template(attributes, content); return cast(O)this; }
658 auto template_(this O)(string[string] attributes, DH5 content) { _objs ~=  H5Template(attributes, content); return cast(O)this; }
659 
660 auto template_(this O)(string id, string[string] attributes) { _objs ~=  H5Template(id, attributes); return cast(O)this; }
661 auto template_(this O)(string id, string[string] attributes, string content) { _objs ~=  H5Template(id, attributes, content); return cast(O)this; }
662 auto template_(this O)(string id, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Template(id, attributes, content); return cast(O)this; }
663 auto template_(this O)(string id, string[string] attributes, DH5 content) { _objs ~=  H5Template(id, attributes, content); return cast(O)this; }
664 
665 auto template_(this O)(string id, string[] classes, string[string] attributes) { _objs ~=  H5Template(id, classes, attributes); return cast(O)this; }
666 auto template_(this O)(string id, string[] classes, string[string] attributes, string content) { _objs ~=  H5Template(id, classes, attributes, content); return cast(O)this; }
667 auto template_(this O)(string id, string[] classes, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5Template(id, classes, attributes, content); return cast(O)this; }
668 auto template_(this O)(string id, string[] classes, string[string] attributes, DH5 content) { _objs ~=  H5Template(id, classes, attributes, content); return cast(O)this; }
669 
670     unittest { 
671         assert(Assert(H5.template_, "<template></template>"));
672     }
673 
674     mixin(H5Def!"textarea");
675     unittest { 
676         assert(Assert(H5.textarea, "<textarea></textarea>"));
677     }
678 
679     mixin(H5Def!"tfoot");
680     unittest { 
681         assert(Assert(H5.tfoot, "<tfoot></tfoot>"));
682     }
683 
684     mixin(H5Def!"th");
685     unittest { 
686         assert(Assert(H5.th, "<th></th>"));
687     }
688 
689     mixin(H5Def!"thead");
690     unittest { 
691         assert(Assert(H5.thead, "<thead></thead>"));
692     }
693 
694     mixin(H5Def!"title");
695     unittest { 
696         assert(Assert(H5.title, "<title></title>"));
697     }
698 
699     mixin(H5Def!"tr");
700     unittest { 
701         assert(Assert(H5.tr, "<tr></tr>"));
702     }
703 
704     mixin(H5Def!"track");
705     unittest { 
706         assert(Assert(H5.track, "<track></track>"));
707     }
708 
709     mixin(H5Def!"u");
710     unittest { 
711         assert(Assert(H5.u, "<u></u>"));
712     }
713 
714     mixin(H5Def!"ul");
715     unittest { 
716         assert(Assert(H5.ul, "<ul></ul>"));
717     }
718 
719     mixin(H5Def!"var");
720     unittest { 
721         assert(Assert(H5.var, "<var></var>"));
722     }
723 
724     mixin(H5Def!"video");
725     unittest { 
726         assert(Assert(H5.video, "<video></video>"));
727     }
728 
729     mixin(H5Def!"wbr");
730     unittest { 
731         assert(Assert(H5.wbr, "<wbr></wbr>"));
732     }
733 
734     bool opEquals(string text) { return (text == toString); }
735     override string toString() {
736         string result;
737         foreach(h; _objs) result ~= h.toString;
738         return result;
739     }
740  }    
741 auto H5() { return new DH5(); }
742 
743 template H5Def(string name) {		
744 	const char[] H5Def = "
745 O "~name.toLower~"(this O)(string content) { _objs ~=  H5"~name.toLower.capitalize~"(content); return cast(O)this; }
746 O "~name.toLower~"(this O)(DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(content); return cast(O)this; }
747 O "~name.toLower~"(this O)(DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(content); return cast(O)this; }
748 
749 O "~name.toLower~"(this O)(string id, string content) { _objs ~=  H5"~name.toLower.capitalize~"(id, content); return cast(O)this; }
750 O "~name.toLower~"(this O)(string id, DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(id, content); return cast(O)this; }
751 O "~name.toLower~"(this O)(string id, DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(id, content); return cast(O)this; }
752 
753 O "~name.toLower~"(this O)(string id, string[] classes) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes); return cast(O)this; }
754 O "~name.toLower~"(this O)(string id, string[] classes, string content) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes, content); return cast(O)this; }
755 O "~name.toLower~"(this O)(string id, string[] classes, DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes, content); return cast(O)this; }
756 O "~name.toLower~"(this O)(string id, string[] classes, DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes, content); return cast(O)this; }
757 
758 O "~name.toLower~"(this O)(string[] classes) { _objs ~=  H5"~name.toLower.capitalize~"(classes); return cast(O)this; }
759 O "~name.toLower~"(this O)(string[] classes, string content) { _objs ~=  H5"~name.toLower.capitalize~"(classes, content); return cast(O)this; }
760 O "~name.toLower~"(this O)(string[] classes, DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(classes, content); return cast(O)this; }
761 O "~name.toLower~"(this O)(string[] classes, DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(classes, content); return cast(O)this; }
762 
763 O "~name.toLower~"(this O)(string[string] attributes) { _objs ~=  H5"~name.toLower.capitalize~"(attributes); return cast(O)this; }
764 O "~name.toLower~"(this O)(string[string] attributes, string content) { _objs ~=  H5"~name.toLower.capitalize~"(attributes, content); return cast(O)this; }
765 O "~name.toLower~"(this O)(string[string] attributes, DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(attributes, content); return cast(O)this; }
766 O "~name.toLower~"(this O)(string[string] attributes, DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(attributes, content); return cast(O)this; }
767 
768 O "~name.toLower~"(this O)(string id, string[string] attributes) { _objs ~=  H5"~name.toLower.capitalize~"(id, attributes); return cast(O)this; }
769 O "~name.toLower~"(this O)(string id, string[string] attributes, string content) { _objs ~=  H5"~name.toLower.capitalize~"(id, attributes, content); return cast(O)this; }
770 O "~name.toLower~"(this O)(string id, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(id, attributes, content); return cast(O)this; }
771 O "~name.toLower~"(this O)(string id, string[string] attributes, DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(id, attributes, content); return cast(O)this; }
772 
773 O "~name.toLower~"(this O)(string id, string[] classes, string[string] attributes) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes, attributes); return cast(O)this; }
774 O "~name.toLower~"(this O)(string id, string[] classes, string[string] attributes, string content) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes, attributes, content); return cast(O)this; }
775 O "~name.toLower~"(this O)(string id, string[] classes, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes, attributes, content); return cast(O)this; }
776 O "~name.toLower~"(this O)(string id, string[] classes, string[string] attributes, DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(id, classes, attributes, content); return cast(O)this; }
777 
778 O "~name.toLower~"(this O)(string[] classes, string[string] attributes) { _objs ~=  H5"~name.toLower.capitalize~"(classes, attributes); return cast(O)this; }
779 O "~name.toLower~"(this O)(string[] classes, string[string] attributes, string content) { _objs ~=  H5"~name.toLower.capitalize~"(classes, attributes, content); return cast(O)this; }
780 O "~name.toLower~"(this O)(string[] classes, string[string] attributes, DH5Obj[] content...) { _objs ~=  H5"~name.toLower.capitalize~"(classes, attributes, content); return cast(O)this; }
781 O "~name.toLower~"(this O)(string[] classes, string[string] attributes, DH5 content) { _objs ~=  H5"~name.toLower.capitalize~"(classes, attributes, content); return cast(O)this; }
782  ";
783 }