0 | module Data.String.Extra
19 | strSnoc : String -> Char -> String
20 | strSnoc s c = s ++ (singleton c)
28 | (+>) : String -> Char -> String
37 | (<+) : Char -> String -> String
43 | take : (n : Nat) -> (input : String) -> String
44 | take n str = substr Z n str
49 | takeLast : (n : Nat) -> (input : String) -> String
50 | takeLast n str with (length str)
51 | takeLast n str | len with (isLTE n len)
52 | takeLast n str | len | Yes prf = substr (len `minus` n) len str
53 | takeLast n str | len | No contra = str
58 | drop : (n : Nat) -> (input : String) -> String
59 | drop n str = substr n (length str) str
64 | dropLast : (n : Nat) -> (input : String) -> String
65 | dropLast n str = reverse (drop n (reverse str))
70 | shrink : (n : Nat) -> (input : String) -> String
71 | shrink n str = dropLast n (drop n str)
76 | join : (sep : String) -> Foldable t => (xs : t String) -> String
77 | join sep xs = drop (length sep)
78 | (foldl (\acc, x => acc ++ sep ++ x) "" xs)
82 | index : (n : Nat) -> (input : String) -> Maybe Char
83 | index n str with (unpack str)
84 | index n str | [] = Nothing
85 | index Z str | (x :: xs) = Just x
86 | index (S n) str | (x :: xs) = index n str | xs
90 | indentLines : (n : Nat) -> String -> String
91 | indentLines n str = unlines $
map (indent n) $
lines str
96 | justifyLeft : Nat -> Char -> String -> String
97 | justifyLeft n c s = s ++ replicate (n `minus` length s) c
102 | justifyRight : Nat -> Char -> String -> String
103 | justifyRight n c s = replicate (n `minus` length s) c ++ s
113 | leftEllipsis : (maxLen : Nat) -> (pref : String) -> String -> String
114 | leftEllipsis maxLen pref str = do
115 | let len = length str
116 | case len `isLTE` maxLen of
118 | No _ => pref ++ substr ((len + length pref) `minus` maxLen) len str
128 | rightEllipsis : (maxLen : Nat) -> (suff : String) -> String -> String
129 | rightEllipsis maxLen suff str = do
130 | let len = length str
131 | case len `isLTE` maxLen of
133 | No _ => take (maxLen `minus` length suff) str ++ suff