aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Readers
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Readers')
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs34
1 files changed, 23 insertions, 11 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index 471417458..91462caca 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -39,6 +39,7 @@ import Text.Pandoc.Definition
import Text.Pandoc.Shared
import Data.Maybe ( fromMaybe )
import Data.Char ( chr )
+import Data.List ( isPrefixOf, isSuffixOf )
-- | Parse LaTeX from string and return 'Pandoc' document.
readLaTeX :: ParserState -- ^ Parser state, including options for parser
@@ -228,33 +229,45 @@ mathBlockWith start end = try (do
-- list blocks
--
-list = bulletList <|> orderedList <?> "list"
+list = bulletList <|> orderedList <|> definitionList <?> "list"
-listItem = try (do
- ("item", _, _) <- command
+listItem = try $ do
+ ("item", _, args) <- command
spaces
state <- getState
let oldParserContext = stateParserContext state
updateState (\state -> state {stateParserContext = ListItemState})
blocks <- many block
updateState (\state -> state {stateParserContext = oldParserContext})
- return blocks)
+ opt <- case args of
+ ([x]) | "[" `isPrefixOf` x && "]" `isSuffixOf` x ->
+ parseFromString (many inline) $ tail $ init x
+ _ -> return []
+ return (opt, blocks)
-orderedList = try (do
+orderedList = try $ do
begin "enumerate"
spaces
items <- many listItem
end "enumerate"
spaces
- return (OrderedList items))
+ return (OrderedList $ map snd items)
-bulletList = try (do
+bulletList = try $ do
begin "itemize"
spaces
items <- many listItem
end "itemize"
spaces
- return (BulletList items))
+ return (BulletList $ map snd items)
+
+definitionList = try $ do
+ begin "description"
+ spaces
+ items <- many listItem
+ end "description"
+ spaces
+ return (DefinitionList items)
--
-- paragraph block
@@ -353,9 +366,8 @@ unknownEnvironment = try (do
return result)
unknownCommand = try (do
- notFollowedBy' (string "\\end{itemize}")
- notFollowedBy' (string "\\end{enumerate}")
- notFollowedBy' (string "\\end{document}")
+ notFollowedBy' $ choice $ map end
+ ["itemize", "enumerate", "description", "document"]
(name, star, args) <- command
spaces
let argStr = concat args