Skip to content

Commit 0899b7a

Browse files
authored
Merge pull request #40 from koki-develop/refactor
2 parents 1e2e112 + cbc2cb0 commit 0899b7a

File tree

16 files changed

+458
-318
lines changed

16 files changed

+458
-318
lines changed

β€Žcmd/flags.goβ€Ž

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package cmd
2+
3+
import "os"
4+
5+
func envOrDefault(key, def string) string {
6+
if v := os.Getenv(key); v != "" {
7+
return v
8+
}
9+
return def
10+
}
11+
12+
var (
13+
// --lang
14+
flagLang string
15+
16+
// --format
17+
flagFormat string
18+
flagFormatDefault = envOrDefault("GAT_FORMAT", "terminal256")
19+
20+
// --theme
21+
flagTheme string
22+
flagThemeDefault = envOrDefault("GAT_THEME", "monokai")
23+
24+
// --force-color
25+
flagForceColor bool
26+
27+
// --pretty
28+
flagPretty bool
29+
30+
// --list-langs
31+
flagListLangs bool
32+
33+
// --list-formats
34+
flagListFormats bool
35+
36+
// --list-themes
37+
flagListThemes bool
38+
)
39+
40+
func init() {
41+
rootCmd.Flags().StringVarP(&flagLang, "lang", "l", "", "language for syntax highlighting")
42+
rootCmd.Flags().StringVarP(&flagFormat, "format", "f", flagFormatDefault, "output format")
43+
rootCmd.Flags().StringVarP(&flagTheme, "theme", "t", flagThemeDefault, "highlight theme")
44+
rootCmd.Flags().BoolVarP(&flagForceColor, "force-color", "c", false, "force colored output")
45+
46+
rootCmd.Flags().BoolVarP(&flagPretty, "pretty", "p", false, "whether to format a content pretty")
47+
48+
rootCmd.Flags().BoolVar(&flagListLangs, "list-langs", false, "print a list of supported languages for syntax highlighting")
49+
rootCmd.Flags().BoolVar(&flagListFormats, "list-formats", false, "print a list of supported output formats")
50+
rootCmd.Flags().BoolVar(&flagListThemes, "list-themes", false, "print a list of supported themes with preview")
51+
rootCmd.MarkFlagsMutuallyExclusive("list-langs", "list-formats", "list-themes")
52+
}

β€Žcmd/root.goβ€Ž

Lines changed: 20 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,25 @@ package cmd
22

33
import (
44
"os"
5-
"runtime/debug"
65
"strings"
76

8-
"github.com/koki-develop/gat/internal/printer"
7+
"github.com/koki-develop/gat/internal/gat"
98
"github.com/spf13/cobra"
109
"golang.org/x/term"
1110
)
1211

