summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2023-08-30 22:01:00 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2023-08-30 22:01:41 -0700
commit1e43eb46ce3156ef72b5890d64af17c81ef6c580 (patch)
treecaea2fa3c03a26105a8289dd5dd9842aa9167545 /src
parented48998a89c4f589c7c17621d26400f70f7b5aa4 (diff)
Org reader: don't parse alphabetical lists...
...unless the `fancy_lists` extension is enabled. Closes #9042.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/Org/BlockStarts.hs29
-rw-r--r--src/Text/Pandoc/Readers/Org/Blocks.hs4
2 files changed, 19 insertions, 14 deletions
diff --git a/src/Text/Pandoc/Readers/Org/BlockStarts.hs b/src/Text/Pandoc/Readers/Org/BlockStarts.hs
index 5a2667289..c917756ef 100644
--- a/src/Text/Pandoc/Readers/Org/BlockStarts.hs
+++ b/src/Text/Pandoc/Readers/Org/BlockStarts.hs
@@ -29,6 +29,7 @@ import Text.Pandoc.Readers.Org.Parsing
import Text.Pandoc.Definition as Pandoc
import Text.Pandoc.Shared (safeRead)
import Text.Pandoc.Parsing (lowerAlpha, upperAlpha)
+import Text.Pandoc.Extensions
import Data.Functor (($>))
-- | Horizontal Line (five -- dashes or more)
@@ -69,8 +70,7 @@ listCounterCookie = try $
<* char ']'
<* (skipSpaces <|> lookAhead eol)
where parseNum = (safeRead =<< many1Char digit)
- <|> snd <$> lowerAlpha
- <|> snd <$> upperAlpha
+ <|> snd <$> (lowerAlpha <|> upperAlpha)
bulletListStart :: Monad m => OrgParser m Int
bulletListStart = try $ do
@@ -87,20 +87,27 @@ eol = void (char '\n')
orderedListStart :: Monad m => OrgParser m (Int, ListAttributes)
orderedListStart = try $ do
ind <- length <$> many spaceChar
+ fancy <- option False $ True <$ guardEnabled Ext_fancy_lists
+ -- Ordered list markers allowed in org-mode
+ let styles = (many1Char digit $> (if fancy
+ then Decimal
+ else DefaultStyle))
+ : if fancy
+ then [ fst <$> lowerAlpha
+ , fst <$> upperAlpha ]
+ else []
+ let delims = [ char '.' $> (if fancy
+ then Period
+ else DefaultDelim)
+ , char ')' $> (if fancy
+ then OneParen
+ else DefaultDelim)
+ ]
style <- choice styles
delim <- choice delims
skipSpaces1 <|> lookAhead eol
start <- option 1 listCounterCookie
return (ind + 1, (start, style, delim))
- -- Ordered list markers allowed in org-mode
- where
- styles = [ many1Char digit $> Decimal
- , fst <$> lowerAlpha
- , fst <$> upperAlpha
- ]
- delims = [ char '.' $> Period
- , char ')' $> OneParen
- ]
drawerStart :: Monad m => OrgParser m Text
drawerStart = try $ skipSpaces *> drawerName <* skipSpaces <* newline
diff --git a/src/Text/Pandoc/Readers/Org/Blocks.hs b/src/Text/Pandoc/Readers/Org/Blocks.hs
index 79f0e1238..c1e023e58 100644
--- a/src/Text/Pandoc/Readers/Org/Blocks.hs
+++ b/src/Text/Pandoc/Readers/Org/Blocks.hs
@@ -853,9 +853,7 @@ indented indentedMarker minIndent = try $ do
orderedList :: PandocMonad m => OrgParser m (F Blocks)
orderedList = try $ do
(indent, attr) <- lookAhead orderedListStart
- attr' <- option (fst3 attr, DefaultStyle, DefaultDelim) $
- guardEnabled Ext_fancy_lists $> attr
- fmap (B.orderedListWith attr' . compactify) . sequence
+ fmap (B.orderedListWith attr . compactify) . sequence
<$> many1 (listItem ((fst <$> orderedListStart) `indented` indent))
where fst3 (x,_,_) = x