I issued a major smackdown on the entire Expression Language page today:
http://wiki.jriver.com/index.php/Expression_LanguageI broke out each of the Function "Types" (the groupings MrC made way back in the day) into their own pages, and those contain the actual documentation blocks for the different functions. But to ensure you can still Command/Control-F search the main page directly for functions by name, I included a nice index section that links directly to each function's documentation.
You can jump directly to the Functions section with this link:
http://wiki.jriver.com/index.php/Expression_FunctionsAnd to the index:
http://wiki.jriver.com/index.php/Expression_Language#Function_IndexThis keeps the Expression Language page itself much more manageable. Breaking up pages is always a balancing act between making the user click once more to access the information, and keeping the page readable and navigable. For this page, I think it was long-since past time.
More, I created a system of templates for creating each function-specific documentation block. This morphs the nearly-impenetrable blocks of HTML and wikitext tables into something much simpler to manage and modify, if needed. The set of templates includes:
* {{
function description box}}
* {{
argument table}}
* {{
argument table row}}
* {{
argument optional}}
When used, it turns the source of, for example, SaveAdd(), from MrC's version:
====SaveAdd(…): Adds to a global variable====
{| style="width: 100%; border-spacing: 0; border: 0px solid black;" align="top" cellpadding="3" cellspacing="0"
|- id="SaveAdd" valign="top"
! scope="row" style="background: #ecedf3; color: #111; border-style: solid; border-width: 2px 1px 0 2px; border-right: 1px solid #bbb;" width="100" | Description
| style="background: #f9f9f9; color: #111; border-style: solid; border-width: 2px 2px 0 0" width="1200" | <span style="font-family: monospace,monospace; font-size:1em; color:#0f3f8d; font-size:110%"><b>saveadd(</b><i>variable</i><b>, </b><i>value</i><b>, </b><i>mode</i><b>)</b></span>
The [[#SaveAdd|SaveAdd()]] function adds <i>value</i> to a global <i>variable</i> either numerically or as a list item.
The <i>mode</i> argument indicates how <i>variable</i> is modified.
Available <i>mode</i> values:
<div style="margin-left: 20pt;"><table style="border-spacing:0px; border-collapse:collapse; background: #f9f9f9">
<tr><td style="text-align:left; padding-right:20pt"><b>0</b></td><td>Add numeric <i>value</i> (integer or decimal) to <i>variable</i></td></tr>
<tr><td style="text-align:left; padding-right:20pt"><b>1</b></td><td>Append string <i>value</i> as a list item to <i>variable</i></td></tr>
<tr><td style="text-align:left; padding-right:20pt"><b>2</b></td><td>Prepend string <i>value</i> as a list item to <i>variable</i></td></tr>
</table></div>
Argument <i>mode</i> is optional (defaults to 0).
|- valign="top"
! scope="row" style="background: #ecedf3; color: #111; border-style: solid; border-width: 0px 1px 2px 2px; border-top: 1px solid #bbb; border-right: 1px solid #bbb;" | Examples
|style="background: #f9f9f9; color: #111; border-style: solid; border-width: 0px 2px 2px 0; border-top: 1px solid #bbb;" | <span style="font-family: monospace,monospace; font-size:1em;"><b><nowiki>saveadd(v, 1)</nowiki></b></span>
<p style="margin-left:20pt;">Numerically increments the global <i>variable</i> <span style="font-family: monospace,monospace; font-size:1em;">v</span> by <span style="font-family: monospace,monospace; font-size:1em;">1</span>.</p>
<span style="font-family: monospace,monospace; font-size:1em;"><b><nowiki>saveadd(v, math(2 - 6))</nowiki></b></span>
<p style="margin-left:20pt;">Numerically increments the global <i>variable</i> <span style="font-family: monospace,monospace; font-size:1em;">v</span> by the outcome of the [[#Math|Math()]], which is <span style="font-family: monospace,monospace; font-size:1em;">-4</span>.</p>
<span style="font-family: monospace,monospace; font-size:1em;"><b><nowiki>load(foo, v)saveadd(v, bar, 1)load(v)</nowiki></b></span>
<p style="margin-left:20pt;">Loads <i>value</i> <span style="font-family: monospace,monospace; font-size:1em;">foo</span> into <i>variable</i> <span style="font-family: monospace,monospace; font-size:1em;">v</span>, then appends the <i>value</i> <span style="font-family: monospace,monospace; font-size:1em;">bar</span> as a list item, and the final <span style="font-family: monospace,monospace; font-size:1em;">load(v)</span> expression outputs the
result of <span style="font-family: monospace,monospace; font-size:1em;">foo; bar</span>.</p>
<span style="font-family: monospace,monospace; font-size:1em;"><b><nowiki>load(That, v)saveadd(v, This, 2)load(v)</nowiki></b></span>
<p style="margin-left:20pt;">Similar to the previous example, but using the prepend <i>mode</i>, resulting in the output <span style="font-family: monospace,monospace; font-size:1em;">This; That</span>.</p>
|}
<div style="text-align:right;">([[#top|Back to top)]]</div>
Into:
=== <span id="SaveAdd">SaveAdd(…)</span> ===
: Adds to a global variable.
{{function description box
| name=saveadd
| arguments=variable, value, mode
| description=
The [[#SaveAdd|SaveAdd()]] function adds <i>value</i> to a global <i>variable</i> either numerically or as a list item.
The <i>mode</i> argument indicates how <i>variable</i> is modified.
{{argument table
| name=mode
| contents=
{{argument table row|0|Add numeric <i>value</i> (integer or decimal) to <i>variable</i>}}
{{argument table row|1|Append string <i>value</i> as a list item to <i>variable</i>}}
{{argument table row|2|Prepend string <i>value</i> as a list item to <i>variable</i>}}
}}
{{argument optional|mode|0}}
| examples=
'''{{monospace|saveadd(v, 1)}}'''
: Numerically increments the global <i>variable</i> {{monospace|v}} by {{monospace|1}}.
'''{{monospace|saveadd(v, math(2 - 6))}}'''
: Numerically increments the global <i>variable</i> {{monospace|v}} by the outcome of the [[#Math|Math()]], which is {{monospace|-4}}.
'''{{monospace|load(foo, v)saveadd(v, bar, 1)load(v)}}'''
: Loads <i>value</i> {{monospace|foo}} into <i>variable</i> {{monospace|v}}, then appends the <i>value</i> {{monospace|bar}} as a list item, and the final {{monospace|load(v)}} expression outputs the result of {{monospace|foo; bar}}.
'''{{monospace|load(That, v)saveadd(v, This, 2)load(v)}}'''
: Similar to the previous example, but using the prepend <i>mode</i>, resulting in the output {{monospace|This; That}}.
}}
Not all of the new subpages are converted from MrC's old style to the new system, however. I only got through
Conditional Functions as far as fully converting them. But the copied-and-tweaked versions that are there now are basically just as functional as they were.
For any new content, or tweaking existing content, of course, I'll convert them over. Perhaps I'll continue going through them by hand as well (which was actually good on the two sections I did, because I found some typos and other glitches), but we'll see.
Still didn't actually add GroupCount() which was what started all of this. But I'll get there.