summaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2022-03-15 15:36:32 +0100
committerAlbert Krewinkel <albert@zeitkraut.de>2022-03-18 14:20:49 +0100
commit69177861a48e428151b69df62d5d9538f0f9bf17 (patch)
tree522a80313b36629d299c7e670151600871a97655 /src/Text
parenteaba313fb3a0d6367b0eecc2b22218f14c1e1f74 (diff)
Parsing.GridTable: simplify column handling code.
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Parsing/GridTable.hs20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Parsing/GridTable.hs b/src/Text/Pandoc/Parsing/GridTable.hs
index 74ad64d78..bdfcb2bb3 100644
--- a/src/Text/Pandoc/Parsing/GridTable.hs
+++ b/src/Text/Pandoc/Parsing/GridTable.hs
@@ -65,7 +65,7 @@ gridTableSplitLine indices line = map removeFinalBar $ tail $
-- given char and terminated with a plus (@+@). The grid line may begin
-- and/or end with a colon, signaling column alignment. Returns the size
-- of the grid part and column alignment
-gridPart :: Monad m => Char -> ParserT Sources st m ((Int, Int), Alignment)
+gridPart :: Monad m => Char -> ParserT Sources st m (Int, Alignment)
gridPart ch = do
leftColon <- option False (True <$ char ':')
dashes <- many1 (char ch)
@@ -78,9 +78,10 @@ gridPart ch = do
(True, False) -> AlignLeft
(False, True) -> AlignRight
(False, False) -> AlignDefault
- return ((lengthDashes, lengthDashes + 1), alignment)
+ return (lengthDashes + 1, alignment)
-gridDashedLines :: Monad m => Char -> ParserT Sources st m [((Int, Int), Alignment)]
+gridDashedLines :: Monad m
+ => Char -> ParserT Sources st m [(Int, Alignment)]
gridDashedLines ch = try $ char '+' >> many1 (gridPart ch) <* blankline
removeFinalBar :: Text -> Text
@@ -101,7 +102,7 @@ gridTableHeader True _ = do
optional blanklines
dashes <- gridDashedLines '-'
let aligns = map snd dashes
- let lines' = map (snd . fst) dashes
+ let lines' = map fst dashes
let indices = scanl (+) 0 lines'
return (return [], aligns, indices)
gridTableHeader False blocks = try $ do
@@ -111,7 +112,7 @@ gridTableHeader False blocks = try $ do
T.pack <$> many1Till anyChar newline)
underDashes <- gridDashedLines '='
guard $ length dashes == length underDashes
- let lines' = map (snd . fst) underDashes
+ let lines' = map fst underDashes
let indices = scanl (+) 0 lines'
let aligns = map snd underDashes
let rawHeads = map (T.unlines . map trim) $ transpose
@@ -119,7 +120,8 @@ gridTableHeader False blocks = try $ do
heads <- sequence <$> mapM (parseFromString' blocks . trim) rawHeads
return (heads, aligns, indices)
-gridTableRawLine :: (Stream s m Char, UpdateSourcePos s Char) => [Int] -> ParserT s st m [Text]
+gridTableRawLine :: (Stream s m Char, UpdateSourcePos s Char)
+ => [Int] -> ParserT s st m [Text]
gridTableRawLine indices = do
char '|'
line <- many1Till anyChar newline
@@ -150,7 +152,8 @@ removeOneLeadingSpace xs =
Just (c, _) -> c == ' '
-- | Parse footer for a grid table.
-gridTableFooter :: (Stream s m Char, UpdateSourcePos s Char) => ParserT s st m ()
+gridTableFooter :: (Stream s m Char, UpdateSourcePos s Char)
+ => ParserT s st m ()
gridTableFooter = optional blanklines
---
@@ -170,7 +173,8 @@ tableWith headerParser rowParser lineParser footerParser = try $ do
let th = TableHead nullAttr <$> heads
tb = (:[]) . TableBody nullAttr 0 [] <$> rows
tf = pure $ TableFoot nullAttr []
- return $ B.table B.emptyCaption (zip aligns (map fromWidth widths)) <$> th <*> tb <*> tf
+ colspecs = zip aligns (map fromWidth widths)
+ return $ B.table B.emptyCaption colspecs <$> th <*> tb <*> tf
where
fromWidth n
| n > 0 = ColWidth n