@@ -47,7 +47,7 @@ import Text.Pandoc.Builder (Inlines, Blocks, trimInlines, (<>))
47import qualified Text.Pandoc.Builder as B
47import qualified Text.Pandoc.Builder as B
48import Data.Monoid (mconcat, mempty)
48import Data.Monoid (mconcat, mempty)
49import Data.Sequence (viewr, ViewR(..))
49import Data.Sequence (viewr, ViewR(..))
50−import Data.Char (toLower, isHexDigit)
50+import Data.Char (toLower, isHexDigit, isSpace)
52-- | Parse reStructuredText string and return Pandoc document.
52-- | Parse reStructuredText string and return Pandoc document.
53readRST :: ReaderOptions -- ^ Reader options
53readRST :: ReaderOptions -- ^ Reader options
@@ -335,6 +335,13 @@ indentedBlock = try $ do
335 optional blanklines
335 optional blanklines
336 return $ unlines lns
336 return $ unlines lns
338+quotedBlock :: Parser [Char] st [Char]
339+quotedBlock = try $ do
340+ quote <- lookAhead $ oneOf "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
341+ lns <- many1 $ lookAhead (char quote) >> anyLine
343+ return $ unlines lns
338codeBlockStart :: Parser [Char] st Char
345codeBlockStart :: Parser [Char] st Char
339codeBlockStart = string "::" >> blankline >> blankline
346codeBlockStart = string "::" >> blankline >> blankline
@@ -342,7 +349,8 @@ codeBlock :: Parser [Char] st Blocks
342codeBlock = try $ codeBlockStart >> codeBlockBody
349codeBlock = try $ codeBlockStart >> codeBlockBody
344codeBlockBody :: Parser [Char] st Blocks
351codeBlockBody :: Parser [Char] st Blocks
345−codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$> indentedBlock
352+codeBlockBody = try $ B.codeBlock . stripTrailingNewlines <$>
353+ (indentedBlock <|> quotedBlock)
347lhsCodeBlock :: RSTParser Blocks
355lhsCodeBlock :: RSTParser Blocks
348lhsCodeBlock = try $ do
356lhsCodeBlock = try $ do
@@ -513,7 +521,6 @@ directive = try $ do
513-- TODO: line-block, parsed-literal, table, csv-table, list-table
521-- TODO: line-block, parsed-literal, table, csv-table, list-table
515-- include
523-- include
518directive' :: RSTParser Blocks
525directive' :: RSTParser Blocks
519directive' = do
526directive' = do
@@ -594,6 +601,13 @@ directive' = do
594 Just t -> B.link (escapeURI $ trim t) ""
601 Just t -> B.link (escapeURI $ trim t) ""
595 $ B.image src "" alt
602 $ B.image src "" alt
596 Nothing -> B.image src "" alt
603 Nothing -> B.image src "" alt
605+ let attrs = ("", (splitBy isSpace $ trim top), map (\(k,v) -> (k, trimr v)) fields)
606+ -- directive content or the first immediately following element
607+ children <- case body of
609+ _ -> parseFromString parseBlocks body'
610+ return $ B.divWith attrs children
597 _ -> return mempty
611 _ -> return mempty