BSL: Made `directive` greedy (#3112)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
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.