diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/rtfx.xsd | 486 | ||||
| -rw-r--r-- | doc/sample.rtf | 68 | ||||
| -rw-r--r-- | doc/sample.xml | 1 | 
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  | 
