<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=The_Principia_Machina%2FTPC-PY%2Fgen_biblio_unicode_table.py</id>
	<title>The Principia Machina/TPC-PY/gen biblio unicode table.py - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=The_Principia_Machina%2FTPC-PY%2Fgen_biblio_unicode_table.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_biblio_unicode_table.py&amp;action=history"/>
	<updated>2026-10-21T07:32:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_biblio_unicode_table.py&amp;diff=4137&amp;oldid=prev</id>
		<title>BFP Rauch: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_biblio_unicode_table.py&amp;diff=4137&amp;oldid=prev"/>
		<updated>2026-09-28T04:32:52Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:32, 28 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_biblio_unicode_table.py&amp;diff=4136&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source gen_biblio_unicode_table.py (0.1.0), SHA-256 cfd5ee27a1a974d6; conformed TPS 0.3.0; PROPOSED, not declared (CO-8)</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_biblio_unicode_table.py&amp;diff=4136&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source gen_biblio_unicode_table.py (0.1.0), SHA-256 cfd5ee27a1a974d6; conformed TPS 0.3.0; PROPOSED, not declared (CO-8)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;quot;&amp;quot;&amp;quot;gen_biblio_unicode_table 0.1.0: the key form&amp;#039;s character classes (RD-9),&lt;br /&gt;
generated from Python&amp;#039;s unicodedata at the pinned Unicode version and&lt;br /&gt;
written into both residences of tpc_biblio between their BEGIN and END&lt;br /&gt;
UNICODE TABLE markers, after the pattern of the falcon module&amp;#039;s&lt;br /&gt;
gen_unicode_table.py.&lt;br /&gt;
&lt;br /&gt;
Classes: M Mn (nonspacing mark), P every punctuation category (Pc Pd Ps&lt;br /&gt;
Pe Pi Pf Po), S every symbol category (Sm Sc Sk So), F Cf, C Cc, Z Zs Zl&lt;br /&gt;
Zp; every other code point has none. The table is a string of ranges&lt;br /&gt;
&amp;quot;START-END&amp;quot; or &amp;quot;CP&amp;quot; in upper-case hexadecimal, each followed by its class&lt;br /&gt;
letter, joined by &amp;quot;;&amp;quot;. Both residences check its SHA-256 when they first&lt;br /&gt;
read it, so the classification is identical whatever unicodedata or ICU&lt;br /&gt;
version the interpreter carries. Run with the Python whose unicodedata&lt;br /&gt;
carries the pinned version (Python 3.13: Unicode 15.1.0).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import hashlib&lt;br /&gt;
import os&lt;br /&gt;
import unicodedata&lt;br /&gt;
&lt;br /&gt;
PINNED = &amp;quot;15.1.0&amp;quot;&lt;br /&gt;
H = os.path.dirname(os.path.abspath(__file__))&lt;br /&gt;
assert unicodedata.unidata_version == PINNED, unicodedata.unidata_version&lt;br /&gt;
MAP = {&amp;quot;Mn&amp;quot;: &amp;quot;M&amp;quot;, &amp;quot;Cf&amp;quot;: &amp;quot;F&amp;quot;, &amp;quot;Cc&amp;quot;: &amp;quot;C&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cls(cp):&lt;br /&gt;
    k = unicodedata.category(chr(cp))&lt;br /&gt;
    if k[0] in &amp;quot;PSZ&amp;quot;:&lt;br /&gt;
        return k[0]&lt;br /&gt;
    return MAP.get(k, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
runs = []&lt;br /&gt;
prev = &amp;quot;&amp;quot;&lt;br /&gt;
start = 0&lt;br /&gt;
for cp in range(0x110000):&lt;br /&gt;
    c = cls(cp)&lt;br /&gt;
    if c != prev:&lt;br /&gt;
        if prev:&lt;br /&gt;
            runs.append((start, cp - 1, prev))&lt;br /&gt;
        prev, start = c, cp&lt;br /&gt;
if prev:&lt;br /&gt;
    runs.append((start, 0x10FFFF, prev))&lt;br /&gt;
table = &amp;quot;;&amp;quot;.join((&amp;quot;%X-%X%s&amp;quot; % r) if r[0] != r[1] else (&amp;quot;%X%s&amp;quot; % (r[0], r[2]))&lt;br /&gt;
                 for r in runs)&lt;br /&gt;
digest = hashlib.sha256(table.encode(&amp;quot;ascii&amp;quot;)).hexdigest()&lt;br /&gt;
chunks = [table[i:i + 68] for i in range(0, len(table), 68)]&lt;br /&gt;
&lt;br /&gt;
py = [&amp;quot;# BEGIN UNICODE TABLE (gen_biblio_unicode_table.py; do not edit)&amp;quot;,&lt;br /&gt;
      &amp;#039;UNICODE_VERSION = &amp;quot;%s&amp;quot;&amp;#039; % PINNED,&lt;br /&gt;
      &amp;#039;UNICODE_TABLE_SHA256 = (\n    &amp;quot;%s&amp;quot;)&amp;#039; % digest,&lt;br /&gt;
      &amp;quot;_UTABLE = (&amp;quot;] + [&amp;#039;    &amp;quot;%s&amp;quot;&amp;#039; % c for c in chunks] + [&amp;quot;)&amp;quot;,&lt;br /&gt;
                                                             &amp;quot;# END UNICODE TABLE&amp;quot;]&lt;br /&gt;
php = [&amp;quot;// BEGIN UNICODE TABLE (gen_biblio_unicode_table.py; do not edit)&amp;quot;,&lt;br /&gt;
       &amp;quot;const TPC_BIBLIO_UNICODE_VERSION = &amp;#039;%s&amp;#039;;&amp;quot; % PINNED,&lt;br /&gt;
       &amp;quot;const TPC_BIBLIO_UNICODE_TABLE_SHA256 = &amp;#039;%s&amp;#039;;&amp;quot; % digest,&lt;br /&gt;
       &amp;quot;const TPC_BIBLIO_UTABLE = &amp;#039;&amp;#039;&amp;quot;] + [&amp;quot;    . &amp;#039;%s&amp;#039;&amp;quot; % c for c in chunks] + \&lt;br /&gt;
      [&amp;quot;    ;&amp;quot;, &amp;quot;// END UNICODE TABLE&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def put(path, begin, end, lines):&lt;br /&gt;
    s = open(path, encoding=&amp;quot;utf-8&amp;quot;, newline=&amp;quot;&amp;quot;).read()&lt;br /&gt;
    a = s.index(begin)&lt;br /&gt;
    b = s.index(end) + len(end)&lt;br /&gt;
    open(path, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;, newline=&amp;quot;&amp;quot;).write(&lt;br /&gt;
        s[:a] + &amp;quot;\n&amp;quot;.join(lines) + s[b:])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
put(os.path.join(H, &amp;quot;tpc_biblio.py&amp;quot;), &amp;quot;# BEGIN UNICODE TABLE&amp;quot;,&lt;br /&gt;
    &amp;quot;# END UNICODE TABLE&amp;quot;, py)&lt;br /&gt;
put(os.path.join(H, &amp;quot;..&amp;quot;, &amp;quot;tpc_php&amp;quot;, &amp;quot;tpc_biblio.php&amp;quot;),&lt;br /&gt;
    &amp;quot;// BEGIN UNICODE TABLE&amp;quot;, &amp;quot;// END UNICODE TABLE&amp;quot;, php)&lt;br /&gt;
print(&amp;quot;Unicode %s: %d ranges, %d characters, SHA-256 %s&amp;quot;&lt;br /&gt;
      % (PINNED, len(runs), len(table), digest))&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>