-- |
-- Module          : Text.Pandoc.PlantUML.Filter.FileNameGenerator
-- Description     : Generate a filename only depending on the contents of it.
-- Copyright       : (c) Jonas Weber, 2015
-- License         : ISC
--
-- This package does its best to avoid rerendering the same diagrams (as in, with
-- the same source) if not neccessary. It uses a cryptographic hash (namely SHA1)
-- to get a stable identifier for the contents.
--
--
module Text.Pandoc.PlantUML.Filter.FileNameGenerator(fileNameForSource) where

import Data.Digest.Pure.SHA (sha1, showDigest)
import Data.ByteString.Lazy.UTF8 (fromString)
import qualified Data.Text as T

import Text.Pandoc.PlantUML.Filter.Types

-- | Generates the Hash of a diagram source, and prefixes that.
fileNameForSource :: DiagramSource -> ImageName
fileNameForSource :: DiagramSource -> ImageName
fileNameForSource (DiagramSource Text
source) = ImageName
prefix ImageName -> ImageName -> ImageName
forall a. [a] -> [a] -> [a]
++ (Text -> ImageName
hash Text
source)
  where
    hash :: Text -> ImageName
hash = Digest SHA1State -> ImageName
forall t. Digest t -> ImageName
showDigest (Digest SHA1State -> ImageName)
-> (Text -> Digest SHA1State) -> Text -> ImageName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Digest SHA1State
sha1 (ByteString -> Digest SHA1State)
-> (Text -> ByteString) -> Text -> Digest SHA1State
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ImageName -> ByteString
fromString (ImageName -> ByteString)
-> (Text -> ImageName) -> Text -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ImageName
T.unpack

-- | The prefix to put before rendered images
prefix :: String
prefix :: ImageName
prefix = ImageName
".rendered."