@@ -136,7 +136,6 @@ block = choice [ codeBlock
136136 , fieldList
137137 , imageBlock
138138 , figureBlock
139− , customCodeBlock
140139 , directive
141140 , header
142141 , hrule
@@ -234,9 +233,9 @@ para = try $ do
234233 blanklines
235234 case viewr (B.unMany result) of
236235 ys :> (Str xs) | "::" `isSuffixOf` xs -> do
237− codeblock <- option mempty codeBlockBody
236+ raw <- option mempty codeBlockBody
238237 return $ B.para (B.Many ys <> B.str (take (length xs - 1) xs))
239− <> codeblock
238+ <> raw
240239 _ -> return (B.para result)
241240
242241plain :: RSTParser Blocks
@@ -362,21 +361,6 @@ codeBlock = try $ codeBlockStart >> codeBlockBody
362361codeBlockBody :: Parser [Char] st Blocks
363362codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$> indentedBlock
364363
365−-- | The 'code-block' directive (from Sphinx) that allows a language to be
366−-- specified.
367−customCodeBlock :: Parser [Char] st Blocks
368−customCodeBlock = try $ do
369− string ".. "
370− string "code"
371− optional $ string "-block"
372− string "::"
373− skipSpaces
374− language <- manyTill anyChar newline
375− blanklines
376− result <- indentedBlock
377− return $ B.codeBlockWith ("", ["sourceCode", language], [])
378− $ stripTrailingNewlines result
379−
380364figureBlock :: RSTParser Blocks
381365figureBlock = try $ do
382366 string ".. figure::"
@@ -567,6 +551,8 @@ directive = try $ do
567551 case trim top of
568552 "" -> stateRstDefaultRole def
569553 role -> role })
554+ "code" -> codeblock (lookup "number-lines" fields) (trim top) body
555+ "code-block" -> codeblock (lookup "number-lines" fields) (trim top) body
570556 "math" -> return $ B.para $ mconcat $ map B.displayMath
571557 $ toChunks $ top ++ "\n\n" ++ body
572558 _ -> return mempty
@@ -577,6 +563,17 @@ toChunks = dropWhile null
577563 . map (trim . unlines)
578564 . splitBy (all (`elem` " \t")) . lines
579565
566+codeblock :: Maybe String -> String -> String -> RSTParser Blocks
567+codeblock numberLines lang body =
568+ return $ B.codeBlockWith attribs $ stripTrailingNewlines body
569+ where attribs = ("", classes, kvs)
570+ classes = "sourceCode" : lang
571+ : maybe [] (\_ -> ["numberLines"]) numberLines
572+ kvs = case numberLines of
573+ Just "" -> []
574+ Nothing -> []
575+ Just n -> [("startFrom",n)]
576+
580577---
581578--- note block
582579---