mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 08:03:43 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package ansiterm
 | |
| 
 | |
| type stateID int
 | |
| 
 | |
| type state interface {
 | |
| 	Enter() error
 | |
| 	Exit() error
 | |
| 	Handle(byte) (state, error)
 | |
| 	Name() string
 | |
| 	Transition(state) error
 | |
| }
 | |
| 
 | |
| type baseState struct {
 | |
| 	name   string
 | |
| 	parser *AnsiParser
 | |
| }
 | |
| 
 | |
| func (base baseState) Enter() error {
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (base baseState) Exit() error {
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (base baseState) Handle(b byte) (s state, e error) {
 | |
| 
 | |
| 	switch {
 | |
| 	case b == CSI_ENTRY:
 | |
| 		return base.parser.csiEntry, nil
 | |
| 	case b == DCS_ENTRY:
 | |
| 		return base.parser.dcsEntry, nil
 | |
| 	case b == ANSI_ESCAPE_PRIMARY:
 | |
| 		return base.parser.escape, nil
 | |
| 	case b == OSC_STRING:
 | |
| 		return base.parser.oscString, nil
 | |
| 	case sliceContains(toGroundBytes, b):
 | |
| 		return base.parser.ground, nil
 | |
| 	}
 | |
| 
 | |
| 	return nil, nil
 | |
| }
 | |
| 
 | |
| func (base baseState) Name() string {
 | |
| 	return base.name
 | |
| }
 | |
| 
 | |
| func (base baseState) Transition(s state) error {
 | |
| 	if s == base.parser.ground {
 | |
| 		execBytes := []byte{0x18}
 | |
| 		execBytes = append(execBytes, 0x1A)
 | |
| 		execBytes = append(execBytes, getByteRange(0x80, 0x8F)...)
 | |
| 		execBytes = append(execBytes, getByteRange(0x91, 0x97)...)
 | |
| 		execBytes = append(execBytes, 0x99)
 | |
| 		execBytes = append(execBytes, 0x9A)
 | |
| 
 | |
| 		if sliceContains(execBytes, base.parser.context.currentChar) {
 | |
| 			return base.parser.execute()
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| type dcsEntryState struct {
 | |
| 	baseState
 | |
| }
 | |
| 
 | |
| type errorState struct {
 | |
| 	baseState
 | |
| }
 | 
