mirror of
https://github.com/jkriege2/JKQtPlotter.git
synced 2024-11-16 10:35:49 +08:00
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
|
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()
|