diff options
-rw-r--r-- | src/Text/Pandoc/Readers/Org/Blocks.hs | 7 | ||||
-rw-r--r-- | src/Text/Pandoc/Readers/Org/DocumentTree.hs | 12 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Readers/Org/Blocks.hs b/src/Text/Pandoc/Readers/Org/Blocks.hs index 9e3fe3d79..d6930398c 100644 --- a/src/Text/Pandoc/Readers/Org/Blocks.hs +++ b/src/Text/Pandoc/Readers/Org/Blocks.hs @@ -34,7 +34,7 @@ module Text.Pandoc.Readers.Org.Blocks import Prelude import Text.Pandoc.Readers.Org.BlockStarts -import Text.Pandoc.Readers.Org.DocumentTree (documentTree, headlineToBlocks) +import Text.Pandoc.Readers.Org.DocumentTree (documentTree, headlineToBlocks, filterHeadlineTree) import Text.Pandoc.Readers.Org.Inlines import Text.Pandoc.Readers.Org.Meta (metaExport, metaKey, metaLine) import Text.Pandoc.Readers.Org.ParserState @@ -64,9 +64,10 @@ import qualified Text.Pandoc.Walk as Walk -- | Get a list of blocks. blockList :: PandocMonad m => OrgParser m [Block] blockList = do - headlines <- documentTree blocks inline + fHeadlineTree <- documentTree blocks inline st <- getState - headlineBlocks <- headlineToBlocks $ runF headlines st + let headlineTree = runF fHeadlineTree st + headlineBlocks <- headlineToBlocks $ filterHeadlineTree headlineTree st -- ignore first headline, it's the document's title return . drop 1 . B.toList $ headlineBlocks diff --git a/src/Text/Pandoc/Readers/Org/DocumentTree.hs b/src/Text/Pandoc/Readers/Org/DocumentTree.hs index 7d55892fe..131408289 100644 --- a/src/Text/Pandoc/Readers/Org/DocumentTree.hs +++ b/src/Text/Pandoc/Readers/Org/DocumentTree.hs @@ -29,6 +29,7 @@ Parsers for org-mode headlines and document subtrees module Text.Pandoc.Readers.Org.DocumentTree ( documentTree , headlineToBlocks + , filterHeadlineTree ) where import Prelude @@ -161,17 +162,18 @@ headlineToBlocks hdln = do let tags = headlineTags hdln let text = headlineText hdln let level = headlineLevel hdln - shouldNotExport <- hasDoNotExportTag tags case () of - _ | shouldNotExport -> return mempty _ | any isArchiveTag tags -> archivedHeadlineToBlocks hdln _ | isCommentTitle text -> return mempty _ | maxLevel <= level -> headlineToHeaderWithList hdln _ | otherwise -> headlineToHeaderWithContents hdln -hasDoNotExportTag :: Monad m => [Tag] -> OrgParser m Bool -hasDoNotExportTag tags = containsExcludedTag . orgStateExcludedTags <$> getState - where containsExcludedTag s = any (`Set.member` s) tags +filterHeadlineTree :: Headline -> OrgParserState -> Headline +filterHeadlineTree hdln st = + hdln { headlineChildren = + [filterHeadlineTree childHdln st | + childHdln <- headlineChildren hdln, + not $ any (`Set.member` orgStateExcludedTags st) (headlineTags childHdln)] } isArchiveTag :: Tag -> Bool isArchiveTag = (== toTag "ARCHIVE") |