Files

56 lines
2.4 KiB
Python
Raw Permalink Normal View History

"""Archive the installed, unmodified OFL font with its embedded legal metadata."""
import hashlib
import json
import shutil
import struct
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
SOURCE = Path('C:/Windows/Fonts/NotoSansSC-VF.ttf')
LICENSE = Path('D:/vibeCoding/blender/Blender 4.5/license/spdx/OFL-1.1.txt')
def main():
data = SOURCE.read_bytes()
tables = {}
for i in range(struct.unpack_from('>H', data, 4)[0]):
tag, _, offset, _ = struct.unpack_from('>4sIII', data, 12 + 16 * i)
tables[tag] = offset
start = tables[b'name']
_, count, strings = struct.unpack_from('>HHH', data, start)
names = {}
for i in range(count):
platform, _, _, name, size, offset = struct.unpack_from('>6H', data, start + 6 + 12 * i)
if platform == 3:
names[str(name)] = data[start + strings + offset:start + strings + offset + size].decode('utf-16-be')
assert 'SIL Open Font License, Version 1.1' in names['13']
archive = ROOT / 'SourceAssets/ThirdParty/Adobe/NotoSansSC'
imported = ROOT / 'Assets/ThirdParty/Adobe/NotoSansSC'
legal = ROOT / 'Docs/Production/Licenses/Adobe/NotoSansSC'
for target in (archive, imported, legal):
target.mkdir(parents=True, exist_ok=True)
for target in (archive, imported):
shutil.copyfile(SOURCE, target / SOURCE.name)
copyright_text = names['0']
license_text = copyright_text + '\n\n' + LICENSE.read_text(encoding='utf-8')
for target in (archive, imported, legal):
(target / 'OFL.txt').write_text(license_text, encoding='utf-8')
provenance = {
'archived': '2026-11-12',
'source': str(SOURCE),
'canonicalProject': 'https://github.com/notofonts/noto-cjk',
'canonicalLicense': 'https://openfontlicense.org/open-font-license-official-text/',
'retrieval': 'Locally installed unmodified font. Public HTTPS retrieval failed; license identified in embedded name records 13/14.',
'sha256': hashlib.sha256(data).hexdigest(),
'bytes': len(data),
'embeddedNames': names,
'fullLicenseSource': str(LICENSE),
'modifications': 'None to source font; Unity generates a project font atlas.'
}
(legal / 'Provenance.json').write_text(json.dumps(provenance, ensure_ascii=False, indent=2), encoding='utf-8')
print(json.dumps({k: provenance[k] for k in ('sha256', 'bytes')}, indent=2))
if __name__ == '__main__':
main()