git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #2894 from sid-kap/rst-code-class

Add class option for code block in RST reader

commit344412cba83b0f2ecbc74f2805be6da4f3d2d24b authorJohn MacFarlane <jgm@berkeley.edu> dateThu 12 May 2016, 00:03 (10 years ago) parent609fb33ff489a5
2 files changed+37−6
src/Text/Pandoc/Readers/RST.hs+8−6 tests/Tests/Readers/RST.hs+29
src/Text/Pandoc/Readers/RST.hs+8−6
@@ -586,8 +586,9 @@ directive' = do
586586 case trim top of
587587 "" -> stateRstDefaultRole def
588588 role -> role })
589− "code" -> codeblock (lookup "number-lines" fields) (trim top) body
590− "code-block" -> codeblock (lookup "number-lines" fields) (trim top) body
589+ x | x == "code" || x == "code-block" ->
590+ codeblock (words $ fromMaybe [] $ lookup "class" fields)
591+ (lookup "number-lines" fields) (trim top) body
591592 "aafig" -> do
592593 let attribs = ("", ["aafig"], map (\(k,v) -> (k, trimr v)) fields)
593594 return $ B.codeBlockWith attribs $ stripTrailingNewlines body
@@ -713,12 +714,13 @@ toChunks = dropWhile null
713714 . map (trim . unlines)
714715 . splitBy (all (`elem` (" \t" :: String))) . lines
715716
716−codeblock :: Maybe String -> String -> String -> RSTParser Blocks
717−codeblock numberLines lang body =
717+codeblock :: [String] -> Maybe String -> String -> String -> RSTParser Blocks
718+codeblock classes numberLines lang body =
718719 return $ B.codeBlockWith attribs $ stripTrailingNewlines body
719− where attribs = ("", classes, kvs)
720− classes = "sourceCode" : lang
720+ where attribs = ("", classes', kvs)
721+ classes' = "sourceCode" : lang
721722 : maybe [] (\_ -> ["numberLines"]) numberLines
723+ ++ classes
722724 kvs = case numberLines of
723725 Just "" -> []
724726 Nothing -> []
tests/Tests/Readers/RST.hs+29
@@ -94,6 +94,35 @@ tests = [ "line block with blank line" =:
9494 ("A-1-B_2_C:3:D+4+E.5.F_\n\n" ++
9595 ".. _A-1-B_2_C:3:D+4+E.5.F: https://example.com\n") =?>
9696 para (link "https://example.com" "" "A-1-B_2_C:3:D+4+E.5.F")
97+ , "Code directive with class and number-lines" =: unlines
98+ [ ".. code::python"
99+ , " :number-lines: 34"
100+ , " :class: class1 class2 class3"
101+ , ""
102+ , " def func(x):"
103+ , " return y"
104+ ] =?>
105+ ( doc $ codeBlockWith
106+ ( ""
107+ , ["sourceCode", "python", "numberLines", "class1", "class2", "class3"]
108+ , [ ("startFrom", "34") ]
109+ )
110+ "def func(x):\n return y"
111+ )
112+ , "Code directive with number-lines, no line specified" =: unlines
113+ [ ".. code::python"
114+ , " :number-lines: "
115+ , ""
116+ , " def func(x):"
117+ , " return y"
118+ ] =?>
119+ ( doc $ codeBlockWith
120+ ( ""
121+ , ["sourceCode", "python", "numberLines"]
122+ , [ ("startFrom", "") ]
123+ )
124+ "def func(x):\n return y"
125+ )
97126 , testGroup "literal / line / code blocks"
98127 [ "indented literal block" =: unlines
99128 [ "::"