Files
deep_research/.opencode/templates/fonts/download-fonts.sh
T
2026-04-21 12:31:58 +08:00

143 lines
5.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 字体下载脚本:思源宋体 + 思源黑体 + 霞鹜文楷
# 用法:bash .opencode/templates/fonts/download-fonts.sh
# 许可:全部 SIL OFL,可自由商用、嵌入 PDF 分发
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FONTS_DIR="$SCRIPT_DIR"
echo "====================================="
echo "Deep Research 字体下载"
echo "目标目录:$FONTS_DIR"
echo "====================================="
# 检测下载工具
if command -v curl >/dev/null 2>&1; then
DOWNLOADER="curl -fL --retry 3 --retry-delay 5 -o"
elif command -v wget >/dev/null 2>&1; then
DOWNLOADER="wget -O"
else
echo "❌ 需要 curl 或 wget,请先安装"
exit 1
fi
# 字体清单:文件名 | 下载 URL
# 思源字体走 adobe-fonts GitHub Release 的 "Language Specific OTFs Simplified Chinese" 包
# 霞鹜文楷走 lxgw/LxgwWenKai Release
declare -a FONTS=(
"SourceHanSerifSC-Regular.otf|https://github.com/adobe-fonts/source-han-serif/raw/release/SubsetOTF/CN/SourceHanSerifCN-Regular.otf"
"SourceHanSerifSC-Bold.otf|https://github.com/adobe-fonts/source-han-serif/raw/release/SubsetOTF/CN/SourceHanSerifCN-Bold.otf"
"SourceHanSansSC-Light.otf|https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/CN/SourceHanSansCN-Light.otf"
"SourceHanSansSC-Medium.otf|https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/CN/SourceHanSansCN-Medium.otf"
"SourceHanSansSC-Bold.otf|https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/CN/SourceHanSansCN-Bold.otf"
"SourceHanSansSC-Heavy.otf|https://github.com/adobe-fonts/source-han-sans/raw/release/SubsetOTF/CN/SourceHanSansCN-Heavy.otf"
"LXGWWenKai-Regular.ttf|https://github.com/lxgw/LxgwWenKai/releases/download/v1.330/LXGWWenKai-Regular.ttf"
)
# 备用镜像(主源失败时用)
declare -a MIRRORS=(
"SourceHanSerifSC-Regular.otf|https://raw.githubusercontent.com/adobe-fonts/source-han-serif/release/SubsetOTF/CN/SourceHanSerifCN-Regular.otf"
"SourceHanSerifSC-Bold.otf|https://raw.githubusercontent.com/adobe-fonts/source-han-serif/release/SubsetOTF/CN/SourceHanSerifCN-Bold.otf"
"SourceHanSansSC-Light.otf|https://raw.githubusercontent.com/adobe-fonts/source-han-sans/release/SubsetOTF/CN/SourceHanSansCN-Light.otf"
"SourceHanSansSC-Medium.otf|https://raw.githubusercontent.com/adobe-fonts/source-han-sans/release/SubsetOTF/CN/SourceHanSansCN-Medium.otf"
"SourceHanSansSC-Bold.otf|https://raw.githubusercontent.com/adobe-fonts/source-han-sans/release/SubsetOTF/CN/SourceHanSansCN-Bold.otf"
"SourceHanSansSC-Heavy.otf|https://raw.githubusercontent.com/adobe-fonts/source-han-sans/release/SubsetOTF/CN/SourceHanSansCN-Heavy.otf"
"LXGWWenKai-Regular.ttf|https://ghproxy.com/https://github.com/lxgw/LxgwWenKai/releases/download/v1.330/LXGWWenKai-Regular.ttf"
)
download_font() {
local filename="$1"
local url="$2"
local target="$FONTS_DIR/$filename"
if [[ -f "$target" ]]; then
local size
size=$(stat -f%z "$target" 2>/dev/null || stat -c%s "$target" 2>/dev/null || echo 0)
if [[ $size -gt 100000 ]]; then
echo " ✓ 已存在($size bytes),跳过:$filename"
return 0
else
echo " ⚠ 文件过小($size bytes),重新下载:$filename"
rm -f "$target"
fi
fi
echo " ↓ 下载 $filename ..."
if $DOWNLOADER "$target" "$url" 2>/dev/null; then
local size
size=$(stat -f%z "$target" 2>/dev/null || stat -c%s "$target" 2>/dev/null || echo 0)
if [[ $size -gt 100000 ]]; then
echo " ✓ 完成($size bytes"
return 0
else
echo " ⚠ 下载的文件过小,可能失败"
rm -f "$target"
return 1
fi
else
echo " ✗ 下载失败"
rm -f "$target"
return 1
fi
}
get_mirror_url() {
local filename="$1"
for entry in "${MIRRORS[@]}"; do
IFS='|' read -r fn url <<< "$entry"
if [[ "$fn" == "$filename" ]]; then
echo "$url"
return 0
fi
done
return 1
}
echo ""
echo "开始下载..."
echo ""
FAILED=()
for entry in "${FONTS[@]}"; do
IFS='|' read -r filename url <<< "$entry"
if ! download_font "$filename" "$url"; then
# 主源失败,试镜像
mirror_url=$(get_mirror_url "$filename" || true)
if [[ -n "$mirror_url" ]]; then
echo " ↻ 尝试镜像..."
if download_font "$filename" "$mirror_url"; then
continue
fi
fi
FAILED+=("$filename")
fi
done
echo ""
echo "====================================="
if [[ ${#FAILED[@]} -eq 0 ]]; then
echo "✅ 全部字体下载成功!"
echo ""
echo "字体文件清单:"
ls -lh "$FONTS_DIR" | grep -E '\.(otf|ttf)$' || true
echo ""
echo "许可证:全部 SIL OFL,可自由商用、嵌入 PDF 分发。"
exit 0
else
echo "❌ 以下字体下载失败:"
for f in "${FAILED[@]}"; do
echo " - $f"
done
echo ""
echo "请手动下载,并放入 $FONTS_DIR/"
echo ""
echo "手动下载链接:"
echo " 思源宋体:https://github.com/adobe-fonts/source-han-serif/releases"
echo " 思源黑体:https://github.com/adobe-fonts/source-han-sans/releases"
echo " 霞鹜文楷:https://github.com/lxgw/LxgwWenKai/releases"
exit 1
fi