• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import sys
2from unicode_parse_common import *
3
4# http://www.unicode.org/Public/5.1.0/ucd/Scripts.txt
5
6script_to_harfbuzz = {
7  # This is the list of HB_Script_* at the time of writing
8  'Common': 'HB_Script_Common',
9  'Greek': 'HB_Script_Greek',
10  'Cyrillic': 'HB_Script_Cyrillic',
11  'Armenian': 'HB_Script_Armenian',
12  'Hebrew': 'HB_Script_Hebrew',
13  'Arabic': 'HB_Script_Arabic',
14  'Syriac': 'HB_Script_Syriac',
15  'Thaana': 'HB_Script_Thaana',
16  'Devanagari': 'HB_Script_Devanagari',
17  'Bengali': 'HB_Script_Bengali',
18  'Gurmukhi': 'HB_Script_Gurmukhi',
19  'Gujarati': 'HB_Script_Gujarati',
20  'Oriya': 'HB_Script_Oriya',
21  'Tamil': 'HB_Script_Tamil',
22  'Telugu': 'HB_Script_Telugu',
23  'Kannada': 'HB_Script_Kannada',
24  'Malayalam': 'HB_Script_Malayalam',
25  'Sinhala': 'HB_Script_Sinhala',
26  'Thai': 'HB_Script_Thai',
27  'Lao': 'HB_Script_Lao',
28  'Tibetan': 'HB_Script_Tibetan',
29  'Myanmar': 'HB_Script_Myanmar',
30  'Georgian': 'HB_Script_Georgian',
31  'Hangul': 'HB_Script_Hangul',
32  'Ogham': 'HB_Script_Ogham',
33  'Runic': 'HB_Script_Runic',
34  'Khmer': 'HB_Script_Khmer',
35  'Inherited': 'HB_Script_Inherited',
36}
37
38class ScriptDict(object):
39  def __init__(self, base):
40    self.base = base
41
42  def __getitem__(self, key):
43    r = self.base.get(key, None)
44    if r is None:
45      return 'HB_Script_Common'
46    return r
47
48def main(infile, outfile):
49  ranges = unicode_file_parse(infile,
50                              ScriptDict(script_to_harfbuzz),
51                              'HB_Script_Common')
52  ranges = sort_and_merge(ranges)
53
54  print >>outfile, '// Generated from Unicode script tables\n'
55  print >>outfile, '#ifndef SCRIPT_PROPERTIES_H_'
56  print >>outfile, '#define SCRIPT_PROPERTIES_H_\n'
57  print >>outfile, '#include <stdint.h>'
58  print >>outfile, '#include "harfbuzz-shaper.h"\n'
59  print >>outfile, 'struct script_property {'
60  print >>outfile, '  uint32_t range_start;'
61  print >>outfile, '  uint32_t range_end;'
62  print >>outfile, '  HB_Script script;'
63  print >>outfile, '};\n'
64  print >>outfile, 'static const struct script_property script_properties[] = {'
65  for (start, end, value) in ranges:
66    print >>outfile, '  {0x%x, 0x%x, %s},' % (start, end, value)
67  print >>outfile, '};\n'
68  print >>outfile, 'static const unsigned script_properties_count = %d;\n' % len(ranges)
69  print >>outfile, '#endif  // SCRIPT_PROPERTIES_H_'
70
71if __name__ == '__main__':
72  if len(sys.argv) != 3:
73    print 'Usage: %s <input .txt> <output .h>' % sys.argv[0]
74  else:
75    main(file(sys.argv[1], 'r'), file(sys.argv[2], 'w+'))
76