Documentation ¶
Overview ¶
Package highlighting provides syntax highlighting styles; it is based on github.com/alecthomas/chroma, which in turn was based on the python pygments package. Note that this package depends on core and parse and cannot be imported there; is imported in texteditor.
Index ¶
- Constants
- Variables
- func ChromaTagsLine(clex chroma.Lexer, txt string) (lexer.Line, error)
- func Editor(st *Styles)
- func HtmlEscapeBytes(b []byte) []byte
- func HtmlEscapeRunes(r []rune) []byte
- func Init()
- func MarkupLine(txt []rune, hitags, tags lexer.Line, escapeHtml bool) []byte
- func MergeAvailStyles()
- func TokenFromChroma(ct chroma.TokenType) token.Tokens
- func TokenToChroma(tok token.Tokens) chroma.TokenType
- func UpdateFromTheme()
- type Button
- type Highlighter
- func (hi *Highlighter) Init(info *fileinfo.FileInfo, pist *parse.FileStates)
- func (hi *Highlighter) MarkupTagsAll(txt []byte) ([]lexer.Line, error)
- func (hi *Highlighter) MarkupTagsLine(ln int, txt []rune) (lexer.Line, error)
- func (hi *Highlighter) SetStyle(style core.HighlightingName)
- func (hi *Highlighter) UsingParse() bool
- type Style
- func (hs *Style) CopyFrom(ss *Style)
- func (hs Style) OpenJSON(filename core.Filename) error
- func (hs Style) SaveJSON(filename core.Filename) error
- func (hs Style) Tag(tag token.Tokens) StyleEntry
- func (hs Style) TagRaw(tag token.Tokens) StyleEntry
- func (hs Style) ToCSS() map[token.Tokens]string
- func (hs Style) ToProperties() map[string]any
- type StyleEntry
- func (s StyleEntry) Inherit(ancestors ...StyleEntry) StyleEntry
- func (s StyleEntry) IsZero() bool
- func (se StyleEntry) String() string
- func (s StyleEntry) Sub(e StyleEntry) StyleEntry
- func (se StyleEntry) ToCSS() string
- func (se StyleEntry) ToProperties() map[string]any
- func (se *StyleEntry) UpdateFromTheme()
- type Styles
- func (hs *Styles) Add() *Style
- func (hs *Styles) CopyFrom(os Styles)
- func (hs *Styles) Names() []string
- func (hs *Styles) OpenDefaults() error
- func (hs *Styles) OpenJSON(filename core.Filename) error
- func (hs *Styles) OpenSettings() error
- func (hs *Styles) SaveAll(dir core.Filename)
- func (hs *Styles) SaveJSON(filename core.Filename) error
- func (hs *Styles) SaveSettings() error
- func (hs *Styles) ViewStandard()
- type Trilean
- func (i Trilean) Desc() string
- func (i Trilean) Int64() int64
- func (i Trilean) MarshalText() ([]byte, error)
- func (t Trilean) Prefix(s string) string
- func (i *Trilean) SetInt64(in int64)
- func (i *Trilean) SetString(s string) error
- func (i Trilean) String() string
- func (i *Trilean) UnmarshalText(text []byte) error
- func (i Trilean) Values() []enums.Enum
Constants ¶
const ( EscapeHTML = true NoEscapeHTML = false )
maxLineLen prevents overflow in allocating line length
Variables ¶
var ChromaToTokensMap map[chroma.TokenType]token.Tokens
ChromaToTokensMap maps from chroma.TokenType to Tokens -- built from opposite map
var CustomStyles = Styles{}
CustomStyles are user's special styles
var Properties = map[token.Tokens]map[string]any{ token.TextSpellErr: { "text-decoration": 1 << uint32(styles.DecoDottedUnderline), }, }
Properties are default properties for custom tags (tokens); if set in style then used there but otherwise we use these as a fallback; typically not overridden
var SettingsStylesFilename = "highlighting.json"
SettingsStylesFilename is the name of the preferences file in App data directory for saving / loading the custom styles
var StyleDefault = core.HighlightingName("emacs")
StyleDefault is the default highlighting style name
var StyleNames []string
StyleNames are all the names of all the available highlighting styles
var StylesChanged = false
StylesChanged is used for gui updating while editing
var TokensToChromaMap = map[token.Tokens]chroma.TokenType{ token.EOF: chroma.EOFType, token.Background: chroma.Background, token.Error: chroma.Error, token.None: chroma.None, token.Keyword: chroma.Keyword, token.KeywordConstant: chroma.KeywordConstant, token.KeywordDeclaration: chroma.KeywordDeclaration, token.KeywordNamespace: chroma.KeywordNamespace, token.KeywordPseudo: chroma.KeywordPseudo, token.KeywordReserved: chroma.KeywordReserved, token.KeywordType: chroma.KeywordType, token.Name: chroma.Name, token.NameAttribute: chroma.NameAttribute, token.NameBuiltin: chroma.NameBuiltin, token.NameBuiltinPseudo: chroma.NameBuiltinPseudo, token.NameClass: chroma.NameClass, token.NameConstant: chroma.NameConstant, token.NameDecorator: chroma.NameDecorator, token.NameEntity: chroma.NameEntity, token.NameException: chroma.NameException, token.NameFunction: chroma.NameFunction, token.NameFunctionMagic: chroma.NameFunctionMagic, token.NameLabel: chroma.NameLabel, token.NameNamespace: chroma.NameNamespace, token.NameOperator: chroma.NameOperator, token.NameOther: chroma.NameOther, token.NamePseudo: chroma.NamePseudo, token.NameProperty: chroma.NameProperty, token.NameTag: chroma.NameTag, token.NameVar: chroma.NameVariable, token.NameVarAnonymous: chroma.NameVariableAnonymous, token.NameVarClass: chroma.NameVariableClass, token.NameVarGlobal: chroma.NameVariableGlobal, token.NameVarInstance: chroma.NameVariableInstance, token.NameVarMagic: chroma.NameVariableMagic, token.Literal: chroma.Literal, token.LiteralDate: chroma.LiteralDate, token.LiteralOther: chroma.LiteralOther, token.LitStr: chroma.LiteralString, token.LitStrAffix: chroma.LiteralStringAffix, token.LitStrAtom: chroma.LiteralStringAtom, token.LitStrBacktick: chroma.LiteralStringBacktick, token.LitStrBoolean: chroma.LiteralStringBoolean, token.LitStrChar: chroma.LiteralStringChar, token.LitStrDelimiter: chroma.LiteralStringDelimiter, token.LitStrDoc: chroma.LiteralStringDoc, token.LitStrDouble: chroma.LiteralStringDouble, token.LitStrEscape: chroma.LiteralStringEscape, token.LitStrHeredoc: chroma.LiteralStringHeredoc, token.LitStrInterpol: chroma.LiteralStringInterpol, token.LitStrName: chroma.LiteralStringName, token.LitStrOther: chroma.LiteralStringOther, token.LitStrRegex: chroma.LiteralStringRegex, token.LitStrSingle: chroma.LiteralStringSingle, token.LitStrSymbol: chroma.LiteralStringSymbol, token.LitNum: chroma.LiteralNumber, token.LitNumBin: chroma.LiteralNumberBin, token.LitNumFloat: chroma.LiteralNumberFloat, token.LitNumHex: chroma.LiteralNumberHex, token.LitNumInteger: chroma.LiteralNumberInteger, token.LitNumIntegerLong: chroma.LiteralNumberIntegerLong, token.LitNumOct: chroma.LiteralNumberOct, token.Operator: chroma.Operator, token.OperatorWord: chroma.OperatorWord, token.Punctuation: chroma.Punctuation, token.Comment: chroma.Comment, token.CommentHashbang: chroma.CommentHashbang, token.CommentMultiline: chroma.CommentMultiline, token.CommentSingle: chroma.CommentSingle, token.CommentSpecial: chroma.CommentSpecial, token.CommentPreproc: chroma.CommentPreproc, token.CommentPreprocFile: chroma.CommentPreprocFile, token.Text: chroma.Text, token.TextWhitespace: chroma.TextWhitespace, token.TextSymbol: chroma.TextSymbol, token.TextPunctuation: chroma.TextPunctuation, token.TextStyle: chroma.Generic, token.TextStyleDeleted: chroma.GenericDeleted, token.TextStyleEmph: chroma.GenericEmph, token.TextStyleError: chroma.GenericError, token.TextStyleHeading: chroma.GenericHeading, token.TextStyleInserted: chroma.GenericInserted, token.TextStyleOutput: chroma.GenericOutput, token.TextStylePrompt: chroma.GenericPrompt, token.TextStyleStrong: chroma.GenericStrong, token.TextStyleSubheading: chroma.GenericSubheading, token.TextStyleTraceback: chroma.GenericTraceback, token.TextStyleUnderline: chroma.GenericUnderline, }
TokensToChromaMap maps from Tokens to chroma.TokenType
Functions ¶
func ChromaTagsLine ¶ added in v0.3.0
ChromaTagsLine returns tags for one line according to given chroma lexer
func Editor ¶ added in v0.3.0
func Editor(st *Styles)
Editor opens an editor of highlighting styles.
func HtmlEscapeBytes ¶ added in v0.3.0
HtmlEscapeBytes escapes special characters like "<" to become "<". It escapes only five such characters: <, >, &, ' and ". It operates on a *copy* of the byte string and does not modify the input! otherwise it causes major problems..
func HtmlEscapeRunes ¶ added in v0.3.0
HtmlEscapeRunes escapes special characters like "<" to become "<". It escapes only five such characters: <, >, &, ' and ". It operates on a *copy* of the byte string and does not modify the input! otherwise it causes major problems..
func Init ¶
func Init()
Init must be called to initialize the hi styles -- post startup so chroma stuff is all in place, and loads custom styles
func MarkupLine ¶ added in v0.3.0
MarkupLine returns the line with html class tags added for each tag takes both the hi tags and extra tags. Only fully nested tags are supported, with any dangling ends truncated.
func MergeAvailStyles ¶
func MergeAvailStyles()
MergeAvailStyles updates AvailStyles as combination of std and custom styles
func TokenFromChroma ¶
FromChroma converts a chroma.TokenType to a parse token.Tokens
func TokenToChroma ¶
TokenToChroma converts to a chroma.TokenType
func UpdateFromTheme ¶
func UpdateFromTheme()
UpdateFromTheme normalizes the colors of all style entry such that they have consistent chromas and tones that guarantee sufficient text contrast in accordance with the color theme.
Types ¶
type Button ¶ added in v0.3.0
Button represents a core.HighlightingName with a button.
func (*Button) WidgetValue ¶ added in v0.3.0
type Highlighter ¶ added in v0.3.0
type Highlighter struct { // syntax highlighting style to use StyleName core.HighlightingName // Has is whether there are highlighting parameters set // (only valid after [Highlighter.init] has been called). Has bool // tab size, in chars TabSize int // Commpiled CSS properties for given highlighting style CSSProperties map[string]any // contains filtered or unexported fields }
Highlighter performs syntax highlighting, using parse if available, otherwise falls back on chroma.
func (*Highlighter) Init ¶ added in v0.3.0
func (hi *Highlighter) Init(info *fileinfo.FileInfo, pist *parse.FileStates)
Init initializes the syntax highlighting for current params
func (*Highlighter) MarkupTagsAll ¶ added in v0.3.0
func (hi *Highlighter) MarkupTagsAll(txt []byte) ([]lexer.Line, error)
MarkupTagsAll returns all the markup tags according to current syntax highlighting settings
func (*Highlighter) MarkupTagsLine ¶ added in v0.3.0
MarkupTagsLine returns tags for one line according to current syntax highlighting settings
func (*Highlighter) SetStyle ¶ added in v0.3.0
func (hi *Highlighter) SetStyle(style core.HighlightingName)
SetStyle sets the highlighting style and updates corresponding settings
func (*Highlighter) UsingParse ¶ added in v0.3.0
func (hi *Highlighter) UsingParse() bool
UsingParse returns true if markup is using parse lexer / parser, which affects use of results
type Style ¶
type Style map[token.Tokens]*StyleEntry
Style is a full style map of styles for different token.Tokens tag values
func AvailableStyle ¶
func AvailableStyle(nm core.HighlightingName) *Style
AvailableStyle returns a style by name from the AvailStyles list -- if not found default is used as a fallback
func (Style) Tag ¶
func (hs Style) Tag(tag token.Tokens) StyleEntry
Tag returns a StyleEntry for given Tag. Will try sub-category or category if an exact match is not found. does NOT add the background properties -- those are always kept separate.
func (Style) TagRaw ¶
func (hs Style) TagRaw(tag token.Tokens) StyleEntry
TagRaw returns a StyleEntry for given tag without any inheritance of anything will be IsZero if not defined for this style
func (Style) ToProperties ¶
ToProperties generates a list of key-value properties for this style.
type StyleEntry ¶
type StyleEntry struct { // text color Color color.RGBA // background color Background color.RGBA // border color? not sure what this is -- not really used Border color.RGBA `display:"-"` // bold font Bold Trilean // italic font Italic Trilean // underline Underline Trilean // don't inherit these settings from sub-category or category levels -- otherwise everything with a Pass is inherited NoInherit bool }
StyleEntry is one value in the map of highlight style values
func (StyleEntry) Inherit ¶
func (s StyleEntry) Inherit(ancestors ...StyleEntry) StyleEntry
Inherit styles from ancestors.
Ancestors should be provided from oldest, furthest away to newest, closest.
func (StyleEntry) IsZero ¶
func (s StyleEntry) IsZero() bool
func (StyleEntry) String ¶
func (se StyleEntry) String() string
func (StyleEntry) Sub ¶
func (s StyleEntry) Sub(e StyleEntry) StyleEntry
Sub subtracts two style entries, returning an entry with only the differences set
func (StyleEntry) ToCSS ¶
func (se StyleEntry) ToCSS() string
ToCSS converts StyleEntry to CSS attributes.
func (StyleEntry) ToProperties ¶
func (se StyleEntry) ToProperties() map[string]any
ToProperties converts the StyleEntry to key-value properties.
func (*StyleEntry) UpdateFromTheme ¶
func (se *StyleEntry) UpdateFromTheme()
UpdateFromTheme normalizes the colors of the style entry such that they have consistent chromas and tones that guarantee sufficient text contrast in accordance with the color theme.
type Styles ¶
Styles is a collection of styles
var AvailableStyles Styles
AvailableStyles are all highlighting styles
var StandardStyles Styles
StandardStyles are the styles from chroma package
func (*Styles) OpenDefaults ¶
OpenDefaults opens the default highlighting styles (from chroma originally) These are encoded as an embed from defaults.highlighting
func (*Styles) OpenJSON ¶
Open hi styles from a JSON-formatted file. You can save and open styles to / from files to share, experiment, transfer, etc.
func (*Styles) OpenSettings ¶
OpenSettings opens Styles from Cogent Core standard prefs directory, using SettingsStylesFilename
func (*Styles) SaveJSON ¶
Save hi styles to a JSON-formatted file. You can save and open styles to / from files to share, experiment, transfer, etc.
func (*Styles) SaveSettings ¶
SaveSettings saves Styles to Cogent Core standard prefs directory, using SettingsStylesFilename
func (*Styles) ViewStandard ¶
func (hs *Styles) ViewStandard()
ViewStandard shows the standard styles that are compiled into the program via chroma package
type Trilean ¶
type Trilean int32 //enums:enum
Trilean value for StyleEntry value inheritance.
const TrileanN Trilean = 3
TrileanN is the highest valid value for type Trilean, plus one.
func TrileanValues ¶
func TrileanValues() []Trilean
TrileanValues returns all possible values for the type Trilean.
func (Trilean) MarshalText ¶
MarshalText implements the encoding.TextMarshaler interface.
func (*Trilean) SetString ¶
SetString sets the Trilean value from its string representation, and returns an error if the string is invalid.
func (*Trilean) UnmarshalText ¶
UnmarshalText implements the encoding.TextUnmarshaler interface.