Support zero parameteter 'CSI n m' in parseOne

According to https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes,
a zero-parameter 'CSI n m' code (for setting SGR parameters) should be
treated as the same as 'CSI 0 m'.  This PR changes
escapeInterpreter.parseOne to support this shorthand.
This commit is contained in:
Niels Widger 2017-02-10 08:16:11 -05:00 committed by Roi Martin
parent 88d2b471d4
commit e27f247a3e
1 changed files with 9 additions and 6 deletions

View File

@ -28,7 +28,6 @@ const (
var (
errNotCSI = errors.New("Not a CSI escape sequence")
errCSINotANumber = errors.New("CSI escape sequence was expecting a number or a ;")
errCSIParseError = errors.New("CSI escape sequence parsing error")
errCSITooLong = errors.New("CSI escape sequence is too long")
)
@ -99,12 +98,16 @@ func (ei *escapeInterpreter) parseOne(ch rune) (isEscape bool, err error) {
}
return false, errNotCSI
case stateCSI:
if ch >= '0' && ch <= '9' {
ei.state = stateParams
ei.csiParam = append(ei.csiParam, string(ch))
return true, nil
switch {
case ch >= '0' && ch <= '9':
ei.csiParam = append(ei.csiParam, "")
case ch == 'm':
ei.csiParam = append(ei.csiParam, "0")
default:
return false, errCSIParseError
}
return false, errCSINotANumber
ei.state = stateParams
fallthrough
case stateParams:
switch {
case ch >= '0' && ch <= '9':