You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.9 KiB
Cheetah
105 lines
2.9 KiB
Cheetah
9 years ago
|
{#
|
||
|
# A set of macros for generating RST tables
|
||
|
#}
|
||
|
|
||
|
|
||
|
{#
|
||
|
# write a table for a list of parameters.
|
||
|
#
|
||
|
# 'rows' is the list of parameters. Each row should have the keys
|
||
|
# 'key', 'type', and 'desc'.
|
||
|
#}
|
||
|
{% macro paramtable(rows, titles=["Parameter", "Type", "Description"]) -%}
|
||
|
{{ split_paramtable({None: rows}, titles) }}
|
||
|
{% endmacro %}
|
||
|
|
||
|
|
||
|
{#
|
||
|
# write a table for the request parameters, split by location.
|
||
|
# 'rows_by_loc' is a map from location to a list of parameters.
|
||
|
#
|
||
|
# As a special case, if a key of 'rows_by_loc' is 'None', no title row is
|
||
|
# written for that location. This is used by the standard 'paramtable' macro.
|
||
|
#}
|
||
|
{% macro split_paramtable(rows_by_loc,
|
||
|
titles=["Parameter", "Type", "Description"]) -%}
|
||
|
|
||
|
{% set rowkeys = ['key', 'type', 'desc'] %}
|
||
|
{% set titlerow = {'key': titles[0], 'type': titles[1], 'desc': titles[2]} %}
|
||
|
|
||
|
{# We need the rows flattened into a single list. Abuse the 'sum' filter to
|
||
|
# join arrays instead of add numbers. -#}
|
||
|
{% set flatrows = rows_by_loc.values()|sum(start=[]) -%}
|
||
|
|
||
|
{# Figure out the widths of the columns. The last column is always 50 characters
|
||
|
# wide; the others default to 10, but stretch if there is wider text in the
|
||
|
# column. -#}
|
||
|
{% set fieldwidths = (([titlerow] + flatrows) |
|
||
|
fieldwidths(rowkeys[0:-1], [10, 10])) + [50] -%}
|
||
|
|
||
|
{{ tableheader(fieldwidths) }}
|
||
|
{{ tablerow(fieldwidths, titlerow, rowkeys) }}
|
||
|
{{ tableheader(fieldwidths) }}
|
||
|
{% for loc in rows_by_loc -%}
|
||
|
|
||
|
{% if loc != None -%}
|
||
|
{{ tablespan(fieldwidths, "*" ~ loc ~ " parameters*") }}
|
||
|
{% endif -%}
|
||
|
|
||
|
{% for row in rows_by_loc[loc] -%}
|
||
|
{{ tablerow(fieldwidths, row, rowkeys) }}
|
||
|
{% endfor -%}
|
||
|
{% endfor -%}
|
||
|
|
||
|
{{ tableheader(fieldwidths) }}
|
||
|
{% endmacro %}
|
||
|
|
||
|
|
||
|
|
||
|
{#
|
||
|
# Write a table header row, for the given column widths
|
||
|
#}
|
||
|
{% macro tableheader(widths) -%}
|
||
|
{% for arg in widths -%}
|
||
|
{{"="*arg}} {% endfor -%}
|
||
|
{% endmacro %}
|
||
|
|
||
|
|
||
|
|
||
|
{#
|
||
|
# Write a normal table row. Each of 'widths' and 'keys' should be sequences
|
||
|
# of the same length; 'widths' defines the column widths, and 'keys' the
|
||
|
# attributes of 'row' to look up for values to put in the columns.
|
||
|
#}
|
||
|
{% macro tablerow(widths, row, keys) -%}
|
||
|
{% for key in keys -%}
|
||
|
{% set value=row[key] -%}
|
||
|
{% if not loop.last -%}
|
||
|
{# the first few columns need space after them -#}
|
||
|
{{ value }}{{" "*(1+widths[loop.index0]-value|length) -}}
|
||
|
{% else -%}
|
||
|
{# the last column needs wrapping and indenting (by the sum of the widths of
|
||
|
the preceding columns, plus the number of preceding columns (for the
|
||
|
separators)) -#}
|
||
|
{{ value | wrap(widths[loop.index0]) |
|
||
|
indent_block(widths[0:-1]|sum + loop.index0) -}}
|
||
|
{% endif -%}
|
||
|
{% endfor -%}
|
||
|
{% endmacro %}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
{#
|
||
|
# write a tablespan row. This is a single value which spans the entire table.
|
||
|
#}
|
||
|
{% macro tablespan(widths, value) -%}
|
||
|
{{value}}
|
||
|
{# we write a trailing space to stop the separator being misinterpreted
|
||
|
# as a header line. -#}
|
||
|
{{"-"*(widths|sum + widths|length -1)}} {% endmacro %}
|
||
|
|
||
|
|
||
|
|
||
|
|