factor/basis/qualified/qualified.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 ;
IN: qualified
: define-qualified ( vocab-name prefix-name -- )
[ load-vocab vocab-words ] [ CHAR: : suffix ] bi*
[ -rot >r append r> ] curry 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 name -- assoc )
dupd [
lookup [ "No such word: " swap append throw ] unless*
] curry map zip ;
: partial-vocab-ignoring ( words name -- assoc )
[ load-vocab vocab-words keys swap diff ] keep partial-vocab ;
: EXCLUDE:
#! Syntax: EXCLUDE: vocab => words ... ;
scan expect=>
";" parse-tokens swap partial-vocab-ignoring use get push ; parsing
: FROM:
#! Syntax: FROM: vocab => words... ;
scan dup load-vocab drop expect=>
";" parse-tokens swap partial-vocab use get push ; parsing
: RENAME:
#! Syntax: RENAME: word vocab => newname
scan scan dup load-vocab drop lookup [ "No such word" throw ] unless*
expect=>
scan associate use get push ; parsing