summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/fonts/xits/fontcoverage.py
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/fonts/xits/fontcoverage.py')
-rwxr-xr-xMaster/texmf-dist/doc/fonts/xits/fontcoverage.py58
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()