Tizen_4.0 base
[platform/upstream/docker-engine.git] / vendor / github.com / Azure / go-ansiterm / states.go
1 package ansiterm
2
3 type stateID int
4
5 type state interface {
6         Enter() error
7         Exit() error
8         Handle(byte) (state, error)
9         Name() string
10         Transition(state) error
11 }
12
13 type baseState struct {
14         name   string
15         parser *AnsiParser
16 }
17
18 func (base baseState) Enter() error {
19         return nil
20 }
21
22 func (base baseState) Exit() error {
23         return nil
24 }
25
26 func (base baseState) Handle(b byte) (s state, e error) {
27
28         switch {
29         case b == CSI_ENTRY:
30                 return base.parser.csiEntry, nil
31         case b == DCS_ENTRY:
32                 return base.parser.dcsEntry, nil
33         case b == ANSI_ESCAPE_PRIMARY:
34                 return base.parser.escape, nil
35         case b == OSC_STRING:
36                 return base.parser.oscString, nil
37         case sliceContains(toGroundBytes, b):
38                 return base.parser.ground, nil
39         }
40
41         return nil, nil
42 }
43
44 func (base baseState) Name() string {
45         return base.name
46 }
47
48 func (base baseState) Transition(s state) error {
49         if s == base.parser.ground {
50                 execBytes := []byte{0x18}
51                 execBytes = append(execBytes, 0x1A)
52                 execBytes = append(execBytes, getByteRange(0x80, 0x8F)...)
53                 execBytes = append(execBytes, getByteRange(0x91, 0x97)...)
54                 execBytes = append(execBytes, 0x99)
55                 execBytes = append(execBytes, 0x9A)
56
57                 if sliceContains(execBytes, base.parser.context.currentChar) {
58                         return base.parser.execute()
59                 }
60         }
61
62         return nil
63 }
64
65 type dcsEntryState struct {
66         baseState
67 }
68
69 type errorState struct {
70         baseState
71 }