aboutsummaryrefslogtreecommitdiff
path: root/node_modules/highlight.js/lib/languages/kotlin.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/highlight.js/lib/languages/kotlin.js')
-rw-r--r--node_modules/highlight.js/lib/languages/kotlin.js173
1 files changed, 173 insertions, 0 deletions
diff --git a/node_modules/highlight.js/lib/languages/kotlin.js b/node_modules/highlight.js/lib/languages/kotlin.js
new file mode 100644
index 000000000..246e5c9f3
--- /dev/null
+++ b/node_modules/highlight.js/lib/languages/kotlin.js
@@ -0,0 +1,173 @@
+module.exports = function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ 'abstract as val var vararg get set class object open private protected public noinline ' +
+ 'crossinline dynamic final enum if else do while for when throw try catch finally ' +
+ 'import package is in fun override companion reified inline lateinit init' +
+ 'interface annotation data sealed internal infix operator out by constructor super ' +
+ // to be deleted soon
+ 'trait volatile transient native default',
+ built_in:
+ 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',
+ literal:
+ 'true false null'
+ };
+ var KEYWORDS_WITH_LABEL = {
+ className: 'keyword',
+ begin: /\b(break|continue|return|this)\b/,
+ starts: {
+ contains: [
+ {
+ className: 'symbol',
+ begin: /@\w+/
+ }
+ ]
+ }
+ };
+ var LABEL = {
+ className: 'symbol', begin: hljs.UNDERSCORE_IDENT_RE + '@'
+ };
+
+ // for string templates
+ var SUBST = {
+ className: 'subst',
+ variants: [
+ {begin: '\\$' + hljs.UNDERSCORE_IDENT_RE},
+ {begin: '\\${', end: '}', contains: [hljs.APOS_STRING_MODE, hljs.C_NUMBER_MODE]}
+ ]
+ };
+ var STRING = {
+ className: 'string',
+ variants: [
+ {
+ begin: '"""', end: '"""',
+ contains: [SUBST]
+ },
+ // Can't use built-in modes easily, as we want to use STRING in the meta
+ // context as 'meta-string' and there's no syntax to remove explicitly set
+ // classNames in built-in modes.
+ {
+ begin: '\'', end: '\'',
+ illegal: /\n/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '"', end: '"',
+ illegal: /\n/,
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ }
+ ]
+ };
+
+ var ANNOTATION_USE_SITE = {
+ className: 'meta', begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'
+ };
+ var ANNOTATION = {
+ className: 'meta', begin: '@' + hljs.UNDERSCORE_IDENT_RE,
+ contains: [
+ {
+ begin: /\(/, end: /\)/,
+ contains: [
+ hljs.inherit(STRING, {className: 'meta-string'})
+ ]
+ }
+ ]
+ };
+
+ return {
+ keywords: KEYWORDS,
+ contains : [
+ hljs.COMMENT(
+ '/\\*\\*',
+ '\\*/',
+ {
+ relevance : 0,
+ contains : [{
+ className : 'doctag',
+ begin : '@[A-Za-z]+'
+ }]
+ }
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ KEYWORDS_WITH_LABEL,
+ LABEL,
+ ANNOTATION_USE_SITE,
+ ANNOTATION,
+ {
+ className: 'function',
+ beginKeywords: 'fun', end: '[(]|$',
+ returnBegin: true,
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ illegal: /fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,
+ relevance: 5,
+ contains: [
+ {
+ begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
+ relevance: 0,
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ className: 'type',
+ begin: /</, end: />/, keywords: 'reified',
+ relevance: 0
+ },
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ endsParent: true,
+ keywords: KEYWORDS,
+ relevance: 0,
+ contains: [
+ {
+ begin: /:/, end: /[=,\/]/, endsWithParent: true,
+ contains: [
+ {className: 'type', begin: hljs.UNDERSCORE_IDENT_RE},
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ],
+ relevance: 0
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ ANNOTATION_USE_SITE,
+ ANNOTATION,
+ STRING,
+ hljs.C_NUMBER_MODE
+ ]
+ },
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class interface trait', end: /[:\{(]|$/, // remove 'trait' when removed from KEYWORDS
+ excludeEnd: true,
+ illegal: 'extends implements',
+ contains: [
+ {beginKeywords: 'public protected internal private constructor'},
+ hljs.UNDERSCORE_TITLE_MODE,
+ {
+ className: 'type',
+ begin: /</, end: />/, excludeBegin: true, excludeEnd: true,
+ relevance: 0
+ },
+ {
+ className: 'type',
+ begin: /[,:]\s*/, end: /[<\(,]|$/, excludeBegin: true, returnEnd: true
+ },
+ ANNOTATION_USE_SITE,
+ ANNOTATION
+ ]
+ },
+ STRING,
+ {
+ className: 'meta',
+ begin: "^#!/usr/bin/env", end: '$',
+ illegal: '\n'
+ },
+ hljs.C_NUMBER_MODE
+ ]
+ };
+}; \ No newline at end of file