From GamingWiki
(21 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
Total number of columns in our table: | Total number of columns in our table: | ||
-->{{#vardefine: columns | {{{columns|6}}} }}<!-- | -->{{#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}}}} }}<!-- |
-->}}<!-- | -->}}<!-- | ||
+ | -->{{#if:{{{header<includeonly>|</includeonly>}}}|{{Character sheet/section subhead|{{{header}}}| columns = {{#var:columns}} }} }}<!-- | ||
-->{{#ifeq: {{#var:subheadcols}} |0| |<nowiki /> | -->{{#ifeq: {{#var:subheadcols}} |0| |<nowiki /> | ||
{{!}}- | {{!}}- | ||
Line 27: | Line 36: | ||
DATA | DATA | ||
− | We may have one, two or three label-data pairs. | + | 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 | <!-- | ||
+ | |||
+ | Split the param (keynum) into a key name and a line number: | ||
-->{{#vardefine: key | {{#rmatch: {{#var:keynum}} | (\D+)(\d+) | $1 }} }}<!-- | -->{{#vardefine: key | {{#rmatch: {{#var:keynum}} | (\D+)(\d+) | $1 }} }}<!-- | ||
-->{{#vardefine: num | {{#rmatch: {{#var:keynum}} | (\D+)(\d+) | $2 }} }}<!-- | -->{{#vardefine: num | {{#rmatch: {{#var:keynum}} | (\D+)(\d+) | $2 }} }}<!-- | ||
Line 43: | Line 55: | ||
-->{{#hashreset: singledataline}}<!-- | -->{{#hashreset: singledataline}}<!-- | ||
-->}}<!-- end forargs | -->}}<!-- 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}}<!-- | ||
Line 56: | Line 75: | ||
-->{{#vardefine: groupcount | 0 }}<!-- | -->{{#vardefine: groupcount | 0 }}<!-- | ||
-->{{#ifeq: {{#hashvalue: thedataline | llabel |M_NUL}}-{{#hashvalue: thedataline | ldata |M_NUL}} | <!-- | -->{{#ifeq: {{#hashvalue: thedataline | llabel |M_NUL}}-{{#hashvalue: thedataline | ldata |M_NUL}} | <!-- | ||
− | --> M_NUL-M_NUL || | + | --> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- |
− | |||
− | |||
-->}}<!-- | -->}}<!-- | ||
-->{{#ifeq: {{#hashvalue: thedataline | label |M_NUL}}-{{#hashvalue: thedataline | data |M_NUL}} | <!-- | -->{{#ifeq: {{#hashvalue: thedataline | label |M_NUL}}-{{#hashvalue: thedataline | data |M_NUL}} | <!-- | ||
--> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- | --> 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}} | <!-- | -->{{#ifeq: {{#hashvalue: thedataline | rlabel |M_NUL}}-{{#hashvalue: thedataline | rdata |M_NUL}} | <!-- | ||
--> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- | --> M_NUL-M_NUL || {{#vardefine: groupcount | {{#expr: {{#var:groupcount}}+1}} }} <!-- | ||
− | |||
-->}}<!-- | -->}}<!-- | ||
If there are no groups, do nothing. | If there are no groups, do nothing. | ||
− | -->{{#ifeq:groupcount|0||<!-- | + | -->{{#ifeq:{{#var:groupcount}}|0||<!-- |
− | Here we're assuming there are 6 columns total | + | Here we're assuming there are 6 columns total. |
− | -->{{# | + | @todo remove this assumption |
− | -->{{#switch: {{#var:groupcount}} | 1 = 6 | 2 = 3 | 3 = 2 }}<!-- | + | -->{{#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 | <!-- | -->{{#vardefine: ldatacols | <!-- | ||
-->{{#ifeq: {{#hashvalue: thedataline | ldata |M_NUL}} | M_NUL | 0 | <!-- | -->{{#ifeq: {{#hashvalue: thedataline | ldata |M_NUL}} | M_NUL | 0 | <!-- | ||
Line 87: | Line 111: | ||
-->}}<!-- | -->}}<!-- | ||
-->}}<!-- | -->}}<!-- | ||
− | -->{{#vardefine: | + | -->{{#vardefine: cdatacols | {{#expr:{{#var:columns}}-{{#var:labelcols}}-{{#var:clabelcols}}-{{#var:llabelcols}}-{{#var:ldatacols}}-{{#var:rlabelcols}}-{{#var:rdatacols}} }} }}<!-- |
+ | -->{{#vardefine: datacols | {{#var:cdatacols}} }}<!-- | ||
--><nowiki /> | --><nowiki /> | ||
Line 93: | Line 118: | ||
-->{{#ifeq: {{#var: llabelcols}} | 0 | |<nowiki /> | -->{{#ifeq: {{#var: llabelcols}} | 0 | |<nowiki /> | ||
− | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}}" {{!}} {{#hashvalue: thedataline | llabel }} <!-- | + | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}} {{#hashvalue: thedataline | llabelclass }} llabel" <!-- |
+ | --> {{!}} {{#hashvalue: thedataline | llabel }} <!-- | ||
-->}}<!-- | -->}}<!-- | ||
-->{{#ifeq: {{#var: ldatacols}} | 0 | |<nowiki /> | -->{{#ifeq: {{#var: ldatacols}} | 0 | |<nowiki /> | ||
− | {{!}} class="{{#hashvalue: thedataline|dataclass|}}" {{!}} {{#hashvalue: thedataline | ldata }} <!-- | + | {{!}} class="{{#hashvalue: thedataline|dataclass|}} {{#hashvalue: thedataline | ldataclass }} ldata" <!-- |
+ | --> colspan="{{#var:ldatacols}}" <!-- | ||
+ | --> {{!}} {{#hashvalue: thedataline | ldata }} <!-- | ||
-->}}<!-- | -->}}<!-- | ||
− | -->{{#ifeq: {{#var: labelcols}} | | + | -->{{#ifeq: {{#var: clabelcols}}{{#var: labelcols}} | 00 | |<nowiki /> |
− | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}}" {{!}} {{#hashvalue: thedataline | label }} <!-- | + | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}} {{#hashvalue: thedataline | clabelclass }} clabel" <!-- |
+ | --> {{!}} {{#hashvalue: thedataline | label }}{{#hashvalue: thedataline | clabel }} <!-- | ||
-->}}<!-- | -->}}<!-- | ||
− | --><nowiki /> | + | -->{{#ifeq: {{#var: cdatacols}} | 0 |<!-- |
− | {{!}} class="{{#hashvalue: thedataline|dataclass|}}" colspan="{{#var:datacols}}" {{!}} {{#hashvalue: thedataline | data }} <!-- | + | -->{{#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 /> | -->{{#ifeq: {{#var: rlabelcols}} | 0 | |<nowiki /> | ||
− | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}}" {{!}} {{#hashvalue: thedataline | rlabel }} <!-- | + | {{!}} class="{{#hashvalue: thedataline | labelclass | shaded}} {{#hashvalue: thedataline | rlabelclass }} rlabel" <!-- |
+ | --> {{!}} {{#hashvalue: thedataline | rlabel }} <!-- | ||
-->}}<!-- | -->}}<!-- | ||
-->{{#ifeq: {{#var: rdatacols}} | 0 | |<nowiki /> | -->{{#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 }} <!-- | ||
-->}}<!-- | -->}}<!-- | ||
Line 119: | Line 160: | ||
-->}}<!-- end hashprint datalinehash | -->}}<!-- end hashprint datalinehash | ||
-->{{#hashreset: datalinehash }}<!-- | -->{{#hashreset: datalinehash }}<!-- | ||
+ | -->{{#arrayreset:datalinekeys }}<!-- | ||
--> | --> |
Latest revision as of 01:49, 22 August 2014
{{{header}}} | |||||
---|---|---|---|---|---|
{{{subhead}}} |