123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package ansiterm
- func (ap *AnsiParser) collectParam() error {
- currChar := ap.context.currentChar
- ap.logf("collectParam %#x", currChar)
- ap.context.paramBuffer = append(ap.context.paramBuffer, currChar)
- return nil
- }
- func (ap *AnsiParser) collectInter() error {
- currChar := ap.context.currentChar
- ap.logf("collectInter %#x", currChar)
- ap.context.paramBuffer = append(ap.context.interBuffer, currChar)
- return nil
- }
- func (ap *AnsiParser) escDispatch() error {
- cmd, _ := parseCmd(*ap.context)
- intermeds := ap.context.interBuffer
- ap.logf("escDispatch currentChar: %#x", ap.context.currentChar)
- ap.logf("escDispatch: %v(%v)", cmd, intermeds)
- switch cmd {
- case "D": // IND
- return ap.eventHandler.IND()
- case "E": // NEL, equivalent to CRLF
- err := ap.eventHandler.Execute(ANSI_CARRIAGE_RETURN)
- if err == nil {
- err = ap.eventHandler.Execute(ANSI_LINE_FEED)
- }
- return err
- case "M": // RI
- return ap.eventHandler.RI()
- }
- return nil
- }
- func (ap *AnsiParser) csiDispatch() error {
- cmd, _ := parseCmd(*ap.context)
- params, _ := parseParams(ap.context.paramBuffer)
- ap.logf("Parsed params: %v with length: %d", params, len(params))
- ap.logf("csiDispatch: %v(%v)", cmd, params)
- switch cmd {
- case "@":
- return ap.eventHandler.ICH(getInt(params, 1))
- case "A":
- return ap.eventHandler.CUU(getInt(params, 1))
- case "B":
- return ap.eventHandler.CUD(getInt(params, 1))
- case "C":
- return ap.eventHandler.CUF(getInt(params, 1))
- case "D":
- return ap.eventHandler.CUB(getInt(params, 1))
- case "E":
- return ap.eventHandler.CNL(getInt(params, 1))
- case "F":
- return ap.eventHandler.CPL(getInt(params, 1))
- case "G":
- return ap.eventHandler.CHA(getInt(params, 1))
- case "H":
- ints := getInts(params, 2, 1)
- x, y := ints[0], ints[1]
- return ap.eventHandler.CUP(x, y)
- case "J":
- param := getEraseParam(params)
- return ap.eventHandler.ED(param)
- case "K":
- param := getEraseParam(params)
- return ap.eventHandler.EL(param)
- case "L":
- return ap.eventHandler.IL(getInt(params, 1))
- case "M":
- return ap.eventHandler.DL(getInt(params, 1))
- case "P":
- return ap.eventHandler.DCH(getInt(params, 1))
- case "S":
- return ap.eventHandler.SU(getInt(params, 1))
- case "T":
- return ap.eventHandler.SD(getInt(params, 1))
- case "c":
- return ap.eventHandler.DA(params)
- case "d":
- return ap.eventHandler.VPA(getInt(params, 1))
- case "f":
- ints := getInts(params, 2, 1)
- x, y := ints[0], ints[1]
- return ap.eventHandler.HVP(x, y)
- case "h":
- return ap.hDispatch(params)
- case "l":
- return ap.lDispatch(params)
- case "m":
- return ap.eventHandler.SGR(getInts(params, 1, 0))
- case "r":
- ints := getInts(params, 2, 1)
- top, bottom := ints[0], ints[1]
- return ap.eventHandler.DECSTBM(top, bottom)
- default:
- ap.logf("ERROR: Unsupported CSI command: '%s', with full context: %v", cmd, ap.context)
- return nil
- }
- }
- func (ap *AnsiParser) print() error {
- return ap.eventHandler.Print(ap.context.currentChar)
- }
- func (ap *AnsiParser) clear() error {
- ap.context = &ansiContext{}
- return nil
- }
- func (ap *AnsiParser) execute() error {
- return ap.eventHandler.Execute(ap.context.currentChar)
- }
|