equal
deleted
inserted
replaced
148 val prefix_lines: string -> string -> string |
148 val prefix_lines: string -> string -> string |
149 val prefix: string -> string -> string |
149 val prefix: string -> string -> string |
150 val suffix: string -> string -> string |
150 val suffix: string -> string -> string |
151 val unprefix: string -> string -> string |
151 val unprefix: string -> string -> string |
152 val unsuffix: string -> string -> string |
152 val unsuffix: string -> string -> string |
|
153 val trim_line: string -> string |
153 val replicate_string: int -> string -> string |
154 val replicate_string: int -> string -> string |
154 val translate_string: (string -> string) -> string -> string |
155 val translate_string: (string -> string) -> string -> string |
155 val match_string: string -> string -> bool |
156 val match_string: string -> string -> bool |
156 |
157 |
157 (*reals*) |
158 (*reals*) |
753 |
754 |
754 fun unsuffix sffx s = |
755 fun unsuffix sffx s = |
755 if String.isSuffix sffx s then String.substring (s, 0, size s - size sffx) |
756 if String.isSuffix sffx s then String.substring (s, 0, size s - size sffx) |
756 else raise Fail "unsuffix"; |
757 else raise Fail "unsuffix"; |
757 |
758 |
|
759 val trim_line = perhaps (try (unsuffix "\n")); |
|
760 |
758 fun replicate_string (0: int) _ = "" |
761 fun replicate_string (0: int) _ = "" |
759 | replicate_string 1 a = a |
762 | replicate_string 1 a = a |
760 | replicate_string k a = |
763 | replicate_string k a = |
761 if k mod 2 = 0 then replicate_string (k div 2) (a ^ a) |
764 if k mod 2 = 0 then replicate_string (k div 2) (a ^ a) |
762 else replicate_string (k div 2) (a ^ a) ^ a; |
765 else replicate_string (k div 2) (a ^ a) ^ a; |