Fix xmode.keyword-map to not use delegation
parent
300921a026
commit
a119bea53a
|
@ -1,37 +1,43 @@
|
||||||
|
! Copyright (C) 2007, 2008 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel strings assocs sequences hashtables
|
USING: accessors kernel strings assocs sequences hashtables
|
||||||
sorting unicode.case unicode.categories sets ;
|
sorting unicode.case unicode.categories sets ;
|
||||||
IN: xmode.keyword-map
|
IN: xmode.keyword-map
|
||||||
|
|
||||||
! Based on org.gjt.sp.jedit.syntax.KeywordMap
|
! Based on org.gjt.sp.jedit.syntax.KeywordMap
|
||||||
TUPLE: keyword-map no-word-sep ignore-case? ;
|
TUPLE: keyword-map no-word-sep ignore-case? assoc ;
|
||||||
|
|
||||||
: <keyword-map> ( ignore-case? -- map )
|
: <keyword-map> ( ignore-case? -- map )
|
||||||
H{ } clone { set-keyword-map-ignore-case? set-delegate }
|
keyword-map new
|
||||||
keyword-map construct ;
|
swap >>ignore-case?
|
||||||
|
H{ } clone >>assoc ;
|
||||||
|
|
||||||
: invalid-no-word-sep ( keyword-map -- ) f >>no-word-sep drop ;
|
: invalid-no-word-sep ( keyword-map -- ) f >>no-word-sep drop ;
|
||||||
|
|
||||||
: handle-case ( key keyword-map -- key assoc )
|
: handle-case ( key keyword-map -- key assoc )
|
||||||
[ keyword-map-ignore-case? [ >upper ] when ] keep
|
[ ignore-case?>> [ >upper ] when ] [ assoc>> ] bi ;
|
||||||
delegate ;
|
|
||||||
|
M: keyword-map assoc-size
|
||||||
|
assoc>> assoc-size ;
|
||||||
|
|
||||||
M: keyword-map at* handle-case at* ;
|
M: keyword-map at* handle-case at* ;
|
||||||
|
|
||||||
M: keyword-map set-at
|
M: keyword-map set-at
|
||||||
[ handle-case set-at ] keep invalid-no-word-sep ;
|
[ handle-case set-at ] [ invalid-no-word-sep ] bi ;
|
||||||
|
|
||||||
M: keyword-map clear-assoc
|
M: keyword-map clear-assoc
|
||||||
[ delegate clear-assoc ] keep invalid-no-word-sep ;
|
[ assoc>> clear-assoc ] [ invalid-no-word-sep ] bi ;
|
||||||
|
|
||||||
M: keyword-map >alist delegate >alist ;
|
M: keyword-map >alist
|
||||||
|
assoc>> >alist ;
|
||||||
|
|
||||||
: (keyword-map-no-word-sep) ( assoc -- str )
|
: (keyword-map-no-word-sep) ( assoc -- str )
|
||||||
keys concat [ alpha? not ] filter prune natural-sort ;
|
keys concat [ alpha? not ] filter prune natural-sort ;
|
||||||
|
|
||||||
: keyword-map-no-word-sep* ( keyword-map -- str )
|
: keyword-map-no-word-sep* ( keyword-map -- str )
|
||||||
dup keyword-map-no-word-sep [ ] [
|
dup no-word-sep>> [ ] [
|
||||||
dup (keyword-map-no-word-sep)
|
dup (keyword-map-no-word-sep) >>no-word-sep
|
||||||
dup rot set-keyword-map-no-word-sep
|
keyword-map-no-word-sep*
|
||||||
] ?if ;
|
] ?if ;
|
||||||
|
|
||||||
INSTANCE: keyword-map assoc
|
INSTANCE: keyword-map assoc
|
||||||
|
|
Loading…
Reference in New Issue