aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/subset_fonts.py
blob: 2c8da9fce36d03cad8a01cf1ffe1d019f03a85d9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python
# Copyright (c) 2023 fontsource
# Copyright (c) 2024 Kristóf Marussy
#
# SPDX-License-Identifier: MIT
#
# Unicode ranges in this file have been copied from
# https://github.com/fontsource/font-files/blob/8f1eca463641648fc45ec8f3c7b7b195a8e6da9d/fonts/variable/recursive/full.css

from fontTools import subset
from jinja2 import Environment, FileSystemLoader
from tqdm import tqdm


UNICODES_MAP = {
    "recursive-latin.woff2": "U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD",
    "recursive-latin-ext.woff2": "U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF",
    "recursive-cyrillic.woff2": "U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F",
    "recursive-vietnamese.woff2": "U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB",
}


def main():
    for name, unicodes in tqdm(UNICODES_MAP.items()):
        subset.main(
            [
                "src/fonts/Recursive_VF_1.085.ttf",
                f"--unicodes={unicodes}",
                f"--output-file=src/fonts/{name}",
                "--flavor=woff2",
                "--layout-features+=ss02,ss05,ss10,ss12,titl,liga",
                "--desubroutinize",
                "--obfuscate-names",
            ]
        )

    file_loader = FileSystemLoader("scripts")
    env = Environment(loader=file_loader)
    template = env.get_template("fonts.css.jinja2")
    output = template.render(unicodes_map=UNICODES_MAP)
    with open("src/css/fonts.css", "w") as f:
        f.write(output)


if __name__ == "__main__":
    main()