1 USING: accessors values kernel sequences assocs io.files
2 io.encodings ascii math.ranges io splitting math.parser
3 namespaces make byte-arrays locals math sets io.encodings.ascii
4 words compiler.units arrays interval-maps unicode.data ;
11 : parse-script ( stream -- assoc )
12 ! assoc is code point/range => name
13 lines filter-comments [ split-; ] map ;
15 : range, ( value key -- )
17 [ name>> = ] with find nip 2array , ;
19 : expand-ranges ( assoc -- interval-map )
22 CHAR: . pick member? [
23 swap ".." split1 [ hex> ] bi@ 2array
24 ] [ swap hex> ] if range,
26 ] { } make <interval-map> ;
28 : >symbols ( strings -- symbols )
30 [ "unicode.script" create dup define-symbol ] map
31 ] with-compilation-unit ;
33 : process-script ( ranges -- )
34 dup values prune >symbols interned [
35 expand-ranges to: script-table
39 "resource:basis/unicode/script/Scripts.txt"
40 ascii <file-reader> parse-script process-script ;
47 : script-of ( char -- script )
48 script-table interval-at [ Unknown ] unless* ;