2010-03-11 18:53:45 -04:00
|
|
|
#!/usr/bin/env python3
|
2003-01-01 16:26:47 -04:00
|
|
|
|
|
|
|
"""
|
|
|
|
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):
|
2009-10-10 19:05:26 -03:00
|
|
|
unicode_names = []
|
2003-01-01 16:26:47 -04:00
|
|
|
for ix in range(sys.maxunicode+1):
|
|
|
|
try:
|
2009-10-10 19:05:26 -03:00
|
|
|
unicode_names.append((ix, unicodedata.name(chr(ix))))
|
2003-01-01 16:26:47 -04:00
|
|
|
except ValueError: # no name for the character
|
|
|
|
pass
|
|
|
|
for arg in args:
|
|
|
|
pat = re.compile(arg, re.I)
|
2009-10-10 19:05:26 -03:00
|
|
|
matches = [(y,x) for (x,y) in unicode_names
|
|
|
|
if pat.search(y) is not None]
|
2003-01-01 16:26:47 -04:00
|
|
|
if matches:
|
2007-07-17 17:59:35 -03:00
|
|
|
print("***", arg, "matches", "***")
|
2009-10-10 19:05:26 -03:00
|
|
|
for match in matches:
|
|
|
|
print("%s (%d)" % match)
|
2003-01-01 16:26:47 -04:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main(sys.argv[1:])
|