Escape sequence parsing logic (I/O independent)
This module contains shared escape sequence parsing logic used by blocking, non-blocking, and async parsers. It eliminates code duplication by separating parsing logic from I/O operations.
Types
BracketSequenceKind = enum BskArrowKey, BskNavigationKey, BskMouseX10, BskMouseSGR, BskNumeric, BskInvalid
- Classification of bracket escape sequences after ESC[
EscapeResult = object isValid*: bool keyEvent*: KeyEvent
- Result of escape sequence processing
NumericSequenceKind = enum NskSingleDigitWithTilde, NskMultiDigit, NskModifiedKey, NskInvalid
- Classification of numeric escape sequences after ESC[digit
Procs
proc classifyBracketSequence(final: char): BracketSequenceKind {....raises: [], tags: [], forbids: [].}
- Classify bracket sequence type by character after ESC[
proc classifyNumericSequence(nextChar: char; isValid: bool): NumericSequenceKind {. ...raises: [], tags: [], forbids: [].}
- Classify numeric sequence type by next character: '~' / digit / ';'
proc escapeResult(): EscapeResult {.inline, ...raises: [], tags: [], forbids: [].}
- Create an EscapeResult with Escape key (fallback for invalid sequences)
proc processModifiedKeySequence(digit: char; modChar: char; modValid: bool; keyChar: char; keyValid: bool): EscapeResult {. ...raises: [], tags: [], forbids: [].}
- Process modified key sequences: ESC[1;2A (Shift/Ctrl/Alt + key)
proc processMultiDigitFunctionKey(firstDigit, secondDigit, tilde: char; isValid: bool): EscapeResult {....raises: [], tags: [], forbids: [].}
- Process multi-digit function keys: ESC[15~ (F5-F12)
proc processSimpleBracketSequence(final: char; isValid: bool): EscapeResult {. ...raises: [], tags: [], forbids: [].}
- Process simple bracket sequences: ESC[A/H (arrow/navigation keys)
proc processSingleDigitNumeric(digit: char): EscapeResult {....raises: [], tags: [], forbids: [].}
- Process single digit numeric sequences: ESC[1~ (Home/Insert/Delete etc)
proc processVT100FunctionKey(ch: char; isValid: bool): EscapeResult {. ...raises: [], tags: [], forbids: [].}
- Process VT100 function keys: ESC O P/Q/R/S (F1-F4)