diff options
Diffstat (limited to 'src/table.rs')
-rw-r--r-- | src/table.rs | 135 |
1 files changed, 76 insertions, 59 deletions
diff --git a/src/table.rs b/src/table.rs index f2c0105..ac288e7 100644 --- a/src/table.rs +++ b/src/table.rs @@ -1,39 +1,20 @@ -/// This is the state change table. It's indexed first by current state and then by the next -/// character in the pty stream. -use crate::definitions::{pack, Action, State}; - use vte_generate_state_changes::generate_state_changes; +/// This is the state change table. It's indexed first by current state and then +/// by the next character in the pty stream. +use crate::definitions::{pack, Action, State}; + // Generate state changes at compile-time -pub static STATE_CHANGES: [[u8; 256]; 16] = state_changes(); +pub const STATE_CHANGES: [[u8; 256]; 13] = state_changes(); generate_state_changes!(state_changes, { - Anywhere { - 0x18 => (Ground, Execute), - 0x1a => (Ground, Execute), - 0x1b => (Escape, None), - }, - - Ground { - 0x00..=0x17 => (Anywhere, Execute), - 0x19 => (Anywhere, Execute), - 0x1c..=0x1f => (Anywhere, Execute), - 0x20..=0x7f => (Anywhere, Print), - 0x80..=0x8f => (Anywhere, Execute), - 0x91..=0x9a => (Anywhere, Execute), - 0x9c => (Anywhere, Execute), - // Beginning of UTF-8 2 byte sequence - 0xc2..=0xdf => (Utf8, BeginUtf8), - // Beginning of UTF-8 3 byte sequence - 0xe0..=0xef => (Utf8, BeginUtf8), - // Beginning of UTF-8 4 byte sequence - 0xf0..=0xf4 => (Utf8, BeginUtf8), - }, - Escape { 0x00..=0x17 => (Anywhere, Execute), + 0x18 => (Ground, Execute), 0x19 => (Anywhere, Execute), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), 0x1c..=0x1f => (Anywhere, Execute), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x20..=0x2f => (EscapeIntermediate, Collect), 0x30..=0x4f => (Ground, EscDispatch), 0x51..=0x57 => (Ground, EscDispatch), @@ -51,18 +32,24 @@ generate_state_changes!(state_changes, { EscapeIntermediate { 0x00..=0x17 => (Anywhere, Execute), + 0x18 => (Ground, Execute), 0x19 => (Anywhere, Execute), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), 0x1c..=0x1f => (Anywhere, Execute), 0x20..=0x2f => (Anywhere, Collect), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x30..=0x7e => (Ground, EscDispatch), }, CsiEntry { 0x00..=0x17 => (Anywhere, Execute), + 0x18 => (Ground, Execute), 0x19 => (Anywhere, Execute), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), 0x1c..=0x1f => (Anywhere, Execute), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x20..=0x2f => (CsiIntermediate, Collect), 0x30..=0x39 => (CsiParam, Param), 0x3a..=0x3b => (CsiParam, Param), @@ -72,20 +59,26 @@ generate_state_changes!(state_changes, { CsiIgnore { 0x00..=0x17 => (Anywhere, Execute), + 0x18 => (Ground, Execute), 0x19 => (Anywhere, Execute), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), 0x1c..=0x1f => (Anywhere, Execute), - 0x20..=0x3f => (Anywhere, Ignore), - 0x7f => (Anywhere, Ignore), + 0x20..=0x3f => (Anywhere, None), + 0x7f => (Anywhere, None), 0x40..=0x7e => (Ground, None), }, CsiParam { 0x00..=0x17 => (Anywhere, Execute), + 0x18 => (Ground, Execute), 0x19 => (Anywhere, Execute), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), 0x1c..=0x1f => (Anywhere, Execute), 0x30..=0x39 => (Anywhere, Param), 0x3a..=0x3b => (Anywhere, Param), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x3c..=0x3f => (CsiIgnore, None), 0x20..=0x2f => (CsiIntermediate, Collect), 0x40..=0x7e => (Ground, CsiDispatch), @@ -93,19 +86,25 @@ generate_state_changes!(state_changes, { CsiIntermediate { 0x00..=0x17 => (Anywhere, Execute), + 0x18 => (Ground, Execute), 0x19 => (Anywhere, Execute), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), 0x1c..=0x1f => (Anywhere, Execute), 0x20..=0x2f => (Anywhere, Collect), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x30..=0x3f => (CsiIgnore, None), 0x40..=0x7e => (Ground, CsiDispatch), }, DcsEntry { - 0x00..=0x17 => (Anywhere, Ignore), - 0x19 => (Anywhere, Ignore), - 0x1c..=0x1f => (Anywhere, Ignore), - 0x7f => (Anywhere, Ignore), + 0x00..=0x17 => (Anywhere, None), + 0x18 => (Ground, Execute), + 0x19 => (Anywhere, None), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), + 0x1c..=0x1f => (Anywhere, None), + 0x7f => (Anywhere, None), 0x20..=0x2f => (DcsIntermediate, Collect), 0x30..=0x39 => (DcsParam, Param), 0x3a..=0x3b => (DcsParam, Param), @@ -114,30 +113,39 @@ generate_state_changes!(state_changes, { }, DcsIntermediate { - 0x00..=0x17 => (Anywhere, Ignore), - 0x19 => (Anywhere, Ignore), - 0x1c..=0x1f => (Anywhere, Ignore), + 0x00..=0x17 => (Anywhere, None), + 0x18 => (Ground, Execute), + 0x19 => (Anywhere, None), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), + 0x1c..=0x1f => (Anywhere, None), 0x20..=0x2f => (Anywhere, Collect), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x30..=0x3f => (DcsIgnore, None), 0x40..=0x7e => (DcsPassthrough, None), }, DcsIgnore { - 0x00..=0x17 => (Anywhere, Ignore), - 0x19 => (Anywhere, Ignore), - 0x1c..=0x1f => (Anywhere, Ignore), - 0x20..=0x7f => (Anywhere, Ignore), + 0x00..=0x17 => (Anywhere, None), + 0x18 => (Ground, Execute), + 0x19 => (Anywhere, None), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), + 0x1c..=0x1f => (Anywhere, None), + 0x20..=0x7f => (Anywhere, None), 0x9c => (Ground, None), }, DcsParam { - 0x00..=0x17 => (Anywhere, Ignore), - 0x19 => (Anywhere, Ignore), - 0x1c..=0x1f => (Anywhere, Ignore), + 0x00..=0x17 => (Anywhere, None), + 0x18 => (Ground, Execute), + 0x19 => (Anywhere, None), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), + 0x1c..=0x1f => (Anywhere, None), 0x30..=0x39 => (Anywhere, Param), 0x3a..=0x3b => (Anywhere, Param), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x3c..=0x3f => (DcsIgnore, None), 0x20..=0x2f => (DcsIntermediate, Collect), 0x40..=0x7e => (DcsPassthrough, None), @@ -145,27 +153,36 @@ generate_state_changes!(state_changes, { DcsPassthrough { 0x00..=0x17 => (Anywhere, Put), + 0x18 => (Ground, Execute), 0x19 => (Anywhere, Put), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), 0x1c..=0x1f => (Anywhere, Put), 0x20..=0x7e => (Anywhere, Put), - 0x7f => (Anywhere, Ignore), + 0x7f => (Anywhere, None), 0x9c => (Ground, None), }, SosPmApcString { - 0x00..=0x17 => (Anywhere, Ignore), - 0x19 => (Anywhere, Ignore), - 0x1c..=0x1f => (Anywhere, Ignore), - 0x20..=0x7f => (Anywhere, Ignore), + 0x00..=0x17 => (Anywhere, None), + 0x18 => (Ground, Execute), + 0x19 => (Anywhere, None), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), + 0x1c..=0x1f => (Anywhere, None), + 0x20..=0x7f => (Anywhere, None), 0x9c => (Ground, None), }, OscString { - 0x00..=0x06 => (Anywhere, Ignore), + 0x00..=0x06 => (Anywhere, None), 0x07 => (Ground, None), - 0x08..=0x17 => (Anywhere, Ignore), - 0x19 => (Anywhere, Ignore), - 0x1c..=0x1f => (Anywhere, Ignore), + 0x08..=0x17 => (Anywhere, None), + 0x18 => (Ground, Execute), + 0x19 => (Anywhere, None), + 0x1a => (Ground, Execute), + 0x1b => (Escape, None), + 0x1c..=0x1f => (Anywhere, None), 0x20..=0xff => (Anywhere, OscPut), } }); |