/services/unicode.cgi
#!/usr/bin/env python
import cgitb
cgitb.enable()
import re, cgi
form = cgi.FieldStorage()
form.__call__ = lambda s: form[s].value
form.exists = form.has_key
def u(pattern):
try: r_pattern = re.compile(r'(?i)' + pattern)
except:
print '%r is not a valid regexp.' % pattern
return
f = open('../odds/UnicodeData.txt')
for line in f:
if r_pattern.search(line):
data = line.split(';')
if data[0] != 'BOOP':
uc = int(data[0], 16)
else: uc = 'BOOP'
if 0 < uc < 0xFFFF:
codetype = data[3]
if codetype == '0':
encoded = ' (%s)' % unichr(uc).encode('utf-8')
else: encoded = ' (\xe2\x97\x8c%s)' % unichr(uc).encode('utf-8')
elif uc == 'BOOP':
encoded = u' (\u00F3,\u00F2)'.encode('utf-8')
else: encoded = ''
if (data[1] == '<control>') and (len(data) > 10):
name = '<control> - ' + data[10]
else: name = data[1]
print data[0] + ': ' + name + encoded + '<br />'
f.close()
def name(pattern):
print 'Content-Type: text/html'
print
u(pattern)
def char(bytes):
print 'Content-Type: text/html'
print
for character in bytes.decode('utf-8'):
pattern = r'^%04X\b' % ord(character)
u(pattern)
def homepage():
print 'Content-Type: text/html'
print
print '<form action="unicode" method="GET">'
print '<p>Name: <input type="text" name="name" size="35" />'
print ' <input type="submit" /></p>'
print '</form>'
print
print '<form action="unicode" method="GET">'
print '<p>Char: <input type="text" name="char" size="35" />'
print ' <input type="submit" /></p>'
print '</form>'
def main():
if form.exists('name'):
name(form('name'))
elif form.exists('char'):
char(form('char'))
else: homepage()
if __name__ == '__main__':
main()