factor/core/vocabs/vocabs.factor

111 lines
2.2 KiB
Factor
Raw Normal View History

2008-02-17 18:08:52 -05:00
! Copyright (C) 2007, 2008 Eduardo Cavazos, Slava Pestov.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: assocs strings kernel sorting namespaces sequences
definitions ;
IN: vocabs
SYMBOL: dictionary
TUPLE: vocab < identity-tuple
2008-03-20 16:30:59 -04:00
name words
2007-09-20 18:09:08 -04:00
main help
source-loaded? docs-loaded? ;
: <vocab> ( name -- vocab )
2008-03-18 21:27:09 -04:00
H{ } clone
{ set-vocab-name set-vocab-words }
2007-09-20 18:09:08 -04:00
\ vocab construct ;
GENERIC: vocab ( vocab-spec -- vocab )
M: vocab vocab ;
M: object vocab ( name -- vocab ) vocab-name dictionary get at ;
M: string vocab-name ;
M: object vocab-words vocab vocab-words ;
M: object vocab-help vocab vocab-help ;
M: object vocab-main vocab vocab-main ;
M: object vocab-source-loaded?
vocab vocab-source-loaded? ;
M: object set-vocab-source-loaded?
vocab set-vocab-source-loaded? ;
M: object vocab-docs-loaded?
vocab vocab-docs-loaded? ;
M: object set-vocab-docs-loaded?
vocab set-vocab-docs-loaded? ;
M: f vocab-words ;
M: f vocab-source-loaded? ;
M: f set-vocab-source-loaded? 2drop ;
M: f vocab-docs-loaded? ;
M: f set-vocab-docs-loaded? 2drop ;
2008-03-04 23:46:01 -05:00
M: f vocab-help ;
2007-09-20 18:09:08 -04:00
: create-vocab ( name -- vocab )
dictionary get [ <vocab> ] cache ;
2007-09-20 18:09:08 -04:00
2008-03-20 16:00:49 -04:00
ERROR: no-vocab name ;
2008-03-18 21:27:09 -04:00
SYMBOL: load-vocab-hook ! ( name -- )
2007-09-20 18:09:08 -04:00
2008-03-18 21:27:09 -04:00
: load-vocab ( name -- vocab )
2008-03-20 18:58:35 -04:00
dup load-vocab-hook get call vocab ;
2007-09-20 18:09:08 -04:00
: vocabs ( -- seq )
dictionary get keys natural-sort ;
: words ( vocab -- seq )
vocab-words values ;
: all-words ( -- seq )
dictionary get values [ words ] map concat ;
: words-named ( str -- seq )
dictionary get values
2008-01-09 17:36:30 -05:00
[ vocab-words at ] with map
2008-05-14 00:36:55 -04:00
sift ;
2007-09-20 18:09:08 -04:00
: child-vocab? ( prefix name -- ? )
2dup = pick empty? or
[ 2drop t ] [ swap CHAR: . suffix head? ] if ;
2007-09-20 18:09:08 -04:00
: child-vocabs ( vocab -- seq )
vocab-name vocabs [ child-vocab? ] with filter ;
2007-09-20 18:09:08 -04:00
2008-03-19 15:39:08 -04:00
TUPLE: vocab-link name ;
2007-09-20 18:09:08 -04:00
2008-03-19 15:39:08 -04:00
: <vocab-link> ( name -- vocab-link )
vocab-link boa ;
M: vocab-link hashcode*
vocab-link-name hashcode* ;
2007-09-20 18:09:08 -04:00
M: vocab-link vocab-name vocab-link-name ;
2008-03-19 15:39:08 -04:00
UNION: vocab-spec vocab vocab-link ;
2008-03-19 15:39:08 -04:00
GENERIC: >vocab-link ( name -- vocab )
2008-03-19 15:39:08 -04:00
M: vocab-spec >vocab-link ;
2007-09-20 18:09:08 -04:00
2008-03-19 15:39:08 -04:00
M: string >vocab-link dup vocab [ ] [ <vocab-link> ] ?if ;
2007-09-20 18:09:08 -04:00
: forget-vocab ( vocab -- )
2008-01-13 13:29:04 -05:00
dup words forget-all
2007-12-24 19:40:09 -05:00
vocab-name dictionary get delete-at ;
M: vocab-spec forget* forget-vocab ;