You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.0 KiB
82 lines
2.0 KiB
/* |
|
Language: Ceylon |
|
Author: Lucas Werkmeister <mail@lucaswerkmeister.de> |
|
Website: https://ceylon-lang.org |
|
*/ |
|
|
|
/** @type LanguageFn */ |
|
function ceylon(hljs) { |
|
// 2.3. Identifiers and keywords |
|
const KEYWORDS = |
|
'assembly module package import alias class interface object given value ' + |
|
'assign void function new of extends satisfies abstracts in out return ' + |
|
'break continue throw assert dynamic if else switch case for while try ' + |
|
'catch finally then let this outer super is exists nonempty'; |
|
// 7.4.1 Declaration Modifiers |
|
const DECLARATION_MODIFIERS = |
|
'shared abstract formal default actual variable late native deprecated ' + |
|
'final sealed annotation suppressWarnings small'; |
|
// 7.4.2 Documentation |
|
const DOCUMENTATION = |
|
'doc by license see throws tagged'; |
|
const SUBST = { |
|
className: 'subst', |
|
excludeBegin: true, |
|
excludeEnd: true, |
|
begin: /``/, |
|
end: /``/, |
|
keywords: KEYWORDS, |
|
relevance: 10 |
|
}; |
|
const EXPRESSIONS = [ |
|
{ |
|
// verbatim string |
|
className: 'string', |
|
begin: '"""', |
|
end: '"""', |
|
relevance: 10 |
|
}, |
|
{ |
|
// string literal or template |
|
className: 'string', |
|
begin: '"', |
|
end: '"', |
|
contains: [SUBST] |
|
}, |
|
{ |
|
// character literal |
|
className: 'string', |
|
begin: "'", |
|
end: "'" |
|
}, |
|
{ |
|
// numeric literal |
|
className: 'number', |
|
begin: '#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?', |
|
relevance: 0 |
|
} |
|
]; |
|
SUBST.contains = EXPRESSIONS; |
|
|
|
return { |
|
name: 'Ceylon', |
|
keywords: { |
|
keyword: KEYWORDS + ' ' + DECLARATION_MODIFIERS, |
|
meta: DOCUMENTATION |
|
}, |
|
illegal: '\\$[^01]|#[^0-9a-fA-F]', |
|
contains: [ |
|
hljs.C_LINE_COMMENT_MODE, |
|
hljs.COMMENT('/\\*', '\\*/', { |
|
contains: ['self'] |
|
}), |
|
{ |
|
// compiler annotation |
|
className: 'meta', |
|
begin: '@[a-z]\\w*(?::"[^"]*")?' |
|
} |
|
].concat(EXPRESSIONS) |
|
}; |
|
} |
|
|
|
module.exports = ceylon;
|
|
|