mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-24 01:06:30 +00:00
Markdown writer: Ensure the code fence is long enough.
Previously too few backticks were used when the code block contained an indented line of backticks. (Ditto tildes.) Cloess #5519.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
~~~
|
||||
% pandoc -t markdown
|
||||
``````{.attr}
|
||||
```
|
||||
code
|
||||
```
|
||||
``````
|
||||
^D
|
||||
```` {.attr}
|
||||
```
|
||||
code
|
||||
```
|
||||
````
|
||||
~~~
|
||||
Reference in New Issue
Block a user