Commit 5c412cbb2765fe494c45981c6c95658a68a6a6a7

Michael Schmidt 2021-10-05T21:17:43

BSL: Made `directive` greedy (#3112)

diff --git a/components/prism-bsl.js b/components/prism-bsl.js
index ba3a5a9..ae2cd8f 100644
--- a/components/prism-bsl.js
+++ b/components/prism-bsl.js
@@ -44,15 +44,15 @@ Prism.languages.bsl = {
 		{
 			pattern: /\b(?:and|not|or)\b/i
 		}
-
 	],
 	'punctuation': /\(\.|\.\)|[()\[\]:;,.]/,
 	'directive': [
 		// Теги препроцессора вида &Клиент, &Сервер, ...
 		// Preprocessor tags of the type &Client, &Server, ...
 		{
-			pattern: /^(\s*)&.*/m,
+			pattern: /^([ \t]*)&.*/m,
 			lookbehind: true,
+			greedy: true,
 			alias: 'important'
 		},
 		// Инструкции препроцессора вида:
@@ -64,7 +64,9 @@ Prism.languages.bsl = {
 		// ...
 		// #EndIf
 		{
-			pattern: /^\s*#.*/gm,
+			pattern: /^([ \t]*)#.*/gm,
+			lookbehind: true,
+			greedy: true,
 			alias: 'important'
 		}
 	]
diff --git a/components/prism-bsl.min.js b/components/prism-bsl.min.js
index 7d5cbe8..4c93478 100644
--- a/components/prism-bsl.min.js
+++ b/components/prism-bsl.min.js
@@ -1 +1 @@
-Prism.languages.bsl={comment:/\/\/.*/,string:[{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},{pattern:/'(?:[^'\r\n\\]|\\.)*'/}],keyword:[{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:пока|для|новый|прервать|попытка|исключение|вызватьисключение|иначе|конецпопытки|неопределено|функция|перем|возврат|конецфункции|если|иначеесли|процедура|конецпроцедуры|тогда|знач|экспорт|конецесли|из|каждого|истина|ложь|по|цикл|конеццикла|выполнить)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:break|do|each|else|elseif|enddo|endfunction|endif|endprocedure|endtry|except|execute|export|false|for|function|if|in|new|null|procedure|raise|return|then|to|true|try|undefined|val|var|while)\b/i}],number:{pattern:/(^(?=\d)|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?/i,lookbehind:!0},operator:[/[<>+\-*/]=?|[%=]/,{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:и|или|не)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:and|not|or)\b/i}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/,directive:[{pattern:/^(\s*)&.*/m,lookbehind:!0,alias:"important"},{pattern:/^\s*#.*/gm,alias:"important"}]},Prism.languages.oscript=Prism.languages.bsl;
\ No newline at end of file
+Prism.languages.bsl={comment:/\/\/.*/,string:[{pattern:/"(?:[^"]|"")*"(?!")/,greedy:!0},{pattern:/'(?:[^'\r\n\\]|\\.)*'/}],keyword:[{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:пока|для|новый|прервать|попытка|исключение|вызватьисключение|иначе|конецпопытки|неопределено|функция|перем|возврат|конецфункции|если|иначеесли|процедура|конецпроцедуры|тогда|знач|экспорт|конецесли|из|каждого|истина|ложь|по|цикл|конеццикла|выполнить)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:break|do|each|else|elseif|enddo|endfunction|endif|endprocedure|endtry|except|execute|export|false|for|function|if|in|new|null|procedure|raise|return|then|to|true|try|undefined|val|var|while)\b/i}],number:{pattern:/(^(?=\d)|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?/i,lookbehind:!0},operator:[/[<>+\-*/]=?|[%=]/,{pattern:/(^|[^\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])(?:и|или|не)(?![\w\u0400-\u0484\u0487-\u052f\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f])/i,lookbehind:!0},{pattern:/\b(?:and|not|or)\b/i}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/,directive:[{pattern:/^([ \t]*)&.*/m,lookbehind:!0,greedy:!0,alias:"important"},{pattern:/^([ \t]*)#.*/gm,lookbehind:!0,greedy:!0,alias:"important"}]},Prism.languages.oscript=Prism.languages.bsl;
\ No newline at end of file
diff --git a/tests/languages/bsl/directive_feature.test b/tests/languages/bsl/directive_feature.test
new file mode 100644
index 0000000..df0b91e
--- /dev/null
+++ b/tests/languages/bsl/directive_feature.test
@@ -0,0 +1,13 @@
+&Client
+
+#If Server Then
+#EndIf
+
+----------------------------------------------------
+
+[
+	["directive", "&Client"],
+
+	["directive", "#If Server Then"],
+	["directive", "#EndIf"]
+]
diff --git a/tests/languages/bsl/punctuation_feature.test b/tests/languages/bsl/punctuation_feature.test
new file mode 100644
index 0000000..9a6f118
--- /dev/null
+++ b/tests/languages/bsl/punctuation_feature.test
@@ -0,0 +1,18 @@
+(. .)
+( ) [ ] : ; , .
+
+----------------------------------------------------
+
+[
+	["punctuation", "(."],
+	["punctuation", ".)"],
+
+	["punctuation", "("],
+	["punctuation", ")"],
+	["punctuation", "["],
+	["punctuation", "]"],
+	["punctuation", ":"],
+	["punctuation", ";"],
+	["punctuation", ","],
+	["punctuation", "."]
+]
diff --git a/tests/languages/bsl/string_feature.test b/tests/languages/bsl/string_feature.test
index 4df2508..abb8b2d 100644
--- a/tests/languages/bsl/string_feature.test
+++ b/tests/languages/bsl/string_feature.test
@@ -1,13 +1,19 @@
 ""
 "fo"
 
+''
+'foo'
+
 ----------------------------------------------------
 
 [
 	["string", "\"\""],
-	["string", "\"fo\""]
+	["string", "\"fo\""],
+
+	["string", "''"],
+	["string", "'foo'"]
 ]
 
 ----------------------------------------------------
 
-Checks for strings and chars.
\ No newline at end of file
+Checks for strings and chars.