45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors)
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import argparse
|
|
import gzip
|
|
import minify_html
|
|
import jsmin
|
|
import mimetypes
|
|
import pathlib
|
|
|
|
parser = argparse.ArgumentParser(description="Generate displayio resources.")
|
|
parser.add_argument("--output_c_file", type=argparse.FileType("w"), required=True)
|
|
parser.add_argument("files", metavar="FILE", type=argparse.FileType("rb"), nargs="+")
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
c_file = args.output_c_file
|
|
|
|
c_file.write(f"// Autogenerated by tools/gen_web_workflow_static.py\n")
|
|
c_file.write(f"#include <stdint.h>\n\n")
|
|
|
|
for f in args.files:
|
|
path = pathlib.Path(f.name)
|
|
variable = path.name.replace(".", "_")
|
|
uncompressed = f.read()
|
|
ulen = len(uncompressed)
|
|
if f.name.endswith(".html"):
|
|
uncompressed = minify_html.minify(uncompressed.decode("utf-8")).encode("utf-8")
|
|
elif f.name.endswith(".js"):
|
|
uncompressed = jsmin.jsmin(uncompressed.decode("utf-8"), quote_chars="'\"`").encode(
|
|
"utf-8"
|
|
)
|
|
compressed = gzip.compress(uncompressed)
|
|
clen = len(compressed)
|
|
compressed = ", ".join([hex(x) for x in compressed])
|
|
mime = mimetypes.guess_type(f.name)[0]
|
|
|
|
c_file.write(f"// {f.name}\n")
|
|
c_file.write(f"// Original length: {ulen} Compressed length: {clen}\n")
|
|
c_file.write(f"const uint32_t {variable}_length = {clen};\n")
|
|
c_file.write(f'const char* {variable}_content_type = "{mime}";\n')
|
|
c_file.write(f"const uint8_t {variable}[{clen}] = {{{compressed}}};\n\n")
|