Add custom theming
This commit is contained in:
72
markdown.go
72
markdown.go
@@ -5,6 +5,7 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/charmbracelet/glamour"
|
||||
glamouransi "github.com/charmbracelet/glamour/ansi"
|
||||
"github.com/charmbracelet/glamour/styles"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
)
|
||||
@@ -79,12 +80,7 @@ func commentMarkdownRenderer(width int) (*glamour.TermRenderer, error) {
|
||||
if cached, ok := commentMarkdownRenderers.Load(width); ok {
|
||||
return cached.(*glamour.TermRenderer), nil
|
||||
}
|
||||
style := styles.DarkStyleConfig
|
||||
if markdownStyleName == "light" {
|
||||
style = styles.LightStyleConfig
|
||||
} else if markdownStyleName == "notty" {
|
||||
style = styles.NoTTYStyleConfig
|
||||
}
|
||||
style := markdownStyleForTheme()
|
||||
zero := uint(0)
|
||||
style.Document.Margin = &zero
|
||||
style.Code.Prefix = ""
|
||||
@@ -103,6 +99,70 @@ func commentMarkdownRenderer(width int) (*glamour.TermRenderer, error) {
|
||||
return actual.(*glamour.TermRenderer), nil
|
||||
}
|
||||
|
||||
func markdownStyleForTheme() glamouransi.StyleConfig {
|
||||
if markdownStyleName == "notty" {
|
||||
return styles.NoTTYStyleConfig
|
||||
}
|
||||
style := styles.DarkStyleConfig
|
||||
if themeIsLight {
|
||||
style = styles.LightStyleConfig
|
||||
}
|
||||
palette := editorMarkdownTheme
|
||||
color := func(value string) *string { return &value }
|
||||
truth := func(value bool) *bool { return &value }
|
||||
|
||||
style.Document.Color = color(palette.Text)
|
||||
// Leave Text unset so inline text inherits the surrounding heading, link,
|
||||
// quote, or paragraph color instead of flattening every Markdown token to
|
||||
// the document foreground.
|
||||
style.Text.Color = nil
|
||||
style.Paragraph.Color = color(palette.Text)
|
||||
style.Heading.Color = color(palette.Title)
|
||||
style.H1.Color = color(palette.ActiveForeground)
|
||||
style.H1.BackgroundColor = color(palette.ActiveBackground)
|
||||
style.H2.Color = color(palette.Title)
|
||||
style.H3.Color = color(palette.Title)
|
||||
style.H4.Color = color(palette.Title)
|
||||
style.H5.Color = color(palette.Title)
|
||||
style.H6.Color = color(palette.Title)
|
||||
style.HorizontalRule.Color = color(palette.Dim)
|
||||
style.Item.Color = color(palette.Title)
|
||||
style.Enumeration.Color = color(palette.Title)
|
||||
style.Task.Color = color(palette.Text)
|
||||
style.BlockQuote.Color = color(palette.Quote)
|
||||
style.Strong.Color = color(palette.Text)
|
||||
style.Strong.Bold = truth(true)
|
||||
style.Emph.Color = color(palette.Text)
|
||||
style.Link.Color = color(themeAuthorColor(palette, 0))
|
||||
style.LinkText.Color = color(themeAuthorColor(palette, 1))
|
||||
style.Image.Color = color(themeAuthorColor(palette, 0))
|
||||
style.ImageText.Color = color(palette.Dim)
|
||||
style.Code.Color = color(palette.Success)
|
||||
style.Code.BackgroundColor = color(palette.EditorBackground)
|
||||
style.CodeBlock.Color = color(palette.EditorForeground)
|
||||
style.CodeBlock.BackgroundColor = color(palette.EditorBackground)
|
||||
style.CodeBlock.Theme = palette.SyntaxTheme
|
||||
style.CodeBlock.Chroma = nil
|
||||
style.Table.Color = color(palette.Text)
|
||||
style.Table.CenterSeparator = stringPointer("─")
|
||||
style.Table.ColumnSeparator = stringPointer("│")
|
||||
style.Table.RowSeparator = stringPointer("─")
|
||||
style.DefinitionTerm.Color = color(palette.Title)
|
||||
style.DefinitionDescription.Color = color(palette.Text)
|
||||
return style
|
||||
}
|
||||
|
||||
func themeAuthorColor(palette themePalette, index int) string {
|
||||
if len(palette.AuthorPalette) == 0 {
|
||||
return palette.Text
|
||||
}
|
||||
return palette.AuthorPalette[index%len(palette.AuthorPalette)]
|
||||
}
|
||||
|
||||
func stringPointer(value string) *string {
|
||||
return &value
|
||||
}
|
||||
|
||||
func stripQuoteMarker(line string) (string, bool) {
|
||||
trimmed := strings.TrimLeft(line, " \t")
|
||||
if !strings.HasPrefix(trimmed, ">") {
|
||||
|
||||
Reference in New Issue
Block a user