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 Asset(name string) ([]byte, error)
- func AssetDir(name string) ([]string, error)
- func AssetInfo(name string) (os.FileInfo, error)
- func AssetNames() []string
- func Init()
- func MergeAvailStyles()
- func MustAsset(name string) []byte
- func RestoreAsset(dir, name string) error
- func RestoreAssets(dir, name string) error
- 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 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 KiT_Trilean = kit.Enums.AddEnumAltLower(TrileanN, kit.NotBitFlag, nil, "")
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: { "text-decoration": 1 << uint32(gist.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 = gi.HiStyleName("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 Asset ¶ added in v0.9.11
Asset loads and returns the asset for the given name. It returns an error if the asset could not be found or could not be loaded.
func AssetDir ¶ added in v0.9.11
AssetDir returns the file names below a certain directory embedded in the file by go-bindata. For example if you run go-bindata on data/... and data contains the following hierarchy:
data/ foo.txt img/ a.png b.png
then AssetDir("data") would return []string{"foo.txt", "img"} AssetDir("data/img") would return []string{"a.png", "b.png"} AssetDir("foo.txt") and AssetDir("notexist") would return an error AssetDir("") will return []string{"data"}.
func AssetInfo ¶ added in v0.9.11
AssetInfo loads and returns the asset info for the given name. It returns an error if the asset could not be found or could not be loaded.
func AssetNames ¶ added in v0.9.11
func AssetNames() []string
AssetNames returns the names of the assets. nolint: deadcode
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 MustAsset ¶ added in v0.9.11
MustAsset is like Asset but panics when Asset would return an error. It simplifies safe initialization of global variables. nolint: deadcode
func RestoreAsset ¶ added in v0.9.11
RestoreAsset restores an asset under the given directory
func RestoreAssets ¶ added in v0.9.11
RestoreAssets restores an asset under the given directory recursively
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 ¶
func AvailStyle(nm gi.HiStyleName) *Style
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 gist.Color `desc:"text color"` Background gist.Color `desc:"background color"` Border gist.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) These are encoded as an asset from defaults.histys
func (*Styles) OpenPrefs ¶
OpenPrefs opens Styles from App standard prefs directory, using PrefsStylesFileName
type Trilean ¶
type Trilean uint8
Trilean value for StyleEntry value inheritance.