1 package ansiterm
2
3 func (ap *AnsiParser) collectParam() error {
4 currChar := ap.context.currentChar
5 ap.logf("collectParam %#x", currChar)
6 ap.context.paramBuffer = append(ap.context.paramBuffer, currChar)
7 return nil
8 }
9
10 func (ap *AnsiParser) collectInter() error {
11 currChar := ap.context.currentChar
12 ap.logf("collectInter %#x", currChar)
13 ap.context.paramBuffer = append(ap.context.interBuffer, currChar)
14 return nil
15 }
16
17 func (ap *AnsiParser) escDispatch() error {
18 cmd, _ := parseCmd(*ap.context)
19 intermeds := ap.context.interBuffer
20 ap.logf("escDispatch currentChar: %#x", ap.context.currentChar)
21 ap.logf("escDispatch: %v(%v)", cmd, intermeds)
22
23 switch cmd {
24 case "D":
25 return ap.eventHandler.IND()
26 case "E":
27 err := ap.eventHandler.Execute(ANSI_CARRIAGE_RETURN)
28 if err == nil {
29 err = ap.eventHandler.Execute(ANSI_LINE_FEED)
30 }
31 return err
32 case "M":
33 return ap.eventHandler.RI()
34 }
35
36 return nil
37 }
38
39 func (ap *AnsiParser) csiDispatch() error {
40 cmd, _ := parseCmd(*ap.context)
41 params, _ := parseParams(ap.context.paramBuffer)
42 ap.logf("Parsed params: %v with length: %d", params, len(params))
43
44 ap.logf("csiDispatch: %v(%v)", cmd, params)
45
46 switch cmd {
47 case "@":
48 return ap.eventHandler.ICH(getInt(params, 1))
49 case "A":
50 return ap.eventHandler.CUU(getInt(params, 1))
51 case "B":
52 return ap.eventHandler.CUD(getInt(params, 1))
53 case "C":
54 return ap.eventHandler.CUF(getInt(params, 1))
55 case "D":
56 return ap.eventHandler.CUB(getInt(params, 1))
57 case "E":
58 return ap.eventHandler.CNL(getInt(params, 1))
59 case "F":
60 return ap.eventHandler.CPL(getInt(params, 1))
61 case "G":
62 return ap.eventHandler.CHA(getInt(params, 1))
63 case "H":
64 ints := getInts(params, 2, 1)
65 x, y := ints[0], ints[1]
66 return ap.eventHandler.CUP(x, y)
67 case "J":
68 param := getEraseParam(params)
69 return ap.eventHandler.ED(param)
70 case "K":
71 param := getEraseParam(params)
72 return ap.eventHandler.EL(param)
73 case "L":
74 return ap.eventHandler.IL(getInt(params, 1))
75 case "M":
76 return ap.eventHandler.DL(getInt(params, 1))
77 case "P":
78 return ap.eventHandler.DCH(getInt(params, 1))
79 case "S":
80 return ap.eventHandler.SU(getInt(params, 1))
81 case "T":
82 return ap.eventHandler.SD(getInt(params, 1))
83 case "c":
84 return ap.eventHandler.DA(params)
85 case "d":
86 return ap.eventHandler.VPA(getInt(params, 1))
87 case "f":
88 ints := getInts(params, 2, 1)
89 x, y := ints[0], ints[1]
90 return ap.eventHandler.HVP(x, y)
91 case "h":
92 return ap.hDispatch(params)
93 case "l":
94 return ap.lDispatch(params)
95 case "m":
96 return ap.eventHandler.SGR(getInts(params, 1, 0))
97 case "r":
98 ints := getInts(params, 2, 1)
99 top, bottom := ints[0], ints[1]
100 return ap.eventHandler.DECSTBM(top, bottom)
101 default:
102 ap.logf("ERROR: Unsupported CSI command: '%s', with full context: %v", cmd, ap.context)
103 return nil
104 }
105
106 }
107
108 func (ap *AnsiParser) print() error {
109 return ap.eventHandler.Print(ap.context.currentChar)
110 }
111
112 func (ap *AnsiParser) clear() error {
113 ap.context = &ansiContext{}
114 return nil
115 }
116
117 func (ap *AnsiParser) execute() error {
118 return ap.eventHandler.Execute(ap.context.currentChar)
119 }
120
View as plain text