1#!/usr/bin/env python3 2 3""" 4For each argument on the command line, look for it in the set of all Unicode 5names. Arguments are treated as case-insensitive regular expressions, e.g.: 6 7 % find-uname 'small letter a$' 'horizontal line' 8 *** small letter a$ matches *** 9 LATIN SMALL LETTER A (97) 10 COMBINING LATIN SMALL LETTER A (867) 11 CYRILLIC SMALL LETTER A (1072) 12 PARENTHESIZED LATIN SMALL LETTER A (9372) 13 CIRCLED LATIN SMALL LETTER A (9424) 14 FULLWIDTH LATIN SMALL LETTER A (65345) 15 *** horizontal line matches *** 16 HORIZONTAL LINE EXTENSION (9135) 17""" 18 19import unicodedata 20import sys 21import re 22 23def main(args): 24 unicode_names = [] 25 for ix in range(sys.maxunicode+1): 26 try: 27 unicode_names.append((ix, unicodedata.name(chr(ix)))) 28 except ValueError: # no name for the character 29 pass 30 for arg in args: 31 pat = re.compile(arg, re.I) 32 matches = [(y,x) for (x,y) in unicode_names 33 if pat.search(y) is not None] 34 if matches: 35 print("***", arg, "matches", "***") 36 for match in matches: 37 print("%s (%d)" % match) 38 39if __name__ == "__main__": 40 main(sys.argv[1:]) 41