1 ! Copyright (C) 2007 Eduardo Cavazos, Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs strings kernel sorting namespaces sequences
13 source-loaded? docs-loaded? ;
15 : <vocab> ( name -- vocab )
17 { set-vocab-name set-vocab-words }
20 GENERIC: vocab ( vocab-spec -- vocab )
24 M: object vocab ( name -- vocab ) vocab-name dictionary get at ;
26 M: string vocab-name ;
28 M: object vocab-words vocab vocab-words ;
30 M: object vocab-help vocab vocab-help ;
32 M: object vocab-main vocab vocab-main ;
34 M: object vocab-source-loaded?
35 vocab vocab-source-loaded? ;
37 M: object set-vocab-source-loaded?
38 vocab set-vocab-source-loaded? ;
40 M: object vocab-docs-loaded?
41 vocab vocab-docs-loaded? ;
43 M: object set-vocab-docs-loaded?
44 vocab set-vocab-docs-loaded? ;
48 M: f vocab-source-loaded? ;
50 M: f set-vocab-source-loaded? 2drop ;
52 M: f vocab-docs-loaded? ;
54 M: f set-vocab-docs-loaded? 2drop ;
56 : create-vocab ( name -- vocab )
57 dictionary get [ <vocab> ] cache
58 t over set-vocab-source-loaded? ;
60 SYMBOL: load-vocab-hook
62 : load-vocab ( name -- vocab ) load-vocab-hook get call ;
65 dictionary get keys natural-sort ;
67 : words ( vocab -- seq )
70 : all-words ( -- seq )
71 dictionary get values [ words ] map concat ;
73 : words-named ( str -- seq )
75 [ vocab-words at ] curry* map
78 : forget-vocab ( vocab -- )
79 dup vocab-words [ nip forget ] assoc-each
80 vocab-name dictionary get delete-at ;
82 : child-vocab? ( prefix name -- ? )
84 [ 2drop t ] [ swap CHAR: . add head? ] if ;
86 : child-vocabs ( vocab -- seq )
87 vocab-name vocabs [ child-vocab? ] curry* subset ;
89 TUPLE: vocab-link name root ;
91 M: vocab-link vocab-name vocab-link-name ;
93 : >vocab-link ( name root -- vocab )
95 [ 2nip ] [ drop \ vocab-link construct-boa ] if ;
97 UNION: vocab-spec vocab vocab-link ;
99 M: vocab-spec forget vocab-name forget-vocab ;