+ 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:
parent
48b8267126
commit
d2105f6693
10 changed files with 85 additions and 3 deletions
|
@ -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.
|
||||
|
|
|
@ -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."] ]
|
||||
]
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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">↩</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">↩</a></li>
|
||||
<li id="fn4"><p>In quote.</p>
|
||||
<a href="#fnref4" class="footnoteBacklink" title="Jump back to footnote 4">↩</a></li>
|
||||
<li id="fn5"><p>In list.</p>
|
||||
<a href="#fnref5" class="footnoteBacklink" title="Jump back to footnote 5">↩</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
@ -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."] ]
|
||||
]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
|
||||
}
|
||||
|
|
|
@ -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">↩</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">↩</a></li>
|
||||
<li id="fn4"><p>In quote.</p>
|
||||
<a href="#fnref4" class="footnoteBacklink" title="Jump back to footnote 4">↩</a></li>
|
||||
<li id="fn5"><p>In list.</p>
|
||||
<a href="#fnref5" class="footnoteBacklink" title="Jump back to footnote 5">↩</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</body>
|
||||
|
|
Loading…
Add table
Reference in a new issue