Browse Source

idl-api: stdlib candidates, add a bunch of text formatting functions

main
heck 2 years ago
parent
commit
0807b14306
  1. 75
      idl/idl_api.ysl2

75
idl/idl_api.ysl2

@ -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) // idl-api (ysl2)
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
@ -105,7 +179,6 @@ def "func:idl_type_is_generic" {
result "contains($idltype,'<') and contains($idltype,'>')" result "contains($idltype,'<') and contains($idltype,'>')"
} }
// TODO: generic is actually not a typekid, this should return the generic typekind like list/map/pair // 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" { def "func:idl_type_get_typekind_of_type" {
param "idltype"; param "idltype";

Loading…
Cancel
Save