From e257b54124f69682c237a5c9a5f99c5c72406c88 Mon Sep 17 00:00:00 2001 From: Brian Leung Date: Fri, 5 Oct 2018 22:21:20 -0700 Subject: Org reader: fix behavior for successive calls of `#+EXCLUDE_TAGS`. (#4951) Calling `#+EXCLUDE_TAGS` multiple times should preserve the status of the previously declared tags. --- src/Text/Pandoc/Readers/Org/Meta.hs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/Text/Pandoc/Readers/Org/Meta.hs') diff --git a/src/Text/Pandoc/Readers/Org/Meta.hs b/src/Text/Pandoc/Readers/Org/Meta.hs index 921cd27e0..cad1d7123 100644 --- a/src/Text/Pandoc/Readers/Org/Meta.hs +++ b/src/Text/Pandoc/Readers/Org/Meta.hs @@ -159,7 +159,7 @@ optionLine = try $ do "seq_todo" -> todoSequence >>= updateState . registerTodoSequence "typ_todo" -> todoSequence >>= updateState . registerTodoSequence "macro" -> macroDefinition >>= updateState . registerMacro - "exclude_tags" -> excludedTagSet >>= updateState . setExcludedTags + "exclude_tags" -> excludedTagList >>= updateState . setExcludedTags "pandoc-emphasis-pre" -> emphChars >>= updateState . setEmphasisPreChar "pandoc-emphasis-post" -> emphChars >>= updateState . setEmphasisPostChar _ -> mzero @@ -192,14 +192,17 @@ parseFormat = try $ replacePlain <|> replaceUrl <|> justAppend rest = manyTill anyChar (eof <|> () <$ oneOf "\n\r") tillSpecifier c = manyTill (noneOf "\n\r") (try $ string ('%':c:"")) -excludedTagSet :: Monad m => OrgParser m (Set.Set Tag) -excludedTagSet = do +excludedTagList :: Monad m => OrgParser m [Tag] +excludedTagList = do skipSpaces - Set.fromList . map Tag <$> - many (orgTagWord <* skipSpaces) <* newline - -setExcludedTags :: Set.Set Tag -> OrgParserState -> OrgParserState -setExcludedTags tagSet st = st { orgStateExcludedTags = tagSet } + map Tag <$> many (orgTagWord <* skipSpaces) <* newline + +setExcludedTags :: [Tag] -> OrgParserState -> OrgParserState +setExcludedTags tagList st = + let finalSet = if orgStateExcludedTagsChanged st + then foldr Set.insert (orgStateExcludedTags st) tagList + else Set.fromList tagList + in st { orgStateExcludedTags = finalSet, orgStateExcludedTagsChanged = True} setEmphasisPreChar :: Maybe [Char] -> OrgParserState -> OrgParserState setEmphasisPreChar csMb st = -- cgit v1.2.3