diff options
-rw-r--r-- | src/Text/Pandoc/Readers/Muse.hs | 15 | ||||
-rw-r--r-- | test/Tests/Readers/Muse.hs | 34 |
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)") |