! Copyright (C) 2008, 2009 Daniel Ehrenberg.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays ascii assocs byte-arrays combinators
-combinators.short-circuit grouping hashtables interval-maps
+combinators.short-circuit grouping hashtables interval-sets
io.encodings.utf8 io.files kernel locals make math math.bitwise
math.order math.parser math.ranges memoize namespaces sequences
sets simple-flat-file sorting splitting strings.parser ;
+QUALIFIED: interval-sets
IN: unicode.data
<PRIVATE
: name>char ( name -- char ) name-map at ; inline
: char>name ( char -- name ) name-map value-at ; inline
: property ( property -- interval-map ) properties at ; foldable
-: property? ( char property -- ? ) property interval-key? ; inline
+: property? ( char property -- ? ) property interval-sets:in? ; inline
: ch>lower ( ch -- lower ) simple-lower ?at drop ; inline
: ch>upper ( ch -- upper ) simple-upper ?at drop ; inline
: ch>title ( ch -- title ) simple-title ?at drop ; inline
: exclusions ( -- set )
exclusions-file utf8 file-lines
[ "#" split1 drop [ blank? ] trim-tail hex> ] map
- [ 0 = not ] filter ;
+ [ 0 = ] reject ;
: remove-exclusions ( alist -- alist )
exclusions unique assoc-diff ;
: process-compatibility ( data -- hash )
(process-decomposed)
[ dup first* [ first2 rest 2array ] unless ] map
- [ second empty? not ] filter
+ [ second empty? ] reject
>hashtable chain-decomposed ;
: process-combining ( data -- hash )
} cleave
combine-map keys [ 2ch> nip ] map
-[ combining-class not ] filter
+[ combining-class ] reject
[ 0 swap class-map set-at ] each
load-special-casing special-casing swap assoc-union! drop