diff options
Diffstat (limited to 'Master/texmf-dist/doc/fonts/xits/fontcoverage.py')
-rwxr-xr-x | Master/texmf-dist/doc/fonts/xits/fontcoverage.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/fonts/xits/fontcoverage.py b/Master/texmf-dist/doc/fonts/xits/fontcoverage.py new file mode 100755 index 00000000000..c17fde46422 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/xits/fontcoverage.py @@ -0,0 +1,58 @@ +import sys +import unicodedata +from fontTools.ttLib import TTFont + +# Unicode blocks file from: http://www.unicode.org/Public/UNIDATA/Blocks.txt + +blocksfile = open(sys.argv[1], "r") +blocks = [ ] +for line in blocksfile.readlines(): + if not (line.startswith("#") or line == "\n"): + start, end = line.split("; ")[0].split("..") + name = line.split("; ")[1].strip() + blocks.append((name, (start, end))) +blocksfile.close() + +logfile = open(sys.argv[2], "r") +log = logfile.read() +logfile.close() + +for fontfile in sys.argv[3:-1]: + font = TTFont(fontfile) + cmap = font['cmap'].getcmap(3, 10) + if cmap is None: + cmap = font['cmap'].getcmap(3, 1) + found = [ ] + + for block in blocks: + t = f = 0 + name = block[0] + start, end = int(block[1][0], 16), int(block[1][1], 16) + i = start + while (i <= end): + category = unicodedata.category(chr(i)) + if category != "Cc" and category!= "Cn": + if i in cmap.cmap: + f += 1 + t += 1 + i += 1 + if f: + found.append((name, (t,f))) + + fullname = str(font['name'].getName(4, 1, 0).string, encoding='ascii') + coverage = "" + coverage += "* %s:\n" %fullname + for f in found: + for b in blocks: + if b[0] == f[0]: + name = f[0] + start, end = b[1] + total, present = f[1] + percent = present/total*100 + coverage += " %s (U+%s-%s): %s/%s (%.2f%%)\n" %(name, start, end, present, total, percent) + + log = log.replace("%%{%s}" %fullname, coverage) + +outfile = open(sys.argv[-1], "w") +outfile.write(log) +outfile.close() |