skip gutter line numbers for collapsed table/HR source ranges

This commit is contained in:
jess 2026-04-07 14:29:37 -07:00
parent 7441ec937c
commit 3edc8838d9
1 changed files with 21 additions and 0 deletions

View File

@ -2745,6 +2745,19 @@ class LineNumberTextView: NSTextView {
let lineMode = ConfigManager.shared.lineIndicatorMode let lineMode = ConfigManager.shared.lineIndicatorMode
// Collect collapsed block source ranges (tables, HRs) to skip in gutter
var collapsedRanges: [NSRange] = []
if let mlm = lm as? MarkdownLayoutManager {
for block in mlm.blockRanges {
switch block.kind {
case .tableBlock, .horizontalRule:
collapsedRanges.append(block.range)
default:
break
}
}
}
var containerVisible = visibleRect var containerVisible = visibleRect
containerVisible.origin.x -= origin.x containerVisible.origin.x -= origin.x
containerVisible.origin.y -= origin.y containerVisible.origin.y -= origin.y
@ -2784,6 +2797,14 @@ class LineNumberTextView: NSTextView {
var charIndex = visibleChars.location var charIndex = visibleChars.location
while charIndex < NSMaxRange(visibleChars) { while charIndex < NSMaxRange(visibleChars) {
let lineRange = text.lineRange(for: NSRange(location: charIndex, length: 0)) let lineRange = text.lineRange(for: NSRange(location: charIndex, length: 0))
let inCollapsedBlock = collapsedRanges.contains { NSIntersectionRange($0, lineRange).length > 0 }
if inCollapsedBlock {
lineNumber += 1
charIndex = NSMaxRange(lineRange)
continue
}
let lineGlyphRange = lm.glyphRange(forCharacterRange: lineRange, actualCharacterRange: nil) let lineGlyphRange = lm.glyphRange(forCharacterRange: lineRange, actualCharacterRange: nil)
let lineRect = lm.boundingRect(forGlyphRange: lineGlyphRange, in: tc) let lineRect = lm.boundingRect(forGlyphRange: lineGlyphRange, in: tc)
let y = lineRect.origin.y + origin.y let y = lineRect.origin.y + origin.y