the home site for me: also iteration 3 or 4 of my site

feat: add gleam support

dunkirk.sh 64339192 67835392

verified
+244
+1
config.toml
··· 18 18 19 19 highlight_code = true 20 20 highlight_theme = "css" 21 + extra_syntaxes_and_themes = ["syntaxes"] 21 22 22 23 [slugify] 23 24 paths = "on"
+243
syntaxes/gleam.sublime-syntax
··· 1 + %YAML 1.2 2 + --- 3 + version: 2 4 + 5 + file_extensions: 6 + - gleam 7 + 8 + scope: source.gleam 9 + 10 + variables: 11 + lower_ident: '[[:lower:]][[:word:]]*' 12 + upper_ident: '[[:upper:]][[:word:]]*' 13 + 14 + contexts: 15 + main: 16 + - include: base 17 + base: 18 + - include: attribute 19 + - include: bitstring 20 + - include: block 21 + - include: comment 22 + - include: constant_def 23 + - include: function_def 24 + - include: keyword 25 + - include: function_call 26 + - include: record 27 + - include: import 28 + - include: number 29 + - include: operator 30 + - include: punctuation 31 + - include: string 32 + - include: unused_name 33 + - include: type_name 34 + 35 + # Attributes (annotations) 36 + attribute: 37 + - match: ^\s*(@{{lower_ident}})\( 38 + captures: 39 + 1: variable.other.constant.gleam 40 + push: 41 + - include: arguments 42 + - meta_scope: meta.annotation.gleam 43 + - match: ^\s*(@{{lower_ident}}) 44 + scope: meta.annotation.gleam 45 + captures: 46 + 1: variable.other.constant.gleam 47 + 48 + # Arguments (to a function call, record constructor, or attribute) 49 + arguments: 50 + - include: bitstring 51 + - include: block 52 + - include: comment 53 + - include: function_def 54 + - include: function_call 55 + - include: record 56 + - include: number 57 + - include: operator 58 + - include: punctuation 59 + - include: string 60 + - include: unused_name 61 + - include: type_name 62 + - match: '\b{{lower_ident}}:' 63 + scope: constant.other.gleam 64 + - match: \) 65 + pop: true 66 + 67 + # Bitstrings 68 + bitstring: 69 + - match: '<<' 70 + scope: punctuation.definition.generic.begin.gleam 71 + push: 72 + - include: number 73 + - include: string 74 + - match: \b(bytes|int|float|bits|utf8|utf16|utf32|utf8_codepoint|utf16_codepoint|utf32_codepoint|signed|unsigned|big|little|native|unit|size)\b 75 + scope: keyword.other.gleam 76 + - match: '>>' 77 + scope: punctuation.definition.generic.end.gleam 78 + pop: true 79 + 80 + # Blocks 81 + block: 82 + - match: '{' 83 + scope: punctuation.section.block.begin.gleam 84 + push: base 85 + - match: '}' 86 + scope: punctuation.section.block.end.gleam 87 + pop: true 88 + 89 + # Comments 90 + comment: 91 + - match: ///?/? 92 + scope: punctuation.definition.comment.line.gleam 93 + push: 94 + - meta_scope: comment.line.gleam 95 + - match: $ 96 + pop: true 97 + 98 + # Constant definitions 99 + constant_def: 100 + - match: \b(const)\s+({{lower_ident}})\b 101 + captures: 102 + 1: keyword.other.gleam 103 + 2: entity.name.constant.gleam 104 + 105 + # Function calls 106 + function_call: 107 + - match: \b(?:{{lower_ident}}\.)*({{lower_ident}})\( 108 + captures: 109 + 1: variable.function.gleam 110 + push: arguments 111 + 112 + # Function definitions 113 + function_def: 114 + - match: \b(fn)(?:[[:space:]]+({{lower_ident}}))?[[:space:]]*\( 115 + captures: 116 + 1: storage.type.function.gleam 117 + 2: entity.name.function.gleam 118 + push: function_def_args 119 + 120 + # Function arguments 121 + function_def_args: 122 + - include: function_def 123 + - include: punctuation 124 + - include: type_name 125 + - include: unused_name 126 + - match: -> 127 + scope: keyword.operator.gleam 128 + - match: \b(?:({{lower_ident}})[[:space:]]+)?({{lower_ident}}:) 129 + captures: 130 + 1: constant.other.gleam 131 + 2: variable.parameter.gleam 132 + - match: \( 133 + push: function_def_args 134 + - match: \) 135 + pop: true 136 + 137 + # Imports 138 + import: 139 + - match: ^import\b 140 + scope: keyword.control.import.gleam 141 + push: 142 + - match: \bas\b 143 + scope: keyword.control.import.gleam 144 + - match: \b(?:{{lower_ident}}/)*{{lower_ident}}\b 145 + scope: entity.name.namespace.gleam 146 + - match: (\.)({) 147 + captures: 148 + 1: punctuation.accessor.gleam 149 + 2: punctuation.definition.generic.begin.gleam 150 + push: 151 + - include: punctuation 152 + - include: type_name 153 + - match: \bas\b 154 + scope: keyword.control.import.gleam 155 + - match: \btype\b 156 + scope: storage.type.gleam 157 + - match: '}' 158 + scope: punctuation.definition.generic.end.gleam 159 + pop: true 160 + - match: $ 161 + pop: true 162 + 163 + # Keywords 164 + keyword: 165 + - match: \b(as|assert|case|const|echo|if|let|panic|todo|use)\b 166 + scope: keyword.other.gleam 167 + - match: \b(opaque|pub)\b 168 + scope: storage.modifier.gleam 169 + - match: \btype\b 170 + scope: storage.type.gleam 171 + - match: \bfn\b 172 + scope: storage.type.function.gleam 173 + # Reserved for future use 174 + - match: \b(auto|delegate|derive|else|implement|macro|test)\b 175 + scope: invalid.illegal.gleam 176 + 177 + # Numbers 178 + number: 179 + - match: \b0b[01][01_]*\b 180 + scope: constant.numeric.binary.gleam 181 + - match: \b0o[0-7][0-7_]*\b 182 + scope: constant.numeric.octal.gleam 183 + - match: \b[0-9][0-9_]*(\.[0-9_]*(e-?[0-9][0-9_]*)?)?\b 184 + scope: constant.numeric.decimal.gleam 185 + - match: \b0x[[:xdigit:]][[:xdigit:]_]*\b 186 + scope: constant.numeric.hexadecimal.gleam 187 + 188 + # Operators 189 + operator: 190 + - match: <- 191 + scope: keyword.operator.assignment.gleam 192 + - match: (\|>|\.\.|<=\.|>=\.|==\.|!=\.|<\.|>\.|<=|>=|==|!=|<|>|<>) 193 + scope: keyword.operator.gleam 194 + - match: '=' 195 + scope: keyword.operator.assignment.gleam 196 + - match: -> 197 + scope: keyword.operator.gleam 198 + - match: (\+\.|\-\.|/\.|\*\.|%\.|\+|\-|/|\*|%) 199 + scope: keyword.operator.arithmetic.gleam 200 + - match: (&&|\|\|) 201 + scope: keyword.operator.logical.gleam 202 + - match: \| 203 + scope: keyword.operator.gleam 204 + 205 + # Punctuation (separators, accessors) 206 + punctuation: 207 + - match: \. 208 + scope: punctuation.accessor.gleam 209 + - match: ',' 210 + scope: punctuation.separator.gleam 211 + 212 + # Records (constructors with arguments) 213 + record: 214 + - match: \b((?:{{lower_ident}}\.)*{{upper_ident}})\( 215 + captures: 216 + 1: entity.name.type.gleam 217 + push: arguments 218 + 219 + # Strings 220 + string: 221 + - match: '"' 222 + scope: punctuation.definition.string.begin.gleam 223 + push: 224 + - meta_scope: string.quoted.double.gleam 225 + - match: \\[fnrt"\\] 226 + scope: constant.character.escape.gleam 227 + - match: \\u\{[[:xdigit:]]{1,6}\} 228 + scope: constant.character.escape.gleam 229 + - match: \\ 230 + scope: invalid.illegal.gleam 231 + - match: '"' 232 + scope: punctuation.definition.string.end.gleam 233 + pop: true 234 + 235 + # Types and constructors 236 + type_name: 237 + - match: \b(?:{{lower_ident}}\.)*{{upper_ident}}\b 238 + scope: entity.name.type.gleam 239 + 240 + # Unused bindings 241 + unused_name: 242 + - match: \b_{{lower_ident}}\b 243 + scope: comment.line.gleam