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 rfc3454 43226031Sstas 44226031Sstasif len(sys.argv) != 3: 45226031Sstas print "usage: %s rfc3454.txt outdir" % sys.argv[0] 46226031Sstas sys.exit(1) 47226031Sstas 48226031Sstastables = rfc3454.read(sys.argv[1]) 49226031Sstas 50226031Sstasbidi_h = generate.Header('%s/bidi_table.h' % sys.argv[2]) 51226031Sstas 52226031Sstasbidi_c = generate.Implementation('%s/bidi_table.c' % sys.argv[2]) 53226031Sstas 54226031Sstasbidi_h.file.write( 55226031Sstas''' 56226031Sstas#include <krb5-types.h> 57226031Sstas 58226031Sstasstruct range_entry { 59226031Sstas uint32_t start; 60226031Sstas unsigned len; 61226031Sstas}; 62226031Sstas 63226031Sstasextern const struct range_entry _wind_ral_table[]; 64226031Sstasextern const struct range_entry _wind_l_table[]; 65226031Sstas 66226031Sstasextern const size_t _wind_ral_table_size; 67226031Sstasextern const size_t _wind_l_table_size; 68226031Sstas 69226031Sstas''') 70226031Sstas 71226031Sstasbidi_c.file.write( 72226031Sstas''' 73226031Sstas#include <stdlib.h> 74226031Sstas#include "bidi_table.h" 75226031Sstas 76226031Sstas''') 77226031Sstas 78226031Sstasdef printTable(file, table, variable): 79226031Sstas """print table to file named as variable""" 80226031Sstas file.write("const struct range_entry %s[] = {\n" % variable) 81226031Sstas count = 0 82226031Sstas for l in tables[table]: 83226031Sstas m = re.search('^ *([0-9A-F]+)-([0-9A-F]+) *$', l) 84226031Sstas if m: 85226031Sstas start = int(m.group(1), 0x10) 86226031Sstas end = int(m.group(2), 0x10) 87226031Sstas file.write(" {0x%x, 0x%x},\n" % (start, end - start + 1)) 88226031Sstas count += 1 89226031Sstas else: 90226031Sstas m = re.search('^ *([0-9A-F]+) *$', l) 91226031Sstas if m: 92226031Sstas v = int(m.group(1), 0x10) 93226031Sstas file.write(" {0x%x, 1},\n" % v) 94226031Sstas count += 1 95226031Sstas file.write("};\n\n") 96226031Sstas file.write("const size_t %s_size = %u;\n\n" % (variable, count)) 97226031Sstas 98226031SstasprintTable(bidi_c.file, 'D.1', '_wind_ral_table') 99226031SstasprintTable(bidi_c.file, 'D.2', '_wind_l_table') 100226031Sstas 101226031Sstasbidi_h.close() 102226031Sstasbidi_c.close() 103