116 lines
2.5 KiB
JavaScript
116 lines
2.5 KiB
JavaScript
hljs.registerLanguage("aiken", function (hljs) {
|
|
const KEYWORDS =
|
|
"as assert when is const fn if let use opaque pub assert check todo type";
|
|
const STRING = {
|
|
className: "string",
|
|
variants: [{ begin: /"/, end: /"/ }],
|
|
contains: [hljs.BACKSLASH_ESCAPE],
|
|
relevance: 0,
|
|
};
|
|
const NAME = {
|
|
className: "variable",
|
|
begin: "\\b[a-z][a-z0-9_]*\\b",
|
|
relevance: 0,
|
|
};
|
|
const DISCARD_NAME = {
|
|
className: "comment",
|
|
begin: "\\b_[a-z][a-z0-9_]*\\b",
|
|
relevance: 0,
|
|
};
|
|
const NUMBER = {
|
|
className: "number",
|
|
variants: [
|
|
{
|
|
// binary
|
|
begin: "\\b0[bB](?:_?[01]+)+",
|
|
},
|
|
{
|
|
// octal
|
|
begin: "\\b0[oO](?:_?[0-7]+)+",
|
|
},
|
|
{
|
|
// hex
|
|
begin: "\\b0[xX](?:_?[0-9a-fA-F]+)+",
|
|
},
|
|
{
|
|
// dec, float
|
|
begin: "\\b\\d(?:_?\\d+)*(?:\\.(?:\\d(?:_?\\d+)*)*)?",
|
|
},
|
|
],
|
|
relevance: 0,
|
|
};
|
|
|
|
return {
|
|
name: "Aiken",
|
|
aliases: ["aiken"],
|
|
contains: [
|
|
hljs.C_LINE_COMMENT_MODE,
|
|
STRING,
|
|
{
|
|
// bit string
|
|
begin: "<<",
|
|
end: ">>",
|
|
contains: [
|
|
{
|
|
className: "keyword",
|
|
beginKeywords:
|
|
"binary bytes int float bit_string bits utf8 utf16 utf32 " +
|
|
"utf8_codepoint utf16_codepoint utf32_codepoint signed unsigned " +
|
|
"big little native unit size",
|
|
},
|
|
KEYWORDS,
|
|
STRING,
|
|
NAME,
|
|
DISCARD_NAME,
|
|
NUMBER,
|
|
],
|
|
relevance: 10,
|
|
},
|
|
{
|
|
className: "function",
|
|
beginKeywords: "fn",
|
|
end: "\\(",
|
|
excludeEnd: true,
|
|
contains: [
|
|
{
|
|
className: "title",
|
|
begin: "[a-z][a-z0-9_]*\\w*",
|
|
relevance: 0,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
className: "keyword",
|
|
beginKeywords: "use",
|
|
end: "\n",
|
|
excludeEnd: true,
|
|
contains: [
|
|
{
|
|
className: "title",
|
|
begin: "[a-z][a-z0-9_/]*\\w*",
|
|
relevance: 0,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
className: "keyword",
|
|
beginKeywords: KEYWORDS,
|
|
},
|
|
{
|
|
// Type names and constructors
|
|
className: "title",
|
|
begin: "\\b[A-Z][A-Za-z0-9]*\\b",
|
|
relevance: 0,
|
|
},
|
|
{
|
|
className: "operator",
|
|
begin: "[+\\-*/%!=<>&|.]+",
|
|
relevance: 0,
|
|
},
|
|
NAME,
|
|
DISCARD_NAME,
|
|
NUMBER,
|
|
],
|
|
};
|
|
});
|