escape_state.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package ansiterm
  2. type escapeState struct {
  3. baseState
  4. }
  5. func (escState escapeState) Handle(b byte) (s state, e error) {
  6. escState.parser.logf("escapeState::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 b == ANSI_ESCAPE_SECONDARY:
  13. return escState.parser.csiEntry, nil
  14. case b == ANSI_OSC_STRING_ENTRY:
  15. return escState.parser.oscString, nil
  16. case sliceContains(executors, b):
  17. return escState, escState.parser.execute()
  18. case sliceContains(escapeToGroundBytes, b):
  19. return escState.parser.ground, nil
  20. case sliceContains(intermeds, b):
  21. return escState.parser.escapeIntermediate, nil
  22. }
  23. return escState, nil
  24. }
  25. func (escState escapeState) Transition(s state) error {
  26. escState.parser.logf("Escape::Transition %s --> %s", escState.Name(), s.Name())
  27. escState.baseState.Transition(s)
  28. switch s {
  29. case escState.parser.ground:
  30. return escState.parser.escDispatch()
  31. case escState.parser.escapeIntermediate:
  32. return escState.parser.collectInter()
  33. }
  34. return nil
  35. }
  36. func (escState escapeState) Enter() error {
  37. escState.parser.clear()
  38. return nil
  39. }