扩展库 / srt

srt

解析、生成字幕时间轴。

支持 SRT 与常用 WebVTT cue、ID 和设置文本;C 与 XLang 共享 XRT 值模型。完整 AOT 发布验收仍受共享链接问题阻断。

WebVTT 时间轴的 --> 两侧各需至少一个空格或 tab;普通 SRT 保留宽容写法。

WebVTT cue 的结束时间必须严格晚于开始时间;普通 SRT 仍接受零时长 cue。

WebVTT 的 STYLE、REGION 标题允许尾随空格或 tab;它们仍作为控制块处理,不会误作 cue ID。

2026-10-30:build/buildVtt/formatTime 改为拥有型字符串直接返回,C 头明确 char*;机器 ABI、算法和所有权不变。旧 takeCstr 已直接接管,因此不声称减少复制或分配。新增 C/XL 各 22 组固定预算、六条实际生成声明及 normalize 双语黄金例;默认门禁保留原语言数组正例,整包仍受 M1 投影阻断。当前范围与证据见 README 和根目录台账。

API

函数用途
parse / buildSRT 文本和 cue 数组互转
parseVtt / buildVttWebVTT 文本和 cue 数组互转
parseTime / formatTime毫秒时间戳转换

范例

import srt
var cues = srt.parse("1\n00:00:01,000 --> 00:00:02,000\n你好\n\n")
print(srt.buildVtt(cues))

WebVTT 的 NOTE(含空格或 tab 注释)、STYLE 和 REGION 块会跳过,但其中含有 --> 时拒绝输入;STYLE 和 REGION 只能位于首个 cue 之前,NOTE 可位于 cue 后。解析与生成均要求有效 UTF-8 和 LF/CRLF 换行;孤立回车会被拒绝。WebVTT cue 正文与设置中的额外 --> 被拒绝,生成器还拒绝与控制块冲突或含 --> 的 cue ID。cue 起点不得倒退(允许相等),非空 ID 必须唯一;解析和生成均验证。普通 SRT 不受这些 WebVTT 限制。C 时间参数与结果使用 int64_t。Windows C/XLang 包级门禁和 Linux C sanitizer、XLang 边界及双语范例逐字节对照已通过;完整 AOT 仍受主线缺符号阻断。样式和 cue 标记不作解释;详见包内 README 的支持范围、C 所有权与测试记录。