# 字体授权文件（SIL Open Font License 1.1）

本目录是**部署产物的一部分**，不是可选文档。

`src/fonts/*.woff2` 的 12 款中文手写字体全部采用 **SIL Open Font License 1.1**，
且都是原始 TTF 的**子集化修改版**（按《通用规范汉字表》8105 字并上 ASCII、CJK 标点、
全角形式裁剪后转成 WOFF2）。

## 为什么必须随字体分发

OFL 1.1 原文（各文件正文里都有）：

* DEFINITIONS：`"Modified Version" refers to any derivative made ... by changing formats
  or by porting the Font Software to a new environment.`
  → 子集化 + 转 WOFF2 属于 Modified Version。
* PERMISSION & CONDITIONS 2)：`Original or Modified Versions of the Font Software may be
  bundled, redistributed and/or sold with any software, provided that each copy contains
  the above copyright notice and this license.` 并允许以 `stand-alone text files` 形式附带
  → 这就是本目录存在的形式。
* PERMISSION & CONDITIONS 5)：`The Font Software, modified or unmodified, in part or in
  whole, must be distributed entirely under this license ...`

本站通过 `@font-face` 把 woff2 分发给访问者的浏览器，就是 redistribute，所以授权正文
必须能访问到。**Vite 会把 `public/` 原样拷进 `dist/`，部署时请保留 `fonts-license/`
整个目录**（线上路径 `/fonts-license/<slug>-OFL.txt`）。

## 文件清单

| 文件 | 内容 |
|---|---|
| `<slug>-OFL.txt` | 该字体上游仓库授权文件（`OFL.txt`；`scriptwide-kyokasho` 上游叫 `LICENSE`）的**完整原文**，未删节未改写，含开头版权声明行；正文含 PREAMBLE / DEFINITIONS / PERMISSION & CONDITIONS / TERMINATION / DISCLAIMER 全部段落 |
| `README.md` | 本说明与 RFN 核查结论 |

`<slug>` 与 `src/fonts/<slug>-subset.woff2` 以及 `scripts/subset_fonts.py` 里的 slug 一一对应。
12 份文本均已与上游授权原文逐字节比对（SHA-256 相同）。

| slug | 字体 | 来源仓库 | 授权文件 | 字节数 |
|---|---|---|---|---|
| `ma-shan-zheng` | Ma Shan Zheng | google/fonts `ofl/mashanzheng` | `ma-shan-zheng-OFL.txt` | 4397 |
| `zhi-mang-xing` | Zhi Mang Xing | google/fonts `ofl/zhimangxing` | `zhi-mang-xing-OFL.txt` | 4397 |
| `long-cang` | Long Cang | google/fonts `ofl/longcang` | `long-cang-OFL.txt` | 4390 |
| `liu-jian-mao-cao` | Liu Jian Mao Cao | google/fonts `ofl/liujianmaocao` | `liu-jian-mao-cao-OFL.txt` | 4406 |
| `xiaolai` | Xiaolai 小赖字体 | lxgw/kose-font | `xiaolai-OFL.txt` | 4432 |
| `lxgw-wenkai` | LXGW WenKai 霞鹜文楷 | lxgw/LxgwWenKai | `lxgw-wenkai-OFL.txt` | 5171 |
| `lxgw-marker-gothic` | LXGW Marker Gothic 霞鹜漫黑 | lxgw/LxgwMarkerGothic `OFL.txt` | `lxgw-marker-gothic-OFL.txt` | 4406 |
| `child-fun-sans` | Child Fun Sans 游趣体 | Des-Magmeta/ChildFunSans `OFL.txt` | `child-fun-sans-OFL.txt` | 4748 |
| `scriptwide-kyokasho` | ScriptwideKyokashoCJK-A 教科书体 | scriptwide-fonts/scriptwide-kyokasho-cjk **`LICENSE`** | `scriptwide-kyokasho-OFL.txt` | 4403 |
| `lxgw-zhenkai` | LXGW ZhenKai GB 霞鹜臻楷 | lxgw/LxgwZhenKai `OFL.txt` | `lxgw-zhenkai-OFL.txt` | 5361 |
| `zcool-kuaile` | ZCOOL KuaiLe 站酷快乐体 | google/fonts `ofl/zcoolkuaile/OFL.txt` | `zcool-kuaile-OFL.txt` | 4398 |
| `lxgw-975yuan` | LXGW 975 Yuan SC 400W 975 圆体 | lxgw/975Yuan `OFL.txt`（master 分支） | `lxgw-975yuan-OFL.txt` | 5560 |

