(prepared: PreparedTextWithSegments, cursor: { segmentIndex: number, graphemeIndex: number })
| 546 | } |
| 547 | |
| 548 | function computeOffsetFromCursor(prepared: PreparedTextWithSegments, cursor: { segmentIndex: number, graphemeIndex: number }): number { |
| 549 | let offset = 0 |
| 550 | for (let i = 0; i < cursor.segmentIndex; i++) offset += prepared.segments[i]!.length |
| 551 | if (cursor.graphemeIndex === 0 || cursor.segmentIndex >= prepared.segments.length) return offset |
| 552 | |
| 553 | let graphemeIndex = 0 |
| 554 | for (const grapheme of graphemeSegmenter.segment(prepared.segments[cursor.segmentIndex]!)) { |
| 555 | if (graphemeIndex >= cursor.graphemeIndex) break |
| 556 | offset += grapheme.segment.length |
| 557 | graphemeIndex++ |
| 558 | } |
| 559 | return offset |
| 560 | } |
| 561 | |
| 562 | function classifyBreakMismatch(contentWidth: number, ours: ProbeLine | undefined, browser: ProbeLine | undefined): string { |
| 563 | if (!ours || !browser) return 'line-count mismatch after an earlier break shift' |
no outgoing calls
no test coverage detected
searching dependent graphs…