1
- package main
1
+ package main //nolint:revive
2
2
3
3
import (
4
4
"fmt"
@@ -19,17 +19,6 @@ type dispatcher struct {
19
19
bgWidth int
20
20
}
21
21
22
- func (p * dispatcher ) dispatch (s ansi.Sequence ) {
23
- switch s := s .(type ) {
24
- case ansi.Rune :
25
- p .Print (rune (s ))
26
- case ansi.ControlCode :
27
- p .Execute (byte (s ))
28
- case ansi.CsiSequence :
29
- p .CsiDispatch (s )
30
- }
31
- }
32
-
33
22
func (p * dispatcher ) Print (r rune ) {
34
23
p .row = clamp (p .row , 0 , len (p .lines )- 1 )
35
24
// insert the rune in the last tspan
@@ -109,8 +98,8 @@ func (p *dispatcher) endBackground() {
109
98
p .bgWidth = 0
110
99
}
111
100
112
- func (p * dispatcher ) CsiDispatch (s ansi.CsiSequence ) {
113
- if s . Cmd != 'm' {
101
+ func (p * dispatcher ) CsiDispatch (cmd ansi.Cmd , params ansi. Params ) {
102
+ if cmd != 'm' {
114
103
// ignore incomplete or non Style (SGR) sequences
115
104
return
116
105
}
@@ -121,19 +110,21 @@ func (p *dispatcher) CsiDispatch(s ansi.CsiSequence) {
121
110
// reset ANSI, this is done by creating a new empty tspan,
122
111
// which would reset all the styles such that when text is appended to the last
123
112
// child of this line there is no styling applied.
124
- p .lines [p .row ].AddChild (span )
113
+ if p .row < len (p .lines ) {
114
+ p .lines [p .row ].AddChild (span )
115
+ }
125
116
p .endBackground ()
126
117
}
127
118
128
- if len (s . Params ) == 0 {
119
+ if len (params ) == 0 {
129
120
// zero params means reset
130
121
reset ()
131
122
return
132
123
}
133
124
134
125
var i int
135
- for i < len (s . Params ) {
136
- v := s .Param (i )
126
+ for i < len (params ) {
127
+ v := params [ i ] .Param (0 )
137
128
switch v {
138
129
case 0 :
139
130
reset ()
@@ -154,29 +145,29 @@ func (p *dispatcher) CsiDispatch(s ansi.CsiSequence) {
154
145
p .lines [p .row ].AddChild (span )
155
146
case 38 :
156
147
i ++
157
- switch s . Param ( i ) {
148
+ switch params [ i ] {
158
149
case 5 :
159
- n := s . Param ( i + 1 )
150
+ n := params [ i + 1 ]
160
151
i ++
161
152
fill := palette [n ]
162
153
span .CreateAttr ("fill" , fill )
163
154
p .lines [p .row ].AddChild (span )
164
155
case 2 :
165
- span .CreateAttr ("fill" , fmt .Sprintf ("#%02x%02x%02x" , s . Param ( i + 1 ), s . Param ( i + 2 ), s . Param ( i + 3 ) ))
156
+ span .CreateAttr ("fill" , fmt .Sprintf ("#%02x%02x%02x" , params [ i + 1 ], params [ i + 2 ], params [ i + 3 ] ))
166
157
p .lines [p .row ].AddChild (span )
167
158
i += 3
168
159
}
169
160
case 48 :
170
161
p .endBackground ()
171
162
i ++
172
- switch s . Param ( i ) {
163
+ switch params [ i ] {
173
164
case 5 :
174
- n := s . Param ( i + 1 )
165
+ n := params [ i + 1 ]
175
166
i ++
176
167
fill := palette [n ]
177
168
p .beginBackground (fill )
178
169
case 2 :
179
- fill := fmt .Sprintf ("#%02x%02x%02x" , s . Param ( i + 1 ), s . Param ( i + 2 ), s . Param ( i + 3 ) )
170
+ fill := fmt .Sprintf ("#%02x%02x%02x" , params [ i + 1 ], params [ i + 2 ], params [ i + 3 ] )
180
171
p .beginBackground (fill )
181
172
i += 3
182
173
}
0 commit comments