Prepend extra character c at the beginning of string s to make sure its length is at least m. The length is the number of characters, not the number of bytes.
-- BaseString PadChar MinOutputLength PaddedString/OutputpadLeft :: String -> Char -> Int -> StringpadLeft s c m = let
isBaseLarger = length s > m
padder s c m False = [ c | _ <- [1..(m-length s)]] ++ s
padder s _ _ True = s
in
padder s c m isBaseLarger
The list comprehension makes a string of chars(c) of the padding length
-- BaseString PadChar MinOutputLength PaddedString/Output
padLeft :: String -> Char -> Int -> String
padLeft s c m = let
isBaseLarger = length s > m
padder s c m False = [ c | _ <- [1..(m-length s)]] ++ s
padder s _ _ True = s
in
padder s c m isBaseLarger
if let Some(columns_short) = m.checked_sub(s.width()) {
let padding_width = c
.width()
.filter(|n| *n > 0)
.expect("padding character should be visible");
// Saturate the columns_short
let padding_needed = columns_short + padding_width - 1 / padding_width;
let mut t = String::with_capacity(s.len() + padding_needed);
t.extend((0..padding_needed).map(|_| c)
t.push_str(&s);
s = t;
}