@@ -41,7 +41,7 @@ import Data.Char (isHexDigit, isSpace, toLower, toUpper, isAlphaNum)
4141import Data.List (deleteFirstsBy, elemIndex, intercalate, isInfixOf, isSuffixOf,
4242 nub, sort, transpose)
4343import qualified Data.Map as M
44−import Data.Maybe (fromMaybe, isJust)
44+import Data.Maybe (fromMaybe)
4545import Data.Sequence (ViewR (..), viewr)
4646import Data.Text (Text)
4747import qualified Data.Text as T
@@ -503,12 +503,9 @@ includeDirective top fields body = do
503503 case lookup "code" fields of
504504 Just lang -> do
505505 let numberLines = lookup "number-lines" fields
506− let classes = trimr lang : ["numberLines" | isJust numberLines] ++
507− maybe [] words (lookup "class" fields)
508− let kvs = maybe [] (\n -> [("startFrom", trimr n)]) numberLines
506+ let classes = maybe [] words (lookup "class" fields)
509507 let ident = maybe "" trimr $ lookup "name" fields
510− let attribs = (ident, classes, kvs)
511− return $ B.codeBlockWith attribs contents'
508+ codeblock ident classes numberLines (trimr lang) contents' False
512509 Nothing -> case lookup "literal" fields of
513510 Just _ -> return $ B.rawBlock "rst" contents'
514511 Nothing -> do
@@ -739,7 +736,7 @@ directive' = do
739736 role -> role })
740737 x | x == "code" || x == "code-block" || x == "sourcecode" ->
741738 codeblock name classes
742− (lookup "number-lines" fields) (trim top) body
739+ (lookup "number-lines" fields) (trim top) body True
743740 "aafig" -> do
744741 let attribs = (name, ["aafig"], map (second trimr) fields)
745742 return $ B.codeBlockWith attribs $ stripTrailingNewlines body
@@ -990,18 +987,21 @@ toChunks = dropWhile null
990987 then "\\begin{aligned}\n" ++ s ++ "\n\\end{aligned}"
991988 else s
992989
993−codeblock :: String -> [String] -> Maybe String -> String -> String
990+codeblock :: String -> [String] -> Maybe String -> String -> String -> Bool
994991 -> RSTParser m Blocks
995−codeblock ident classes numberLines lang body =
996− return $ B.codeBlockWith attribs $ stripTrailingNewlines body
997− where attribs = (ident, classes', kvs)
992+codeblock ident classes numberLines lang body rmTrailingNewlines =
993+ return $ B.codeBlockWith attribs $ stripTrailingNewlines' body
994+ where stripTrailingNewlines' = if rmTrailingNewlines
995+ then stripTrailingNewlines
996+ else id
997+ attribs = (ident, classes', kvs)
998998 classes' = lang
999999 : maybe [] (const ["numberLines"]) numberLines
10001000 ++ classes
1001− kvs = case numberLines of
1002− Just "" -> []
1003− Nothing -> []
1004− Just n -> [("startFrom",trim n)]
1001+ kvs = maybe [] (\n -> case trimr n of
1002+ [] -> []
1003+ xs -> [("startFrom", xs)])
1004+ numberLines
10051005
10061006---
10071007--- note block