46 lines
1.3 KiB
Factor
46 lines
1.3 KiB
Factor
! Copyright (C) 2007, 2008 Daniel Ehrenberg.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: kernel sequences assocs hashtables parser lexer
|
|
vocabs words namespaces vocabs.loader debugger sets fry ;
|
|
IN: qualified
|
|
|
|
: define-qualified ( vocab-name prefix-name -- )
|
|
[ load-vocab vocab-words ] [ CHAR: : suffix ] bi*
|
|
'[ [ [ _ ] dip append ] dip ] assoc-map
|
|
use get push ;
|
|
|
|
: QUALIFIED:
|
|
#! Syntax: QUALIFIED: vocab
|
|
scan dup define-qualified ; parsing
|
|
|
|
: QUALIFIED-WITH:
|
|
#! Syntax: QUALIFIED-WITH: vocab prefix
|
|
scan scan define-qualified ; parsing
|
|
|
|
: expect=> ( -- ) scan "=>" assert= ;
|
|
|
|
: partial-vocab ( words vocab -- assoc )
|
|
'[ dup _ lookup [ no-word-error ] unless* ]
|
|
{ } map>assoc ;
|
|
|
|
: FROM:
|
|
#! Syntax: FROM: vocab => words... ;
|
|
scan dup load-vocab drop expect=>
|
|
";" parse-tokens swap partial-vocab use get push ; parsing
|
|
|
|
: partial-vocab-excluding ( words vocab -- assoc )
|
|
[ load-vocab vocab-words keys swap diff ] keep partial-vocab ;
|
|
|
|
: EXCLUDE:
|
|
#! Syntax: EXCLUDE: vocab => words ... ;
|
|
scan expect=>
|
|
";" parse-tokens swap partial-vocab-excluding use get push ; parsing
|
|
|
|
: RENAME:
|
|
#! Syntax: RENAME: word vocab => newname
|
|
scan scan dup load-vocab drop
|
|
dupd lookup [ ] [ no-word-error ] ?if
|
|
expect=>
|
|
scan associate use get push ; parsing
|
|
|