{-# LANGUAGE OverloadedStrings #-} module Strings (replace,capitalize,hrstring) where import Data.Char import qualified Data.ByteString.Char8 as B -- | Replace all instances of the first string with the second string in the third string. -- @replace "old" "new" "What's old?"@ replace :: B.ByteString -> B.ByteString -> B.ByteString -> B.ByteString replace a b s = case B.breakSubstring a s of (x,y) | B.null y -> x (x,y) | otherwise -> x `B.append` b `B.append` replace a b (B.drop (B.length a) y) -- | Just capitalize the first letter of the string. capitalize :: B.ByteString -> B.ByteString capitalize s = case B.uncons s of Nothing -> s Just (c,s') -> toUpper c `B.cons` s' -- | Human readable strings, when we can't just rip the plaintext from the protocol. hrstring :: B.ByteString -> B.ByteString hrstring "str" = "Strength " hrstring "spd" = "Speed " hrstring "con" = "Endurance " hrstring "int" = "Intellect " hrstring "per" = "Perception " hrstring "cha" = "Charisma " hrstring "mind" = "Mindfulness " hrstring "maxhp" = "Health " hrstring "forceadept" = "force adept" hrstring "dustvortex" = "dust vortex" hrstring x = B.map (\c -> if c == '_' then ' ' else c) x