git.iko.soy/typeable/pandoc
on master help sign in
Markdown reader: added inlines, inlines1.
86730f4John MacFarlane
src/Text/Pandoc/Readers/Markdown.hs+23−18
@@ -155,7 +155,7 @@ inlinesInBalancedBrackets = do
155 (_, raw) <- withRaw $ charsInBalancedBrackets 1
155 (_, raw) <- withRaw $ charsInBalancedBrackets 1
156 guard $ not $ null raw
156 guard $ not $ null raw
157 parseFromString' (setPosition pos >>
157 parseFromString' (setPosition pos >>
158− trimInlinesF . mconcat <$> many inline) (init raw)
158+ trimInlinesF <$> inlines) (init raw)
159
159
160charsInBalancedBrackets :: PandocMonad m => Int -> MarkdownParser m ()
160charsInBalancedBrackets :: PandocMonad m => Int -> MarkdownParser m ()
161charsInBalancedBrackets 0 = return ()
161charsInBalancedBrackets 0 = return ()
@@ -187,8 +187,8 @@ rawTitleBlockLine = do
187titleLine :: PandocMonad m => MarkdownParser m (F Inlines)
187titleLine :: PandocMonad m => MarkdownParser m (F Inlines)
188titleLine = try $ do
188titleLine = try $ do
189 raw <- rawTitleBlockLine
189 raw <- rawTitleBlockLine
190− res <- parseFromString' (many inline) raw
190+ res <- parseFromString' inlines raw
191− return $ trimInlinesF $ mconcat res
191+ return $ trimInlinesF res
192
192
193authorsLine :: PandocMonad m => MarkdownParser m (F [Inlines])
193authorsLine :: PandocMonad m => MarkdownParser m (F [Inlines])
194authorsLine = try $ do
194authorsLine = try $ do
@@ -203,8 +203,8 @@ authorsLine = try $ do
203dateLine :: PandocMonad m => MarkdownParser m (F Inlines)
203dateLine :: PandocMonad m => MarkdownParser m (F Inlines)
204dateLine = try $ do
204dateLine = try $ do
205 raw <- rawTitleBlockLine
205 raw <- rawTitleBlockLine
206− res <- parseFromString' (many inline) raw
206+ res <- parseFromString' inlines raw
207− return $ trimInlinesF $ mconcat res
207+ return $ trimInlinesF res
208
208
209titleBlock :: PandocMonad m => MarkdownParser m ()
209titleBlock :: PandocMonad m => MarkdownParser m ()
210titleBlock = pandocTitleBlock <|> mmdTitleBlock
210titleBlock = pandocTitleBlock <|> mmdTitleBlock
@@ -954,7 +954,7 @@ definitionListItem :: PandocMonad m => Bool -> MarkdownParser m (F (Inlines, [Bl
954definitionListItem compact = try $ do
954definitionListItem compact = try $ do
955 rawLine' <- anyLine
955 rawLine' <- anyLine
956 raw <- many1 $ defRawBlock compact
956 raw <- many1 $ defRawBlock compact
957− term <- parseFromString' (trimInlinesF . mconcat <$> many inline) rawLine'
957+ term <- parseFromString' (trimInlinesF <$> inlines) rawLine'
958 contents <- mapM (parseFromString' parseBlocks . (++"\n")) raw
958 contents <- mapM (parseFromString' parseBlocks . (++"\n")) raw
959 optional blanklines
959 optional blanklines
960 return $ liftM2 (,) term (sequence contents)
960 return $ liftM2 (,) term (sequence contents)
@@ -1008,7 +1008,7 @@ normalDefinitionList = do
1008para :: PandocMonad m => MarkdownParser m (F Blocks)
1008para :: PandocMonad m => MarkdownParser m (F Blocks)
1009para = try $ do
1009para = try $ do
1010 exts <- getOption readerExtensions
1010 exts <- getOption readerExtensions
1011− result <- trimInlinesF . mconcat <$> many1 inline
1011+ result <- trimInlinesF <$> inlines1
1012 option (B.plain <$> result)
1012 option (B.plain <$> result)
1013 $ try $ do
1013 $ try $ do
1014 newline
1014 newline
@@ -1038,7 +1038,7 @@ para = try $ do
1038 _ -> return $ B.para result'
1038 _ -> return $ B.para result'
1039
1039
1040plain :: PandocMonad m => MarkdownParser m (F Blocks)
1040plain :: PandocMonad m => MarkdownParser m (F Blocks)
1041−plain = fmap B.plain . trimInlinesF . mconcat <$> many1 inline
1041+plain = fmap B.plain . trimInlinesF <$> inlines1
1042
1042
1043--
1043--
1044-- raw html
1044-- raw html
@@ -1142,7 +1142,7 @@ lineBlock :: PandocMonad m => MarkdownParser m (F Blocks)
1142lineBlock = try $ do
1142lineBlock = try $ do
1143 guardEnabled Ext_line_blocks
1143 guardEnabled Ext_line_blocks
1144 lines' <- lineBlockLines >>=
1144 lines' <- lineBlockLines >>=
1145− mapM (parseFromString' (trimInlinesF . mconcat <$> many inline))
1145+ mapM (parseFromString' (trimInlinesF <$> inlines))
1146 return $ B.lineBlock <$> sequence lines'
1146 return $ B.lineBlock <$> sequence lines'
1147
1147
1148--
1148--
@@ -1249,7 +1249,7 @@ tableCaption = try $ do
1249 guardEnabled Ext_table_captions
1249 guardEnabled Ext_table_captions
1250 skipNonindentSpaces
1250 skipNonindentSpaces
1251 string ":" <|> string "Table:"
1251 string ":" <|> string "Table:"
1252− trimInlinesF . mconcat <$> many1 inline <* blanklines
1252+ trimInlinesF <$> inlines1 <* blanklines
1253
1253
1254-- Parse a simple table with '---' header and one line per row.
1254-- Parse a simple table with '---' header and one line per row.
1255simpleTable :: PandocMonad m
1255simpleTable :: PandocMonad m
@@ -1363,11 +1363,10 @@ pipeTableRow = try $ do
1363 return $ sequence cells
1363 return $ sequence cells
1364
1364
1365pipeTableCell :: PandocMonad m => MarkdownParser m (F Blocks)
1365pipeTableCell :: PandocMonad m => MarkdownParser m (F Blocks)
1366−pipeTableCell = do
1366+pipeTableCell =
1367− result <- many inline
1367+ (do result <- inlines1
1368− if null result
1369− then return mempty
1370− else return $ B.plain . mconcat <$> sequence result
1368+ return $ B.plain <$> result)
1369+ <|> return mempty
1371
1370
1372pipeTableHeaderPart :: PandocMonad m => ParserT [Char] st m (Alignment, Int)
1371pipeTableHeaderPart :: PandocMonad m => ParserT [Char] st m (Alignment, Int)
1373pipeTableHeaderPart = try $ do
1372pipeTableHeaderPart = try $ do
@@ -1443,6 +1442,12 @@ table = try $ do
1443-- inline
1442-- inline
1444--
1443--
1445
1444
1445+inlines :: PandocMonad m => MarkdownParser m (F Inlines)
1446+inlines = mconcat <$> many inline
1447+
1448+inlines1 :: PandocMonad m => MarkdownParser m (F Inlines)
1449+inlines1 = mconcat <$> many1 inline
1450+
1446inline :: PandocMonad m => MarkdownParser m (F Inlines)
1451inline :: PandocMonad m => MarkdownParser m (F Inlines)
1447inline = choice [ whitespace
1452inline = choice [ whitespace
1448 , bareURL
1453 , bareURL
@@ -1779,8 +1784,8 @@ referenceLink constructor (lab, raw) = do
1779 when (raw' == "") $ guardEnabled Ext_shortcut_reference_links
1784 when (raw' == "") $ guardEnabled Ext_shortcut_reference_links
1780 let labIsRef = raw' == "" || raw' == "[]"
1785 let labIsRef = raw' == "" || raw' == "[]"
1781 let key = toKey $ if labIsRef then raw else raw'
1786 let key = toKey $ if labIsRef then raw else raw'
1782− parsedRaw <- parseFromString' (mconcat <$> many inline) raw'
1787+ parsedRaw <- parseFromString' inlines raw'
1783− fallback <- parseFromString' (mconcat <$> many inline) $ dropBrackets raw
1788+ fallback <- parseFromString' inlines $ dropBrackets raw
1784 implicitHeaderRefs <- option False $
1789 implicitHeaderRefs <- option False $
1785 True <$ guardEnabled Ext_implicit_header_references
1790 True <$ guardEnabled Ext_implicit_header_references
1786 let makeFallback = do
1791 let makeFallback = do
@@ -1988,7 +1993,7 @@ textualCite = try $ do
1988 let (spaces',raw') = span isSpace raw
1993 let (spaces',raw') = span isSpace raw
1989 spc | null spaces' = mempty
1994 spc | null spaces' = mempty
1990 | otherwise = B.space
1995 | otherwise = B.space
1991− lab <- parseFromString' (mconcat <$> many inline) $ dropBrackets raw'
1996+ lab <- parseFromString' inlines $ dropBrackets raw'
1992 fallback <- referenceLink B.linkWith (lab,raw')
1997 fallback <- referenceLink B.linkWith (lab,raw')
1993 return $ do
1998 return $ do
1994 fallback' <- fallback
1999 fallback' <- fallback