summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/rtfx.xsd486
-rw-r--r--doc/sample.rtf68
-rw-r--r--doc/sample.xml1
3 files changed, 555 insertions, 0 deletions
diff --git a/doc/rtfx.xsd b/doc/rtfx.xsd
new file mode 100644
index 0000000..922b0a6
--- /dev/null
+++ b/doc/rtfx.xsd
@@ -0,0 +1,486 @@
+<?xml version="1.0"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://memberwebs.com/ns/rtfx/"
+ xmlns="http://memberwebs.com/ns/rtfx/" elementFormDefault="qualified">
+
+ <!--
+ Copyright (c) 2004, Nate Nielsen
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+ * Redistributions in binary form must reproduce the
+ above copyright notice, this list of conditions and
+ the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+ * The names of contributors to this software may not be
+ used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+ CONTRIBUTORS
+ Nate Nielsen <nielsen@memberwebs.com>
+ -->
+
+ <xs:element name="document">
+ <xs:annotation>
+ <xs:documentation>The entire RTF document.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="meta"/>
+ <xs:group ref="section"/>
+ <xs:group ref="block"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+
+
+ <!-- ##################################################################
+ DOCUMENT META INFO
+ -->
+
+ <xs:group name="meta">
+ <xs:annotation>
+ <xs:documentation>Tags that that contain data about the document and general formatting.</xs:documentation>
+ </xs:annotation>
+
+ <xs:choice>
+ <xs:element ref="info" maxOccurs="1"/>
+ <xs:element ref="stylesheet" maxOccurs="1"/>
+ <xs:element ref="options" maxOccurs="1"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:element name="stylesheet">
+ <xs:annotation>
+ <xs:documentation>Contains a list of all the paragraph styles in the document, and their various formatting attributes.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="style"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="style">
+ <xs:annotation>
+ <xs:documentation>Represents a paragraph style used in the document.</xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>The style name.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="bold" type="xs:boolean" default="false">
+ <xs:annotation>
+ <xs:documentation>Style text bold.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="hide" type="xs:boolean" default="false">
+ <xs:annotation>
+ <xs:documentation>Style text hidden.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="italic" type="xs:boolean" default="false">
+ <xs:annotation>
+ <xs:documentation>Style text italicized.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="strike" type="xs:boolean" default="false">
+ <xs:annotation>
+ <xs:documentation>Style text striken out.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="underline" type="xs:boolean" default="false">
+ <xs:annotation>
+ <xs:documentation>Style text underlined.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="color" type="xs:integer" default="0">
+ <xs:annotation>
+ <xs:documentation>Style text color [NOTE: This attribute is only generated in 'presentation' mode].</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="face" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Style font face [NOTE: This attribute is only generated in 'presentation' mode].</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="size" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>Style font size [NOTE: This attribute is only generated in 'presentation' mode].</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="info">
+ <xs:annotation>
+ <xs:documentation>Document meta information.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType>
+ <xs:all>
+ <xs:element name="title" type="xs:string" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>The document title.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="author" type="xs:string" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>The document author.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="operator" type="xs:string" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>The document operator.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ </xs:all>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="options">
+ <xs:annotation>
+ <xs:documentation>Document options and defaults.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType>
+ <xs:all>
+ <xs:element ref="font" minOccurs="0"/>
+ </xs:all>
+ </xs:complexType>
+ </xs:element>
+
+
+ <!-- ##################################################################
+ SECTION CONTENT
+ -->
+
+ <xs:group name="section">
+ <xs:annotation>
+ <xs:documentation>Tags that break a document into various sections.</xs:documentation>
+ </xs:annotation>
+
+ <xs:choice>
+ <xs:element ref="sect"/>
+ <xs:element ref="page"/>
+ <xs:element ref="footnote"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:element name="sect">
+ <xs:annotation>
+ <xs:documentation>A section break.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="page">
+ <xs:annotation>
+ <xs:documentation>A 'hard' page break.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="footnote">
+ <xs:annotation>
+ <xs:documentation>A footnote. Footnotes are all usually grouped together at the end of the document.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ </xs:choice>
+ <xs:attribute name="id" type="xs:integer">
+ <xs:annotation>
+ <xs:documentation>The footnote number.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+
+ <!-- ##################################################################
+ BLOCK CONTENT
+ -->
+
+ <xs:group name="block">
+ <xs:annotation>
+ <xs:documentation>Block type elements.</xs:documentation>
+ </xs:annotation>
+
+ <xs:choice>
+ <xs:element ref="para"/>
+ <xs:element ref="list"/>
+ <xs:element ref="table"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:element name="para">
+ <xs:annotation>
+ <xs:documentation>A paragraph. One of the main basic building blocks of the document. Basically all text and other 'inline' elements are contained in paragraphs.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ </xs:choice>
+ <xs:attribute name="style" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>The paragraph style name.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="list">
+ <xs:annotation>
+ <xs:documentation>A list. Lists contain paragraphs each of which is an item in the list.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ </xs:choice>
+
+ <xs:attribute name="ordered" type="xs:boolean">
+ <xs:annotation>
+ <xs:documentation>Whether a numbered list or not.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="start" type="xs:integer">
+ <xs:annotation>
+ <xs:documentation>For numbered lists the number to start at.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="type" default="disc">
+ <xs:annotation>
+ <xs:documentation>The type of bullet or number on a list.</xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="arabic"/>
+ <xs:enumeration value="upper-roman"/>
+ <xs:enumeration value="lower-roman"/>
+ <xs:enumeration value="upper-alpha"/>
+ <xs:enumeration value="lower-alpha"/>
+ <xs:enumeration value="disc"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+
+ </xs:complexType>
+ </xs:element>
+
+
+ <!-- ##################################################################
+ TABLE STRUCTURE
+ -->
+
+ <xs:element name="table">
+ <xs:annotation>
+ <xs:documentation>A table.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+
+ <xs:element name="row">
+ <xs:annotation>
+ <xs:documentation>A row in a table.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+
+ <xs:element name="cell">
+ <xs:annotation>
+ <xs:documentation>A cell in a table. Each cell can contain multiple paragraphs or other block elements.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+
+ <!-- ##################################################################
+ INLINE CONTENT
+ -->
+
+ <xs:complexType name="inline" mixed="true">
+ <xs:annotation>
+ <xs:documentation>Inline elements flow with the text and/or change attributes in the text.</xs:documentation>
+ </xs:annotation>
+
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:group name="inline">
+ <xs:annotation>
+ <xs:documentation>Inline elements flow with the text and/or change attributes in the text.</xs:documentation>
+ </xs:annotation>
+
+ <xs:choice>
+ <xs:element ref="b"/>
+ <xs:element ref="tab"/>
+ <xs:element ref="line"/>
+ <xs:element ref="hide"/>
+ <xs:element ref="i"/>
+ <xs:element ref="strike"/>
+ <xs:element ref="u"/>
+ <xs:element ref="super"/>
+ <xs:element ref="sub"/>
+ <xs:element ref="ref"/>
+ <xs:element ref="font"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:element name="line">
+ <xs:annotation>
+ <xs:documentation>A 'hard' line break.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="tab">
+ <xs:annotation>
+ <xs:documentation>A tab.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="b" type="inline">
+ <xs:annotation>
+ <xs:documentation>Contained text is bold.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="i" type="inline">
+ <xs:annotation>
+ <xs:documentation>Contained text is italic.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="u" type="inline">
+ <xs:annotation>
+ <xs:documentation>Contained text is underlined.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="strike" type="inline">
+ <xs:annotation>
+ <xs:documentation>Contained text is striken out.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="super" type="inline">
+ <xs:annotation>
+ <xs:documentation>Contained text is superscript.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="sub" type="inline">
+ <xs:annotation>
+ <xs:documentation>Contained text is subscript.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="hide" type="inline">
+ <xs:annotation>
+ <xs:documentation>Contained text is hidden.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
+ <xs:element name="ref">
+ <xs:annotation>
+ <xs:documentation>A reference to another part of the document such as a footnote.</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ </xs:choice>
+
+ <xs:attribute name="type" fixed="footnote">
+ <xs:annotation>
+ <xs:documentation>The type of object this reference is pointing to. Currently only footnotes are supported.</xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="footnote"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="to" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>The identifier of the object this reference is pointing to.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="font">
+ <xs:annotation>
+ <xs:documentation>Font information for contained text [NOTE: This tag is only generated in 'presentation' mode].</xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ </xs:choice>
+ <xs:attribute name="name" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>The name of the font.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="size" type="xs:integer">
+ <xs:annotation>
+ <xs:documentation>The size of the font.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="color" type="xs:integer">
+ <xs:annotation>
+ <xs:documentation>The color of the text.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ </xs:complexType>
+ </xs:element>
+
+
+</xs:schema>
diff --git a/doc/sample.rtf b/doc/sample.rtf
new file mode 100644
index 0000000..c8072a6
--- /dev/null
+++ b/doc/sample.rtf
@@ -0,0 +1,68 @@
+{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f121\froman\fcharset238\fprq2 Times New Roman CE;}{\f122\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f124\froman\fcharset161\fprq2 Times New Roman Greek;}{\f125\froman\fcharset162\fprq2 Times New Roman Tur;}
+{\f126\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f127\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f128\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f129\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
+{\f131\fswiss\fcharset238\fprq2 Arial CE;}{\f132\fswiss\fcharset204\fprq2 Arial Cyr;}{\f134\fswiss\fcharset161\fprq2 Arial Greek;}{\f135\fswiss\fcharset162\fprq2 Arial Tur;}{\f136\fswiss\fcharset177\fprq2 Arial (Hebrew);}
+{\f137\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f138\fswiss\fcharset186\fprq2 Arial Baltic;}{\f139\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f141\fmodern\fcharset238\fprq1 Courier New CE;}{\f142\fmodern\fcharset204\fprq1 Courier New Cyr;}
+{\f144\fmodern\fcharset161\fprq1 Courier New Greek;}{\f145\fmodern\fcharset162\fprq1 Courier New Tur;}{\f146\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f147\fmodern\fcharset178\fprq1 Courier New (Arabic);}
+{\f148\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f149\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
+\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
+\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0
+\b\f1\fs32\lang1033\langfe1033\kerning32\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid2294299 heading 1;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
+\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\*\ts15\tsrowd\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10
+\trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
+\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \sbasedon11 \snext15 \styrsid2294299 Table Grid;}{
+\s16\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext16 \ssemihidden \styrsid1792631 footnote text;}{\*\cs17 \additive \super
+\sbasedon10 \ssemihidden \styrsid1792631 footnote reference;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable{\list\listtemplateid-767292450\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers
+;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600
+\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid687222349}}{\*\listoverridetable{\listoverride\listid687222349
+\listoverridecount0\ls1}}{\*\rsidtbl \rsid1792631\rsid2294299}{\*\generator Microsoft Word 11.0.6113;}{\info{\title This is a test RTF}{\author Nate}{\operator Nate}{\version2}}\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440
+\dghshow1\dgvshow1\jexpand\viewkind1\viewscale80\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
+\asianbrkrule\rsidroot2294299\newtblstyruls\nogrowautofit \fet0{\*\ftnsep \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsep
+\par }}{\*\ftnsepc \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsepc
+\par }}{\*\aftnsep \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsep
+\par }}{\*\aftnsepc \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsepc
+\par }}\sectd \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}
+{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang
+{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain
+\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid2294299 \b\f1\fs32\lang1033\langfe1033\kerning32\cgrid\langnp1033\langfenp1033 {\insrsid2294299 This is a test RTF
+\par }\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2294299 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 Hi! I\rquote m a test file. This is some }{\b\insrsid2294299 bold}{
+\insrsid2294299 text, and some }{\i\insrsid2294299 italic}{\insrsid2294299 text, as well as some }{\ul\insrsid2294299 underline}{\insrsid2294299 text. And a bit of }{\v\insrsid2294299\charrsid2294299 hidden}{\insrsid2294299 text. So we\rquote
+re going to end this paragraph here and go on to a nice little list:
+\par
+\par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li720\ri0\widctlpar\jclisttab\tx720\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid2294299 {\insrsid2294299 Item 1
+\par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Item 2
+\par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Item 3
+\par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Item 4
+\par }\pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2294299 {\insrsid2294299
+\par And now comes a fun table:
+\par
+\par }\trowd \irow0\irowband0\ts15\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
+\trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
+\cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx2844\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx5796\clvertalt\clbrdrt\brdrs\brdrw10
+\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx8748\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2294299\yts15
+\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 Cell 1\cell Cell 2
+\par More in cell 2\cell Cell 3\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 \trowd \irow0\irowband0\ts15\trgaph108\trleft-108\trbrdrt
+\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
+\trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
+\cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx2844\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx5796\clvertalt\clbrdrt\brdrs\brdrw10
+\clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx8748\row }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2294299\yts15
+\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 Next row\cell Next row \cell Next row\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
+\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 \trowd \irow1\irowband1\lastrow \ts15\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv
+\brdrs\brdrw10 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr
+\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx2844\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx5796\clvertalt\clbrdrt
+\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx8748\row }\pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2294299 {
+\insrsid2294299
+\par A page break:
+\par \page And here we\rquote re on the next page.}{\insrsid1792631 }{\insrsid2294299
+\par }{\insrsid1792631 This para has a }{\cs17\super\insrsid1792631 \chftn {\footnote \pard\plain \s16\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs17\super\insrsid1792631
+\chftn }{\insrsid1792631 This is the actual content of the footnote.}}}{\insrsid1792631 footnote.
+\par And here\rquote s yet another paragraph. }{\insrsid1792631\charrsid2294299
+\par }} \ No newline at end of file
diff --git a/doc/sample.xml b/doc/sample.xml
new file mode 100644
index 0000000..85b8bfa
--- /dev/null
+++ b/doc/sample.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><document xmlns="http://memberwebs.com/ns/rtfx/"><info><title>This is a test RTF</title><author>Nate</author><operator>Nate</operator></info><stylesheet><style name="Normal"/><style name="heading 1"/><style name="footnote text"/></stylesheet><options><font size="12" color="0" name="Times New Roman"/></options><para style="heading 1"><font name="1" size="16"><b>This is a test RTF</b></font></para><para>Hi! I’m a test file. This is some <b>bold</b> text, and some <i>italic</i> text, as well as some <u>underline</u> text. And a bit of <hide>hidden</hide> text. So we’re going to end this paragraph here and go on to a nice little list:</para><para/><list type="disc" ordered="0" start="1"><para>Item 1</para><para>Item 2</para><para>Item 3</para><para>Item 4</para></list><para/><para>And now comes a fun table:</para><para/><table><row><cell><para>Cell 1</para></cell><cell><para>Cell 2</para><para>More in cell 2</para></cell><cell><para>Cell 3</para></cell></row><row><cell><para>Next row</para></cell><cell><para>Next row </para></cell><cell><para>Next row</para></cell></row></table><para/><para>A page break:</para><page/><para>And here we’re on the next page. </para><para>This para has a <ref type="footnote" to="1"><super>1</super></ref>footnote.</para><para>And here’s yet another paragraph. </para><para/><footnote id="1"><para><font size="10"><super>1</super> This is the actual content of the footnote.</font></para></footnote></document> \ No newline at end of file