1package app23import (4 "fmt"5 "image/color"67 "github.com/FelineStateMachine/puzzletea/theme"8 "github.com/charmbracelet/glamour/ansi"9)1011func helpMarkdownStyle(p theme.Palette) ansi.StyleConfig {12 return ansi.StyleConfig{13 Document: ansi.StyleBlock{14 StylePrimitive: ansi.StylePrimitive{15 Color: colorPtr(p.FG),16 },17 },18 BlockQuote: ansi.StyleBlock{19 StylePrimitive: ansi.StylePrimitive{20 Color: colorPtr(p.TextDim),21 },22 Indent: uintPtr(1),23 IndentToken: stringPtr("│ "),24 Margin: uintPtr(1),25 },26 Paragraph: ansi.StyleBlock{27 StylePrimitive: ansi.StylePrimitive{28 Color: colorPtr(p.FG),29 },30 Margin: uintPtr(1),31 },32 List: ansi.StyleList{33 StyleBlock: ansi.StyleBlock{34 StylePrimitive: ansi.StylePrimitive{35 Color: colorPtr(p.FG),36 },37 Margin: uintPtr(1),38 },39 LevelIndent: 2,40 },41 Heading: ansi.StyleBlock{42 StylePrimitive: ansi.StylePrimitive{43 Color: colorPtr(p.Accent),44 Bold: boolPtr(true),45 },46 Margin: uintPtr(1),47 },48 H1: ansi.StyleBlock{49 StylePrimitive: ansi.StylePrimitive{50 Color: colorPtr(p.Accent),51 Bold: boolPtr(true),52 },53 Margin: uintPtr(1),54 },55 H2: ansi.StyleBlock{56 StylePrimitive: ansi.StylePrimitive{57 Color: colorPtr(p.AccentSoft),58 Bold: boolPtr(true),59 },60 Margin: uintPtr(1),61 },62 H3: ansi.StyleBlock{63 StylePrimitive: ansi.StylePrimitive{64 Color: colorPtr(p.Info),65 Bold: boolPtr(true),66 },67 Margin: uintPtr(1),68 },69 H4: ansi.StyleBlock{70 StylePrimitive: ansi.StylePrimitive{71 Color: colorPtr(p.Secondary),72 Bold: boolPtr(true),73 },74 },75 H5: ansi.StyleBlock{76 StylePrimitive: ansi.StylePrimitive{77 Color: colorPtr(p.Linked),78 Bold: boolPtr(true),79 },80 },81 H6: ansi.StyleBlock{82 StylePrimitive: ansi.StylePrimitive{83 Color: colorPtr(p.TextDim),84 Bold: boolPtr(true),85 },86 },87 Text: ansi.StylePrimitive{88 Color: colorPtr(p.FG),89 },90 Emph: ansi.StylePrimitive{91 Color: colorPtr(p.Secondary),92 Italic: boolPtr(true),93 },94 Strong: ansi.StylePrimitive{95 Color: colorPtr(p.AccentSoft),96 Bold: boolPtr(true),97 },98 HorizontalRule: ansi.StylePrimitive{99 Color: colorPtr(p.Border),100 },101 Item: ansi.StylePrimitive{102 Color: colorPtr(p.Accent),103 },104 Enumeration: ansi.StylePrimitive{105 Color: colorPtr(p.Accent),106 },107 Task: ansi.StyleTask{108 StylePrimitive: ansi.StylePrimitive{109 Color: colorPtr(p.Accent),110 },111 Ticked: "[x]",112 Unticked: "[ ]",113 },114 Link: ansi.StylePrimitive{115 Color: colorPtr(p.Highlight),116 Underline: boolPtr(true),117 },118 LinkText: ansi.StylePrimitive{119 Color: colorPtr(p.Highlight),120 Underline: boolPtr(true),121 },122 Code: ansi.StyleBlock{123 StylePrimitive: ansi.StylePrimitive{124 Color: colorPtr(p.AccentSoft),125 BackgroundColor: colorPtr(p.Surface),126 },127 },128 CodeBlock: ansi.StyleCodeBlock{129 StyleBlock: ansi.StyleBlock{130 StylePrimitive: ansi.StylePrimitive{131 Color: colorPtr(p.FG),132 BackgroundColor: colorPtr(p.Surface),133 },134 Margin: uintPtr(1),135 },136 },137 Table: ansi.StyleTable{138 StyleBlock: ansi.StyleBlock{139 StylePrimitive: ansi.StylePrimitive{140 Color: colorPtr(p.FG),141 },142 Margin: uintPtr(1),143 },144 CenterSeparator: stringPtr("┼"),145 ColumnSeparator: stringPtr("│"),146 RowSeparator: stringPtr("─"),147 },148 DefinitionTerm: ansi.StylePrimitive{149 Color: colorPtr(p.Accent),150 Bold: boolPtr(true),151 },152 DefinitionDescription: ansi.StylePrimitive{153 Color: colorPtr(p.FG),154 },155 Strikethrough: ansi.StylePrimitive{156 Color: colorPtr(p.TextDim),157 },158 }159}160161func helpMarkdownThemeKey(p theme.Palette) string {162 return fmt.Sprintf(163 "%s:%s:%s:%s:%s:%s:%s:%s:%s",164 hexColor(p.BG),165 hexColor(p.FG),166 hexColor(p.Surface),167 hexColor(p.Accent),168 hexColor(p.AccentSoft),169 hexColor(p.Info),170 hexColor(p.Highlight),171 hexColor(p.Border),172 hexColor(p.TextDim),173 )174}175176func hexColor(c color.Color) string {177 r, g, b, _ := c.RGBA()178 return fmt.Sprintf("#%02x%02x%02x", uint8(r>>8), uint8(g>>8), uint8(b>>8))179}180181func colorPtr(c color.Color) *string {182 s := hexColor(c)183 return &s184}185186func boolPtr(v bool) *bool {187 return &v188}189190func stringPtr(v string) *string {191 return &v192}193194func uintPtr(v uint) *uint {195 return &v196}