git.iko.soy/typeable/pandoc
on master help sign in
Lua: use sha1 instead of hashname.
8768f7eJohn MacFarlane
doc/lua-filters.md+4−5
@@ -1130,18 +1130,17 @@ storage. The "media bag" is used when pandoc is called with the
1130 local filename = "media/diagram.png"
1130 local filename = "media/diagram.png"
1131 local mt, contents = pandoc.mediabag.lookup(filename)
1131 local mt, contents = pandoc.mediabag.lookup(filename)
1132
1132
1133−[`hashname (mime_type, contents)`]{#mediabag-hashname}
1133+[`sha1 (contents)`]{#mediabag-sha1}
1134
1134
1135−: Returns a filename with a basename based on the SHA1 has of the
1135+: Returns the SHA1 has of the contents.
1136− contents and an extension based on the mime type.
1137
1136
1138 Returns:
1137 Returns:
1139
1138
1140− - Filename based on SHA1 hash.
1139+ - SHA1 hash of the contents.
1141
1140
1142 Usage:
1141 Usage:
1143
1142
1144− local fp = pandoc.mediabag.hashname("plain/text", "foobar")
1143+ local fp = pandoc.mediabag.sha1("foobar")
1145
1144
1146[`fetch (source, base_url)`]{#mediabag-fetch}
1145[`fetch (source, base_url)`]{#mediabag-fetch}
1147
1146
src/Text/Pandoc/Lua/PandocModule.hs+5−13
@@ -47,7 +47,7 @@ import Text.Pandoc.Class (readDataFile, runIO,
47import Text.Pandoc.Options (ReaderOptions(readerExtensions))
47import Text.Pandoc.Options (ReaderOptions(readerExtensions))
48import Text.Pandoc.Lua.StackInstances ()
48import Text.Pandoc.Lua.StackInstances ()
49import Text.Pandoc.Readers (Reader (..), getReader)
49import Text.Pandoc.Readers (Reader (..), getReader)
50−import Text.Pandoc.MIME (MimeType, extensionFromMimeType)
50+import Text.Pandoc.MIME (MimeType)
51import Data.Digest.Pure.SHA (sha1, showDigest)
51import Data.Digest.Pure.SHA (sha1, showDigest)
52
52
53import qualified Foreign.Lua as Lua
53import qualified Foreign.Lua as Lua
@@ -93,7 +93,7 @@ pushMediaBagModule commonState mediaBagRef = do
93 addFunction "lookup" (lookupMediaFn mediaBagRef)
93 addFunction "lookup" (lookupMediaFn mediaBagRef)
94 addFunction "list" (mediaDirectoryFn mediaBagRef)
94 addFunction "list" (mediaDirectoryFn mediaBagRef)
95 addFunction "fetch" (fetch commonState mediaBagRef)
95 addFunction "fetch" (fetch commonState mediaBagRef)
96− addFunction "hashname" hashnameFn
96+ addFunction "sha1" sha1HashFn
97 return ()
97 return ()
98 where
98 where
99 addFunction name fn = do
99 addFunction name fn = do
@@ -101,20 +101,12 @@ pushMediaBagModule commonState mediaBagRef = do
101 Lua.pushHaskellFunction fn
101 Lua.pushHaskellFunction fn
102 Lua.rawset (-3)
102 Lua.rawset (-3)
103
103
104−hashnameFn :: OrNil MimeType
105− -> BL.ByteString
104+sha1HashFn :: BL.ByteString
106 -> Lua NumResults
105 -> Lua NumResults
107−hashnameFn nilOrMime contents = do
106+sha1HashFn contents = do
108− Lua.push (getHashname (toMaybe nilOrMime) contents)
107+ Lua.push $ showDigest (sha1 contents)
109 return 1
108 return 1
110
109
111−getHashname :: Maybe MimeType -> BL.ByteString -> String
112−getHashname mbMime bs =
113− let ext = fromMaybe ""
114− (('.':) <$> (mbMime >>= extensionFromMimeType))
115− basename = showDigest $ sha1 bs
116− in basename ++ ext
117−
118insertMediaFn :: IORef MB.MediaBag
110insertMediaFn :: IORef MB.MediaBag
119 -> FilePath
111 -> FilePath
120 -> OrNil MimeType
112 -> OrNil MimeType