git.iko.soy/typeable/pandoc
on master help sign in
Org reader: fix behavior for successive calls of `#+EXCLUDE_TAGS`. (#4951)
e257b54Brian Leung
src/Text/Pandoc/Readers/Org/Meta.hs+11−8
@@ -159,7 +159,7 @@ optionLine = try $ do
159 "seq_todo" -> todoSequence >>= updateState . registerTodoSequence
159 "seq_todo" -> todoSequence >>= updateState . registerTodoSequence
160 "typ_todo" -> todoSequence >>= updateState . registerTodoSequence
160 "typ_todo" -> todoSequence >>= updateState . registerTodoSequence
161 "macro" -> macroDefinition >>= updateState . registerMacro
161 "macro" -> macroDefinition >>= updateState . registerMacro
162− "exclude_tags" -> excludedTagSet >>= updateState . setExcludedTags
162+ "exclude_tags" -> excludedTagList >>= updateState . setExcludedTags
163 "pandoc-emphasis-pre" -> emphChars >>= updateState . setEmphasisPreChar
163 "pandoc-emphasis-pre" -> emphChars >>= updateState . setEmphasisPreChar
164 "pandoc-emphasis-post" -> emphChars >>= updateState . setEmphasisPostChar
164 "pandoc-emphasis-post" -> emphChars >>= updateState . setEmphasisPostChar
165 _ -> mzero
165 _ -> mzero
@@ -192,14 +192,17 @@ parseFormat = try $ replacePlain <|> replaceUrl <|> justAppend
192 rest = manyTill anyChar (eof <|> () <$ oneOf "\n\r")
192 rest = manyTill anyChar (eof <|> () <$ oneOf "\n\r")
193 tillSpecifier c = manyTill (noneOf "\n\r") (try $ string ('%':c:""))
193 tillSpecifier c = manyTill (noneOf "\n\r") (try $ string ('%':c:""))
194
194
195−excludedTagSet :: Monad m => OrgParser m (Set.Set Tag)
195+excludedTagList :: Monad m => OrgParser m [Tag]
196−excludedTagSet = do
196+excludedTagList = do
197 skipSpaces
197 skipSpaces
198− Set.fromList . map Tag <$>
199− many (orgTagWord <* skipSpaces) <* newline
198+ map Tag <$> many (orgTagWord <* skipSpaces) <* newline
200−
199+
201−setExcludedTags :: Set.Set Tag -> OrgParserState -> OrgParserState
200+setExcludedTags :: [Tag] -> OrgParserState -> OrgParserState
202−setExcludedTags tagSet st = st { orgStateExcludedTags = tagSet }
201+setExcludedTags tagList st =
202+ let finalSet = if orgStateExcludedTagsChanged st
203+ then foldr Set.insert (orgStateExcludedTags st) tagList
204+ else Set.fromList tagList
205+ in st { orgStateExcludedTags = finalSet, orgStateExcludedTagsChanged = True}
203
206
204setEmphasisPreChar :: Maybe [Char] -> OrgParserState -> OrgParserState
207setEmphasisPreChar :: Maybe [Char] -> OrgParserState -> OrgParserState
205setEmphasisPreChar csMb st =
208setEmphasisPreChar csMb st =
src/Text/Pandoc/Readers/Org/ParserState.hs+2
@@ -118,6 +118,7 @@ data OrgParserState = OrgParserState
118 , orgStateEmphasisPostChars :: [Char] -- ^ Chars allowed at after emphasis
118 , orgStateEmphasisPostChars :: [Char] -- ^ Chars allowed at after emphasis
119 , orgStateEmphasisNewlines :: Maybe Int
119 , orgStateEmphasisNewlines :: Maybe Int
120 , orgStateExcludedTags :: Set.Set Tag
120 , orgStateExcludedTags :: Set.Set Tag
121+ , orgStateExcludedTagsChanged :: Bool
121 , orgStateExportSettings :: ExportSettings
122 , orgStateExportSettings :: ExportSettings
122 , orgStateHeaderMap :: M.Map Inlines String
123 , orgStateHeaderMap :: M.Map Inlines String
123 , orgStateIdentifiers :: Set.Set String
124 , orgStateIdentifiers :: Set.Set String
@@ -189,6 +190,7 @@ defaultOrgParserState = OrgParserState
189 , orgStateEmphasisNewlines = Nothing
190 , orgStateEmphasisNewlines = Nothing
190 , orgStateExportSettings = def
191 , orgStateExportSettings = def
191 , orgStateExcludedTags = Set.singleton $ Tag "noexport"
192 , orgStateExcludedTags = Set.singleton $ Tag "noexport"
193+ , orgStateExcludedTagsChanged = False
192 , orgStateHeaderMap = M.empty
194 , orgStateHeaderMap = M.empty
193 , orgStateIdentifiers = Set.empty
195 , orgStateIdentifiers = Set.empty
194 , orgStateIncludeFiles = []
196 , orgStateIncludeFiles = []
test/command/4284.md+11
@@ -20,6 +20,17 @@
20[Header 1 ("this-should-appear",[],[]) [Str "This",Space,Str "should",Space,Str "appear",Space,Span ("",["tag"],[("tag-name","fawn")]) [SmallCaps [Str "fawn"]]]]
20[Header 1 ("this-should-appear",[],[]) [Str "This",Space,Str "should",Space,Str "appear",Space,Span ("",["tag"],[("tag-name","fawn")]) [SmallCaps [Str "fawn"]]]]
21```
21```
22
22
23+```
24+% pandoc -f org -t native
25+#+EXCLUDE_TAGS: giraffe
26+#+EXCLUDE_TAGS: hippo
27+* This should not appear :giraffe:
28+* This should not appear :hippo:
29+* This should appear :noexport:
30+^D
31+[Header 1 ("this-should-appear",[],[]) [Str "This",Space,Str "should",Space,Str "appear",Space,Span ("",["tag"],[("tag-name","noexport")]) [SmallCaps [Str "noexport"]]]]
32+```
33+
23```
34```
24% pandoc -f org -t native
35% pandoc -f org -t native
25#+EXCLUDE_TAGS:
36#+EXCLUDE_TAGS: