nerd font support

This commit is contained in:
Lorenz Hohermuth 2024-02-26 15:14:33 +01:00
parent ab9eb8e798
commit 4495384772
6 changed files with 9277 additions and 5 deletions

View File

@ -6,6 +6,7 @@ package cmd
import (
"fmt"
"github.com/LorenzHohermuth/cli-shapes/internal/generated"
"github.com/LorenzHohermuth/cli-shapes/internal/nerdfont"
"github.com/LorenzHohermuth/cli-shapes/pkg/canvas"
"github.com/LorenzHohermuth/cli-shapes/pkg/image"
@ -24,10 +25,14 @@ This application is a tool to generate the needed files
to quickly create a Cobra application.`,
Run: func(cmd *cobra.Command, args []string) {
icons := nerdfont.ParseFile("./nerd-font-icons")
f := generated.CreatFile("nerdFont")
defer generated.CloseFile(f)
for i, v := range icons {
fmt.Printf("%g %% %s\n", (float64(i) + 1) / float64(len(icons)) * 100, v)
path := canvas.CharacterAnalyse(v)
image.ImageToPixles(path)
img := image.ImageToPixles(path)
line := fmt.Sprintf("\t\"%s\":%g,", v, image.GetBrightness(img))
generated.AddToFile(line, f)
}
},
}

View File

@ -7,7 +7,7 @@ import (
"fmt"
"github.com/LorenzHohermuth/cli-shapes/internal/color"
"github.com/LorenzHohermuth/cli-shapes/internal/renderer"
"github.com/LorenzHohermuth/cli-shapes/internal/generated"
"github.com/LorenzHohermuth/cli-shapes/pkg/image"
"github.com/spf13/cobra"
)
@ -31,7 +31,7 @@ to quickly create a Cobra application.`,
for _, y := range pix {
for _, x := range y {
color, non := color.GetTrueColor([3]int{x.R, x.G, x.B})
char := renderer.GetChar(x.Brightness())
char := generated.GetChar(x.Brightness())
s += color + char + non
}
s += "\n"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
package generated
import (
"math"
"math/rand/v2"
"os"
)
func CreatFile(name string) *os.File {
fileName := "internal/generated/gen-" + name + ".go"
_ = os.Remove(fileName)
f, err := os.Create(fileName)
check(err)
_, err = f.WriteString("package generated\n\nvar " + name + " = map[string]float64{\n")
check(err)
return f
}
func AddToFile(line string, file *os.File) {
_, err := file.WriteString(line + "\n")
check(err)
}
func CloseFile(f *os.File) {
_, err := f.WriteString("}")
check(err)
f.Close()
}
func check(err error) {
if err != nil {
panic(err)
}
}
func GetChar(brightness float64) string {
chars := []string{" "}
var delta float64 = 1
for k, v := range nerdFont {
otherDelta := math.Abs(v - brightness)
if (otherDelta < delta) {
delta = otherDelta
chars = []string{k}
}
if (otherDelta == delta) {
chars = append(chars, k)
}
}
return chars[rand.IntN(len(chars))]
}

View File

@ -5,10 +5,8 @@ package main
import (
"github.com/LorenzHohermuth/cli-shapes/cmd"
"github.com/LorenzHohermuth/cli-shapes/pkg/canvas"
)
func main() {
canvas.CharacterAnalyse("")
cmd.Execute()
}

View File

@ -42,3 +42,22 @@ func check(err error) {
panic(err)
}
}
func GetBrightness(img [][]Pixel) float64 {
amountOfPixels := 0
avgR, avgG, avgB, avgA := 0, 0, 0, 0
for _, y := range img {
for _, x := range y {
avgR += x.R
avgG += x.G
avgB += x.B
avgA += x.A
amountOfPixels++
}
}
return Pixel{avgR / amountOfPixels,
avgG / amountOfPixels,
avgB / amountOfPixels,
avgA / amountOfPixels}.Brightness()
}