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
 | 
						|
 |