summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2023-06-27 18:06:44 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2023-06-27 18:06:44 -0700
commit561510166f59b024beb5d49f1c0575ba8efce147 (patch)
tree74c2d4fc804b8591f22966f20c517a4d5a1c72ac
parent3981f2515ded1aa51749ba016febacced8949306 (diff)
Support --id-prefix for markdown output.
Closes #8878.
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs18
-rw-r--r--src/Text/Pandoc/Writers/Markdown/Inline.hs30
2 files changed, 24 insertions, 24 deletions
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index 43b2e7d5b..712adfae8 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -313,9 +313,9 @@ noteToMarkdown opts num blocks = do
-- | (Code) blocks with a single class and no attributes can just use it
-- standalone, no need to bother with curly braces.
-classOrAttrsToMarkdown :: Attr -> Doc Text
-classOrAttrsToMarkdown ("",[cls],[]) = literal cls
-classOrAttrsToMarkdown attrs = attrsToMarkdown attrs
+classOrAttrsToMarkdown :: WriterOptions -> Attr -> Doc Text
+classOrAttrsToMarkdown _ ("",[cls],[]) = literal cls
+classOrAttrsToMarkdown opts attrs = attrsToMarkdown opts attrs
-- | Ordered list start parser for use in Para below.
olMarker :: Parsec Text ParserState ()
@@ -383,8 +383,8 @@ blockToMarkdown' opts (Div attrs ils) = do
| isEnabled Ext_fenced_divs opts &&
attrs /= nullAttr ->
let attrsToMd = if variant == Commonmark
- then attrsToMarkdown
- else classOrAttrsToMarkdown
+ then attrsToMarkdown opts
+ else classOrAttrsToMarkdown opts
in nowrap (literal ":::" <+> attrsToMd attrs) $$
chomp contents $$
literal ":::" <> blankline
@@ -493,10 +493,10 @@ blockToMarkdown' opts (Header level attr inlines) = do
&& id' == autoId -> empty
(id',_,_) | isEnabled Ext_mmd_header_identifiers opts ->
space <> brackets (literal id')
- _ | variant == Markua -> attrsToMarkua attr
+ _ | variant == Markua -> attrsToMarkua opts attr
| isEnabled Ext_header_attributes opts ||
isEnabled Ext_attributes opts ->
- space <> attrsToMarkdown attr
+ space <> attrsToMarkdown opts attr
| otherwise -> empty
contents <- inlineListToMarkdown opts $
-- ensure no newlines; see #3736
@@ -546,7 +546,7 @@ blockToMarkdown' opts (CodeBlock attribs str) = do
backticks <> attrs <> cr <> literal str <> cr <> backticks <> blankline
| isEnabled Ext_fenced_code_blocks opts ->
tildes <> attrs <> cr <> literal str <> cr <> tildes <> blankline
- _ | variant == Markua -> blankline <> attrsToMarkua attribs <> cr <> backticks <> cr <>
+ _ | variant == Markua -> blankline <> attrsToMarkua opts attribs <> cr <> backticks <> cr <>
literal str <> cr <> backticks <> cr <> blankline
| otherwise -> nest (writerTabStop opts) (literal str) <> blankline
where
@@ -560,7 +560,7 @@ blockToMarkdown' opts (CodeBlock attribs str) = do
tildes = endline '~'
attrs = if isEnabled Ext_fenced_code_attributes opts ||
isEnabled Ext_attributes opts
- then nowrap $ " " <> classOrAttrsToMarkdown attribs
+ then nowrap $ " " <> classOrAttrsToMarkdown opts attribs
else case attribs of
(_,cls:_,_) -> " " <> literal cls
_ -> empty
diff --git a/src/Text/Pandoc/Writers/Markdown/Inline.hs b/src/Text/Pandoc/Writers/Markdown/Inline.hs
index 235e521be..2091db842 100644
--- a/src/Text/Pandoc/Writers/Markdown/Inline.hs
+++ b/src/Text/Pandoc/Writers/Markdown/Inline.hs
@@ -113,11 +113,11 @@ escapeMarkuaString :: Text -> Text
escapeMarkuaString s = foldr (uncurry T.replace) s [("--","~-~-"),
("**","~*~*"),("//","~/~/"),("^^","~^~^"),(",,","~,~,")]
-attrsToMarkdown :: Attr -> Doc Text
-attrsToMarkdown attribs = braces $ hsep [attribId, attribClasses, attribKeys]
+attrsToMarkdown :: WriterOptions -> Attr -> Doc Text
+attrsToMarkdown opts attribs = braces $ hsep [attribId, attribClasses, attribKeys]
where attribId = case attribs of
("",_,_) -> empty
- (i,_,_) -> "#" <> escAttr i
+ (i,_,_) -> "#" <> escAttr (writerIdentifierPrefix opts <> i)
attribClasses = case attribs of
(_,[],_) -> empty
(_,cs,_) -> hsep $
@@ -134,13 +134,13 @@ attrsToMarkdown attribs = braces $ hsep [attribId, attribClasses, attribKeys]
escAttrChar '\\' = literal "\\\\"
escAttrChar c = literal $ T.singleton c
-attrsToMarkua:: Attr -> Doc Text
-attrsToMarkua attributes
+attrsToMarkua:: WriterOptions -> Attr -> Doc Text
+attrsToMarkua opts attributes
| null list = empty
| otherwise = braces $ intercalateDocText list
where attrId = case attributes of
("",_,_) -> []
- (i,_,_) -> [literal $ "id: " <> i]
+ (i,_,_) -> [literal $ "id: " <> writerIdentifierPrefix opts <> i]
-- all non explicit (key,value) attributes besides id are getting
-- a default class key to be Markua conform
attrClasses = case attributes of
@@ -184,7 +184,7 @@ linkAttributes :: WriterOptions -> Attr -> Doc Text
linkAttributes opts attr =
if (isEnabled Ext_link_attributes opts ||
isEnabled Ext_attributes opts) && attr /= nullAttr
- then attrsToMarkdown attr
+ then attrsToMarkdown opts attr
else empty
getKey :: Doc Text -> Key
@@ -361,11 +361,11 @@ inlineToMarkdown opts (Span attrs ils) = do
_ -> id
$ case variant of
PlainText -> contents
- Markua -> "`" <> contents <> "`" <> attrsToMarkua attrs
+ Markua -> "`" <> contents <> "`" <> attrsToMarkua opts attrs
_ | attrs == nullAttr -> contents
| isEnabled Ext_bracketed_spans opts ->
let attrs' = if attrs /= nullAttr
- then attrsToMarkdown attrs
+ then attrsToMarkdown opts attrs
else empty
in "[" <> contents <> "]" <> attrs'
| isEnabled Ext_raw_html opts ||
@@ -483,9 +483,9 @@ inlineToMarkdown opts (Code attr str) = do
let attrsEnabled = isEnabled Ext_inline_code_attributes opts ||
isEnabled Ext_attributes opts
let attrs = case variant of
- Markua -> attrsToMarkua attr
+ Markua -> attrsToMarkua opts attr
_ -> if attrsEnabled && attr /= nullAttr
- then attrsToMarkdown attr
+ then attrsToMarkdown opts attr
else empty
case variant of
PlainText -> return $ literal str
@@ -529,7 +529,7 @@ inlineToMarkdown opts (Math DisplayMath str) = do
variant <- asks envVariant
case () of
_ | variant == Markua -> do
- let attributes = attrsToMarkua (addKeyValueToAttr ("",[],[])
+ let attributes = attrsToMarkua opts (addKeyValueToAttr ("",[],[])
("format", "latex"))
return $ blankline <> attributes <> cr <> literal "```" <> cr
<> literal str <> cr <> literal "```" <> blankline
@@ -667,8 +667,8 @@ inlineToMarkdown opts lnk@(Link attr@(ident,classes,kvs) txt (src, tit)) = do
| useAuto -> return $ literal srcSuffix
| otherwise -> return linktext
Markua
- | T.null tit -> return $ result <> attrsToMarkua attr
- | otherwise -> return $ result <> attrsToMarkua attributes
+ | T.null tit -> return $ result <> attrsToMarkua opts attr
+ | otherwise -> return $ result <> attrsToMarkua opts attributes
where result = "[" <> linktext <> "](" <> (literal src) <> ")"
attributes = addKeyValueToAttr attr ("title", tit)
-- Use wikilinks where possible
@@ -710,7 +710,7 @@ inlineToMarkdown opts img@(Image attr alternate (source, tit))
else alternate
linkPart <- inlineToMarkdown opts (Link attr txt (source, tit))
alt <- inlineListToMarkdown opts alternate
- let attributes | variant == Markua = attrsToMarkua $
+ let attributes | variant == Markua = attrsToMarkua opts $
addKeyValueToAttr (addKeyValueToAttr attr ("title", tit))
("alt", render (Just (writerColumns opts)) alt)
| otherwise = empty