git.iko.soy/typeable/pandoc
on master help sign in
Parse raw ConTeXt environments as TeX in markdown reader.

Resolves Issue #73. Also made some structural changes to parsing of raw LaTeX environments. Previously there was a special block parser for LaTeX environments. It returned a Para element containing the raw TeX inline. This has been removed, and the raw LaTeX environment parser is now used in the rawLaTeXInline parser. The effect is exactly the same, except that we can now handle consecutive LaTeX and ConTeXt environments not separated by spaces. This new flexibility is required by the example in Issue #73: \placeformula \startformula L_{1} = L_{2} \stopformula API change: The LaTeX reader now exports rawLaTeXEnvironment' (which returns a string) rather than rawLaTeXEnvironment (which returns a block element). This is more likely to be useful in other applications. Added test cases for raw ConTeXt environments to markdown-reader-more.txt. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1405 788f1e2b-df1e-0410-8736-df70ead52e1b

commitc8a56a2864191831e234224eb5638ee53672b314 authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> dateMon 11 Aug 2008, 07:04 (18 years ago) parentb7a9d32
4 files changed+52−14
Text/Pandoc/Readers/LaTeX.hs+15−10 Text/Pandoc/Readers/Markdown.hs+22−3 tests/markdown-reader-more.native+4−1 tests/markdown-reader-more.txt+11
Text/Pandoc/Readers/LaTeX.hs+15−10
@@ -30,7 +30,7 @@ Conversion of LaTeX to 'Pandoc' document.
3030module Text.Pandoc.Readers.LaTeX (
3131 readLaTeX,
3232 rawLaTeXInline,
33− rawLaTeXEnvironment
33+ rawLaTeXEnvironment'
3434 ) where
3535
3636import Text.ParserCombinators.Parsec
@@ -92,13 +92,12 @@ begin name = try $ do
9292end :: [Char] -> GenParser Char st [Char]
9393end name = try $ do
9494 string $ "\\end{" ++ name ++ "}"
95− spaces
9695 return name
9796
9897-- | Returns a list of block elements containing the contents of an
9998-- environment.
10099environment :: [Char] -> GenParser Char ParserState [Block]
101−environment name = try $ begin name >> spaces >> manyTill block (end name)
100+environment name = try $ begin name >> spaces >> manyTill block (end name) >>~ spaces
102101
103102anyEnvironment :: GenParser Char ParserState Block
104103anyEnvironment = try $ do
@@ -109,6 +108,7 @@ anyEnvironment = try $ do
109108 optional commandArgs
110109 spaces
111110 contents <- manyTill block (end (name ++ star))
111+ spaces
112112 return $ BlockQuote contents
113113
114114--
@@ -377,7 +377,15 @@ specialEnvironment = do -- these are always parsed as raw
377377-- | Parse any LaTeX environment and return a Para block containing
378378-- the whole literal environment as raw TeX.
379379rawLaTeXEnvironment :: GenParser Char st Block
380−rawLaTeXEnvironment = try $ do
380+rawLaTeXEnvironment = do
381+ contents <- rawLaTeXEnvironment'
382+ spaces
383+ return $ Para [TeX contents]
384+
385+-- | Parse any LaTeX environment and return a string containing
386+-- the whole literal environment as raw TeX.
387+rawLaTeXEnvironment' :: GenParser Char st String
388+rawLaTeXEnvironment' = try $ do
381389 string "\\begin{"
382390 name <- many1 letter
383391 star <- option "" (string "*") -- for starred variants
@@ -386,14 +394,11 @@ rawLaTeXEnvironment = try $ do
386394 args <- option [] commandArgs
387395 let argStr = concat args
388396 contents <- manyTill (choice [ (many1 (noneOf "\\")),
389− (do
390− (Para [TeX s]) <- rawLaTeXEnvironment
391− return s),
397+ rawLaTeXEnvironment',
392398 string "\\" ])
393399 (end name')
394− spaces
395− return $ Para [TeX $ "\\begin{" ++ name' ++ "}" ++ argStr ++
396− concat contents ++ "\\end{" ++ name' ++ "}"]
400+ return $ "\\begin{" ++ name' ++ "}" ++ argStr ++
401+ concat contents ++ "\\end{" ++ name' ++ "}"
397402
398403unknownEnvironment :: GenParser Char ParserState Block
399404unknownEnvironment = try $ do
Text/Pandoc/Readers/Markdown.hs+22−3
@@ -38,7 +38,7 @@ import Data.Char ( isAlphaNum, isAlpha, isLower, isDigit )
3838import Data.Maybe
3939import Text.Pandoc.Definition
4040import Text.Pandoc.Shared
41−import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXEnvironment )
41+import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXEnvironment' )
4242import Text.Pandoc.Readers.HTML ( rawHtmlBlock, anyHtmlBlockTag,
4343 anyHtmlInlineTag, anyHtmlTag,
4444 anyHtmlEndTag, htmlEndTag, extractTagType,
@@ -272,7 +272,6 @@ block = do
272272 , bulletList
273273 , orderedList
274274 , definitionList
275− , rawLaTeXEnvironment
276275 , para
277276 , rawHtmlBlocks
278277 , plain
@@ -1144,7 +1143,27 @@ inlineNote = try $ do
11441143 return $ Note [Para contents]
11451144
11461145rawLaTeXInline' :: GenParser Char ParserState Inline
1147−rawLaTeXInline' = failIfStrict >> rawLaTeXInline
1146+rawLaTeXInline' = do
1147+ failIfStrict
1148+ (rawConTeXtEnvironment' >>= return . TeX)
1149+ <|> (rawLaTeXEnvironment' >>= return . TeX)
1150+ <|> rawLaTeXInline
1151+
1152+rawConTeXtEnvironment' :: GenParser Char st String
1153+rawConTeXtEnvironment' = try $ do
1154+ string "\\start"
1155+ completion <- inBrackets (letter <|> digit <|> spaceChar)
1156+ <|> (many1 letter)
1157+ contents <- manyTill (rawConTeXtEnvironment' <|> (count 1 anyChar))
1158+ (try $ string "\\stop" >> string completion)
1159+ return $ "\\start" ++ completion ++ concat contents ++ "\\stop" ++ completion
1160+
1161+inBrackets :: (GenParser Char st Char) -> GenParser Char st String
1162+inBrackets parser = do
1163+ char '['
1164+ contents <- many parser
1165+ char ']'
1166+ return $ "[" ++ contents ++ "]"
11481167
11491168rawHtmlInline' :: GenParser Char ParserState Inline
11501169rawHtmlInline' = do
tests/markdown-reader-more.native+4−1
@@ -1,5 +1,8 @@
11Pandoc (Meta [] [] "")
22[ Header 1 [Str "Additional",Space,Str "markdown",Space,Str "reader",Space,Str "tests"]
33, Header 2 [Str "Blank",Space,Str "line",Space,Str "before",Space,Str "URL",Space,Str "in",Space,Str "link",Space,Str "reference"]
4−, Para [Link [Str "foo"] ("/url",""),Space,Str "and",Space,Link [Str "bar"] ("/url","title")] ]
4+, Para [Link [Str "foo"] ("/url",""),Space,Str "and",Space,Link [Str "bar"] ("/url","title")]
5+, Header 2 [Str "Raw",Space,Str "ConTeXt",Space,Str "environments"]
6+, Para [TeX "\\placeformula",Space,TeX "\\startformula\n L_{1} = L_{2}\n \\stopformula"]
7+, Para [TeX "\\start[a2]\n\\start[a2]\n\\stop[a2]\n\\stop[a2]"] ]
58
tests/markdown-reader-more.txt+11
@@ -11,3 +11,14 @@
1111/url
1212"title"
1313
14+## Raw ConTeXt environments
15+
16+\placeformula \startformula
17+ L_{1} = L_{2}
18+ \stopformula
19+
20+\start[a2]
21+\start[a2]
22+\stop[a2]
23+\stop[a2]
24+