| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package ansi
- import "unsafe"
- // Params represents a list of packed parameters.
- type Params []Param
- // Param returns the parameter at the given index and if it is part of a
- // sub-parameters. It falls back to the default value if the parameter is
- // missing. If the index is out of bounds, it returns the default value and
- // false.
- func (p Params) Param(i, def int) (int, bool, bool) {
- if i < 0 || i >= len(p) {
- return def, false, false
- }
- return p[i].Param(def), p[i].HasMore(), true
- }
- // ForEach iterates over the parameters and calls the given function for each
- // parameter. If a parameter is part of a sub-parameter, it will be called with
- // hasMore set to true.
- // Use def to set a default value for missing parameters.
- func (p Params) ForEach(def int, f func(i, param int, hasMore bool)) {
- for i := range p {
- f(i, p[i].Param(def), p[i].HasMore())
- }
- }
- // ToParams converts a list of integers to a list of parameters.
- func ToParams(params []int) Params {
- return unsafe.Slice((*Param)(unsafe.Pointer(¶ms[0])), len(params))
- }
- // Handler handles actions performed by the parser.
- // It is used to handle ANSI escape sequences, control characters, and runes.
- type Handler struct {
- // Print is called when a printable rune is encountered.
- Print func(r rune)
- // Execute is called when a control character is encountered.
- Execute func(b byte)
- // HandleCsi is called when a CSI sequence is encountered.
- HandleCsi func(cmd Cmd, params Params)
- // HandleEsc is called when an ESC sequence is encountered.
- HandleEsc func(cmd Cmd)
- // HandleDcs is called when a DCS sequence is encountered.
- HandleDcs func(cmd Cmd, params Params, data []byte)
- // HandleOsc is called when an OSC sequence is encountered.
- HandleOsc func(cmd int, data []byte)
- // HandlePm is called when a PM sequence is encountered.
- HandlePm func(data []byte)
- // HandleApc is called when an APC sequence is encountered.
- HandleApc func(data []byte)
- // HandleSos is called when a SOS sequence is encountered.
- HandleSos func(data []byte)
- }
- // SetHandler sets the handler for the parser.
- func (p *Parser) SetHandler(h Handler) {
- p.handler = h
- }
|