第二批 6 份同样与上游逐字节一致：走 `gh api repos/<r>/contents/<path> --jq .content | base64 -d`
取一份、走 `raw.githubusercontent.com` 取一份，两份 SHA-256 相同，且与本地文件相同；
另用 `git hash-object` 比过 GitHub contents API 返回的 blob SHA-1，全部吻合。

| slug | SHA-256（= 上游正文） |
|---|---|
| `lxgw-marker-gothic` | `a5e70c8b156c4103b96a4f6af65ad6562e03c0e87373dc3ab43e04d6997ec46e` |
| `child-fun-sans` | `441731cd1c25095d7a9e4a5505be30900ae9e8a397f4171240bb785567e4737d` |
| `scriptwide-kyokasho` | `34ec91123fe2817b353fadd2a3087f62609445f3c56ece99469cd98b39de8ced` |
| `lxgw-zhenkai` | `1ee66a22ddfa5241d407a5fd9a2ba666c4de5700f17182d5ee729e0434e7b42d` |
| `zcool-kuaile` | `538078469839b4a2e7ad22bef4ebe41681a4e53749bb2a072144024f1d6d703d` |
| `lxgw-975yuan` | `e9c4c62582807c250061e07ede99f4c0c7e1a7d536e621ec68d049f1f7ee0d81` |

> 注意 `scriptwide-kyokasho`：该仓库的授权文件叫 `LICENSE` 不叫 `OFL.txt`，正文是标准
> OFL 1.1（PREAMBLE / DEFINITIONS / PERMISSION & CONDITIONS / TERMINATION / DISCLAIMER
> 五段齐全）。我们按本项目命名习惯落地成 `<slug>-OFL.txt`，内容一字未改。


## RFN（Reserved Font Name）核查结论

OFL 的 RFN 定义是 `"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).` —— 只有**版权声明行里显式列出**才算声明了 RFN；正文里那句定义本身
不算（前 5 款全文唯一命中 "Reserved Font Name" 的地方就是这句定义原文）。

| 字体 | 有无 RFN | 子集化后能否沿用原名 | 依据 |
|---|---|---|---|
| Ma Shan Zheng | 无 | **能** | 版权行无 RFN 声明，全文唯一命中是 OFL 条款定义原文 |
| Zhi Mang Xing | 无 | **能** | 同上 |
| Long Cang | 无 | **能** | 同上 |
| Liu Jian Mao Cao | 无 | **能** | 同上 |
| Xiaolai 小赖字体 | 无 | **能** | 版权行只有 `Copyright 2020-2024 LXGW` 与 `Copyright 2014 Nozomi Seto`，未跟 RFN；`Reserved Font Name` 仅出现在条款定义中 |
| LXGW WenKai 霞鹜文楷 | **有**：`霞鹜`、`霞鶩`、`落霞孤鹜`、`落霞孤鶩`、`LXGW` | **能**（限本项目场景，见下节） | 版权行后紧跟 `[ADDITIONAL PERMISSION]`，属于 OFL 3) 条要求的 "explicit written permission"，明确豁免「为 web 字体交付而做的子集化/转格式」修改版沿用 RFN |
| LXGW Marker Gothic 霞鹜漫黑 | 无 | **能** | 版权行只有 `Copyright 2021-2026 The LXGW Marker Gothic Project Authors`，未跟 RFN；全文唯一 "Reserved Font Name" 命中是条款定义原文 |
| Child Fun Sans 游趣体 | 无 | **能** | 两行版权（本项目 `2023-2026 Child Fun Sans Project Authors` + 上游 `2020 The Stick Project Authors`，即 Fontworks Stick）都没声明 RFN；同上 |
| ScriptwideKyokashoCJK-A 教科书体 | 无（但**有上游署名缺口**，见下方专节） | **能** | 版权行只有 `Copyright (c) 2025, FishlandicFishy` 一行，未跟 RFN；`Reserved Font Name` 仅出现在条款定义中 |
| LXGW ZhenKai GB 霞鹜臻楷 | **有**：`霞鹜`、`霞鶩`、`落霞孤鹜`、`落霞孤鶩`、`LXGW` | **能**（限本项目场景，同霞鹜文楷） | 版权行第 1 行的 `[ADDITIONAL PERMISSION]` 与 `lxgw-wenkai-OFL.txt` 里那段**逐字相同**（归一化空白后同为 610 字符、SHA-256 前缀 `aec26687cd15e01b`），同样豁免 web 子集化 / 转 WOFF2 |
| ZCOOL KuaiLe 站酷快乐体 | 无 | **能** | 版权行只有 `Copyright 2018 The ZCOOL KuaiLe Project Authors`，与前 4 款 Google Fonts 同一形态 |
| LXGW 975 Yuan SC 400W 975 圆体 | **有多层**：① LXGW 的 `霞鹜`/`霞鶩`/`落霞孤鹜`/`落霞孤鶩`/`LXGW`；② Adobe 的 `Source`；③ Takushun Wu 的 `WenYuan Rounded`、`文渊圆体` | **能** | ① 同臻楷（豁免原文逐字相同）；② 来自上游思源黑体 `Copyright 2014-2025 Adobe ..., with Reserved Font Name 'Source'`，③ 来自文渊圆体。本站用的名字 `"LXGW 975 Yuan SC 400W"` 不含 `Source` / `WenYuan Rounded` / `文渊圆体` 中任一个 reserved name，与之不冲突（该文件其余版权行——昭源环方、狮尾圆体、Ek Type——都没声明 RFN） |

