0 | module Libraries.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 | indent : (n : Nat) -> String -> String
91 | indent n x = replicate n ' ' ++ x
95 | indentLines : (n : Nat) -> String -> String
96 | indentLines n str = (join "\n") $
map (Extra.indent n) $
lines str