mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-26 05:33:43 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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)
 | |
| }
 | 
