| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2012 The Chromium Authors. All rights reserved. | 2 # Copyright 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 # Format for the JSON schema file: | 6 # Format for the JSON schema file: |
| 7 # { | 7 # { |
| 8 # "type_name": "DesiredCStructName", | 8 # "type_name": "DesiredCStructName", |
| 9 # "headers": [ // Optional list of headers to be included by the .h. | 9 # "headers": [ // Optional list of headers to be included by the .h. |
| 10 # "path/to/header.h" | 10 # "path/to/header.h" |
| 11 # ], | 11 # ], |
| 12 # "schema": [ // Fields of the generated structure. | 12 # "schema": [ // Fields of the generated structure. |
| 13 # { | 13 # { |
| 14 # "field": "my_enum_field", | 14 # "field": "my_enum_field", |
| 15 # "type": "enum", // Either: int, string, string16, enum, array. | 15 # "type": "enum", // Either: int, string, string16, enum, array, struct. |
| 16 # "default": "RED", // Optional. Cannot be used for array. | 16 # "default": "RED", // Optional. Cannot be used for array. |
| 17 # "ctype": "Color" // Only for enum, specify the C type. | 17 # "ctype": "Color" // Only for enum, specify the C type. |
| 18 # }, | 18 # }, |
| 19 # { | 19 # { |
| 20 # "field": "my_int_array_field", // my_int_array_field_size will also | 20 # "field": "my_int_array_field", // my_int_array_field_size will also |
| 21 # "type": "array", // be generated. | 21 # "type": "array", // be generated. |
| 22 # "contents": { | 22 # "contents": { |
| 23 # "type": "int" // Either: int, string, string16, enum, array. | 23 # "type": "int" // Either: int, string, string16, enum, array. |
| 24 # } | 24 # } |
| 25 # }, | 25 # }, |
| 26 # { |
| 27 # "field": "my_struct_field", |
| 28 # "type_name": "PointStuct", |
| 29 # "type": "struct", |
| 30 # "fields": [ |
| 31 # {"field": "x", "type": "int"}, |
| 32 # {"field": "y", "type": "int"} |
| 33 # ] |
| 34 # }, |
| 26 # ... | 35 # ... |
| 27 # ] | 36 # ] |
| 28 # } | 37 # } |
| 29 # | 38 # |
| 30 # Format for the JSON description file: | 39 # Format for the JSON description file: |
| 31 # { | 40 # { |
| 32 # "int_variables": { // An optional list of constant int variables. | 41 # "int_variables": { // An optional list of constant int variables. |
| 33 # "kDesiredConstantName": 45 | 42 # "kDesiredConstantName": 45 |
| 34 # }, | 43 # }, |
| 35 # "elements": { // All the elements for which to create static | 44 # "elements": { // All the elements for which to create static |
| 36 # // initialization code in the .cc file. | 45 # // initialization code in the .cc file. |
| 37 # "my_const_variable": { | 46 # "my_const_variable": { |
| 38 # "my_int_field": 10, | 47 # "my_int_field": 10, |
| 39 # "my_string_field": "foo bar", | 48 # "my_string_field": "foo bar", |
| 40 # "my_enum_field": "BLACK", | 49 # "my_enum_field": "BLACK", |
| 41 # "my_int_array_field": [ 1, 2, 3, 5, 7 ], | 50 # "my_int_array_field": [ 1, 2, 3, 5, 7 ], |
| 51 # "my_struct_field": {"x": 1, "y": 2} |
| 42 # }, | 52 # }, |
| 43 # "my_other_const_variable": { | 53 # "my_other_const_variable": { |
| 44 # ... | 54 # ... |
| 45 # } | 55 # } |
| 46 # } | 56 # } |
| 47 # } | 57 # } |
| 48 | 58 |
| 49 import json | 59 import json |
| 50 from datetime import datetime | 60 from datetime import datetime |
| 51 import os.path | 61 import os.path |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 f.write('\n') | 122 f.write('\n') |
| 113 | 123 |
| 114 if namespace: | 124 if namespace: |
| 115 f.write('namespace %s {\n' % namespace) | 125 f.write('namespace %s {\n' % namespace) |
| 116 f.write('\n') | 126 f.write('\n') |
| 117 | 127 |
| 118 f.write(struct_generator.GenerateStruct( | 128 f.write(struct_generator.GenerateStruct( |
| 119 schema['type_name'], schema['schema'])) | 129 schema['type_name'], schema['schema'])) |
| 120 f.write('\n') | 130 f.write('\n') |
| 121 | 131 |
| 122 for var_name, value in description.get('int_variables', []).items(): | 132 for var_name, value in description.get('int_variables', {}).items(): |
| 123 f.write('extern const int %s;\n' % var_name) | 133 f.write('extern const int %s;\n' % var_name) |
| 124 f.write('\n') | 134 f.write('\n') |
| 125 | 135 |
| 126 for element_name, element in description['elements'].items(): | 136 for element_name, element in description['elements'].items(): |
| 127 f.write('extern const %s %s;\n' % (schema['type_name'], element_name)) | 137 f.write('extern const %s %s;\n' % (schema['type_name'], element_name)) |
| 128 | 138 |
| 129 if namespace: | 139 if namespace: |
| 130 f.write('\n') | 140 f.write('\n') |
| 131 f.write('} // namespace %s\n' % namespace) | 141 f.write('} // namespace %s\n' % namespace) |
| 132 | 142 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 basepath = os.path.normpath(opts.destbase) | 212 basepath = os.path.normpath(opts.destbase) |
| 203 else: | 213 else: |
| 204 basepath = '' | 214 basepath = '' |
| 205 | 215 |
| 206 schema = _Load(opts.schema) | 216 schema = _Load(opts.schema) |
| 207 description = _Load(description_filename) | 217 description = _Load(description_filename) |
| 208 | 218 |
| 209 head = HEAD % (datetime.now().year, opts.schema, description_filename) | 219 head = HEAD % (datetime.now().year, opts.schema, description_filename) |
| 210 _GenerateH(basepath, output_root, head, opts.namespace, schema, description) | 220 _GenerateH(basepath, output_root, head, opts.namespace, schema, description) |
| 211 _GenerateCC(basepath, output_root, head, opts.namespace, schema, description) | 221 _GenerateCC(basepath, output_root, head, opts.namespace, schema, description) |
| OLD | NEW |