Documentation ¶
Overview ¶
package histyle 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 goki/gi and goki /pi and cannot be imported there -- is imported into goki/gi/giv
Index ¶
- Variables
- func Init()
- func MergeAvailStyles()
- func TokenFromChroma(ct chroma.TokenType) token.Tokens
- func TokenToChroma(tok token.Tokens) chroma.TokenType
- type Style
- func (hs *Style) CopyFrom(ss Style)
- func (hs Style) OpenJSON(filename gi.FileName) error
- func (hs Style) SaveJSON(filename gi.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) ToProps() ki.Props
- type StyleEntry
- type StyleName
- 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 gi.FileName) error
- func (hs *Styles) OpenPrefs() error
- func (hs *Styles) SaveAll(dir gi.FileName)
- func (hs *Styles) SaveJSON(filename gi.FileName) error
- func (hs *Styles) SavePrefs() error
- func (hs *Styles) ViewStd()
- type Trilean
Constants ¶
This section is empty.
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 KiT_Style = kit.Types.AddType(&Style{}, StyleProps)
var KiT_StyleEntry = kit.Types.AddType(&StyleEntry{}, StyleEntryProps)
var KiT_Styles = kit.Types.AddType(&Styles{}, StylesProps)
var PrefsStylesFileName = "hi_styles.json"
PrefsStylesFileName is the name of the preferences file in App prefs directory for saving / loading the custom styles
var Props = map[token.Tokens]ki.Props{ token.TextSpellErr: ki.Props{ "text-decoration": 1 << uint32(gi.DecoDottedUnderline), }, }
TagsProps 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 StyleDefault = StyleName("emacs")
StyleDefault is the default highlighting style name -- can set this to whatever you want
var StyleEntryProps = ki.Props{ "inline": true, }
var StyleNames []string
StyleNames are all the names of all the available highlighting styles
var StyleProps = ki.Props{ "MainMenu": ki.PropSlice{ {"AppMenu", ki.BlankProp{}}, {"File", ki.PropSlice{ {"OpenJSON", ki.Props{ "label": "Open from file", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc", "shortcut": gi.KeyFunMenuOpen, "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".histy", }}, }, }}, {"SaveJSON", ki.Props{ "label": "Save to file", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc", "shortcut": gi.KeyFunMenuSaveAs, "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".histy", }}, }, }}, }}, {"Edit", "Copy Cut Paste Dupe"}, {"Window", "Windows"}, }, "ToolBar": ki.PropSlice{ {"OpenJSON", ki.Props{ "label": "Open from file", "icon": "file-open", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc -- save from standard ones and load into custom ones for example", "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".histy", }}, }, }}, {"SaveJSON", ki.Props{ "label": "Save to file", "icon": "file-save", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc -- save from standard ones and load into custom ones for example", "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".histy", }}, }, }}, }, }
StyleProps define the ToolBar and MenuBar for view
var StylesChanged = false
StylesChanged is used for gui updating while editing
var StylesProps = ki.Props{ "MainMenu": ki.PropSlice{ {"AppMenu", ki.BlankProp{}}, {"File", ki.PropSlice{ {"OpenPrefs", ki.Props{}}, {"SavePrefs", ki.Props{ "shortcut": gi.KeyFunMenuSave, "updtfunc": func(sti interface{}, act *gi.Action) { act.SetActiveStateUpdt(StylesChanged && sti.(*Styles) == &CustomStyles) }, }}, {"sep-file", ki.BlankProp{}}, {"OpenJSON", ki.Props{ "label": "Open...", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc", "shortcut": gi.KeyFunMenuOpen, "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".json", }}, }, }}, {"SaveJSON", ki.Props{ "label": "Save As...", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc", "shortcut": gi.KeyFunMenuSaveAs, "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".json", }}, }, }}, {"SaveAll", ki.Props{ "label": "Save All...", "desc": "Saves each style individually to selected directory (be sure to select a dir only!)", "Args": ki.PropSlice{ {"Dir Name", ki.Props{}}, }, }}, }}, {"Edit", "Copy Cut Paste Dupe"}, {"Window", "Windows"}, }, "ToolBar": ki.PropSlice{ {"Add", ki.Props{ "desc": "Add a new style to the list.", "icon": "plus", "updtfunc": func(sti interface{}, act *gi.Action) { act.SetActiveStateUpdt(sti.(*Styles) == &CustomStyles) }, }}, {"SavePrefs", ki.Props{ "desc": "saves styles to app prefs directory, in file hi_styles.json, which will be loaded automatically at startup into your CustomStyles.", "icon": "file-save", "updtfunc": func(sti interface{}, act *gi.Action) { act.SetActiveStateUpdt(StylesChanged && sti.(*Styles) == &CustomStyles) }, }}, {"sep-file", ki.BlankProp{}}, {"OpenJSON", ki.Props{ "label": "Open from file", "icon": "file-open", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc", "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".json", }}, }, }}, {"SaveJSON", ki.Props{ "label": "Save to file", "icon": "file-save", "desc": "You can save and open styles to / from files to share, experiment, transfer, etc", "Args": ki.PropSlice{ {"File Name", ki.Props{ "ext": ".json", }}, }, }}, {"sep-std", ki.BlankProp{}}, {"ViewStd", ki.Props{ "desc": `Shows the standard styles that are compiled into the program (from <a href="https://github.com/alecthomas/chroma">github.com/alecthomas/chroma</a>). Save a style from there and load it into custom as a starting point for creating a variant of an existing style.`, "confirm": true, "updtfunc": func(sti interface{}, act *gi.Action) { act.SetActiveStateUpdt(sti.(*Styles) != &StdStyles) }, }}, }, }
StylesProps define the ToolBar and MenuBar for view
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 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 MergeAvailStyles ¶
func MergeAvailStyles()
MergeAvailStyles updates AvailStyles as combination of std and custom styles
func TokenFromChroma ¶ added in v0.9.4
FromChroma converts a chroma.TokenType to a pi token.Tokens
Types ¶
type Style ¶
type Style map[token.Tokens]StyleEntry
Style is a full style map of styles for different token.Tokens tag values
func AvailStyle ¶
AvailStyle 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
type StyleEntry ¶
type StyleEntry struct { Color gi.Color `desc:"text color"` Background gi.Color `desc:"background color"` Border gi.Color `view:"-" desc:"border color? not sure what this is -- not really used"` Bold Trilean `desc:"bold font"` Italic Trilean `desc:"italic font"` Underline Trilean `desc:"underline"` NoInherit bool `desc:"don't inherit these settings from sub-category or category levels -- otherwise everything with a Pass is inherited"` }
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
// FromChroma copies styles from chroma
func (he *StyleEntry) FromChroma(ce chroma.StyleEntry) { if ce.Colour.IsSet() { he.Color.SetString(ce.Colour.String(), nil) } else { he.Color.SetToNil() } if ce.Background.IsSet() { he.Background.SetString(ce.Background.String(), nil) } else { he.Background.SetToNil() } if ce.Border.IsSet() { he.Border.SetString(ce.Border.String(), nil) } else { he.Border.SetToNil() } he.Bold = Trilean(ce.Bold) he.Italic = Trilean(ce.Italic) he.Underline = Trilean(ce.Underline) he.NoInherit = ce.NoInherit }
// StyleEntryFromChroma returns a new style entry from corresponding chroma version
func StyleEntryFromChroma(ce chroma.StyleEntry) StyleEntry { he := StyleEntry{} he.FromChroma(ce) return he }
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) ToProps ¶
func (se StyleEntry) ToProps() ki.Props
ToProps converts StyleEntry to ki.Props attributes.
type Styles ¶
Styles is a collection of styles
var AvailStyles Styles
AvailStyles are all highlighting styles
var StdStyles Styles
StdStyles are the styles from chroma package
func (*Styles) OpenDefaults ¶ added in v0.9.4
OpenDefaults opens the default highlighting styles (from chroma originally)
func (*Styles) OpenPrefs ¶
OpenPrefs opens Styles from App standard prefs directory, using PrefsStylesFileName
type Trilean ¶
type Trilean uint8
Trilean value for StyleEntry value inheritance.