| #!/usr/bin/env python | |
| """ | |
| For each argument on the command line, look for it in the set of all Unicode | |
| names. Arguments are treated as case-insensitive regular expressions, e.g.: | |
| % find-uname 'small letter a$' 'horizontal line' | |
| *** small letter a$ matches *** | |
| LATIN SMALL LETTER A (97) | |
| COMBINING LATIN SMALL LETTER A (867) | |
| CYRILLIC SMALL LETTER A (1072) | |
| PARENTHESIZED LATIN SMALL LETTER A (9372) | |
| CIRCLED LATIN SMALL LETTER A (9424) | |
| FULLWIDTH LATIN SMALL LETTER A (65345) | |
| *** horizontal line matches *** | |
| HORIZONTAL LINE EXTENSION (9135) | |
| """ | |
| import unicodedata | |
| import sys | |
| import re | |
| def main(args): | |
| unicode_names = [] | |
| for ix in range(sys.maxunicode+1): | |
| try: | |
| unicode_names.append((ix, unicodedata.name(unichr(ix)))) | |
| except ValueError: # no name for the character | |
| pass | |
| for arg in args: | |
| pat = re.compile(arg, re.I) | |
| matches = [(y,x) for (x,y) in unicode_names | |
| if pat.search(y) is not None] | |
| if matches: | |
| print "***", arg, "matches", "***" | |
| for match in matches: | |
| print "%s (%d)" % match | |
| if __name__ == "__main__": | |
| main(sys.argv[1:]) |