From 4666e68eb1b640d69dc5261748bfe716e3b212c9 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 13 Nov 2024 09:01:33 -0800 Subject: [PATCH] TeX reader: fix two bugs. - Don't crash on array with `\hline` before blank cell. - Skip whitespace in array column specifier. See #244. --- src/Text/TeXMath/Readers/TeX.hs | 13 +++++++------ test/regression/244.test | 13 +++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 test/regression/244.test diff --git a/src/Text/TeXMath/Readers/TeX.hs b/src/Text/TeXMath/Readers/TeX.hs index b09ec2f4..e76aa0b8 100644 --- a/src/Text/TeXMath/Readers/TeX.hs +++ b/src/Text/TeXMath/Readers/TeX.hs @@ -443,12 +443,12 @@ endLineAMS = lexeme $ try $ do arrayLine :: TP ArrayLine arrayLine = - sepBy1 (unGrouped <$> - manyExp (try (ignorable' *> notFollowedBy (('\n' <$ ctrlseq "end") <|> endLine)) *> - expr <* - ignorable')) (symbol "&") - where ignorable' = ignorable >> - optional (try (ctrlseq "hline" >> ignorable')) + sepBy1 + (ignorable' *> + (unGrouped <$> + manyExp (try (notFollowedBy (('\n' <$ ctrlseq "end") <|> endLine)) *> + expr <* ignorable'))) (symbol "&") + where ignorable' = ignorable >> optional (try (ctrlseq "hline" >> ignorable')) -- we don't represent the line, but it shouldn't crash parsing arrayAlignments :: TP [Alignment] @@ -456,6 +456,7 @@ arrayAlignments = mconcat <$> braces (many ( ((:[]) . letterToAlignment <$> letter) <|> ([] <$ char '|') + <|> ([] <$ oneOf " \t") <|> ([] <$ ((char '@' <|> char '!') <* inbraces)) <|> (do char '*' num <- T.pack <$> braces (many1 digit) diff --git a/test/regression/244.test b/test/regression/244.test new file mode 100644 index 00000000..f33dabc5 --- /dev/null +++ b/test/regression/244.test @@ -0,0 +1,13 @@ +<<< tex +\begin{array}{l cr} +1 & 2 & 3 \\\hline + & 5 & 6 \\ +\end{array} +>>> native +[ EArray + [ AlignLeft , AlignCenter , AlignRight ] + [ [ [ ENumber "1" ] , [ ENumber "2" ] , [ ENumber "3" ] ] + , [ [] , [ ENumber "5" ] , [ ENumber "6" ] ] + , [ [] ] + ] +]