| | |
| |
|
| | """ |
| | 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(chr(ix)))) |
| | except ValueError: |
| | 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:]) |
| |
|