summaryrefslogtreecommitdiff
path: root/doc/xml2rfc
diff options
context:
space:
mode:
authorAaron Stone <astone@sixapart.com>2008-04-17 07:22:51 +0000
committerAaron Stone <astone@sixapart.com>2008-04-27 16:37:47 -0700
commitf5e4d26de94b97bc484c797ed6a5c87c02e7df71 (patch)
treefa2238376a42e7df72999c7dbf8b84f15121b0d6 /doc/xml2rfc
parentf1351f9bbaae4fd923722f5563843f5d1c54a5f7 (diff)
downloadmemcached-f5e4d26de94b97bc484c797ed6a5c87c02e7df71.tar.gz
Rearrange the binary protocol docs and xml2rfc tools.
git-svn-id: http://code.sixapart.com/svn/memcached/branches/binary@776 b0b603af-a30f-0410-a34e-baf09ae79d0b
Diffstat (limited to 'doc/xml2rfc')
-rw-r--r--doc/xml2rfc/reference.RFC.0768.xml22
-rw-r--r--doc/xml2rfc/rfc2629-noinc.xsl106
-rw-r--r--doc/xml2rfc/rfc2629-other.ent61
-rw-r--r--doc/xml2rfc/rfc2629-refchk.xsl81
-rw-r--r--doc/xml2rfc/rfc2629-xhtml.ent165
-rw-r--r--doc/xml2rfc/rfc2629.dtd304
6 files changed, 739 insertions, 0 deletions
diff --git a/doc/xml2rfc/reference.RFC.0768.xml b/doc/xml2rfc/reference.RFC.0768.xml
new file mode 100644
index 0000000..4452c34
--- /dev/null
+++ b/doc/xml2rfc/reference.RFC.0768.xml
@@ -0,0 +1,22 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<reference anchor='RFC0768'>
+
+<front>
+<title>User Datagram Protocol</title>
+<author initials='J.' surname='Postel' fullname='J. Postel'>
+<organization>University of Southern California (USC)/Information Sciences Institute</organization>
+<address>
+<postal>
+<street>4676 Admiralty Way</street>
+<city>Marina del Rey</city>
+<region>CA</region>
+<code>90291</code>
+<country>US</country></postal>
+<phone>+1 213 822 1511</phone></address></author>
+<date year='1980' day='28' month='August' /></front>
+
+<seriesInfo name='STD' value='6' />
+<seriesInfo name='RFC' value='768' />
+<format type='TXT' octets='5896' target='ftp://ftp.isi.edu/in-notes/rfc768.txt' />
+</reference>
diff --git a/doc/xml2rfc/rfc2629-noinc.xsl b/doc/xml2rfc/rfc2629-noinc.xsl
new file mode 100644
index 0000000..99b73a8
--- /dev/null
+++ b/doc/xml2rfc/rfc2629-noinc.xsl
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+ <xsl:output method="xml"/>
+
+ <xsl:template name='noinc'>
+ <xsl:apply-templates mode='noinc'/>
+ </xsl:template>
+
+ <xsl:template match="*" mode='noinc'>
+ <xsl:copy>
+ <xsl:apply-templates select='@*' mode='noinc'/>
+ <xsl:apply-templates mode='noinc'/>
+ </xsl:copy>
+ </xsl:template>
+ <xsl:template match='@*' mode='noinc'>
+ <xsl:attribute name='{name()}'>
+ <xsl:value-of select='.'/>
+ </xsl:attribute>
+ </xsl:template>
+
+ <xsl:template match='processing-instruction("rfc")' mode='noinc'>
+ <xsl:choose>
+ <xsl:when test='substring-before(.,"=") = "include"'>
+ <xsl:call-template name='include-pi'>
+ <xsl:with-param name='include-href'>
+ <xsl:value-of select="translate( substring-after( ., '=' ), '&quot; ', '' )"/><xsl:text>.xml</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select='.'/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name='include-pi'>
+ <xsl:param name='include-href'/>
+ <xsl:apply-templates select="document( $include-href )" mode='noinc'/>
+ </xsl:template>
+
+ <xsl:template match='dwdrfc-ref' mode='noinc'>
+ <xsl:param name='include-href'>
+ <xsl:choose>
+ <xsl:when test='starts-with( @src, "http://" )'>
+ <xsl:value-of select='@src'/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>http://xml.resource.org/public/rfc/</xsl:text>
+ <xsl:value-of select='@src'/>
+ <xsl:text>.xml</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param>
+ <reference anchor="{@anchor}">
+ <xsl:apply-templates select="document( $include-href )" mode="refrename"/>
+ </reference>
+ </xsl:template>
+
+ <xsl:template match='*' mode='refrename'>
+ <xsl:apply-templates mode='refrename'/>
+ </xsl:template>
+
+ <xsl:template match='reference' mode='refrename'>
+ <xsl:apply-templates mode='noinc'/>
+ </xsl:template>
+
+ <xsl:template match='/'>
+ <xsl:call-template name='noinc'/>
+ </xsl:template>
+
+ <xsl:template name='output'>
+ <xsl:param name='foo'/>
+ <xsl:copy-of select='$foo'/>
+ <xsl:apply-templates select='$foo'/>
+ </xsl:template>
+
+ <xsl:template match='*' mode='output'>
+ <element>
+ <xsl:value-of select='name()'/>
+ <xsl:apply-templates mode='output'/>
+ </element>
+ </xsl:template>
+ <xsl:template match='text()' mode='output'/>
+
+ <!-- Reference checking attributes stripped here. -->
+ <xsl:template match='references' mode='noinc'>
+ <xsl:element name='references'>
+ <xsl:attribute name='title'>
+ <xsl:value-of select='@title'/>
+ </xsl:attribute>
+ <xsl:apply-templates mode='noinc'/>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match='xref' mode='noinc'>
+ <xsl:element name='xref'>
+ <xsl:attribute name='target'>
+ <xsl:value-of select='@target'/>
+ </xsl:attribute>
+ <xsl:apply-templates mode='noinc'/>
+ </xsl:element>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/xml2rfc/rfc2629-other.ent b/doc/xml2rfc/rfc2629-other.ent
new file mode 100644
index 0000000..0da80b7
--- /dev/null
+++ b/doc/xml2rfc/rfc2629-other.ent
@@ -0,0 +1,61 @@
+<!-- rfc2629-other.ent
+
+ Character entity set for RFC-2629 source xml documents.
+ There is no need to invoke this directly from
+ the source document itself; just invoke the DTD.
+
+ These are unknown to (X)HTML, so any converter to these
+ formats must either substitute these entities
+ or invoke this file from the output file.
+
+ Conversion to txt or nroff format will replace
+ these entities by the parenthesized text.
+
+ Typical invocation:
+ <!ENTITY % rfc2629-other
+ PUBLIC "-//IETF//ENTITIES Other for RFC 2629//EN"
+ "http://xml.resource.org/authoring/rfc2629-other.ent">
+ %rfc2629-other;
+-->
+
+<!-- Magical -->
+<!-- rfc.number (automatically expanded to content
+ of number="..." attribute
+ of <rfc> element, or to "XXXX") -->
+
+<!-- ASCII -->
+<!ENTITY excl "&#33;"><!-- U+0021 EXCLAMATION MARK ("!") -->
+<!ENTITY num "&#35;"><!-- U+0023 NUMBER SIGN ("#") -->
+<!ENTITY dollar "&#36;"><!-- U+0024 DOLLAR SIGN ("$") -->
+<!ENTITY percnt "&#37;"><!-- U+0025 PERCENT SIGN ("%") -->
+<!ENTITY lpar "&#40;"><!-- U+0028 LEFT PARENTHESIS ("(") -->
+<!ENTITY rpar "&#41;"><!-- U+0029 RIGHT PARENTHESIS (")") -->
+<!ENTITY ast "&#42;"><!-- U+002A ASTERISK ("*") -->
+<!ENTITY plus "&#43;"><!-- U+002B PLUS SIGN ("+") -->
+<!ENTITY comma "&#44;"><!-- U+002C COMMA (",") -->
+<!ENTITY hyphen "&#45;"><!-- U+002D HYPHEN-MINUS ("-") -->
+<!ENTITY period "&#46;"><!-- U+002E FULL STOP (".") -->
+<!ENTITY sol "&#47;"><!-- U+002F SOLIDUS ("/") -->
+<!ENTITY colon "&#58;"><!-- U+003A COLON (":") -->
+<!ENTITY semi "&#59;"><!-- U+003B SEMICOLON (";") -->
+<!ENTITY equals "&#61;"><!-- U+003D EQUALS SIGN ("=") -->
+<!ENTITY quest "&#63;"><!-- U+003F QUESTION MARK ("?") -->
+<!ENTITY commat "&#64;"><!-- U+0040 COMMERCIAL AT ("@") -->
+<!ENTITY lsqb "&#91;"><!-- U+005B LEFT SQUARE BRACKET ("[") -->
+<!ENTITY bsol "&#92;"><!-- U+005C REVERSE SOLIDUS ("\\") -->
+<!ENTITY rsqb "&#93;"><!-- U+005D RIGHT SQUARE BRACKET ("]") -->
+<!ENTITY circ "&#94;"><!-- U+005E CIRCUMFLEX ACCENT ("^") -->
+<!ENTITY lowbar "&#95;"><!-- U+005F LOW LINE ("_") -->
+<!ENTITY grave "&#96;"><!-- U+0060 GRAVE ACCENT ("`") -->
+<!ENTITY lcub "&#123;"><!-- U+007B LEFT CURLY BRACKET ("{") -->
+<!ENTITY verbar "&#124;"><!-- U+007C VERTICAL LINE ("|") -->
+<!ENTITY rcub "&#125;"><!-- U+007D RIGHT CURLY BRACKET ("}") -->
+
+<!-- Useful Unicode -->
+<!ENTITY Zcaron "&#381;"><!-- U+017D LATIN CAPITAL LETTER Z WITH CARON ("Z") -->
+<!ENTITY zcaron "&#382;"><!-- U+017E LATIN SMALL LETTER Z WITH CARON ("z") -->
+<!ENTITY dash "&#8208;"><!-- U+2010 HYPHEN ("-") -->
+<!ENTITY nbhy "&#8209;"><!-- U+2011 NON-BREAKING HYPHEN (special "-") -->
+<!ENTITY wj "&#8288;"><!-- U+2060 WORD JOINER (special "") -->
+
+<!-- EOF -->
diff --git a/doc/xml2rfc/rfc2629-refchk.xsl b/doc/xml2rfc/rfc2629-refchk.xsl
new file mode 100644
index 0000000..0cea58e
--- /dev/null
+++ b/doc/xml2rfc/rfc2629-refchk.xsl
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+ <xsl:output method="xml"/>
+
+ <xsl:template match='/'>
+ <refcheck>
+ <xsl:apply-templates select='//xref' mode='missing'/>
+ <xsl:apply-templates select='//reference' mode='orphans'/>
+ <xsl:apply-templates select='//references[@dwdrfc-type = "norm"]' mode='normcheck'/>
+ <xsl:apply-templates select='//xref[@dwdrfc-type = "norm"]' mode='normrefs'/>
+ </refcheck>
+ </xsl:template>
+
+ <xsl:template match='xref' mode='missing'>
+ <xsl:param name='refname'>
+ <xsl:value-of select='@target'/>
+ </xsl:param>
+ <xsl:param name='reftgt'>
+ <xsl:value-of select='//*[@anchor = $refname]/@anchor'/>
+ </xsl:param>
+ <xsl:choose>
+ <xsl:when test='$reftgt = $refname'/>
+ <xsl:otherwise>
+ <missing><xsl:value-of select='$refname'/></missing><xsl:text>
+ </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match='xref' mode='normrefs'>
+ <xsl:param name='refname'>
+ <xsl:value-of select='@target'/>
+ </xsl:param>
+ <xsl:param name='reftgt'>
+ <xsl:value-of select='//references[@dwdrfc-type = "norm"]/*[@anchor = $refname]/@anchor'/>
+ </xsl:param>
+ <xsl:choose>
+ <xsl:when test='$reftgt = $refname'/>
+ <xsl:otherwise>
+ <missing-norm><xsl:value-of select='$refname'/></missing-norm><xsl:text>
+ </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match='reference' mode='orphans'>
+ <xsl:param name='refname'>
+ <xsl:value-of select='@anchor'/>
+ </xsl:param>
+ <xsl:param name='reftgt'>
+ <xsl:value-of select='//xref[@target = $refname]/@target'/>
+ </xsl:param>
+ <xsl:if test='$reftgt != $refname'>
+ <orphan><xsl:value-of select='$refname'/></orphan><xsl:text>
+ </xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match='references' mode='normcheck'>
+ <xsl:apply-templates mode='normcheck'/>
+</xsl:template>
+
+<xsl:template match='*' mode='normcheck'>
+ <!-- Need to find at least one normative reference -->
+ <xsl:param name='refname'>
+ <xsl:value-of select='@anchor'/>
+ </xsl:param>
+ <xsl:param name='reftgt'>
+ <xsl:value-of select='//xref[@dwdrfc-type = "norm" and @target = $refname]/@target'/>
+ </xsl:param>
+ <xsl:if test='$refname != $reftgt'>
+ <normchk><xsl:value-of select='$refname'/></normchk><xsl:text>
+</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match='text()' mode='normcheck'/>
+
+</xsl:stylesheet>
diff --git a/doc/xml2rfc/rfc2629-xhtml.ent b/doc/xml2rfc/rfc2629-xhtml.ent
new file mode 100644
index 0000000..3d4a07d
--- /dev/null
+++ b/doc/xml2rfc/rfc2629-xhtml.ent
@@ -0,0 +1,165 @@
+<!-- rfc2629-xhtml.ent
+
+ Character entity set for RFC-2629 source xml documents.
+ There is no need to invoke this directly from
+ the source document itself; just invoke the DTD.
+
+ These are known to (X)HTML, so any converter to these
+ formats can just leave them as is without having
+ to invoke this file from the output file.
+
+ Conversion to txt or nroff format will replace
+ these entities by the parenthesized text.
+
+ Typical invocation:
+ <!ENTITY % rfc2629-xhtml
+ PUBLIC "-//IETF//ENTITIES XHTML subset for RFC 2629//EN"
+ "http://xml.resource.org/authoring/rfc2629-xhtml.ent">
+ %rfc2629-xhtml;
+-->
+
+<!-- All of ISO Latin 1 -->
+<!ENTITY nbsp "&#160;"><!-- U+00A0 NO-BREAK SPACE (special " ") -->
+<!ENTITY iexcl "&#161;"><!-- U+00A1 INVERTED EXCLAMATION MARK ("!") -->
+<!ENTITY cent "&#162;"><!-- U+00A2 CENT SIGN ("[cents]") -->
+<!ENTITY pound "&#163;"><!-- U+00A3 POUND SIGN ("GBP") -->
+<!ENTITY curren "&#164;"><!-- U+00A4 CURRENCY SIGN ("[currency units]") -->
+<!ENTITY yen "&#165;"><!-- U+00A5 YEN SIGN ("JPY") -->
+<!ENTITY brvbar "&#166;"><!-- U+00A6 BROKEN BAR ("|") -->
+<!ENTITY sect "&#167;"><!-- U+00A7 SECTION SIGN ("S.") -->
+<!ENTITY uml "&#168;"><!-- U+00A8 DIAERESIS ('"') -->
+<!ENTITY copy "&#169;"><!-- U+00A9 COPYRIGHT SIGN ("(C)") -->
+<!ENTITY ordf "&#170;"><!-- U+00AA FEMININE ORDINAL INDICATOR ("a") -->
+<!ENTITY laquo "&#171;"><!-- U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ("<<") -->
+<!ENTITY not "&#172;"><!-- U+00AC NOT SIGN ("[not]") -->
+<!ENTITY shy "&#173;"><!-- U+00AD SOFT HYPHEN (ignored "") -->
+<!ENTITY reg "&#174;"><!-- U+00AE REGISTERED SIGN ("(R)") -->
+<!ENTITY macr "&#175;"><!-- U+00AF MACRON ("_") -->
+<!ENTITY deg "&#176;"><!-- U+00B0 DEGREE SIGN ("o") -->
+<!ENTITY plusmn "&#177;"><!-- U+00B1 PLUS-MINUS SIGN ("+/-") -->
+<!ENTITY sup2 "&#178;"><!-- U+00B2 SUPERSCRIPT TWO ("^2") -->
+<!ENTITY sup3 "&#179;"><!-- U+00B3 SUPERSCRIPT THREE ("^3") -->
+<!ENTITY acute "&#180;"><!-- U+00B4 ACUTE ACCENT ("'") -->
+<!ENTITY micro "&#181;"><!-- U+00B5 MICRO SIGN ("[micro]") -->
+<!ENTITY para "&#182;"><!-- U+00B6 PILCROW SIGN ("P.") -->
+<!ENTITY middot "&#183;"><!-- U+00B7 MIDDLE DOT (".") -->
+<!ENTITY cedil "&#184;"><!-- U+00B8 CEDILLA (",") -->
+<!ENTITY sup1 "&#185;"><!-- U+00B9 SUPERSCRIPT ONE ("^1") -->
+<!ENTITY ordm "&#186;"><!-- U+00BA MASCULINE ORDINAL INDICATOR ("o") -->
+<!ENTITY raquo "&#187;"><!-- U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (">>") -->
+<!ENTITY frac14 "&#188;"><!-- U+00BC VULGAR FRACTION ONE QUARTER ("1/4") -->
+<!ENTITY frac12 "&#189;"><!-- U+00BD VULGAR FRACTION ONE HALF ("1/2") -->
+<!ENTITY frac34 "&#190;"><!-- U+00BE VULGAR FRACTION THREE QUARTERS ("3/4") -->
+<!ENTITY iquest "&#191;"><!-- U+00BF INVERTED QUESTION MARK ("?") -->
+<!ENTITY Agrave "&#192;"><!-- U+00C0 LATIN CAPITAL LETTER A WITH GRAVE ("A") -->
+<!ENTITY Aacute "&#193;"><!-- U+00C1 LATIN CAPITAL LETTER A WITH ACUTE ("A") -->
+<!ENTITY Acirc "&#194;"><!-- U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX ("A") -->
+<!ENTITY Atilde "&#195;"><!-- U+00C3 LATIN CAPITAL LETTER A WITH TILDE ("A") -->
+<!ENTITY Auml "&#196;"><!-- U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS ("Ae") -->
+<!ENTITY Aring "&#197;"><!-- U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE ("Ae") -->
+<!ENTITY AElig "&#198;"><!-- U+00C6 LATIN CAPITAL LETTER AE ("AE") -->
+<!ENTITY Ccedil "&#199;"><!-- U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA ("C") -->
+<!ENTITY Egrave "&#200;"><!-- U+00C8 LATIN CAPITAL LETTER E WITH GRAVE ("E") -->
+<!ENTITY Eacute "&#201;"><!-- U+00C9 LATIN CAPITAL LETTER E WITH ACUTE ("E") -->
+<!ENTITY Ecirc "&#202;"><!-- U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX ("E") -->
+<!ENTITY Euml "&#203;"><!-- U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS ("E") -->
+<!ENTITY Igrave "&#204;"><!-- U+00CC LATIN CAPITAL LETTER I WITH GRAVE ("I") -->
+<!ENTITY Iacute "&#205;"><!-- U+00CD LATIN CAPITAL LETTER I WITH ACUTE ("I") -->
+<!ENTITY Icirc "&#206;"><!-- U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX ("I") -->
+<!ENTITY Iuml "&#207;"><!-- U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS ("I") -->
+<!ENTITY ETH "&#208;"><!-- U+00D0 LATIN CAPITAL LETTER ETH ("[ETH]") -->
+<!ENTITY Ntilde "&#209;"><!-- U+00D1 LATIN CAPITAL LETTER N WITH TILDE ("N") -->
+<!ENTITY Ograve "&#210;"><!-- U+00D2 LATIN CAPITAL LETTER O WITH GRAVE ("O") -->
+<!ENTITY Oacute "&#211;"><!-- U+00D3 LATIN CAPITAL LETTER O WITH ACUTE ("O") -->
+<!ENTITY Ocirc "&#212;"><!-- U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX ("O") -->
+<!ENTITY Otilde "&#213;"><!-- U+00D5 LATIN CAPITAL LETTER O WITH TILDE ("O") -->
+<!ENTITY Ouml "&#214;"><!-- U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS ("Oe") -->
+<!ENTITY times "&#215;"><!-- U+00D7 MULTIPLICATION SIGN ("x") -->
+<!ENTITY Oslash "&#216;"><!-- U+00D8 LATIN CAPITAL LETTER O WITH STROKE ("Oe") -->
+<!ENTITY Ugrave "&#217;"><!-- U+00D9 LATIN CAPITAL LETTER U WITH GRAVE ("U") -->
+<!ENTITY Uacute "&#218;"><!-- U+00DA LATIN CAPITAL LETTER U WITH ACUTE ("U") -->
+<!ENTITY Ucirc "&#219;"><!-- U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX ("U") -->
+<!ENTITY Uuml "&#220;"><!-- U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS ("Ue") -->
+<!ENTITY Yacute "&#221;"><!-- U+00DD LATIN CAPITAL LETTER Y WITH ACUTE ("Y") -->
+<!ENTITY THORN "&#222;"><!-- U+00DE LATIN CAPITAL LETTER THORN ("[THORN]") -->
+<!ENTITY szlig "&#223;"><!-- U+00DF LATIN SMALL LETTER SHARP S ("ss") -->
+<!ENTITY agrave "&#224;"><!-- U+00E0 LATIN SMALL LETTER A WITH GRAVE ("a") -->
+<!ENTITY aacute "&#225;"><!-- U+00E1 LATIN SMALL LETTER A WITH ACUTE ("a") -->
+<!ENTITY acirc "&#226;"><!-- U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX ("a") -->
+<!ENTITY atilde "&#227;"><!-- U+00E3 LATIN SMALL LETTER A WITH TILDE ("a") -->
+<!ENTITY auml "&#228;"><!-- U+00E4 LATIN SMALL LETTER A WITH DIAERESIS ("ae") -->
+<!ENTITY aring "&#229;"><!-- U+00E5 LATIN SMALL LETTER A WITH RING ABOVE ("ae") -->
+<!ENTITY aelig "&#230;"><!-- U+00E6 LATIN SMALL LETTER AE ("ae") -->
+<!ENTITY ccedil "&#231;"><!-- U+00E7 LATIN SMALL LETTER C WITH CEDILLA ("c") -->
+<!ENTITY egrave "&#232;"><!-- U+00E8 LATIN SMALL LETTER E WITH GRAVE ("e") -->
+<!ENTITY eacute "&#233;"><!-- U+00E9 LATIN SMALL LETTER E WITH ACUTE ("e") -->
+<!ENTITY ecirc "&#234;"><!-- U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX ("e") -->
+<!ENTITY euml "&#235;"><!-- U+00EB LATIN SMALL LETTER E WITH DIAERESIS ("e") -->
+<!ENTITY igrave "&#236;"><!-- U+00EC LATIN SMALL LETTER I WITH GRAVE ("i") -->
+<!ENTITY iacute "&#237;"><!-- U+00ED LATIN SMALL LETTER I WITH ACUTE ("i") -->
+<!ENTITY icirc "&#238;"><!-- U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX ("i") -->
+<!ENTITY iuml "&#239;"><!-- U+00EF LATIN SMALL LETTER I WITH DIAERESIS ("i") -->
+<!ENTITY eth "&#240;"><!-- U+00F0 LATIN SMALL LETTER ETH ("[eth]") -->
+<!ENTITY ntilde "&#241;"><!-- U+00F1 LATIN SMALL LETTER N WITH TILDE ("n") -->
+<!ENTITY ograve "&#242;"><!-- U+00F2 LATIN SMALL LETTER O WITH GRAVE ("o") -->
+<!ENTITY oacute "&#243;"><!-- U+00F3 LATIN SMALL LETTER O WITH ACUTE ("o") -->
+<!ENTITY ocirc "&#244;"><!-- U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX ("o") -->
+<!ENTITY otilde "&#245;"><!-- U+00F5 LATIN SMALL LETTER O WITH TILDE ("o") -->
+<!ENTITY ouml "&#246;"><!-- U+00F6 LATIN SMALL LETTER O WITH DIAERESIS ("oe") -->
+<!ENTITY divide "&#247;"><!-- U+00F7 DIVISION SIGN ("/") -->
+<!ENTITY oslash "&#248;"><!-- U+00F8 LATIN SMALL LETTER O WITH STROKE ("oe") -->
+<!ENTITY ugrave "&#249;"><!-- U+00F9 LATIN SMALL LETTER U WITH GRAVE ("u") -->
+<!ENTITY uacute "&#250;"><!-- U+00FA LATIN SMALL LETTER U WITH ACUTE ("u") -->
+<!ENTITY ucirc "&#251;"><!-- U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX ("u") -->
+<!ENTITY uuml "&#252;"><!-- U+00FC LATIN SMALL LETTER U WITH DIAERESIS ("ue") -->
+<!ENTITY yacute "&#253;"><!-- U+00FD LATIN SMALL LETTER Y WITH ACUTE ("y") -->
+<!ENTITY thorn "&#254;"><!-- U+00FE LATIN SMALL LETTER THORN ("[thorn]") -->
+<!ENTITY yuml "&#255;"><!-- U+00FF LATIN SMALL LETTER Y WITH DIAERESIS ("y") -->
+
+<!-- Some of ISO Latin 9 and 10 -->
+<!ENTITY OElig "&#338;"><!-- U+0152 LATIN CAPITAL LIGATURE OE ("OE") -->
+<!ENTITY oelig "&#339;"><!-- U+0153 LATIN SMALL LIGATURE OE ("oe") -->
+<!ENTITY Scaron "&#352;"><!-- U+0160 LATIN CAPITAL LETTER S WITH CARON ("S") -->
+<!ENTITY scaron "&#353;"><!-- U+0161 LATIN SMALL LETTER S WITH CARON ("s") -->
+<!ENTITY Yuml "&#376;"><!-- U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS ("Y") -->
+
+<!-- Other Unicode (including some characters from the windows-1252 repertoire) -->
+<!ENTITY fnof "&#402;"><!-- U+0192 LATIN SMALL LETTER F WITH HOOK ("f") -->
+<!ENTITY tilde "&#732;"><!-- U+02DC SMALL TILDE ("~") -->
+<!ENTITY ensp "&#8194;"><!-- U+2002 EN SPACE (" ") -->
+<!ENTITY emsp "&#8195;"><!-- U+2003 EM SPACE (" ") -->
+<!ENTITY thinsp "&#8201;"><!-- U+2009 THIN SPACE (" ") -->
+<!ENTITY ndash "&#8211;"><!-- U+2013 EN DASH ("-") -->
+<!ENTITY mdash "&#8212;"><!-- U+2014 EM DASH ("-\u002D") -->
+<!ENTITY lsquo "&#8216;"><!-- U+2018 LEFT SINGLE QUOTATION MARK ("'") -->
+<!ENTITY rsquo "&#8217;"><!-- U+2019 RIGHT SINGLE QUOTATION MARK ("'") -->
+<!ENTITY sbquo "&#8218;"><!-- U+201A SINGLE LOW-9 QUOTATION MARK ("'") -->
+<!ENTITY ldquo "&#8220;"><!-- U+201C LEFT DOUBLE QUOTATION MARK ('"') -->
+<!ENTITY rdquo "&#8221;"><!-- U+201D RIGHT DOUBLE QUOTATION MARK ('"') -->
+<!ENTITY bdquo "&#8222;"><!-- U+201E DOUBLE LOW-9 QUOTATION MARK ('"') -->
+<!ENTITY dagger "&#8224;"><!-- U+2020 DAGGER ("*!*") -->
+<!ENTITY Dagger "&#8225;"><!-- U+2021 DOUBLE DAGGER ("*!!*") -->
+<!ENTITY bull "&#8226;"><!-- U+2022 BULLET ("o") -->
+<!ENTITY hellip "&#8230;"><!-- U+2026 HORIZONTAL ELLIPSIS ("...") -->
+<!ENTITY permil "&#8242;"><!-- U+2030 PER MILLE SIGN ("[/1000]") -->
+<!ENTITY prime "&#8242;"><!-- U+2032 PRIME ("'") -->
+<!ENTITY Prime "&#8243;"><!-- U+2033 DOUBLE PRIME ('"') -->
+<!ENTITY lsaquo "&#8249;"><!-- U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK ("<") -->
+<!ENTITY rsaquo "&#8250;"><!-- U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (">") -->
+<!ENTITY frasl "&#8260;"><!-- U+2044 FRACTION SLASH ("/") -->
+<!ENTITY euro "&#8364;"><!-- U+20AC EURO SIGN ("EUR") -->
+<!ENTITY trade "&#8482;"><!-- U+2122 TRADE MARK SIGN ("[TM]") -->
+<!ENTITY larr "&#8592;"><!-- U+2190 LEFTWARDS ARROW ("<-\u002D") -->
+<!ENTITY rarr "&#8594;"><!-- U+2192 RIGHTWARDS ARROW ("\u002D->") -->
+<!ENTITY harr "&#8596;"><!-- U+2194 LEFT RIGHT ARROW ("<->") -->
+<!ENTITY lArr "&#8656;"><!-- U+21D0 LEFTWARDS DOUBLE ARROW ("<==") -->
+<!ENTITY rArr "&#8658;"><!-- U+21D2 RIGHTWARDS DOUBLE ARROW ("==>") -->
+<!ENTITY hArr "&#8660;"><!-- U+21D4 LEFT RIGHT DOUBLE ARROW ("<=>") -->
+<!ENTITY minus "&#8722;"><!-- U+2212 MINUS SIGN ("-") -->
+<!ENTITY lowast "&#8727;"><!-- U+2217 ASTERISK OPERATOR ("*") -->
+<!ENTITY le "&#8804;"><!-- U+2264 LESS-THAN OR EQUAL TO ("<=") -->
+<!ENTITY ge "&#8805;"><!-- U+2265 GREATER-THAN OR EQUAL TO (">=") -->
+<!ENTITY lang "&#9001;"><!-- U+2329 LEFT-POINTING ANGLE BRACKET ("<") -->
+<!ENTITY rang "&#9002;"><!-- U+232A RIGHT-POINTING ANGLE BRACKET (">") -->
+
+<!-- EOF -->
diff --git a/doc/xml2rfc/rfc2629.dtd b/doc/xml2rfc/rfc2629.dtd
new file mode 100644
index 0000000..bc30260
--- /dev/null
+++ b/doc/xml2rfc/rfc2629.dtd
@@ -0,0 +1,304 @@
+<!--
+ revised DTD for the RFC document series, draft of 2007-03-29
+ -->
+
+
+<!--
+ Typical invocation:
+ <!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN"
+ "http://xml.resource.org/authoring/rfc2629.dtd" [
+ ... dtd subset ...
+ ]>
+ or
+ <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
+ ... dtd subset ...
+ ]>
+ -->
+
+
+<!--
+ Contents
+
+ Character entities
+
+ DTD data types
+
+ The top-level
+
+ Front matter
+
+ The Body
+
+ Back matter
+ -->
+
+
+<!--
+ Character entities
+ -->
+
+
+<!ENTITY % rfc2629-xhtml
+ PUBLIC "-//IETF//ENTITIES XHTML subset for RFC 2629//EN"
+ "rfc2629-xhtml.ent">
+%rfc2629-xhtml;
+
+<!ENTITY % rfc2629-other
+ PUBLIC "-//IETF//ENTITIES Other for RFC 2629//EN"
+ "rfc2629-other.ent">
+%rfc2629-other;
+
+
+<!--
+ DTD data types:
+
+ entity description
+ ====== ===============================================
+ NUMBER [0-9]+
+ NUMBERS a comma-separated list of NUMBER
+
+ DAY the day of the month, e.g., "1"
+ MONTH the month of the year, e.g., "January"
+ YEAR a four-digit year, e.g., "1999"
+
+ URI e.g., "http://invisible.net/"
+
+ ATEXT/CTEXT printable ASCII text (no line-terminators)
+
+ TEXT character data
+ -->
+
+
+<!ENTITY % NUMBER "CDATA">
+<!ENTITY % NUMBERS "CDATA">
+
+<!ENTITY % DAY "CDATA">
+<!ENTITY % MONTH "CDATA">
+<!ENTITY % YEAR "CDATA">
+
+<!ENTITY % URI "CDATA">
+
+<!ENTITY % ATEXT "CDATA">
+<!ENTITY % CTEXT "#PCDATA">
+
+<!ENTITY % TEXT "#PCDATA">
+
+<!ENTITY rfc.number "XXXX">
+
+
+<!--
+ The top-level
+ -->
+
+
+<!--
+ attributes for the "rfc" element are supplied by the RFC
+ editor. when preparing drafts, authors should leave them blank.
+
+ the "seriesNo" attribute is used if the category is, e.g., BCP.
+ -->
+<!ELEMENT rfc (front,middle,back?)>
+<!ATTLIST rfc
+ number %NUMBER; #IMPLIED
+ obsoletes %NUMBERS; ""
+ updates %NUMBERS; ""
+ category (std|bcp|info|exp|historic)
+ #IMPLIED
+ seriesNo %NUMBER; #IMPLIED
+ ipr (full2026|noDerivativeWorks2026|none
+ |full3667|noModification3667|noDerivatives3667
+ |full3978|noModification3978|noDerivatives3978)
+ #IMPLIED
+ iprExtract IDREF #IMPLIED
+ submissionType
+ (IETF|independent) "IETF"
+ docName %ATEXT; #IMPLIED
+ xml:lang %ATEXT; "en">
+
+
+<!--
+ Front matter
+ -->
+
+
+<!ELEMENT front (title,author+,date,area*,workgroup*,keyword*,
+ abstract?,note*)>
+
+<!-- the "abbrev" attribute is used for headers, etc. -->
+<!ELEMENT title (%CTEXT;)>
+<!ATTLIST title
+ abbrev %ATEXT; #IMPLIED>
+
+<!ELEMENT author (organization,address?)>
+<!ATTLIST author
+ initials %ATEXT; #IMPLIED
+ surname %ATEXT; #IMPLIED
+ fullname %ATEXT; #IMPLIED
+ role (editor) #IMPLIED>
+
+<!ELEMENT organization
+ (%CTEXT;)>
+<!ATTLIST organization
+ abbrev %ATEXT; #IMPLIED>
+
+<!ELEMENT address (postal?,phone?,facsimile?,email?,uri?)>
+
+<!-- this content model should be more strict:
+ at most one of each the city, region, code, and country
+ elements may be present -->
+<!ELEMENT postal (street+,(city|region|code|country)*)>
+<!ELEMENT street (%CTEXT;)>
+<!ELEMENT city (%CTEXT;)>
+<!ELEMENT region (%CTEXT;)>
+<!ELEMENT code (%CTEXT;)>
+<!ELEMENT country (%CTEXT;)>
+<!ELEMENT phone (%CTEXT;)>
+<!ELEMENT facsimile (%CTEXT;)>
+<!ELEMENT email (%CTEXT;)>
+<!ELEMENT uri (%CTEXT;)>
+
+<!ELEMENT date EMPTY>
+<!ATTLIST date
+ day %DAY; #IMPLIED
+ month %MONTH; #IMPLIED
+ year %YEAR; #IMPLIED>
+
+<!-- meta-data... -->
+<!ELEMENT area (%CTEXT;)>
+<!ELEMENT workgroup (%CTEXT;)>
+<!ELEMENT keyword (%CTEXT;)>
+
+<!ELEMENT abstract (t)+>
+<!ELEMENT note (t)+>
+<!ATTLIST note
+ title %ATEXT; #REQUIRED>
+
+
+<!--
+ The body
+ -->
+
+
+<!-- later on, may be (section+,appendix*,section*) -->
+<!ELEMENT middle (section+)>
+
+<!ELEMENT section ((t|figure|texttable|iref)*,section*)>
+<!ATTLIST section
+ anchor ID #IMPLIED
+ title %ATEXT; #REQUIRED
+ toc (include|exclude|default)
+ "default">
+
+<!--
+<!ELEMENT appendix ((t|figure|texttable|iref)*,appendix*)>
+<!ATTLIST appendix
+ anchor ID #IMPLIED
+ title %ATEXT; #REQUIRED
+ toc (include|exclude|default)
+ "default">
+ -->
+
+<!-- use of <figure/> is deprecated... -->
+<!ELEMENT t (%TEXT;|list|figure|xref|eref|iref|cref|spanx|vspace)*>
+<!ATTLIST t
+ anchor ID #IMPLIED
+ hangText %ATEXT; #IMPLIED>
+
+<!-- the value of the style attribute is inherited from the closest
+ parent -->
+<!ELEMENT list (t+)>
+<!ATTLIST list
+ style %ATEXT; #IMPLIED
+ hangIndent %NUMBER; #IMPLIED
+ counter %ATEXT; #IMPLIED>
+
+<!ELEMENT xref (%CTEXT;)>
+<!ATTLIST xref
+ target IDREF #REQUIRED
+ pageno (true|false) "false"
+ format (counter|title|none|default)
+ "default">
+
+<!ELEMENT eref (%CTEXT;)>
+<!ATTLIST eref
+ target %URI; #REQUIRED>
+
+<!ELEMENT iref EMPTY>
+<!ATTLIST iref
+ item %ATEXT; #REQUIRED
+ subitem %ATEXT; ""
+ primary (true|false) "false">
+
+<!ELEMENT cref (%CTEXT;)>
+<!ATTLIST cref
+ anchor ID #IMPLIED
+ source %ATEXT; #IMPLIED>
+
+<!ELEMENT spanx (%CTEXT;)>
+<!ATTLIST spanx
+ style %ATEXT; "emph">
+
+<!ELEMENT vspace EMPTY>
+<!ATTLIST vspace
+ blankLines %NUMBER; "0">
+
+<!ELEMENT figure (iref*,preamble?,artwork,postamble?)>
+<!ATTLIST figure
+ anchor ID #IMPLIED
+ title %ATEXT; ""
+ src %URI; #IMPLIED
+ align (left|center|right) "left"
+ alt %ATEXT; ""
+ width %ATEXT; ""
+ height %ATEXT; "">
+
+<!ELEMENT preamble (%TEXT;|xref|eref|iref|cref|spanx)*>
+<!ELEMENT artwork (%TEXT;)*>
+<!ATTLIST artwork
+ xml:space (default|preserve) "preserve"
+ name %ATEXT; ""
+ type %ATEXT; ""
+ src %URI; #IMPLIED
+ align (left|center|right) "left"
+ alt %ATEXT; ""
+ width %ATEXT; ""
+ height %ATEXT; "">
+
+<!ELEMENT postamble (%TEXT;|xref|eref|iref|cref|spanx)*>
+
+<!ELEMENT texttable (preamble?,ttcol+,c*,postamble?)>
+<!ATTLIST texttable
+ anchor ID #IMPLIED
+ title %ATEXT; "">
+<!ELEMENT ttcol (%CTEXT;)>
+<!ATTLIST ttcol
+ width %ATEXT; #IMPLIED
+ align (left|center|right) "left">
+<!ELEMENT c (%TEXT;|xref|eref|iref|cref|spanx)*>
+
+
+<!--
+ Back matter
+ -->
+
+
+<!-- sections, if present, are appendices -->
+<!ELEMENT back (references*,section*)>
+
+<!ELEMENT references (reference+)>
+<!ATTLIST references
+ title %ATEXT; "References">
+<!ELEMENT reference (front,seriesInfo*,format*,annotation*)>
+<!ATTLIST reference
+ anchor ID #IMPLIED
+ target %URI; #IMPLIED>
+<!ELEMENT seriesInfo EMPTY>
+<!ATTLIST seriesInfo
+ name %ATEXT; #REQUIRED
+ value %ATEXT; #REQUIRED>
+<!ELEMENT format EMPTY>
+<!ATTLIST format
+ target %URI; #IMPLIED
+ type %ATEXT; #REQUIRED
+ octets %NUMBER; #IMPLIED>
+<!ELEMENT annotation (%TEXT;|xref|eref|iref|cref|spanx)*>