From GamingWiki
(33 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
Total number of columns in our table: | Total number of columns in our table: | ||
− | -->{{#vardefine: columns | {{{columns| | + | -->{{#vardefine: columns | {{{columns|6}}} }}<!-- |
+ | |||
+ | HEADER | ||
+ | |||
+ | If there is a header specified, we create a full-width TH tag. | ||
+ | -->{{#if:{{{header<includeonly>|</includeonly>}}}|<nowiki /> | ||
+ | ! colspan="{{#var:columns}}" {{!}} {{{header}}} | ||
+ | }}<!-- | ||
+ | |||
SUBHEAD | SUBHEAD | ||
Line 13: | Line 21: | ||
-->}}<!-- | -->}}<!-- | ||
-->{{#vardefine: subheadcols | <!-- | -->{{#vardefine: subheadcols | <!-- | ||
− | -->{{#ifeq: {{{subhead|M_NUL}}} | M_NUL |0| {{#expr:{{#var:columns}}-{{#var:rheadcols}}}} }}<!-- | + | -->{{#ifeq: {{{subhead|<includeonly>M_NUL</includeonly>}}} | M_NUL |0| {{#expr:{{#var:columns}}-{{#var:rheadcols}}}} }}<!-- |
-->}}<!-- | -->}}<!-- | ||
− | -->{{#ifeq: {{#var:subheadcols}} |0||<nowiki /> | + | -->{{#if:{{{header<includeonly>|</includeonly>}}}|{{Character sheet/section subhead|{{{header}}}| columns = {{#var:columns}} }} }}<!-- |
+ | -->{{#ifeq: {{#var:subheadcols}} |0| |<nowiki /> | ||
{{!}}- | {{!}}- | ||
{{!}} colspan="{{#var:subheadcols}}" class="subhead" {{!}} {{{subhead}}}<!-- | {{!}} colspan="{{#var:subheadcols}}" class="subhead" {{!}} {{{subhead}}}<!-- | ||
− | + | -->{{#ifeq: {{#var:rheadcols}} |0| |<nowiki /> | |
− | |||
− | -->{{#ifeq: {{#var:rheadcols}} |0||<nowiki /> | ||
{{!}} colspan="{{#var:rheadcols}}" class="shaded" {{!}} {{{righthead}}}<!-- | {{!}} colspan="{{#var:rheadcols}}" class="shaded" {{!}} {{{righthead}}}<!-- | ||
+ | -->}}<!-- | ||
-->}}<!-- | -->}}<!-- | ||
− | |||
− | |||
DATA | DATA | ||
+ | |||
+ | We may have one, two or three label-data pairs (left, centre, right). | ||
+ | We construct a hash, datalinehash, which maps each row number to data for the given row. The row data are serialized hashes. To generate these sub-hashes we look through all of the args to this template and find the ones that end in numbers. These are then saved as properties of the corresponding entry in datalinehash. | ||
-->{{#hashdefine: datalinehash }}<!-- | -->{{#hashdefine: datalinehash }}<!-- | ||
-->{{#forargs: | keynum | value | <!-- | -->{{#forargs: | keynum | value | <!-- | ||
− | + | ||
− | -->{{#vardefine: key | {{#rmatch: {{#var:keynum}} | (\D+)\d+ | $1 }}}}<!-- | + | Split the param (keynum) into a key name and a line number: |
− | -->{{#vardefine: num | {{#rmatch: {{#var:keynum}} | \D+(\d+) | $ | + | -->{{#vardefine: key | {{#rmatch: {{#var:keynum}} | (\D+)(\d+) | $1 }} }}<!-- |
+ | -->{{#vardefine: num | {{#rmatch: {{#var:keynum}} | (\D+)(\d+) | $2 }} }}<!-- | ||
+ | |||
-->{{#hashdefine: singledataline | {{#hashvalue: datalinehash | {{#var:num}} }} | ,css, | ;css; }}<!-- | -->{{#hashdefine: singledataline | {{#hashvalue: datalinehash | {{#var:num}} }} | ,css, | ;css; }}<!-- | ||
-->{{#hashinclude: singledataline | {{#var:key}} = {{#var:value}} }}<!-- | -->{{#hashinclude: singledataline | {{#var:key}} = {{#var:value}} }}<!-- | ||
Line 42: | Line 53: | ||
-->}}<!-- | -->}}<!-- | ||
-->}}<!-- | -->}}<!-- | ||
− | -->}}<!-- | + | -->{{#hashreset: singledataline}}<!-- |
+ | -->}}<!-- end forargs | ||
+ | |||
+ | Now datalinehash should look something like: | ||
+ | |||
+ | 1 => "label;css;some label,css,data;css;data for line 1" | ||
+ | 2 => "llabel;css;left-side label,css,ldata;css;line 2 left,css,rdata;css;line 2 right" | ||
+ | etc. | ||
+ | |||
+ | |||
Now each value of datalinehash can be parsed into a new hash. We want it sorted by | Now each value of datalinehash can be parsed into a new hash. We want it sorted by | ||
key, so we use a key array. | key, so we use a key array. | ||
− | -->{{#hashtoarray:|datalinehash|datalinekeys}}<!-- | + | -->{{#hashtoarray: |datalinehash|datalinekeys}}<!-- |
+ | |||
-->{{#arraysort:datalinekeys|asc}}<!-- | -->{{#arraysort:datalinekeys|asc}}<!-- | ||
− | -->{{#hashprint: datalinehash || %%%% | @@@@ | <!-- | + | -->{{#hashprint: datalinehash | | %%%% | @@@@ | <!-- |
-->{{#hashdefine: thedataline | @@@@ | ,css, | ;css; }}<!-- | -->{{#hashdefine: thedataline | @@@@ | ,css, | ;css; }}<!-- | ||
− | --><nowiki /> | + | |
+ | The width of the data cell depends on the presence of a label | ||
+ | and/or an rdata. Let's count how many groups are present. | ||
+ | -->{{#vardefine: groupcount | 0 }}<!-- | ||
+ | -->{{#ifeq: {{#hashvalue: thedataline | llabel |M_NUL}}-{{#hashvalue: thedataline | ldata |M_NUL}} | <!-- | ||
+ | --> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- | ||
+ | -->}}<!-- | ||
+ | -->{{#ifeq: {{#hashvalue: thedataline | label |M_NUL}}-{{#hashvalue: thedataline | data |M_NUL}} | <!-- | ||
+ | --> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- | ||
+ | -->}}<!-- | ||
+ | -->{{#ifeq: {{#hashvalue: thedataline | clabel |M_NUL}}-{{#hashvalue: thedataline | cdata |M_NUL}} | <!-- | ||
+ | --> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- | ||
+ | -->}}<!-- | ||
+ | -->{{#ifeq: {{#hashvalue: thedataline | rlabel |M_NUL}}-{{#hashvalue: thedataline | rdata |M_NUL}} | <!-- | ||
+ | --> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- | ||
+ | -->}}<!-- | ||
+ | |||
+ | If there are no groups, do nothing. | ||
+ | -->{{#ifeq:{{#var:groupcount}}|0||<!-- | ||
+ | |||
+ | Here we're assuming there are 6 columns total. | ||
+ | @todo remove this assumption | ||
+ | -->{{#vardefine:groupcols|<!-- | ||
+ | -->{{#switch: {{#var:groupcount}} | 1 = 6 | 2 = 3 | 3 = 2 | 6 }}<!-- | ||
+ | -->}}<!-- | ||
+ | |||
+ | -->{{#vardefine: llabelcols | {{#ifeq: {{#hashvalue: thedataline | llabel |M_NUL}} | M_NUL | 0 | 1 }} }}<!-- | ||
+ | -->{{#vardefine: labelcols | {{#ifeq: {{#hashvalue: thedataline | label |M_NUL}} | M_NUL | 0 | 1 }} }}<!-- | ||
+ | -->{{#vardefine: clabelcols | {{#ifeq: {{#hashvalue: thedataline | clabel |M_NUL}} | M_NUL | 0 | 1 }} }}<!-- | ||
+ | -->{{#vardefine: rlabelcols | {{#ifeq: {{#hashvalue: thedataline | rlabel |M_NUL}} | M_NUL | 0 | 1 }} }}<!-- | ||
+ | |||
+ | -->{{#vardefine: ldatacols | <!-- | ||
+ | -->{{#ifeq: {{#hashvalue: thedataline | ldata |M_NUL}} | M_NUL | 0 | <!-- | ||
+ | -->{{#expr:{{#var:groupcols}}-{{#var:llabelcols}} }} <!-- | ||
+ | -->}}<!-- | ||
+ | -->}}<!-- | ||
+ | -->{{#vardefine: rdatacols | <!-- | ||
+ | -->{{#ifeq: {{#hashvalue: thedataline | rdata |M_NUL}} | M_NUL | 0 | <!-- | ||
+ | -->{{#expr:{{#var:groupcols}}-{{#var:rlabelcols}} }} <!-- | ||
+ | -->}}<!-- | ||
+ | -->}}<!-- | ||
+ | -->{{#vardefine: cdatacols | {{#expr:{{#var:columns}}-{{#var:labelcols}}-{{#var:clabelcols}}-{{#var:llabelcols}}-{{#var:ldatacols}}-{{#var:rlabelcols}}-{{#var:rdatacols}} }} }}<!-- | ||
+ | -->{{#vardefine: datacols | {{#var:cdatacols}} }}<!-- | ||
+ | |||
+ | --><nowiki /> | ||
{{!}}- <!-- | {{!}}- <!-- | ||
− | + | -->{{#ifeq: {{#var: llabelcols}} | 0 | |<nowiki /> | |
− | + | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}} {{#hashvalue: thedataline | llabelclass }} llabel" <!-- | |
− | + | --> {{!}} {{#hashvalue: thedataline | llabel }} <!-- | |
− | + | -->}}<!-- | |
− | -->{{# | + | |
+ | -->{{#ifeq: {{#var: ldatacols}} | 0 | |<nowiki /> | ||
+ | {{!}} class="{{#hashvalue: thedataline|dataclass|}} {{#hashvalue: thedataline | ldataclass }} ldata" <!-- | ||
+ | --> colspan="{{#var:ldatacols}}" <!-- | ||
+ | --> {{!}} {{#hashvalue: thedataline | ldata }} <!-- | ||
+ | -->}}<!-- | ||
+ | |||
+ | -->{{#ifeq: {{#var: clabelcols}}{{#var: labelcols}} | 00 | |<nowiki /> | ||
+ | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}} {{#hashvalue: thedataline | clabelclass }} clabel" <!-- | ||
+ | --> {{!}} {{#hashvalue: thedataline | label }}{{#hashvalue: thedataline | clabel }} <!-- | ||
+ | -->}}<!-- | ||
− | + | -->{{#ifeq: {{#var: cdatacols}} | 0 |<!-- | |
− | {{!}} class="{{#hashvalue: thedataline | | + | -->{{#ifeq: {{#var: datacols}} | 0 | |<nowiki /> |
− | -->}}<!-- | + | {{!}} class="{{#hashvalue: thedataline|dataclass|}} {{#hashvalue: thedataline | cdataclass }} cdata" <!-- |
+ | --> colspan="{{#var:datacols}}" <!-- | ||
+ | --> {{!}} {{#hashvalue: thedataline | data }}{{#hashvalue: thedataline | cdata }} <!-- | ||
+ | -->}}<!-- | ||
+ | --> |<nowiki /> | ||
+ | {{!}} class="{{#hashvalue: thedataline|dataclass|}} {{#hashvalue: thedataline | cdataclass }} cdata" <!-- | ||
+ | --> colspan="{{#var:cdatacols}}" <!-- | ||
+ | --> {{!}} {{#hashvalue: thedataline | data }}{{#hashvalue: thedataline | cdata }} <!-- | ||
+ | -->}}<!-- | ||
− | + | -->{{#ifeq: {{#var: rlabelcols}} | 0 | |<nowiki /> | |
− | {{!}} class="{{#hashvalue: thedataline| | + | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}} {{#hashvalue: thedataline | rlabelclass }} rlabel" <!-- |
+ | --> {{!}} {{#hashvalue: thedataline | rlabel }} <!-- | ||
+ | -->}}<!-- | ||
− | + | -->{{#ifeq: {{#var: rdatacols}} | 0 | |<nowiki /> | |
− | {{!}} class="{{#hashvalue: thedataline|dataclass|}}" {{!}} {{#hashvalue: thedataline | rdata }} <!-- | + | {{!}} class="{{#hashvalue: thedataline|dataclass|}} {{#hashvalue: thedataline | rdataclass }} rdata" <!-- |
− | + | --> colspan="{{#var:rdatacols}}" <!-- | |
+ | --> {{!}} {{#hashvalue: thedataline | rdata }} <!-- | ||
+ | -->}}<!-- | ||
+ | -->}}<!-- end ifeq for existence of groups | ||
-->{{#hashreset: thedataline }}<!-- | -->{{#hashreset: thedataline }}<!-- | ||
− | --> | + | -->}}<!-- end hashprint datalinehash |
-->{{#hashreset: datalinehash }}<!-- | -->{{#hashreset: datalinehash }}<!-- | ||
+ | -->{{#arrayreset:datalinekeys }}<!-- | ||
--> | --> |
Latest revision as of 01:49, 22 August 2014
{{{header}}} | |||||
---|---|---|---|---|---|
{{{subhead}}} |