/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()