53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package d2svg
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/alecthomas/chroma"
|
|
"github.com/alecthomas/chroma/formatters/svg"
|
|
)
|
|
|
|
// Copied private functions from chroma. Their public functions do too much (write the whole SVG document)
|
|
// https://github.com/alecthomas/chroma
|
|
// >>> BEGIN
|
|
|
|
var svgEscaper = strings.NewReplacer(
|
|
`&`, "&",
|
|
`<`, "<",
|
|
`>`, ">",
|
|
`"`, """,
|
|
` `, " ",
|
|
` `, "    ",
|
|
)
|
|
|
|
func styleToSVG(style *chroma.Style) map[chroma.TokenType]string {
|
|
converted := map[chroma.TokenType]string{}
|
|
bg := style.Get(chroma.Background)
|
|
// Convert the style.
|
|
for t := range chroma.StandardTypes {
|
|
entry := style.Get(t)
|
|
if t != chroma.Background {
|
|
entry = entry.Sub(bg)
|
|
}
|
|
if entry.IsZero() {
|
|
continue
|
|
}
|
|
converted[t] = svg.StyleEntryToSVG(entry)
|
|
}
|
|
return converted
|
|
}
|
|
|
|
func styleAttr(styles map[chroma.TokenType]string, tt chroma.TokenType) string {
|
|
if _, ok := styles[tt]; !ok {
|
|
tt = tt.SubCategory()
|
|
if _, ok := styles[tt]; !ok {
|
|
tt = tt.Category()
|
|
if _, ok := styles[tt]; !ok {
|
|
return ""
|
|
}
|
|
}
|
|
}
|
|
return styles[tt]
|
|
}
|
|
|
|
// <<< END
|