|
|
@ -17,6 +17,80 @@ def "func:exists" { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
def "func:repeat_until" { |
|
|
|
param "str"; |
|
|
|
param "count"; |
|
|
|
|
|
|
|
choose { |
|
|
|
when "string-length($str) < $count" { |
|
|
|
result "func:repeat_until(concat($str, $str), $count)"; |
|
|
|
} otherwise { |
|
|
|
result "substring($str, 0, $count+1)"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
def "func:indent" { |
|
|
|
param "content"; |
|
|
|
param "indent_count"; |
|
|
|
param "indent_char", "'\t'"; |
|
|
|
result > «func:repeat_until($indent_char, $indent_count)»«$content» |
|
|
|
} |
|
|
|
|
|
|
|
def "func:paragraph_block" { |
|
|
|
param "content"; |
|
|
|
param "nth", "80"; |
|
|
|
param "wrap_char", "'\n'"; |
|
|
|
const "cont_oneline", "translate($content, '\n', ' ')"; |
|
|
|
result > «func:line_wrap($cont_oneline, $nth, $wrap_char)» |
|
|
|
} |
|
|
|
|
|
|
|
def "func:line_wrap" { |
|
|
|
param "content"; |
|
|
|
param "nth", "80"; |
|
|
|
param "wrap_char", "'\n'"; |
|
|
|
const "sep_char", "''"; |
|
|
|
const "nth_minus_dash", "$nth - string-length($sep_char)"; |
|
|
|
const "ret", "substring($content, 0, $nth_minus_dash)"; |
|
|
|
const "remainder", "substring($content, $nth_minus_dash)"; |
|
|
|
|
|
|
|
choose { |
|
|
|
when "string-length($remainder) > $nth_minus_dash" { |
|
|
|
result > «$ret»«$sep_char»«$wrap_char»«func:line_wrap($remainder, $nth)» |
|
|
|
} otherwise { |
|
|
|
result > «$ret»«$sep_char»«$wrap_char»«$remainder» |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
def "func:column_paragraph" { |
|
|
|
param "title"; |
|
|
|
param "content"; |
|
|
|
param "max_width"; |
|
|
|
result call "column_paragraph" |
|
|
|
with "title", "$title", |
|
|
|
with "content", "$content", |
|
|
|
with "max_width", "$max_width"; |
|
|
|
} |
|
|
|
function "column_paragraph" { |
|
|
|
param "title"; |
|
|
|
param "content"; |
|
|
|
param "max_width"; |
|
|
|
const "title_width", "string-length($title)"; |
|
|
|
const "cont_width", "$max_width - $title_width"; |
|
|
|
|
|
|
|
const "cont_wrapped", "func:paragraph_block($content, $cont_width)"; |
|
|
|
for "str:split($cont_wrapped, '\n')" { |
|
|
|
const "line", "."; |
|
|
|
choose { |
|
|
|
when "position() = 1" |
|
|
|
| «$title»«func:indent($line,1,' ')» |
|
|
|
otherwise |
|
|
|
| «func:indent($line, $title_width+1,' ')» |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// ---------------------------------------------------------------------- |
|
|
|
// idl-api (ysl2) |
|
|
|
// ---------------------------------------------------------------------- |
|
|
@ -105,7 +179,6 @@ def "func:idl_type_is_generic" { |
|
|
|
result "contains($idltype,'<') and contains($idltype,'>')" |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// TODO: generic is actually not a typekid, this should return the generic typekind like list/map/pair |
|
|
|
def "func:idl_type_get_typekind_of_type" { |
|
|
|
param "idltype"; |
|
|
|