
2 changed files with 133 additions and 239 deletions
@ -0,0 +1,131 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from . import utils |
||||
|
|
||||
|
def generate_yml(cid): |
||||
|
ret = "" |
||||
|
ret += generate_functions(cid) |
||||
|
ret += generate_structs(cid) |
||||
|
ret += generate_enums(cid) |
||||
|
return ret |
||||
|
|
||||
|
def generate_functions(cid): |
||||
|
data_root = cid["functions"] |
||||
|
|
||||
|
# Main |
||||
|
tmpl_main = "" |
||||
|
tmpl_main += 'method {name} {{\n' |
||||
|
tmpl_main += ' return {return_type}\n' |
||||
|
tmpl_main += '{subitems}' |
||||
|
tmpl_main += '}}\n\n' |
||||
|
|
||||
|
kind_main = "CursorKind.FUNCTION_DECL" |
||||
|
|
||||
|
def format_func_main(tmpl, item, subitems_str): |
||||
|
return tmpl.format( |
||||
|
name=item["name"], |
||||
|
return_type=item["result_type"], |
||||
|
subitems=subitems_str) |
||||
|
|
||||
|
# Sub |
||||
|
tmpl_sub = "" |
||||
|
tmpl_sub += ' use "{type}" "{name}"' |
||||
|
|
||||
|
kind_sub = "CursorKind.PARM_DECL" |
||||
|
|
||||
|
def format_func_sub(tmpl, item): |
||||
|
return tmpl.format( |
||||
|
type=item["type"], |
||||
|
name=item["name"]) |
||||
|
|
||||
|
ret = _format(data_root, tmpl_main, kind_main, format_func_main, tmpl_sub, kind_sub, format_func_sub) |
||||
|
|
||||
|
return ret |
||||
|
|
||||
|
def generate_structs(cid): |
||||
|
data_root = cid["types"] |
||||
|
|
||||
|
# Main |
||||
|
tmpl_main = "" |
||||
|
tmpl_main += 'struct {name} {{\n' |
||||
|
tmpl_main += '{subitems}' |
||||
|
tmpl_main += '}}\n\n' |
||||
|
|
||||
|
kind_main = "CursorKind.STRUCT_DECL" |
||||
|
|
||||
|
def format_func_main(tmpl, item, subitems_str): |
||||
|
return tmpl.format( |
||||
|
name=item["name"], |
||||
|
subitems=subitems_str) |
||||
|
|
||||
|
# Sub |
||||
|
tmpl_sub = "" |
||||
|
tmpl_sub+=' field "{type}" "{name}"' |
||||
|
kind_sub = "CursorKind.FIELD_DECL" |
||||
|
|
||||
|
def format_func_sub(tmpl, item): |
||||
|
return tmpl.format( |
||||
|
type=item["type"], |
||||
|
name=item["name"]) |
||||
|
|
||||
|
ret = _format(data_root, tmpl_main, kind_main, format_func_main, tmpl_sub, kind_sub, format_func_sub) |
||||
|
|
||||
|
return ret |
||||
|
|
||||
|
def generate_enums(cid): |
||||
|
data_root = cid["types"] |
||||
|
|
||||
|
# Main |
||||
|
tmpl_main = "" |
||||
|
tmpl_main += 'enum {name} {{\n' |
||||
|
tmpl_main += '{subitems}' |
||||
|
tmpl_main += '}}\n\n' |
||||
|
|
||||
|
kind_main = "CursorKind.ENUM_DECL" |
||||
|
|
||||
|
def format_func_main(tmpl, item, subitems_str): |
||||
|
return tmpl.format( |
||||
|
name=item["name"], |
||||
|
subitems=subitems_str) |
||||
|
|
||||
|
# Sub |
||||
|
tmpl_sub = "" |
||||
|
tmpl_sub+= ' item "{name}" "{value}"' |
||||
|
kind_sub = "CursorKind.ENUM_CONSTANT_DECL" |
||||
|
|
||||
|
def format_func_sub(tmpl, item): |
||||
|
return tmpl.format( |
||||
|
name=item["name"], |
||||
|
value=item["value"]) |
||||
|
|
||||
|
ret = _format(data_root, tmpl_main, kind_main, format_func_main, tmpl_sub, kind_sub, format_func_sub) |
||||
|
|
||||
|
return ret |
||||
|
|
||||
|
def _format(data, tmpl_main, kind_main, func_main, tmpl_sub, kind_sub, func_sub): |
||||
|
ret = "" |
||||
|
|
||||
|
def filt(item): |
||||
|
if item["kind"] == kind_main: |
||||
|
return True |
||||
|
|
||||
|
main_items = utils.recursive_query(data, filt) |
||||
|
|
||||
|
for item in main_items: |
||||
|
subitems_str = _format_subitems(item, tmpl_sub, kind_sub, func_sub) |
||||
|
ret += func_main(tmpl_main, item, subitems_str) |
||||
|
|
||||
|
return ret |
||||
|
|
||||
|
def _format_subitems(data, tmpl, kind, func): |
||||
|
ret = "" |
||||
|
|
||||
|
def filt(data): |
||||
|
if data["kind"] == kind: |
||||
|
return True |
||||
|
|
||||
|
subitems = utils.recursive_query(data, filt) |
||||
|
|
||||
|
for item in subitems: |
||||
|
ret += func(tmpl, item) + "\n" |
||||
|
|
||||
|
return ret |
Loading…
Reference in new issue