aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs21
-rw-r--r--test/command/5519.md14
2 files changed, 24 insertions, 11 deletions
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index 72d083734..b542d4193 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -23,7 +23,8 @@ import Control.Monad.State.Strict
import Data.Char (isPunctuation, isSpace, isAlphaNum)
import Data.Default
import qualified Data.HashMap.Strict as H
-import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose)
+import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose,
+ isPrefixOf)
import qualified Data.Map as M
import Data.Maybe (fromMaybe)
import Data.Monoid (Any (..))
@@ -544,16 +545,14 @@ blockToMarkdown' opts (CodeBlock attribs str) = return $
| isEnabled Ext_fenced_code_blocks opts ->
tildes <> attrs <> cr <> text str <> cr <> tildes <> blankline
_ -> nest (writerTabStop opts) (text str) <> blankline
- where tildes = text $ case [ln | ln <- lines str, all (=='~') ln] of
- [] -> "~~~~"
- xs -> case maximum $ map length xs of
- n | n < 3 -> "~~~~"
- | otherwise -> replicate (n+1) '~'
- backticks = text $ case [ln | ln <- lines str, all (=='`') ln] of
- [] -> "```"
- xs -> case maximum $ map length xs of
- n | n < 3 -> "```"
- | otherwise -> replicate (n+1) '`'
+ where endline c = text $ case [length ln
+ | ln <- map trim (lines str)
+ , [c,c,c] `isPrefixOf` ln
+ , all (== c) ln] of
+ [] -> replicate 3 c
+ xs -> replicate (maximum xs + 1) c
+ backticks = endline '`'
+ tildes = endline '~'
attrs = if isEnabled Ext_fenced_code_attributes opts
then nowrap $ " " <> attrsToMarkdown attribs
else case attribs of
diff --git a/test/command/5519.md b/test/command/5519.md
new file mode 100644
index 000000000..a175ce9f9
--- /dev/null
+++ b/test/command/5519.md
@@ -0,0 +1,14 @@
+~~~
+% pandoc -t markdown
+``````{.attr}
+ ```
+ code
+ ```
+``````
+^D
+```` {.attr}
+ ```
+ code
+ ```
+````
+~~~