-------------------------------------------------------------------------------- -- | This module contains utilities for creating text fragments to identify -- forms. {-# LANGUAGE OverloadedStrings #-} module Text.Digestive.Ref ( makeRef , makeRefs ) where -------------------------------------------------------------------------------- import qualified Data.ByteString as B import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Encoding as T import Text.Printf (printf) -------------------------------------------------------------------------------- -- | Convert an arbitrary text value (possibly containing spaces, dots etc. to -- a text value that safely be used as an identifier in forms. makeRef :: Text -> Text makeRef = -- We simply UTF-8 encode and then hex encode, so all characters are valid. T.append "df-" . T.pack . (printf "%02x" =<<) . B.unpack . T.encodeUtf8 -------------------------------------------------------------------------------- -- | Create an infinite list of refs. makeRefs :: [Text] makeRefs = ["df-" `T.append` T.pack (show i) | i <- [0 :: Int ..]]