diff options
author | John MacFarlane <jgm@berkeley.edu> | 2017-09-11 14:01:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-11 14:01:05 -0700 |
commit | ddecd727838c017f376cdd8d51e14db1b9652217 (patch) | |
tree | bc240b183d2aff8862f61f9f19101cd1969617a8 | |
parent | 1307b023af801d8eabeef7404478c4d923c82b0a (diff) | |
parent | 508c3a64d823989dc6613ac7656851989530af65 (diff) | |
download | pandoc-ddecd727838c017f376cdd8d51e14db1b9652217.tar.gz |
Merge pull request #3911 from labdsf/muse-reader-braces
Muse reader: parse {{{ }}} example syntax
-rw-r--r-- | src/Text/Pandoc/Readers/Muse.hs | 9 | ||||
-rw-r--r-- | test/Tests/Readers/Muse.hs | 33 |
2 files changed, 41 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/Muse.hs b/src/Text/Pandoc/Readers/Muse.hs index 02ac783dd..cf5fc0da2 100644 --- a/src/Text/Pandoc/Readers/Muse.hs +++ b/src/Text/Pandoc/Readers/Muse.hs @@ -30,7 +30,6 @@ Conversion of Muse text to 'Pandoc' document. -} {- TODO: -- {{{ }}} syntax for <example> - Page breaks (five "*") - Headings with anchors (make it round trip with Muse writer) - Org tables @@ -178,6 +177,7 @@ blockElements :: PandocMonad m => MuseParser m (F Blocks) blockElements = choice [ comment , separator , header + , example , exampleTag , literal , centerTag @@ -222,6 +222,13 @@ header = try $ do attr <- registerHeader ("", [], []) (runF content defaultParserState) return $ B.headerWith attr level <$> content +example :: PandocMonad m => MuseParser m (F Blocks) +example = try $ do + string "{{{" + optionMaybe blankline + contents <- manyTill anyChar $ try (optionMaybe blankline >> string "}}}") + return $ return $ B.codeBlock contents + exampleTag :: PandocMonad m => MuseParser m (F Blocks) exampleTag = do (attr, contents) <- htmlElement "example" diff --git a/test/Tests/Readers/Muse.hs b/test/Tests/Readers/Muse.hs index 03dd895e0..baa4df7fd 100644 --- a/test/Tests/Readers/Muse.hs +++ b/test/Tests/Readers/Muse.hs @@ -248,6 +248,39 @@ tests = lineBlock [ "Foo bar" ] <> lineBlock [ "Foo bar" ] <> lineBlock [ "\160\160\160Foo" ] + , testGroup "Example" + [ "Braces on separate lines" =: + T.unlines [ "{{{" + , "Example line" + , "}}}" + ] =?> + codeBlock "Example line" + , "Spaces after opening braces" =: + T.unlines [ "{{{ " + , "Example line" + , "}}}" + ] =?> + codeBlock "Example line" + , "One blank line in the beginning" =: + T.unlines [ "{{{" + , "" + , "Example line" + , "}}}" + ] =?> + codeBlock "\nExample line" + , "One blank line in the end" =: + T.unlines [ "{{{" + , "Example line" + , "" + , "}}}" + ] =?> + codeBlock "Example line\n" + -- Amusewiki requires braces to be on separate line, + -- this is an extension. + , "One line" =: + "{{{Example line}}}" =?> + codeBlock "Example line" + ] , testGroup "Example tag" [ "Tags on separate lines" =: T.unlines [ "<example>" |