subforge
Version:
High-performance subtitle toolkit for parsing, converting, and authoring across 20+ formats.
51 lines (46 loc) • 1.32 kB
text/typescript
import type { SubtitleDocument, SubtitleEvent } from '../../../core/types.ts'
import { formatTime } from './time.ts'
import { serializeTags } from './tags.ts'
/**
* Serializes a SubtitleDocument to SRT format.
*
* Generates valid SRT output with sequential numbering, timestamps in
* HH:MM:SS,mmm format, and text with HTML-like formatting tags.
* Automatically serializes rich text segments if the event is marked dirty.
*
* @param doc - The subtitle document to serialize
* @returns SRT-formatted string ready to be written to a file
*
* @example
* ```ts
* const doc = createDocument();
* doc.events.push({
* id: '1',
* start: 1000,
* end: 3000,
* text: '<b>Hello</b>',
* // ... other required fields
* });
*
* const srt = toSRT(doc);
* // Output:
* // 1
* // 00:00:01,000 --> 00:00:03,000
* // <b>Hello</b>
* ```
*/
export function toSRT(doc: SubtitleDocument): string {
let result = ''
const events = doc.events
const len = events.length
for (let i = 0; i < len; i++) {
const event = events[i]!
const text = event.dirty && event.segments.length > 0
? serializeTags(event.segments)
: event.text
result += (i + 1) + '\n'
result += formatTime(event.start) + ' --> ' + formatTime(event.end) + '\n'
result += text + '\n\n'
}
return result
}