tipitypy/colorizer/easer.go
2025-02-15 19:21:41 +02:00

64 lines
1.7 KiB
Go

package colorizer
import (
"fmt"
"log"
)
type RuneHandler func(rune) (bool, string)
type Handler func([]rune, string) RuneHandler
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
var LeftLittleFinger = General([]rune{'z', 'a', 'q', '1', '2'}, Colors.Red())
var LeftRingFinger = General([]rune{'x', 's', 'w', '3'}, Colors.Green())
var LeftMiddleFinger = General([]rune{'c', 'd', 'e', '4'}, Colors.Yellow())
var LeftIndexFinger = General([]rune{'v', 'f', 'r', '5', 'b', 'g', 't', '6'}, Colors.Blue())
var LeftThumpFinger = General([]rune{}, "")
// Right
var RightThumpFinger = General([]rune{}, "")
var RightIndexFinger = General([]rune{'n', 'h', 'y', '7', 'm', 'j', 'u', '8'}, Colors.Blue2())
var RightMiddleFinger = General([]rune{',', 'k', 'i', '9'}, Colors.Yellow2())
var RightRingFinger = General([]rune{'.', 'l', 'o', '0'}, Colors.Green2())
var RightLittleFinger = General([]rune{'/', ';', 'p', '-', '\\', '\'', '[', ']', '='}, Colors.Red2())
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())
buffer += fmt.Sprintf("%s%c", color, r)
wasReallyAccpeted = accepted
break
}
}
if !wasReallyAccpeted {
buffer += fmt.Sprintf("%s%c", Colors.Reset(), r)
}
return buffer
}