Files
OneCAD/assets/icons/ui/design/tools/author/new_icon.py
T

43 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""Create a new, unaccepted SVG from a canonical base; never overwrite artwork."""
import argparse
from pathlib import Path
import re
import sys
import tomllib
from lib import Icon
from bases import grey_cube, grey_slab
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('name', help='lower_snake_case app icon id')
parser.add_argument('--base', choices=('cube', 'slab', 'empty'), default='cube')
parser.add_argument('--family', choices=('model', 'flat', 'workspace'), default='model')
args = parser.parse_args()
design = Path(__file__).resolve().parents[2]
if not re.fullmatch('[a-z][a-z0-9_]*', args.name): parser.error('use a lower_snake_case icon id')
aliases = tomllib.loads((design / 'aliases.toml').read_text()).get('alias', {})
if args.name in aliases or list((design / 'svg').glob('*/' + args.name + '.svg')):
parser.error('id already exists; edit its master after checking review.json')
if args.family != 'model' and args.base != 'empty': parser.error('cube/slab bases belong to the model family')
icon = Icon(args.name)
if args.base == 'cube': grey_cube(icon)
if args.base == 'slab': grey_slab(icon)
icon.write(args.family)
root = design.parents[3]
path = f'assets/icons/ui/design/svg/{args.family}/{args.name}.svg'
attribution = root / 'ATTRIBUTION.md'
row = f'| {path} | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |\n'
text = attribution.read_text()
if '| ' + path + ' |' not in text:
anchor = '| assets/icons/ui/design/svg/model/placeholder.svg'
if anchor in text: text = text.replace(anchor, row + anchor, 1)
else: text += '\n' + row
attribution.write_text(text)
print(path)
print('Starter only: finish the operation cue using STYLE_GUIDE.md; review status is Open.')
if __name__ == '__main__': main()