46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
|
import sys
|
||
|
from unicode_parse_common import *
|
||
|
|
||
|
# http://www.unicode.org/Public/UNIDATA/auxiliary/GraphemeBreakProperty.txt
|
||
|
|
||
|
property_to_harfbuzz = {
|
||
|
'CR': 'HB_Grapheme_CR',
|
||
|
'LF': 'HB_Grapheme_LF',
|
||
|
'Control': 'HB_Grapheme_Control',
|
||
|
'Extend': 'HB_Grapheme_Extend',
|
||
|
'Prepend': 'HB_Grapheme_Other',
|
||
|
'SpacingMark': 'HB_Grapheme_Other',
|
||
|
'L': 'HB_Grapheme_L',
|
||
|
'V': 'HB_Grapheme_V',
|
||
|
'T': 'HB_Grapheme_T',
|
||
|
'LV': 'HB_Grapheme_LV',
|
||
|
'LVT': 'HB_Grapheme_LVT',
|
||
|
}
|
||
|
|
||
|
def main(infile, outfile):
|
||
|
ranges = unicode_file_parse(infile, property_to_harfbuzz)
|
||
|
ranges.sort()
|
||
|
|
||
|
print >>outfile, '// Generated from Unicode Grapheme break tables\n'
|
||
|
print >>outfile, '#ifndef GRAPHEME_BREAK_PROPERTY_H_'
|
||
|
print >>outfile, '#define GRAPHEME_BREAK_PROPERTY_H_\n'
|
||
|
print >>outfile, '#include <stdint.h>'
|
||
|
print >>outfile, '#include "harfbuzz-external.h"\n'
|
||
|
print >>outfile, 'struct grapheme_break_property {'
|
||
|
print >>outfile, ' uint32_t range_start;'
|
||
|
print >>outfile, ' uint32_t range_end;'
|
||
|
print >>outfile, ' HB_GraphemeClass klass;'
|
||
|
print >>outfile, '};\n'
|
||
|
print >>outfile, 'static const struct grapheme_break_property grapheme_break_properties[] = {'
|
||
|
for (start, end, value) in ranges:
|
||
|
print >>outfile, ' {0x%x, 0x%x, %s},' % (start, end, value)
|
||
|
print >>outfile, '};\n'
|
||
|
print >>outfile, 'static const unsigned grapheme_break_properties_count = %d;\n' % len(ranges)
|
||
|
print >>outfile, '#endif // GRAPHEME_BREAK_PROPERTY_H_'
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
if len(sys.argv) != 3:
|
||
|
print 'Usage: %s <input .txt> <output .h>' % sys.argv[0]
|
||
|
else:
|
||
|
main(file(sys.argv[1], 'r'), file(sys.argv[2], 'w+'))
|