summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2006-12-21 19:33:57 +0000
committerfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2006-12-21 19:33:57 +0000
commitd2105f66930f4d14bbeabe2bbbe4f764bb9cb10f (patch)
treeb214e05ce9ddb0fe3330174946318fb56f7e884d
parent48b8267126fc82aadf289762718b8c01e5331e4c (diff)
+ 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
-rw-r--r--src/Text/Pandoc/Writers/RTF.hs10
-rw-r--r--tests/testsuite.native12
-rw-r--r--tests/testsuite.txt4
-rw-r--r--tests/writer.html10
-rw-r--r--tests/writer.latex7
-rw-r--r--tests/writer.markdown10
-rw-r--r--tests/writer.native12
-rw-r--r--tests/writer.rst9
-rw-r--r--tests/writer.rtf4
-rw-r--r--tests/writer.smart.html10
10 files changed, 85 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Writers/RTF.hs b/src/Text/Pandoc/Writers/RTF.hs
index 6ae32df8b..19b4a5934 100644
--- a/src/Text/Pandoc/Writers/RTF.hs
+++ b/src/Text/Pandoc/Writers/RTF.hs
@@ -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.
diff --git a/tests/testsuite.native b/tests/testsuite.native
index 910de1f39..4f1efaec7 100644
--- a/tests/testsuite.native
+++ b/tests/testsuite.native
@@ -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."] ]
]
diff --git a/tests/testsuite.txt b/tests/testsuite.txt
index 9d6481126..2d3b7967d 100644
--- a/tests/testsuite.txt
+++ b/tests/testsuite.txt
@@ -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.
diff --git a/tests/writer.html b/tests/writer.html
index 2d067c8d5..c421d24c4 100644
--- a/tests/writer.html
+++ b/tests/writer.html
@@ -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>
diff --git a/tests/writer.latex b/tests/writer.latex
index c813f511d..dec35635a 100644
--- a/tests/writer.latex
+++ b/tests/writer.latex
@@ -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.
diff --git a/tests/writer.markdown b/tests/writer.markdown
index c91546aaa..5dc995eed 100644
--- a/tests/writer.markdown
+++ b/tests/writer.markdown
@@ -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.
+
+
diff --git a/tests/writer.native b/tests/writer.native
index 910de1f39..4f1efaec7 100644
--- a/tests/writer.native
+++ b/tests/writer.native
@@ -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."] ]
]
diff --git a/tests/writer.rst b/tests/writer.rst
index 327b780ab..1ae88ad2d 100644
--- a/tests/writer.rst
+++ b/tests/writer.rst
@@ -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
diff --git a/tests/writer.rtf b/tests/writer.rtf
index 073ec3054..0993bb202 100644
--- a/tests/writer.rtf
+++ b/tests/writer.rtf
@@ -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}
}
diff --git a/tests/writer.smart.html b/tests/writer.smart.html
index 0ea82cfdd..d78ac4561 100644
--- a/tests/writer.smart.html
+++ b/tests/writer.smart.html
@@ -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>