@@ -171,9 +171,13 @@ blockToRST (Header level _ inlines) = do
171171 let headerChar = if level > 5 then ' ' else "=-~^'" !! (level - 1)
172172 let border = text $ replicate (offset contents) headerChar
173173 return $ nowrap $ contents $$ border $$ blankline
174−blockToRST (CodeBlock (_,classes,_) str) = do
174+blockToRST (CodeBlock (_,classes,kvs) str) = do
175175 opts <- stOptions <$> get
176176 let tabstop = writerTabStop opts
177+ let startnum = maybe "" (\x -> " " <> text x) $ lookup "startFrom" kvs
178+ let numberlines = if "numberLines" `elem` classes
179+ then " :number-lines:" <> startnum
180+ else empty
177181 if "haskell" `elem` classes && "literate" `elem` classes &&
178182 isEnabled Ext_literate_haskell opts
179183 then return $ prefixed "> " (text str) $$ blankline
@@ -181,7 +185,7 @@ blockToRST (CodeBlock (_,classes,_) str) = do
181185 (case [c | c <- classes,
182186 c `notElem` ["sourceCode","literate","numberLines"]] of
183187 [] -> "::"
184− (lang:_) -> ".. code:: " <> text lang)
188+ (lang:_) -> (".. code:: " <> text lang) $$ numberlines)
185189 $+$ nest tabstop (text str) $$ blankline
186190blockToRST (BlockQuote blocks) = do
187191 tabstop <- get >>= (return . writerTabStop . stOptions)