okami.mom/glamour
git clone https://git.nkp.pet/okami.mom/glamour
cf874d7
main
1package ansi 2 3// Chroma holds all the chroma settings. 4type Chroma struct { 5Text StylePrimitive `json:"text,omitempty"` 6Error StylePrimitive `json:"error,omitempty"` 7Comment StylePrimitive `json:"comment,omitempty"` 8CommentPreproc StylePrimitive `json:"comment_preproc,omitempty"` 9Keyword StylePrimitive `json:"keyword,omitempty"` 10KeywordReserved StylePrimitive `json:"keyword_reserved,omitempty"` 11KeywordNamespace StylePrimitive `json:"keyword_namespace,omitempty"` 12KeywordType StylePrimitive `json:"keyword_type,omitempty"` 13Operator StylePrimitive `json:"operator,omitempty"` 14Punctuation StylePrimitive `json:"punctuation,omitempty"` 15Name StylePrimitive `json:"name,omitempty"` 16NameBuiltin StylePrimitive `json:"name_builtin,omitempty"` 17NameTag StylePrimitive `json:"name_tag,omitempty"` 18NameAttribute StylePrimitive `json:"name_attribute,omitempty"` 19NameClass StylePrimitive `json:"name_class,omitempty"` 20NameConstant StylePrimitive `json:"name_constant,omitempty"` 21NameDecorator StylePrimitive `json:"name_decorator,omitempty"` 22NameException StylePrimitive `json:"name_exception,omitempty"` 23NameFunction StylePrimitive `json:"name_function,omitempty"` 24NameOther StylePrimitive `json:"name_other,omitempty"` 25Literal StylePrimitive `json:"literal,omitempty"` 26LiteralNumber StylePrimitive `json:"literal_number,omitempty"` 27LiteralDate StylePrimitive `json:"literal_date,omitempty"` 28LiteralString StylePrimitive `json:"literal_string,omitempty"` 29LiteralStringEscape StylePrimitive `json:"literal_string_escape,omitempty"` 30GenericDeleted StylePrimitive `json:"generic_deleted,omitempty"` 31GenericEmph StylePrimitive `json:"generic_emph,omitempty"` 32GenericInserted StylePrimitive `json:"generic_inserted,omitempty"` 33GenericStrong StylePrimitive `json:"generic_strong,omitempty"` 34GenericSubheading StylePrimitive `json:"generic_subheading,omitempty"` 35Background StylePrimitive `json:"background,omitempty"` 36} 37 38// StylePrimitive holds all the basic style settings. 39type StylePrimitive struct { 40BlockPrefix string `json:"block_prefix,omitempty"` 41BlockSuffix string `json:"block_suffix,omitempty"` 42Prefix string `json:"prefix,omitempty"` 43Suffix string `json:"suffix,omitempty"` 44Color * string `json:"color,omitempty"` 45BackgroundColor * string `json:"background_color,omitempty"` 46Underline * bool `json:"underline,omitempty"` 47Bold * bool `json:"bold,omitempty"` 48Upper * bool `json:"upper,omitempty"` 49Lower * bool `json:"lower,omitempty"` 50Title * bool `json:"title,omitempty"` 51Italic * bool `json:"italic,omitempty"` 52CrossedOut * bool `json:"crossed_out,omitempty"` 53Faint * bool `json:"faint,omitempty"` 54Conceal * bool `json:"conceal,omitempty"` 55Inverse * bool `json:"inverse,omitempty"` 56Blink * bool `json:"blink,omitempty"` 57Format string `json:"format,omitempty"` 58} 59 60// StyleTask holds the style settings for a task item. 61type StyleTask struct { 62StylePrimitive 63Ticked string `json:"ticked,omitempty"` 64Unticked string `json:"unticked,omitempty"` 65} 66 67// StyleBlock holds the basic style settings for block elements. 68type StyleBlock struct { 69StylePrimitive 70Indent * uint `json:"indent,omitempty"` 71IndentToken * string `json:"indent_token,omitempty"` 72Margin * uint `json:"margin,omitempty"` 73} 74 75// StyleCodeBlock holds the style settings for a code block. 76type StyleCodeBlock struct { 77StyleBlock 78Theme string `json:"theme,omitempty"` 79Chroma * Chroma `json:"chroma,omitempty"` 80} 81 82// StyleList holds the style settings for a list. 83type StyleList struct { 84StyleBlock 85LevelIndent uint `json:"level_indent,omitempty"` 86} 87 88// StyleTable holds the style settings for a table. 89type StyleTable struct { 90StyleBlock 91CenterSeparator * string `json:"center_separator,omitempty"` 92ColumnSeparator * string `json:"column_separator,omitempty"` 93RowSeparator * string `json:"row_separator,omitempty"` 94} 95 96// StyleConfig is used to configure the styling behavior of an ANSIRenderer. 97type StyleConfig struct { 98Document StyleBlock `json:"document,omitempty"` 99BlockQuote StyleBlock `json:"block_quote,omitempty"` 100Paragraph StyleBlock `json:"paragraph,omitempty"` 101List StyleList `json:"list,omitempty"` 102 103Heading StyleBlock `json:"heading,omitempty"` 104H1 StyleBlock `json:"h1,omitempty"` 105H2 StyleBlock `json:"h2,omitempty"` 106H3 StyleBlock `json:"h3,omitempty"` 107H4 StyleBlock `json:"h4,omitempty"` 108H5 StyleBlock `json:"h5,omitempty"` 109H6 StyleBlock `json:"h6,omitempty"` 110 111Text StylePrimitive `json:"text,omitempty"` 112Strikethrough StylePrimitive `json:"strikethrough,omitempty"` 113Emph StylePrimitive `json:"emph,omitempty"` 114Strong StylePrimitive `json:"strong,omitempty"` 115HorizontalRule StylePrimitive `json:"hr,omitempty"` 116 117Item StylePrimitive `json:"item,omitempty"` 118Enumeration StylePrimitive `json:"enumeration,omitempty"` 119Task StyleTask `json:"task,omitempty"` 120 121Link StylePrimitive `json:"link,omitempty"` 122LinkText StylePrimitive `json:"link_text,omitempty"` 123 124Image StylePrimitive `json:"image,omitempty"` 125ImageText StylePrimitive `json:"image_text,omitempty"` 126 127Code StyleBlock `json:"code,omitempty"` 128CodeBlock StyleCodeBlock `json:"code_block,omitempty"` 129 130Table StyleTable `json:"table,omitempty"` 131 132DefinitionList StyleBlock `json:"definition_list,omitempty"` 133DefinitionTerm StylePrimitive `json:"definition_term,omitempty"` 134DefinitionDescription StylePrimitive `json:"definition_description,omitempty"` 135 136HTMLBlock StyleBlock `json:"html_block,omitempty"` 137HTMLSpan StyleBlock `json:"html_span,omitempty"` 138} 139 140func cascadeStyles (s ... StyleBlock )StyleBlock { 141var r StyleBlock 142for _ ,v := range s { 143r = cascadeStyle (r ,v ,true ) 144 } 145return r 146} 147 148func cascadeStylePrimitives (s ... StylePrimitive )StylePrimitive { 149var r StylePrimitive 150for _ ,v := range s { 151r = cascadeStylePrimitive (r ,v ,true ) 152 } 153return r 154} 155 156func cascadeStylePrimitive (parent ,child StylePrimitive ,toBlock bool )StylePrimitive { 157s := child 158 159s .Color = parent .Color 160s .BackgroundColor = parent .BackgroundColor 161s .Underline = parent .Underline 162s .Bold = parent .Bold 163s .Upper = parent .Upper 164s .Title = parent .Title 165s .Lower = parent .Lower 166s .Italic = parent .Italic 167s .CrossedOut = parent .CrossedOut 168s .Faint = parent .Faint 169s .Conceal = parent .Conceal 170s .Inverse = parent .Inverse 171s .Blink = parent .Blink 172 173if toBlock { 174s .BlockPrefix = parent .BlockPrefix 175s .BlockSuffix = parent .BlockSuffix 176s .Prefix = parent .Prefix 177s .Suffix = parent .Suffix 178 } 179 180if child .Color != nil { 181s .Color = child .Color 182 } 183if child .BackgroundColor != nil { 184s .BackgroundColor = child .BackgroundColor 185 } 186if child .Underline != nil { 187s .Underline = child .Underline 188 } 189if child .Bold != nil { 190s .Bold = child .Bold 191 } 192if child .Upper != nil { 193s .Upper = child .Upper 194 } 195if child .Lower != nil { 196s .Lower = child .Lower 197 } 198if child .Title != nil { 199s .Title = child .Title 200 } 201if child .Italic != nil { 202s .Italic = child .Italic 203 } 204if child .CrossedOut != nil { 205s .CrossedOut = child .CrossedOut 206 } 207if child .Faint != nil { 208s .Faint = child .Faint 209 } 210if child .Conceal != nil { 211s .Conceal = child .Conceal 212 } 213if child .Inverse != nil { 214s .Inverse = child .Inverse 215 } 216if child .Blink != nil { 217s .Blink = child .Blink 218 } 219if child .BlockPrefix != "" { 220s .BlockPrefix = child .BlockPrefix 221 } 222if child .BlockSuffix != "" { 223s .BlockSuffix = child .BlockSuffix 224 } 225if child .Prefix != "" { 226s .Prefix = child .Prefix 227 } 228if child .Suffix != "" { 229s .Suffix = child .Suffix 230 } 231if child .Format != "" { 232s .Format = child .Format 233 } 234 235return s 236} 237 238func cascadeStyle (parent StyleBlock ,child StyleBlock ,toBlock bool )StyleBlock { 239s := child 240s .StylePrimitive = cascadeStylePrimitive (parent .StylePrimitive ,child .StylePrimitive ,toBlock ) 241 242if toBlock { 243s .Indent = parent .Indent 244s .Margin = parent .Margin 245 } 246 247if child .Indent != nil { 248s .Indent = child .Indent 249 } 250 251return s 252}