package colorizer import ( "fmt" "log" ) type ( RuneHandler func(rune) (bool, string) 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()) 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{}, "") ) // Right 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()) ) 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 }