Commit 3a876df01dcbda9d725b1d1f1b7bda6222753e4a

Michael Schmidt 2021-12-05T14:42:04

Julia: Added `char` token (#3223)

diff --git a/components/prism-julia.js b/components/prism-julia.js
index dbfdc0b..d8d950f 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 e9e678b..b677d30 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 0000000..062087e
--- /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 b88864a..916d038 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\"\\\\ \\\\\\\"\""]
 ]
 
 ----------------------------------------------------