将 SGF 格式的围棋棋谱转换为单文件 HTML 网页,支持本地浏览器打开进行交互式打谱。
本技能是纯本地离线工具,无任何网络依赖:
| 安全项 | 说明 |
|---|---|
| -------- | ------ |
| 网络访问 | ❌ 无任何网络请求 |
| 文件系统 | 仅读写用户指定路径 |
| 第三方依赖 | ❌ 零依赖,仅用 Python 标准库 |
| XSS防护 | ✅ html.escape() 转义所有 SGF 元数据 |
| JSON注入防护 | ✅ json.dumps() + html.escape() + DOM解码三重保护 |
代码审计路径:
replay.py:43-48 - 所有用户输入的 HTML 转义replay.py:58 - JSON 数据的安全编码replay.html - JSON 解码使用 textarea.innerHTML 安全解码根据 SGF 格式的围棋棋谱数据,生成一个单文件 HTML 网页,支持本地浏览器打开进行交互式打谱。
无第三方依赖 - 使用 Python 标准库(sys, re, os, json, html)
| 文件 | 功能 |
|---|---|
| ------ | ------ |
scripts/replay.py | SGF 转 HTML 主脚本 |
scripts/sgf_parser.py | SGF 树状解析模块 |
scripts/templates/replay.html | HTML 页面模板 |
# 基本用法
python3 scripts/replay.py <输入.sgf> [输出.html]
# 示例
python3 scripts/replay.py game.sgf # 输出到 /tmp/sgf-viewer/
python3 scripts/replay.py game.sgf mygame.html # 指定输出文件名
python3 scripts/replay.py game.sgf -o /path/to/dir # 指定输出目录
直接用浏览器打开生成的 HTML 文件即可打谱。
| 平台 | 操作 |
|---|---|
| ------ | ------ |
| 桌面端 | ←/→ 上一手/下一手,空格 播放/暂停 |
| 移动端 | 左滑下一手,右滑上一手 |
当棋谱包含 AI 变化图(如野狐围棋棋谱)时:
在棋盘任意空点点击可进入试下模式:
使用 Web Audio API 实时生成,无需加载音频文件:
| 格式 | 说明 |
|---|---|
| ------ | ------ |
| 标准格式 | (;GM[1];B[pd];W[pp]...) |
| MultiGo | 多分支嵌套格式 |
| 野狐格式 | 平面格式、带AI变化图 |
| MULTIGOGM | 定式库多向变化 |
from sgf_parser import parse_sgf, parse_sgf_file
# 解析 SGF 字符串
result = parse_sgf(sgf_content)
# 返回: {"game_info": {...}, "tree": {...}, "stats": {...}, "errors": [...]}
# 解析 SGF 文件
result = parse_sgf_file("game.sgf")
> "把 xxx.sgf 生成打谱网页"
> "查看这盘棋的变化图"
> "生成一个围棋打谱页面"
共 2 个版本