13-
var (
14-
version string
15-
16-
flagLang string
17-
flagFormat string
18-
flagTheme string
19-
20-
flagPretty bool
21-
22-
flagListLangs bool
23-
flagListFormats bool
24-
flagListThemes bool
25-
26-
flagForceColor bool
27-
)
28-
2912
var rootCmd = &cobra.Command{
3013
Use: "gat [file]...",
3114
Short: "cat alternative written in Go",
3215
Long: "cat alternative written in Go.",
3316
RunE: func(cmd *cobra.Command, args []string) error {
3417
switch {
3518
case flagListLangs:
36-
printer.PrintLangs()
37-
return nil
19+
return gat.PrintLanguages(os.Stdout)
3820
case flagListFormats:
39-
printer.PrintFormats()
40-
return nil
21+
return gat.PrintFormats(os.Stdout)
4122
case flagListThemes:
42-
printer.PrintThemes()
43-
return nil
23+
return gat.PrintThemes(os.Stdout)
4424
}
4525

4626
if strings.HasPrefix(flagFormat, "terminal") {
@@ -50,27 +30,27 @@ var rootCmd = &cobra.Command{
5030
}
5131
}
5232

53-
p := printer.New(&printer.PrinterConfig{
54-
Lang: flagLang,
55-
Format: flagFormat,
56-
Theme: flagTheme,
57-
Pretty: flagPretty,
33+
g, err := gat.New(&gat.Config{
34+
Language: flagLang,
35+
Format: flagFormat,
36+
Theme: flagTheme,
5837
})
38+
if err != nil {
39+
return err
40+
}
5941

6042
if len(args) == 0 {
61-
if err := p.Print(os.Stdin, os.Stdout); err != nil {
43+
return g.Print(os.Stdout, os.Stdin, gat.WithPretty(flagPretty))
44+
}
45+
46+
for _, filename := range args {
47+
f, err := os.Open(filename)
48+
if err != nil {
6249
return err
6350
}
64-
} else {
65-
for _, filename := range args {
66-
f, err := os.Open(filename)
67-
if err != nil {
68-
return err
69-
}
70-
defer f.Close()
71-
if err := p.Print(f, os.Stdout, printer.WithFilename(filename)); err != nil {
72-
return err
73-
}
51+
defer f.Close()
52+
if err := g.Print(os.Stdout, f, gat.WithPretty(flagPretty), gat.WithFilename(filename)); err != nil {
53+
return err
7454
}
7555
}
7656

@@ -84,27 +64,3 @@ func Execute() {
8464
os.Exit(1)
8565
}
8666
}
87-
88-
func init() {
89-
// version
90-
if version == "" {
91-
if info, ok := debug.ReadBuildInfo(); ok {
92-
version = info.Main.Version
93-
}
94-
}
95-
96-
rootCmd.Version = version
97-
98-
// flags
99-
rootCmd.Flags().StringVarP(&flagLang, "lang", "l", "", "language for syntax highlighting")
100-
rootCmd.Flags().StringVarP(&flagFormat, "format", "f", printer.DefaultFormat, "output format")
101-
rootCmd.Flags().StringVarP(&flagTheme, "theme", "t", printer.DefaultTheme, "highlight theme")
102-
rootCmd.Flags().BoolVarP(&flagForceColor, "force-color", "c", false, "force colored output")
103-
104-
rootCmd.Flags().BoolVarP(&flagPretty, "pretty", "p", false, "whether to format a content pretty")
105-
106-
rootCmd.Flags().BoolVar(&flagListLangs, "list-langs", false, "print a list of supported languages for syntax highlighting")
107-
rootCmd.Flags().BoolVar(&flagListFormats, "list-formats", false, "print a list of supported output formats")
108-
rootCmd.Flags().BoolVar(&flagListThemes, "list-themes", false, "print a list of supported themes with preview")
109-
rootCmd.MarkFlagsMutuallyExclusive("list-langs", "list-formats", "list-themes")
110-
}

β€Žcmd/version.goβ€Ž

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package cmd
2+
3+
import "runtime/debug"
4+
5+
var version string
6+
7+
func init() {
8+
if version == "" {
9+
if info, ok := debug.ReadBuildInfo(); ok {
10+
version = info.Main.Version
11+
}
12+
}
13+
rootCmd.Version = version
14+
}

β€Ždocs/update.goβ€Ž

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import (
66
"os"
77
"strings"
88

9-
"github.com/alecthomas/chroma/v2/formatters"
10-
"github.com/alecthomas/chroma/v2/lexers"
11-
"github.com/alecthomas/chroma/v2/styles"
12-
"github.com/koki-develop/gat/internal/printer"
9+
"github.com/koki-develop/gat/internal/formatters"
10+
"github.com/koki-develop/gat/internal/gat"
11+
"github.com/koki-develop/gat/internal/lexers"
12+
"github.com/koki-develop/gat/internal/styles"
1313
)
1414

1515
var (
@@ -62,7 +62,7 @@ func updateLanguages() {
6262
Must(f.WriteString("| Language | Aliases |\n"))
6363
Must(f.WriteString("| --- | --- |\n"))
6464

65-
for _, l := range lexers.GlobalLexerRegistry.Lexers {
65+
for _, l := range lexers.List() {
6666
cfg := l.Config()
6767
Must(f.WriteString(fmt.Sprintf("| `%s` ", cfg.Name)))
6868

@@ -92,21 +92,22 @@ func updateFormats() {
9292

9393
Must(f.WriteString("# Output Formats\n\n"))
9494

95-
for _, format := range formatters.Names() {
95+
for _, format := range formatters.List() {
9696
Must(f.WriteString(fmt.Sprintf("- [`%s`](#%s)\n", format, format)))
9797
}
9898
Must(f.WriteString("\n"))
9999

100-
for _, format := range formatters.Names() {
100+
for _, format := range formatters.List() {
101101
Must(f.WriteString(fmt.Sprintf("## `%s`\n\n", format)))
102102

103-
p := printer.New(&printer.PrinterConfig{
104-
Format: format,
105-
Theme: printer.DefaultTheme,
106-
})
103+
g := Must(gat.New(&gat.Config{
104+
Format: format,
105+
Theme: "monokai",
106+
Language: "go",
107+
}))
107108

108109
b := new(bytes.Buffer)
109-
OrPanic(p.Print(strings.NewReader(src), b, printer.WithFilename("main.go")))
110+
OrPanic(g.Print(b, strings.NewReader(src)))
110111

111112
Must(f.WriteString(fmt.Sprintf("```%s\n", strings.TrimSuffix(format, "-min"))))
112113
if strings.HasPrefix(format, "terminal") {
@@ -127,21 +128,22 @@ func updateThemes() {
127128

128129
Must(f.WriteString("# Highlight Themes\n\n"))
129130

130-
for _, s := range styles.Names() {
131+
for _, s := range styles.List() {
131132
Must(f.WriteString(fmt.Sprintf("- [`%s`](#%s)\n", s, s)))
132133
}
133134
Must(f.WriteString("\n"))
134135

135-
for _, s := range styles.Names() {
136+
for _, s := range styles.List() {
136137
Must(f.WriteString(fmt.Sprintf("## `%s`\n\n", s)))
137138

138-
p := printer.New(&printer.PrinterConfig{
139-
Format: "svg",
140-
Theme: s,
141-
})
139+
g := Must(gat.New(&gat.Config{
140+
Format: "svg",
141+
Theme: s,
142+
Language: "go",
143+
}))
142144

143145
b := new(bytes.Buffer)
144-
OrPanic(p.Print(strings.NewReader(src), b, printer.WithFilename("main.go")))
146+
OrPanic(g.Print(b, strings.NewReader(src)))
145147

146148
img := Must(os.Create(fmt.Sprintf("./docs/themes/%s.svg", s)))
147149
defer img.Close()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package formatters
2+
3+
import (
4+
"github.com/alecthomas/chroma/v2"
5+
"github.com/alecthomas/chroma/v2/formatters"
6+
)
7+
8+
func Get(name string) (chroma.Formatter, bool) {
9+
f, ok := formatters.Registry[name]
10+
return f, ok
11+
}
12+
13+
func List() []string {
14+
return formatters.Names()
15+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package formatter
1+
package formatters
22

33
import (
44
"bytes"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package formatter
1+
package formatters
22

33
import (
44
"bytes"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package formatter
1+
package formatters
22

33
var (
44
mimeTypeHTML = "text/html"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package formatter
1+
package formatters
22

33
import (
44
"bytes"

0 commit comments

Comments
Β (0)