开发者文档
jpFun 把一份简谱源码分几步处理:先解析语法,再确定音乐时间,然后计算页面布局,最后绘制。播放与布局共用时间事件,但各自独立工作。
这组文档面向集成 jpFun 或修改其实现的开发者,介绍各阶段如何衔接,以及新增功能时可以使用哪些接口。
第一次读源码,可以先看架构总览,再沿着解析、Lowering、布局、渲染的顺序往下读。如果已经有具体任务,直接从对应专题入手即可:
| 你要做的事 | 对应文档 |
|---|---|
| 修改语法、参数解析或语法糖 | 源码解析 |
| 新增时间事件、作用域修饰或并行声部 | Lowering |
| 调整间距、对齐、附属对象或分页 | 简谱布局 |
| 输出 SVG、绘制 Canvas 或接入新后端 | 渲染后端 |
| 实现演奏效果、反复或播放时间映射 | 播放 |
| 接入高亮、补全、诊断或源码定位 | 编辑器集成 |
先区分要改的是某个记号的规则,还是多个记号共用的机制。具体记号的语法、时间和绘制行为通常都在对应函数中;引擎负责调用这些规则、组织全局流程。
还有两个贯穿各阶段的约定:解析后的 AST 只读,本轮编译状态放在本轮中间对象里;布局和播放彼此独立,不读取对方的结果。修改时沿着这个分工找实现,再用相邻测试确认行为,通常就不需要改动整条流水线。