from github import Github, Repository
from gftools.utils import download_file
from zipfile import ZipFile
from pathlib import Path
import tempfile
import os
import json
from io import BytesIO
from pybars import Compiler, strlist
import humanize
import re
import subprocess
EXCLUDE_LIST = ["Arimo", "Cousine", "Tinos"]
results = json.load(open("docs/noto.json"))
versions = json.load(open("docs/versions.json"))
def _basename(this, item):
return strlist([os.path.basename(item)])
def _denoto(this, item):
return strlist([item.replace("Noto ", "")])
def _sizeof(this, item):
return strlist([humanize.naturalsize(os.path.getsize(item))])
def _gt1(this, options, context):
if hasattr(context, "__call__"):
context = context(this)
if context > 1:
return options["fn"](this)
else:
return options["inverse"](this)
def _ifslim(this, options, context):
if hasattr(context, "__call__"):
context = context(this)
if "slim-variable-ttf" in context:
return options["fn"](this)
else:
return options["inverse"](this)
helpers = {
"basename": _basename,
"gt1": _gt1,
"sizeof": _sizeof,
"ifslim": _ifslim,
"denoto": _denoto,
}
def icon_for_platform(platform):
if "Android" in platform:
return f' android '
if "iOS" in platform:
return f' phone_iphone '
if "macOS" in platform:
return f' laptop_mac '
if "Google Fonts" in platform:
return f'
'
if "Fedora" in platform:
return f'
'
return platform
compiler = Compiler()
template = open("scripts/template.html", "r").read()
template = compiler.compile(template)
for result in results.values():
result["has_releases"] = False
for family_name, family in result.get("families", []).items():
if family.get("latest_release"):
result["has_releases"] = True
latest_version = family["latest_release"]["version"][1:]
if family_name in versions:
family["third_party_versions"] = {
k: {
"version": versions[family_name][k],
"up_to_date": versions[family_name][k] == latest_version,
"icon": icon_for_platform(k)
}
for k in sorted(versions[family_name].keys())
}
result["issue_count"] = len(result["issues"])
result["families_count"] = len(result["families"])
for excluded in EXCLUDE_LIST:
if excluded in results:
del results[excluded]
output = template({"results": results}, helpers=helpers)
with open("docs/index.html", "w") as fh:
fh.write(output)
bug_template = open("scripts/bugreporter.html", "r").read()
bug_template = compiler.compile(bug_template)
output = bug_template({"results": results})
with open("docs/reporter.html", "w") as fh:
fh.write(output)
json.dump(
results, open("debug.json", "w"), indent=True, sort_keys=True
)