diff options
author | John MacFarlane <fiddlosopher@gmail.com> | 2011-12-31 11:40:47 -0800 |
---|---|---|
committer | John MacFarlane <fiddlosopher@gmail.com> | 2011-12-31 11:40:47 -0800 |
commit | 3cf60c73061f247b531da4b3c18664c6134bee53 (patch) | |
tree | 55cded45b8b5503ff8fadfe91f0e6807a06ac9de | |
parent | c264dc4f5b86688552f663f1487d135b035f0b62 (diff) | |
download | pandoc-3cf60c73061f247b531da4b3c18664c6134bee53.tar.gz |
Support for math in RST reader and writer.
Inline math uses the :math:`...` construct.
Display math uses
.. math:: ...
or if multilin
.. math::
...
These seem to be supported now by rst2latex.py.
-rw-r--r-- | src/Text/Pandoc/Readers/RST.hs | 9 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/RST.hs | 8 | ||||
-rw-r--r-- | tests/rst-reader.native | 9 | ||||
-rw-r--r-- | tests/rst-reader.rst | 29 | ||||
-rw-r--r-- | tests/writer.rst | 17 |
5 files changed, 56 insertions, 16 deletions
diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs index 02154b5a3..456b23ce8 100644 --- a/src/Text/Pandoc/Readers/RST.hs +++ b/src/Text/Pandoc/Readers/RST.hs @@ -363,18 +363,18 @@ customCodeBlock = try $ do -- | The 'math' directive (from Sphinx) for display math. mathBlock :: GenParser Char st Block -mathBlock = mathBlockMultiline <|> mathBlockOneLine +mathBlock = try $ do + string ".. math::" + mathBlockMultiline <|> mathBlockOneLine mathBlockOneLine :: GenParser Char st Block mathBlockOneLine = try $ do - string ".. math:" result <- manyTill anyChar newline blanklines return $ Para [Math DisplayMath $ removeLeadingTrailingSpace result] mathBlockMultiline :: GenParser Char st Block mathBlockMultiline = try $ do - string ".. math::" blanklines result <- indentedBlock -- a single block can contain multiple equations, which need to go @@ -384,7 +384,8 @@ mathBlockMultiline = try $ do let startsWithColon (':':_) = True startsWithColon _ = False let lns' = dropWhile startsWithColon lns - let eqs = map unwords $ filter (not . null) $ splitBy null lns' + let eqs = map (removeLeadingTrailingSpace . unlines) + $ filter (not . null) $ splitBy null lns' return $ Para $ map (Math DisplayMath) eqs lhsCodeBlock :: GenParser Char ParserState Block diff --git a/src/Text/Pandoc/Writers/RST.hs b/src/Text/Pandoc/Writers/RST.hs index 282935bbd..db2ad0dfb 100644 --- a/src/Text/Pandoc/Writers/RST.hs +++ b/src/Text/Pandoc/Writers/RST.hs @@ -286,9 +286,11 @@ inlineToRST (Str str) = return $ text $ escapeString str inlineToRST (Math t str) = do modify $ \st -> st{ stHasMath = True } return $ if t == InlineMath - then ":math:`" <> text str <> "`\\ " - else blankline $$ ".. math::" $$ blankline $$ - nest 3 (text str) $$ blankline + then ":math:`" <> text str <> "`" <> beforeNonBlank "\\ " + else if '\n' `elem` str + then blankline $$ ".. math::" $$ + blankline $$ nest 3 (text str) $$ blankline + else blankline $$ (".. math:: " <> text str) $$ blankline inlineToRST (RawInline _ _) = return empty inlineToRST (LineBreak) = return cr -- there's no line break in RST inlineToRST Space = return space diff --git a/tests/rst-reader.native b/tests/rst-reader.native index 612db85bd..8d273a1d7 100644 --- a/tests/rst-reader.native +++ b/tests/rst-reader.native @@ -305,4 +305,11 @@ Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite",Str ": ,Para [Note [Para [Str "Note",Space,Str "with",Space,Str "continuation",Space,Str "line",Str "."]]] ,Para [Note [Para [Str "Note",Space,Str "with"],Para [Str "continuation",Space,Str "block",Str "."]]] ,Para [Note [Para [Str "Note",Space,Str "with",Space,Str "continuation",Space,Str "line"],Para [Str "and",Space,Str "a",Space,Str "second",Space,Str "para",Str "."]]] -,Para [Str "Not",Space,Str "in",Space,Str "note",Str "."]] +,Para [Str "Not",Space,Str "in",Space,Str "note",Str "."] +,Header 1 [Str "Math"] +,Para [Str "Some",Space,Str "inline",Space,Str "math",Space,Math InlineMath "E=mc^2",Str ".",Space,Str "Now",Space,Str "some",Space,Str "display",Space,Str "math",Str ":"] +,Para [Math DisplayMath "E=mc^2"] +,Para [Math DisplayMath "E = mc^2"] +,Para [Math DisplayMath "E = mc^2",Math DisplayMath "\\alpha = \\beta"] +,Para [Math DisplayMath "E &= mc^2\\\\\nF &= \\pi E",Math DisplayMath "F &= \\gamma \\alpha^2"] +,Para [Str "All",Space,Str "done",Str "."]] diff --git a/tests/rst-reader.rst b/tests/rst-reader.rst index 519f0080c..cfebd2054 100644 --- a/tests/rst-reader.rst +++ b/tests/rst-reader.rst @@ -536,3 +536,32 @@ Footnotes Not in note. +Math +==== + +Some inline math :math:`E=mc^2`\ . Now some +display math: + +.. math:: E=mc^2 + +.. math:: + + E = mc^2 + +.. math:: + + E = mc^2 + + \alpha = \beta + +.. math:: + :label hithere + :nowrap + + E &= mc^2\\ + F &= \pi E + + F &= \gamma \alpha^2 + +All done. + diff --git a/tests/writer.rst b/tests/writer.rst index 654c924a5..09fd8dcb3 100644 --- a/tests/writer.rst +++ b/tests/writer.rst @@ -598,15 +598,16 @@ LaTeX ===== - -- :math:`$2+2=4$` -- :math:`$x \in y$` -- :math:`$\alpha \wedge \omega$` -- :math:`$223$` -- :math:`$p$`-Tree +- :math:`2+2=4` +- :math:`x \in y` +- :math:`\alpha \wedge \omega` +- :math:`223` +- :math:`p`\ -Tree - Here’s some display math: - :math:`$$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$` -- Here’s one that has a line break in it: - :math:`$\alpha + \omega \times x^2$`. + + .. math:: \frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h} + +- Here’s one that has a line break in it: :math:`\alpha + \omega \times x^2`\ . These shouldn’t be math: |