# Changes

,  2 July
m
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command)' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@file])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v '//cd:interface/cd:interface/cd:command[not(@file)]/@name' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@level])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v '//cd:interface/cd:interface/cd:command[not(@level)]/@name' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@name])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@type])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@variant])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@generated])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@begin and @end])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@scope])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command[@coreprimitive])' context-en.xml
</pre>
<pre>
xml sel -N cd=http://www.pragma-ade.comnl/commands -t -v 'count(//cd:interface/cd:interface/cd:command/cd:arguments)' context-en.xml
</pre>
: the argument is specified as prefix, followed by :, followed by type
;method{{=}}apply
: the argument is specified as prefix, followed by ->, followed by type;method{{=>}}factor: the argument is specified as prefix, followed by *, followed by type
;method{{=}}none
: the argument is specified as prefix, followed by type
;list
: ?
{{note|list{{=}}yes means this is defines a comma-separated list. if missing, this defines a single parameter}}
As reported by the Xpath expression:
;prefix
: ?
{{note|see above for method/prefix/type}}
(Note: there is one instance of a possible type on Line 38818: <cd:constant defult="yes" type="stop"/> )
The cd:instance element carries an attribute of value, which maps to the replaceable stem of the class.
{{note|Based on email exchange with Wolfgang:

==== instance generators ====

instances are generated by a generator command. Currently, I find the generator command as follows:

* take the value of the name attribute at the top level of the stanza
* prepend define
* look for a replacement in the following table
<pre>
local corrections = {
definefloats = 'definefloat',
definebox = 'definehbox',
definectxfunction = 'installctxfunction',
definectxfunctiondefinition = 'startctxfunctiondefintion',
definefence = 'definemathfence',
definelabel = 'definelabelclass',
definelanguage = 'installlanguage',
definesynonym = 'definesynonyms',
definesorts = 'definesorting',
}
</pre>
* the result is the generator command for all the instances in the stanza
}}
==== cd:variable ====
(I'm not sure what this is meant to indicate, but it seems to correlate with examples? -pm39)

{{note|my guess is that these are leftovers. But see also the discussion about variant{{=}}example on the wiki mailing list}}
==== cd:string ====
Classes imply that the user may generate their own instances, creating specialized instances of the class with the appropriate \define''stem'' command.

{{note|see above for special cases of generator commands that are not exactly \define''stem''}}
As my sample case for this kind of stanza, I have the \itemgroup stanza.
I'm not sure how the example stanzas work, yet. From the label, I expect them to be more towards documentation than implementation, but I don't know.

{{note|Example stanzas are for instances that ''could'' be generated, but of which there are no examples in the ConTeXt distribution. description and effect are good examples of this type of stanza. While there are the associated commands \definedescription and \defineeffect, ConTeXt itself never bothers to the define any instances}}
=== Environments ===
...and possibly others.

{{note|the existence of \setup''stem'' is not a given, but yes there could be others as well. Many of these commands are created by some code that is embedded in the \defineXXX generated by \installcommandhandler, but environments can also be created 'manually' by a pair of \def commands, like for example the \startluacode environment.

The only guaranteed defined commands for any ''environment'' is the pair of start/stop commands}}
An environment does not necessarily create the command:
...but I'm not sure if it never does.

{{note|Hans is quite meticulous in creating these standalones even in the manual generation cases if it makes sense to have that standalone command, but some them are missing for sure, e.g. \buffer}}
== Results ==
# Does the stanza describe a pair?
#* Is either or both of the begin= or end= attributes extant? (Hopefully both!)
{{note|should be both or neither, I assume. But whether it is an environment is decided by type{{=}}environment}}
# Does the stanza describe a command?
#* Does the stanza not describe a class?
Orthogonal to this, a stanza may describe an environment, if the type="environment" attribute is extant (with the value environment). This implied further automatically generated commands based ont he command stem, but interactions with commands, pairs, and classes is unclear.

{{note|begin and end are nothing but overrides for the implied values start and stop}}
== Things to Ponder ==
What commands are available as a result of an environment?

{{note|only the \start and \stop are guaranteed (but perhaps with different prefixes cf begin and end attributes.)}}
=== What does a class imply for command generation? ===
(Experience with \bar implies yes: the literal command \bar relates to mathematics, while the instances of the \bar class are a series of prefix + stem command names.)

{{note|yes, I firmly believe you are right}}
=== Expanding the Element Vocabulary? ===
...elements, to explicitly mark elements that generate commands with prefixes and stems.

{{note|I have missed something somewhere, because this remark is unclear to me. }}

{{note|This may or may not be what you're asking:

Instead of having every stanza be represented by a <cd:command> element, instead do (taking your notes into consideration):

<cd:command>
(Describes a command)
</cd:command>

<cd:class>
(describes a class)
</cd:class>

<cd:environment>
(describes an environment, with or without overrides)
</cd:environment>

...?

This way, the thing being described by the stanza is explicit...

}}

::::Right, I see. I certainly would not mind, but it will depend on Wolfgang (who is the actual maintainer) and Hans (who is using the xml files for various distribution-related things [[User:Taco|Taco]] ([[User talk:Taco|talk]]) 16:15, 30 June 2020 (CEST)
== Apendicies ==
Line 38818: <cd:constant defult="yes" type="stop"/>

=== Missing "file" attribute ===

: Line 14799 - <cd:command category="background rules" level="system" name="doifelseframed">

=== Missing "level" attribute ===

: Line 934 - <cd:command file="back-ini.mkxl" name="setupoutput">
: Line 27165 - <cd:command category="structure notes" file="strc-not.mkvi" name="postponingnotes" type="environment"/>
: Line 37044 - <cd:command category="language" file="scrp-ini.mkvi" name="script" type="environment">