/* Language: Ceylon Author: Lucas Werkmeister 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;