138 lines
5.7 KiB
Go
138 lines
5.7 KiB
Go
package base16
|
|
|
|
import (
|
|
"io"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
"toastielab.dev/toastie-stuff/chroma/v2"
|
|
)
|
|
|
|
type Base16 struct {
|
|
// Scheme is the name of the scheme.
|
|
Scheme string `yaml:"scheme"`
|
|
// Author is the name of the author.
|
|
Author string `yaml:"author"`
|
|
// Theme is either "light" or "dark".
|
|
Theme string `yaml:"theme"`
|
|
// Base00 Default Background
|
|
Base00 string `yaml:"base00"`
|
|
// Base01 Lighter Background (Used for status bars, line number and folding marks)
|
|
Base01 string `yaml:"base01"`
|
|
// Base02 Selection Background
|
|
Base02 string `yaml:"base02"`
|
|
// Base03 Comments, Invisibles, Line Highlighting
|
|
Base03 string `yaml:"base03"`
|
|
// Base04 Dark Foreground (Used for status bars)
|
|
Base04 string `yaml:"base04"`
|
|
// Base05 Default Foreground, Caret, Delimiters, Operators
|
|
Base05 string `yaml:"base05"`
|
|
// Base06 Light Foreground (Not often used)
|
|
Base06 string `yaml:"base06"`
|
|
// Base07 Light Background (Not often used)
|
|
Base07 string `yaml:"base07"`
|
|
// Base08 Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
|
|
Base08 string `yaml:"base08"`
|
|
// Base09 Integers, Boolean, Constants, XML Attributes, Markup Link Url
|
|
Base09 string `yaml:"base09"`
|
|
// Base0A Classes, Markup Bold, Search Text Background
|
|
Base0A string `yaml:"base0A"`
|
|
// Base0B Strings, Inherited Class, Markup Code, Diff Inserted
|
|
Base0B string `yaml:"base0B"`
|
|
// Base0C Support, Regular Expressions, Escape Characters, Markup Quotes
|
|
Base0C string `yaml:"base0C"`
|
|
// Base0D Functions, Methods, Attribute IDs, Headings
|
|
Base0D string `yaml:"base0D"`
|
|
// Base0E Keywords, Storage, Selector, Markup Italic, Diff Changed
|
|
Base0E string `yaml:"base0E"`
|
|
// Base0F Deprecated, Opening/Closing Embedded Language Tags, e.g. `<?php ?>`
|
|
Base0F string `yaml:"base0F"`
|
|
}
|
|
|
|
func (b *Base16) toStyle() (*chroma.Style, error) {
|
|
entries := chroma.StyleEntries{
|
|
chroma.Other: "#" + b.Base05,
|
|
chroma.Error: "#" + b.Base08,
|
|
chroma.Background: "bg:" + "#" + b.Base00,
|
|
chroma.Keyword: "#" + b.Base0E,
|
|
chroma.KeywordConstant: "#" + b.Base0E,
|
|
chroma.KeywordDeclaration: "#" + b.Base08,
|
|
chroma.KeywordNamespace: "#" + b.Base0E,
|
|
chroma.KeywordPseudo: "#" + b.Base0E,
|
|
chroma.KeywordReserved: "#" + b.Base0E,
|
|
chroma.KeywordType: "#" + b.Base0C,
|
|
chroma.Name: "#" + b.Base05,
|
|
chroma.NameAttribute: "#" + b.Base0D,
|
|
chroma.NameBuiltin: "#" + b.Base08,
|
|
chroma.NameBuiltinPseudo: "#" + b.Base05,
|
|
chroma.NameClass: "#" + b.Base0A,
|
|
chroma.NameConstant: "#" + b.Base09,
|
|
chroma.NameDecorator: "#" + b.Base09,
|
|
chroma.NameEntity: "#" + b.Base05,
|
|
chroma.NameException: "#" + b.Base05,
|
|
chroma.NameFunction: "#" + b.Base0D,
|
|
chroma.NameLabel: "#" + b.Base08,
|
|
chroma.NameNamespace: "#" + b.Base05,
|
|
chroma.NameOther: "#" + b.Base05,
|
|
chroma.NameTag: "#" + b.Base0E,
|
|
chroma.NameVariable: "#" + b.Base08,
|
|
chroma.NameVariableClass: "#" + b.Base08,
|
|
chroma.NameVariableGlobal: "#" + b.Base08,
|
|
chroma.NameVariableInstance: "#" + b.Base08,
|
|
chroma.Literal: "#" + b.Base05,
|
|
chroma.LiteralDate: "#" + b.Base05,
|
|
chroma.LiteralString: "#" + b.Base0B,
|
|
chroma.LiteralStringBacktick: "#" + b.Base0B,
|
|
chroma.LiteralStringChar: "#" + b.Base0B,
|
|
chroma.LiteralStringDoc: "#" + b.Base0B,
|
|
chroma.LiteralStringDouble: "#" + b.Base0B,
|
|
chroma.LiteralStringEscape: "#" + b.Base0B,
|
|
chroma.LiteralStringHeredoc: "#" + b.Base0B,
|
|
chroma.LiteralStringInterpol: "#" + b.Base0B,
|
|
chroma.LiteralStringOther: "#" + b.Base0B,
|
|
chroma.LiteralStringRegex: "#" + b.Base0B,
|
|
chroma.LiteralStringSingle: "#" + b.Base0B,
|
|
chroma.LiteralStringSymbol: "#" + b.Base0B,
|
|
chroma.LiteralNumber: "#" + b.Base09,
|
|
chroma.LiteralNumberBin: "#" + b.Base09,
|
|
chroma.LiteralNumberFloat: "#" + b.Base09,
|
|
chroma.LiteralNumberHex: "#" + b.Base09,
|
|
chroma.LiteralNumberInteger: "#" + b.Base09,
|
|
chroma.LiteralNumberIntegerLong: "#" + b.Base09,
|
|
chroma.LiteralNumberOct: "#" + b.Base09,
|
|
chroma.Operator: "#" + b.Base0E,
|
|
chroma.OperatorWord: "#" + b.Base0E,
|
|
chroma.Punctuation: "#" + b.Base05,
|
|
chroma.Comment: "#" + b.Base03,
|
|
chroma.CommentHashbang: "#" + b.Base03,
|
|
chroma.CommentMultiline: "#" + b.Base03,
|
|
chroma.CommentSingle: "#" + b.Base03,
|
|
chroma.CommentSpecial: "#" + b.Base03,
|
|
chroma.CommentPreproc: "#" + b.Base03,
|
|
chroma.Generic: "#" + b.Base05,
|
|
chroma.GenericDeleted: "#" + b.Base08,
|
|
chroma.GenericEmph: "underline #" + b.Base05,
|
|
chroma.GenericError: "#" + b.Base08,
|
|
chroma.GenericHeading: "bold #" + b.Base05,
|
|
chroma.GenericInserted: "bold #" + b.Base05,
|
|
chroma.GenericOutput: "#" + b.Base02,
|
|
chroma.GenericPrompt: "#" + b.Base05,
|
|
chroma.GenericStrong: "italic #" + b.Base05,
|
|
chroma.GenericSubheading: "bold #" + b.Base05,
|
|
chroma.GenericTraceback: "#" + b.Base05,
|
|
chroma.GenericUnderline: "underline",
|
|
chroma.Text: "#" + b.Base05,
|
|
chroma.TextWhitespace: "#" + b.Base05,
|
|
}
|
|
|
|
return chroma.NewStyle(b.Scheme, b.Theme, entries)
|
|
}
|
|
|
|
func NewStyle(r io.Reader) (*chroma.Style, error) {
|
|
dec := yaml.NewDecoder(r)
|
|
b16 := &Base16{}
|
|
if err := dec.Decode(b16); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return b16.toStyle()
|
|
}
|