Lua: use sha1 instead of hashname.
Better to leave control over the extension to the user.
This commit is contained in:
parent
9451d83058
commit
8768f7e5b0
2 changed files with 9 additions and 18 deletions
|
@ -1130,18 +1130,17 @@ storage. The "media bag" is used when pandoc is called with the
|
||||||
local filename = "media/diagram.png"
|
local filename = "media/diagram.png"
|
||||||
local mt, contents = pandoc.mediabag.lookup(filename)
|
local mt, contents = pandoc.mediabag.lookup(filename)
|
||||||
|
|
||||||
[`hashname (mime_type, contents)`]{#mediabag-hashname}
|
[`sha1 (contents)`]{#mediabag-sha1}
|
||||||
|
|
||||||
: Returns a filename with a basename based on the SHA1 has of the
|
: Returns the SHA1 has of the contents.
|
||||||
contents and an extension based on the mime type.
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
- Filename based on SHA1 hash.
|
- SHA1 hash of the contents.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
local fp = pandoc.mediabag.hashname("plain/text", "foobar")
|
local fp = pandoc.mediabag.sha1("foobar")
|
||||||
|
|
||||||
[`fetch (source, base_url)`]{#mediabag-fetch}
|
[`fetch (source, base_url)`]{#mediabag-fetch}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ import Text.Pandoc.Class (readDataFile, runIO,
|
||||||
import Text.Pandoc.Options (ReaderOptions(readerExtensions))
|
import Text.Pandoc.Options (ReaderOptions(readerExtensions))
|
||||||
import Text.Pandoc.Lua.StackInstances ()
|
import Text.Pandoc.Lua.StackInstances ()
|
||||||
import Text.Pandoc.Readers (Reader (..), getReader)
|
import Text.Pandoc.Readers (Reader (..), getReader)
|
||||||
import Text.Pandoc.MIME (MimeType, extensionFromMimeType)
|
import Text.Pandoc.MIME (MimeType)
|
||||||
import Data.Digest.Pure.SHA (sha1, showDigest)
|
import Data.Digest.Pure.SHA (sha1, showDigest)
|
||||||
|
|
||||||
import qualified Foreign.Lua as Lua
|
import qualified Foreign.Lua as Lua
|
||||||
|
@ -93,7 +93,7 @@ pushMediaBagModule commonState mediaBagRef = do
|
||||||
addFunction "lookup" (lookupMediaFn mediaBagRef)
|
addFunction "lookup" (lookupMediaFn mediaBagRef)
|
||||||
addFunction "list" (mediaDirectoryFn mediaBagRef)
|
addFunction "list" (mediaDirectoryFn mediaBagRef)
|
||||||
addFunction "fetch" (fetch commonState mediaBagRef)
|
addFunction "fetch" (fetch commonState mediaBagRef)
|
||||||
addFunction "hashname" hashnameFn
|
addFunction "sha1" sha1HashFn
|
||||||
return ()
|
return ()
|
||||||
where
|
where
|
||||||
addFunction name fn = do
|
addFunction name fn = do
|
||||||
|
@ -101,20 +101,12 @@ pushMediaBagModule commonState mediaBagRef = do
|
||||||
Lua.pushHaskellFunction fn
|
Lua.pushHaskellFunction fn
|
||||||
Lua.rawset (-3)
|
Lua.rawset (-3)
|
||||||
|
|
||||||
hashnameFn :: OrNil MimeType
|
sha1HashFn :: BL.ByteString
|
||||||
-> BL.ByteString
|
|
||||||
-> Lua NumResults
|
-> Lua NumResults
|
||||||
hashnameFn nilOrMime contents = do
|
sha1HashFn contents = do
|
||||||
Lua.push (getHashname (toMaybe nilOrMime) contents)
|
Lua.push $ showDigest (sha1 contents)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
getHashname :: Maybe MimeType -> BL.ByteString -> String
|
|
||||||
getHashname mbMime bs =
|
|
||||||
let ext = fromMaybe ""
|
|
||||||
(('.':) <$> (mbMime >>= extensionFromMimeType))
|
|
||||||
basename = showDigest $ sha1 bs
|
|
||||||
in basename ++ ext
|
|
||||||
|
|
||||||
insertMediaFn :: IORef MB.MediaBag
|
insertMediaFn :: IORef MB.MediaBag
|
||||||
-> FilePath
|
-> FilePath
|
||||||
-> OrNil MimeType
|
-> OrNil MimeType
|
||||||
|
|
Loading…
Reference in a new issue