diff options
| author | Albert Krewinkel <albert@zeitkraut.de> | 2021-01-09 13:35:07 +0100 | 
|---|---|---|
| committer | Albert Krewinkel <albert@zeitkraut.de> | 2021-01-09 13:40:31 +0100 | 
| commit | fe1378227b24fa6a8661b2e0d377b808eb270c52 (patch) | |
| tree | 2387dfb4c17f244b349d88e348b45d63bc66b6bb /src | |
| parent | 4f3434586743afb69f00ca91fe6ec9b68b39ae7e (diff) | |
| download | pandoc-fe1378227b24fa6a8661b2e0d377b808eb270c52.tar.gz | |
Org reader: allow multiple pipe chars in todo sequences
Additional pipe chars, used to separate "action" state from "no further
action" states, are ignored. E.g., for the following sequence, both
`DONE` and `FINISHED` are states with no further action required.
    #+TODO: UNFINISHED | DONE | FINISHED
Previously, parsing of the todo sequence failed if multiple pipe chars
were included.
Closes: #7014
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Readers/Org/Meta.hs | 14 | 
1 files changed, 10 insertions, 4 deletions
| diff --git a/src/Text/Pandoc/Readers/Org/Meta.hs b/src/Text/Pandoc/Readers/Org/Meta.hs index 6621822a2..a1b21046a 100644 --- a/src/Text/Pandoc/Readers/Org/Meta.hs +++ b/src/Text/Pandoc/Readers/Org/Meta.hs @@ -239,7 +239,7 @@ lineOfInlines = do  todoSequence :: Monad m => OrgParser m TodoSequence  todoSequence = try $ do    todoKws <- todoKeywords -  doneKws <- optionMaybe $ todoDoneSep *> todoKeywords +  doneKws <- optionMaybe $ todoDoneSep *> doneKeywords    newline    -- There must be at least one DONE keyword. The last TODO keyword is    -- taken if necessary. @@ -250,11 +250,17 @@ todoSequence = try $ do                      (x:xs) -> return $ keywordsToSequence (reverse xs) [x]   where +   todoKeyword :: Monad m => OrgParser m Text +   todoKeyword = many1Char nonspaceChar <* skipSpaces +     todoKeywords :: Monad m => OrgParser m [Text]     todoKeywords = try $ -     let keyword = many1Char nonspaceChar <* skipSpaces -         endOfKeywords = todoDoneSep <|> void newline -     in manyTill keyword (lookAhead endOfKeywords) +     let endOfKeywords = todoDoneSep <|> void newline +     in manyTill todoKeyword (lookAhead endOfKeywords) + +   doneKeywords :: Monad m => OrgParser m [Text] +   doneKeywords = try $ +     manyTill (todoKeyword <* optional todoDoneSep) (lookAhead newline)     todoDoneSep :: Monad m => OrgParser m ()     todoDoneSep = void . try $ skipSpaces *> char '|' <* skipSpaces1 | 
