2
2
// https://github.com/krzyzanowskim/STTextView/blob/main/LICENSE.md
3
3
4
4
import AppKit
5
+ import STTextKitPlus
5
6
7
+ /// NSAccessibilityProtocol
6
8
extension STTextView {
7
9
8
10
open override func isAccessibilityElement( ) -> Bool {
@@ -25,21 +27,26 @@ extension STTextView {
25
27
NSLocalizedString ( " Text Editor " , comment: " " )
26
28
}
27
29
28
- open override func accessibilityValue ( ) -> Any ? {
29
- text
30
+ open override func accessibilityNumberOfCharacters ( ) -> Int {
31
+ text? . count ?? 0
30
32
}
31
33
32
- open override func setAccessibilityValue( _ accessibilityValue: Any ? ) {
33
- guard let string = accessibilityValue as? String else {
34
- return
35
- }
34
+ open override func accessibilitySelectedText( ) -> String ? {
35
+ textLayoutManager. textSelectionsString ( )
36
+ }
36
37
37
- self . text = string
38
+ open override func accessibilitySelectedTextRange( ) -> NSRange {
39
+ selectedRange ( )
38
40
}
39
41
40
- open override func accessibilityAttributedString ( for range : NSRange ) -> NSAttributedString ? {
41
- attributedSubstring ( forProposedRange : range , actualRange : nil )
42
+ open override func isAccessibilityFocused ( ) -> Bool {
43
+ isFirstResponder && isSelectable
42
44
}
45
+ }
46
+
47
+ extension STTextView {
48
+
49
+ // NSAccessibilityStaticText
43
50
44
51
open override func accessibilityVisibleCharacterRange( ) -> NSRange {
45
52
if let viewportRange = textLayoutManager. textViewportLayoutController. viewportRange {
@@ -49,27 +56,61 @@ extension STTextView {
49
56
return NSRange ( )
50
57
}
51
58
52
- open override func accessibilityString( for range: NSRange ) -> String ? {
53
- attributedSubstring ( forProposedRange: range, actualRange: nil ) ? . string
59
+ open override func setAccessibilitySelectedTextRange( _ accessibilitySelectedTextRange: NSRange ) {
60
+ guard let textRange = NSTextRange ( accessibilitySelectedTextRange, in: textContentManager) else {
61
+ assertionFailure ( )
62
+ return
63
+ }
64
+ setSelectedTextRange ( textRange, updateLayout: true )
54
65
}
55
66
56
- open override func accessibilityNumberOfCharacters ( ) -> Int {
57
- text ? . count ?? 0
67
+ open override func accessibilityAttributedString ( for range : NSRange ) -> NSAttributedString ? {
68
+ attributedSubstring ( forProposedRange : range , actualRange : nil )
58
69
}
59
70
60
- open override func accessibilitySelectedText ( ) -> String ? {
61
- textLayoutManager . textSelectionsString ( )
71
+ open override func accessibilityValue ( ) -> Any ? {
72
+ text
62
73
}
63
74
64
- open override func accessibilitySelectedTextRange( ) -> NSRange {
65
- selectedRange ( )
75
+ open override func setAccessibilityValue( _ accessibilityValue: Any ? ) {
76
+ guard let string = accessibilityValue as? String else {
77
+ return
78
+ }
79
+
80
+ self . text = string
66
81
}
67
82
68
- open override func setAccessibilitySelectedTextRange( _ accessibilitySelectedTextRange: NSRange ) {
69
- if let textRange = NSTextRange ( accessibilitySelectedTextRange, in: textContentManager) {
70
- setSelectedTextRange ( textRange, updateLayout: true )
71
- } else {
72
- assertionFailure ( )
83
+ // NSAccessibilityNavigableStaticText
84
+
85
+ open override func accessibilityFrame( for range: NSRange ) -> NSRect {
86
+ guard let textRange = NSTextRange ( range, in: textContentManager) else {
87
+ return . zero
88
+ }
89
+ return textLayoutManager. textSegmentFrame ( in: textRange, type: . standard) ?? . zero
90
+ }
91
+
92
+ open override func accessibilityLine( for index: Int ) -> Int {
93
+ guard let location = textContentManager. location ( at: index) ,
94
+ let position = textContentManager. position ( location)
95
+ else {
96
+ return 0
97
+ }
98
+ return position. row
99
+ }
100
+
101
+ open override func accessibilityRange( forLine line: Int ) -> NSRange {
102
+ guard let location = textContentManager. location ( line: line) ,
103
+ let textElement = textContentManager. textElements ( for: NSTextRange ( location: location) ) . first,
104
+ let textElementRange = textElement. elementRange
105
+ else {
106
+ return . notFound
73
107
}
108
+
109
+ return NSRange ( textElementRange, in: textContentManager)
74
110
}
111
+
112
+ open override func accessibilityString( for range: NSRange ) -> String ? {
113
+ attributedSubstring ( forProposedRange: range, actualRange: nil ) ? . string
114
+ }
115
+
75
116
}
0 commit comments