2011-11-03 14:34:41 -04:00
USING: help.markup help.syntax strings words compiler.units
2015-06-08 15:02:25 -04:00
vocabs.loader assocs ;
2007-09-20 18:09:08 -04:00
IN: vocabs
ARTICLE: "vocabularies" "Vocabularies"
2009-10-28 23:48:25 -04:00
"A " { $emphasis "vocabulary" } " is a named collection of " { $link "words" } ". Vocabularies are defined in the " { $vocab-link "vocabs" } " vocabulary."
2007-09-20 18:09:08 -04:00
$nl
"Vocabularies are stored in a global hashtable:"
2009-10-01 15:56:36 -04:00
{ $subsections dictionary }
2007-09-20 18:09:08 -04:00
"Vocabularies form a class."
2009-10-01 15:56:36 -04:00
{ $subsections
vocab
vocab?
}
2007-09-20 18:09:08 -04:00
"Various vocabulary words are overloaded to accept a " { $emphasis "vocabulary specifier" } ", which is a string naming the vocabulary, the " { $link vocab } " instance itself, or a " { $link vocab-link } ":"
2009-10-01 15:56:36 -04:00
{ $subsections
vocab-link
>vocab-link
}
2007-09-20 18:09:08 -04:00
"Looking up vocabularies by name:"
2009-10-01 15:56:36 -04:00
{ $subsections vocab }
2007-09-20 18:09:08 -04:00
"Accessors for various vocabulary attributes:"
2009-10-01 15:56:36 -04:00
{ $subsections
vocab-name
vocab-main
vocab-help
}
2007-09-20 18:09:08 -04:00
"Looking up existing vocabularies and creating new vocabularies:"
2009-10-01 15:56:36 -04:00
{ $subsections
2011-10-24 06:37:47 -04:00
lookup-vocab
2015-06-08 15:02:25 -04:00
loaded-child-vocab-names
2009-10-01 15:56:36 -04:00
create-vocab
}
2007-09-20 18:09:08 -04:00
"Getting words from a vocabulary:"
2009-10-01 15:56:36 -04:00
{ $subsections
2015-06-08 15:02:25 -04:00
vocab-words-assoc
2009-10-01 15:56:36 -04:00
vocab-words
all-words
words-named
}
2007-09-20 18:09:08 -04:00
"Removing a vocabulary:"
2009-10-01 15:56:36 -04:00
{ $subsections forget-vocab }
2010-04-28 05:04:09 -04:00
{ $see-also "words" "vocabs.loader" "word-search" } ;
2007-09-20 18:09:08 -04:00
ABOUT: "vocabularies"
HELP: dictionary
{ $var-description "Holds a hashtable mapping vocabulary names to vocabularies." } ;
2015-06-08 15:02:25 -04:00
HELP: loaded-vocab-names
2015-07-14 18:57:18 -04:00
{ $values { "seq" { $sequence string } } }
2007-09-20 18:09:08 -04:00
{ $description "Outputs a sequence of all defined vocabulary names." } ;
2011-10-24 06:37:47 -04:00
HELP: lookup-vocab
2008-01-09 01:35:28 -05:00
{ $values { "vocab-spec" "a vocabulary specifier" } { "vocab" vocab } }
2013-08-24 14:39:31 -04:00
{ $description "Outputs a named vocabulary, or " { $link f } " if no vocabulary with this name exists." } ;
HELP: vocab
2007-09-20 18:09:08 -04:00
{ $class-description "Instances represent vocabularies." } ;
HELP: vocab-name
2008-09-02 16:22:56 -04:00
{ $values { "vocab-spec" "a vocabulary specifier" } { "name" string } }
2007-09-20 18:09:08 -04:00
{ $description "Outputs the name of a vocabulary." } ;
2015-06-08 15:02:25 -04:00
HELP: vocab-words-assoc
{ $values { "vocab-spec" "a vocabulary specifier" } { "assoc/f" { $maybe assoc } } }
2007-09-20 18:09:08 -04:00
{ $description "Outputs the words defined in a vocabulary." } ;
2015-06-08 15:02:25 -04:00
HELP: vocab-words
2015-07-14 21:17:28 -04:00
{ $values { "vocab-spec" vocab-spec } { "seq" { $sequence word } } }
2007-09-20 18:09:08 -04:00
{ $description "Outputs a sequence of words defined in the vocabulary, or " { $link f } " if no vocabulary with this name exists." } ;
HELP: all-words
2015-07-14 18:57:18 -04:00
{ $values { "seq" { $sequence word } } }
2007-09-20 18:09:08 -04:00
{ $description "Outputs a sequence of all words in the dictionary." } ;
HELP: forget-vocab
{ $values { "vocab" string } }
2008-02-06 13:47:15 -05:00
{ $description "Removes a vocabulary. All words in the vocabulary are forgotten." }
2008-01-09 04:52:08 -05:00
{ $notes "This word must be called from inside " { $link with-compilation-unit } "." } ;
2007-09-20 18:09:08 -04:00
2011-11-02 19:30:00 -04:00
HELP: require-hook
2014-05-18 23:09:10 -04:00
{ $var-description { $quotation ( name -- ) } " which loads a vocabulary. This quotation is called by " { $link require } ". The default value should not need to be changed; this functionality is implemented via a hook stored in a variable to break a circular dependency which would otherwise exist from " { $vocab-link "vocabs" } " to " { $vocab-link "vocabs.loader" } " to " { $vocab-link "parser" } " back to " { $vocab-link "vocabs" } "." } ;
2007-09-20 18:09:08 -04:00
2011-11-03 14:34:41 -04:00
HELP: require
{ $values { "object" "a vocabulary specifier" } }
{ $description "Loads a vocabulary if it has not already been loaded. Throws an error if the vocabulary does not exist on disk or in the dictionary." }
{ $notes "To unconditionally reload a vocabulary, use " { $link reload } ". To reload changed source files only, use the words in " { $link "vocabs.refresh" } "." } ;
2007-09-20 18:09:08 -04:00
HELP: words-named
2015-07-14 18:57:18 -04:00
{ $values { "str" string } { "seq" { $sequence word } } }
2007-09-20 18:09:08 -04:00
{ $description "Outputs a sequence of all words named " { $snippet "str" } " from the set of currently-loaded vocabularies." } ;
HELP: create-vocab
{ $values { "name" string } { "vocab" vocab } }
{ $description "Creates a new vocabulary if one does not exist with the given name, otherwise outputs an existing vocabulary." } ;
2015-06-08 15:02:25 -04:00
HELP: loaded-child-vocab-names
2015-07-14 18:57:18 -04:00
{ $values { "vocab-spec" "a vocabulary specifier" } { "seq" { $sequence string } } }
2007-09-20 18:09:08 -04:00
{ $description "Outputs all vocabularies which are conceptually under " { $snippet "vocab" } " in the hierarchy." }
{ $examples
{ $unchecked-example
2015-06-08 15:02:25 -04:00
"\"io.streams\" loaded-child-vocab-names ."
2011-09-25 21:36:20 -04:00
"{ \"io.streams.c\" \"io.streams.duplex\" \"io.streams.lines\" \"io.streams.nested\" \"io.streams.plain\" \"io.streams.string\" }"
}
} ;
2007-09-20 18:09:08 -04:00
HELP: vocab-link
2008-03-19 15:39:08 -04:00
{ $class-description "Instances of this class identify vocabularies which are potentially not loaded. The " { $link vocab-name } " slot is the vocabulary name."
2007-09-20 18:09:08 -04:00
$nl
"Vocabulary links are created by calling " { $link >vocab-link } "."
} ;
HELP: >vocab-link
2008-03-19 15:39:08 -04:00
{ $values { "name" string } { "vocab" "a vocabulary specifier" } }
2007-09-20 18:09:08 -04:00
{ $description "If the vocabulary is loaded, outputs the corresponding " { $link vocab } " instance, otherwise creates a new " { $link vocab-link } "." } ;
2009-03-24 10:11:45 -04:00
HELP: runnable-vocab
2009-10-28 23:48:25 -04:00
{ $class-description "The class of vocabularies with a " { $slot "main" } " word." } ;