"""生成 new-sakura 主题的 CSS。
为什么用脚本生成而不用生成器的图层功能:生成器的装饰层只认「图片素材」(导出时
打进 zip 或传对象存储),而这里的花瓣是**内联 SVG 的 data URI** —— 零外部请求、
任意缩放不糊、改配色只改一个色值。代价是 CSS 里会出现一长串百分号编码的 URI,
所以源 SVG 保留在本文件里,改完重跑:
python dev/theme-tools/gen_new_sakura.py
输出:static/css/themes/new-sakura.css
"""
import os
import urllib.parse
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
OUT = os.path.join(ROOT, "static", "css", "themes", "new-sakura.css")
def uri(svg):
"""转成 CSS url()。safe='' 是刻意的:连逗号、分号、括号都编码掉 ——
`--tb-deco` 是按顶层逗号切分的(internal/theme 的 TestDecoSlotCount),
URI 里留一个裸逗号就会被当成多一层的装饰。"""
return 'url("data:image/svg+xml,' + urllib.parse.quote(svg, safe="") + '")'
# ---- 花与瓣 ----------------------------------------------------------------
# 五瓣樱花:五个椭圆绕中心旋 72°,中心一团深一点的蕊。不做花瓣缺口——
# 在 30~90px 的显示尺寸上缺口只剩 2px,反而像毛边;靠五瓣轮廓就够识别。
def blossom(light, deep, heart):
petals = "".join(
f''
for a in (0, 72, 144, 216, 288)
)
return (
'"
)
# 单瓣:顶端留一个 V 形缺口(樱花花瓣的标志),比整朵花更适合当"飘落"的单位。
def petal(fill):
return (
'"
)
# 枝条:一根主枝 + 两根小杈 + 五朵花 + 三片落瓣。
# 花是重复内联而不是