diff --git a/components/prism-julia.js b/components/prism-julia.js index dbfdc0b275..d8d950ffa4 100644 --- a/components/prism-julia.js +++ b/components/prism-julia.js @@ -11,11 +11,15 @@ Prism.languages.julia = { greedy: true }, 'string': { - // https://docs.julialang.org/en/v1/manual/strings/#man-characters-1 // https://docs.julialang.org/en/v1/manual/strings/#String-Basics-1 // https://docs.julialang.org/en/v1/manual/strings/#non-standard-string-literals-1 // https://docs.julialang.org/en/v1/manual/running-external-programs/#Running-External-Programs-1 - pattern: /"""[\s\S]+?"""|(?:\b\w+)?"(?:\\.|[^"\\\r\n])*"|(^|[^\w'])'(?:\\[^\r\n][^'\r\n]*|[^\\\r\n])'|`(?:[^\\`\r\n]|\\.)*`/, + pattern: /"""[\s\S]+?"""|(?:\b\w+)?"(?:\\.|[^"\\\r\n])*"|`(?:[^\\`\r\n]|\\.)*`/, + greedy: true + }, + 'char': { + // https://docs.julialang.org/en/v1/manual/strings/#man-characters-1 + pattern: /(^|[^\w'])'(?:\\[^\r\n][^'\r\n]*|[^\\\r\n])'/, lookbehind: true, greedy: true }, diff --git a/components/prism-julia.min.js b/components/prism-julia.min.js index e9e678bb52..b677d30824 100644 --- a/components/prism-julia.min.js +++ b/components/prism-julia.min.js @@ -1 +1 @@ -Prism.languages.julia={comment:{pattern:/(^|[^\\])(?:#=(?:[^#=]|=(?!#)|#(?!=)|#=(?:[^#=]|=(?!#)|#(?!=))*=#)*=#|#.*)/,lookbehind:!0},regex:{pattern:/r"(?:\\.|[^"\\\r\n])*"[imsx]{0,4}/,greedy:!0},string:{pattern:/"""[\s\S]+?"""|(?:\b\w+)?"(?:\\.|[^"\\\r\n])*"|(^|[^\w'])'(?:\\[^\r\n][^'\r\n]*|[^\\\r\n])'|`(?:[^\\`\r\n]|\\.)*`/,lookbehind:!0,greedy:!0},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/,boolean:/\b(?:false|true)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[box])?(?:[\da-f]+(?:_[\da-f]+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[efp][+-]?\d+(?:_\d+)*)?j?/i,operator:/&&|\|\||[-+*^%÷⊻&$\\]=?|\/[\/=]?|!=?=?|\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/,punctuation:/::?|[{}[\]();,.?]/,constant:/\b(?:(?:Inf|NaN)(?:16|32|64)?|im|pi)\b|[πℯ]/}; \ No newline at end of file +Prism.languages.julia={comment:{pattern:/(^|[^\\])(?:#=(?:[^#=]|=(?!#)|#(?!=)|#=(?:[^#=]|=(?!#)|#(?!=))*=#)*=#|#.*)/,lookbehind:!0},regex:{pattern:/r"(?:\\.|[^"\\\r\n])*"[imsx]{0,4}/,greedy:!0},string:{pattern:/"""[\s\S]+?"""|(?:\b\w+)?"(?:\\.|[^"\\\r\n])*"|`(?:[^\\`\r\n]|\\.)*`/,greedy:!0},char:{pattern:/(^|[^\w'])'(?:\\[^\r\n][^'\r\n]*|[^\\\r\n])'/,lookbehind:!0,greedy:!0},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/,boolean:/\b(?:false|true)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[box])?(?:[\da-f]+(?:_[\da-f]+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[efp][+-]?\d+(?:_\d+)*)?j?/i,operator:/&&|\|\||[-+*^%÷⊻&$\\]=?|\/[\/=]?|!=?=?|\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/,punctuation:/::?|[{}[\]();,.?]/,constant:/\b(?:(?:Inf|NaN)(?:16|32|64)?|im|pi)\b|[πℯ]/}; \ No newline at end of file diff --git a/tests/languages/julia/char_feature.test b/tests/languages/julia/char_feature.test new file mode 100644 index 0000000000..062087e4f3 --- /dev/null +++ b/tests/languages/julia/char_feature.test @@ -0,0 +1,31 @@ +'x' +'\'' +'\u2200' +'\x80' +'\xe2\x88' +'∀' + +# not a character +A'b +A'b'' + +---------------------------------------------------- + +[ + ["char", "'x'"], + ["char", "'\\''"], + ["char", "'\\u2200'"], + ["char", "'\\x80'"], + ["char", "'\\xe2\\x88'"], + ["char", "'∀'"], + + ["comment", "# not a character"], + + "\r\nA", + ["operator", "'"], + "b\r\nA", + ["operator", "'"], + "b", + ["operator", "'"], + ["operator", "'"] +] diff --git a/tests/languages/julia/string_feature.test b/tests/languages/julia/string_feature.test index b88864a6e3..916d038675 100644 --- a/tests/languages/julia/string_feature.test +++ b/tests/languages/julia/string_feature.test @@ -2,13 +2,6 @@ "fo\"o" "\xe2\x88" -'x' -'\'' -'\u2200' -'\x80' -'\xe2\x88' -'∀' - """foo""" """fo"o bar""" @@ -22,10 +15,6 @@ b"DATA\xff\u2200" v"0.3-" raw"\\ \\\"" -# not a character -A'b -A'b'' - ---------------------------------------------------- [ @@ -33,13 +22,6 @@ A'b'' ["string", "\"fo\\\"o\""], ["string", "\"\\xe2\\x88\""], - ["string", "'x'"], - ["string", "'\\''"], - ["string", "'\\u2200'"], - ["string", "'\\x80'"], - ["string", "'\\xe2\\x88'"], - ["string", "'∀'"], - ["string", "\"\"\"foo\"\"\""], ["string", "\"\"\"fo\"o\r\nbar\"\"\""], @@ -50,16 +32,7 @@ A'b'' ["string", "s\"\\g<0>1\""], ["string", "b\"DATA\\xff\\u2200\""], ["string", "v\"0.3-\""], - ["string", "raw\"\\\\ \\\\\\\"\""], - - ["comment", "# not a character"], - "\r\nA", - ["operator", "'"], - "b\r\nA", - ["operator", "'"], - "b", - ["operator", "'"], - ["operator", "'"] + ["string", "raw\"\\\\ \\\\\\\"\""] ] ----------------------------------------------------