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