handle unusual escape codes in files
This commit is contained in:
parent
bfd33f8437
commit
217d89ff96
149
ui.go
149
ui.go
@ -111,83 +111,84 @@ func (win *Win) print(x, y int, fg, bg termbox.Attribute, s string) {
|
|||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
r, w := utf8.DecodeRuneInString(s[i:])
|
r, w := utf8.DecodeRuneInString(s[i:])
|
||||||
|
|
||||||
if r == EscapeCode {
|
if r == EscapeCode && i+1 < len(s) && s[i+1] == '[' {
|
||||||
i++
|
j := strings.IndexByte(s[i:min(len(s), i+8)], 'm')
|
||||||
if s[i] == '[' {
|
|
||||||
j := strings.IndexByte(s[i:], 'm')
|
|
||||||
|
|
||||||
toks := strings.Split(s[i+1:i+j], ";")
|
if j == -1 {
|
||||||
|
|
||||||
var nums []int
|
|
||||||
for _, t := range toks {
|
|
||||||
if t == "" {
|
|
||||||
fg = termbox.ColorDefault
|
|
||||||
bg = termbox.ColorDefault
|
|
||||||
break
|
|
||||||
}
|
|
||||||
n, err := strconv.Atoi(t)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("converting escape code: %s", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
nums = append(nums, n)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, n := range nums {
|
|
||||||
if 30 <= n && n <= 37 {
|
|
||||||
fg = termbox.ColorDefault
|
|
||||||
}
|
|
||||||
if 40 <= n && n <= 47 {
|
|
||||||
bg = termbox.ColorDefault
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, n := range nums {
|
|
||||||
switch n {
|
|
||||||
case 1:
|
|
||||||
fg = fg | termbox.AttrBold
|
|
||||||
case 4:
|
|
||||||
fg = fg | termbox.AttrUnderline
|
|
||||||
case 7:
|
|
||||||
fg = fg | termbox.AttrReverse
|
|
||||||
case 30:
|
|
||||||
fg = fg | termbox.ColorBlack
|
|
||||||
case 31:
|
|
||||||
fg = fg | termbox.ColorRed
|
|
||||||
case 32:
|
|
||||||
fg = fg | termbox.ColorGreen
|
|
||||||
case 33:
|
|
||||||
fg = fg | termbox.ColorYellow
|
|
||||||
case 34:
|
|
||||||
fg = fg | termbox.ColorBlue
|
|
||||||
case 35:
|
|
||||||
fg = fg | termbox.ColorMagenta
|
|
||||||
case 36:
|
|
||||||
fg = fg | termbox.ColorCyan
|
|
||||||
case 37:
|
|
||||||
fg = fg | termbox.ColorWhite
|
|
||||||
case 40:
|
|
||||||
bg = bg | termbox.ColorBlack
|
|
||||||
case 41:
|
|
||||||
bg = bg | termbox.ColorRed
|
|
||||||
case 42:
|
|
||||||
bg = bg | termbox.ColorGreen
|
|
||||||
case 43:
|
|
||||||
bg = bg | termbox.ColorYellow
|
|
||||||
case 44:
|
|
||||||
bg = bg | termbox.ColorBlue
|
|
||||||
case 45:
|
|
||||||
bg = bg | termbox.ColorMagenta
|
|
||||||
case 46:
|
|
||||||
bg = bg | termbox.ColorCyan
|
|
||||||
case 47:
|
|
||||||
bg = bg | termbox.ColorWhite
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i = i + j
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toks := strings.Split(s[i+2:i+j], ";")
|
||||||
|
|
||||||
|
var nums []int
|
||||||
|
for _, t := range toks {
|
||||||
|
if t == "" {
|
||||||
|
fg = termbox.ColorDefault
|
||||||
|
bg = termbox.ColorDefault
|
||||||
|
break
|
||||||
|
}
|
||||||
|
n, err := strconv.Atoi(t)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("converting escape code: %s", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
nums = append(nums, n)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, n := range nums {
|
||||||
|
if 30 <= n && n <= 37 {
|
||||||
|
fg = termbox.ColorDefault
|
||||||
|
}
|
||||||
|
if 40 <= n && n <= 47 {
|
||||||
|
bg = termbox.ColorDefault
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, n := range nums {
|
||||||
|
switch n {
|
||||||
|
case 1:
|
||||||
|
fg = fg | termbox.AttrBold
|
||||||
|
case 4:
|
||||||
|
fg = fg | termbox.AttrUnderline
|
||||||
|
case 7:
|
||||||
|
fg = fg | termbox.AttrReverse
|
||||||
|
case 30:
|
||||||
|
fg = fg | termbox.ColorBlack
|
||||||
|
case 31:
|
||||||
|
fg = fg | termbox.ColorRed
|
||||||
|
case 32:
|
||||||
|
fg = fg | termbox.ColorGreen
|
||||||
|
case 33:
|
||||||
|
fg = fg | termbox.ColorYellow
|
||||||
|
case 34:
|
||||||
|
fg = fg | termbox.ColorBlue
|
||||||
|
case 35:
|
||||||
|
fg = fg | termbox.ColorMagenta
|
||||||
|
case 36:
|
||||||
|
fg = fg | termbox.ColorCyan
|
||||||
|
case 37:
|
||||||
|
fg = fg | termbox.ColorWhite
|
||||||
|
case 40:
|
||||||
|
bg = bg | termbox.ColorBlack
|
||||||
|
case 41:
|
||||||
|
bg = bg | termbox.ColorRed
|
||||||
|
case 42:
|
||||||
|
bg = bg | termbox.ColorGreen
|
||||||
|
case 43:
|
||||||
|
bg = bg | termbox.ColorYellow
|
||||||
|
case 44:
|
||||||
|
bg = bg | termbox.ColorBlue
|
||||||
|
case 45:
|
||||||
|
bg = bg | termbox.ColorMagenta
|
||||||
|
case 46:
|
||||||
|
bg = bg | termbox.ColorCyan
|
||||||
|
case 47:
|
||||||
|
bg = bg | termbox.ColorWhite
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i += j
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if x >= win.w {
|
if x >= win.w {
|
||||||
|
Loading…
Reference in New Issue
Block a user