...

Source file src/github.com/Azure/go-ansiterm/states.go

Documentation: github.com/Azure/go-ansiterm

     1  package ansiterm
     2  
     3  type stateID int
     4  
     5  type state interface {
     6  	Enter() error
     7  	Exit() error
     8  	Handle(byte) (state, error)
     9  	Name() string
    10  	Transition(state) error
    11  }
    12  
    13  type baseState struct {
    14  	name   string
    15  	parser *AnsiParser
    16  }
    17  
    18  func (base baseState) Enter() error {
    19  	return nil
    20  }
    21  
    22  func (base baseState) Exit() error {
    23  	return nil
    24  }
    25  
    26  func (base baseState) Handle(b byte) (s state, e error) {
    27  
    28  	switch {
    29  	case b == CSI_ENTRY:
    30  		return base.parser.csiEntry, nil
    31  	case b == DCS_ENTRY:
    32  		return base.parser.dcsEntry, nil
    33  	case b == ANSI_ESCAPE_PRIMARY:
    34  		return base.parser.escape, nil
    35  	case b == OSC_STRING:
    36  		return base.parser.oscString, nil
    37  	case sliceContains(toGroundBytes, b):
    38  		return base.parser.ground, nil
    39  	}
    40  
    41  	return nil, nil
    42  }
    43  
    44  func (base baseState) Name() string {
    45  	return base.name
    46  }
    47  
    48  func (base baseState) Transition(s state) error {
    49  	if s == base.parser.ground {
    50  		execBytes := []byte{0x18}
    51  		execBytes = append(execBytes, 0x1A)
    52  		execBytes = append(execBytes, getByteRange(0x80, 0x8F)...)
    53  		execBytes = append(execBytes, getByteRange(0x91, 0x97)...)
    54  		execBytes = append(execBytes, 0x99)
    55  		execBytes = append(execBytes, 0x9A)
    56  
    57  		if sliceContains(execBytes, base.parser.context.currentChar) {
    58  			return base.parser.execute()
    59  		}
    60  	}
    61  
    62  	return nil
    63  }
    64  
    65  type dcsEntryState struct {
    66  	baseState
    67  }
    68  
    69  type errorState struct {
    70  	baseState
    71  }
    72  

View as plain text