1package ansiterm 2 3type escapeIntermediateState struct { 4 baseState 5} 6 7func (escState escapeIntermediateState) Handle(b byte) (s state, e error) { 8 escState.parser.logf("escapeIntermediateState::Handle %#x", b) 9 nextState, err := escState.baseState.Handle(b) 10 if nextState != nil || err != nil { 11 return nextState, err 12 } 13 14 switch { 15 case sliceContains(intermeds, b): 16 return escState, escState.parser.collectInter() 17 case sliceContains(executors, b): 18 return escState, escState.parser.execute() 19 case sliceContains(escapeIntermediateToGroundBytes, b): 20 return escState.parser.ground, nil 21 } 22 23 return escState, nil 24} 25 26func (escState escapeIntermediateState) Transition(s state) error { 27 escState.parser.logf("escapeIntermediateState::Transition %s --> %s", escState.Name(), s.Name()) 28 escState.baseState.Transition(s) 29 30 switch s { 31 case escState.parser.ground: 32 return escState.parser.escDispatch() 33 } 34 35 return nil 36} 37