diff --git a/components/prism-julia.js b/components/prism-julia.js index d8d950ffa4..9931b89b36 100644 --- a/components/prism-julia.js +++ b/components/prism-julia.js @@ -19,8 +19,7 @@ Prism.languages.julia = { }, 'char': { // https://docs.julialang.org/en/v1/manual/strings/#man-characters-1 - pattern: /(^|[^\w'])'(?:\\[^\r\n][^'\r\n]*|[^\\\r\n])'/, - lookbehind: true, + pattern: /'(?:[^\\'\r\n]|\\(?:[abdefnrstv\\'\"]|\d+|x[0-9a-fA-F]+|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}))'/, greedy: true }, 'keyword': /\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\b/, @@ -28,7 +27,10 @@ Prism.languages.julia = { 'number': /(?:\b(?=\d)|\B(?=\.))(?:0[box])?(?:[\da-f]+(?:_[\da-f]+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[efp][+-]?\d+(?:_\d+)*)?j?/i, // https://docs.julialang.org/en/v1/manual/mathematical-operations/ // https://docs.julialang.org/en/v1/manual/mathematical-operations/#Operator-Precedence-and-Associativity-1 - 'operator': /&&|\|\||[-+*^%÷⊻&$\\]=?|\/[\/=]?|!=?=?|\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/, + 'operator': { + pattern: /(?:(?:[A-Za-z_\u00A1-\uFFFF][\w\u00A1-\uFFFF]*\s*)?(?:&&|\|\||[-+*^%÷⊻&$\\]=?|\/[\/=]?|!=?=?|\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥√∛])|'(?![\w\u00A1-\uFFFF]))/, + lookbehind: true + }, 'punctuation': /::?|[{}[\]();,.?]/, // https://docs.julialang.org/en/v1/base/numbers/#Base.im 'constant': /\b(?:(?:Inf|NaN)(?:16|32|64)?|im|pi)\b|[πℯ]/ diff --git a/tests/languages/julia/char_feature.test b/tests/languages/julia/char_feature.test index 062087e4f3..62a5314f3d 100644 --- a/tests/languages/julia/char_feature.test +++ b/tests/languages/julia/char_feature.test @@ -16,16 +16,13 @@ A'b'' ["char", "'\\''"], ["char", "'\\u2200'"], ["char", "'\\x80'"], - ["char", "'\\xe2\\x88'"], + ["operator", "'"], + ["operator", "\\"], + ["operator", "xe2\\"], + "x88", + ["operator", "'"], ["char", "'∀'"], ["comment", "# not a character"], - - "\r\nA", - ["operator", "'"], - "b\r\nA", - ["operator", "'"], - "b", - ["operator", "'"], - ["operator", "'"] + "\r\nA'b\r\nA", ["char", "'b'"], ["operator", "'"] ] diff --git a/tests/languages/julia/operator_feature.test b/tests/languages/julia/operator_feature.test index 70c611d98d..61678e13a7 100644 --- a/tests/languages/julia/operator_feature.test +++ b/tests/languages/julia/operator_feature.test @@ -23,31 +23,73 @@ A'b'' ---------------------------------------------------- [ - ["operator", "+"], ["operator", "+="], - ["operator", "-"], ["operator", "-="], - ["operator", "*"], ["operator", "*="], - ["operator", "/"], ["operator", "/="], ["operator", "//"], - ["operator", "\\"], ["operator", "\\="], - ["operator", "^"], ["operator", "^="], - ["operator", "%"], ["operator", "%="], - ["operator", "÷"], ["operator", "÷="], - ["operator", "!"], ["operator", "!="], ["operator", "!=="], - ["operator", "&"], ["operator", "&="], ["operator", "&&"], - ["operator", "⊻"], ["operator", "⊻="], - ["operator", "|"], ["operator", "|="], ["operator", "||"], - ["operator", "|>"], ["operator", "<|"], - ["operator", "$"], ["operator", "$="], - ["operator", "<"], ["operator", "<="], ["operator", "<:"], ["operator", "<<"], ["operator", "<<="], - ["operator", ">"], ["operator", ">="], ["operator", ">>"], ["operator", ">>="], ["operator", ">>>"], ["operator", ">>>="], - ["operator", "="], ["operator", "=="], ["operator", "==="], - ["operator", "~"], ["operator", "≠"], ["operator", "≤"], ["operator", "≥"], ["operator", "√"], ["operator", "∛"], - "\r\n\r\nA", - ["operator", "'"], - "b\r\nA", - ["operator", "'"], - "b", - ["operator", "'"], - ["operator", "'"] + ["operator", "+"], + ["operator", "+="], + + ["operator", "-"], + ["operator", "-="], + + ["operator", "*"], + ["operator", "*="], + + ["operator", "/"], + ["operator", "/="], + ["operator", "//"], + + ["operator", "\\"], + ["operator", "\\="], + + ["operator", "^"], + ["operator", "^="], + + ["operator", "%"], + ["operator", "%="], + + ["operator", "÷ ÷="], + + ["operator", "!"], + ["operator", "!="], + ["operator", "!=="], + + ["operator", "&"], + ["operator", "&="], + ["operator", "&&"], + + ["operator", "⊻ ⊻="], + + ["operator", "|"], + ["operator", "|="], + ["operator", "||"], + + ["operator", "|>"], + ["operator", "<|"], + + ["operator", "$"], + ["operator", "$="], + + ["operator", "<"], + ["operator", "<="], + ["operator", "<:"], + ["operator", "<<"], + ["operator", "<<="], + + ["operator", ">"], + ["operator", ">="], + ["operator", ">>"], + ["operator", ">>="], + ["operator", ">>>"], + ["operator", ">>>="], + + ["operator", "="], + ["operator", "=="], + ["operator", "==="], + + ["operator", "~"], + ["operator", "≠ ≤"], + ["operator", "≥ √"], + ["operator", "∛"], + + "\r\n\r\nA'b\r\nA", ["char", "'b'"], ["operator", "'"] ] ----------------------------------------------------