mirror of
https://github.com/alecthomas/chroma.git
synced 2025-02-19 19:00:13 +02:00
Revert to using CIE76 for style colour matching.
Some testing showed RGB distance was *really* bad.
This commit is contained in:
parent
d852022f8d
commit
7b6a07b9bb
@ -5,12 +5,15 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
|
"github.com/lucasb-eyer/go-colorful"
|
||||||
|
|
||||||
"github.com/alecthomas/chroma"
|
"github.com/alecthomas/chroma"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ttyTable struct {
|
type ttyTable struct {
|
||||||
foreground map[chroma.Colour]string
|
foreground map[chroma.Colour]string
|
||||||
background map[chroma.Colour]string
|
background map[chroma.Colour]string
|
||||||
|
distance map[chroma.Colour]colorful.Color
|
||||||
}
|
}
|
||||||
|
|
||||||
var c = chroma.ParseColour
|
var c = chroma.ParseColour
|
||||||
@ -166,6 +169,28 @@ var ttyTables = map[int]*ttyTable{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func computeDistance(table map[chroma.Colour]string) map[chroma.Colour]colorful.Color {
|
||||||
|
out := map[chroma.Colour]colorful.Color{}
|
||||||
|
for colour := range table {
|
||||||
|
out[colour] = toColourful(colour)
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
for _, table := range ttyTables {
|
||||||
|
table.distance = computeDistance(table.foreground)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func toColourful(colour chroma.Colour) colorful.Color {
|
||||||
|
return colorful.Color{
|
||||||
|
float64(colour.Red()) / 256.0,
|
||||||
|
float64(colour.Green()) / 256.0,
|
||||||
|
float64(colour.Blue()) / 256.0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func entryToEscapeSequence(table *ttyTable, entry *chroma.StyleEntry) string {
|
func entryToEscapeSequence(table *ttyTable, entry *chroma.StyleEntry) string {
|
||||||
out := ""
|
out := ""
|
||||||
if entry.Bold {
|
if entry.Bold {
|
||||||
@ -185,9 +210,10 @@ func entryToEscapeSequence(table *ttyTable, entry *chroma.StyleEntry) string {
|
|||||||
|
|
||||||
func findClosest(table *ttyTable, colour chroma.Colour) chroma.Colour {
|
func findClosest(table *ttyTable, colour chroma.Colour) chroma.Colour {
|
||||||
closestColour := chroma.Colour(0)
|
closestColour := chroma.Colour(0)
|
||||||
closest := math.MaxInt32
|
seeking := toColourful(colour)
|
||||||
for styleColour := range table.foreground {
|
closest := float64(math.MaxFloat64)
|
||||||
distance := styleColour.Distance(colour)
|
for styleColour, colour := range table.distance {
|
||||||
|
distance := colour.DistanceCIE76(seeking)
|
||||||
if distance < closest {
|
if distance < closest {
|
||||||
closest = distance
|
closest = distance
|
||||||
closestColour = styleColour
|
closestColour = styleColour
|
||||||
|
54
styles/pygments.go
Normal file
54
styles/pygments.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package styles
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/alecthomas/chroma"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Pygments theme.
|
||||||
|
var Pygments = Register(chroma.NewStyle("pygments", map[chroma.TokenType]string{
|
||||||
|
chroma.Whitespace: "#bbbbbb",
|
||||||
|
chroma.Comment: "italic #408080",
|
||||||
|
chroma.CommentPreproc: "noitalic #BC7A00",
|
||||||
|
|
||||||
|
chroma.Keyword: "bold #008000",
|
||||||
|
chroma.KeywordPseudo: "nobold",
|
||||||
|
chroma.KeywordType: "nobold #B00040",
|
||||||
|
|
||||||
|
chroma.Operator: "#666666",
|
||||||
|
chroma.OperatorWord: "bold #AA22FF",
|
||||||
|
|
||||||
|
chroma.NameBuiltin: "#008000",
|
||||||
|
chroma.NameFunction: "#0000FF",
|
||||||
|
chroma.NameClass: "bold #0000FF",
|
||||||
|
chroma.NameNamespace: "bold #0000FF",
|
||||||
|
chroma.NameException: "bold #D2413A",
|
||||||
|
chroma.NameVariable: "#19177C",
|
||||||
|
chroma.NameConstant: "#880000",
|
||||||
|
chroma.NameLabel: "#A0A000",
|
||||||
|
chroma.NameEntity: "bold #999999",
|
||||||
|
chroma.NameAttribute: "#7D9029",
|
||||||
|
chroma.NameTag: "bold #008000",
|
||||||
|
chroma.NameDecorator: "#AA22FF",
|
||||||
|
|
||||||
|
chroma.String: "#BA2121",
|
||||||
|
chroma.StringDoc: "italic",
|
||||||
|
chroma.StringInterpol: "bold #BB6688",
|
||||||
|
chroma.StringEscape: "bold #BB6622",
|
||||||
|
chroma.StringRegex: "#BB6688",
|
||||||
|
chroma.StringSymbol: "#19177C",
|
||||||
|
chroma.StringOther: "#008000",
|
||||||
|
chroma.Number: "#666666",
|
||||||
|
|
||||||
|
chroma.GenericHeading: "bold #000080",
|
||||||
|
chroma.GenericSubheading: "bold #800080",
|
||||||
|
chroma.GenericDeleted: "#A00000",
|
||||||
|
chroma.GenericInserted: "#00A000",
|
||||||
|
chroma.GenericError: "#FF0000",
|
||||||
|
chroma.GenericEmph: "italic",
|
||||||
|
chroma.GenericStrong: "bold",
|
||||||
|
chroma.GenericPrompt: "bold #000080",
|
||||||
|
chroma.GenericOutput: "#888",
|
||||||
|
chroma.GenericTraceback: "#04D",
|
||||||
|
|
||||||
|
chroma.Error: "border:#FF0000"
|
||||||
|
}))
|
Loading…
x
Reference in New Issue
Block a user