mirror of
				https://github.com/cheat/cheat.git
				synced 2025-11-04 07:45:28 +01:00 
			
		
		
		
	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:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								internal/sheet/colorize.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								internal/sheet/colorize.go
									
									
									
									
									
										Normal 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()
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user