64 lines
1.7 KiB
Go
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
|
||
|
}
|