aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Data.hs
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2020-04-17 17:28:55 -0700
committerJohn MacFarlane <[email protected]>2020-04-17 22:55:44 -0700
commit3eb9e1b8bd6eec9b96ab1da230b90d635970607e (patch)
treedab56cee01110319f9f981c55aeb9e0f9993cac0 /src/Text/Pandoc/Data.hs
parent8f40b4ba14fce10199a059a281c9bd10c884241d (diff)
Fooling around with a new setup for Text.Pandoc.Data.initialize-data-files
It is Now an exported module, exporting initializeDataFiles which must be run in PandocMonad if you are going to be looking for any data files. The point of this is to decouple pandoc's data from "pandoc-core," including the infrastructure for PandocMonad.
Diffstat (limited to 'src/Text/Pandoc/Data.hs')
-rw-r--r--src/Text/Pandoc/Data.hs24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Data.hs b/src/Text/Pandoc/Data.hs
index 38682b9f9..048d67956 100644
--- a/src/Text/Pandoc/Data.hs
+++ b/src/Text/Pandoc/Data.hs
@@ -1,4 +1,7 @@
+{-# LANGUAGE CPP #-}
+#ifdef EMBED_DATA_FILES
{-# LANGUAGE TemplateHaskell #-}
+#endif
{- |
Module : Text.Pandoc.Data
Copyright : Copyright (C) 2013-2020 John MacFarlane
@@ -10,13 +13,31 @@ Portability : portable
Provide contents data files as Haskell values.
-}
-module Text.Pandoc.Data (dataFiles) where
+module Text.Pandoc.Data (initializeDataFiles) where
+import Text.Pandoc.Class (modifyCommonState, CommonState(..), PandocMonad)
+#ifdef EMBED_DATA_FILES
import qualified Data.ByteString as B
import Data.FileEmbed
import System.FilePath (splitDirectories)
import qualified System.FilePath.Posix as Posix
+#endif
+-- | Inject data from data files into CommonState, so that
+-- we don't need to read data files from file system. This
+-- only has an effect if pandoc was compiled with
+-- the @embed_data_files@ flag. Generally you'll want to
+-- put this at the beginning of any PandocMonad action
+-- that will require reading pandoc's data files (e.g. templates).
+initializeDataFiles :: PandocMonad m => m ()
+initializeDataFiles =
+#ifdef EMBED_DATA_FILES
+ modifyCommonState $ \st ->st{ stDataFiles = dataFiles }
+#else
+ return ()
+#endif
+
+#ifdef EMBED_DATA_FILES
-- We ensure that the data files are stored using Posix
-- path separators (/), even on Windows.
dataFiles :: [(FilePath, B.ByteString)]
@@ -30,3 +51,4 @@ dataFiles' = ("MANUAL.txt", $(embedFile "MANUAL.txt")) :
("docx/_rels/.rels", $(embedFile "data/docx/_rels/.rels")) :
("pptx/_rels/.rels", $(embedFile "data/pptx/_rels/.rels")) :
$(embedDir "data")
+#endif