57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
![]() |
#!/usr/bin/env python
|
||
|
|
||
|
import io
|
||
|
import sys
|
||
|
import json
|
||
|
import shutil
|
||
|
import typing
|
||
|
import os.path
|
||
|
import argparse
|
||
|
import subprocess
|
||
|
|
||
|
def gen_lvconv_line(lv_img_conv: str, dest: str, color_format: str, output_format: str, binary_format: str, sources: str):
|
||
|
args = [lv_img_conv, sources, '--force', '--output-file', dest, '--color-format', color_format, '--output-format', output_format, '--binary-format', binary_format]
|
||
|
|
||
|
return args
|
||
|
|
||
|
def main():
|
||
|
ap = argparse.ArgumentParser(description='auto generate LVGL font files from fonts')
|
||
|
ap.add_argument('config', type=str, help='config file to use')
|
||
|
ap.add_argument('-i', '--image', type=str, action='append', help='Choose specific images to generate (default: all)', default=[])
|
||
|
ap.add_argument('--lv-img-conv', type=str, help='Path to "lv_img_conf" executable', default="lv_img_conv")
|
||
|
args = ap.parse_args()
|
||
|
|
||
|
if not shutil.which(args.lv_img_conv):
|
||
|
sys.exit(f"Missing lv_img_conv. Make sure it's findable (in PATH) or specify it manually")
|
||
|
if not os.path.exists(args.config):
|
||
|
sys.exit(f'Error: the config file {args.config} does not exist.')
|
||
|
if not os.access(args.config, os.R_OK):
|
||
|
sys.exit(f'Error: the config file {args.config} is not accessible (permissions?).')
|
||
|
with open(args.config, 'r') as fd:
|
||
|
data = json.load(fd)
|
||
|
|
||
|
images_to_run = set(data.keys())
|
||
|
|
||
|
if args.image:
|
||
|
enabled_images = set()
|
||
|
for image in args.image:
|
||
|
enabled_images.add(image[:-2] if image.endswith('.c') else image)
|
||
|
d = enabled_images.difference(images_to_run)
|
||
|
if d:
|
||
|
print(f'Warning: requested image{"s" if len(d)>1 else ""} missing: {" ".join(d)}')
|
||
|
images_to_run = images_to_run.intersection(enabled_images)
|
||
|
|
||
|
for name in images_to_run:
|
||
|
image = data[name]
|
||
|
if not os.path.exists(image['sources']):
|
||
|
image['sources'] = os.path.join(os.path.dirname(sys.argv[0]), image['sources'])
|
||
|
extension = 'bin'
|
||
|
image.pop('target_path')
|
||
|
line = gen_lvconv_line(args.lv_img_conv, f'{name}.{extension}', **image)
|
||
|
subprocess.check_call(line)
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|