From 7c35c0bc253c3ca15c29adf3309f08a42b99127c Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Tue, 15 Jul 2008 20:41:27 +0000 Subject: Fixed bug in Markdown parser: regular $s triggering math mode. For example: "shoes ($20) and socks ($5)." The fix consists in two new restrictions: + the $ that ends a math span may not be directly followed by a digit. + no blank lines may be included within a math span. Thanks to Joseph Reagle for noticing the bug. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1326 788f1e2b-df1e-0410-8736-df70ead52e1b --- Text/Pandoc/Readers/Markdown.hs | 3 ++- tests/testsuite.native | 1 + tests/testsuite.txt | 1 + tests/writer.docbook | 5 +++++ tests/writer.html | 2 ++ tests/writer.latex | 2 ++ tests/writer.man | 2 ++ tests/writer.markdown | 1 + tests/writer.native | 1 + tests/writer.rst | 1 + tests/writer.rtf | 1 + tests/writer.texinfo | 2 ++ 12 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Text/Pandoc/Readers/Markdown.hs b/Text/Pandoc/Readers/Markdown.hs index f702a6e33..db9e214b0 100644 --- a/Text/Pandoc/Readers/Markdown.hs +++ b/Text/Pandoc/Readers/Markdown.hs @@ -873,8 +873,9 @@ math = try $ do failIfStrict char '$' notFollowedBy space - words' <- sepBy1 mathWord (many1 space) + words' <- sepBy1 mathWord (many1 (spaceChar <|> (newline >>~ notFollowedBy' blankline))) char '$' + notFollowedBy digit return $ Math $ joinWithSep " " words' emph :: GenParser Char ParserState Inline diff --git a/tests/testsuite.native b/tests/testsuite.native index 4ecc51438..564faf0d8 100644 --- a/tests/testsuite.native +++ b/tests/testsuite.native @@ -294,6 +294,7 @@ Pandoc (Meta [Str "Pandoc",Space,Str "Test",Space,Str "Suite"] ["John MacFarlane , BulletList [ [ Plain [Str "To",Space,Str "get",Space,Str "the",Space,Str "famous",Space,Str "equation,",Space,Str "write",Space,Code "$e = mc^2$",Str "."] ] , [ Plain [Str "$",Str "22,000",Space,Str "is",Space,Str "a",Space,Emph [Str "lot"],Space,Str "of",Space,Str "money",Str ".",Space,Str "So",Space,Str "is",Space,Str "$",Str "34,000",Str ".",Space,Str "(It",Space,Str "worked",Space,Str "if",Space,Quoted DoubleQuote [Str "lot"],Space,Str "is",Space,Str "emphasized",Str ".",Str ")"] ] + , [ Plain [Str "Shoes",Space,Str "(",Str "$",Str "20)",Space,Str "and",Space,Str "socks",Space,Str "(",Str "$",Str "5)",Str "."] ] , [ Plain [Str "Escaped",Space,Code "$",Str ":",Space,Str "$",Str "73",Space,Emph [Str "this",Space,Str "should",Space,Str "be",Space,Str "emphasized"],Space,Str "23",Str "$",Str "."] ] ] , Para [Str "Here",Apostrophe,Str "s",Space,Str "a",Space,Str "LaTeX",Space,Str "table:"] , Para [TeX "\\begin{tabular}{|l|l|}\\hline\nAnimal & Number \\\\ \\hline\nDog & 2 \\\\\nCat & 1 \\\\ \\hline\n\\end{tabular}"] diff --git a/tests/testsuite.txt b/tests/testsuite.txt index dc5340021..d55a93a4e 100644 --- a/tests/testsuite.txt +++ b/tests/testsuite.txt @@ -482,6 +482,7 @@ These shouldn't be math: - To get the famous equation, write `$e = mc^2$`. - $22,000 is a *lot* of money. So is $34,000. (It worked if "lot" is emphasized.) +- Shoes ($20) and socks ($5). - Escaped `$`: $73 *this should be emphasized* 23\$. Here's a LaTeX table: diff --git a/tests/writer.docbook b/tests/writer.docbook index e8f963b58..424141cc9 100644 --- a/tests/writer.docbook +++ b/tests/writer.docbook @@ -902,6 +902,11 @@ These should not be escaped: \$ \\ \> \[ \{ worked if lot is emphasized.) + + + Shoes ($20) and socks ($5). + + Escaped $: $73 diff --git a/tests/writer.html b/tests/writer.html index 819917c57..38eaf6a2a 100644 --- a/tests/writer.html +++ b/tests/writer.html @@ -796,6 +796,8 @@ Blah >lot of money. So is $34,000. (It worked if “lot” is emphasized.)
  • Shoes ($20) and socks ($5).
  • Escaped $: $73