diff --git a/generator/idl_parser/idls.ts b/generator/idl_parser/idls.ts index b192dbe..f8ed020 100644 --- a/generator/idl_parser/idls.ts +++ b/generator/idl_parser/idls.ts @@ -65,12 +65,36 @@ export class InterfaceImpl implements Interface { name: string; members: Array; - constructor(raw_idl_info: any) { - this.name = raw_idl_info.name; + constructor(interface_info: any) { + this.name = interface_info.name; this.members = new Array(); - raw_idl_info.members.forEach(member => { + interface_info.members.forEach(member => { this.members.push(new InterfaceMemberImpl(member)); }); } } + +export class EnumImpl { + // FIXME(hwanseung): should be implement Enum + constructor(enum_info: any) {} +} + +export class Fragments { + interfaces: Array; + enums: Array; + + constructor(raw_idl_infos: any) { + raw_idl_infos.forEach(raw_idl_info => { + this.interfaces = new Array(); + this.enums = new Array(); + if (raw_idl_info['type'] == 'interface') { + this.interfaces.push(new InterfaceImpl(raw_idl_info)); + } else if (raw_idl_info['type'] == 'enum') { + this.enums.push(new EnumImpl(raw_idl_info)); + } else { + // FIXME: should implement dictionary, typedefs or etc. + } + }); + } +} \ No newline at end of file diff --git a/generator/main.ts b/generator/main.ts index e550200..3c3b752 100644 --- a/generator/main.ts +++ b/generator/main.ts @@ -27,7 +27,7 @@ async function generateInterface( env: nunjucks.Environment, input_idl_path: string, output_path: string) { const parsedData = webidl.parse(await file.read(path.resolve(input_idl_path))); - const idl_interface: idls.Interface = new idls.InterfaceImpl(parsedData[0]); + const idl_fragments: idls.Fragments = new idls.Fragments(parsedData); const [header_tmpl, cpp_tmpl] = await Promise.all([ file.read(path.resolve(TEMPLATE_DIR, 'interface_header.njk')), @@ -37,9 +37,10 @@ async function generateInterface( const header_file_path = path.resolve(output_path, idl_name + '_bridge.h'); const cpp_file_path = path.resolve(output_path, idl_name + '_bridge.cc'); + // FIXME: should make each files per interfaces. return Promise.all([ - file.write(header_file_path, env.renderString(header_tmpl, idl_interface)), - file.write(cpp_file_path, env.renderString(cpp_tmpl, idl_interface)) + file.write(header_file_path, env.renderString(header_tmpl, idl_fragments.interfaces[0])), + file.write(cpp_file_path, env.renderString(cpp_tmpl, idl_fragments.interfaces[0])) ]); }