MCPcopy
hub / github.com/chenglou/pretext / appendBreakableSegmentFrom

Function appendBreakableSegmentFrom

src/line-break.ts:370–415  ·  view source on GitHub ↗
(segmentIndex: number, startGraphemeIndex: number)

Source from the content-addressed store, hash-verified

368 }
369
370 function appendBreakableSegmentFrom(segmentIndex: number, startGraphemeIndex: number): void {
371 const fitAdvances = breakableFitAdvances[segmentIndex]!
372 const preferredBreaks = breakablePreferredBreaks[segmentIndex] ?? null
373 let preferredBreakIndex = preferredBreaks === null
374 ? -1
375 : getNextPreferredBreakIndex(preferredBreaks, 0, startGraphemeIndex + 1)
376 let lastPreferredBreakEnd = -1
377 let lastPreferredBreakWidth = 0
378
379 let g = startGraphemeIndex
380 while (g < fitAdvances.length) {
381 const gw = fitAdvances[g]!
382
383 if (!hasContent) {
384 startLineAtGrapheme(segmentIndex, g, gw)
385 } else if (lineW + gw > fitLimit) {
386 if (preferredBreaks !== null && lastPreferredBreakEnd > startGraphemeIndex) {
387 emitCurrentLine(segmentIndex, lastPreferredBreakEnd, lastPreferredBreakWidth)
388 g = lastPreferredBreakEnd
389 preferredBreakIndex = getNextPreferredBreakIndex(preferredBreaks, preferredBreakIndex, g + 1)
390 lastPreferredBreakEnd = -1
391 lastPreferredBreakWidth = 0
392 continue
393 }
394 emitCurrentLine()
395 startLineAtGrapheme(segmentIndex, g, gw)
396 } else {
397 lineW += gw
398 lineEndSegmentIndex = segmentIndex
399 lineEndGraphemeIndex = g + 1
400 }
401
402 const graphemeEnd = g + 1
403 if (preferredBreaks !== null && preferredBreaks[preferredBreakIndex] === graphemeEnd) {
404 lastPreferredBreakEnd = graphemeEnd
405 lastPreferredBreakWidth = lineW
406 preferredBreakIndex++
407 }
408 g++
409 }
410
411 if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {
412 lineEndSegmentIndex = segmentIndex + 1
413 lineEndGraphemeIndex = 0
414 }
415 }
416
417 let i = 0
418 while (i < widths.length) {

Callers 3

walkPreparedLinesSimpleFunction · 0.85
walkPreparedLinesRawFunction · 0.85

Calls 6

startLineAtGraphemeFunction · 0.85
emitCurrentLineFunction · 0.85
finishLineFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…