diff options
author | Lucas Escot <flupe@users.noreply.github.com> | 2020-02-13 19:27:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-13 10:27:34 -0800 |
commit | 29c2670da2a267094148f3edacaed5fc258bcdd1 (patch) | |
tree | 667643a6a8d73033f8480f5dd8417cc7476a6a31 /src/Text/Pandoc/Readers | |
parent | 3a181f0a978cb838615b86ffbc705255d92fdf66 (diff) | |
download | pandoc-29c2670da2a267094148f3edacaed5fc258bcdd1.tar.gz |
Add highlight directive to the rST reader (#6140)
Diffstat (limited to 'src/Text/Pandoc/Readers')
-rw-r--r-- | src/Text/Pandoc/Readers/RST.hs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs index ba1902a6e..e6e6d56e8 100644 --- a/src/Text/Pandoc/Readers/RST.hs +++ b/src/Text/Pandoc/Readers/RST.hs @@ -23,7 +23,7 @@ import Control.Monad.Identity (Identity (..)) import Data.Char (isHexDigit, isSpace, toUpper, isAlphaNum) import Data.List (deleteFirstsBy, elemIndex, nub, sort, transpose) import qualified Data.Map as M -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe, maybeToList) import Data.Sequence (ViewR (..), viewr) import Data.Text (Text) import qualified Data.Text as T @@ -390,11 +390,13 @@ quotedBlock = try $ do codeBlockStart :: Monad m => ParserT Text st m Char codeBlockStart = string "::" >> blankline >> blankline -codeBlock :: (HasReaderOptions st, Monad m) => ParserT Text st m Blocks +codeBlock :: Monad m => ParserT Text ParserState m Blocks codeBlock = try $ codeBlockStart >> codeBlockBody -codeBlockBody :: (HasReaderOptions st, Monad m) => ParserT Text st m Blocks -codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$> +codeBlockBody :: Monad m => ParserT Text ParserState m Blocks +codeBlockBody = do + lang <- stateRstHighlight <$> getState + try $ B.codeBlockWith ("", maybeToList lang, []) . stripTrailingNewlines <$> (indentedBlock <|> quotedBlock) lhsCodeBlock :: Monad m => RSTParser m Blocks @@ -716,6 +718,11 @@ directive' = do case trim top of "" -> stateRstDefaultRole def role -> role }) + "highlight" -> mempty <$ updateState (\s -> + s { stateRstHighlight = + case trim top of + "" -> stateRstHighlight def + lang -> Just lang }) x | x == "code" || x == "code-block" || x == "sourcecode" -> codeblock name classes (lookup "number-lines" fields) (trim top) body True |