OSDN Git Service

web/html_tags.hpp: 各タグ名の定義を追加, ROAST_HTML_DECL_ATTR() マクロを追加し、これによりタグを定義
authorMyun2 <myun2@nwhite.info>
Fri, 24 Dec 2010 00:04:40 +0000 (09:04 +0900)
committerMyun2 <myun2@nwhite.info>
Fri, 24 Dec 2010 00:04:40 +0000 (09:04 +0900)
roast/include/roast/web/html_tags.hpp

index 3e2e200..585ea47 100644 (file)
@@ -17,6 +17,8 @@ namespace roast
        {
                namespace tag
                {
+                       /////////////////////////////////////////////////////////////////////
+
                        using namespace ::roast::lexical::rule;
                        using namespace ::roast::roast_xml::rule;
 
@@ -32,41 +34,108 @@ namespace roast
                        //struct _str_attr {};// : xml::name_static_attr<_Name, T>
                        struct _str_attr : ::roast::roast_xml::rule::attr_<_Name, T> {};
 
+#define ROAST_HTML_STR_DEF(TAGNAME)            ROAST_LEXICAL_FIXSTR(TAGNAME,#TAGNAME)
+#define ROAST_HTML_DECL_ATTR(ATTRNAME) \
+               private: ROAST_HTML_STR_DEF(_str_##ATTRNAME);   \
+               public: template <typename T> struct ATTRNAME : _str_attr<_str_##ATTRNAME, T> {};
+
                        //////////////////////////////
 
                        struct _tagname_str
                        {
-#define ROAST_HTML_STR_DEF(TAGNAME)    ROAST_LEXICAL_FIXSTR(TAGNAME,#TAGNAME)
+                               //      a-d
                                ROAST_HTML_STR_DEF(a)
+                               ROAST_HTML_STR_DEF(b)
+                               ROAST_HTML_STR_DEF(big)
+                               ROAST_HTML_STR_DEF(body)
+                               ROAST_HTML_STR_DEF(br)
+                               ROAST_HTML_STR_DEF(blockquote)
+                               ROAST_HTML_STR_DEF(button)
+                               ROAST_HTML_STR_DEF(center)
+                               ROAST_HTML_STR_DEF(dd)
+                               ROAST_HTML_STR_DEF(div)
+                               ROAST_HTML_STR_DEF(dl)
+                               ROAST_HTML_STR_DEF(dt)
+                               
+                               //      e-i
+                               ROAST_HTML_STR_DEF(embed)
+                               ROAST_HTML_STR_DEF(form)
+                               ROAST_HTML_STR_DEF(frame)
+                               ROAST_HTML_STR_DEF(frameset)
+                               ROAST_HTML_STR_DEF(h)
                                ROAST_HTML_STR_DEF(head)
+                               ROAST_HTML_STR_DEF(hr)
                                ROAST_HTML_STR_DEF(html)
+                               ROAST_HTML_STR_DEF(i)
+                               ROAST_HTML_STR_DEF(iframe)
                                ROAST_HTML_STR_DEF(img)
+                               ROAST_HTML_STR_DEF(input)
+                               
+                               //      l-p
+                               ROAST_HTML_STR_DEF(li)
+                               ROAST_HTML_STR_DEF(meta)
+                               ROAST_HTML_STR_DEF(noembed)
+                               ROAST_HTML_STR_DEF(ol)
+                               ROAST_HTML_STR_DEF(option)
+                               ROAST_HTML_STR_DEF(p)
+                               ROAST_HTML_STR_DEF(plaintext)
+                               ROAST_HTML_STR_DEF(pre)
+                               
+                               //      r
+                               ROAST_HTML_STR_DEF(rb)
+                               ROAST_HTML_STR_DEF(rp)
+                               ROAST_HTML_STR_DEF(rt)
+                               ROAST_HTML_STR_DEF(ruby)
+                               
+                               //      s
+                               ROAST_HTML_STR_DEF(s)
+                               ROAST_HTML_STR_DEF(script)
+                               ROAST_HTML_STR_DEF(select)
+                               ROAST_HTML_STR_DEF(small)
+                               ROAST_HTML_STR_DEF(span)
+                               ROAST_HTML_STR_DEF(strike)
+                               ROAST_HTML_STR_DEF(strong)
+                               ROAST_HTML_STR_DEF(style)
+                               
+                               //      t
+                               ROAST_HTML_STR_DEF(table)
+                               ROAST_HTML_STR_DEF(td)
+                               ROAST_HTML_STR_DEF(textarea)
+                               ROAST_HTML_STR_DEF(th)
+                               ROAST_HTML_STR_DEF(title)
+                               ROAST_HTML_STR_DEF(tr)
+                               
+                               //      u-z
+                               ROAST_HTML_STR_DEF(ul)
+                               ROAST_HTML_STR_DEF(xmp)
                        };
+                       
+                       /////////////////////////////////////////////////////////////////////
 
                        template <typename _Attrs=no_attrs, typename _Inners=no_inner>
                        struct a_ : public _tagbase<_tagname_str::a, _Attrs, _Inners>
                        {
                                struct attr
                                {
-                               private:
-                                       struct str
-                                       {
-                                               ROAST_HTML_STR_DEF(href);
-                                       };
-                               public:
-                                       template <typename T> struct href : _str_attr<typename str::href, T> {};
+                                       ROAST_HTML_DECL_ATTR(href);
                                };
                        };
                        typedef a_<> a;
 
 
                        template <typename _Attrs=no_attrs, typename _Inners=no_inner>
-                       struct body_ : public _base<_Attrs, _Inners>
+                       struct b_ : public _tagbase<_tagname_str::b, _Attrs, _Inners>
+                       {
+                       };
+                       typedef b_<> b;
+
+
+                       template <typename _Attrs=no_attrs, typename _Inners=no_inner>
+                       struct body_ : public _tagbase<_tagname_str::body, _Attrs, _Inners>
                        {
                        };
                        typedef body_<> body;
 
-                       
 
                        template <typename _Attrs=no_attrs, typename _Inners=no_inner>
                        struct head_ : public _tagbase<_tagname_str::head, _Attrs, _Inners>
@@ -87,13 +156,7 @@ namespace roast
                        {
                                struct attr
                                {
-                               private:
-                                       struct str
-                                       {
-                                               ROAST_HTML_STR_DEF(src);
-                                       };
-                               public:
-                                       template <typename T> struct src : _str_attr<typename str::src, T> {};
+                                       ROAST_HTML_DECL_ATTR(src);
                                };
                        };
                        typedef img_<> img;