27 lines
672 B
Haskell
27 lines
672 B
Haskell
{-# LANGUAGE GHC2021 #-}
|
|
module Utils
|
|
( wordCount
|
|
, readingTime
|
|
, escapeHtml
|
|
) where
|
|
|
|
-- | Count the number of words in a string (split on whitespace).
|
|
wordCount :: String -> Int
|
|
wordCount = length . words
|
|
|
|
-- | Estimate reading time in minutes (assumes 200 words per minute).
|
|
-- Minimum is 1 minute.
|
|
readingTime :: String -> Int
|
|
readingTime s = max 1 (wordCount s `div` 200)
|
|
|
|
-- | Escape HTML special characters: <, >, &, ", '.
|
|
escapeHtml :: String -> String
|
|
escapeHtml = concatMap escChar
|
|
where
|
|
escChar '<' = "<"
|
|
escChar '>' = ">"
|
|
escChar '&' = "&"
|
|
escChar '"' = """
|
|
escChar '\'' = "'"
|
|
escChar c = [c]
|