Commit e43732560344b44c67869c9262f587b999f75372

Michael Schmidt 2021-12-10T14:43:25

V: Use standard `char` token (#3260)

diff --git a/components/prism-v.js b/components/prism-v.js
index 9541123..6fc41b8 100644
--- a/components/prism-v.js
+++ b/components/prism-v.js
@@ -5,34 +5,28 @@
 	};
 
 	Prism.languages.v = Prism.languages.extend('clike', {
-		'string': [
-			{
-				pattern: /`(?:\\`|\\?[^`]{1,2})`/, // using {1,2} instead of `u` flag for compatibility
-				alias: 'rune'
-			},
-			{
-				pattern: /r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
-				alias: 'quoted-string',
-				greedy: true,
-				inside: {
-					'interpolation': {
-						pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,
-						lookbehind: true,
-						inside: {
-							'interpolation-variable': {
-								pattern: /^\$\w[\s\S]*$/,
-								alias: 'variable'
-							},
-							'interpolation-punctuation': {
-								pattern: /^\$\{|\}$/,
-								alias: 'punctuation'
-							},
-							'interpolation-expression': interpolationExpr
-						}
+		'string': {
+			pattern: /r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+			alias: 'quoted-string',
+			greedy: true,
+			inside: {
+				'interpolation': {
+					pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,
+					lookbehind: true,
+					inside: {
+						'interpolation-variable': {
+							pattern: /^\$\w[\s\S]*$/,
+							alias: 'variable'
+						},
+						'interpolation-punctuation': {
+							pattern: /^\$\{|\}$/,
+							alias: 'punctuation'
+						},
+						'interpolation-expression': interpolationExpr
 					}
 				}
 			}
-		],
+		},
 		'class-name': {
 			pattern: /(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/,
 			lookbehind: true
@@ -45,6 +39,13 @@
 
 	interpolationExpr.inside = Prism.languages.v;
 
+	Prism.languages.insertBefore('v', 'string', {
+		'char': {
+			pattern: /`(?:\\`|\\?[^`]{1,2})`/, // using {1,2} instead of `u` flag for compatibility
+			alias: 'rune'
+		}
+	});
+
 	Prism.languages.insertBefore('v', 'operator', {
 		'attribute': {
 			pattern: /(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m,
diff --git a/components/prism-v.min.js b/components/prism-v.min.js
index 736e32a..db0c0f5 100644
--- a/components/prism-v.min.js
+++ b/components/prism-v.min.js
@@ -1 +1 @@
-!function(e){var n={pattern:/[\s\S]+/,inside:null};e.languages.v=e.languages.extend("clike",{string:[{pattern:/`(?:\\`|\\?[^`]{1,2})`/,alias:"rune"},{pattern:/r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,alias:"quoted-string",greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,lookbehind:!0,inside:{"interpolation-variable":{pattern:/^\$\w[\s\S]*$/,alias:"variable"},"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},"interpolation-expression":n}}}}],"class-name":{pattern:/(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/,lookbehind:!0},keyword:/(?:\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\$(?:else|for|if)|#(?:flag|include))\b/,number:/\b(?:0x[a-f\d]+(?:_[a-f\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?)\b/i,operator:/~|\?|[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\.?/,builtin:/\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\b/}),n.inside=e.languages.v,e.languages.insertBefore("v","operator",{attribute:{pattern:/(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m,lookbehind:!0,alias:"annotation",inside:{punctuation:/[\[\]]/,keyword:/\w+/}},generic:{pattern:/<\w+>(?=\s*[\)\{])/,inside:{punctuation:/[<>]/,"class-name":/\w+/}}}),e.languages.insertBefore("v","function",{"generic-function":{pattern:/\b\w+\s*<\w+>(?=\()/,inside:{function:/^\w+/,generic:{pattern:/<\w+>/,inside:e.languages.v.generic.inside}}}})}(Prism);
\ No newline at end of file
+!function(e){var n={pattern:/[\s\S]+/,inside:null};e.languages.v=e.languages.extend("clike",{string:{pattern:/r?(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,alias:"quoted-string",greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\{[^{}]*\}|\w+(?:\.\w+(?:\([^\(\)]*\))?|\[[^\[\]]+\])*)/,lookbehind:!0,inside:{"interpolation-variable":{pattern:/^\$\w[\s\S]*$/,alias:"variable"},"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},"interpolation-expression":n}}}},"class-name":{pattern:/(\b(?:enum|interface|struct|type)\s+)(?:C\.)?\w+/,lookbehind:!0},keyword:/(?:\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\$(?:else|for|if)|#(?:flag|include))\b/,number:/\b(?:0x[a-f\d]+(?:_[a-f\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?)\b/i,operator:/~|\?|[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\.?/,builtin:/\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\b/}),n.inside=e.languages.v,e.languages.insertBefore("v","string",{char:{pattern:/`(?:\\`|\\?[^`]{1,2})`/,alias:"rune"}}),e.languages.insertBefore("v","operator",{attribute:{pattern:/(^[\t ]*)\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\]/m,lookbehind:!0,alias:"annotation",inside:{punctuation:/[\[\]]/,keyword:/\w+/}},generic:{pattern:/<\w+>(?=\s*[\)\{])/,inside:{punctuation:/[<>]/,"class-name":/\w+/}}}),e.languages.insertBefore("v","function",{"generic-function":{pattern:/\b\w+\s*<\w+>(?=\()/,inside:{function:/^\w+/,generic:{pattern:/<\w+>/,inside:e.languages.v.generic.inside}}}})}(Prism);
\ No newline at end of file
diff --git a/tests/languages/v/char_feature.test b/tests/languages/v/char_feature.test
new file mode 100644
index 0000000..aca1755
--- /dev/null
+++ b/tests/languages/v/char_feature.test
@@ -0,0 +1,11 @@
+`🚀`
+`\``
+`Not a Rune`
+
+----------------------------------------------------
+
+[
+	["char", "`🚀`"],
+	["char", "`\\``"],
+	"\r\n`Not a Rune`"
+]
diff --git a/tests/languages/v/string_feature.test b/tests/languages/v/string_feature.test
index 3040a7f..b3d52c2 100644
--- a/tests/languages/v/string_feature.test
+++ b/tests/languages/v/string_feature.test
@@ -3,9 +3,6 @@
 'age = $user.age'
 '[${int(x):-10}]'
 r'hello\nworld'
-`🚀`
-`\``
-`Not a Rune`
 
 ----------------------------------------------------
 
@@ -36,12 +33,9 @@ r'hello\nworld'
 		]],
 		"]'"
 	]],
-	["string", ["r'hello\\nworld'"]],
-	["string", "`🚀`"],
-	["string", "`\\``"],
-	"\r\n`Not a Rune`"
+	["string", ["r'hello\\nworld'"]]
 ]
 
 ----------------------------------------------------
 
-Check for strings and string interpolation
\ No newline at end of file
+Check for strings and string interpolation