aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Leung <bkleung89@gmail.com>2018-10-05 22:21:20 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-10-05 22:21:20 -0700
commite257b54124f69682c237a5c9a5f99c5c72406c88 (patch)
treed279729491d6ede26760b9530f6a80749b8dd10e /src
parent6207bdeb681142e9fa3731e6e0ee7fa8e6c120f5 (diff)
downloadpandoc-e257b54124f69682c237a5c9a5f99c5c72406c88.tar.gz
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.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/Org/Meta.hs19
-rw-r--r--src/Text/Pandoc/Readers/Org/ParserState.hs2
2 files changed, 13 insertions, 8 deletions
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 =
diff --git a/src/Text/Pandoc/Readers/Org/ParserState.hs b/src/Text/Pandoc/Readers/Org/ParserState.hs
index 381d4c5ee..59478256f 100644
--- a/src/Text/Pandoc/Readers/Org/ParserState.hs
+++ b/src/Text/Pandoc/Readers/Org/ParserState.hs
@@ -118,6 +118,7 @@ data OrgParserState = OrgParserState
, orgStateEmphasisPostChars :: [Char] -- ^ Chars allowed at after emphasis
, orgStateEmphasisNewlines :: Maybe Int
, orgStateExcludedTags :: Set.Set Tag
+ , orgStateExcludedTagsChanged :: Bool
, orgStateExportSettings :: ExportSettings
, orgStateHeaderMap :: M.Map Inlines String
, orgStateIdentifiers :: Set.Set String
@@ -189,6 +190,7 @@ defaultOrgParserState = OrgParserState
, orgStateEmphasisNewlines = Nothing
, orgStateExportSettings = def
, orgStateExcludedTags = Set.singleton $ Tag "noexport"
+ , orgStateExcludedTagsChanged = False
, orgStateHeaderMap = M.empty
, orgStateIdentifiers = Set.empty
, orgStateIncludeFiles = []