@@ -171,9 +171,13 @@ blockToRST (Header level _ inlines) = do
171 let headerChar = if level > 5 then ' ' else "=-~^'" !! (level - 1)
171 let headerChar = if level > 5 then ' ' else "=-~^'" !! (level - 1)
172 let border = text $ replicate (offset contents) headerChar
172 let border = text $ replicate (offset contents) headerChar
173 return $ nowrap $ contents $$ border $$ blankline
173 return $ nowrap $ contents $$ border $$ blankline
174−blockToRST (CodeBlock (_,classes,_) str) = do
174+blockToRST (CodeBlock (_,classes,kvs) str) = do
175 opts <- stOptions <$> get
175 opts <- stOptions <$> get
176 let tabstop = writerTabStop opts
176 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
177 if "haskell" `elem` classes && "literate" `elem` classes &&
181 if "haskell" `elem` classes && "literate" `elem` classes &&
178 isEnabled Ext_literate_haskell opts
182 isEnabled Ext_literate_haskell opts
179 then return $ prefixed "> " (text str) $$ blankline
183 then return $ prefixed "> " (text str) $$ blankline
@@ -181,7 +185,7 @@ blockToRST (CodeBlock (_,classes,_) str) = do
181 (case [c | c <- classes,
185 (case [c | c <- classes,
182 c `notElem` ["sourceCode","literate","numberLines"]] of
186 c `notElem` ["sourceCode","literate","numberLines"]] of
183 [] -> "::"
187 [] -> "::"
184− (lang:_) -> ".. code:: " <> text lang)
188+ (lang:_) -> (".. code:: " <> text lang) $$ numberlines)
185 $+$ nest tabstop (text str) $$ blankline
189 $+$ nest tabstop (text str) $$ blankline
186blockToRST (BlockQuote blocks) = do
190blockToRST (BlockQuote blocks) = do
187 tabstop <- get >>= (return . writerTabStop . stOptions)
191 tabstop <- get >>= (return . writerTabStop . stOptions)