1226031Sstas#!/usr/local/bin/python 2226031Sstas# -*- coding: iso-8859-1 -*- 3226031Sstas 4226031Sstas# $Id$ 5226031Sstas 6226031Sstas# Copyright (c) 2004 Kungliga Tekniska H��gskolan 7226031Sstas# (Royal Institute of Technology, Stockholm, Sweden). 8226031Sstas# All rights reserved. 9226031Sstas# 10226031Sstas# Redistribution and use in source and binary forms, with or without 11226031Sstas# modification, are permitted provided that the following conditions 12226031Sstas# are met: 13226031Sstas# 14226031Sstas# 1. Redistributions of source code must retain the above copyright 15226031Sstas# notice, this list of conditions and the following disclaimer. 16226031Sstas# 17226031Sstas# 2. Redistributions in binary form must reproduce the above copyright 18226031Sstas# notice, this list of conditions and the following disclaimer in the 19226031Sstas# documentation and/or other materials provided with the distribution. 20226031Sstas# 21226031Sstas# 3. Neither the name of the Institute nor the names of its contributors 22226031Sstas# may be used to endorse or promote products derived from this software 23226031Sstas# without specific prior written permission. 24226031Sstas# 25226031Sstas# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 26226031Sstas# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27226031Sstas# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28226031Sstas# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 29226031Sstas# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30226031Sstas# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31226031Sstas# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32226031Sstas# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33226031Sstas# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34226031Sstas# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35226031Sstas# SUCH DAMAGE. 36226031Sstas 37226031Sstasimport re 38226031Sstasimport string 39226031Sstasimport sys 40226031Sstas 41226031Sstasimport generate 42226031Sstasimport UnicodeData 43226031Sstas 44226031Sstasif len(sys.argv) != 3: 45226031Sstas print "usage: %s UnicodeData.txt out-dir" % sys.argv[0] 46226031Sstas sys.exit(1) 47226031Sstas 48226031Sstasud = UnicodeData.read(sys.argv[1]) 49226031Sstas 50226031Sstastrans = {} 51226031Sstasfor k,v in ud.items(): 52226031Sstas if int(v[2]) != 0 : 53226031Sstas trans[k] = [int(v[2]), v[1]] 54226031Sstas 55226031Sstas# trans = [(x[0], int(x[3]), x[1]) for x in UnicodeData.read() if int(x[3]) != 0] 56226031Sstas 57226031Sstascombining_h = generate.Header('%s/combining_table.h' % sys.argv[2]) 58226031Sstascombining_c = generate.Implementation('%s/combining_table.c' % sys.argv[2]) 59226031Sstas 60226031Sstascombining_h.file.write( 61226031Sstas''' 62226031Sstas#include <krb5-types.h> 63226031Sstas 64226031Sstasstruct translation { 65226031Sstas uint32_t key; 66226031Sstas unsigned combining_class; 67226031Sstas}; 68226031Sstas 69226031Sstasextern const struct translation _wind_combining_table[]; 70226031Sstas 71226031Sstasextern const size_t _wind_combining_table_size; 72226031Sstas''') 73226031Sstas 74226031Sstascombining_c.file.write( 75226031Sstas''' 76226031Sstas#include <stdlib.h> 77226031Sstas#include "combining_table.h" 78226031Sstas 79226031Sstasconst struct translation _wind_combining_table[] = { 80226031Sstas''') 81226031Sstas 82226031Sstass = trans.keys() 83226031Sstass.sort() 84226031Sstasfor k in s: 85226031Sstas v = trans[k] 86226031Sstas combining_c.file.write("{0x%x, %u}, /* %s */\n" 87226031Sstas % (k, v[0], v[1])) 88226031Sstas 89226031Sstas 90226031Sstas#trans.sort() 91226031Sstas#for x in trans: 92226031Sstas# combining_c.file.write("{0x%x, %u}, /* %s */\n" 93226031Sstas# % (x[0], x[1], x[2])) 94226031Sstas 95226031Sstascombining_c.file.write( 96226031Sstas''' 97226031Sstas}; 98226031Sstas''') 99226031Sstas 100226031Sstascombining_c.file.write( 101226031Sstas "const size_t _wind_combining_table_size = %u;\n" % len(trans)) 102226031Sstas 103226031Sstas 104226031Sstascombining_h.close() 105226031Sstascombining_c.close() 106