theme.go

  1package theme
  2
  3import (
  4	"image/color"
  5)
  6
  7type Theme interface {
  8	// Base colors
  9	Primary() color.Color
 10	Secondary() color.Color
 11	Accent() color.Color
 12
 13	// Status colors
 14	Error() color.Color
 15	Warning() color.Color
 16	Success() color.Color
 17	Info() color.Color
 18
 19	// Text colors
 20	Text() color.Color
 21	TextMuted() color.Color
 22	TextEmphasized() color.Color
 23
 24	// Background colors
 25	Background() color.Color
 26	BackgroundSecondary() color.Color
 27	BackgroundDarker() color.Color
 28
 29	// Border colors
 30	BorderNormal() color.Color
 31	BorderFocused() color.Color
 32	BorderDim() color.Color
 33
 34	// Diff view colors
 35	DiffAdded() color.Color
 36	DiffRemoved() color.Color
 37	DiffContext() color.Color
 38	DiffHunkHeader() color.Color
 39	DiffHighlightAdded() color.Color
 40	DiffHighlightRemoved() color.Color
 41	DiffAddedBg() color.Color
 42	DiffRemovedBg() color.Color
 43	DiffContextBg() color.Color
 44	DiffLineNumber() color.Color
 45	DiffAddedLineNumberBg() color.Color
 46	DiffRemovedLineNumberBg() color.Color
 47
 48	// Markdown colors
 49	MarkdownText() color.Color
 50	MarkdownHeading() color.Color
 51	MarkdownLink() color.Color
 52	MarkdownLinkText() color.Color
 53	MarkdownCode() color.Color
 54	MarkdownBlockQuote() color.Color
 55	MarkdownEmph() color.Color
 56	MarkdownStrong() color.Color
 57	MarkdownHorizontalRule() color.Color
 58	MarkdownListItem() color.Color
 59	MarkdownListEnumeration() color.Color
 60	MarkdownImage() color.Color
 61	MarkdownImageText() color.Color
 62	MarkdownCodeBlock() color.Color
 63
 64	// Syntax highlighting colors
 65	SyntaxComment() color.Color
 66	SyntaxKeyword() color.Color
 67	SyntaxFunction() color.Color
 68	SyntaxVariable() color.Color
 69	SyntaxString() color.Color
 70	SyntaxNumber() color.Color
 71	SyntaxType() color.Color
 72	SyntaxOperator() color.Color
 73	SyntaxPunctuation() color.Color
 74}
 75
 76// BaseTheme provides a default implementation of the Theme interface
 77// that can be embedded in concrete theme implementations.
 78type BaseTheme struct {
 79	// Base colors
 80	PrimaryColor   color.Color
 81	SecondaryColor color.Color
 82	AccentColor    color.Color
 83
 84	// Status colors
 85	ErrorColor   color.Color
 86	WarningColor color.Color
 87	SuccessColor color.Color
 88	InfoColor    color.Color
 89
 90	// Text colors
 91	TextColor           color.Color
 92	TextMutedColor      color.Color
 93	TextEmphasizedColor color.Color
 94
 95	// Background colors
 96	BackgroundColor          color.Color
 97	BackgroundSecondaryColor color.Color
 98	BackgroundDarkerColor    color.Color
 99
100	// Border colors
101	BorderNormalColor  color.Color
102	BorderFocusedColor color.Color
103	BorderDimColor     color.Color
104
105	// Diff view colors
106	DiffAddedColor               color.Color
107	DiffRemovedColor             color.Color
108	DiffContextColor             color.Color
109	DiffHunkHeaderColor          color.Color
110	DiffHighlightAddedColor      color.Color
111	DiffHighlightRemovedColor    color.Color
112	DiffAddedBgColor             color.Color
113	DiffRemovedBgColor           color.Color
114	DiffContextBgColor           color.Color
115	DiffLineNumberColor          color.Color
116	DiffAddedLineNumberBgColor   color.Color
117	DiffRemovedLineNumberBgColor color.Color
118
119	// Markdown colors
120	MarkdownTextColor            color.Color
121	MarkdownHeadingColor         color.Color
122	MarkdownLinkColor            color.Color
123	MarkdownLinkTextColor        color.Color
124	MarkdownCodeColor            color.Color
125	MarkdownBlockQuoteColor      color.Color
126	MarkdownEmphColor            color.Color
127	MarkdownStrongColor          color.Color
128	MarkdownHorizontalRuleColor  color.Color
129	MarkdownListItemColor        color.Color
130	MarkdownListEnumerationColor color.Color
131	MarkdownImageColor           color.Color
132	MarkdownImageTextColor       color.Color
133	MarkdownCodeBlockColor       color.Color
134
135	// Syntax highlighting colors
136	SyntaxCommentColor     color.Color
137	SyntaxKeywordColor     color.Color
138	SyntaxFunctionColor    color.Color
139	SyntaxVariableColor    color.Color
140	SyntaxStringColor      color.Color
141	SyntaxNumberColor      color.Color
142	SyntaxTypeColor        color.Color
143	SyntaxOperatorColor    color.Color
144	SyntaxPunctuationColor color.Color
145}
146
147// Implement the Theme interface for BaseTheme
148func (t *BaseTheme) Primary() color.Color   { return t.PrimaryColor }
149func (t *BaseTheme) Secondary() color.Color { return t.SecondaryColor }
150func (t *BaseTheme) Accent() color.Color    { return t.AccentColor }
151
152func (t *BaseTheme) Error() color.Color   { return t.ErrorColor }
153func (t *BaseTheme) Warning() color.Color { return t.WarningColor }
154func (t *BaseTheme) Success() color.Color { return t.SuccessColor }
155func (t *BaseTheme) Info() color.Color    { return t.InfoColor }
156
157func (t *BaseTheme) Text() color.Color           { return t.TextColor }
158func (t *BaseTheme) TextMuted() color.Color      { return t.TextMutedColor }
159func (t *BaseTheme) TextEmphasized() color.Color { return t.TextEmphasizedColor }
160
161func (t *BaseTheme) Background() color.Color          { return t.BackgroundColor }
162func (t *BaseTheme) BackgroundSecondary() color.Color { return t.BackgroundSecondaryColor }
163func (t *BaseTheme) BackgroundDarker() color.Color    { return t.BackgroundDarkerColor }
164
165func (t *BaseTheme) BorderNormal() color.Color  { return t.BorderNormalColor }
166func (t *BaseTheme) BorderFocused() color.Color { return t.BorderFocusedColor }
167func (t *BaseTheme) BorderDim() color.Color     { return t.BorderDimColor }
168
169func (t *BaseTheme) DiffAdded() color.Color               { return t.DiffAddedColor }
170func (t *BaseTheme) DiffRemoved() color.Color             { return t.DiffRemovedColor }
171func (t *BaseTheme) DiffContext() color.Color             { return t.DiffContextColor }
172func (t *BaseTheme) DiffHunkHeader() color.Color          { return t.DiffHunkHeaderColor }
173func (t *BaseTheme) DiffHighlightAdded() color.Color      { return t.DiffHighlightAddedColor }
174func (t *BaseTheme) DiffHighlightRemoved() color.Color    { return t.DiffHighlightRemovedColor }
175func (t *BaseTheme) DiffAddedBg() color.Color             { return t.DiffAddedBgColor }
176func (t *BaseTheme) DiffRemovedBg() color.Color           { return t.DiffRemovedBgColor }
177func (t *BaseTheme) DiffContextBg() color.Color           { return t.DiffContextBgColor }
178func (t *BaseTheme) DiffLineNumber() color.Color          { return t.DiffLineNumberColor }
179func (t *BaseTheme) DiffAddedLineNumberBg() color.Color   { return t.DiffAddedLineNumberBgColor }
180func (t *BaseTheme) DiffRemovedLineNumberBg() color.Color { return t.DiffRemovedLineNumberBgColor }
181
182func (t *BaseTheme) MarkdownText() color.Color            { return t.MarkdownTextColor }
183func (t *BaseTheme) MarkdownHeading() color.Color         { return t.MarkdownHeadingColor }
184func (t *BaseTheme) MarkdownLink() color.Color            { return t.MarkdownLinkColor }
185func (t *BaseTheme) MarkdownLinkText() color.Color        { return t.MarkdownLinkTextColor }
186func (t *BaseTheme) MarkdownCode() color.Color            { return t.MarkdownCodeColor }
187func (t *BaseTheme) MarkdownBlockQuote() color.Color      { return t.MarkdownBlockQuoteColor }
188func (t *BaseTheme) MarkdownEmph() color.Color            { return t.MarkdownEmphColor }
189func (t *BaseTheme) MarkdownStrong() color.Color          { return t.MarkdownStrongColor }
190func (t *BaseTheme) MarkdownHorizontalRule() color.Color  { return t.MarkdownHorizontalRuleColor }
191func (t *BaseTheme) MarkdownListItem() color.Color        { return t.MarkdownListItemColor }
192func (t *BaseTheme) MarkdownListEnumeration() color.Color { return t.MarkdownListEnumerationColor }
193func (t *BaseTheme) MarkdownImage() color.Color           { return t.MarkdownImageColor }
194func (t *BaseTheme) MarkdownImageText() color.Color       { return t.MarkdownImageTextColor }
195func (t *BaseTheme) MarkdownCodeBlock() color.Color       { return t.MarkdownCodeBlockColor }
196
197func (t *BaseTheme) SyntaxComment() color.Color     { return t.SyntaxCommentColor }
198func (t *BaseTheme) SyntaxKeyword() color.Color     { return t.SyntaxKeywordColor }
199func (t *BaseTheme) SyntaxFunction() color.Color    { return t.SyntaxFunctionColor }
200func (t *BaseTheme) SyntaxVariable() color.Color    { return t.SyntaxVariableColor }
201func (t *BaseTheme) SyntaxString() color.Color      { return t.SyntaxStringColor }
202func (t *BaseTheme) SyntaxNumber() color.Color      { return t.SyntaxNumberColor }
203func (t *BaseTheme) SyntaxType() color.Color        { return t.SyntaxTypeColor }
204func (t *BaseTheme) SyntaxOperator() color.Color    { return t.SyntaxOperatorColor }
205func (t *BaseTheme) SyntaxPunctuation() color.Color { return t.SyntaxPunctuationColor }