RTF writer: emit real RTF lists with a list table.

Lists were written as plain paragraphs with a literal marker and a
hanging indent, carrying none of the `\ls`/`\ilvl` references or the
`\listtable`/`\listoverridetable` that the RTF list model (and pandoc's
own reader) expect, so lists could not round-trip.

Walk the document tagging each list with a unique id and nesting level
(`prepareLists`), build a `\listtable`/`\listoverridetable` describing
each list (`listTableRTF`, exposed via the `listtable` template
variable), and render every list paragraph with its `\ls`/`\ilvl`
reference.  The first paragraph of each item gets a `{\listtext}`
marker; continuation paragraphs keep the reference but omit it, so
multi-paragraph items round-trip.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
John MacFarlane
2026-06-08 21:01:34 +00:00
parent 9312f1da1b
commit 656a6704a5
3 changed files with 272 additions and 104 deletions
+3
View File
@@ -1,5 +1,8 @@
{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 \fmodern Courier;}}
{\colortbl;\red255\green0\blue0;\red0\green0\blue255;}
$if(listtable)$
$listtable$
$endif$
\widowctrl\hyphauto
$for(header-includes)$
$header-includes$
+142 -14
View File
@@ -15,6 +15,7 @@ module Text.Pandoc.Writers.RTF ( writeRTF
) where
import Control.Monad.Except (catchError, throwError)
import Control.Monad
import Control.Monad.State.Strict (State, runState, get, put)
import qualified Data.ByteString as B
import Data.Char (chr, isDigit, ord, isAlphaNum)
import qualified Data.Map as M
@@ -101,9 +102,14 @@ writeRTF options doc = do
mapM (blockToRTF 0 AlignDefault))
(fmap literal . inlinesToRTF)
meta'
body <- blocksToRTF 0 AlignDefault blocks
-- Tag list blocks with a list id and level so that the rendered RTF
-- carries proper \ls/\ilvl references and a \listtable, which lets
-- lists (including multi-paragraph list items) round-trip.
let (blocks', listDefs) = prepareLists blocks
body <- blocksToRTF 0 AlignDefault blocks'
toc <- blocksToRTF 0 AlignDefault [toTableOfContents options blocks]
let context = defField "body" body
$ maybe id (defField "listtable") (listTableRTF listDefs)
$ defField "spacer" spacer
$ (if writerTableOfContents options
then defField "table-of-contents" toc
@@ -119,6 +125,73 @@ writeRTF options doc = do
Just (_,'\n') -> body
_ -> body <> T.singleton '\n'
-- | Information about a list needed to build the RTF list table:
-- a unique id (used both as @\\listid@ and @\\ls@), the list level
-- (@\\ilvl@) at which the list occurs, and its kind (bullet, or ordered
-- with the given attributes).
data ListInfo = ListInfo Int Int (Either () ListAttributes)
-- | Walk the document and tag every list with a unique id and its
-- nesting level, returning the tagged blocks together with the
-- information needed to build the list table. Tagged lists are wrapped
-- in a @Div@ with the @__rtflist@ class and @ls@/@lvl@ attributes,
-- which 'blockToRTF' recognizes.
prepareLists :: [Block] -> ([Block], [ListInfo])
prepareLists bs =
let (bs', (_, defs)) = runState (mapM (goBlock 0) bs) (1, [])
in (bs', reverse defs)
where
tag :: Int -> Either () ListAttributes -> [[Block]]
-> ([[Block]] -> Block) -> State (Int, [ListInfo]) Block
tag level kind items ctor = do
(n, defs) <- get
put (n + 1, ListInfo n level kind : defs)
items' <- mapM (mapM (goBlock (level + 1))) items
return $ Div ("", ["__rtflist"], [("ls", tshow n), ("lvl", tshow level)])
[ctor items']
goBlock :: Int -> Block -> State (Int, [ListInfo]) Block
goBlock level (BulletList items) = tag level (Left ()) items BulletList
goBlock level (OrderedList attrs items) =
tag level (Right attrs) items (OrderedList attrs)
goBlock level (BlockQuote bs') = BlockQuote <$> mapM (goBlock level) bs'
goBlock level (Div attr bs') = Div attr <$> mapM (goBlock level) bs'
goBlock level (Figure attr capt bs') =
Figure attr capt <$> mapM (goBlock level) bs'
goBlock _ b = return b
-- | RTF @\\levelnfc@ number-format code for an ordered-list style.
listNfc :: ListNumberStyle -> Int
listNfc UpperRoman = 1
listNfc LowerRoman = 2
listNfc UpperAlpha = 3
listNfc LowerAlpha = 4
listNfc _ = 0 -- Decimal, DefaultStyle, Example
-- | Build the @\\listtable@ and @\\listoverridetable@ for the collected
-- lists, or 'Nothing' if the document contains no lists.
listTableRTF :: [ListInfo] -> Maybe Text
listTableRTF [] = Nothing
listTableRTF infos = Just $
"{\\*\\listtable" <> T.concat (map listEntry infos) <> "}\n" <>
"{\\*\\listoverridetable" <> T.concat (map overrideEntry infos) <> "}\n"
where
listEntry (ListInfo lid level kind) =
"{\\list\\listtemplateid" <> tshow lid <>
T.concat [ levelEntry i kind | i <- [0..level] ] <>
"{\\listname ;}\\listid" <> tshow lid <> "}\n"
levelEntry i kind =
let (nfc, start) = case kind of
Left () -> (23 :: Int, 1 :: Int)
Right (s, sty, _) -> (listNfc sty, s)
li = (i + 1) * 360
in "{\\listlevel\\levelnfc" <> tshow nfc <> "\\levelnfcn" <> tshow nfc <>
"\\leveljc0\\leveljcn0\\levelfollow0\\levelstartat" <> tshow start <>
"\\levelindent0{\\leveltext\\'01\\u8226 ?;}{\\levelnumbers;}\\fi-360\\li" <>
tshow li <> "\\lin" <> tshow li <> " }"
overrideEntry (ListInfo lid _ _) =
"{\\listoverride\\listid" <> tshow lid <>
"\\listoverridecount0\\ls" <> tshow lid <> "}"
-- | Convert unicode characters (> 127) into rich text format representation.
handleUnicode :: Text -> Text
handleUnicode = T.concatMap $ \c ->
@@ -230,6 +303,18 @@ blockToRTF :: PandocMonad m
-> Alignment -- ^ alignment
-> Block -- ^ block to convert
-> m Text
blockToRTF indent alignment (Div (_, classes, kvs) [blk])
| "__rtflist" `elem` classes
, Just ls <- lookup "ls" kvs >>= readInt
, Just level <- lookup "lvl" kvs >>= readInt =
case blk of
BulletList lst -> spaceAtEnd . T.concat <$>
mapM (listItemToRTF alignment indent (Just (ls, level))
(bulletMarker indent)) lst
OrderedList attribs lst -> spaceAtEnd . T.concat <$>
zipWithM (listItemToRTF alignment indent (Just (ls, level)))
(orderedMarkers indent attribs) lst
_ -> blocksToRTF indent alignment [blk]
blockToRTF indent alignment (Div _ bs) =
blocksToRTF indent alignment bs
blockToRTF indent alignment (Plain lst) =
@@ -248,10 +333,11 @@ blockToRTF _ _ b@(RawBlock f str)
report $ BlockNotRendered b
return ""
blockToRTF indent alignment (BulletList lst) = spaceAtEnd . T.concat <$>
mapM (listItemToRTF alignment indent (bulletMarker indent)) lst
mapM (listItemToRTF alignment indent Nothing (bulletMarker indent)) lst
blockToRTF indent alignment (OrderedList attribs lst) =
spaceAtEnd . T.concat <$>
zipWithM (listItemToRTF alignment indent) (orderedMarkers indent attribs) lst
zipWithM (listItemToRTF alignment indent Nothing)
(orderedMarkers indent attribs) lst
blockToRTF indent alignment (DefinitionList lst) = spaceAtEnd . T.concat <$>
mapM (definitionListItemToRTF alignment indent) lst
blockToRTF indent _ HorizontalRule = return $
@@ -303,22 +389,58 @@ tableItemToRTF indent alignment item = do
spaceAtEnd :: Text -> Text
spaceAtEnd str = maybe str (<> "\\sa180\\par}\n") $ T.stripSuffix "\\par}\n" str
-- | Parse a decimal integer stored in a tag attribute.
readInt :: Text -> Maybe Int
readInt = safeRead
-- | Inject an @\\ls@/@\\ilvl@ reference into an already-rendered list
-- paragraph (used for continuation paragraphs of a multi-paragraph list
-- item, which carry the list reference but no @\\listtext@ marker). The
-- reference is inserted right before the @\\fi@ first-line-indent control
-- word, where the reader expects to find the paragraph's list properties.
addListRef :: Int -> Int -> Text -> Text
addListRef ls level t =
let ref = "\\ls" <> tshow ls <> "\\ilvl" <> tshow level
(pref, suff) = T.breakOn "\\fi" t
in if T.null suff then t else pref <> ref <> suff
-- | Convert list item (list of blocks) to RTF.
listItemToRTF :: PandocMonad m
=> Alignment -- ^ alignment
-> Int -- ^ indent level
-> Text -- ^ list start marker
-> [Block] -- ^ list item (list of blocks)
=> Alignment -- ^ alignment
-> Int -- ^ indent level
-> Maybe (Int, Int) -- ^ list reference (@\\ls@, @\\ilvl@), if
-- the list is part of the list table
-> Text -- ^ list start marker
-> [Block] -- ^ list item (list of blocks)
-> m Text
listItemToRTF alignment indent marker [] = return $
rtfCompact (indent + listIncrement) (negate listIncrement) alignment
(marker <> "\\tx" <> tshow listIncrement <> "\\tab ")
listItemToRTF alignment indent marker (listFirst:listRest) = do
listItemToRTF alignment indent mbref marker [] = return $
rtfCompact (indent + listIncrement) (negate listIncrement) alignment $
case mbref of
Nothing -> marker <> "\\tx" <> tshow listIncrement <> "\\tab "
Just (ls, level) ->
"\\ls" <> tshow ls <> "\\ilvl" <> tshow level <>
"\\tx" <> tshow listIncrement <> " {\\listtext\\tab " <> marker <> "\\tab}"
listItemToRTF alignment indent mbref marker (listFirst:listRest) = do
let f = blockToRTF (indent + listIncrement) alignment
first <- f listFirst
rest <- mapM f listRest
let listMarker = "\\fi" <> tshow (negate listIncrement) <> " " <> marker <>
"\\tx" <> tshow listIncrement <> "\\tab"
-- Continuation paragraphs carry the same \ls/\ilvl reference but no
-- \listtext marker, so the reader merges them into the current item.
-- Nested lists are tagged Divs that already carry their own reference,
-- so they are left untouched.
rest <- forM listRest $ \b -> do
t <- f b
return $ case mbref of
Just (ls, level) | not (isTaggedList b) -> addListRef ls level t
_ -> t
let listMarker = case mbref of
Nothing ->
"\\fi" <> tshow (negate listIncrement) <> " " <> marker <>
"\\tx" <> tshow listIncrement <> "\\tab"
Just (ls, level) ->
"\\fi" <> tshow (negate listIncrement) <>
"\\ls" <> tshow ls <> "\\ilvl" <> tshow level <>
"\\tx" <> tshow listIncrement <>
" {\\listtext\\tab " <> marker <> "\\tab}"
-- Find the first occurrence of \\fi or \\fi-, then replace it and the following
-- digits with the list marker.
let insertListMarker t = case popDigit $ optionDash $ T.drop 3 suff of
@@ -336,6 +458,12 @@ listItemToRTF alignment indent marker (listFirst:listRest) = do
-- insert the list marker into the (processed) first block
return $ insertListMarker first <> T.concat rest
-- | Is this a list block tagged by 'prepareLists' (and hence already
-- carrying its own @\\ls@/@\\ilvl@ reference)?
isTaggedList :: Block -> Bool
isTaggedList (Div (_, classes, _) _) = "__rtflist" `elem` classes
isTaggedList _ = False
-- | Convert definition list item (label, list of blocks) to RTF.
definitionListItemToRTF :: PandocMonad m
=> Alignment -- ^ alignment
+127 -90
View File
@@ -1,5 +1,42 @@
{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 \fmodern Courier;}}
{\colortbl;\red255\green0\blue0;\red0\green0\blue255;}
{\*\listtable{\list\listtemplateid1{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid1}
{\list\listtemplateid2{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid2}
{\list\listtemplateid3{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid3}
{\list\listtemplateid4{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid4}
{\list\listtemplateid5{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid5}
{\list\listtemplateid6{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid6}
{\list\listtemplateid7{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid7}
{\list\listtemplateid8{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid8}
{\list\listtemplateid9{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid9}
{\list\listtemplateid10{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid10}
{\list\listtemplateid11{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid11}
{\list\listtemplateid12{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid12}
{\list\listtemplateid13{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid13}
{\list\listtemplateid14{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid14}
{\list\listtemplateid15{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li1080\lin1080 }{\listname ;}\listid15}
{\list\listtemplateid16{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid16}
{\list\listtemplateid17{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid17}
{\list\listtemplateid18{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid18}
{\list\listtemplateid19{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid19}
{\list\listtemplateid20{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid20}
{\list\listtemplateid21{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid21}
{\list\listtemplateid22{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat2\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid22}
{\list\listtemplateid23{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat4\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat4\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid23}
{\list\listtemplateid24{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li1080\lin1080 }{\listname ;}\listid24}
{\list\listtemplateid25{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid25}
{\list\listtemplateid26{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid26}
{\list\listtemplateid27{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat6\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat6\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat6\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li1080\lin1080 }{\listname ;}\listid27}
{\list\listtemplateid28{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li1080\lin1080 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat3\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li1440\lin1440 }{\listname ;}\listid28}
{\list\listtemplateid29{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid29}
{\list\listtemplateid30{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid30}
{\list\listtemplateid31{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid31}
{\list\listtemplateid32{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid32}
{\list\listtemplateid33{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid33}
{\list\listtemplateid34{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid34}
{\list\listtemplateid35{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelindent0{\leveltext\'01\u8226 ?;}{\levelnumbers;}\fi-360\li360\lin360 }{\listname ;}\listid35}
}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}{\listoverride\listid33\listoverridecount0\ls33}{\listoverride\listid34\listoverridecount0\ls34}{\listoverride\listid35\listoverridecount0\ls35}}
\widowctrl\hyphauto
{\pard \qc \f0 \sa180 \li0 \fi0 \b \fs36 Pandoc Test Suite\par}
@@ -38,8 +75,8 @@ embedded link
print "working";\line
\}\par}
{\pard \ql \f0 \sa180 \li720 \fi0 A list:\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360 1.\tx360\tab item one\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360 2.\tx360\tab item two\sa180\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360\ls1\ilvl0\tx360 {\listtext\tab 1.\tab} item one\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360\ls1\ilvl0\tx360 {\listtext\tab 2.\tab} item two\sa180\par}
{\pard \ql \f0 \sa180 \li720 \fi0 Nested block quotes:\par}
{\pard \ql \f0 \sa180 \li1440 \fi0 nested\par}
{\pard \ql \f0 \sa180 \li1440 \fi0 nested\par}
@@ -63,91 +100,91 @@ These should not be escaped: \\$ \\\\ \\> \\[ \\\{\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel0 \b \fs36 Lists\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Unordered\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Asterisks tight:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab asterisk 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab asterisk 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab asterisk 3\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls2\ilvl0\tx360 {\listtext\tab \bullet \tab} asterisk 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls2\ilvl0\tx360 {\listtext\tab \bullet \tab} asterisk 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls2\ilvl0\tx360 {\listtext\tab \bullet \tab} asterisk 3\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Asterisks loose:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab asterisk 1\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab asterisk 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab asterisk 3\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls3\ilvl0\tx360 {\listtext\tab \bullet \tab} asterisk 1\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls3\ilvl0\tx360 {\listtext\tab \bullet \tab} asterisk 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls3\ilvl0\tx360 {\listtext\tab \bullet \tab} asterisk 3\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Pluses tight:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Plus 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Plus 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Plus 3\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls4\ilvl0\tx360 {\listtext\tab \bullet \tab} Plus 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls4\ilvl0\tx360 {\listtext\tab \bullet \tab} Plus 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls4\ilvl0\tx360 {\listtext\tab \bullet \tab} Plus 3\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Pluses loose:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab Plus 1\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab Plus 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab Plus 3\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls5\ilvl0\tx360 {\listtext\tab \bullet \tab} Plus 1\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls5\ilvl0\tx360 {\listtext\tab \bullet \tab} Plus 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls5\ilvl0\tx360 {\listtext\tab \bullet \tab} Plus 3\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Minuses tight:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Minus 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Minus 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Minus 3\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls6\ilvl0\tx360 {\listtext\tab \bullet \tab} Minus 1\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls6\ilvl0\tx360 {\listtext\tab \bullet \tab} Minus 2\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls6\ilvl0\tx360 {\listtext\tab \bullet \tab} Minus 3\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Minuses loose:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab Minus 1\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab Minus 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab Minus 3\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls7\ilvl0\tx360 {\listtext\tab \bullet \tab} Minus 1\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls7\ilvl0\tx360 {\listtext\tab \bullet \tab} Minus 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls7\ilvl0\tx360 {\listtext\tab \bullet \tab} Minus 3\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Ordered\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Tight:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 1.\tx360\tab First\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 2.\tx360\tab Second\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 3.\tx360\tab Third\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls8\ilvl0\tx360 {\listtext\tab 1.\tab} First\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls8\ilvl0\tx360 {\listtext\tab 2.\tab} Second\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls8\ilvl0\tx360 {\listtext\tab 3.\tab} Third\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 and:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 1.\tx360\tab One\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 2.\tx360\tab Two\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 3.\tx360\tab Three\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls9\ilvl0\tx360 {\listtext\tab 1.\tab} One\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls9\ilvl0\tx360 {\listtext\tab 2.\tab} Two\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls9\ilvl0\tx360 {\listtext\tab 3.\tab} Three\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Loose using tabs:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 1.\tx360\tab First\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 2.\tx360\tab Second\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 3.\tx360\tab Third\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls10\ilvl0\tx360 {\listtext\tab 1.\tab} First\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls10\ilvl0\tx360 {\listtext\tab 2.\tab} Second\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls10\ilvl0\tx360 {\listtext\tab 3.\tab} Third\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 and using spaces:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 1.\tx360\tab One\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 2.\tx360\tab Two\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 3.\tx360\tab Three\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls11\ilvl0\tx360 {\listtext\tab 1.\tab} One\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls11\ilvl0\tx360 {\listtext\tab 2.\tab} Two\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls11\ilvl0\tx360 {\listtext\tab 3.\tab} Three\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Multiple paragraphs:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 1.\tx360\tab Item 1, graf one.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 Item 1. graf two. The quick brown fox jumped over the lazy dog\u8217's back.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 2.\tx360\tab Item 2.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 3.\tx360\tab Item 3.\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls12\ilvl0\tx360 {\listtext\tab 1.\tab} Item 1, graf one.\par}
{\pard \ql \f0 \sa180 \li360 \ls12\ilvl0\fi0 Item 1. graf two. The quick brown fox jumped over the lazy dog\u8217's back.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls12\ilvl0\tx360 {\listtext\tab 2.\tab} Item 2.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls12\ilvl0\tx360 {\listtext\tab 3.\tab} Item 3.\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Nested\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Tab\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 \endash \tx360\tab Tab\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360 \bullet \tx360\tab Tab\sa180\sa180\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls13\ilvl0\tx360 {\listtext\tab \bullet \tab} Tab\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls14\ilvl1\tx360 {\listtext\tab \endash \tab} Tab\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360\ls15\ilvl2\tx360 {\listtext\tab \bullet \tab} Tab\sa180\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Here\u8217's another:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 1.\tx360\tab First\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 2.\tx360\tab Second:\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 \endash \tx360\tab Fee\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 \endash \tx360\tab Fie\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 \endash \tx360\tab Foe\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 3.\tx360\tab Third\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls16\ilvl0\tx360 {\listtext\tab 1.\tab} First\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls16\ilvl0\tx360 {\listtext\tab 2.\tab} Second:\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls17\ilvl1\tx360 {\listtext\tab \endash \tab} Fee\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls17\ilvl1\tx360 {\listtext\tab \endash \tab} Fie\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls17\ilvl1\tx360 {\listtext\tab \endash \tab} Foe\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls16\ilvl0\tx360 {\listtext\tab 3.\tab} Third\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Same thing but with paragraphs:\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 1.\tx360\tab First\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 2.\tx360\tab Second:\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 \endash \tx360\tab Fee\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 \endash \tx360\tab Fie\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 \endash \tx360\tab Foe\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 3.\tx360\tab Third\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls18\ilvl0\tx360 {\listtext\tab 1.\tab} First\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls18\ilvl0\tx360 {\listtext\tab 2.\tab} Second:\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls19\ilvl1\tx360 {\listtext\tab \endash \tab} Fee\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls19\ilvl1\tx360 {\listtext\tab \endash \tab} Fie\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls19\ilvl1\tx360 {\listtext\tab \endash \tab} Foe\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls18\ilvl0\tx360 {\listtext\tab 3.\tab} Third\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Tabs and spaces\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab this is a list item indented with tabs\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 \bullet \tx360\tab this is a list item indented with spaces\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 \endash \tx360\tab this is an example list item indented with tabs\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 \endash \tx360\tab this is an example list item indented with spaces\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls20\ilvl0\tx360 {\listtext\tab \bullet \tab} this is a list item indented with tabs\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls20\ilvl0\tx360 {\listtext\tab \bullet \tab} this is a list item indented with spaces\par}
{\pard \ql \f0 \sa180 \li720 \fi-360\ls21\ilvl1\tx360 {\listtext\tab \endash \tab} this is an example list item indented with tabs\par}
{\pard \ql \f0 \sa180 \li720 \fi-360\ls21\ilvl1\tx360 {\listtext\tab \endash \tab} this is an example list item indented with spaces\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel1 \b \fs32 Fancy list markers\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 (2)\tx360\tab begins with 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 (3)\tx360\tab and now 3\par}
{\pard \ql \f0 \sa180 \li360 \fi0 with a continuation\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 iv.\tx360\tab sublist with roman numerals, starting with 4\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 v.\tx360\tab more items\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360 (A)\tx360\tab a subsublist\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360 (B)\tx360\tab a subsublist\sa180\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls22\ilvl0\tx360 {\listtext\tab (2)\tab} begins with 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360\ls22\ilvl0\tx360 {\listtext\tab (3)\tab} and now 3\par}
{\pard \ql \f0 \sa180 \li360 \ls22\ilvl0\fi0 with a continuation\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls23\ilvl1\tx360 {\listtext\tab iv.\tab} sublist with roman numerals, starting with 4\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls23\ilvl1\tx360 {\listtext\tab v.\tab} more items\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360\ls24\ilvl2\tx360 {\listtext\tab (A)\tab} a subsublist\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360\ls24\ilvl2\tx360 {\listtext\tab (B)\tab} a subsublist\sa180\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Nesting:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 A.\tx360\tab Upper Alpha\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 I.\tx360\tab Upper Roman.\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360 (6)\tx360\tab Decimal start with 6\par}
{\pard \ql \f0 \sa0 \li1440 \fi-360 c)\tx360\tab Lower alpha with paren\sa180\sa180\sa180\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls25\ilvl0\tx360 {\listtext\tab A.\tab} Upper Alpha\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls26\ilvl1\tx360 {\listtext\tab I.\tab} Upper Roman.\par}
{\pard \ql \f0 \sa0 \li1080 \fi-360\ls27\ilvl2\tx360 {\listtext\tab (6)\tab} Decimal start with 6\par}
{\pard \ql \f0 \sa0 \li1440 \fi-360\ls28\ilvl3\tx360 {\listtext\tab c)\tab} Lower alpha with paren\sa180\sa180\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Autonumbering:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 1.\tx360\tab Autonumber.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 2.\tx360\tab More.\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 a.\tx360\tab Nested.\sa180\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls29\ilvl0\tx360 {\listtext\tab 1.\tab} Autonumber.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls29\ilvl0\tx360 {\listtext\tab 2.\tab} More.\par}
{\pard \ql \f0 \sa0 \li720 \fi-360\ls30\ilvl1\tx360 {\listtext\tab a.\tab} Nested.\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Should not be a list item:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 M.A.\u160 ?2007\par}
{\pard \ql \f0 \sa180 \li0 \fi0 B. Williams\par}
@@ -263,28 +300,28 @@ quoted link
{\pard \ql \f0 \sa180 \li0 \fi0 Ellipses\u8230 ?and\u8230 ?and\u8230 ?.\par}
{\pard \qc \f0 \sa180 \li0 \fi0 \emdash\emdash\emdash\emdash\emdash\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel0 \b \fs36 LaTeX\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab \par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab 2\u8197 ?+\u8197 ?2\u8196 ?=\u8196 ?4\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab {\i x}\u8196 ?\u8712 ?\u8196 ?{\i y}\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab {\i \u945 ?}\u8197 ?\u8743 ?\u8197 ?{\i \u969 ?}\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab 223\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab {\i p}-Tree\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Here\u8217's some display math: $$\\frac\{d\}\{dx\}f(x)=\\lim_\{h\\to 0\}\\frac\{f(x+h)-f(x)\}\{h\}$$\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Here\u8217's one that has a line break in it: {\i \u945 ?}\u8197 ?+\u8197 ?{\i \u969 ?}\u8197 ?\u215 ?\u8197 ?{\i x}{\super 2}.\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} \par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} 2\u8197 ?+\u8197 ?2\u8196 ?=\u8196 ?4\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} {\i x}\u8196 ?\u8712 ?\u8196 ?{\i y}\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} {\i \u945 ?}\u8197 ?\u8743 ?\u8197 ?{\i \u969 ?}\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} 223\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} {\i p}-Tree\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} Here\u8217's some display math: $$\\frac\{d\}\{dx\}f(x)=\\lim_\{h\\to 0\}\\frac\{f(x+h)-f(x)\}\{h\}$$\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls31\ilvl0\tx360 {\listtext\tab \bullet \tab} Here\u8217's one that has a line break in it: {\i \u945 ?}\u8197 ?+\u8197 ?{\i \u969 ?}\u8197 ?\u215 ?\u8197 ?{\i x}{\super 2}.\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 These shouldn\u8217't be math:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab To get the famous equation, write {\f1 $e = mc^2$}.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab $22,000 is a {\i lot} of money. So is $34,000. (It worked if \u8220"lot\u8221" is emphasized.)\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Shoes ($20) and socks ($5).\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Escaped {\f1 $}: $73 {\i this should be emphasized} 23$.\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls32\ilvl0\tx360 {\listtext\tab \bullet \tab} To get the famous equation, write {\f1 $e = mc^2$}.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls32\ilvl0\tx360 {\listtext\tab \bullet \tab} $22,000 is a {\i lot} of money. So is $34,000. (It worked if \u8220"lot\u8221" is emphasized.)\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls32\ilvl0\tx360 {\listtext\tab \bullet \tab} Shoes ($20) and socks ($5).\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls32\ilvl0\tx360 {\listtext\tab \bullet \tab} Escaped {\f1 $}: $73 {\i this should be emphasized} 23$.\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Here\u8217's a LaTeX table:\par}
{\pard \qc \f0 \sa180 \li0 \fi0 \emdash\emdash\emdash\emdash\emdash\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \outlinelevel0 \b \fs36 Special Characters\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Here is some unicode:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab I hat: \u206 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab o umlaut: \u246 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab section: \u167 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab set membership: \u8712 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab copyright: \u169 ?\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls33\ilvl0\tx360 {\listtext\tab \bullet \tab} I hat: \u206 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls33\ilvl0\tx360 {\listtext\tab \bullet \tab} o umlaut: \u246 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls33\ilvl0\tx360 {\listtext\tab \bullet \tab} section: \u167 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls33\ilvl0\tx360 {\listtext\tab \bullet \tab} set membership: \u8712 ?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls33\ilvl0\tx360 {\listtext\tab \bullet \tab} copyright: \u169 ?\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 AT&T has an ampersand in their name.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 AT&T is another way to write it.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This & that.\par}
@@ -402,12 +439,12 @@ inline link in pointy braces
http://example.com/?foo=1&bar=2
}}}
\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab In a list?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab {\field{\*\fldinst{HYPERLINK "http://example.com/"}}{\fldrslt{\ul
{\pard \ql \f0 \sa0 \li360 \fi-360\ls34\ilvl0\tx360 {\listtext\tab \bullet \tab} In a list?\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls34\ilvl0\tx360 {\listtext\tab \bullet \tab} {\field{\*\fldinst{HYPERLINK "http://example.com/"}}{\fldrslt{\ul
http://example.com/
}}}
\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab It should.\sa180\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls34\ilvl0\tx360 {\listtext\tab \bullet \tab} It should.\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 An e-mail address: {\field{\*\fldinst{HYPERLINK "mailto:nobody@nowhere.net"}}{\fldrslt{\ul
nobody@nowhere.net
}}}
@@ -438,7 +475,7 @@ links
}\par}
{\pard \ql \f0 \sa180 \li720 \fi0 Notes can go in quotes.{\super\chftn}{\*\footnote\chftn\~\plain\pard {\pard \ql \f0 \sa180 \li0 \fi0 In quote.\par}
}\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 1.\tx360\tab And in list items.{\super\chftn}{\*\footnote\chftn\~\plain\pard {\pard \ql \f0 \sa180 \li0 \fi0 In list.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360\ls35\ilvl0\tx360 {\listtext\tab 1.\tab} And in list items.{\super\chftn}{\*\footnote\chftn\~\plain\pard {\pard \ql \f0 \sa180 \li0 \fi0 In list.\par}
}\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This paragraph should not be part of the note, as it is not indented.\par}
}