+ Added regression tests with footnotes in quote blocks and lists.

+ This uncovered an existing bug in the RTF writer, which got indentation
  wrong on footnotes occuring in indented blocks like lists.  Fixed
  this bug.


git-svn-id: https://pandoc.googlecode.com/svn/trunk@263 788f1e2b-df1e-0410-8736-df70ead52e1b
This commit is contained in:
fiddlosopher 2006-12-21 19:33:57 +00:00
parent 48b8267126
commit d2105f6693
10 changed files with 85 additions and 3 deletions

View file

@ -32,6 +32,7 @@ module Text.Pandoc.Writers.RTF (
) where
import Text.Pandoc.Definition
import Text.Pandoc.Shared
import Text.Regex ( matchRegexAll, mkRegex )
import List ( isSuffixOf )
import Char ( ord, chr )
@ -189,9 +190,12 @@ listItemToRTF notes indent marker [] =
(marker ++ "\\tx" ++ (show listIncrement) ++ "\\tab ")
listItemToRTF notes indent marker list =
let (first:rest) = map (blockToRTF notes (indent + listIncrement)) list in
let modFirst = gsub "\\\\fi-?[0-9]+" ("\\\\fi" ++
(show (0 - listIncrement)) ++ " " ++ marker ++
"\\\\tx" ++ (show listIncrement) ++ "\\\\tab") first in
-- insert the list marker into the (processed) first block
let modFirst = case matchRegexAll (mkRegex "\\\\fi-?[0-9]+") first of
Just (before, matched, after, _) -> before ++ "\\fi" ++
show (0 - listIncrement) ++ " " ++ marker ++ "\\tx" ++
show listIncrement ++ "\\tab" ++ after
Nothing -> first in
modFirst ++ (concat rest)
-- | Convert list of inline items to RTF.

View file

