| Index: trunk/src/tools/json_schema_compiler/features_compiler.py
|
| ===================================================================
|
| --- trunk/src/tools/json_schema_compiler/features_compiler.py (revision 226848)
|
| +++ trunk/src/tools/json_schema_compiler/features_compiler.py (working copy)
|
| @@ -1,76 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2013 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -"""Generator for C++ features from json files.
|
| -
|
| -Usage example:
|
| - features_compiler.py --destdir gen --root /home/Work/src _permissions.json
|
| -"""
|
| -
|
| -import optparse
|
| -import os
|
| -
|
| -from schema_loader import SchemaLoader
|
| -from features_cc_generator import CCGenerator
|
| -from features_h_generator import HGenerator
|
| -from model import CreateFeature
|
| -
|
| -
|
| -def _GenerateSchema(filename, root, destdir, namespace):
|
| - """Generates C++ features files from the json file |filename|.
|
| - """
|
| - # Load in the feature permissions from the JSON file.
|
| - schema = os.path.normpath(filename)
|
| - schema_loader = SchemaLoader(os.path.dirname(os.path.relpath(schema, root)),
|
| - os.path.dirname(schema))
|
| - schema_filename = os.path.splitext(schema)[0]
|
| - feature_defs = schema_loader.LoadSchema(schema)
|
| -
|
| - # Generate a list of the features defined and a list of their models.
|
| - feature_list = []
|
| - for feature_def, feature in feature_defs.iteritems():
|
| - feature_list.append(CreateFeature(feature_def, feature))
|
| -
|
| - source_file_dir, _ = os.path.split(schema)
|
| - relpath = os.path.relpath(os.path.normpath(source_file_dir), root)
|
| - full_path = os.path.join(relpath, schema)
|
| -
|
| - generators = [
|
| - ('%s.cc' % schema_filename, CCGenerator()),
|
| - ('%s.h' % schema_filename, HGenerator())
|
| - ]
|
| -
|
| - # Generate and output the code for all features.
|
| - output_code = []
|
| - for filename, generator in generators:
|
| - code = generator.Generate(feature_list, full_path, namespace).Render()
|
| - if destdir:
|
| - with open(os.path.join(destdir, relpath, filename), 'w') as f:
|
| - f.write(code)
|
| - output_code += [filename, '', code, '']
|
| -
|
| - return '\n'.join(output_code)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - parser = optparse.OptionParser(
|
| - description='Generates a C++ features model from JSON schema',
|
| - usage='usage: %prog [option]... schema')
|
| - parser.add_option('-r', '--root', default='.',
|
| - help='logical include root directory. Path to schema files from '
|
| - 'specified dir will be the include path.')
|
| - parser.add_option('-d', '--destdir',
|
| - help='root directory to output generated files.')
|
| - parser.add_option('-n', '--namespace', default='generated_features',
|
| - help='C++ namespace for generated files. e.g extensions::api.')
|
| - (opts, filenames) = parser.parse_args()
|
| -
|
| - # Only one file is currently specified.
|
| - if len(filenames) != 1:
|
| - raise ValueError('One (and only one) file is required (for now).')
|
| -
|
| - result = _GenerateSchema(filenames[0], opts.root, opts.destdir,
|
| - opts.namespace)
|
| - if not opts.destdir:
|
| - print result
|
|
|