1(*
2    Title:      Standard Basis Library: String Signatures
3    Copyright   David Matthews 1999, 2005, 2016
4
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License version 2.1 as published by the Free Software Foundation.
8    
9    This library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13    
14    You should have received a copy of the GNU Lesser General Public
15    License along with this library; if not, write to the Free Software
16    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17*)
18
19signature CHAR =
20sig
21    eqtype  char
22    eqtype  string
23    
24    val minChar : char
25    val maxChar : char
26    val maxOrd : int
27    
28    val ord : char -> int
29    val chr : int -> char
30    val succ : char -> char
31    val pred : char -> char
32    
33    val < : (char * char) -> bool
34    val <= : (char * char) -> bool
35    val > : (char * char) -> bool
36    val >= : (char * char) -> bool
37
38    val compare : (char * char) -> General.order
39
40    val contains : string -> char -> bool
41    val notContains : string -> char -> bool
42
43    val toLower : char -> char
44    val toUpper : char -> char
45    val isAlpha : char -> bool
46    val isAlphaNum : char -> bool
47    val isAscii : char -> bool
48    val isCntrl : char -> bool
49    val isDigit : char -> bool
50    val isGraph : char -> bool
51    val isHexDigit : char -> bool
52    val isLower : char -> bool
53    val isPrint : char -> bool
54    val isSpace : char -> bool
55    val isPunct : char -> bool
56    val isUpper : char -> bool
57
58    val fromString : String.string -> char option
59    (* The argument to scan should be the global *)
60    val scan : (Char.char, 'a) StringCvt.reader -> (char, 'a) StringCvt.reader
61    val toString : char -> String.string
62    val fromCString : String.string -> char option
63    val toCString : char -> String.string
64end;
65
66
67signature STRING =
68sig
69    eqtype  string
70    eqtype char
71
72    val maxSize : int
73    val size : string -> int
74    val sub : (string * int) -> char
75    val extract : (string * int * int option) -> string
76    val substring : (string * int * int) -> string
77    val concat : string list -> string
78    val concatWith: string -> string list -> string
79    val ^ : (string * string) -> string
80    val str : char -> string
81    val implode : char list -> string
82    val explode : string -> char list
83    val map : (char -> char) -> string -> string
84    val translate : (char -> string) -> string -> string
85    val tokens : (char -> bool) -> string -> string list
86    val fields : (char -> bool) -> string -> string list
87    val isPrefix : string -> string -> bool
88    val isSubstring : string -> string -> bool
89    val isSuffix : string -> string -> bool
90
91
92    val compare : (string * string) -> General.order
93    val collate : ((char * char) -> General.order) ->
94                     (string * string) -> General.order
95    val < : (string * string) -> bool
96    val <= : (string * string) -> bool
97    val > : (string * string) -> bool
98    val >= : (string * string) -> bool
99
100    val toString : string -> String.string
101    val scan: (Char.char, 'a) StringCvt.reader -> (string, 'a) StringCvt.reader
102    val fromString : String.string -> string option
103    val toCString : string -> String.string
104    val fromCString : String.string -> string option
105end;
106
107signature SUBSTRING =
108sig
109    type  substring
110    eqtype char
111    eqtype string
112    val size : substring -> int
113    val base : substring -> (string * int * int)
114    val isEmpty : substring -> bool
115
116    val sub : (substring * int) -> char
117    val getc : substring -> (char * substring) option
118    val first : substring -> char option
119    
120    val extract : (string * int * int option) -> substring
121    val substring : (string * int * int) -> substring
122    val slice : (substring * int * int option) -> substring
123    val full: string -> substring
124    val string : substring -> string
125    
126    val concat: substring list ->string
127    val concatWith: string -> substring list ->string
128
129    val explode : substring -> char list
130    val translate : (char -> string) -> substring -> string
131    val app : (char -> unit) -> substring -> unit
132    val foldl : ((char * 'a) -> 'a) -> 'a -> substring -> 'a
133    val foldr : ((char * 'a) -> 'a) -> 'a -> substring -> 'a
134    val tokens : (char -> bool) -> substring -> substring list
135    val fields : (char -> bool) -> substring -> substring list
136    val isPrefix: string -> substring -> bool
137    val isSubstring: string -> substring -> bool
138    val isSuffix: string -> substring -> bool
139
140    val compare : (substring * substring) -> General.order
141    val collate : ((char * char) -> General.order) ->
142                     (substring * substring) -> General.order
143
144    val triml : int -> substring -> substring
145    val trimr : int -> substring -> substring
146    val splitl : (char -> bool) -> substring -> (substring * substring)
147    val splitr : (char -> bool) -> substring -> (substring * substring)
148    val splitAt : (substring * int) -> (substring * substring)
149    val dropl : (char -> bool) -> substring -> substring
150    val dropr : (char -> bool) -> substring -> substring
151    val takel : (char -> bool) -> substring -> substring
152    val taker : (char -> bool) -> substring -> substring
153    val position : string -> substring -> (substring * substring)
154    val span : (substring * substring) -> substring
155end;
156
157signature STRING_CVT =
158sig
159    datatype radix = BIN | OCT | DEC | HEX
160
161    datatype realfmt
162      = SCI of int option
163      | FIX of int option
164      | GEN of int option
165      | EXACT
166
167    type  ('a, 'b) reader = 'b -> ('a * 'b) option    
168
169    val padLeft : char -> int -> string -> string
170    val padRight : char -> int -> string -> string
171    val splitl : (char -> bool) -> (char, 'a) reader ->'a -> (string * 'a)
172    val takel : (char -> bool) -> (char, 'a) reader ->'a -> string
173    val dropl : (char -> bool) -> (char, 'a) reader ->'a -> 'a
174    val skipWS : (char, 'a) reader -> 'a -> 'a
175    type  cs
176    val scanString : ((char, cs) reader -> ('a, cs) reader) -> string -> 'a option
177
178end;
179