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/bootstrap-icons.css").read(),
14 skip_comments=True,
15)
16
17final_rules = rules[:4]
18
19font_rule = rules[1]
20
21for block in font_rule.content:
22 if isinstance(block, tinycss2.ast.FunctionBlock):
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 else:
39 char = hex(ord(rule.content[4].value))[2:]
40 rule.content[4].representation = f'"\\{char}"'
41 final_rules.append(rule)
42 final_rules.append(rules[i + 1])
43
44
45out = open(f"{os.environ['ROOT']}/src/static/icons/bsi.min.css", "w")
46out.write(tinycss2.serialize(final_rules))
47out.close()