diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2017-12-21 22:30:59 +0100 |
---|---|---|
committer | Albert Krewinkel <albert@zeitkraut.de> | 2017-12-21 22:42:59 +0100 |
commit | bd3ea723717b54e3853487bee7a48947fb73b68a (patch) | |
tree | e0c68763a44e4d7156ebfbd46ed8446e976dd8f9 | |
parent | 5ad719c1fb6dbf06cbf4f48e57ae4a6d187e0a5e (diff) | |
download | pandoc-bd3ea723717b54e3853487bee7a48947fb73b68a.tar.gz |
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.
-rw-r--r-- | data/pandoc.lua | 5 | ||||
-rw-r--r-- | doc/lua-filters.md | 35 | ||||
-rw-r--r-- | pandoc.cabal | 1 | ||||
-rw-r--r-- | src/Text/Pandoc/Lua/Module/Pandoc.hs | 8 | ||||
-rw-r--r-- | src/Text/Pandoc/Lua/Module/Utils.hs | 50 | ||||
-rw-r--r-- | src/Text/Pandoc/Lua/Packages.hs | 2 |
6 files changed, 79 insertions, 22 deletions
diff --git a/data/pandoc.lua b/data/pandoc.lua index df8aa06c4..98d274cf4 100644 --- a/data/pandoc.lua +++ b/data/pandoc.lua @@ -903,4 +903,9 @@ function M.global_filter() return res end +------------------------------------------------------------------------ +-- Functions which have moved to different modules +local utils = require 'pandoc.utils' +M.sha1 = utils.sha1 + return M diff --git a/doc/lua-filters.md b/doc/lua-filters.md index 9beeda185..a109871f6 100644 --- a/doc/lua-filters.md +++ b/doc/lua-filters.md @@ -1405,18 +1405,6 @@ Lua functions for pandoc scripts. -- the above is equivallent to -- return {{Str = Str}} -[`sha1 (contents)`]{#mediabag-sha1} - -: Returns the SHA1 has of the contents. - - Returns: - - - SHA1 hash of the contents. - - Usage: - - local fp = pandoc.mediabag.sha1("foobar") - [`pipe (command, args, input)`]{#mediabag-sha1} : Runs command with arguments, passing it some input, @@ -1436,9 +1424,28 @@ Lua functions for pandoc scripts. local output = pandoc.pipe("sed", {"-e","s/a/b/"}, "abc") -# Submodule mediabag -The submodule `mediabag` allows accessing pandoc's media +# Module pandoc.utils + +This module exposes internal pandoc functions and utility +functions. + +[`sha1 (contents)`]{#utils-sha1} + +: Returns the SHA1 has of the contents. + + Returns: + + - SHA1 hash of the contents. + + Usage: + + local fp = pandoc.utils.sha1("foobar") + + +# Module pandoc.mediabag + +The `pandoc.mediabag` module allows accessing pandoc's media storage. The "media bag" is used when pandoc is called with the `--extract-media` or `--standalone`/`-s` option. diff --git a/pandoc.cabal b/pandoc.cabal index 0b9e46f29..557c9a626 100644 --- a/pandoc.cabal +++ b/pandoc.cabal @@ -525,6 +525,7 @@ library Text.Pandoc.Lua.Init, Text.Pandoc.Lua.Module.MediaBag, Text.Pandoc.Lua.Module.Pandoc, + Text.Pandoc.Lua.Module.Utils, Text.Pandoc.Lua.Packages, Text.Pandoc.Lua.StackInstances, Text.Pandoc.Lua.Util, 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 |