From a3905c045b338968edb477c35f72f30c5e855edb Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Fri, 10 Dec 2021 14:29:08 +0100 Subject: [PATCH] OZ: Improved tokenization (#3240) --- components/prism-oz.js | 9 ++++++--- components/prism-oz.min.js | 2 +- tests/languages/oz/attr-name_feature.test | 21 ++++++++++++++++----- tests/languages/oz/variable_feature.test | 22 +++++++--------------- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/components/prism-oz.js b/components/prism-oz.js index 61e17948d4..257fe3cd88 100644 --- a/components/prism-oz.js +++ b/components/prism-oz.js @@ -1,5 +1,8 @@ Prism.languages.oz = { - 'comment': /\/\*[\s\S]*?\*\/|%.*/, + 'comment': { + pattern: /\/\*[\s\S]*?\*\/|%.*/, + greedy: true + }, 'string': { pattern: /"(?:[^"\\]|\\[\s\S])*"/, greedy: true @@ -18,8 +21,8 @@ Prism.languages.oz = { } ], 'number': /\b(?:0[bx][\da-f]+|\d+(?:\.\d*)?(?:e~?\d+)?)\b|&(?:[^\\]|\\(?:\d{3}|.))/i, - 'variable': /\b[A-Z][A-Za-z\d]*|`(?:[^`\\]|\\.)+`/, - 'attr-name': /\b\w+(?=:)/, + 'variable': /`(?:[^`\\]|\\.)+`/, + 'attr-name': /\b\w+(?=[ \t]*:(?![:=]))/, 'operator': /:(?:=|::?)|<[-:=]?|=(?:=|=?:?|\\=:?|!!?|[|#+\-*\/,~^@]|\b(?:andthen|div|mod|orelse)\b/, 'punctuation': /[\[\](){}.:;?]/ }; diff --git a/components/prism-oz.min.js b/components/prism-oz.min.js index e74c21cce3..45b826b72a 100644 --- a/components/prism-oz.min.js +++ b/components/prism-oz.min.js @@ -1 +1 @@ -Prism.languages.oz={comment:/\/\*[\s\S]*?\*\/|%.*/,string:{pattern:/"(?:[^"\\]|\\[\s\S])*"/,greedy:!0},atom:{pattern:/'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,alias:"builtin"},keyword:/\$|\[\]|\b(?:_|at|attr|case|catch|choice|class|cond|declare|define|dis|else(?:case|if)?|end|export|fail|false|feat|finally|from|fun|functor|if|import|in|local|lock|meth|nil|not|of|or|prepare|proc|prop|raise|require|self|skip|then|thread|true|try|unit)\b/,function:[/\b[a-z][A-Za-z\d]*(?=\()/,{pattern:/(\{)[A-Z][A-Za-z\d]*\b/,lookbehind:!0}],number:/\b(?:0[bx][\da-f]+|\d+(?:\.\d*)?(?:e~?\d+)?)\b|&(?:[^\\]|\\(?:\d{3}|.))/i,variable:/\b[A-Z][A-Za-z\d]*|`(?:[^`\\]|\\.)+`/,"attr-name":/\b\w+(?=:)/,operator:/:(?:=|::?)|<[-:=]?|=(?:=|=?:?|\\=:?|!!?|[|#+\-*\/,~^@]|\b(?:andthen|div|mod|orelse)\b/,punctuation:/[\[\](){}.:;?]/}; \ No newline at end of file +Prism.languages.oz={comment:{pattern:/\/\*[\s\S]*?\*\/|%.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\[\s\S])*"/,greedy:!0},atom:{pattern:/'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,alias:"builtin"},keyword:/\$|\[\]|\b(?:_|at|attr|case|catch|choice|class|cond|declare|define|dis|else(?:case|if)?|end|export|fail|false|feat|finally|from|fun|functor|if|import|in|local|lock|meth|nil|not|of|or|prepare|proc|prop|raise|require|self|skip|then|thread|true|try|unit)\b/,function:[/\b[a-z][A-Za-z\d]*(?=\()/,{pattern:/(\{)[A-Z][A-Za-z\d]*\b/,lookbehind:!0}],number:/\b(?:0[bx][\da-f]+|\d+(?:\.\d*)?(?:e~?\d+)?)\b|&(?:[^\\]|\\(?:\d{3}|.))/i,variable:/`(?:[^`\\]|\\.)+`/,"attr-name":/\b\w+(?=[ \t]*:(?![:=]))/,operator:/:(?:=|::?)|<[-:=]?|=(?:=|=?:?|\\=:?|!!?|[|#+\-*\/,~^@]|\b(?:andthen|div|mod|orelse)\b/,punctuation:/[\[\](){}.:;?]/}; \ No newline at end of file diff --git a/tests/languages/oz/attr-name_feature.test b/tests/languages/oz/attr-name_feature.test index 46dc2221e2..80af8b7d0b 100644 --- a/tests/languages/oz/attr-name_feature.test +++ b/tests/languages/oz/attr-name_feature.test @@ -1,14 +1,25 @@ menubutton(text:'Test' underline:0) +% negative example +val:=Value + ---------------------------------------------------- [ - ["function", "menubutton"], ["punctuation", "("], - ["attr-name", "text"], ["punctuation", ":"], ["atom", "'Test'"], - ["attr-name", "underline"], ["punctuation", ":"], ["number", "0"], - ["punctuation", ")"] + ["function", "menubutton"], + ["punctuation", "("], + ["attr-name", "text"], + ["punctuation", ":"], + ["atom", "'Test'"], + ["attr-name", "underline"], + ["punctuation", ":"], + ["number", "0"], + ["punctuation", ")"], + + ["comment", "% negative example"], + "\r\nval", ["operator", ":="], "Value" ] ---------------------------------------------------- -Checks for parameter names. \ No newline at end of file +Checks for parameter names. diff --git a/tests/languages/oz/variable_feature.test b/tests/languages/oz/variable_feature.test index 51274d6637..86b9108de7 100644 --- a/tests/languages/oz/variable_feature.test +++ b/tests/languages/oz/variable_feature.test @@ -1,15 +1,7 @@ -A -Foobar -Foo42 - ----------------------------------------------------- - -[ - ["variable", "A"], - ["variable", "Foobar"], - ["variable", "Foo42"] -] - ----------------------------------------------------- - -Checks for variables. \ No newline at end of file +`foo` + +---------------------------------------------------- + +[ + ["variable", "`foo`"] +]