@ -319,6 +319,12 @@ Pandoc (Meta [Str "Pandoc",Space,Str "Test",Space,Str "Suite"] ["John MacFarlane
, HorizontalRule
, Header 1 [Str "Footnotes"]
, Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",NoteRef "1",Space,Str "and",Space,Str "another.",NoteRef "2",Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.",Str "[",Str "^",Str "my",Space,Str "note",Str "]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",NoteRef "3"]
, BlockQuote
[ Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",NoteRef "4"] ]
, OrderedList
[ [ Plain [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",NoteRef "5"] ]
]
, Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]
, Note "1"
[ Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."] ]
@ -330,4 +336,10 @@ Pandoc (Meta [Str "Pandoc",Space,Str "Test",Space,Str "Suite"] ["John MacFarlane
, Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."] ]
, Note "3"
[ Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] (Src "http://google.com" ""),Space,Str "and",Space,Code "]",Space,Str "verbatim",Space,Str "characters."] ]
, Note "4"
[ Para [Str "In",Space,Str "quote."] ]
, Note "5"
[ Para [Str "In",Space,Str "list."] ]
]

View file

@ -596,6 +596,10 @@ contains a space.[^my note] Here is an inline note.^[This
is *easier* to type. Inline notes may contain
[links](http://google.com) and `]` verbatim characters.]
> Notes can go in quotes.^[In quote.]
1. And in list items.^[In list.]
[^longnote]: Here's the long note. This one contains multiple
blocks.

View file

@ -473,6 +473,12 @@ document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
<a id="Footnotes"></a>
<h1>Footnotes</h1>
<p>Here is a footnote reference,<sup class="footnoteRef" id="fnref1"><a href="#fn1">1</a></sup> and another.<sup class="footnoteRef" id="fnref2"><a href="#fn2">2</a></sup> This should <em>not</em> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<sup class="footnoteRef" id="fnref3"><a href="#fn3">3</a></sup></p>
<blockquote>
<p>Notes can go in quotes.<sup class="footnoteRef" id="fnref4"><a href="#fn4">4</a></sup></p>
</blockquote>
<ol>
<li>And in list items.<sup class="footnoteRef" id="fnref5"><a href="#fn5">5</a></sup></li>
</ol>
<p>This paragraph should not be part of the note, as it is not indented.</p>
<div class="footnotes">
<hr />
@ -487,6 +493,10 @@ document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
<a href="#fnref2" class="footnoteBacklink" title="Jump back to footnote 2">&#8617;</a></li>
<li id="fn3"><p>This is <em>easier</em> to type. Inline notes may contain <a href="http://google.com">links</a> and <code>]</code> verbatim characters.</p>
<a href="#fnref3" class="footnoteBacklink" title="Jump back to footnote 3">&#8617;</a></li>
<li id="fn4"><p>In quote.</p>
<a href="#fnref4" class="footnoteBacklink" title="Jump back to footnote 4">&#8617;</a></li>
<li id="fn5"><p>In list.</p>
<a href="#fnref5" class="footnoteBacklink" title="Jump back to footnote 5">&#8617;</a></li>
</ol>
</div>
</body>

View file

@ -576,6 +576,13 @@ Subsequent blocks are indented to show that they belong to the footnote (as with
\end{verbatim}
If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.} This should \emph{not} be a footnote reference, because it contains a space.[\^{}my note] Here is an inline note.\footnote{This is \emph{easier} to type. Inline notes may contain \href{http://google.com}{links} and \verb!]! verbatim characters.}
\begin{quote}
Notes can go in quotes.\footnote{In quote.}
\end{quote}
\begin{enumerate}
\item And in list items.\footnote{In list.}
\end{enumerate}
This paragraph should not be part of the note, as it is not indented.

View file

@ -611,6 +611,10 @@ Here is a footnote reference,[^1] and another.[^2] This should
*not* be a footnote reference, because it contains a space.[\^my
note] Here is an inline note.[^3]
> Notes can go in quotes.[^4]
1. And in list items.[^5]
This paragraph should not be part of the note, as it is not
indented.
@ -630,3 +634,9 @@ indented.
[^3]: This is *easier* to type. Inline notes may contain
[links](http://google.com) and `]` verbatim characters.
[^4]: In quote.
[^5]: In list.

View file

@ -319,6 +319,12 @@ Pandoc (Meta [Str "Pandoc",Space,Str "Test",Space,Str "Suite"] ["John MacFarlane
, HorizontalRule
, Header 1 [Str "Footnotes"]
, Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",NoteRef "1",Space,Str "and",Space,Str "another.",NoteRef "2",Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.",Str "[",Str "^",Str "my",Space,Str "note",Str "]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",NoteRef "3"]
, BlockQuote
[ Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",NoteRef "4"] ]
, OrderedList
[ [ Plain [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",NoteRef "5"] ]
]
, Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]
, Note "1"
[ Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."] ]
@ -330,4 +336,10 @@ Pandoc (Meta [Str "Pandoc",Space,Str "Test",Space,Str "Suite"] ["John MacFarlane
, Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."] ]
, Note "3"
[ Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] (Src "http://google.com" ""),Space,Str "and",Space,Code "]",Space,Str "verbatim",Space,Str "characters."] ]
, Note "4"
[ Para [Str "In",Space,Str "quote."] ]
, Note "5"
[ Para [Str "In",Space,Str "list."] ]
]

View file

@ -699,6 +699,11 @@ Here is a footnote reference, [1]_ and another. [2]_ This should
*not* be a footnote reference, because it contains a space.[^my
note] Here is an inline note. [3]_
Notes can go in quotes. [4]_
1. And in list items. [5]_
This paragraph should not be part of the note, as it is not
indented.
@ -723,6 +728,10 @@ indented.
This is *easier* to type. Inline notes may contain `links`_ and
``]`` verbatim characters.
.. [4] In quote.
.. [5] In list.
.. _embedded link: /url
.. _emphasized link: /url

View file

@ -377,6 +377,10 @@ links
}}}
and {\f1 ]} verbatim characters.\par}
}\par}
{\pard \f0 \sa180 \li720 \fi0 Notes can go in quotes.{\super\chftn}{\*\footnote\chftn\~\plain\pard {\pard \f0 \sa180 \li0 \fi0 In quote.\par}
}\par}
{\pard \f0 \sa0 \li360 \fi-360 1.\tx360\tab And in list items.{\super\chftn}{\*\footnote\chftn\~\plain\pard {\pard \f0 \sa180 \li0 \fi0 In list.\par}
}\sa180\par}
{\pard \f0 \sa180 \li0 \fi0 This paragraph should not be part of the note, as it is not indented.\par}
}

View file

@ -473,6 +473,12 @@ document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
<a id="Footnotes"></a>
<h1>Footnotes</h1>
<p>Here is a footnote reference,<sup class="footnoteRef" id="fnref1"><a href="#fn1">1</a></sup> and another.<sup class="footnoteRef" id="fnref2"><a href="#fn2">2</a></sup> This should <em>not</em> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<sup class="footnoteRef" id="fnref3"><a href="#fn3">3</a></sup></p>
<blockquote>
<p>Notes can go in quotes.<sup class="footnoteRef" id="fnref4"><a href="#fn4">4</a></sup></p>
</blockquote>
<ol>
<li>And in list items.<sup class="footnoteRef" id="fnref5"><a href="#fn5">5</a></sup></li>
</ol>
<p>This paragraph should not be part of the note, as it is not indented.</p>
<div class="footnotes">
<hr />
@ -487,6 +493,10 @@ document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+e+'<\/'+'a'+'>');
<a href="#fnref2" class="footnoteBacklink" title="Jump back to footnote 2">&#8617;</a></li>
<li id="fn3"><p>This is <em>easier</em> to type. Inline notes may contain <a href="http://google.com">links</a> and <code>]</code> verbatim characters.</p>
<a href="#fnref3" class="footnoteBacklink" title="Jump back to footnote 3">&#8617;</a></li>
<li id="fn4"><p>In quote.</p>
<a href="#fnref4" class="footnoteBacklink" title="Jump back to footnote 4">&#8617;</a></li>
<li id="fn5"><p>In list.</p>
<a href="#fnref5" class="footnoteBacklink" title="Jump back to footnote 5">&#8617;</a></li>
</ol>
</div>
</body>