1 #!/usr/local/bin/python
2 # -*- coding: iso-8859-1 -*-
6 # Copyright (c) 2004 Kungliga Tekniska Högskolan
7 # (Royal Institute of Technology, Stockholm, Sweden).
10 # Redistribution and use in source and binary forms, with or without
11 # modification, are permitted provided that the following conditions
14 # 1. Redistributions of source code must retain the above copyright
15 # notice, this list of conditions and the following disclaimer.
17 # 2. Redistributions in binary form must reproduce the above copyright
18 # notice, this list of conditions and the following disclaimer in the
19 # documentation and/or other materials provided with the distribution.
21 # 3. Neither the name of the Institute nor the names of its contributors
22 # may be used to endorse or promote products derived from this software
23 # without specific prior written permission.
25 # THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
26 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 # ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
29 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43 if len(sys
.argv
) != 3:
44 print "usage: %s rfc3492.txt" % sys
.argv
[0]
47 f
= open(sys
.argv
[1], 'r')
49 examples_h
= generate
.Header('%s/punycode_examples.h' % sys
.argv
[2])
50 examples_c
= generate
.Header('%s/punycode_examples.c' % sys
.argv
[2])
61 raise Exception("EOF in backslash escape")
62 l2
= re
.sub('^ *', '', l2
)
65 if re
.match('7\.2', l
):
68 m
= re
.search('^ *\([A-Z]\) *(.*)$', l
);
73 m
= re
.search('^ *([uU]+.*) *$', l
)
75 codes
.extend(string
.split(m
.group(1), ' '))
77 m
= re
.search('^ *Punycode: (.*) *$', l
)
79 cases
.append([codes
, m
.group(1), desc
])
81 if re
.match('^7\.1', l
):
87 examples_h
.file.write(
89 #include <krb5-types.h>
93 struct punycode_example {
95 uint32_t val[MAX_LENGTH];
97 const char *description;
100 extern const struct punycode_example punycode_examples[];
102 extern const size_t punycode_examples_size;
105 examples_c
.file.write(
108 #include "punycode_examples.h"
110 const struct punycode_example punycode_examples[] = {
115 examples_c
.file.write(
116 " {%u, {%s}, \"%s\", \"%s\"},\n" %
118 string
.join([re
.sub('[uU]\+', '0x', x
) for x
in cp
], ', '),
122 examples_c
.file.write(
127 examples_c
.file.write(
128 "const size_t punycode_examples_size = %u;\n\n" % len(cases
))