--- /dev/null
+// Roast+ License
+
+/*
+*/
+#ifndef __SFJP_ROAST__xml__sgml__sgml_HPP__
+#define __SFJP_ROAST__xml__sgml__sgml_HPP__
+
+#include "roast/lexical.hpp"
+
+namespace roast
+{
+ namespace sgml
+ {
+ namespace rule
+ {
+ /////////////////////////////////////////////////////
+
+ namespace chars
+ {
+ using namespace ::roast::lexical::chars;
+ }
+
+ /////////
+
+ /*
+ // _angle_bracket
+ template <typename _Body>
+ typedef seq<
+ lexical::chars::langle, // '<'
+ _Body, // _Body
+ lexical::chars::rangle // >
+ > _angle_bracket;
+ */
+
+ ////
+
+ // tag
+ template <typename _TagName, typename _Attributes=EmtpyType>
+ typedef _angle_bracket< seq<
+ lexical::chars::langle, // '<'
+ _TagName, // _TagName
+ lexical::whitespace, // ' '
+ _Attributes, // _Attributes
+ lexical::optws
+ > > tag;
+
+ // close_tag
+ template <typename _TagName>
+ typedef _angle_bracket< seq<
+ lexical::chars::slash, // '/'
+ _TagNam, // _TagName
+ lexical::optws
+ > > close_tag;
+
+ // emtpy_tag
+ template <typename _TagName>
+ typedef _angle_bracket< seq<
+ _TagNam, // _TagName
+ lexical::optws,
+ lexical::chars::slash // '/'
+ > > emtpy_tag;
+
+ // attribute_rule
+ template <typename _AttrName, typename _AttrValue>
+ typedef seq<_AttrName, _AttrValue> attribute_rule;
+
+ /////////////////////////////////////////////////////
+ }
+ }
+}
+
+#endif//__SFJP_ROAST__xml__sgml__sgml_HPP__