3 from xml.dom import minidom
6 def write_note(output):
7 output.writelines("/*This file is generated by auto_codes.py.*/\n\n")
9 def get_record_width_struct_name(record_name):
10 return (record_name + "_width").capitalize()
12 def get_metadata(filename='metadata.xml'):
13 doc = minidom.parse(filename)
14 root = doc.documentElement
16 record_nodes = root.getElementsByTagName('record')
18 for record_node in record_nodes:
19 record_name = record_node.getAttribute('name')
20 fields_node = record_node.getElementsByTagName('field')
23 for field_node in fields_node:
24 field_name = field_node.getAttribute('name')
25 field_type = field_node.getAttribute('type')
26 field_data = {"name":field_name, "type":field_type}
27 field_list.append(field_data)
28 record_data = {"name":record_name, "field_list":field_list}
29 record_list.append(record_data);
32 def gen_auto_metadata_h(record_list):
33 output = open('_auto_metadata.h', 'w')
36 codes_list.append('#ifndef __AUTO_METADATA_H__\n')
37 codes_list.append('#define __AUTO_METADATA_H__\n\n')
39 codes_list.append('#include <memory.h>\n')
40 for record_data in record_list:
41 struct_name = get_record_width_struct_name(record_data['name'])
43 codes_list.append("typedef struct _" + struct_name + " {\n")
44 field_list = record_data['field_list']
45 for field_data in field_list:
46 codes_list.append("\tint " + field_data['name'] + ";\n")
49 codes_list.append("}" + struct_name + ";");
50 codes_list.append("\n\n")
52 for record_data in record_list:
53 function_name = "set_" + record_data['name'] + "_width"
54 struct_name = get_record_width_struct_name(record_data['name'])
55 parameter = "T& md_helper,\n\t";
56 parameter += struct_name + " & " + "record_width"
57 codes_list.append("template <class T>\n")
58 codes_list.append("void " + function_name + "(" + parameter + ") {\n")
59 codes_list.append("\tmd_helper.set_current_metadata_record(\"" + record_data['name'] + "\");\n")
60 codes_list.append("\tmemset(&record_width, 0x00, sizeof("+ struct_name +"));\n")
61 codes_list.append("\n")
63 field_list = record_data['field_list']
64 for field_data in field_list:
65 codes_list.append("\trecord_width." + field_data['name'] + " = md_helper.get_width(\"" + field_data['name'] + "\");\n")
66 codes_list.append('}\n\n')
68 codes_list.append("\n")
69 codes_list.append('#endif //End __AUTO_METADATA_H__\n')
70 output.writelines(codes_list)
73 record_list = get_metadata()
74 gen_auto_metadata_h(record_list)
75 shutil.copyfile('_auto_metadata.h', '../include/_auto_metadata.h')
76 shutil.copyfile('_auto_metadata.h', '../../binary_xmlresource/include/_auto_metadata.h')
77 os.remove('_auto_metadata.h')
80 print '----MESSAGE-----\n'
81 print '_auto_metadata.h is generated in ../include/_auto_metadata.h successfully\n'
82 print '_auto_metadata.h is generated in ../../binary_xmlresource/include/_auto_metadata.h successfully\n'