diff mupdf-source/scripts/glyphdump.py @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/scripts/glyphdump.py	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,111 @@
+#!/usr/bin/env python3
+
+import sys
+
+agl = []
+aglseen = {}
+single_from_name = []
+multi_from_name = []
+name_from_single = {}
+code_from_multi = {}
+
+print("/* This file was generated by scripts/glyphdump.py. Do not edit. */")
+print()
+
+def readlist(filename):
+	f = open(filename, "r")
+	for line in f.readlines():
+		if line[0] == '#':
+			continue
+		line = line[:-1]
+		name, alts = line.split(';')
+		for list in alts.split(','):
+			list = [int(x, 16) for x in list.split(' ')]
+			okay = True
+			for ucs in list:
+				if ucs > 0xffff:
+					okay = False
+				#if ucs >= 0xe000 and ucs <= 0xf8ff:
+				#	okay = False
+			if okay and name not in aglseen:
+				agl.append((name, list))
+				aglseen[name] = True
+
+readlist("scripts/glyphlist.txt")
+readlist("scripts/texglyphlist.txt")
+
+for name, ucslist in agl:
+	num = len(ucslist)
+	if num == 1:
+		ucs = ucslist[0]
+		single_from_name.append((name, ucs))
+		if ucs not in name_from_single:
+			name_from_single[ucs] = []
+		name_from_single[ucs].append(name)
+	else:
+		multi_from_name.append((name, ucslist))
+
+def dumplist(list):
+	for item in list:
+		sys.stdout.write(item)
+
+single_from_name.sort()
+singlenames = []
+singlecodes = []
+for name, ucs in single_from_name:
+	singlenames.append("\"%s\",\n" % name)
+	singlecodes.append("0x%04x,\n" % ucs)
+
+multi_from_name.sort()
+multinames = []
+multioffsets = []
+multicodes = []
+for name, ucslist in multi_from_name:
+	multinames.append("\"%s\",\n" % name)
+	multioffsets.append("%d,\n" % len(multicodes))
+	multicodes.append("%d," % len(ucslist))
+	for ucs in ucslist:
+		multicodes.append(" 0x%04x," % ucs)
+	multicodes.append("\n");
+
+keys = list(name_from_single.keys())
+keys.sort()
+dupoffsets = []
+dupnames = []
+for ucs in keys:
+	list = name_from_single[ucs]
+	if len(list) > 1:
+		ofs = len(dupnames)
+		dupoffsets.append("0x%04x, %d,\n" % (ucs, ofs))
+		for name in list:
+			dupnames.append("\"%s\", " % name)
+		dupnames.append("0,\n")
+
+print("static const char *single_name_list[] = {")
+dumplist(singlenames)
+print("};")
+print()
+print("static const unsigned short single_code_list[] = {")
+dumplist(singlecodes)
+print("};")
+print()
+if False:
+	print("static const char *multi_name_list[] = {")
+	dumplist(multinames)
+	print("};")
+	print()
+	print("static const unsigned short multi_offset_list[] = {")
+	dumplist(multioffsets)
+	print("};")
+	print()
+	print("static const unsigned short multi_code_list[] = {")
+	dumplist(multicodes)
+	print("};")
+	print()
+print("static const unsigned short agl_dup_offsets[] = {")
+dumplist(dupoffsets)
+print("};")
+print()
+print("static const char *agl_dup_names[] = {")
+dumplist(dupnames)
+print("};")