build.py
Python script, ASCII text executable
1
import subprocess
2
import os
3
import tempfile
4
import shutil
5
from pathlib import Path
6
from tqdm import tqdm
7
8
source_dir = Path("drawings")
9
10
files = list((source_dir / "apps").iterdir()) + list((source_dir / "categories").iterdir()) + list((source_dir / "places").iterdir()) + list((source_dir / "status").iterdir())
11
sizes = (64, 48, 32, 24, 16)
12
symbolic_sizes = (24, 16)
13
14
build_dir = Path("build")
15
16
if build_dir.exists():
17
shutil.rmtree(build_dir)
18
19
build_dir.mkdir()
20
21
# Copy the theme file
22
shutil.copy(Path("index.theme"), build_dir)
23
24
for size in sizes:
25
(build_dir / f"{size}x{size}").mkdir()
26
27
for file in tqdm(files, colour="green"):
28
if file.name.endswith(".svg"):
29
with tempfile.TemporaryDirectory() as scratch:
30
subprocess.run(["inkscape", "--export-page=all", "-Tl", "-o", str(Path(scratch) / "page.svg"), str(file)], stderr=subprocess.DEVNULL)
31
# Temporary names will be used; move them
32
icon_name = file.name
33
category_name = file.parent.name
34
aliases = []
35
if (file.parent / (file.name.removesuffix(".svg") + ".aliases")).exists():
36
with open(file.parent / (file.name.removesuffix(".svg") + ".aliases")) as f:
37
aliases = f.read().splitlines()
38
if not icon_name.endswith("-symbolic.svg"):
39
for i, size in enumerate(sizes, 1):
40
(build_dir / f"{size}x{size}" / category_name).mkdir(parents=True, exist_ok=True)
41
shutil.move(Path(scratch) / f"page_p{i}.svg", build_dir / f"{size}x{size}" / category_name / icon_name)
42
for alias in aliases:
43
os.symlink(icon_name, build_dir / f"{size}x{size}" / category_name / (alias + ".svg"))
44
else:
45
for i, size in enumerate(symbolic_sizes, 1):
46
(build_dir / f"symbolic_{size}x{size}" / category_name).mkdir(parents=True, exist_ok=True)
47
shutil.move(Path(scratch) / f"page_p{i}.svg", build_dir / f"symbolic_{size}x{size}" / category_name / icon_name)
48
for alias in aliases:
49
os.symlink(icon_name, build_dir / f"symbolic_{size}x{size}" / category_name / (alias + ".svg"))
50
51