-- --------------------------------------------------------------------------- -- | -- Module : Text.Show.ByteString.Char -- Copyright : (c) 2008 Dan Doel -- Maintainer : Dan Doel -- Stability : Experimental -- Portability : Portable -- -- Putting characters. -- -- Functions based on GHC.Show in base module Text.Show.ByteString.Char where import Data.Binary import Data.Char import Text.Show.ByteString.Util asciiTab :: [String] asciiTab = ["NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US", "SP"] putLitChar :: Char -> Put putLitChar '\DEL' = putAsciiStr "\\DEL" putLitChar '\\' = putAscii '\\' >> putAscii '\\' putLitChar c | c >= ' ' = putUTF8 c putLitChar '\a' = putAscii '\\' >> putAscii 'a' putLitChar '\b' = putAscii '\\' >> putAscii 'b' putLitChar '\f' = putAscii '\\' >> putAscii 'f' putLitChar '\n' = putAscii '\\' >> putAscii 'n' putLitChar '\r' = putAscii '\\' >> putAscii 'r' putLitChar '\t' = putAscii '\\' >> putAscii 't' putLitChar '\v' = putAscii '\\' >> putAscii 'v' putLitChar '\SO' = putAscii '\\' >> putAscii 'S' >> putAscii 'O' putLitChar c = putAscii '\\' >> putAsciiStr (asciiTab !! ord c) showpChar :: Char -> Put showpChar c = putAscii '\'' >> putEscaped c >> putAscii '\'' where putEscaped '\'' = putAscii '\\' >> putAscii '\'' putEscaped c' = putLitChar c' showpString :: String -> Put showpString xs = putAscii '"' >> mapM_ putEscaped xs >> putAscii '"' where putEscaped '"' = putAscii '\\' >> putAscii '"' putEscaped '\SO' = putAsciiStr "\\SO\\&" putEscaped c = putLitChar c