okami.mom/glamour

git clone https://git.nkp.pet/okami.mom/glamour

Kieran Klukaschore: fix pre-existing lint failuresc293649

main
16.8 KiB691 linesraw
1// Package styles provides default styles for the glamour package.
2package styles
3
4//go:generate go run ../internal/generate-style-json
5
6import (
7	"charm.land/glamour/v2/ansi"
8)
9
10const (
11	defaultListIndent      = 2
12	defaultListLevelIndent = 4
13	defaultMargin          = 2
14
15	defaultHeadingPrefixH2    = "## "
16	defaultHeadingPrefixH3    = "### "
17	defaultHeadingPrefixH4    = "#### "
18	defaultHeadingPrefixH5    = "##### "
19	defaultHeadingPrefixH6    = "###### "
20	defaultTaskTickedPrefix   = "[āœ“] "
21	defaultTaskUntickedPrefix = "[ ] "
22	defaultImageFormat        = "Image: {{.text}} →"
23	defaultHorizontalRule     = "\n--------\n"
24	defaultArrowBlockPrefix   = "\n🠶 "
25)
26
27// Default styles.
28const (
29	AsciiStyle      = "ascii" //nolint: revive
30	DarkStyle       = "dark"
31	DraculaStyle    = "dracula"
32	TokyoNightStyle = "tokyo-night"
33	LightStyle      = "light"
34	NoTTYStyle      = "notty"
35	PinkStyle       = "pink"
36)
37
38var (
39	// ASCIIStyleConfig uses only ASCII characters.
40	ASCIIStyleConfig = ansi.StyleConfig{
41		Document: ansi.StyleBlock{
42			StylePrimitive: ansi.StylePrimitive{
43				BlockPrefix: "\n",
44				BlockSuffix: "\n",
45			},
46			Margin: uintPtr(defaultMargin),
47		},
48		BlockQuote: ansi.StyleBlock{
49			StylePrimitive: ansi.StylePrimitive{},
50			Indent:         uintPtr(1),
51			IndentToken:    stringPtr("| "),
52		},
53		Paragraph: ansi.StyleBlock{
54			StylePrimitive: ansi.StylePrimitive{},
55		},
56		List: ansi.StyleList{
57			StyleBlock: ansi.StyleBlock{
58				StylePrimitive: ansi.StylePrimitive{},
59			},
60			LevelIndent: defaultListLevelIndent,
61		},
62		Heading: ansi.StyleBlock{
63			StylePrimitive: ansi.StylePrimitive{
64				BlockSuffix: "\n",
65			},
66		},
67		H1: ansi.StyleBlock{
68			StylePrimitive: ansi.StylePrimitive{
69				Prefix: "# ",
70			},
71		},
72		H2: ansi.StyleBlock{
73			StylePrimitive: ansi.StylePrimitive{
74				Prefix: defaultHeadingPrefixH2,
75			},
76		},
77		H3: ansi.StyleBlock{
78			StylePrimitive: ansi.StylePrimitive{
79				Prefix: defaultHeadingPrefixH3,
80			},
81		},
82		H4: ansi.StyleBlock{
83			StylePrimitive: ansi.StylePrimitive{
84				Prefix: defaultHeadingPrefixH4,
85			},
86		},
87		H5: ansi.StyleBlock{
88			StylePrimitive: ansi.StylePrimitive{
89				Prefix: defaultHeadingPrefixH5,
90			},
91		},
92		H6: ansi.StyleBlock{
93			StylePrimitive: ansi.StylePrimitive{
94				Prefix: defaultHeadingPrefixH6,
95			},
96		},
97		Strikethrough: ansi.StylePrimitive{
98			BlockPrefix: "~~",
99			BlockSuffix: "~~",
100		},
101		Emph: ansi.StylePrimitive{
102			BlockPrefix: "*",
103			BlockSuffix: "*",
104		},
105		Strong: ansi.StylePrimitive{
106			BlockPrefix: "**",
107			BlockSuffix: "**",
108		},
109		HorizontalRule: ansi.StylePrimitive{
110			Format: defaultHorizontalRule,
111		},
112		Item: ansi.StylePrimitive{
113			BlockPrefix: "• ",
114		},
115		Enumeration: ansi.StylePrimitive{
116			BlockPrefix: ". ",
117		},
118		Task: ansi.StyleTask{
119			Ticked:   "[x] ",
120			Unticked: defaultTaskUntickedPrefix,
121		},
122		ImageText: ansi.StylePrimitive{
123			Format: defaultImageFormat,
124		},
125		Code: ansi.StyleBlock{
126			StylePrimitive: ansi.StylePrimitive{
127				BlockPrefix: "`",
128				BlockSuffix: "`",
129			},
130		},
131		CodeBlock: ansi.StyleCodeBlock{
132			StyleBlock: ansi.StyleBlock{
133				Margin: uintPtr(defaultMargin),
134			},
135		},
136		Table: ansi.StyleTable{
137			CenterSeparator: stringPtr("|"),
138			ColumnSeparator: stringPtr("|"),
139			RowSeparator:    stringPtr("-"),
140		},
141		DefinitionDescription: ansi.StylePrimitive{
142			BlockPrefix: "\n* ",
143		},
144	}
145
146	// DarkStyleConfig is the default dark style.
147	DarkStyleConfig = ansi.StyleConfig{
148		Document: ansi.StyleBlock{
149			StylePrimitive: ansi.StylePrimitive{
150				BlockPrefix: "\n",
151				BlockSuffix: "\n",
152				Color:       stringPtr("252"),
153			},
154			Margin: uintPtr(defaultMargin),
155		},
156		BlockQuote: ansi.StyleBlock{
157			StylePrimitive: ansi.StylePrimitive{},
158			Indent:         uintPtr(1),
159			IndentToken:    stringPtr("│ "),
160		},
161		List: ansi.StyleList{
162			LevelIndent: defaultListIndent,
163		},
164		Heading: ansi.StyleBlock{
165			StylePrimitive: ansi.StylePrimitive{
166				BlockSuffix: "\n",
167				Color:       stringPtr("39"),
168				Bold:        boolPtr(true),
169			},
170		},
171		H1: ansi.StyleBlock{
172			StylePrimitive: ansi.StylePrimitive{
173				Prefix:          " ",
174				Suffix:          " ",
175				Color:           stringPtr("228"),
176				BackgroundColor: stringPtr("63"),
177				Bold:            boolPtr(true),
178			},
179		},
180		H2: ansi.StyleBlock{
181			StylePrimitive: ansi.StylePrimitive{
182				Prefix: defaultHeadingPrefixH2,
183			},
184		},
185		H3: ansi.StyleBlock{
186			StylePrimitive: ansi.StylePrimitive{
187				Prefix: defaultHeadingPrefixH3,
188			},
189		},
190		H4: ansi.StyleBlock{
191			StylePrimitive: ansi.StylePrimitive{
192				Prefix: defaultHeadingPrefixH4,
193			},
194		},
195		H5: ansi.StyleBlock{
196			StylePrimitive: ansi.StylePrimitive{
197				Prefix: defaultHeadingPrefixH5,
198			},
199		},
200		H6: ansi.StyleBlock{
201			StylePrimitive: ansi.StylePrimitive{
202				Prefix: defaultHeadingPrefixH6,
203				Color:  stringPtr("35"),
204				Bold:   boolPtr(false),
205			},
206		},
207		Strikethrough: ansi.StylePrimitive{
208			CrossedOut: boolPtr(true),
209		},
210		Emph: ansi.StylePrimitive{
211			Italic: boolPtr(true),
212		},
213		Strong: ansi.StylePrimitive{
214			Bold: boolPtr(true),
215		},
216		HorizontalRule: ansi.StylePrimitive{
217			Color:  stringPtr("240"),
218			Format: defaultHorizontalRule,
219		},
220		Item: ansi.StylePrimitive{
221			BlockPrefix: "• ",
222		},
223		Enumeration: ansi.StylePrimitive{
224			BlockPrefix: ". ",
225		},
226		Task: ansi.StyleTask{
227			StylePrimitive: ansi.StylePrimitive{},
228			Ticked:         defaultTaskTickedPrefix,
229			Unticked:       defaultTaskUntickedPrefix,
230		},
231		Link: ansi.StylePrimitive{
232			Color:     stringPtr("30"),
233			Underline: boolPtr(true),
234		},
235		LinkText: ansi.StylePrimitive{
236			Color: stringPtr("35"),
237			Bold:  boolPtr(true),
238		},
239		Image: ansi.StylePrimitive{
240			Color:     stringPtr("212"),
241			Underline: boolPtr(true),
242		},
243		ImageText: ansi.StylePrimitive{
244			Color:  stringPtr("243"),
245			Format: defaultImageFormat,
246		},
247		Code: ansi.StyleBlock{
248			StylePrimitive: ansi.StylePrimitive{
249				Prefix:          "\u00a0", // Use non-breaking space to prevent hard breaks
250				Suffix:          "\u00a0", // Use non-breaking space to prevent hard breaks
251				Color:           stringPtr("203"),
252				BackgroundColor: stringPtr("236"),
253			},
254		},
255		CodeBlock: ansi.StyleCodeBlock{
256			StyleBlock: ansi.StyleBlock{
257				StylePrimitive: ansi.StylePrimitive{
258					Color: stringPtr("244"),
259				},
260				Margin: uintPtr(defaultMargin),
261			},
262			Chroma: &ansi.Chroma{
263				Text: ansi.StylePrimitive{
264					Color: stringPtr("#C4C4C4"),
265				},
266				Error: ansi.StylePrimitive{
267					Color:           stringPtr("#F1F1F1"),
268					BackgroundColor: stringPtr("#F05B5B"),
269				},
270				Comment: ansi.StylePrimitive{
271					Color: stringPtr("#676767"),
272				},
273				CommentPreproc: ansi.StylePrimitive{
274					Color: stringPtr("#FF875F"),
275				},
276				Keyword: ansi.StylePrimitive{
277					Color: stringPtr("#00AAFF"),
278				},
279				KeywordReserved: ansi.StylePrimitive{
280					Color: stringPtr("#FF5FD2"),
281				},
282				KeywordNamespace: ansi.StylePrimitive{
283					Color: stringPtr("#FF5F87"),
284				},
285				KeywordType: ansi.StylePrimitive{
286					Color: stringPtr("#6E6ED8"),
287				},
288				Operator: ansi.StylePrimitive{
289					Color: stringPtr("#EF8080"),
290				},
291				Punctuation: ansi.StylePrimitive{
292					Color: stringPtr("#E8E8A8"),
293				},
294				Name: ansi.StylePrimitive{
295					Color: stringPtr("#C4C4C4"),
296				},
297				NameBuiltin: ansi.StylePrimitive{
298					Color: stringPtr("#FF8EC7"),
299				},
300				NameTag: ansi.StylePrimitive{
301					Color: stringPtr("#B083EA"),
302				},
303				NameAttribute: ansi.StylePrimitive{
304					Color: stringPtr("#7A7AE6"),
305				},
306				NameClass: ansi.StylePrimitive{
307					Color:     stringPtr("#F1F1F1"),
308					Underline: boolPtr(true),
309					Bold:      boolPtr(true),
310				},
311				NameDecorator: ansi.StylePrimitive{
312					Color: stringPtr("#FFFF87"),
313				},
314				NameFunction: ansi.StylePrimitive{
315					Color: stringPtr("#00D787"),
316				},
317				LiteralNumber: ansi.StylePrimitive{
318					Color: stringPtr("#6EEFC0"),
319				},
320				LiteralString: ansi.StylePrimitive{
321					Color: stringPtr("#C69669"),
322				},
323				LiteralStringEscape: ansi.StylePrimitive{
324					Color: stringPtr("#AFFFD7"),
325				},
326				GenericDeleted: ansi.StylePrimitive{
327					Color: stringPtr("#FD5B5B"),
328				},
329				GenericEmph: ansi.StylePrimitive{
330					Italic: boolPtr(true),
331				},
332				GenericInserted: ansi.StylePrimitive{
333					Color: stringPtr("#00D787"),
334				},
335				GenericStrong: ansi.StylePrimitive{
336					Bold: boolPtr(true),
337				},
338				GenericSubheading: ansi.StylePrimitive{
339					Color: stringPtr("#777777"),
340				},
341				Background: ansi.StylePrimitive{
342					BackgroundColor: stringPtr("#373737"),
343				},
344			},
345		},
346		Table: ansi.StyleTable{
347			StyleBlock: ansi.StyleBlock{
348				StylePrimitive: ansi.StylePrimitive{},
349			},
350		},
351		DefinitionDescription: ansi.StylePrimitive{
352			BlockPrefix: defaultArrowBlockPrefix,
353		},
354	}
355
356	// LightStyleConfig is the default light style.
357	LightStyleConfig = ansi.StyleConfig{
358		Document: ansi.StyleBlock{
359			StylePrimitive: ansi.StylePrimitive{
360				BlockPrefix: "\n",
361				BlockSuffix: "\n",
362				Color:       stringPtr("234"),
363			},
364			Margin: uintPtr(defaultMargin),
365		},
366		BlockQuote: ansi.StyleBlock{
367			StylePrimitive: ansi.StylePrimitive{},
368			Indent:         uintPtr(1),
369			IndentToken:    stringPtr("│ "),
370		},
371		List: ansi.StyleList{
372			LevelIndent: defaultListIndent,
373		},
374		Heading: ansi.StyleBlock{
375			StylePrimitive: ansi.StylePrimitive{
376				BlockSuffix: "\n",
377				Color:       stringPtr("27"),
378				Bold:        boolPtr(true),
379			},
380		},
381		H1: ansi.StyleBlock{
382			StylePrimitive: ansi.StylePrimitive{
383				Prefix:          " ",
384				Suffix:          " ",
385				Color:           stringPtr("228"),
386				BackgroundColor: stringPtr("63"),
387				Bold:            boolPtr(true),
388			},
389		},
390		H2: ansi.StyleBlock{
391			StylePrimitive: ansi.StylePrimitive{
392				Prefix: defaultHeadingPrefixH2,
393			},
394		},
395		H3: ansi.StyleBlock{
396			StylePrimitive: ansi.StylePrimitive{
397				Prefix: defaultHeadingPrefixH3,
398			},
399		},
400		H4: ansi.StyleBlock{
401			StylePrimitive: ansi.StylePrimitive{
402				Prefix: defaultHeadingPrefixH4,
403			},
404		},
405		H5: ansi.StyleBlock{
406			StylePrimitive: ansi.StylePrimitive{
407				Prefix: defaultHeadingPrefixH5,
408			},
409		},
410		H6: ansi.StyleBlock{
411			StylePrimitive: ansi.StylePrimitive{
412				Prefix: defaultHeadingPrefixH6,
413				Bold:   boolPtr(false),
414			},
415		},
416		Strikethrough: ansi.StylePrimitive{
417			CrossedOut: boolPtr(true),
418		},
419		Emph: ansi.StylePrimitive{
420			Italic: boolPtr(true),
421		},
422		Strong: ansi.StylePrimitive{
423			Bold: boolPtr(true),
424		},
425		HorizontalRule: ansi.StylePrimitive{
426			Color:  stringPtr("249"),
427			Format: defaultHorizontalRule,
428		},
429		Item: ansi.StylePrimitive{
430			BlockPrefix: "• ",
431		},
432		Enumeration: ansi.StylePrimitive{
433			BlockPrefix: ". ",
434		},
435		Task: ansi.StyleTask{
436			StylePrimitive: ansi.StylePrimitive{},
437			Ticked:         defaultTaskTickedPrefix,
438			Unticked:       defaultTaskUntickedPrefix,
439		},
440		Link: ansi.StylePrimitive{
441			Color:     stringPtr("36"),
442			Underline: boolPtr(true),
443		},
444		LinkText: ansi.StylePrimitive{
445			Color: stringPtr("29"),
446			Bold:  boolPtr(true),
447		},
448		Image: ansi.StylePrimitive{
449			Color:     stringPtr("205"),
450			Underline: boolPtr(true),
451		},
452		ImageText: ansi.StylePrimitive{
453			Color:  stringPtr("243"),
454			Format: defaultImageFormat,
455		},
456		Code: ansi.StyleBlock{
457			StylePrimitive: ansi.StylePrimitive{
458				Prefix:          "\u00a0", // Use non-breaking space to prevent hard breaks
459				Suffix:          "\u00a0", // Use non-breaking space to prevent hard breaks
460				Color:           stringPtr("203"),
461				BackgroundColor: stringPtr("254"),
462			},
463		},
464		CodeBlock: ansi.StyleCodeBlock{
465			StyleBlock: ansi.StyleBlock{
466				StylePrimitive: ansi.StylePrimitive{
467					Color: stringPtr("242"),
468				},
469				Margin: uintPtr(defaultMargin),
470			},
471			Chroma: &ansi.Chroma{
472				Text: ansi.StylePrimitive{
473					Color: stringPtr("#2A2A2A"),
474				},
475				Error: ansi.StylePrimitive{
476					Color:           stringPtr("#F1F1F1"),
477					BackgroundColor: stringPtr("#FF5555"),
478				},
479				Comment: ansi.StylePrimitive{
480					Color: stringPtr("#8D8D8D"),
481				},
482				CommentPreproc: ansi.StylePrimitive{
483					Color: stringPtr("#FF875F"),
484				},
485				Keyword: ansi.StylePrimitive{
486					Color: stringPtr("#279EFC"),
487				},
488				KeywordReserved: ansi.StylePrimitive{
489					Color: stringPtr("#FF5FD2"),
490				},
491				KeywordNamespace: ansi.StylePrimitive{
492					Color: stringPtr("#FB406F"),
493				},
494				KeywordType: ansi.StylePrimitive{
495					Color: stringPtr("#7049C2"),
496				},
497				Operator: ansi.StylePrimitive{
498					Color: stringPtr("#FF2626"),
499				},
500				Punctuation: ansi.StylePrimitive{
501					Color: stringPtr("#FA7878"),
502				},
503				NameBuiltin: ansi.StylePrimitive{
504					Color: stringPtr("#0A1BB1"),
505				},
506				NameTag: ansi.StylePrimitive{
507					Color: stringPtr("#581290"),
508				},
509				NameAttribute: ansi.StylePrimitive{
510					Color: stringPtr("#8362CB"),
511				},
512				NameClass: ansi.StylePrimitive{
513					Color:     stringPtr("#212121"),
514					Underline: boolPtr(true),
515					Bold:      boolPtr(true),
516				},
517				NameConstant: ansi.StylePrimitive{
518					Color: stringPtr("#581290"),
519				},
520				NameDecorator: ansi.StylePrimitive{
521					Color: stringPtr("#A3A322"),
522				},
523				NameFunction: ansi.StylePrimitive{
524					Color: stringPtr("#019F57"),
525				},
526				LiteralNumber: ansi.StylePrimitive{
527					Color: stringPtr("#22CCAE"),
528				},
529				LiteralString: ansi.StylePrimitive{
530					Color: stringPtr("#7E5B38"),
531				},
532				LiteralStringEscape: ansi.StylePrimitive{
533					Color: stringPtr("#00AEAE"),
534				},
535				GenericDeleted: ansi.StylePrimitive{
536					Color: stringPtr("#FD5B5B"),
537				},
538				GenericEmph: ansi.StylePrimitive{
539					Italic: boolPtr(true),
540				},
541				GenericInserted: ansi.StylePrimitive{
542					Color: stringPtr("#00D787"),
543				},
544				GenericStrong: ansi.StylePrimitive{
545					Bold: boolPtr(true),
546				},
547				GenericSubheading: ansi.StylePrimitive{
548					Color: stringPtr("#777777"),
549				},
550				Background: ansi.StylePrimitive{
551					BackgroundColor: stringPtr("#373737"),
552				},
553			},
554		},
555		Table: ansi.StyleTable{
556			StyleBlock: ansi.StyleBlock{
557				StylePrimitive: ansi.StylePrimitive{},
558			},
559		},
560		DefinitionDescription: ansi.StylePrimitive{
561			BlockPrefix: defaultArrowBlockPrefix,
562		},
563	}
564
565	// PinkStyleConfig is the default pink style.
566	PinkStyleConfig = ansi.StyleConfig{
567		Document: ansi.StyleBlock{
568			Margin: uintPtr(defaultMargin),
569		},
570		BlockQuote: ansi.StyleBlock{
571			Indent:      uintPtr(1),
572			IndentToken: stringPtr("│ "),
573		},
574		List: ansi.StyleList{
575			LevelIndent: defaultListIndent,
576		},
577		Heading: ansi.StyleBlock{
578			StylePrimitive: ansi.StylePrimitive{
579				BlockSuffix: "\n",
580				Color:       stringPtr("212"),
581				Bold:        boolPtr(true),
582			},
583		},
584		H1: ansi.StyleBlock{
585			StylePrimitive: ansi.StylePrimitive{
586				BlockSuffix: "\n",
587				BlockPrefix: "\n",
588				Prefix:      "",
589			},
590		},
591		H2: ansi.StyleBlock{
592			StylePrimitive: ansi.StylePrimitive{
593				Prefix: "ā–Œ ",
594			},
595		},
596		H3: ansi.StyleBlock{
597			StylePrimitive: ansi.StylePrimitive{
598				Prefix: "ā”ƒ ",
599			},
600		},
601		H4: ansi.StyleBlock{
602			StylePrimitive: ansi.StylePrimitive{
603				Prefix: "│ ",
604			},
605		},
606		H5: ansi.StyleBlock{
607			StylePrimitive: ansi.StylePrimitive{
608				Prefix: "┆ ",
609			},
610		},
611		H6: ansi.StyleBlock{
612			StylePrimitive: ansi.StylePrimitive{
613				Prefix: "ā”Š ",
614				Bold:   boolPtr(false),
615			},
616		},
617		Text: ansi.StylePrimitive{},
618		Strikethrough: ansi.StylePrimitive{
619			CrossedOut: boolPtr(true),
620		},
621		Emph: ansi.StylePrimitive{
622			Italic: boolPtr(true),
623		},
624		Strong: ansi.StylePrimitive{
625			Bold: boolPtr(true),
626		},
627		HorizontalRule: ansi.StylePrimitive{
628			Color:  stringPtr("212"),
629			Format: "\n──────\n",
630		},
631		Item: ansi.StylePrimitive{
632			BlockPrefix: "• ",
633		},
634		Enumeration: ansi.StylePrimitive{
635			BlockPrefix: ". ",
636		},
637		Task: ansi.StyleTask{
638			Ticked:   defaultTaskTickedPrefix,
639			Unticked: defaultTaskUntickedPrefix,
640		},
641		Link: ansi.StylePrimitive{
642			Color:     stringPtr("99"),
643			Underline: boolPtr(true),
644		},
645		LinkText: ansi.StylePrimitive{
646			Bold: boolPtr(true),
647		},
648		Image: ansi.StylePrimitive{
649			Underline: boolPtr(true),
650		},
651		ImageText: ansi.StylePrimitive{
652			Format: "Image: {{.text}}",
653		},
654		Code: ansi.StyleBlock{
655			StylePrimitive: ansi.StylePrimitive{
656				Color:           stringPtr("212"),
657				BackgroundColor: stringPtr("236"),
658				Prefix:          "\u00a0", // Use non-breaking space to prevent hard breaks
659				Suffix:          "\u00a0", // Use non-breaking space to prevent hard breaks
660			},
661		},
662		Table:          ansi.StyleTable{},
663		DefinitionList: ansi.StyleBlock{},
664		DefinitionTerm: ansi.StylePrimitive{},
665		DefinitionDescription: ansi.StylePrimitive{
666			BlockPrefix: defaultArrowBlockPrefix,
667		},
668		HTMLBlock: ansi.StyleBlock{},
669		HTMLSpan:  ansi.StyleBlock{},
670	}
671
672	// NoTTYStyleConfig is the default notty style.
673	NoTTYStyleConfig = ASCIIStyleConfig
674
675	// DefaultStyles are the default styles.
676	DefaultStyles = map[string]*ansi.StyleConfig{
677		AsciiStyle: &ASCIIStyleConfig,
678		DarkStyle:  &DarkStyleConfig,
679		LightStyle: &LightStyleConfig,
680		NoTTYStyle: &NoTTYStyleConfig,
681		PinkStyle:  &PinkStyleConfig,
682
683		// Popular themes
684		DraculaStyle:    &DraculaStyleConfig,
685		TokyoNightStyle: &TokyoNightStyleConfig,
686	}
687)
688
689func boolPtr(b bool) *bool       { return &b }
690func stringPtr(s string) *string { return &s }
691func uintPtr(u uint) *uint       { return &u }