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