factor/basis/unicode/syntax/syntax.factor

39 lines
1.1 KiB
Factor
Raw Normal View History

2008-10-05 19:36:56 -04:00
! Copyright (C) 2008 Daniel Ehrenberg.
! See http://factorcode.org/license.txt for BSD license.
USING: unicode.data kernel math sequences parser lexer
bit-arrays namespaces make sequences.private arrays quotations
assocs classes.predicate math.order strings.parser ;
2008-01-09 14:44:07 -05:00
IN: unicode.syntax
<PRIVATE
2008-01-09 14:44:07 -05:00
: >category-array ( categories -- bitarray )
categories [ swap member? ] with map >bit-array ;
2008-01-09 14:44:07 -05:00
: as-string ( strings -- bit-array )
concat unescape-string ;
2008-01-09 14:44:07 -05:00
: [category] ( categories -- quot )
[
[ [ categories member? not ] filter as-string ] keep
[ categories member? ] filter >category-array
2008-01-09 14:44:07 -05:00
[ dup category# ] % , [ nth-unsafe [ drop t ] ] %
\ member? 2array >quotation ,
\ if ,
] [ ] make ;
: define-category ( word categories -- )
2008-03-26 19:23:19 -04:00
[category] integer swap define-predicate-class ;
2008-01-09 14:44:07 -05:00
PRIVATE>
SYNTAX: CATEGORY:
CREATE ";" parse-tokens define-category ;
2008-01-09 14:44:07 -05:00
: seq-minus ( seq1 seq2 -- diff )
[ member? not ] curry filter ;
2008-01-09 14:44:07 -05:00
SYNTAX: CATEGORY-NOT:
2008-01-09 14:44:07 -05:00
CREATE ";" parse-tokens
categories swap seq-minus define-category ;