-USING: accessors xmode.tokens xmode.keyword-map kernel
-sequences vectors assocs strings memoize regexp unicode.case ;
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors assocs kernel regexp sequences unicode
+xmode.keyword-map ;
IN: xmode.rules
TUPLE: string-matcher string ignore-case? ;
: ?push-all ( seq1 seq2 -- seq1+seq2 )
[
- over [ >r V{ } like r> over push-all ] [ nip ] if
+ over [ [ V{ } like ] dip append! ] [ nip ] if
] when* ;
: rule-set-no-word-sep* ( ruleset -- str )
: init-span ( rule -- )
dup delegate>> [ drop ] [
dup body-token>> standard-rule-set
- swap (>>delegate)
+ swap delegate<<
] if ;
: init-eol-span ( rule -- )
text-hash-char [ suffix ] when* ;
: add-rule ( rule ruleset -- )
- >r dup rule-chars* >upper swap
- r> rules>> inverted-index ;
+ [ dup rule-chars* >upper swap ] dip rules>> inverted-index ;
: add-escape-rule ( string ruleset -- )
over [
[ <escape-rule> ] dip
- 2dup (>>escape-rule)
+ 2dup escape-rule<<
add-rule
] [
2drop