diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-08-19 12:07:00 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-08-19 12:07:00 +0000 |
commit | 2da44861785e058806648e92b8e02f20ff93227b (patch) | |
tree | 3ddbb03945d87395a574dc19e99fc56615a006f1 /libraries/base/Text | |
parent | 1d08e94b1bee77ea17d9b23f3fde390900dd7fa8 (diff) | |
download | haskell-2da44861785e058806648e92b8e02f20ff93227b.tar.gz |
Apply fix for #1548, from squadette@gmail.com
Diffstat (limited to 'libraries/base/Text')
-rw-r--r-- | libraries/base/Text/Printf.hs | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/libraries/base/Text/Printf.hs b/libraries/base/Text/Printf.hs index f14ac0e355..6af2c90d55 100644 --- a/libraries/base/Text/Printf.hs +++ b/libraries/base/Text/Printf.hs @@ -12,6 +12,8 @@ -- ----------------------------------------------------------------------------- +{-# Language CPP #-} + module Text.Printf( printf, hPrintf, PrintfType, HPrintfType, PrintfArg, IsChar @@ -215,12 +217,12 @@ fmt cs us = u:us'' -> (case c of 'c' -> adjust ("", [toEnum (toint u)]) - 'd' -> adjust' (fmti u) - 'i' -> adjust' (fmti u) - 'x' -> adjust ("", fmtu 16 u) - 'X' -> adjust ("", map toUpper $ fmtu 16 u) - 'o' -> adjust ("", fmtu 8 u) - 'u' -> adjust ("", fmtu 10 u) + 'd' -> adjust' (fmti prec u) + 'i' -> adjust' (fmti prec u) + 'x' -> adjust ("", fmtu 16 prec u) + 'X' -> adjust ("", map toUpper $ fmtu 16 prec u) + 'o' -> adjust ("", fmtu 8 prec u) + 'u' -> adjust ("", fmtu 10 prec u) 'e' -> adjust' (dfmt' c prec u) 'E' -> adjust' (dfmt' c prec u) 'f' -> adjust' (dfmt' c prec u) @@ -230,15 +232,18 @@ fmt cs us = _ -> perror ("bad formatting char " ++ [c]) ) ++ uprintf cs'' us'' -fmti :: UPrintf -> (String, String) -fmti (UInteger _ i) = if i < 0 then ("-", show (-i)) else ("", show i) -fmti (UChar c) = fmti (uInteger (fromEnum c)) -fmti _ = baderr +fmti :: Int -> UPrintf -> (String, String) +fmti prec (UInteger _ i) = if i < 0 then ("-", integral_prec prec (show (-i))) else ("", integral_prec prec (show i)) +fmti _ (UChar c) = fmti 0 (uInteger (fromEnum c)) +fmti _ _ = baderr + +fmtu :: Integer -> Int -> UPrintf -> String +fmtu b prec (UInteger l i) = integral_prec prec (itosb b (if i < 0 then -2*l + i else i)) +fmtu b _ (UChar c) = itosb b (toInteger (fromEnum c)) +fmtu _ _ _ = baderr -fmtu :: Integer -> UPrintf -> String -fmtu b (UInteger l i) = itosb b (if i < 0 then -2*l + i else i) -fmtu b (UChar c) = itosb b (toInteger (fromEnum c)) -fmtu _ _ = baderr +integral_prec :: Int -> String -> String +integral_prec prec integral = (replicate (prec - (length integral)) '0') ++ integral toint :: UPrintf -> Int toint (UInteger _ i) = fromInteger i |