aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-09-09 12:11:05 -0700
committerGitHub <noreply@github.com>2017-09-09 12:11:05 -0700
commit4f2dd91e36744de32d7be03eac5d017b67ac69b7 (patch)
tree8095129fd8fa14c89a8e97b90967cd2b14b0a8a8
parent23582298765cb960507a5eaa507921a7adae6abb (diff)
parent2230371304f299ca7333af8ad0ee7bcd099a4aa0 (diff)
downloadpandoc-4f2dd91e36744de32d7be03eac5d017b67ac69b7.tar.gz
Merge pull request #3904 from labdsf/muse-reader-code
Muse reader: debug inline code markup
-rw-r--r--src/Text/Pandoc/Readers/Muse.hs15
-rw-r--r--test/Tests/Readers/Muse.hs34
2 files changed, 38 insertions, 11 deletions
diff --git a/src/Text/Pandoc/Readers/Muse.hs b/src/Text/Pandoc/Readers/Muse.hs
index 2454057fa..3b089772f 100644
--- a/src/Text/Pandoc/Readers/Muse.hs
+++ b/src/Text/Pandoc/Readers/Muse.hs
@@ -575,13 +575,6 @@ enclosedInlines :: (PandocMonad m, Show a, Show b)
enclosedInlines start end = try $
trimInlinesF . mconcat <$> enclosed start end inline
-verbatimBetween :: PandocMonad m
- => Char
- -> MuseParser m String
-verbatimBetween c = try $ do
- char c
- many1Till anyChar $ char c
-
inlineTag :: PandocMonad m
=> (Inlines -> Inlines)
-> String
@@ -617,9 +610,13 @@ code = try $ do
sp <- if sourceColumn pos == 1
then pure mempty
else skipMany1 spaceChar >> pure B.space
- cd <- verbatimBetween '='
+ char '='
+ contents <- many1Till (noneOf "\n\r" <|> (newline <* notFollowedBy newline)) $ char '='
+ guard $ not $ null contents
+ guard $ head contents `notElem` " \t\n"
+ guard $ last contents `notElem` " \t\n"
notFollowedBy nonspaceChar
- return $ return (sp B.<> B.code cd)
+ return $ return (sp B.<> B.code contents)
codeTag :: PandocMonad m => MuseParser m (F Inlines)
codeTag = do
diff --git a/test/Tests/Readers/Muse.hs b/test/Tests/Readers/Muse.hs
index dac167a92..6f602d7c3 100644
--- a/test/Tests/Readers/Muse.hs
+++ b/test/Tests/Readers/Muse.hs
@@ -72,9 +72,39 @@ tests =
, "Linebreak" =: "Line <br> break" =?> para ("Line" <> linebreak <> "break")
- , "Code" =: "=foo(bar)=" =?> para (code "foo(bar)")
+ , testGroup "Code markup"
+ [ "Code" =: "=foo(bar)=" =?> para (code "foo(bar)")
- , "Not code" =: "a=b= =c=d" =?> para (text "a=b= =c=d")
+ , "Not code" =: "a=b= =c=d" =?> para (text "a=b= =c=d")
+
+ -- Emacs Muse 3.20 parses this as code, we follow Amusewiki
+ , "Not code if closing = is detached" =: "=this is not a code =" =?> para "=this is not a code ="
+
+ , "Not code if opening = is detached" =: "= this is not a code=" =?> para "= this is not a code="
+
+ , "One character code" =: "=c=" =?> para (code "c")
+
+ , "Three = characters is not a code" =: "===" =?> para "==="
+
+ , "Multiline code markup" =:
+ "foo =bar\nbaz= end of code" =?>
+ para (text "foo " <> code "bar\nbaz" <> text " end of code")
+
+{- Emacs Muse 3.20 has a bug: it publishes
+ - <p>foo <code>bar
+ -
+ - baz</code> foo</p>
+ - which is displayed as one paragraph by browsers.
+ - We follow Amusewiki here and avoid joining paragraphs.
+ -}
+ , "No multiparagraph code" =:
+ T.unlines [ "foo =bar"
+ , ""
+ , "baz= foo"
+ ] =?>
+ para "foo =bar" <>
+ para "baz= foo"
+ ]
, "Code tag" =: "<code>foo(bar)</code>" =?> para (code "foo(bar)")