From 87dda2109d01098dcf41c01559d3e91e2627cd10 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Thu, 5 Apr 2018 19:48:39 +0300 Subject: Muse writer: escape horizontal rule only if at the beginning of the line --- src/Text/Pandoc/Writers/Muse.hs | 11 ++++++++--- test/Tests/Writers/Muse.hs | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Text/Pandoc/Writers/Muse.hs b/src/Text/Pandoc/Writers/Muse.hs index 4986aa8a6..e9cf6d433 100644 --- a/src/Text/Pandoc/Writers/Muse.hs +++ b/src/Text/Pandoc/Writers/Muse.hs @@ -325,7 +325,6 @@ conditionalEscapeString :: Bool -> String -> String conditionalEscapeString isInsideLinkDescription s = if any (`elem` ("#*<=>|" :: String)) s || "::" `isInfixOf` s || - "----" `isInfixOf` s || "~~" `isInfixOf` s || "[[" `isInfixOf` s || ("]" `isInfixOf` s && isInsideLinkDescription) || @@ -395,12 +394,18 @@ urlEscapeBrackets (']':xs) = '%':'5':'D':urlEscapeBrackets xs urlEscapeBrackets (x:xs) = x:urlEscapeBrackets xs urlEscapeBrackets [] = [] +isHorizontalRule :: String -> Bool +isHorizontalRule s = + ((length xs) >= 4) && null ys + where (xs, ys) = span (== '-') s + fixOrEscape :: Bool -> Inline -> Bool fixOrEscape sp (Str "-") = sp fixOrEscape sp (Str ";") = not sp -fixOrEscape sp (Str s) = sp && (startsWithMarker isDigit s || +fixOrEscape sp (Str s) = (sp && (startsWithMarker isDigit s || startsWithMarker isAsciiLower s || - startsWithMarker isAsciiUpper s) + startsWithMarker isAsciiUpper s)) + || isHorizontalRule s fixOrEscape _ Space = True fixOrEscape _ SoftBreak = True fixOrEscape _ _ = False diff --git a/test/Tests/Writers/Muse.hs b/test/Tests/Writers/Muse.hs index 33ba2b1fb..115a00f83 100644 --- a/test/Tests/Writers/Muse.hs +++ b/test/Tests/Writers/Muse.hs @@ -259,7 +259,9 @@ tests = [ testGroup "block elements" ] ] , "horizontal rule" =: horizontalRule =?> "----" - , "escape horizontal rule" =: para (text "----") =?> "----" + , "escape horizontal rule" =: para (text "----") =?> "----" + , "escape long horizontal rule" =: para (text "----------") =?> "----------" + , "don't escape horizontal inside paragraph" =: para (text "foo ---- bar") =?> "foo ---- bar" , "escape nonbreaking space" =: para (text "~~") =?> "~~" , testGroup "tables" [ "table without header" =: -- cgit v1.2.3