Blame glib/glib/gen-iswide-table.py

Packit db3073
#!/usr/bin/python
Packit db3073
Packit db3073
import sys
Packit db3073
Packit db3073
W = {}
Packit db3073
W['A'] = []
Packit db3073
W['W'] = []
Packit db3073
W['F'] = W['W']
Packit db3073
Packit db3073
for line in sys.stdin:
Packit db3073
	i = line.find ('#')
Packit db3073
	if i >= 0:
Packit db3073
		line = line[:i]
Packit db3073
	line = line.strip ()
Packit db3073
	if not len (line):
Packit db3073
		continue
Packit db3073
Packit db3073
	fields = [x.strip () for x in line.split (';')]
Packit db3073
	chars = fields[0]
Packit db3073
	width = fields[1]
Packit db3073
Packit db3073
	if width not in ['A', 'W', 'F']:
Packit db3073
		continue
Packit db3073
Packit db3073
	if chars.find ('..') > 0:
Packit db3073
		(start,end) = chars.split ('..')
Packit db3073
	else:
Packit db3073
		start = chars
Packit db3073
		end = chars
Packit db3073
	start, end = int(start,16), int(end,16)
Packit db3073
Packit db3073
	for i in range (start, end+1):
Packit db3073
		W[width].append (i)
Packit db3073
Packit db3073
Packit db3073
def write_intervals (S):
Packit db3073
	S.sort ()
Packit db3073
	start = S[0];
Packit db3073
	end = start - 1
Packit db3073
	for c in S:
Packit db3073
		if c == end+1:
Packit db3073
			end += 1
Packit db3073
			continue
Packit db3073
		else:
Packit db3073
			print "{0x%04X, 0x%04X}, " % (start, end)
Packit db3073
			start = c
Packit db3073
			end = start
Packit db3073
	print "{0x%04X, 0x%04X} " % (start, end)
Packit db3073
Packit db3073
Packit db3073
Packit db3073
print "table for g_unichar_iswide():"
Packit db3073
print
Packit db3073
write_intervals (W['W'])
Packit db3073
print
Packit db3073
print "table for g_unichar_iswide_cjk():"
Packit db3073
print
Packit db3073
write_intervals (W['A'])