12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/usr/bin/env python3
- # Copyright 2019 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.
- import argparse
- import sys
- import os
- sys.path += [os.path.dirname(os.path.dirname(__file__))]
- from style_variable_generator.css_generator import CSSStyleGenerator
- from style_variable_generator.ts_generator import TSStyleGenerator
- from style_variable_generator.proto_generator import ProtoStyleGenerator, ProtoJSONStyleGenerator
- from style_variable_generator.json_generator import JSONStyleGenerator
- from style_variable_generator.views_generator import ViewsCCStyleGenerator, ViewsHStyleGenerator
- from style_variable_generator.base_generator import Modes
- from style_variable_generator.color_mappings_generator import ColorMappingsCCStyleGenerator, ColorMappingsHStyleGenerator
- def parseGeneratorOptionList(options):
- result = {}
- if options is None:
- return result
- for key_value_pair in options:
- key, value = key_value_pair.split('=', 1)
- key = key.strip()
- result[key] = value
- return result
- def main():
- parser = argparse.ArgumentParser(
- description='Generate style variables from JSON5 color file.')
- generators = [
- CSSStyleGenerator, ViewsCCStyleGenerator, ViewsHStyleGenerator,
- ProtoStyleGenerator, ProtoJSONStyleGenerator, TSStyleGenerator,
- JSONStyleGenerator, ColorMappingsCCStyleGenerator,
- ColorMappingsHStyleGenerator
- ]
- parser.add_argument(
- '--generator',
- choices=[g.GetName() for g in generators],
- required=True,
- help='type of file to generate, provide this option multiple '
- 'times to use multiple generators',
- action='append')
- parser.add_argument('--generate-single-mode',
- choices=Modes.ALL,
- help='generates output for a single mode')
- parser.add_argument(
- '--out-file',
- help='file to write output to, the number of out-files '
- 'must match the number of generators if specified',
- action='append')
- parser.add_argument('--generator-option',
- metavar='KEY=VALUE',
- action='append',
- help='Set a option specific to the selected generator '
- 'via a key value pair. See the README.md for a '
- 'full list of generator specific options.')
- parser.add_argument('targets', nargs='+', help='source json5 color files')
- args = parser.parse_args()
- if args.out_file and len(args.generator) != len(args.out_file):
- raise ValueError(
- 'number of --out-files must match number of --generators')
- for i, g in enumerate(args.generator):
- gen_constructor = next(x for x in generators if g == x.GetName())
- style_generator = gen_constructor()
- style_generator.AddJSONFilesToModel(args.targets)
- style_generator.generate_single_mode = args.generate_single_mode
- style_generator.generator_options = parseGeneratorOptionList(
- args.generator_option)
- if args.out_file:
- style_generator.out_file_path = args.out_file[i]
- with open(args.out_file[i], 'w') as f:
- f.write(style_generator.Render())
- else:
- print('=========', style_generator.GetName(), '=========')
- print(style_generator.Render())
- return 0
- if __name__ == '__main__':
- sys.exit(main())
|