summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2017-12-21 22:30:59 +0100
committerAlbert Krewinkel <albert@zeitkraut.de>2017-12-21 22:42:59 +0100
commitbd3ea723717b54e3853487bee7a48947fb73b68a (patch)
treee0c68763a44e4d7156ebfbd46ed8446e976dd8f9 /src
parent5ad719c1fb6dbf06cbf4f48e57ae4a6d187e0a5e (diff)
Lua modules: added pandoc.utils module
A new module `pandoc.utils` has been created. It holds utility functions like `sha1`, which was moved from the main `pandoc` module.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Lua/Module/Pandoc.hs8
-rw-r--r--src/Text/Pandoc/Lua/Module/Utils.hs50
-rw-r--r--src/Text/Pandoc/Lua/Packages.hs2
3 files changed, 52 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Lua/Module/Pandoc.hs b/src/Text/Pandoc/Lua/Module/Pandoc.hs
index ed80b9715..5b8714e07 100644
--- a/src/Text/Pandoc/Lua/Module/Pandoc.hs
+++ b/src/Text/Pandoc/Lua/Module/Pandoc.hs
@@ -32,7 +32,6 @@ module Text.Pandoc.Lua.Module.Pandoc
import Control.Monad (when)
import Data.Default (Default (..))
-import Data.Digest.Pure.SHA (sha1, showDigest)
import Data.Maybe (fromMaybe)
import Data.Text (pack)
import Foreign.Lua (ToLuaStack, FromLuaStack, Lua, NumResults, liftIO)
@@ -59,7 +58,6 @@ pushModule datadir = do
loadScriptFromDataDir datadir "pandoc.lua"
addFunction "read" readDoc
addFunction "pipe" pipeFn
- addFunction "sha1" sha1HashFn
addFunction "walk_block" walkBlock
addFunction "walk_inline" walkInline
return 1
@@ -88,12 +86,6 @@ readDoc content formatSpecOrNil = do
Left s -> raiseError (show s) -- error while reading
_ -> raiseError "Only string formats are supported at the moment."
-sha1HashFn :: BL.ByteString
- -> Lua NumResults
-sha1HashFn contents = do
- Lua.push $ showDigest (sha1 contents)
- return 1
-
-- | Pipes input through a command.
pipeFn :: String
-> [String]
diff --git a/src/Text/Pandoc/Lua/Module/Utils.hs b/src/Text/Pandoc/Lua/Module/Utils.hs
new file mode 100644
index 000000000..496fdbc0a
--- /dev/null
+++ b/src/Text/Pandoc/Lua/Module/Utils.hs
@@ -0,0 +1,50 @@
+{-
+Copyright © 2017 Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+-}
+{- |
+ Module : Text.Pandoc.Lua.Module.Utils
+ Copyright : Copyright © 2017 Albert Krewinkel
+ License : GNU GPL, version 2 or above
+
+ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>
+ Stability : alpha
+
+Utility module for lua, exposing internal helper functions.
+-}
+module Text.Pandoc.Lua.Module.Utils
+ ( pushModule
+ ) where
+
+import Data.Digest.Pure.SHA (sha1, showDigest)
+import Foreign.Lua (Lua, NumResults)
+import Text.Pandoc.Lua.StackInstances ()
+import Text.Pandoc.Lua.Util (addFunction)
+
+import qualified Data.ByteString.Lazy as BSL
+import qualified Foreign.Lua as Lua
+
+-- | Push the "pandoc.utils" module to the lua stack.
+pushModule :: Lua NumResults
+pushModule = do
+ Lua.newtable
+ addFunction "sha1" sha1HashFn
+ return 1
+
+-- | Calculate the hash of the given contents.
+sha1HashFn :: BSL.ByteString
+ -> Lua String
+sha1HashFn = return . showDigest . sha1
diff --git a/src/Text/Pandoc/Lua/Packages.hs b/src/Text/Pandoc/Lua/Packages.hs
index 03847c979..f26c17084 100644
--- a/src/Text/Pandoc/Lua/Packages.hs
+++ b/src/Text/Pandoc/Lua/Packages.hs
@@ -43,6 +43,7 @@ import Text.Pandoc.Lua.Util (dostring')
import qualified Foreign.Lua as Lua
import Text.Pandoc.Lua.Module.Pandoc as Pandoc
import Text.Pandoc.Lua.Module.MediaBag as MediaBag
+import Text.Pandoc.Lua.Module.Utils as Utils
-- | Parameters used to create lua packages/modules.
data LuaPackageParams = LuaPackageParams
@@ -77,6 +78,7 @@ pandocPackageSearcher luaPkgParams pkgName =
"pandoc.mediabag" -> let st = luaPkgCommonState luaPkgParams
mbRef = luaPkgMediaBag luaPkgParams
in pushWrappedHsFun (MediaBag.pushModule st mbRef)
+ "pandoc.utils" -> pushWrappedHsFun Utils.pushModule
_ -> searchPureLuaLoader
where
pushWrappedHsFun f = do