On 2010-11-17 <22:53:20>, Wolfgang Schuster wrote:
Am 17.11.2010 um 20:10 schrieb Philipp Gesang:
Hi Aditya,
you seem to be familiar with some of the features of the new namespace model that I was not able to infer from Wolfgang’s code. Could you please comment on what the keys ‘setup’, ‘type’, and ‘command’ in ‘\definenamespace’ accomplish?
I’m not Aditya but i hope you will also accept my explanation.
Hi Wolfgang, of course you are always welcome to deliver this kind of thorough discussion! The wiki is grateful … Just two keys remain unexplained: “version” and “comment”. I guess they are not as critical but for sake of completeness and out of curiosity I wouldn’t mind having my guesses refuted or confirmed: comment - string: non-functional information that will be stored along with the namespace?? version - number: versioning information?? Functionality not yet known. Many thanks anyways, rewriting some module code will make christmas _much_ more interesting. Philipp
I will start with the first argument and the „type“ key, e.g.
\definenamespace [fancybreak] [type=module]
will produce the namespace „@@@@fancybreak“ with the short form (the name itself has the same length but for TeX it’s only a single tokens instead of many with the @@@@... form) \????fancybreak.
The is currently only one argument with the name „module“ but another one like „core“ or „base“ can appear in the future but this will be then reserved for Hans to replace the \definesystemvariable command from the core to produce a namespace in the form „@@xx“.
When you define a namespace you should use three or more letters because two letter namespaces are reserved for Hans itself, e.g. is already used by the database module.
The second key you need is „name“ because it’s argument is used when all the „\setup...“ and „\define...“ commands are created.
The key „style“ creates the command „\doset<NAME>attributes“ which takes two arguments where the first is to change the style (font) in your new created command and the second for the color.
The setup
\definenamespace [fancybreak] [type=module, name=fancybreak, style=yes]
creates the command \dosetfancybreakattributes which can be used like \dosetfancybreakattributes\c!style\c!color and will take the „style“ and „color“ argument from the \setupfancybreak command.
The setup key creates the command „\setup<NAME>“ where you can control whether the commands accepts a list of environment in the two argument form or only a single environment, e.g. „setup=yes“ let you write
\setupfancybreak[one][..,..=..,..]
and
\setupfancybreak[..,..=..,..]
while „setup=list“ let you use
\setupfancybreak[one,two][..,..=..,..]
and
\setupfancybreak[..,..=..,..]
The key “command“ creates a bunch of macros, besides the „\define...“ commands to create new environment and commands with your code it creates the following macros to access the values from your setup commands:
- \<Name>parameter - \named<NAME>parameter - \detokenized<NAME>parameter
The command key has like the setup key the two values yes and list, with „command=yes“ you can write
\define<NAME>[one][..,..=..,..]
or (clone a setup like \definehead[mysection][section])
\define<NAME>[two][one]
while „command=list“ allows
\define<NAME>[one,two][..,..=..,..]
or
\define<NAME>[two,three][one]
For parent it’s the best to give as argument always the same value as you defined for the namespace, e.g. for the fancybreak module one should write „parent=fancybreak“.
Wolfgang
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- () ascii ribbon campaign - against html e-mail /\ www.asciiribbon.org - against proprietary attachments