patches: fold line index + remove NS_AX_TEXT_CAP into 0001-0002
- 0001: remove NS_AX_TEXT_CAP (100K char cap), add lineStartOffsets/ lineCount ivars and method declarations to nsterm.h - 0002: add lineForAXIndex:/rangeForLine: O(log L) helpers, build line index in ensureTextCache, replace O(L) line scanning in accessibilityInsertionPointLineNumber/accessibilityLineForIndex/ accessibilityRangeForLine, free index in invalidateTextCache/dealloc - 0009 deleted (folded into 0001+0002) - README.txt: remove NS_AX_TEXT_CAP references, update known limitations, stress test threshold 50K lines
This commit is contained in:
@@ -326,9 +326,12 @@ TEXT CACHE AND VISIBLE RUNS
|
||||
narrowing/widening is detected by comparing cachedTextStart
|
||||
against BUF_BEGV — these operations change the visible region
|
||||
without bumping either modiff counter. The cache is also
|
||||
invalidated when the window tree is rebuilt. NS_AX_TEXT_CAP = 100,000
|
||||
UTF-16 units (~200 KB) caps total exposure; buffers larger than
|
||||
~50,000 lines are truncated for accessibility purposes.
|
||||
invalidated when the window tree is rebuilt.
|
||||
|
||||
There is no character cap on the accessibility text. The entire
|
||||
visible (non-invisible) buffer content is exposed to VoiceOver.
|
||||
Users who do not need accessibility can set ns-accessibility-enabled
|
||||
to nil for zero overhead.
|
||||
|
||||
A lineStartOffsets array is built during each cache rebuild,
|
||||
recording the AX string index where each line begins. This
|
||||
@@ -651,14 +654,9 @@ KNOWN LIMITATIONS
|
||||
produce incomplete or garbled accessibility text.
|
||||
|
||||
- Line counting (accessibilityInsertionPointLineNumber,
|
||||
accessibilityLineForIndex:) was O(lines) in patches 1-5.
|
||||
Patch 0009 adds a precomputed lineStartOffsets array built
|
||||
once per cache rebuild; queries are now O(log L) via binary
|
||||
search.
|
||||
|
||||
- Buffers larger than NS_AX_TEXT_CAP (100,000 UTF-16 units) are
|
||||
truncated. The truncation is silent; AT tools navigating past the
|
||||
truncation boundary may behave unexpectedly.
|
||||
accessibilityLineForIndex:) uses a precomputed lineStartOffsets
|
||||
array built once per cache rebuild. Queries are O(log L) via
|
||||
binary search.
|
||||
|
||||
- No multi-frame coordination. EmacsView.accessibilityElements is
|
||||
per-view; there is no cross-frame notification ordering.
|
||||
@@ -752,7 +750,7 @@ TESTING CHECKLIST
|
||||
*Completions*, Tab to a candidate, Enter to execute, then
|
||||
C-x o to switch windows. Emacs must not hang.
|
||||
|
||||
Stress test (patch 0009 line index):
|
||||
Stress test (line index):
|
||||
25. Open a large file (>50,000 lines). Navigate to the end with
|
||||
M-> or C-v repeatedly. VoiceOver speech should remain fluid
|
||||
at all positions (no progressive slowdown).
|
||||
|
||||
Reference in New Issue
Block a user