Sapling/Sources/SaplingEditor/EditorActiveLineTracker.swift

27 lines
1.1 KiB
Swift
Raw Permalink Normal View History

import Foundation
public enum EditorActiveLineTracker {
public static func lines(from source: String, activeLineIndex: Int) -> [EditorLine] {
DocumentLineIndex(source: source).editorLines(activeLineIndex: activeLineIndex)
}
public static func lines(from lineIndex: DocumentLineIndex, activeLineIndex: Int) -> [EditorLine] {
lineIndex.editorLines(activeLineIndex: activeLineIndex)
}
public static func lineIndex(containing location: Int, in source: String) -> Int {
DocumentLineIndex(source: source).lineIndex(containing: location)
}
public static func lineIndex(containing location: Int, in lineIndex: DocumentLineIndex) -> Int {
lineIndex.lineIndex(containing: location)
}
public static func clampedSelection(_ selection: EditorSelection, in source: String) -> EditorSelection {
let sourceLength = source.utf16.count
let location = max(0, min(selection.location, sourceLength))
let length = max(0, min(selection.length, sourceLength - location))
return EditorSelection(location: location, length: length)
}
}