ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

主にubuntu24.04とjulia言語でJuiseeフォントをビルドする

以前Juiseeフォントの設定をカスタマイズしてビルドするの記事を書いたりしていたが,先月バージョン0.1.0が出たらしい。

最近うっかりubuntuを24.04にバージョンアップしてしまったので, Juiseeフォントのビルドに必要なfontforgeのバージョンである20230101がインストール可能となった。

そこで,Julia言語を使って気軽にビルドできるようなものを作ってみた。

ツールのソースリスト

"""
    setup_juisee_build_env(tarball="juisee-0.1.0.tar.gz",
                           env_path="env_juisee";
                           python_os="/user/bin/python3")

Juiseeフォントをビルドする環境をセットアップする

* `tarball`: juiseeのソースアーカイブファイル
* `env_path`: pythonの仮想環境をどこに作成するか。
              展開したフォルダの中からの相対パスを指定
* `python_os`: OSのpythonバイナリを指定

# Examples
```julia-repl
julia> cd(joinpath(ENV["HOME"], "Downloads"))

julia> setup_juisee_build_dev("juisee-0.1.0.tar.gz")
```

"""
function setup_juisee_build_env(
    tarball="juisee-0.1.0.tar.gz", env_path="env_juisee";
    python_os="/usr/bin/python3")
    _oldcd = pwd()
    run(`tar xzf $tarball`)
    build_dir = chopsuffix(tarball, raw".tar.gz")
    cd(build_dir)
    run(`$(python_os) -m venv $(env_path)`)
    run(`$(env_path)/bin/pip install -r requirements.txt`)
    run(`$(env_path)/bin/pip install setuptools`)
    cd(_oldcd)
end

"""
    build_juisee(options=[], workdir=pwd(); ff="fontforge", python="env_juisee/bin/python")

juiseeフォントをビルドする

* `options`: オプションの配列を代入する
  `["--slashed-zero", "--invisible-zenkaku-space", "--half-width"]`等
* `workdir`: juiseeのソースがあるフォルダを指定する
* `ff`: fontforgeの実行ファイル
* `python`: ビルド用のpython実行ファイルへのパス

# Examples
```julia-repl
julia> cd(joinpath(ENV["HOME"], "Downloads", "juisee-0.1.0"))

julia> build_juisee(["--slashed-zero", "--half-width"])
```
"""
function build_juisee(options=[], workdir=pwd(); ff="fontforge", python="env_juisee/bin/python")
    _olddir = pwd()
    cd(workdir)
    run(`$ff --lang=py -script $(joinpath(".", "fontforge_script.py")) $options`)
    ttfs = filter(f -> occursin(r"fontforge_Juisee.*\.ttf", f), readdir("build"))
    for ttf in ttfs
        f_ttf = abspath(joinpath("build", ttf))
        run(`$python -m ttfautohint --dehint --no-info $(f_ttf) $(f_ttf)`)
    end
    run(`$python fonttools_script.py`)
    cd(_olddir)
end

とまぁこんな感じ。buildフォルダ内にフォントが作成される。 基本的にはpythonの仮想環境をセットアップしているだけなので, sudo apt install fontforge等でfontforgeをあらかじめ別途インストールしておく必要がある。