| export function countLines(text: string): number { | |
| return text.split("\n").length; | |
| } | |
| export function hasBalancedFences(chunk: string): boolean { | |
| let open: { markerChar: string; markerLen: number } | null = null; | |
| for (const line of chunk.split("\n")) { | |
| const match = line.match(/^( {0,3})(`{3,}|~{3,})(.*)$/); | |
| if (!match) { | |
| continue; | |
| } | |
| const marker = match[2]; | |
| if (!open) { | |
| open = { markerChar: marker[0], markerLen: marker.length }; | |
| continue; | |
| } | |
| if (open.markerChar === marker[0] && marker.length >= open.markerLen) { | |
| open = null; | |
| } | |
| } | |
| return open === null; | |
| } | |