Commit 1bf73b0bc755a335ba9a5b4e03afcb7b4789ea78

Limo Saplf 2018-04-13T14:18:38

Add keywords of Kotlin and modify it's number pattern. (#1389) * Add keywords & modify number pattern. - Missing keywords by the creator: vararg dynamic infix operator; - New keywords by Kotlin 1.1&1.2: suspend typealias external expect actual; - Remove keyword 'to' as it just a common function name; - Add seperator '_' for the number iteral; - Prefix of hexadecimal and binary can also be capital. * Fix the wrong format of test file.

diff --git a/components/prism-kotlin.js b/components/prism-kotlin.js
index 0189cfe..2da2ce6 100644
--- a/components/prism-kotlin.js
+++ b/components/prism-kotlin.js
@@ -2,7 +2,7 @@
 	Prism.languages.kotlin = Prism.languages.extend('clike', {
 		'keyword': {
 			// The lookbehind prevents wrong highlighting of e.g. kotlin.properties.get
-			pattern: /(^|[^.])\b(?:abstract|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|else|enum|final|finally|for|fun|get|if|import|in|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|out|override|package|private|protected|public|reified|return|sealed|set|super|tailrec|this|throw|to|try|val|var|when|where|while)\b/,
+			pattern: /(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|try|typealias|val|var|vararg|when|where|while)\b/,
 			lookbehind: true
 		},
 		'function': [
@@ -12,7 +12,7 @@
 				lookbehind: true
 			}
 		],
-		'number': /\b(?:0[bx][\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?[fFL]?)\b/,
+		'number': /\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,
 		'operator': /\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/
 	});
 
diff --git a/components/prism-kotlin.min.js b/components/prism-kotlin.min.js
index 7880535..b19ca1c 100644
--- a/components/prism-kotlin.min.js
+++ b/components/prism-kotlin.min.js
@@ -1 +1 @@
-!function(n){n.languages.kotlin=n.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|else|enum|final|finally|for|fun|get|if|import|in|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|out|override|package|private|protected|public|reified|return|sealed|set|super|tailrec|this|throw|to|try|val|var|when|where|while)\b/,lookbehind:!0},"function":[/\w+(?=\s*\()/,{pattern:/(\.)\w+(?=\s*\{)/,lookbehind:!0}],number:/\b(?:0[bx][\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"],n.languages.insertBefore("kotlin","string",{"raw-string":{pattern:/("""|''')[\s\S]*?\1/,alias:"string"}}),n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\w+@|@\w+/,alias:"symbol"}});var e=[{pattern:/\$\{[^}]+\}/,inside:{delimiter:{pattern:/^\$\{|\}$/,alias:"variable"},rest:n.languages.kotlin}},{pattern:/\$\w+/,alias:"variable"}];n.languages.kotlin.string.inside=n.languages.kotlin["raw-string"].inside={interpolation:e}}(Prism);
\ No newline at end of file
+!function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},"function":[/\w+(?=\s*\()/,{pattern:/(\.)\w+(?=\s*\{)/,lookbehind:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"],e.languages.insertBefore("kotlin","string",{"raw-string":{pattern:/("""|''')[\s\S]*?\1/,alias:"string"}}),e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\w+@|@\w+/,alias:"symbol"}});var n=[{pattern:/\$\{[^}]+\}/,inside:{delimiter:{pattern:/^\$\{|\}$/,alias:"variable"},rest:e.languages.kotlin}},{pattern:/\$\w+/,alias:"variable"}];e.languages.kotlin.string.inside=e.languages.kotlin["raw-string"].inside={interpolation:n}}(Prism);
\ No newline at end of file
diff --git a/tests/languages/kotlin/keyword_feature.test b/tests/languages/kotlin/keyword_feature.test
index d8ace30..bd139c4 100644
--- a/tests/languages/kotlin/keyword_feature.test
+++ b/tests/languages/kotlin/keyword_feature.test
@@ -1,4 +1,5 @@
 abstract
+actual
 annotation
 as
 break
@@ -12,8 +13,11 @@ continue
 crossinline
 data
 do
+dynamic
 else
 enum
+expect
+external
 final
 finally
 for
@@ -22,6 +26,7 @@ get
 if
 import
 in
+infix
 init
 inline
 inner
@@ -33,6 +38,7 @@ noinline
 null
 object
 open
+operator
 out
 override
 package
@@ -44,13 +50,15 @@ return
 sealed
 set
 super
+suspend
 tailrec
 this
 throw
-to
 try
+typealias
 val
 var
+vararg
 when
 where
 while
@@ -59,6 +67,7 @@ while
 
 [
 	["keyword", "abstract"],
+	["keyword", "actual"],
 	["keyword", "annotation"],
 	["keyword", "as"],
 	["keyword", "break"],
@@ -72,8 +81,11 @@ while
 	["keyword", "crossinline"],
 	["keyword", "data"],
 	["keyword", "do"],
+	["keyword", "dynamic"],
 	["keyword", "else"],
 	["keyword", "enum"],
+	["keyword", "expect"],
+	["keyword", "external"],
 	["keyword", "final"],
 	["keyword", "finally"],
 	["keyword", "for"],
@@ -82,6 +94,7 @@ while
 	["keyword", "if"],
 	["keyword", "import"],
 	["keyword", "in"],
+	["keyword", "infix"],
 	["keyword", "init"],
 	["keyword", "inline"],
 	["keyword", "inner"],
@@ -93,6 +106,7 @@ while
 	["keyword", "null"],
 	["keyword", "object"],
 	["keyword", "open"],
+	["keyword", "operator"],
 	["keyword", "out"],
 	["keyword", "override"],
 	["keyword", "package"],
@@ -104,13 +118,15 @@ while
 	["keyword", "sealed"],
 	["keyword", "set"],
 	["keyword", "super"],
+	["keyword", "suspend"],
 	["keyword", "tailrec"],
 	["keyword", "this"],
 	["keyword", "throw"],
-	["keyword", "to"],
 	["keyword", "try"],
+	["keyword", "typealias"],
 	["keyword", "val"],
 	["keyword", "var"],
+	["keyword", "vararg"],
 	["keyword", "when"],
 	["keyword", "where"],
 	["keyword", "while"]
diff --git a/tests/languages/kotlin/number_feature.test b/tests/languages/kotlin/number_feature.test
index df21736..f10b944 100644
--- a/tests/languages/kotlin/number_feature.test
+++ b/tests/languages/kotlin/number_feature.test
@@ -8,6 +8,11 @@
 123.5e+10
 123.5f
 123.5F
+123_456
+123_456L
+0X01AB_23CD
+0B1001_1101
+12E34_56
 
 ----------------------------------------------------
 
@@ -21,7 +26,12 @@
 	["number", "123.5e-10"],
 	["number", "123.5e+10"],
 	["number", "123.5f"],
-	["number", "123.5F"]
+	["number", "123.5F"],
+	["number", "123_456"],
+	["number", "123_456L"],
+	["number", "0X01AB_23CD"],
+	["number", "0B1001_1101"],
+	["number", "12E34_56"]
 ]
 
 ----------------------------------------------------