(text: string)
| 31 | |
| 32 | /** Split clean text into passages on blank-line boundaries, keeping each one's char offset. PURE. */ |
| 33 | export function splitPassages(text: string): Passage[] { |
| 34 | const parts: Passage[] = []; |
| 35 | const re = /\n[ \t]*\n/g; |
| 36 | let last = 0; let m: RegExpExecArray | null; |
| 37 | while ((m = re.exec(text))) { |
| 38 | const seg = text.slice(last, m.index); |
| 39 | if (seg.trim()) parts.push({ text: seg.trim(), start: last }); |
| 40 | last = re.lastIndex; |
| 41 | } |
| 42 | const tail = text.slice(last); |
| 43 | if (tail.trim()) parts.push({ text: tail.trim(), start: last }); |
| 44 | return parts; |
| 45 | } |
| 46 | |
| 47 | /** |
| 48 | * Replace inline base64 image blobs (``) — token bombs — with |
no test coverage detected