结论：12 款 woff2 都可以继续在 CSS `font-family: "Ma Shan Zheng"` … `"LXGW 975 Yuan SC 400W"` 中用原名，
不必改名。


## 霞鹜文楷的 `[ADDITIONAL PERMISSION]`（本项目沿用 "LXGW WenKai" 名称的依据）

`lxgw-wenkai-OFL.txt` **第 1 行**版权声明之后是一整段附加许可，原文（请勿截断）：

> Copyright 2021-2026 LXGW (https://github.com/lxgw/LxgwWenKai), with Reserved Font Name
> '霞鹜', '霞鶩', '落霞孤鹜', '落霞孤鶩' and 'LXGW'. **[ADDITIONAL PERMISSION]** The Reserved
> Font Names '霞鹜', '霞鶩', '落霞孤鹜', '落霞孤鶩' and 'LXGW' may continue to be used in
> Modified Versions recompiled from the Original Version, without modifications to the font
> source code; or in Modified Versions subsetted or converted to other formats (e.g.,
> WOFF/WOFF2) solely for web font delivery, provided such Modified Versions are not made
> available as installable desktop fonts (e.g., on mainstream platforms like Google Fonts,
> or third-party non-commercial platforms recognized by the author @lxgw; other web font
> platforms please contact the author @lxgw for confirmation).

拆解成条件，对照本项目现状：

| 条款要求 | 本项目 |
|---|---|
| 修改版仅为 web 字体交付而子集化 / 转格式（WOFF、WOFF2） | ✅ 只做子集化 + TTF→WOFF2，未改动字体源程序 |
| 不得作为**可安装桌面字体**分发 | ✅ 站点只提供书写板预览与 PNG 导出，不提供字体下载安装入口 |
| 不得上架 Google Fonts 等主流字体平台；第三方平台需先与 @lxgw 确认 | ✅ 本站是个人纯前端小工具，未上架任何字体分发平台 |
| 沿用 RFN 名称 | ✅ 因此可继续称 "LXGW WenKai" / 霞鹜文楷 |

若将来要把这套 woff2 放到字体分发平台或提供下载，该豁免即不再覆盖，需另行联系作者 @lxgw。

### 同一段豁免也覆盖「臻楷」与「975 圆体」

`lxgw-zhenkai-OFL.txt` 与 `lxgw-975yuan-OFL.txt` 的版权声明第 1 行，带的就是上面这段
`[ADDITIONAL PERMISSION]` 原文（作者同为 @lxgw，RFN 列表同为 霞鹜/霞鶩/落霞孤鹜/落霞孤鶩/LXGW）。
上面那张条件对照表对这两款同样成立，所以 `"LXGW ZhenKai GB"` 与 `"LXGW 975 Yuan SC 400W"`
可继续用原名。差异只在 975 圆体另背了上游的 RFN（`Source`、`WenYuan Rounded`/`文渊圆体`），
见核查表最后一行。

## 教科书体（`scriptwide-kyokasho`）的上游署名缺口 —— 已知合规瑕疵，如实记录

它的 `LICENSE`（落地为 `scriptwide-kyokasho-OFL.txt`）**只有一行版权提示**：

> Copyright (c) 2025, FishlandicFishy (<https://github.com/scriptwide-fonts/scriptwide-kyokasho-cjk>).

而该仓库自己写明这款字体是 **derived from Klee One Semibold（Fontworks）** 并
"Added characters from LXGW WenKai GB"（见其 README 与 release notes）。按 OFL 1.1
PERMISSION & CONDITIONS 2)，分发副本必须带上**上述版权提示（即各上游的）**与许可正文；
作者只留了自己那一行，属于**上游作者侧的署名缺口**，不是本项目造成的。

本项目的处置：

* `scriptwide-kyokasho-OFL.txt` **照原样分发上游原文**——不替它补写版权行（我们没有权利
  改写他人的许可文件），也不删改任何一字。
* 在此处如实记录该风险，让使用者知情：如果上游哪天修正 `LICENSE`，重新取一次原文即可。
* 顺带一条取源禁忌：该 release 把字体拆成 4 个 CJK 资产（单个字体文件最多 65535 字形），
  只有 `-A.ttf`（17.16MB，BMP 区）对本项目的字符集有意义（8105 覆盖 7909）；
  `-B.ttf`（3.83MB）装的是非 BMP 扩展平面，8105 里只命中 196 字 = 2.4%，取错就得到一款
  站内几乎不能用的字体。`scripts/subset_fonts.py` 里已按完整资产名精确锁 `-A`。

## 上游出处

* Ma Shan Zheng / Zhi Mang Xing / Long Cang / Liu Jian Mao Cao：
  `https://github.com/google/fonts/tree/main/ofl/<名称小写>`（SIL OFL 1.1）
* Xiaolai 小赖字体：`https://github.com/lxgw/kose-font` 最新 release 的 `Xiaolai-Regular.ttf`
* LXGW WenKai 霞鹜文楷：`https://github.com/lxgw/LxgwWenKai` 最新 release 的 `LXGWWenKai-Regular.ttf`
* LXGW Marker Gothic 霞鹜漫黑：`https://github.com/lxgw/LxgwMarkerGothic` 最新 release（v1.003）
  的 zip 资产里 `fonts/ttf/LXGWMarkerGothic-Regular.ttf`；授权取仓库根 `OFL.txt`
  （注意：包内也有一份 `LxgwMarkerGothic-v1.003/OFL.txt`，与仓库根的字节数不同，我们取仓库根那份）
* Child Fun Sans 游趣体：`https://github.com/Des-Magmeta/ChildFunSans`（v1.200）最新 release
  的唯一资产 `ChildFunSans.ttf`
* ScriptwideKyokashoCJK-A 教科书体：`https://github.com/scriptwide-fonts/scriptwide-kyokasho-cjk`
  （v1.009）最新 release 的 `ScriptwideKyokashoCJK-A.ttf`；授权取仓库根 `LICENSE`
* LXGW ZhenKai GB 霞鹜臻楷：`https://github.com/lxgw/LxgwZhenKai`（v0.825）最新 release 的
  `LXGWZhenKaiGB-Regular.ttf`
* ZCOOL KuaiLe 站酷快乐体：`https://github.com/google/fonts/tree/main/ofl/zcoolkuaile`
* LXGW 975 Yuan SC 400W 975 圆体：`https://github.com/lxgw/975Yuan`（26.07.26）最新 release 的
  `LXGW975YuanSC-400W.ttf`；该仓库默认分支是 `master`，上游 README 已标注字体停止维护

## 重新生成字体产物

```bash
python3 -m pip install --user --break-system-packages fonttools brotli   # Debian/Ubuntu 需 --break-system-packages（PEP 668）
npm run fonts:subset        # = python3 scripts/subset_fonts.py
```

`fonts-src/`（12 款源文件约 121MB：11 个 TTF + 霞鹜漫黑那个 release 的 zip 资产，脚本只从
包里抽需要的那一个 ttf）已写进 `.gitignore`，不进仓库；脚本会按字节数校验自动补下载。
换字体版本时请一并确认上游授权原文是否有变化（版权年份、RFN 列表、附加许可）。
