package parse import ( "mayhem-party/src/device/input/button" "mayhem-party/src/device/input/raw" "os" ) var ( FlagParsePlaintextRelease = os.Getenv("PARSE_PLAINTEXT_RELEASE") ) type Plaintext struct { src raw.Raw release byte } func NewPlaintext(src raw.Raw) Plaintext { releaseChar := byte('!') if FlagParsePlaintextRelease != "" { releaseChar = byte(FlagParsePlaintextRelease[0]) } return Plaintext{ src: src, release: releaseChar, } } func (p Plaintext) Close() { p.src.Close() } func (p Plaintext) CloseWrap() raw.Raw { return p.src } func (p Plaintext) Read() []button.Button { b := p.src.Read() buttons := make([]button.Button, 0, len(b)) down := true for i := range b { if b[i] == p.release { down = false } else { if b[i] != '\n' { buttons = append(buttons, button.Button{Char: b[i], Down: down}) } down = true } } return buttons }