aboutsummaryrefslogtreecommitdiff
path: root/pandoc-lua-engine/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <[email protected]>2022-10-04 17:30:12 +0200
committerJohn MacFarlane <[email protected]>2022-10-04 13:06:23 -0700
commit86e009b49547e7072cf099b7990cb7ff2b864979 (patch)
tree29b34f6931c3d174271b7788f0a37c04144a7247 /pandoc-lua-engine/src
parenta50765b3e42de0295ffcb090f77f140070b57d0a (diff)
Lua: add new module `pandoc.format`.
The module provides functions to query the set of extensions supported by formats, and the set of extension enabled per default.
Diffstat (limited to 'pandoc-lua-engine/src')
-rw-r--r--pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs6
-rw-r--r--pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Format.hs60
2 files changed, 64 insertions, 2 deletions
diff --git a/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs b/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs
index 59920879a..98a2f5c7b 100644
--- a/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs
+++ b/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs
@@ -34,8 +34,9 @@ import qualified HsLua.Aeson
import qualified HsLua.Module.DocLayout as Module.Layout
import qualified HsLua.Module.Path as Module.Path
import qualified HsLua.Module.Text as Module.Text
-import qualified Text.Pandoc.Lua.Module.Pandoc as Module.Pandoc
+import qualified Text.Pandoc.Lua.Module.Format as Pandoc.Format
import qualified Text.Pandoc.Lua.Module.MediaBag as Pandoc.MediaBag
+import qualified Text.Pandoc.Lua.Module.Pandoc as Module.Pandoc
import qualified Text.Pandoc.Lua.Module.System as Pandoc.System
import qualified Text.Pandoc.Lua.Module.Template as Pandoc.Template
import qualified Text.Pandoc.Lua.Module.Types as Pandoc.Types
@@ -77,7 +78,8 @@ runLuaNoEnv action = do
-- it must be handled separately.
loadedModules :: [Module PandocError]
loadedModules =
- [ Pandoc.MediaBag.documentedModule
+ [ Pandoc.Format.documentedModule
+ , Pandoc.MediaBag.documentedModule
, Pandoc.System.documentedModule
, Pandoc.Template.documentedModule
, Pandoc.Types.documentedModule
diff --git a/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Format.hs b/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Format.hs
new file mode 100644
index 000000000..8fa0485fc
--- /dev/null
+++ b/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Format.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE OverloadedStrings #-}
+{- |
+ Module : Text.Pandoc.Lua.Module.Format
+ Copyright : © 2022 Albert Krewinkel
+ License : GPL-2.0-or-later
+ Maintainer : Albert Krewinkel <[email protected]>
+
+Lua module to handle pandoc templates.
+-}
+module Text.Pandoc.Lua.Module.Format
+ ( documentedModule
+ ) where
+
+import HsLua
+import Text.Pandoc.Error (PandocError)
+import Text.Pandoc.Extensions
+ ( getAllExtensions, getDefaultExtensions )
+import Text.Pandoc.Lua.ErrorConversion ()
+import Text.Pandoc.Lua.Marshal.Extensions (pushExtensions)
+
+import qualified Data.Text as T
+
+-- | The "pandoc.format" module.
+documentedModule :: Module PandocError
+documentedModule = Module
+ { moduleName = "pandoc.format"
+ , moduleDescription = T.unlines
+ [ "Pandoc formats and their extensions."
+ ]
+ , moduleFields = []
+ , moduleOperations = []
+ , moduleFunctions = functions
+ }
+
+-- | Extension module functions.
+functions :: [DocumentedFunction PandocError]
+functions =
+ [ defun "default_extensions"
+ ### liftPure getDefaultExtensions
+ <#> parameter peekText "string" "format" "format name"
+ =#> functionResult pushExtensions "FormatExtensions"
+ "default extensions enabled for `format`"
+ #? T.unlines
+ [ "Returns the list of default extensions of the given format; this"
+ , "function does not check if the format is supported, it will return"
+ , "a fallback list of extensions even for unknown formats."
+ ]
+
+ , defun "all_extensions"
+ ### liftPure getAllExtensions
+ <#> parameter peekText "string" "format" "format name"
+ =#> functionResult pushExtensions "FormatExtensions"
+ "all extensions supported for `format`"
+ #? T.unlines
+ [ "Returns the list of all valid extensions for a format."
+ , "No distinction is made between input and output, and an"
+ , "extension have an effect when reading a format but not when"
+ , "writing it, or *vice versa*."
+ ]
+ ]