BBj: Improve regexes (#3512) * BBj: extend BBj keywords list * BBj: fix strings regex does not match single quotes * BBj: add `declare` as keyword
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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
diff --git a/components/prism-bbj.js b/components/prism-bbj.js
index 883b4e7..df401d3 100644
--- a/components/prism-bbj.js
+++ b/components/prism-bbj.js
@@ -6,11 +6,11 @@
greedy: true
},
'string': {
- pattern: /"(?:""|[!#$%&'()*,\/:;<=>?^\w +\-.])*"/,
+ pattern: /(['"])(?:(?!\1|\\).|\\.)*\1/,
greedy: true
},
'number': /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,
- 'keyword': /\b(?:abstract|all|argc|begin|bye|callback|case|chn|class|classend|ctl|day|delete|dom|dread|dsz|else|endif|err|exitto|extends|fi|field|for|from|gosub|goto|if|implements|interface|interfaceend|iol|iolist|let|list|load|method|methodend|methodret|on|opts|pfx|private|process_events|protected|psz|public|read_resource|remove_callback|restore|rev|seterr|setesc|sqlchn|sqlunt|ssn|start|static|swend|switch|sys|then|tim|unt|until|use|void|wend|where|while)\b/i,
+ 'keyword': /\b(?:abstract|all|argc|begin|bye|callback|case|chn|class|classend|ctl|day|declare|delete|dim|dom|dread|dsz|else|end|endif|err|exitto|extends|fi|field|for|from|gosub|goto|if|implements|interface|interfaceend|iol|iolist|let|list|load|method|methodend|methodret|on|opts|pfx|print|private|process_events|protected|psz|public|read|read_resource|release|remove_callback|repeat|restore|return|rev|seterr|setesc|sqlchn|sqlunt|ssn|start|static|swend|switch|sys|then|tim|unt|until|use|void|wend|where|while)\b/i,
'function': /\b\w+(?=\()/,
'boolean': /\b(?:BBjAPI\.TRUE|BBjAPI\.FALSE)\b/i,
'operator': /<[=>]?|>=?|[+\-*\/^=&]|\b(?:and|not|or|xor)\b/i,
diff --git a/components/prism-bbj.min.js b/components/prism-bbj.min.js
index 64ca9b4..839b4a9 100644
--- a/components/prism-bbj.min.js
+++ b/components/prism-bbj.min.js
@@ -1 +1 @@
-!function(e){e.languages.bbj={comment:{pattern:/(^|[^\\:])rem\s+.*/i,lookbehind:!0,greedy:!0},string:{pattern:/"(?:""|[!#$%&'()*,\/:;<=>?^\w +\-.])*"/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,keyword:/\b(?:abstract|all|argc|begin|bye|callback|case|chn|class|classend|ctl|day|delete|dom|dread|dsz|else|endif|err|exitto|extends|fi|field|for|from|gosub|goto|if|implements|interface|interfaceend|iol|iolist|let|list|load|method|methodend|methodret|on|opts|pfx|private|process_events|protected|psz|public|read_resource|remove_callback|restore|rev|seterr|setesc|sqlchn|sqlunt|ssn|start|static|swend|switch|sys|then|tim|unt|until|use|void|wend|where|while)\b/i,function:/\b\w+(?=\()/,boolean:/\b(?:BBjAPI\.TRUE|BBjAPI\.FALSE)\b/i,operator:/<[=>]?|>=?|[+\-*\/^=&]|\b(?:and|not|or|xor)\b/i,punctuation:/[.,;:()]/}}(Prism);
\ No newline at end of file
+!function(e){e.languages.bbj={comment:{pattern:/(^|[^\\:])rem\s+.*/i,lookbehind:!0,greedy:!0},string:{pattern:/(['"])(?:(?!\1|\\).|\\.)*\1/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:E[+-]?\d+)?/i,keyword:/\b(?:abstract|all|argc|begin|bye|callback|case|chn|class|classend|ctl|day|declare|delete|dim|dom|dread|dsz|else|end|endif|err|exitto|extends|fi|field|for|from|gosub|goto|if|implements|interface|interfaceend|iol|iolist|let|list|load|method|methodend|methodret|on|opts|pfx|print|private|process_events|protected|psz|public|read|read_resource|release|remove_callback|repeat|restore|return|rev|seterr|setesc|sqlchn|sqlunt|ssn|start|static|swend|switch|sys|then|tim|unt|until|use|void|wend|where|while)\b/i,function:/\b\w+(?=\()/,boolean:/\b(?:BBjAPI\.TRUE|BBjAPI\.FALSE)\b/i,operator:/<[=>]?|>=?|[+\-*\/^=&]|\b(?:and|not|or|xor)\b/i,punctuation:/[.,;:()]/}}(Prism);
\ No newline at end of file
diff --git a/tests/languages/bbj/keyword_feature.test b/tests/languages/bbj/keyword_feature.test
index 77ed4c3..4948ebd 100644
--- a/tests/languages/bbj/keyword_feature.test
+++ b/tests/languages/bbj/keyword_feature.test
@@ -1,8 +1,9 @@
-abstract all argc begin bye callback case chn class classend ctl day delete dom dread dsz else
-endif err exitto extends fi field field for from gosub goto if implements interface interfaceend
-iol iolist let list load method methodend methodret on opts pfx private private process_events
-protected protected psz public public read_resource remove_callback restore rev seterr setesc sqlchn
-sqlunt ssn start static static swend switch sys then tim unt until void void wend where while use
+abstract all argc begin bye callback case chn class classend ctl day delete dim dom
+dread dsz else end endif err exitto extends fi field for from gosub goto if implements
+interface interfaceend iol iolist let list load method methodend methodret on opts pfx
+print private process_events protected psz public read read_resource release remove_callback
+repeat restore return rev seterr setesc sqlchn sqlunt ssn start static swend switch sys then
+tim unt until use void wend where while declare
----------------------------------------------------
@@ -20,27 +21,28 @@ sqlunt ssn start static static swend switch sys then tim unt until void void wen
["keyword", "ctl"],
["keyword", "day"],
["keyword", "delete"],
+ ["keyword", "dim"],
["keyword", "dom"],
+
["keyword", "dread"],
["keyword", "dsz"],
["keyword", "else"],
-
+ ["keyword", "end"],
["keyword", "endif"],
["keyword", "err"],
["keyword", "exitto"],
["keyword", "extends"],
["keyword", "fi"],
["keyword", "field"],
- ["keyword", "field"],
["keyword", "for"],
["keyword", "from"],
["keyword", "gosub"],
["keyword", "goto"],
["keyword", "if"],
["keyword", "implements"],
+
["keyword", "interface"],
["keyword", "interfaceend"],
-
["keyword", "iol"],
["keyword", "iolist"],
["keyword", "let"],
@@ -52,41 +54,43 @@ sqlunt ssn start static static swend switch sys then tim unt until void void wen
["keyword", "on"],
["keyword", "opts"],
["keyword", "pfx"],
- ["keyword", "private"],
+
+ ["keyword", "print"],
["keyword", "private"],
["keyword", "process_events"],
-
- ["keyword", "protected"],
["keyword", "protected"],
["keyword", "psz"],
["keyword", "public"],
- ["keyword", "public"],
+ ["keyword", "read"],
["keyword", "read_resource"],
+ ["keyword", "release"],
["keyword", "remove_callback"],
+
+ ["keyword", "repeat"],
["keyword", "restore"],
+ ["keyword", "return"],
["keyword", "rev"],
["keyword", "seterr"],
["keyword", "setesc"],
["keyword", "sqlchn"],
-
["keyword", "sqlunt"],
["keyword", "ssn"],
["keyword", "start"],
["keyword", "static"],
- ["keyword", "static"],
["keyword", "swend"],
["keyword", "switch"],
["keyword", "sys"],
["keyword", "then"],
+
["keyword", "tim"],
["keyword", "unt"],
["keyword", "until"],
- ["keyword", "void"],
+ ["keyword", "use"],
["keyword", "void"],
["keyword", "wend"],
["keyword", "where"],
["keyword", "while"],
- ["keyword", "use"]
+ ["keyword", "declare"]
]
----------------------------------------------------
diff --git a/tests/languages/bbj/string_feature.test b/tests/languages/bbj/string_feature.test
index 101e1b3..1d635e7 100644
--- a/tests/languages/bbj/string_feature.test
+++ b/tests/languages/bbj/string_feature.test
@@ -1,13 +1,27 @@
""
-"fo""obar"
+''
+"f\"oo"
+'b\'ar'
+
+"foo rem comment bar"
+"foo ""rem"" comment bar"
+"foo rem /* *rem comment bar"
----------------------------------------------------
[
["string", "\"\""],
- ["string", "\"fo\"\"obar\""]
+ ["string", "''"],
+ ["string", "\"f\\\"oo\""],
+ ["string", "'b\\'ar'"],
+
+ ["string", "\"foo rem comment bar\""],
+ ["string", "\"foo \""],
+ ["string", "\"rem\""],
+ ["string", "\" comment bar\""],
+ ["string", "\"foo rem /* *rem comment bar\""]
]
----------------------------------------------------
-Checks for strings.
\ No newline at end of file
+Checks for strings.