mirror of
https://github.com/jgm/pandoc.git
synced 2026-09-09 17:15:43 +00:00
HTML reader: parse simple tables.
Resolves Issue #106. Thanks to Rodja Trappe for the idea and some sample code.
This commit is contained in:
@@ -85,6 +85,7 @@ block = choice
|
||||
, pCodeBlock
|
||||
, pList
|
||||
, pHrule
|
||||
, pSimpleTable
|
||||
, pPlain
|
||||
, pRawHtmlBlock
|
||||
]
|
||||
@@ -194,6 +195,27 @@ pHrule = do
|
||||
pSelfClosing (=="hr") (const True)
|
||||
return [HorizontalRule]
|
||||
|
||||
pSimpleTable :: TagParser [Block]
|
||||
pSimpleTable = try $ do
|
||||
TagOpen _ _ <- pSatisfy (~== TagOpen "table" [])
|
||||
skipMany pBlank
|
||||
head' <- option [] $ pInTags "th" pTd
|
||||
rows <- many1 $ try $
|
||||
skipMany pBlank >> pInTags "tr" pTd
|
||||
skipMany pBlank
|
||||
TagClose _ <- pSatisfy (~== TagClose "table")
|
||||
let cols = maximum $ map length rows
|
||||
let aligns = replicate cols AlignLeft
|
||||
let widths = replicate cols 0
|
||||
return [Table [] aligns widths head' rows]
|
||||
|
||||
pTd :: TagParser [TableCell]
|
||||
pTd = try $ do
|
||||
skipMany pBlank
|
||||
res <- pInTags "td" pPlain
|
||||
skipMany pBlank
|
||||
return [res]
|
||||
|
||||
pBlockQuote :: TagParser [Block]
|
||||
pBlockQuote = do
|
||||
contents <- pInTags "blockquote" block
|
||||
@@ -437,10 +459,8 @@ _ `closes` "html" = False
|
||||
"a" `closes` "a" = True
|
||||
"li" `closes` "li" = True
|
||||
"th" `closes` t | t `elem` ["th","td"] = True
|
||||
"td" `closes` t | t `elem` ["th","td"] = True
|
||||
"tr" `closes` t | t `elem` ["th","td","tr"] = True
|
||||
"dt" `closes` t | t `elem` ["dt","dd"] = True
|
||||
"dd" `closes` t | t `elem` ["dt","dd"] = True
|
||||
"hr" `closes` "p" = True
|
||||
"p" `closes` "p" = True
|
||||
"meta" `closes` "meta" = True
|
||||
|
||||
Reference in New Issue
Block a user