Fork of daniellemaywood.uk/gleam — Wasm codegen work
2.5 kB
112 lines
1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: 2021 The Gleam contributors
3
4hljs.registerLanguage("gleam", function (hljs) {
5 const KEYWORDS = {
6 className: "keyword",
7 beginKeywords:
8 "as assert auto case const delegate derive echo else fn if " +
9 "implement import let macro opaque panic pub test todo type use",
10 };
11 const STRING = {
12 className: "string",
13 variants: [{ begin: /"/, end: /"/ }],
14 contains: [hljs.BACKSLASH_ESCAPE],
15 relevance: 0,
16 };
17 const NAME = {
18 className: "variable",
19 begin: "\\b[a-z][a-z0-9_]*\\b",
20 relevance: 0,
21 };
22 const DISCARD_NAME = {
23 className: "comment",
24 begin: "\\b_[a-z][a-z0-9_]*\\b",
25 relevance: 0,
26 };
27 const NUMBER = {
28 className: "number",
29 variants: [
30 {
31 // binary
32 begin: "\\b0[bB](?:_?[01]+)+",
33 },
34 {
35 // octal
36 begin: "\\b0[oO](?:_?[0-7]+)+",
37 },
38 {
39 // hex
40 begin: "\\b0[xX](?:_?[0-9a-fA-F]+)+",
41 },
42 {
43 // dec, float
44 begin: "\\b\\d(?:_?\\d+)*(?:\\.(?:\\d(?:_?\\d+)*)*)?",
45 },
46 ],
47 relevance: 0,
48 };
49
50 return {
51 name: "Gleam",
52 aliases: ["gleam"],
53 contains: [
54 hljs.C_LINE_COMMENT_MODE,
55 STRING,
56 {
57 // bit array
58 begin: "<<",
59 end: ">>",
60 contains: [
61 {
62 className: "keyword",
63 beginKeywords:
64 "binary bits bytes int float bit_string bit_array bits utf8 utf16 " +
65 "utf32 utf8_codepoint utf16_codepoint utf32_codepoint signed " +
66 "unsigned big little native unit size",
67 },
68 KEYWORDS,
69 STRING,
70 NAME,
71 DISCARD_NAME,
72 NUMBER,
73 ],
74 relevance: 10,
75 },
76 {
77 className: "function",
78 beginKeywords: "fn",
79 end: "\\(",
80 excludeEnd: true,
81 contains: [
82 {
83 className: "title",
84 begin: "[a-z][a-z0-9_]*\\w*",
85 relevance: 0,
86 },
87 ],
88 },
89 {
90 className: "attribute",
91 begin: "@",
92 end: "\\(",
93 excludeEnd: true,
94 },
95 KEYWORDS,
96 {
97 // Type names and constructors
98 className: "title",
99 begin: "\\b[A-Z][A-Za-z0-9]*\\b",
100 relevance: 0,
101 },
102 {
103 className: "operator",
104 begin: "[+\\-*/%!=<>&|.]+",
105 relevance: 0,
106 },
107 NAME,
108 DISCARD_NAME,
109 NUMBER,
110 ],
111 };
112});