chore: DRY out colorization code

Creates a `sheet.Colorize` method that DRYs out code that was duplicated
among `cmd_search` and `cmd_view`.
This commit is contained in:
Chris Lane 2020-02-15 16:11:15 -05:00
parent bc623da74b
commit 87cba04ff2
3 changed files with 43 additions and 44 deletions

View File

@ -1,13 +1,11 @@
package main
import (
"bytes"
"fmt"
"os"
"regexp"
"strings"
"github.com/alecthomas/chroma/quick"
"github.com/cheat/cheat/internal/config"
"github.com/cheat/cheat/internal/sheet"
"github.com/cheat/cheat/internal/sheets"
@ -85,23 +83,7 @@ func cmdSearch(opts map[string]interface{}, conf config.Config) {
// if colorization was requested, apply it here
if conf.Color(opts) {
// if the syntax was not specified, default to bash
lex := sheet.Syntax
if lex == "" {
lex = "bash"
}
var buf bytes.Buffer
err = quick.Highlight(
&buf,
sheet.Text,
lex,
conf.Formatter,
conf.Style,
)
sheet.Text = buf.String()
sheet.Colorize(conf)
}
// output the cheatsheet title

View File

@ -5,8 +5,6 @@ import (
"os"
"strings"
"github.com/alecthomas/chroma/quick"
"github.com/cheat/cheat/internal/config"
"github.com/cheat/cheat/internal/sheets"
)
@ -43,29 +41,11 @@ func cmdView(opts map[string]interface{}, conf config.Config) {
os.Exit(0)
}
if !conf.Color(opts) {
fmt.Print(sheet.Text)
os.Exit(0)
// apply colorization if requested
if conf.Color(opts) {
sheet.Colorize(conf)
}
// otherwise, colorize the output
// if the syntax was not specified, default to bash
lex := sheet.Syntax
if lex == "" {
lex = "bash"
}
// apply syntax highlighting
err = quick.Highlight(
os.Stdout,
sheet.Text,
lex,
conf.Formatter,
conf.Style,
)
// if colorization somehow failed, output non-colorized text
if err != nil {
fmt.Print(sheet.Text)
}
// display the cheatsheet
fmt.Print(sheet.Text)
}

View File

@ -0,0 +1,37 @@
package sheet
import (
"bytes"
"github.com/cheat/cheat/internal/config"
"github.com/alecthomas/chroma/quick"
)
// Colorize applies syntax-highlighting to a cheatsheet's Text.
func (s *Sheet) Colorize(conf config.Config) {
// if the syntax was not specified, default to bash
lex := s.Syntax
if lex == "" {
lex = "bash"
}
// write colorized text into a buffer
var buf bytes.Buffer
err := quick.Highlight(
&buf,
s.Text,
lex,
conf.Formatter,
conf.Style,
)
// if colorization somehow failed, do nothing
if err != nil {
return
}
// otherwise, swap the cheatsheet's Text with its colorized equivalent
s.Text = buf.String()
}