Skip to content

Commit c056e4a

Browse files
committed
Add Demo Line Fold Provider (For Testing)
1 parent 0a7519e commit c056e4a

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//
2+
// IndentationLineFoldProvider.swift
3+
// CodeEditSourceEditor
4+
//
5+
// Created by Khan Winter on 5/8/25.
6+
//
7+
8+
import AppKit
9+
import CodeEditTextView
10+
11+
final class IndentationLineFoldProvider: LineFoldProvider {
12+
func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? {
13+
guard let linePosition = layoutManager.textLineForIndex(lineNumber),
14+
let indentLevel = indentLevelForPosition(linePosition, textStorage: textStorage) else {
15+
return nil
16+
}
17+
18+
return indentLevel
19+
}
20+
21+
private func indentLevelForPosition(
22+
_ position: TextLineStorage<TextLine>.TextLinePosition,
23+
textStorage: NSTextStorage
24+
) -> Int? {
25+
guard let substring = textStorage.substring(from: position.range) else {
26+
return nil
27+
}
28+
29+
return substring.utf16 // Keep NSString units
30+
.enumerated()
31+
.first(where: { UnicodeScalar($0.element)?.properties.isWhitespace != true })?
32+
.offset
33+
}
34+
}

Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import Foundation
99
import AppKit
1010
import CodeEditTextView
1111

12+
#warning("Replace before release")
13+
fileprivate let demoFoldProvider = IndentationLineFoldProvider()
14+
1215
/// Displays the code folding ribbon in the ``GutterView``.
1316
///
1417
/// This view draws its contents
@@ -50,9 +53,10 @@ class FoldingRibbonView: NSView {
5053
}
5154

5255
init(textView: TextView, foldProvider: LineFoldProvider?) {
56+
#warning("Replace before release")
5357
self.model = LineFoldingModel(
5458
textView: textView,
55-
foldProvider: foldProvider
59+
foldProvider: foldProvider ?? demoFoldProvider
5660
)
5761
super.init(frame: .zero)
5862
layerContentsRedrawPolicy = .onSetNeedsDisplay

0 commit comments

Comments
 (0)