internal package
Foswiki::Configure::LoadSpec internal package
Foswiki::Configure::LoadSpec This is a parser for configuration declaration files, such as Foswiki.spec, and the Config.spec files in extensions.
The supported syntax in declaration files is as follows:cfg ::= ( setting | section | extension )* ; setting ::= BOL typespec EOL comment* BOL def ; typespec ::= "**" typeid options "**" ; def ::= "$" ["Foswiki::"] "cfg" keys "=" value ";" ; keys ::= ( "{" id "}" )+ ; value is any perl value not including ";" comment ::= BOL "#" string EOL ; section ::= BOL "#--+" string ( "--" options )? EOL comment* ; extension ::= BOL " *" id "*" EOL ::= end of line BOL ::= beginning of line typeid ::= id ; id ::= a \w+ word (legal Perl bareword)A section is simply a divider used to create blocks. It can have varying depth depending on the number of + signs and may have options after -- e.g. #---+ Section -- TABS EXPERT A setting is the sugar required for the setting of a single configuration value. An extension is a pluggable UI extension that supports some extra UI functionality, such as the menu of languages or the menu of plugins. Each setting has a typespec and a def.
The typespec consists of a type id and some options.
A def is a specification of a field in the $Foswiki::cfg hash, together with a perl value for that hash. Each field can have an associated Checker which is loaded from the Foswiki::Configure::Checkers hierarchy. Checkers are responsible for specific checks on the value of that variable. For example, the checker for $Foswiki::cfg{Banana}{Republic} will be expected to be found in Foswiki::Configure::Checkers::Banana::Republic. Checkers are subclasses of Foswiki::Configure::Checker. See that class for more details. An extension is a placeholder for a Foswiki::Configure::Pluggable.StaticMethod
readSpec($root, $reporter) Load the configuration declarations. The core set is defined in Foswiki.spec, which must be found on the @INC path and is always loaded first. Then find all settings for extensions in their .spec files.
This only reads type specifications, it does not read values. For that, use Foswiki::Configure::Load::readConfig.$root
- Foswiki::Configure::Root of the model
StaticMethod
parse($file, $root, $reporter [, $cant_enhance]) Parse the config declaration $file and add it to a $root node for the configuration it describes. If $cant_enhance, don't report ENHANCE failures (which may be due to a missing root spec; which is OK when installing a package)
StaticMethod
protectKeys($keystring) → $keystring Process a key string {Like}{This} and make sure that each key is safe for use in an eval.
StaticMethod
protectKey($keystring) → $keystring Process a key string (a hash index) and make sure that it is safe for use as a perl hash index.
StaticMethod
addSpecDefaultsToCfg($spec, \%cfg, \%added) $spec
- ref to a Foswiki::Configure::Item
\%cfg
ref to a cfg hash e.g. Foswiki::cfg
\%added
(optional) ref to a hash to receive keys that were added
For each key in the $spec missing from the %cfg passed, add the default (unexpanded) from the spec to the %cfg, if it exists.
StaticMethod
addCfgValuesToSpec(\%cfg, $spec) \%cfg
ref to a cfg hash e.g. Foswiki::cfg
$spec
- ref to a Foswiki::Configure::Item