2025-02-15 18:06:22 +01:00
|
|
|
package colorizer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
)
|
|
|
|
|
2025-02-15 18:37:45 +01:00
|
|
|
type (
|
|
|
|
RuneHandler func(rune) (bool, string)
|
|
|
|
Handler func([]rune, string) RuneHandler
|
|
|
|
)
|
2025-02-15 18:06:22 +01:00
|
|
|
|
|
|
|
func General(accept []rune, color string) RuneHandler {
|
|
|
|
return func(r rune) (bool, string) {
|
|
|
|
for _, t := range accept {
|
|
|
|
if t == r {
|
|
|
|
return true, color
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false, ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Left
|
2025-02-15 18:37:45 +01:00
|
|
|
var (
|
|
|
|
LeftLittleFinger = General([]rune{'z', 'a', 'q', '1', '2'}, Colors.Red())
|
|
|
|
LeftRingFinger = General([]rune{'x', 's', 'w', '3'}, Colors.Green())
|
|
|
|
LeftMiddleFinger = General([]rune{'c', 'd', 'e', '4'}, Colors.Yellow())
|
|
|
|
LeftIndexFinger = General([]rune{'v', 'f', 'r', '5', 'b', 'g', 't', '6'}, Colors.Blue())
|
|
|
|
LeftThumpFinger = General([]rune{}, "")
|
|
|
|
)
|
2025-02-15 18:06:22 +01:00
|
|
|
|
|
|
|
// Right
|
2025-02-15 18:37:45 +01:00
|
|
|
var (
|
|
|
|
RightThumpFinger = General([]rune{}, "")
|
|
|
|
RightIndexFinger = General([]rune{'n', 'h', 'y', '7', 'm', 'j', 'u', '8'}, Colors.Blue2())
|
|
|
|
RightMiddleFinger = General([]rune{',', 'k', 'i', '9'}, Colors.Yellow2())
|
|
|
|
RightRingFinger = General([]rune{'.', 'l', 'o', '0'}, Colors.Green2())
|
|
|
|
RightLittleFinger = General([]rune{'/', ';', 'p', '-', '\\', '\'', '[', ']', '='}, Colors.Red2())
|
|
|
|
)
|
2025-02-15 18:06:22 +01:00
|
|
|
|
|
|
|
var handlers = [8]RuneHandler{
|
|
|
|
LeftLittleFinger,
|
|
|
|
LeftRingFinger,
|
|
|
|
LeftMiddleFinger,
|
|
|
|
LeftIndexFinger,
|
|
|
|
RightIndexFinger,
|
|
|
|
RightMiddleFinger,
|
|
|
|
RightRingFinger,
|
|
|
|
RightLittleFinger,
|
|
|
|
}
|
|
|
|
|
|
|
|
func Accept(r rune) string {
|
|
|
|
var buffer string
|
|
|
|
var wasReallyAccpeted bool
|
|
|
|
for i, h := range handlers {
|
|
|
|
accepted, color := h(r)
|
|
|
|
if accepted {
|
|
|
|
log.Printf("%sRune %c was accepted by handler with %d id%s", color, r, i, Colors.Reset())
|
2025-02-15 18:37:45 +01:00
|
|
|
buffer = fmt.Sprintf("%s%c", color, r)
|
2025-02-15 18:06:22 +01:00
|
|
|
wasReallyAccpeted = accepted
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !wasReallyAccpeted {
|
2025-02-15 18:37:45 +01:00
|
|
|
buffer = fmt.Sprintf("%s%c", Colors.Reset(), r)
|
2025-02-15 18:06:22 +01:00
|
|
|
}
|
|
|
|
return buffer
|
|
|
|
}
|