From 0cad9ae52d81095ecd34a3d17ac1e2526f1b48cd Mon Sep 17 00:00:00 2001 From: Hyyan Abo Fakher Date: Mon, 1 Aug 2022 11:10:27 +0200 Subject: [PATCH] BBj: Improve regexes (#3512) * BBj: extend BBj keywords list * BBj: fix strings regex does not match single quotes * BBj: add `declare` as keyword --- components/prism-bbj.js | 4 +-- components/prism-bbj.min.js | 2 +- tests/languages/bbj/keyword_feature.test | 36 +++++++++++++----------- tests/languages/bbj/string_feature.test | 20 +++++++++++-- 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/components/prism-bbj.js b/components/prism-bbj.js index 883b4e7dd2..df401d329d 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 64ca9b408a..839b4a9439 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 77ed4c345e..4948ebd873 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 101e1b3c60..1d635e704f 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.