0
0

add ability to configure color for ANSI highlighter

closes #123
This commit is contained in:
Marty Schoch 2014-11-19 09:27:57 -05:00
parent d452b2a10e
commit 4f61bbfede
2 changed files with 35 additions and 30 deletions

View File

@ -17,15 +17,15 @@ import (
const Name = "ansi" const Name = "ansi"
const DefaultAnsiHighlight = bgYellow const DefaultAnsiHighlight = BgYellow
type FragmentFormatter struct { type FragmentFormatter struct {
color string color string
} }
func NewFragmentFormatter() *FragmentFormatter { func NewFragmentFormatter(color string) *FragmentFormatter {
return &FragmentFormatter{ return &FragmentFormatter{
color: DefaultAnsiHighlight, color: color,
} }
} }
@ -47,7 +47,7 @@ func (a *FragmentFormatter) Format(f *highlight.Fragment, tlm search.TermLocatio
// add the term itself // add the term itself
rv += string(f.Orig[termLocation.Start:termLocation.End]) rv += string(f.Orig[termLocation.Start:termLocation.End])
// reset the color // reset the color
rv += reset rv += Reset
// update current // update current
curr = termLocation.End curr = termLocation.End
} }
@ -60,33 +60,38 @@ func (a *FragmentFormatter) Format(f *highlight.Fragment, tlm search.TermLocatio
// ANSI color control escape sequences. // ANSI color control escape sequences.
// Shamelessly copied from https://github.com/sqp/godock/blob/master/libs/log/colors.go // Shamelessly copied from https://github.com/sqp/godock/blob/master/libs/log/colors.go
const ( const (
reset = "\x1b[0m" Reset = "\x1b[0m"
bright = "\x1b[1m" Bright = "\x1b[1m"
dim = "\x1b[2m" Dim = "\x1b[2m"
underscore = "\x1b[4m" Underscore = "\x1b[4m"
blink = "\x1b[5m" Blink = "\x1b[5m"
reverse = "\x1b[7m" Reverse = "\x1b[7m"
hidden = "\x1b[8m" Hidden = "\x1b[8m"
fgBlack = "\x1b[30m" FgBlack = "\x1b[30m"
fgRed = "\x1b[31m" FgRed = "\x1b[31m"
fgGreen = "\x1b[32m" FgGreen = "\x1b[32m"
fgYellow = "\x1b[33m" FgYellow = "\x1b[33m"
fgBlue = "\x1b[34m" FgBlue = "\x1b[34m"
fgMagenta = "\x1b[35m" FgMagenta = "\x1b[35m"
fgCyan = "\x1b[36m" FgCyan = "\x1b[36m"
fgWhite = "\x1b[37m" FgWhite = "\x1b[37m"
bgBlack = "\x1b[40m" BgBlack = "\x1b[40m"
bgRed = "\x1b[41m" BgRed = "\x1b[41m"
bgGreen = "\x1b[42m" BgGreen = "\x1b[42m"
bgYellow = "\x1b[43m" BgYellow = "\x1b[43m"
bgBlue = "\x1b[44m" BgBlue = "\x1b[44m"
bgMagenta = "\x1b[45m" BgMagenta = "\x1b[45m"
bgCyan = "\x1b[46m" BgCyan = "\x1b[46m"
bgWhite = "\x1b[47m" BgWhite = "\x1b[47m"
) )
func Constructor(config map[string]interface{}, cache *registry.Cache) (highlight.FragmentFormatter, error) { func Constructor(config map[string]interface{}, cache *registry.Cache) (highlight.FragmentFormatter, error) {
return NewFragmentFormatter(), nil color := DefaultAnsiHighlight
colorVal, ok := config["color"].(string)
if ok {
color = colorVal
}
return NewFragmentFormatter(color), nil
} }
func init() { func init() {

View File

@ -26,7 +26,7 @@ const (
func TestSimpleHighlighter(t *testing.T) { func TestSimpleHighlighter(t *testing.T) {
fragmenter := sfrag.NewFragmenter(100) fragmenter := sfrag.NewFragmenter(100)
formatter := ansi.NewFragmentFormatter() formatter := ansi.NewFragmentFormatter(ansi.DefaultAnsiHighlight)
highlighter := NewHighlighter(fragmenter, formatter, defaultSeparator) highlighter := NewHighlighter(fragmenter, formatter, defaultSeparator)
docMatch := search.DocumentMatch{ docMatch := search.DocumentMatch{
@ -153,7 +153,7 @@ Etiam vel augue vel nisl commodo suscipit et ac nisl. Quisque eros diam, porttit
} }
fragmenter := sfrag.NewFragmenter(100) fragmenter := sfrag.NewFragmenter(100)
formatter := ansi.NewFragmentFormatter() formatter := ansi.NewFragmentFormatter(ansi.DefaultAnsiHighlight)
highlighter := NewHighlighter(fragmenter, formatter, defaultSeparator) highlighter := NewHighlighter(fragmenter, formatter, defaultSeparator)
fragments := highlighter.BestFragmentsInField(&docMatch, doc, "full", 5) fragments := highlighter.BestFragmentsInField(&docMatch, doc, "full", 5)