git.iko.soy/typeable/pandoc
on master help sign in
RST reader: pass arbitrary attributes through in code blocks.

Exceptions: name (which becomes the id), class (which becomes the classes), and number-lines (which is treated specially to fit with pandoc highlighting). Closes #6465.

commita8b3117e049f0a5821f1512f6c41e285b01efd25 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 17 Jun 2020, 09:57 (6 years ago) parentbf95282
1 file changed+12−12
src/Text/Pandoc/Readers/RST.hs+12−12
src/Text/Pandoc/Readers/RST.hs+12−12
@@ -21,7 +21,7 @@ import Control.Monad.Identity (Identity (..))
2121import Data.Char (isHexDigit, isSpace, toUpper, isAlphaNum)
2222import Data.List (deleteFirstsBy, elemIndex, nub, sort, transpose)
2323import qualified Data.Map as M
24−import Data.Maybe (fromMaybe, maybeToList)
24+import Data.Maybe (fromMaybe, maybeToList, isJust)
2525import Data.Sequence (ViewR (..), viewr)
2626import Data.Text (Text)
2727import qualified Data.Text as T
@@ -487,10 +487,9 @@ includeDirective top fields body = do
487487 let contents' = T.unlines contentLines'' <> "\n"
488488 case lookup "code" fields of
489489 Just lang -> do
490− let numberLines = lookup "number-lines" fields
491490 let classes = maybe [] T.words (lookup "class" fields)
492491 let ident = maybe "" trimr $ lookup "name" fields
493− codeblock ident classes numberLines (trimr lang) contents' False
492+ codeblock ident classes fields (trimr lang) contents' False
494493 Nothing -> case lookup "literal" fields of
495494 Just _ -> return $ B.rawBlock "rst" contents'
496495 Nothing -> do
@@ -731,8 +730,8 @@ directive' = do
731730 "" -> stateRstHighlight def
732731 lang -> Just lang })
733732 x | x == "code" || x == "code-block" || x == "sourcecode" ->
734− codeblock name classes
735− (lookup "number-lines" fields) (trim top) body True
733+ codeblock name classes (map (second trimr) fields)
734+ (trim top) body True
736735 "aafig" -> do
737736 let attribs = (name, ["aafig"], map (second trimr) fields)
738737 return $ B.codeBlockWith attribs $ stripTrailingNewlines body
@@ -1007,21 +1006,22 @@ toChunks = dropWhile T.null
10071006 then "\\begin{aligned}\n" <> s <> "\n\\end{aligned}"
10081007 else s
10091008
1010−codeblock :: Text -> [Text] -> Maybe Text -> Text -> Text -> Bool
1009+codeblock :: Text -> [Text] -> [(Text, Text)] -> Text -> Text -> Bool
10111010 -> RSTParser m Blocks
1012−codeblock ident classes numberLines lang body rmTrailingNewlines =
1011+codeblock ident classes fields lang body rmTrailingNewlines = do
10131012 return $ B.codeBlockWith attribs $ stripTrailingNewlines' body
10141013 where stripTrailingNewlines' = if rmTrailingNewlines
10151014 then stripTrailingNewlines
10161015 else id
10171016 attribs = (ident, classes', kvs)
10181017 classes' = lang
1019− : maybe [] (const ["numberLines"]) numberLines
1018+ : ["numberLines" | isJust (lookup "number-lines" fields)]
10201019 ++ classes
1021− kvs = maybe [] (\n -> case trimr n of
1022− "" -> []
1023− xs -> [("startFrom", xs)])
1024− numberLines
1020+ kvs = [(k,v) | (k,v) <- fields, k /= "number-lines", k /= "class",
1021+ k /= "id", k /= "name"]
1022+ ++ case lookup "number-lines" fields of
1023+ Just v | not (T.null v) -> [("startFrom", v)]
1024+ _ -> []
10251025
10261026---
10271027--- note block