escape_intermediate_state.go 921 B

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