@@ -23,7 +23,7 @@ import Control.Monad.Identity (Identity (..))
2323import Data.Char (isHexDigit, isSpace, toUpper, isAlphaNum)
2424import Data.List (deleteFirstsBy, elemIndex, nub, sort, transpose)
2525import qualified Data.Map as M
26−import Data.Maybe (fromMaybe)
26+import Data.Maybe (fromMaybe, maybeToList)
2727import Data.Sequence (ViewR (..), viewr)
2828import Data.Text (Text)
2929import qualified Data.Text as T
@@ -390,11 +390,13 @@ quotedBlock = try $ do
390390codeBlockStart :: Monad m => ParserT Text st m Char
391391codeBlockStart = string "::" >> blankline >> blankline
392392
393−codeBlock :: (HasReaderOptions st, Monad m) => ParserT Text st m Blocks
393+codeBlock :: Monad m => ParserT Text ParserState m Blocks
394394codeBlock = try $ codeBlockStart >> codeBlockBody
395395
396−codeBlockBody :: (HasReaderOptions st, Monad m) => ParserT Text st m Blocks
397−codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$>
396+codeBlockBody :: Monad m => ParserT Text ParserState m Blocks
397+codeBlockBody = do
398+ lang <- stateRstHighlight <$> getState
399+ try $ B.codeBlockWith ("", maybeToList lang, []) . stripTrailingNewlines <$>
398400 (indentedBlock <|> quotedBlock)
399401
400402lhsCodeBlock :: Monad m => RSTParser m Blocks
@@ -716,6 +718,11 @@ directive' = do
716718 case trim top of
717719 "" -> stateRstDefaultRole def
718720 role -> role })
721+ "highlight" -> mempty <$ updateState (\s ->
722+ s { stateRstHighlight =
723+ case trim top of
724+ "" -> stateRstHighlight def
725+ lang -> Just lang })
719726 x | x == "code" || x == "code-block" || x == "sourcecode" ->
720727 codeblock name classes
721728 (lookup "number-lines" fields) (trim top) body True