1#!/usr/bin/env python
2import json
3import time
4import os
5import tinycss2
6
7BASE_PATH = os.path.dirname(__file__)
8CLASSES = json.load(open(f"{BASE_PATH}/src/classes.json"))
9
10cur_time = int(time.time())
11
12rules = tinycss2.parse_stylesheet(
13 open(f"{BASE_PATH}/src/simple-icons.css").read(),
14 skip_comments=True,
15)
16
17final_rules = rules[:3]
18font_rule = rules[0]
19
20for block in font_rule.content:
21 if isinstance(block, tinycss2.ast.FunctionBlock):
22 if "static" in block.arguments[0].value:
23 arg = block.arguments[0]
24 arg.value += f"?v={cur_time}"
25 arg.representation = arg.representation.replace(
26 ".min.woff2", f".min.woff2?v={cur_time}"
27 )
28 block.arguments[0] = arg
29
30rules = rules[4:]
31
32for i, rule in enumerate(rules):
33 if isinstance(rule, tinycss2.ast.WhitespaceToken):
34 continue
35
36 if rule.prelude[1].value not in CLASSES:
37 del rules[i]
38 elif rule.prelude[3].value == "si--color":
39 del rules[i]
40 else:
41 char = hex(ord(rule.content[4].value))[2:]
42 rule.content[4].representation = f'"\\{char}"'
43 final_rules.append(rule)
44
45
46out = open(f"{os.environ['ROOT']}/src/static/icons/si.min.css", "w")
47out.write(tinycss2.serialize(final_rules))
48out.close()
49