26 Star 68 Fork 11

astaxie / bat

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
color.go 2.85 KB
一键复制 编辑 原始数据 按行查看 历史
astaxie 提交于 2015-04-18 09:28 . support json response colorful fix #12
package main
import (
"fmt"
"strings"
)
const (
Gray = uint8(iota + 90)
Red
Green
Yellow
Blue
Magenta
Cyan
White
EndColor = "\033[0m"
)
func Color(str string, color uint8) string {
return fmt.Sprintf("%s%s%s", ColorStart(color), str, EndColor)
}
func ColorStart(color uint8) string {
return fmt.Sprintf("\033[%dm", color)
}
func ColorfulRequest(str string) string {
lines := strings.Split(str, "\n")
if printV == "A" || printV == "H" {
strs := strings.Split(lines[0], " ")
strs[0] = Color(strs[0], Magenta)
strs[1] = Color(strs[1], Cyan)
strs[2] = Color(strs[2], Magenta)
lines[0] = strings.Join(strs, " ")
}
for i, line := range lines[1:] {
substr := strings.Split(line, ":")
if len(substr) < 2 {
continue
}
substr[0] = Color(substr[0], Gray)
substr[1] = Color(strings.Join(substr[1:], ":"), Cyan)
lines[i+1] = strings.Join(substr[:2], ":")
}
return strings.Join(lines, "\n")
}
func ColorfulResponse(str, contenttype string) string {
if strings.Contains(contenttype, contentJsonRegex) {
str = ColorfulJson(str)
} else {
str = ColorfulHTML(str)
}
return str
}
func ColorfulJson(str string) string {
var rsli []rune
var key, val, startcolor, endcolor, startsemicolon bool
for _, char := range []rune(str) {
switch char {
case ' ':
rsli = append(rsli, char)
case '{':
startcolor = true
key = true
val = false
rsli = append(rsli, char)
case '}':
startcolor = false
endcolor = false
key = false
val = false
rsli = append(rsli, char)
case '"':
if startcolor {
rsli = append(rsli, char)
if key {
rsli = append(rsli, []rune(ColorStart(Magenta))...)
} else if val {
rsli = append(rsli, []rune(ColorStart(Cyan))...)
}
startsemicolon = true
key = false
val = false
startcolor = false
} else {
rsli = append(rsli, []rune(EndColor)...)
rsli = append(rsli, char)
endcolor = true
startsemicolon = false
}
case ',':
if !startsemicolon {
startcolor = true
key = true
val = false
if !endcolor {
rsli = append(rsli, []rune(EndColor)...)
endcolor = true
}
}
rsli = append(rsli, char)
case ':':
if !startsemicolon {
key = false
val = true
startcolor = true
if !endcolor {
rsli = append(rsli, []rune(EndColor)...)
endcolor = true
}
}
rsli = append(rsli, char)
case '\n', '\r', '[', ']':
rsli = append(rsli, char)
default:
if !startsemicolon {
if key && startcolor {
rsli = append(rsli, []rune(ColorStart(Magenta))...)
key = false
startcolor = false
endcolor = false
}
if val && startcolor {
rsli = append(rsli, []rune(ColorStart(Cyan))...)
val = false
startcolor = false
endcolor = false
}
}
rsli = append(rsli, char)
}
}
return string(rsli)
}
func ColorfulHTML(str string) string {
return Color(str, Green)
}
Go
1
https://gitee.com/astaxie/bat.git
git@gitee.com:astaxie/bat.git
astaxie
bat
bat
master

搜索帮助