highlight

package
v1.4.2-0...-d7b39fe Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 1, 2020 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Groups map[string]Group

Groups contains all of the groups that are defined You can access them in the map via their string name

Functions

func GetIncludes

func GetIncludes(d *Def) []string

GetIncludes returns a list of filetypes that are included by this syntax def

func HasIncludes

func HasIncludes(d *Def) bool

HasIncludes returns whether this syntax def has any include statements

func MatchFiletype

func MatchFiletype(ftdetect [2]*regexp.Regexp, filename string, firstLine []byte) bool

MatchFiletype will use the list of syntax definitions provided and the filename and first line of the file to determine the filetype of the file It will return the corresponding syntax definition for the filetype

func ResolveIncludes

func ResolveIncludes(def *Def, files []*File)

ResolveIncludes will sort out the rules for including other filetypes You should call this after parsing all the Defs

Types

type Def

type Def struct {
	*Header
	// contains filtered or unexported fields
}

A Def is a full syntax definition for a language It has a filetype, information about how to detect the filetype based on filename or header (the first line of the file) Then it has the rules which define how to highlight the file

func ParseDef

func ParseDef(f *File, header *Header) (s *Def, err error)

ParseDef parses an input syntax file into a highlight Def

type File

type File struct {
	FileType string
	// contains filtered or unexported fields
}

func ParseFile

func ParseFile(input []byte) (f *File, err error)

type Group

type Group uint8

A Group represents a syntax group

func (Group) String

func (g Group) String() string

String returns the group name attached to the specific group

type Header struct {
	FileType string
	FtDetect [2]*regexp.Regexp
}

func MakeHeader

func MakeHeader(data []byte) (*Header, error)

MakeHeader takes a header (.hdr file) file and parses the header Header files make parsing more efficient when you only want to compute on the headers of syntax files A yaml file might take ~400us to parse while a header file only takes ~20us

func MakeHeaderYaml

func MakeHeaderYaml(data []byte) (*Header, error)

MakeHeaderYaml takes a yaml spec for a syntax file and parses the header

type HeaderYaml

type HeaderYaml struct {
	FileType string `yaml:"filetype"`
	Detect   struct {
		FNameRgx  string `yaml:"filename"`
		HeaderRgx string `yaml:"header"`
	} `yaml:"detect"`
}

type Highlighter

type Highlighter struct {
	Def *Def
	// contains filtered or unexported fields
}

A Highlighter contains the information needed to highlight a string

func NewHighlighter

func NewHighlighter(def *Def) *Highlighter

NewHighlighter returns a new highlighter from the given syntax definition

func (*Highlighter) HighlightMatches

func (h *Highlighter) HighlightMatches(input LineStates, startline, endline int)

HighlightMatches sets the matches for each line in between startline and endline It sets all other matches in the buffer to nil to conserve memory This assumes that all the states are set correctly

func (*Highlighter) HighlightStates

func (h *Highlighter) HighlightStates(input LineStates)

HighlightStates correctly sets all states for the buffer

func (*Highlighter) HighlightString

func (h *Highlighter) HighlightString(input string) []LineMatch

HighlightString syntax highlights a string Use this function for simple syntax highlighting and use the other functions for more advanced syntax highlighting. They are optimized for quick rehighlighting of the same text with minor changes made

func (*Highlighter) ReHighlightLine

func (h *Highlighter) ReHighlightLine(input LineStates, lineN int)

ReHighlightLine will rehighlight the state and match for a single line

func (*Highlighter) ReHighlightStates

func (h *Highlighter) ReHighlightStates(input LineStates, startline int)

ReHighlightStates will scan down from `startline` and set the appropriate end of line state for each line until it comes across the same state in two consecutive lines

type LineMatch

type LineMatch map[int]Group

LineMatch represents the syntax highlighting matches for one line. Each index where the coloring is changed is marked with that color's group (represented as one byte)

type LineStates

type LineStates interface {
	LineBytes(n int) []byte
	LinesNum() int
	State(lineN int) State
	SetState(lineN int, s State)
	SetMatch(lineN int, m LineMatch)
}

LineStates is an interface for a buffer-like object which can also store the states and matches for every line

type State

type State *region

A State represents the region at the end of a line

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL