| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 3 # Use of this source code is governed by a BSD-style license that can be | |
| 4 # found in the LICENSE file. | |
| 5 | |
| 6 """Generate a C++ header from ibus_input_methods.txt. | |
| 7 | |
| 8 This program generates a C++ header file containing the information on | |
| 9 available input methods. It parses input_methods.txt, and then generates a | |
| 10 static array definition from the information extracted. The input and output | |
| 11 file names are specified on the command line. | |
| 12 | |
| 13 Run it like: | |
| 14 gen_input_methods.py input_methods.txt input_methods.h | |
| 15 | |
| 16 It will produce output that looks like: | |
| 17 | |
| 18 // This file is automatically generated by gen_input_methods.py | |
| 19 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHODS_H_ | |
| 20 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHODS_H_ | |
| 21 | |
| 22 namespace chromeos { | |
| 23 namespace input_method { | |
| 24 | |
| 25 struct InputMethodsInfo { | |
| 26 const char* input_method_id; | |
| 27 const char* language_code; | |
| 28 const char* xkb_keyboard_id; | |
| 29 }; | |
| 30 const InputMethodsInfo kInputMethods[] = { | |
| 31 {"mozc-chewing", "zh-TW", "us"}, | |
| 32 {"xkb:us::eng", "en-US", "us"}, | |
| 33 {"xkb:us:dvorak:eng", "en-US", "us(dvorak)"}, | |
| 34 {"xkb:be::fra", "fr", "be"}, | |
| 35 {"xkb:br::por", "pt-BR", "br"}, | |
| 36 }; | |
| 37 | |
| 38 } // namespace input_method | |
| 39 } // namespace chromeos | |
| 40 | |
| 41 #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHODS_H_ | |
| 42 | |
| 43 """ | |
| 44 | |
| 45 import fileinput | |
| 46 import re | |
| 47 import sys | |
| 48 | |
| 49 OUTPUT_HEADER = """// Automatically generated by gen_input_methods.py | |
| 50 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHODS_H_ | |
| 51 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHODS_H_ | |
| 52 | |
| 53 namespace chromeos { | |
| 54 namespace input_method { | |
| 55 | |
| 56 struct InputMethodsInfo { | |
| 57 const char* input_method_id; | |
| 58 const char* language_code; | |
| 59 const char* xkb_layout_id; | |
| 60 }; | |
| 61 const InputMethodsInfo kInputMethods[] = { | |
| 62 """ | |
| 63 | |
| 64 CPP_FORMAT = '#if %s\n' | |
| 65 ENGINE_FORMAT = (' {"%(input_method_id)s", "%(language_code)s", ' + | |
| 66 '"%(xkb_layout_id)s"},\n') | |
| 67 | |
| 68 OUTPUT_FOOTER = """ | |
| 69 }; | |
| 70 | |
| 71 } // namespace input_method | |
| 72 } // namespace chromeos | |
| 73 | |
| 74 #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHODS_H_ | |
| 75 """ | |
| 76 | |
| 77 def CreateEngineHeader(engines): | |
| 78 """Create the header file from a list of engines. | |
| 79 | |
| 80 Arguments: | |
| 81 engines: list of engine objects | |
| 82 Returns: | |
| 83 The text of a C++ header file containing the engine data. | |
| 84 """ | |
| 85 output = [] | |
| 86 output.append(OUTPUT_HEADER) | |
| 87 for engine in engines: | |
| 88 if engine.has_key('if'): | |
| 89 output.append(CPP_FORMAT % engine['if']) | |
| 90 output.append(ENGINE_FORMAT % engine) | |
| 91 if engine.has_key('if'): | |
| 92 output.append('#endif\n') | |
| 93 output.append(OUTPUT_FOOTER) | |
| 94 | |
| 95 return "".join(output) | |
| 96 | |
| 97 | |
| 98 def main(argv): | |
| 99 if len(argv) != 3: | |
| 100 print 'Usage: gen_input_methods.py [whitelist] [output]' | |
| 101 sys.exit(1) | |
| 102 engines = [] | |
| 103 for line in fileinput.input(sys.argv[1]): | |
| 104 line = line.strip() | |
| 105 if not line or re.match(r'#', line): | |
| 106 continue | |
| 107 columns = line.split() | |
| 108 assert len(columns) == 3 or len(columns) == 4, "Invalid format: " + line | |
| 109 engine = {} | |
| 110 engine['input_method_id'] = columns[0] | |
| 111 engine['xkb_layout_id'] = columns[1] | |
| 112 engine['language_code'] = columns[2] | |
| 113 if len(columns) == 4: | |
| 114 engine['if'] = columns[3] | |
| 115 engines.append(engine) | |
| 116 | |
| 117 output = CreateEngineHeader(engines) | |
| 118 output_file = open(sys.argv[2], 'w') | |
| 119 output_file.write(output) | |
| 120 | |
| 121 | |
| 122 if __name__ == '__main__': | |
| 123 main(sys.argv) | |
| OLD | NEW |