USING: accessors arrays assocs combinators.short-circuit fry
io.directories io.files io.files.info io.pathnames kernel make
memoize namespaces sequences sets sorting splitting vocabs
-vocabs.loader vocabs.metadata ;
+vocabs.private vocabs.loader vocabs.metadata ;
IN: vocabs.hierarchy
TUPLE: vocab-prefix name ;
<PRIVATE
: visible-dir? ( entry -- ? )
- { [ directory? ] [ name>> "." head? not ] } 1&& ;
+ {
+ [ directory? ]
+ [ name>> "." head? not ]
+ [ name>> valid-vocab-name? ]
+ } 1&& ;
: visible-dirs ( seq -- seq' )
[ visible-dir? ] filter [ name>> ] sort-by ;
swap >>name
H{ } clone >>words ;
+<PRIVATE
+
+: valid-vocab-name? ( name -- ? )
+ dup string? [ [ ":/\\ \"" member? ] none? ] [ f ] if ;
+
+PRIVATE>
+
ERROR: bad-vocab-name name ;
: check-vocab-name ( name -- name )
- dup string? [ bad-vocab-name ] unless
- dup [ ":/\\ \"" member? ] any? [ bad-vocab-name ] when ;
+ dup valid-vocab-name? [ bad-vocab-name ] unless ;
TUPLE: vocab-link name ;