")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
diff --git a/examples/prism-odin.html b/examples/prism-odin.html
new file mode 100644
index 0000000000..03290e8da8
--- /dev/null
+++ b/examples/prism-odin.html
@@ -0,0 +1,12 @@
+Example
+
+package main
+
+import "core:fmt"
+
+main :: proc() {
+ i: int
+ for i := 0; i < 100; i += 1 {
+ fmt.println(i, " bottles of beer on the wall.\n")
+ }
+}
diff --git a/tests/languages/odin/boolean_feature.test b/tests/languages/odin/boolean_feature.test
new file mode 100644
index 0000000000..27c53f23a1
--- /dev/null
+++ b/tests/languages/odin/boolean_feature.test
@@ -0,0 +1,13 @@
+_
+false
+nil
+true
+
+----------------------------------------------------
+
+[
+ ["boolean", "_"],
+ ["boolean", "false"],
+ ["boolean", "nil"],
+ ["boolean", "true"]
+]
diff --git a/tests/languages/odin/character_feature.test b/tests/languages/odin/character_feature.test
new file mode 100644
index 0000000000..8cf23a548c
--- /dev/null
+++ b/tests/languages/odin/character_feature.test
@@ -0,0 +1,147 @@
+' '
+'!'
+'"'
+'0'
+'\"'
+'\''
+'\000'
+'\077'
+'\U000000'
+'\UFFFFFF'
+'\Uffffff'
+'\\'
+'\a'
+'\b'
+'\e'
+'\f'
+'\n'
+'\r'
+'\t'
+'\u0000'
+'\uFFFF'
+'\uffff'
+'\v'
+'\x00'
+'\xFF'
+'\xff'
+'a'
+
+----------------------------------------------------
+
+[
+ ["char", ["' '"]],
+ ["char", ["'!'"]],
+ ["char", ["'\"'"]],
+ ["char", ["'0'"]],
+ ["char", [
+ "'",
+ ["symbol", "\\\""],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\'"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\000"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\077"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\U000000"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\UFFFFFF"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\Uffffff"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\\\"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\a"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\b"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\e"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\f"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\n"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\r"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\t"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\u0000"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\uFFFF"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\uffff"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\v"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\x00"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\xFF"],
+ "'"
+ ]],
+ ["char", [
+ "'",
+ ["symbol", "\\xff"],
+ "'"
+ ]],
+ ["char", ["'a'"]]
+]
diff --git a/tests/languages/odin/comment_feature.test b/tests/languages/odin/comment_feature.test
new file mode 100644
index 0000000000..f19c363fce
--- /dev/null
+++ b/tests/languages/odin/comment_feature.test
@@ -0,0 +1,90 @@
+/*
+*/
+/* A comment */
+/*!*/
+/*""*/
+/*"\a"*/
+/*#!*/
+/*' '*/
+/*'\a'*/
+/**/
+/*//*/
+/*0*/
+/*``*/
+/*`\a`*/
+/*false*/
+/*if*/
+Not a comment /* A comment */
+#!
+#! A comment
+#!!
+#!""
+#!#!
+#!' '
+#!/**/
+#!//
+#!0
+#!``
+#!false
+#!if
+Not a comment #! A comment
+//
+// A comment
+//!
+//""
+//#!
+//' '
+///**/
+////
+//0
+//``
+//false
+//if
+Not a comment // A comment
+
+----------------------------------------------------
+
+[
+ ["comment", "/*\r\n*/"],
+ ["comment", "/* A comment */"],
+ ["comment", "/*!*/"],
+ ["comment", "/*\"\"*/"],
+ ["comment", "/*\"\\a\"*/"],
+ ["comment", "/*#!*/"],
+ ["comment", "/*' '*/"],
+ ["comment", "/*'\\a'*/"],
+ ["comment", "/**/"],
+ ["comment", "/*//*/"],
+ ["comment", "/*0*/"],
+ ["comment", "/*``*/"],
+ ["comment", "/*`\\a`*/"],
+ ["comment", "/*false*/"],
+ ["comment", "/*if*/"],
+ "\r\nNot a comment ", ["comment", "/* A comment */"],
+ ["comment", "#!"],
+ ["comment", "#! A comment"],
+ ["comment", "#!!"],
+ ["comment", "#!\"\""],
+ ["comment", "#!#!"],
+ ["comment", "#!' '"],
+ ["comment", "#!/**/"],
+ ["comment", "#!//"],
+ ["comment", "#!0"],
+ ["comment", "#!``"],
+ ["comment", "#!false"],
+ ["comment", "#!if"],
+ "\r\nNot a comment ", ["comment", "#! A comment"],
+ ["comment", "//"],
+ ["comment", "// A comment"],
+ ["comment", "//!"],
+ ["comment", "//\"\""],
+ ["comment", "//#!"],
+ ["comment", "//' '"],
+ ["comment", "///**/"],
+ ["comment", "////"],
+ ["comment", "//0"],
+ ["comment", "//``"],
+ ["comment", "//false"],
+ ["comment", "//if"],
+ "\r\nNot a comment ", ["comment", "// A comment"]
+]
diff --git a/tests/languages/odin/failed_multiline_comment_feature.test b/tests/languages/odin/failed_multiline_comment_feature.test
new file mode 100644
index 0000000000..2555d3025c
--- /dev/null
+++ b/tests/languages/odin/failed_multiline_comment_feature.test
@@ -0,0 +1,9 @@
+/*/**/*/
+
+----------------------------------------------------
+
+[
+ ["comment", "/*/**/"],
+ ["operator", "*"],
+ ["operator", "/"]
+]
diff --git a/tests/languages/odin/keyword_feature.test b/tests/languages/odin/keyword_feature.test
new file mode 100644
index 0000000000..c3380bec0b
--- /dev/null
+++ b/tests/languages/odin/keyword_feature.test
@@ -0,0 +1,77 @@
+asm
+auto_cast
+bit_set
+break
+case
+cast
+context
+continue
+defer
+distinct
+do
+dynamic
+else
+enum
+fallthrough
+for
+foreign
+if
+import
+in
+map
+matrix
+not_in
+or_else
+or_return
+package
+proc
+return
+struct
+switch
+transmute
+typeid
+union
+using
+when
+where
+
+----------------------------------------------------
+
+[
+ ["keyword", "asm"],
+ ["keyword", "auto_cast"],
+ ["keyword", "bit_set"],
+ ["keyword", "break"],
+ ["keyword", "case"],
+ ["keyword", "cast"],
+ ["keyword", "context"],
+ ["keyword", "continue"],
+ ["keyword", "defer"],
+ ["keyword", "distinct"],
+ ["keyword", "do"],
+ ["keyword", "dynamic"],
+ ["keyword", "else"],
+ ["keyword", "enum"],
+ ["keyword", "fallthrough"],
+ ["keyword", "for"],
+ ["keyword", "foreign"],
+ ["keyword", "if"],
+ ["keyword", "import"],
+ ["keyword", "in"],
+ ["keyword", "map"],
+ ["keyword", "matrix"],
+ ["keyword", "not_in"],
+ ["keyword", "or_else"],
+ ["keyword", "or_return"],
+ ["keyword", "package"],
+ ["keyword", "proc"],
+ ["keyword", "return"],
+ ["keyword", "struct"],
+ ["keyword", "switch"],
+ ["keyword", "transmute"],
+ ["keyword", "typeid"],
+ ["keyword", "union"],
+ ["keyword", "using"],
+ ["keyword", "when"],
+ ["keyword", "where"]
+]
diff --git a/tests/languages/odin/not_a_character_feature.test b/tests/languages/odin/not_a_character_feature.test
new file mode 100644
index 0000000000..3216f76093
--- /dev/null
+++ b/tests/languages/odin/not_a_character_feature.test
@@ -0,0 +1,43 @@
+'
+'
+' '
+''
+'\'
+'\0'
+'\00'
+'\0000'
+'\008'
+'\u'
+'\u0'
+'\u00'
+'\u000'
+'\u00000'
+'\uF'
+'\uFF'
+'\uFFF'
+'\uFFFFF'
+'\uf'
+'\uff'
+'\ufff'
+'\ufffff'
+'\x'
+'\x0'
+'\x000'
+'\xF'
+'\xFFF'
+'\xf'
+'\xfff'
+
+----------------------------------------------------
+
+[
+ "'\r\n'\r\n' '\r\n''\r\n'\\'\r\n'\\",
+ ["number", "0"],
+ "'\r\n'\\",
+ ["number", "00"],
+ "'\r\n'\\",
+ ["number", "0000"],
+ "'\r\n'\\",
+ ["number", "008"],
+ "'\r\n'\\u'\r\n'\\u0'\r\n'\\u00'\r\n'\\u000'\r\n'\\u00000'\r\n'\\uF'\r\n'\\uFF'\r\n'\\uFFF'\r\n'\\uFFFFF'\r\n'\\uf'\r\n'\\uff'\r\n'\\ufff'\r\n'\\ufffff'\r\n'\\x'\r\n'\\x0'\r\n'\\x000'\r\n'\\xF'\r\n'\\xFFF'\r\n'\\xf'\r\n'\\xfff'"
+]
diff --git a/tests/languages/odin/not_a_number_feature.test b/tests/languages/odin/not_a_number_feature.test
new file mode 100644
index 0000000000..01124560b8
--- /dev/null
+++ b/tests/languages/odin/not_a_number_feature.test
@@ -0,0 +1,55 @@
+0B0
+0D0
+0I
+0O0
+0Z0
+0b
+0b2
+0d
+0h
+0h0
+0h00
+0h000
+0h00000
+0h0000000
+0h000000000
+0h000000000000000
+0h00000000000000000
+0h_
+0o
+0o8
+0x
+0X0
+0xG
+0z
+0zC
+
+----------------------------------------------------
+
+[
+ ["number", "0"], "B0\r\n",
+ ["number", "0"], "D0\r\n",
+ ["number", "0"], "I\r\n",
+ ["number", "0"], "O0\r\n",
+ ["number", "0"], "Z0\r\n",
+ ["number", "0"], "b\r\n",
+ ["number", "0"], "b2\r\n",
+ ["number", "0"], "d\r\n",
+ ["number", "0"], "h\r\n",
+ ["number", "0"], "h0\r\n",
+ ["number", "0"], "h00\r\n",
+ ["number", "0"], "h000\r\n",
+ ["number", "0"], "h00000\r\n",
+ ["number", "0"], "h0000000\r\n",
+ ["number", "0"], "h000000000\r\n",
+ ["number", "0"], "h000000000000000\r\n",
+ ["number", "0"], "h00000000000000000\r\n",
+ ["number", "0"], "h_\r\n",
+ ["number", "0"], "o\r\n",
+ ["number", "0"], "o8\r\n",
+ ["number", "0"], "x\r\n",
+ ["number", "0"], "X0\r\n",
+ ["number", "0"], "xG\r\n",
+ ["number", "0"], "z\r\n",
+ ["number", "0"], "zC"
+]
diff --git a/tests/languages/odin/number_feature.test b/tests/languages/odin/number_feature.test
new file mode 100644
index 0000000000..2e2560fda3
--- /dev/null
+++ b/tests/languages/odin/number_feature.test
@@ -0,0 +1,129 @@
+.0
+0
+0.
+0E
+0b0
+0b00
+0b01
+0b0_
+0b_
+0b_0
+0b_1
+0b__
+0d0
+0d00
+0d01
+0d0_
+0d_
+0d_0
+0d_1
+0d__
+0e
+0e+
+0e+0
+0e+0i
+0e+i
+0e-
+0e-0
+0e-0i
+0e-i
+0ei
+0h0000
+0h00000000
+0h0000000000000000
+0i
+0o0
+0o00
+0o01
+0o0_
+0o_
+0o_0
+0o_1
+0o__
+0x0
+0x00
+0x0_
+0x0F
+0x0f
+0x_
+0x_0
+0x__
+0x_F
+0x_f
+0z0
+0z00
+0z0_
+0z0B
+0z0b
+0z_
+0z_0
+0z__
+0z_B
+0z_b
+
+----------------------------------------------------
+
+[
+ ["number", ".0"],
+ ["number", "0"],
+ ["number", "0."],
+ ["number", "0E"],
+ ["number", "0b0"],
+ ["number", "0b00"],
+ ["number", "0b01"],
+ ["number", "0b0_"],
+ ["number", "0b_"],
+ ["number", "0b_0"],
+ ["number", "0b_1"],
+ ["number", "0b__"],
+ ["number", "0d0"],
+ ["number", "0d00"],
+ ["number", "0d01"],
+ ["number", "0d0_"],
+ ["number", "0d_"],
+ ["number", "0d_0"],
+ ["number", "0d_1"],
+ ["number", "0d__"],
+ ["number", "0e"],
+ ["number", "0e+"],
+ ["number", "0e+0"],
+ ["number", "0e+0i"],
+ ["number", "0e+i"],
+ ["number", "0e-"],
+ ["number", "0e-0"],
+ ["number", "0e-0i"],
+ ["number", "0e-i"],
+ ["number", "0ei"],
+ ["number", "0h0000"],
+ ["number", "0h00000000"],
+ ["number", "0h0000000000000000"],
+ ["number", "0i"],
+ ["number", "0o0"],
+ ["number", "0o00"],
+ ["number", "0o01"],
+ ["number", "0o0_"],
+ ["number", "0o_"],
+ ["number", "0o_0"],
+ ["number", "0o_1"],
+ ["number", "0o__"],
+ ["number", "0x0"],
+ ["number", "0x00"],
+ ["number", "0x0_"],
+ ["number", "0x0F"],
+ ["number", "0x0f"],
+ ["number", "0x_"],
+ ["number", "0x_0"],
+ ["number", "0x__"],
+ ["number", "0x_F"],
+ ["number", "0x_f"],
+ ["number", "0z0"],
+ ["number", "0z00"],
+ ["number", "0z0_"],
+ ["number", "0z0B"],
+ ["number", "0z0b"],
+ ["number", "0z_"],
+ ["number", "0z_0"],
+ ["number", "0z__"],
+ ["number", "0z_B"],
+ ["number", "0z_b"]
+]
diff --git a/tests/languages/odin/operator_feature.test b/tests/languages/odin/operator_feature.test
new file mode 100644
index 0000000000..d67d03de4c
--- /dev/null
+++ b/tests/languages/odin/operator_feature.test
@@ -0,0 +1,121 @@
+!
+!=
+#
+$
+%
+%%
+%%=
+%=
+&
+&&
+&&=
+&=
+&~
+&~=
+(
+)
+*
+*=
++
+++
++=
+,
+-
+--
+---
+-=
+->
+.
+..
+..<
+..=
+/
+/=
+:
+;
+<
+<<
+<<=
+<=
+=
+==
+>
+>=
+>>
+>>=
+?
+@
+[
+]
+^
+{
+|
+|=
+||
+||=
+}
+~
+~=
+
+----------------------------------------------------
+
+[
+ ["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", "|"],
+ ["operator", "|="],
+ ["operator", "||"],
+ ["operator", "||="],
+ ["operator", "}"],
+ ["operator", "~"],
+ ["operator", "~="]
+]
diff --git a/tests/languages/odin/raw_string_feature.test b/tests/languages/odin/raw_string_feature.test
new file mode 100644
index 0000000000..abb64cccfd
--- /dev/null
+++ b/tests/languages/odin/raw_string_feature.test
@@ -0,0 +1,79 @@
+`
+`
+`!`
+`""`
+`"\a"`
+`' '`
+`'\a'`
+`/**/`
+`//`
+`0`
+`\
+`
+`\"`
+`\'`
+`\000`
+`\077`
+`\U000000`
+`\UFFFFFF`
+`\Uffffff`
+`\\`
+`\a`
+`\b`
+`\e`
+`\f`
+`\n`
+`\r`
+`\t`
+`\u0000`
+`\uFFFF`
+`\uffff`
+`\v`
+`\x00`
+`\xFF`
+`\xff`
+`A raw string.`
+``
+`false`
+`if`
+
+----------------------------------------------------
+
+[
+ ["string", "`\r\n`"],
+ ["string", "`!`"],
+ ["string", "`\"\"`"],
+ ["string", "`\"\\a\"`"],
+ ["string", "`' '`"],
+ ["string", "`'\\a'`"],
+ ["string", "`/**/`"],
+ ["string", "`//`"],
+ ["string", "`0`"],
+ ["string", "`\\\r\n`"],
+ ["string", "`\\\"`"],
+ ["string", "`\\'`"],
+ ["string", "`\\000`"],
+ ["string", "`\\077`"],
+ ["string", "`\\U000000`"],
+ ["string", "`\\UFFFFFF`"],
+ ["string", "`\\Uffffff`"],
+ ["string", "`\\\\`"],
+ ["string", "`\\a`"],
+ ["string", "`\\b`"],
+ ["string", "`\\e`"],
+ ["string", "`\\f`"],
+ ["string", "`\\n`"],
+ ["string", "`\\r`"],
+ ["string", "`\\t`"],
+ ["string", "`\\u0000`"],
+ ["string", "`\\uFFFF`"],
+ ["string", "`\\uffff`"],
+ ["string", "`\\v`"],
+ ["string", "`\\x00`"],
+ ["string", "`\\xFF`"],
+ ["string", "`\\xff`"],
+ ["string", "`A raw string.`"],
+ ["string", "``"],
+ ["string", "`false`"],
+ ["string", "`if`"]
+]
diff --git a/tests/languages/odin/string_feature.test b/tests/languages/odin/string_feature.test
new file mode 100644
index 0000000000..4ce66b9186
--- /dev/null
+++ b/tests/languages/odin/string_feature.test
@@ -0,0 +1,178 @@
+"!"
+""
+"' '"
+"'\a'"
+"/**/"
+"//"
+"0"
+"\""
+"\'"
+"\000"
+"\077"
+"\U000000"
+"\UFFFFFF"
+"\Uffffff"
+"\\"
+"\a"
+"\b"
+"\e"
+"\f"
+"\n"
+"\r"
+"\t"
+"\u0000"
+"\uFFFF"
+"\uffff"
+"\v"
+"\x00"
+"\xFF"
+"\xff"
+"Not
+a
+string"
+"Not\
+a\
+string"
+"String"
+"String" Not a string"
+"`\a`"
+"``"
+"false"
+"if"
+
+----------------------------------------------------
+
+[
+ ["string", ["\"!\""]],
+ ["string", ["\"\""]],
+ ["string", ["\"' '\""]],
+ ["string", [
+ "\"'",
+ ["symbol", "\\a"],
+ "'\""
+ ]],
+ ["string", ["\"/**/\""]],
+ ["string", ["\"//\""]],
+ ["string", ["\"0\""]],
+ ["string", [
+ "\"",
+ ["symbol", "\\\""],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\'"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\000"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\077"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\U000000"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\UFFFFFF"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\Uffffff"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\\\"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\a"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\b"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\e"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\f"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\n"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\r"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\t"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\u0000"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\uFFFF"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\uffff"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\v"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\x00"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\xFF"],
+ "\""
+ ]],
+ ["string", [
+ "\"",
+ ["symbol", "\\xff"],
+ "\""
+ ]],
+ "\r\n\"Not\r\na\r\nstring\"\r\n\"Not\\\r\na\\\r\nstring\"\r\n",
+ ["string", ["\"String\""]],
+ ["string", ["\"String\""]], " Not a string\"\r\n",
+ ["string", [
+ "\"`",
+ ["symbol", "\\a"],
+ "`\""
+ ]],
+ ["string", ["\"``\""]],
+ ["string", ["\"false\""]],
+ ["string", ["\"if\""]]
+]
From f46e69d49aa13a50e9b4c123960c8f7f3b9b6348 Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Tue, 14 Dec 2021 04:47:26 +0300
Subject: [PATCH 02/16] Change \S\s to \s\S
---
components/prism-odin.js | 2 +-
components/prism-odin.min.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index cdcabcb166..28f57b86f0 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -11,7 +11,7 @@
*/
'comment': [
{
- pattern: /\/\*[\S\s]*?(?:\*\/|$)/,
+ pattern: /\/\*[\s\S]*?(?:\*\/|$)/,
greedy: true
},
{
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index 2a270e5ec5..e67a19eabb 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function n(e,n){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),n)}e.languages.odin={comment:[{pattern:/\/\*[\S\s]*?(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:n("'(?:|[^\n\r'\\\\])'"),inside:{symbol:n("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:n('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:n("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
+!function(e){function n(e,n){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),n)}e.languages.odin={comment:[{pattern:/\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:n("'(?:|[^\n\r'\\\\])'"),inside:{symbol:n("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:n('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:n("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
From 3a67123fb087a61006ead790d4f9d5bbf8762201 Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Fri, 17 Dec 2021 22:37:57 +0300
Subject: [PATCH 03/16] Add support for comments with 1 level of nesting
Co-authored-by: Michael Schmidt
---
components/prism-odin.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 28f57b86f0..12906f0405 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -11,7 +11,7 @@
*/
'comment': [
{
- pattern: /\/\*[\s\S]*?(?:\*\/|$)/,
+ pattern: /\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*[\s\S]*?(?:\*\/|$))*(?:\*\/|$)/,
greedy: true
},
{
From 68fca76e99353da89f55ce2347beefab38ea7311 Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Sat, 18 Dec 2021 01:12:30 +0300
Subject: [PATCH 04/16] Fix tests for comments
---
tests/languages/odin/comment_feature.test | 66 ++++++++++---------
.../failed_multiline_comment_feature.test | 9 ---
2 files changed, 34 insertions(+), 41 deletions(-)
delete mode 100644 tests/languages/odin/failed_multiline_comment_feature.test
diff --git a/tests/languages/odin/comment_feature.test b/tests/languages/odin/comment_feature.test
index f19c363fce..5f91768690 100644
--- a/tests/languages/odin/comment_feature.test
+++ b/tests/languages/odin/comment_feature.test
@@ -1,5 +1,18 @@
+#!
+#! A comment
+#!!
+#!""
+#!#!
+#!' '
+#!/**/
+#!//
+#!0
+#!``
+#!false
+#!if
/*
*/
+/* 1 /* 2 */ 1 */
/* A comment */
/*!*/
/*""*/
@@ -8,26 +21,12 @@
/*' '*/
/*'\a'*/
/**/
-/*//*/
+/*/**/*/
/*0*/
-/*``*/
/*`\a`*/
+/*``*/
/*false*/
/*if*/
-Not a comment /* A comment */
-#!
-#! A comment
-#!!
-#!""
-#!#!
-#!' '
-#!/**/
-#!//
-#!0
-#!``
-#!false
-#!if
-Not a comment #! A comment
//
// A comment
//!
@@ -40,12 +39,27 @@ Not a comment #! A comment
//``
//false
//if
+Not a comment #! A comment
+Not a comment /* A comment */
Not a comment // A comment
----------------------------------------------------
[
+ ["comment", "#!"],
+ ["comment", "#! A comment"],
+ ["comment", "#!!"],
+ ["comment", "#!\"\""],
+ ["comment", "#!#!"],
+ ["comment", "#!' '"],
+ ["comment", "#!/**/"],
+ ["comment", "#!//"],
+ ["comment", "#!0"],
+ ["comment", "#!``"],
+ ["comment", "#!false"],
+ ["comment", "#!if"],
["comment", "/*\r\n*/"],
+ ["comment", "/* 1 /* 2 */ 1 */"],
["comment", "/* A comment */"],
["comment", "/*!*/"],
["comment", "/*\"\"*/"],
@@ -54,26 +68,12 @@ Not a comment // A comment
["comment", "/*' '*/"],
["comment", "/*'\\a'*/"],
["comment", "/**/"],
- ["comment", "/*//*/"],
+ ["comment", "/*/**/*/"],
["comment", "/*0*/"],
- ["comment", "/*``*/"],
["comment", "/*`\\a`*/"],
+ ["comment", "/*``*/"],
["comment", "/*false*/"],
["comment", "/*if*/"],
- "\r\nNot a comment ", ["comment", "/* A comment */"],
- ["comment", "#!"],
- ["comment", "#! A comment"],
- ["comment", "#!!"],
- ["comment", "#!\"\""],
- ["comment", "#!#!"],
- ["comment", "#!' '"],
- ["comment", "#!/**/"],
- ["comment", "#!//"],
- ["comment", "#!0"],
- ["comment", "#!``"],
- ["comment", "#!false"],
- ["comment", "#!if"],
- "\r\nNot a comment ", ["comment", "#! A comment"],
["comment", "//"],
["comment", "// A comment"],
["comment", "//!"],
@@ -86,5 +86,7 @@ Not a comment // A comment
["comment", "//``"],
["comment", "//false"],
["comment", "//if"],
+ "\r\nNot a comment ", ["comment", "#! A comment"],
+ "\r\nNot a comment ", ["comment", "/* A comment */"],
"\r\nNot a comment ", ["comment", "// A comment"]
]
diff --git a/tests/languages/odin/failed_multiline_comment_feature.test b/tests/languages/odin/failed_multiline_comment_feature.test
deleted file mode 100644
index 2555d3025c..0000000000
--- a/tests/languages/odin/failed_multiline_comment_feature.test
+++ /dev/null
@@ -1,9 +0,0 @@
-/*/**/*/
-
-----------------------------------------------------
-
-[
- ["comment", "/*/**/"],
- ["operator", "*"],
- ["operator", "/"]
-]
From d87b7fe1aa0cd85c9c6c20e016c8caf31225babf Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Sat, 18 Dec 2021 02:20:13 +0300
Subject: [PATCH 05/16] Fix the comment pattern to prevent exponential
backtracking
---
components/prism-odin.js | 6 ++++--
components/prism-odin.min.js | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 12906f0405..459387450f 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -7,11 +7,13 @@
Prism.languages.odin = {
/**
- * The current implementation of multiline comments doesn't support nesting.
+ * The current implementation supports only 1 level of nesting.
+ * @author Michael Schmidt
+ * @author edukisto
*/
'comment': [
{
- pattern: /\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*[\s\S]*?(?:\*\/|$))*(?:\*\/|$)/,
+ pattern: /\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,
greedy: true
},
{
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index e67a19eabb..c411dba0c7 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function n(e,n){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),n)}e.languages.odin={comment:[{pattern:/\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:n("'(?:|[^\n\r'\\\\])'"),inside:{symbol:n("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:n('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:n("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
+!function(e){function n(e,n){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),n)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:n("'(?:|[^\n\r'\\\\])'"),inside:{symbol:n("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:n('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:n("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
From f0e1bd19174e6b222773e8135b2c2123336ed62b Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Sat, 18 Dec 2021 02:29:18 +0300
Subject: [PATCH 06/16] Add a missing newline to the JSDoc block
---
components/prism-odin.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 459387450f..5582db3a74 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -8,6 +8,7 @@
Prism.languages.odin = {
/**
* The current implementation supports only 1 level of nesting.
+ *
* @author Michael Schmidt
* @author edukisto
*/
From f0eff9593339680cb9f923b5f5d08fe9902b57ea Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Sat, 18 Dec 2021 02:44:28 +0300
Subject: [PATCH 07/16] Make the char pattern greedy
---
components/prism-odin.js | 1 +
components/prism-odin.min.js | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 5582db3a74..5131354268 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -32,6 +32,7 @@
*/
'char': {
pattern: withEscapes(/'(?:|[^\n\r'\\])'/.source),
+ greedy: true,
inside: {
'symbol': withEscapes(//.source)
}
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index c411dba0c7..65d956d673 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function n(e,n){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),n)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:n("'(?:|[^\n\r'\\\\])'"),inside:{symbol:n("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:n('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:n("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
+!function(e){function r(e,r){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),r)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:r("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:r("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:r('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:r("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
From f7569f0fa6185a08c215c81959a68960b6a600ff Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Sat, 18 Dec 2021 03:26:10 +0300
Subject: [PATCH 08/16] Allow spaces and tabs after the name of a function
---
components/prism-odin.js | 2 +-
components/prism-odin.min.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 5131354268..e327c838f7 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -58,7 +58,7 @@
'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
- 'function': /\b\w+(?=\()/,
+ 'function': /\b\w+(?=[ \t]*\()/,
'operator': /\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/
};
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index 65d956d673..2adccb2737 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function r(e,r){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),r)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:r("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:r("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:r('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:r("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
+!function(e){function r(e,r){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),r)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:r("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:r("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:r('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:r("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=[ \t]*\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
From ee47b20f1bad9a8871d314f4da166cf46cdf17da Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Sat, 18 Dec 2021 04:47:36 +0300
Subject: [PATCH 09/16] Separate directives, operators, punctuation marks, etc.
---
components/prism-odin.js | 19 ++++++++++-
components/prism-odin.min.js | 2 +-
.../odin/constant_parameter_sign_feature.test | 7 ++++
tests/languages/odin/directive_feature.test | 9 ++++++
tests/languages/odin/operator_feature.test | 32 +------------------
tests/languages/odin/punctuation_feature.test | 29 +++++++++++++++++
tests/languages/odin/undefined_feature.test | 7 ++++
7 files changed, 72 insertions(+), 33 deletions(-)
create mode 100644 tests/languages/odin/constant_parameter_sign_feature.test
create mode 100644 tests/languages/odin/directive_feature.test
create mode 100644 tests/languages/odin/punctuation_feature.test
create mode 100644 tests/languages/odin/undefined_feature.test
diff --git a/components/prism-odin.js b/components/prism-odin.js
index e327c838f7..76b52583b5 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -52,6 +52,11 @@
}
],
+ 'directive': {
+ pattern: /#\w+/,
+ alias: 'property'
+ },
+
'number': /(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,
'boolean': /\b(?:_|false|nil|true)\b/,
@@ -60,6 +65,18 @@
'function': /\b\w+(?=[ \t]*\()/,
- 'operator': /\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/
+ 'constant-parameter-sign': {
+ pattern: /\$/,
+ alias: 'important'
+ },
+
+ 'undefined': {
+ pattern: /---/,
+ alias: 'operator'
+ },
+
+ 'operator': /\+\+|--|-(?!>)|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,
+
+ 'punctuation': /->|[(),.:;@\[\]{}]/
};
}(Prism));
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index 2adccb2737..82b5df7693 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function r(e,r){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),r)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:r("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:r("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:r('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:r("")}}],number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=[ \t]*\()/,operator:/\+\+|---?|->|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[#$(),.:;?@\[\]^{}]/}}(Prism);
\ No newline at end of file
+!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=[ \t]*\()/,"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},operator:/\+\+|--|-(?!>)|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/->|[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
diff --git a/tests/languages/odin/constant_parameter_sign_feature.test b/tests/languages/odin/constant_parameter_sign_feature.test
new file mode 100644
index 0000000000..072cebc8a4
--- /dev/null
+++ b/tests/languages/odin/constant_parameter_sign_feature.test
@@ -0,0 +1,7 @@
+$
+
+----------------------------------------------------
+
+[
+ ["constant-parameter-sign", "$"]
+]
diff --git a/tests/languages/odin/directive_feature.test b/tests/languages/odin/directive_feature.test
new file mode 100644
index 0000000000..61edb9b9d8
--- /dev/null
+++ b/tests/languages/odin/directive_feature.test
@@ -0,0 +1,9 @@
+#assert
+#no_bounds_check
+
+----------------------------------------------------
+
+[
+ ["directive", "#assert"],
+ ["directive", "#no_bounds_check"]
+]
diff --git a/tests/languages/odin/operator_feature.test b/tests/languages/odin/operator_feature.test
index d67d03de4c..fd85d38a74 100644
--- a/tests/languages/odin/operator_feature.test
+++ b/tests/languages/odin/operator_feature.test
@@ -1,7 +1,5 @@
!
!=
-#
-$
%
%%
%%=
@@ -12,27 +10,19 @@ $
&=
&~
&~=
-(
-)
*
*=
+
++
+=
-,
-
--
----
-=
-->
-.
..
..<
..=
/
/=
-:
-;
<
<<
<<=
@@ -44,16 +34,11 @@ $
>>
>>=
?
-@
-[
-]
^
-{
|
|=
||
||=
-}
~
~=
@@ -62,8 +47,6 @@ $
[
["operator", "!"],
["operator", "!="],
- ["operator", "#"],
- ["operator", "$"],
["operator", "%"],
["operator", "%%"],
["operator", "%%="],
@@ -74,27 +57,19 @@ $
["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", "<<="],
@@ -106,16 +81,11 @@ $
["operator", ">>"],
["operator", ">>="],
["operator", "?"],
- ["operator", "@"],
- ["operator", "["],
- ["operator", "]"],
["operator", "^"],
- ["operator", "{"],
["operator", "|"],
["operator", "|="],
["operator", "||"],
["operator", "||="],
- ["operator", "}"],
["operator", "~"],
["operator", "~="]
]
diff --git a/tests/languages/odin/punctuation_feature.test b/tests/languages/odin/punctuation_feature.test
new file mode 100644
index 0000000000..473e951f63
--- /dev/null
+++ b/tests/languages/odin/punctuation_feature.test
@@ -0,0 +1,29 @@
+(
+)
+,
+->
+.
+:
+;
+@
+[
+]
+{
+}
+
+----------------------------------------------------
+
+[
+ ["punctuation", "("],
+ ["punctuation", ")"],
+ ["punctuation", ","],
+ ["operator", "-"], ["operator", ">"],
+ ["punctuation", "."],
+ ["punctuation", ":"],
+ ["punctuation", ";"],
+ ["punctuation", "@"],
+ ["punctuation", "["],
+ ["punctuation", "]"],
+ ["punctuation", "{"],
+ ["punctuation", "}"]
+]
diff --git a/tests/languages/odin/undefined_feature.test b/tests/languages/odin/undefined_feature.test
new file mode 100644
index 0000000000..5347143d3c
--- /dev/null
+++ b/tests/languages/odin/undefined_feature.test
@@ -0,0 +1,7 @@
+---
+
+----------------------------------------------------
+
+[
+ ["undefined", "---"]
+]
From babdd8c53ed37fe76fa94bd39ce3c3a638f983a5 Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Sat, 18 Dec 2021 06:16:41 +0300
Subject: [PATCH 10/16] Fix errors
---
components/prism-odin.js | 14 +++++++++++---
components/prism-odin.min.js | 2 +-
tests/languages/odin/operator_feature.test | 2 +-
tests/languages/odin/procedure_function.test | 11 +++++++++++
tests/languages/odin/punctuation_feature.test | 2 +-
5 files changed, 25 insertions(+), 6 deletions(-)
create mode 100644 tests/languages/odin/procedure_function.test
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 76b52583b5..204499c468 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -63,7 +63,10 @@
'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
- 'function': /\b\w+(?=[ \t]*\()/,
+ 'procedure': {
+ pattern: /\b\w+(?=[ \t]*\()/,
+ alias: 'function'
+ },
'constant-parameter-sign': {
pattern: /\$/,
@@ -75,8 +78,13 @@
alias: 'operator'
},
- 'operator': /\+\+|--|-(?!>)|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,
+ 'arrow': {
+ pattern: /->/,
+ alias: 'punctuation'
+ },
+
+ 'operator': /\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,
- 'punctuation': /->|[(),.:;@\[\]{}]/
+ 'punctuation': /[(),.:;@\[\]{}]/
};
}(Prism));
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index 82b5df7693..b02f21c4d9 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,function:/\b\w+(?=[ \t]*\()/,"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},operator:/\+\+|--|-(?!>)|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/->|[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
+!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,procedure:{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"},"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
diff --git a/tests/languages/odin/operator_feature.test b/tests/languages/odin/operator_feature.test
index fd85d38a74..86bc0d59d3 100644
--- a/tests/languages/odin/operator_feature.test
+++ b/tests/languages/odin/operator_feature.test
@@ -64,7 +64,7 @@
["operator", "+="],
["operator", "-"],
["operator", "--"],
- ["operator", "-"], ["operator", "="],
+ ["operator", "-="],
["operator", ".."],
["operator", "..<"],
["operator", "..="],
diff --git a/tests/languages/odin/procedure_function.test b/tests/languages/odin/procedure_function.test
new file mode 100644
index 0000000000..a8d8c9d5e1
--- /dev/null
+++ b/tests/languages/odin/procedure_function.test
@@ -0,0 +1,11 @@
+do_math()
+fibonacci()
+log10()
+
+----------------------------------------------------
+
+[
+ ["procedure", "do_math"], ["punctuation", "("], ["punctuation", ")"],
+ ["procedure", "fibonacci"], ["punctuation", "("], ["punctuation", ")"],
+ ["procedure", "log10"], ["punctuation", "("], ["punctuation", ")"]
+]
diff --git a/tests/languages/odin/punctuation_feature.test b/tests/languages/odin/punctuation_feature.test
index 473e951f63..8c4c80c104 100644
--- a/tests/languages/odin/punctuation_feature.test
+++ b/tests/languages/odin/punctuation_feature.test
@@ -17,7 +17,7 @@
["punctuation", "("],
["punctuation", ")"],
["punctuation", ","],
- ["operator", "-"], ["operator", ">"],
+ ["arrow", "->"],
["punctuation", "."],
["punctuation", ":"],
["punctuation", ";"],
From 7a292f2339bd4c42c2f8d97fbc020e7696812729 Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Mon, 20 Dec 2021 05:16:29 +0300
Subject: [PATCH 11/16] Make _ a discard variable
---
components/prism-odin.js | 7 ++++++-
components/prism-odin.min.js | 2 +-
tests/languages/odin/boolean_feature.test | 2 --
tests/languages/odin/discard_feature.test | 7 +++++++
4 files changed, 14 insertions(+), 4 deletions(-)
create mode 100644 tests/languages/odin/discard_feature.test
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 204499c468..31a1981437 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -59,7 +59,12 @@
'number': /(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,
- 'boolean': /\b(?:_|false|nil|true)\b/,
+ 'discard': {
+ pattern: /\b_\b/,
+ alias: 'keyword'
+ },
+
+ 'boolean': /\b(?:false|nil|true)\b/,
'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index b02f21c4d9..46c1e277f4 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,boolean:/\b(?:_|false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,procedure:{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"},"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
+!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,discard:{pattern:/\b_\b/,alias:"keyword"},boolean:/\b(?:false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,procedure:{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"},"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
diff --git a/tests/languages/odin/boolean_feature.test b/tests/languages/odin/boolean_feature.test
index 27c53f23a1..75b3f44ab3 100644
--- a/tests/languages/odin/boolean_feature.test
+++ b/tests/languages/odin/boolean_feature.test
@@ -1,4 +1,3 @@
-_
false
nil
true
@@ -6,7 +5,6 @@ true
----------------------------------------------------
[
- ["boolean", "_"],
["boolean", "false"],
["boolean", "nil"],
["boolean", "true"]
diff --git a/tests/languages/odin/discard_feature.test b/tests/languages/odin/discard_feature.test
new file mode 100644
index 0000000000..d8f6696171
--- /dev/null
+++ b/tests/languages/odin/discard_feature.test
@@ -0,0 +1,7 @@
+_
+
+----------------------------------------------------
+
+[
+ ["discard", "_"]
+]
From cd99873919d0c86058b6e9abc0eeb2d4d2fe67b6 Mon Sep 17 00:00:00 2001
From: edukisto <52005215+edukisto@users.noreply.github.com>
Date: Mon, 20 Dec 2021 07:23:29 +0300
Subject: [PATCH 12/16] Reimplement the searching for procedure names
---
components/prism-odin.js | 25 ++++++++++++++++----
components/prism-odin.min.js | 2 +-
tests/languages/odin/keyword_feature.test | 2 +-
tests/languages/odin/procedure_feature.test | 11 +++++++++
tests/languages/odin/procedure_function.test | 11 ---------
5 files changed, 34 insertions(+), 17 deletions(-)
create mode 100644 tests/languages/odin/procedure_feature.test
delete mode 100644 tests/languages/odin/procedure_function.test
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 31a1981437..56162ab206 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -64,15 +64,32 @@
alias: 'keyword'
},
- 'boolean': /\b(?:false|nil|true)\b/,
+ /**
+ * proc is defined below.
+ */
+ 'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
- 'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
+ /**
+ * false, nil, true can be used as procedure names. "_" and keywords can't.
+ */
+ 'procedure-name': [
+ {
+ pattern: /\b\w+(?=[ \t]*(?::[ \n\r\t]*){2}proc\b)/,
+ alias: 'function'
+ },
+ {
+ pattern: /\b\w+(?=[ \t]*\()/,
+ alias: 'function'
+ }
+ ],
'procedure': {
- pattern: /\b\w+(?=[ \t]*\()/,
- alias: 'function'
+ pattern: /\bproc\b/,
+ alias: 'keyword'
},
+ 'boolean': /\b(?:false|nil|true)\b/,
+
'constant-parameter-sign': {
pattern: /\$/,
alias: 'important'
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index 46c1e277f4..3c1f357152 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,discard:{pattern:/\b_\b/,alias:"keyword"},boolean:/\b(?:false|nil|true)\b/,keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,procedure:{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"},"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
+!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,discard:{pattern:/\b_\b/,alias:"keyword"},keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|return|struct|switch|transmute|typeid|union|using|when|where)\b/,"procedure-name":[{pattern:/\b\w+(?=[ \t]*(?::[ \n\r\t]*){2}proc\b)/,alias:"function"},{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"}],procedure:{pattern:/\bproc\b/,alias:"keyword"},boolean:/\b(?:false|nil|true)\b/,"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
diff --git a/tests/languages/odin/keyword_feature.test b/tests/languages/odin/keyword_feature.test
index c3380bec0b..92346c3e82 100644
--- a/tests/languages/odin/keyword_feature.test
+++ b/tests/languages/odin/keyword_feature.test
@@ -64,7 +64,7 @@ where
["keyword", "or_else"],
["keyword", "or_return"],
["keyword", "package"],
- ["keyword", "proc"],
+ ["procedure", "proc"],
["keyword", "return"],
["keyword", "struct"],
["keyword", "switch"],
diff --git a/tests/languages/odin/procedure_feature.test b/tests/languages/odin/procedure_feature.test
new file mode 100644
index 0000000000..44c0e4b3a5
--- /dev/null
+++ b/tests/languages/odin/procedure_feature.test
@@ -0,0 +1,11 @@
+do_math()
+fibonacci()
+log10()
+
+----------------------------------------------------
+
+[
+ ["procedure-name", "do_math"], ["punctuation", "("], ["punctuation", ")"],
+ ["procedure-name", "fibonacci"], ["punctuation", "("], ["punctuation", ")"],
+ ["procedure-name", "log10"], ["punctuation", "("], ["punctuation", ")"]
+]
diff --git a/tests/languages/odin/procedure_function.test b/tests/languages/odin/procedure_function.test
deleted file mode 100644
index a8d8c9d5e1..0000000000
--- a/tests/languages/odin/procedure_function.test
+++ /dev/null
@@ -1,11 +0,0 @@
-do_math()
-fibonacci()
-log10()
-
-----------------------------------------------------
-
-[
- ["procedure", "do_math"], ["punctuation", "("], ["punctuation", ")"],
- ["procedure", "fibonacci"], ["punctuation", "("], ["punctuation", ")"],
- ["procedure", "log10"], ["punctuation", "("], ["punctuation", ")"]
-]
From 95e8b9032c505505dfc6eaaa071d9901aeaf122b Mon Sep 17 00:00:00 2001
From: RunDevelopment
Date: Tue, 22 Mar 2022 13:23:37 +0100
Subject: [PATCH 13/16] Simplified proc matching
---
components/prism-odin.js | 27 +++++++--------------
tests/languages/odin/keyword_feature.test | 2 +-
tests/languages/odin/procedure_feature.test | 18 +++++++++++++-
3 files changed, 27 insertions(+), 20 deletions(-)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 56162ab206..45b186edb1 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -64,28 +64,19 @@
alias: 'keyword'
},
- /**
- * proc is defined below.
- */
- 'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
+ 'procedure-definition': {
+ pattern: /\b\w+(?=[ \t]*(?::\s*){2}proc\b)/,
+ alias: 'function'
+ },
+
+ 'keyword': /\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,
/**
* false, nil, true can be used as procedure names. "_" and keywords can't.
*/
- 'procedure-name': [
- {
- pattern: /\b\w+(?=[ \t]*(?::[ \n\r\t]*){2}proc\b)/,
- alias: 'function'
- },
- {
- pattern: /\b\w+(?=[ \t]*\()/,
- alias: 'function'
- }
- ],
-
- 'procedure': {
- pattern: /\bproc\b/,
- alias: 'keyword'
+ 'procedure-name': {
+ pattern: /\b\w+(?=[ \t]*\()/,
+ alias: 'function'
},
'boolean': /\b(?:false|nil|true)\b/,
diff --git a/tests/languages/odin/keyword_feature.test b/tests/languages/odin/keyword_feature.test
index 92346c3e82..c3380bec0b 100644
--- a/tests/languages/odin/keyword_feature.test
+++ b/tests/languages/odin/keyword_feature.test
@@ -64,7 +64,7 @@ where
["keyword", "or_else"],
["keyword", "or_return"],
["keyword", "package"],
- ["procedure", "proc"],
+ ["keyword", "proc"],
["keyword", "return"],
["keyword", "struct"],
["keyword", "switch"],
diff --git a/tests/languages/odin/procedure_feature.test b/tests/languages/odin/procedure_feature.test
index 44c0e4b3a5..93a59f1c7e 100644
--- a/tests/languages/odin/procedure_feature.test
+++ b/tests/languages/odin/procedure_feature.test
@@ -2,10 +2,26 @@ do_math()
fibonacci()
log10()
+cross :: proc(a, b: Vector3) -> Vector3
+
----------------------------------------------------
[
["procedure-name", "do_math"], ["punctuation", "("], ["punctuation", ")"],
["procedure-name", "fibonacci"], ["punctuation", "("], ["punctuation", ")"],
- ["procedure-name", "log10"], ["punctuation", "("], ["punctuation", ")"]
+ ["procedure-name", "log10"], ["punctuation", "("], ["punctuation", ")"],
+
+ ["procedure-definition", "cross"],
+ ["punctuation", ":"],
+ ["punctuation", ":"],
+ ["keyword", "proc"],
+ ["punctuation", "("],
+ "a",
+ ["punctuation", ","],
+ " b",
+ ["punctuation", ":"],
+ " Vector3",
+ ["punctuation", ")"],
+ ["arrow", "->"],
+ " Vector3"
]
From 9ee49f9a671b421aff489d29dcd5c95e886f6269 Mon Sep 17 00:00:00 2001
From: RunDevelopment
Date: Tue, 22 Mar 2022 13:24:12 +0100
Subject: [PATCH 14/16] Improved number pattern
---
components/prism-odin.js | 2 +-
.../languages/odin/not_a_number_feature.test | 26 +------------------
tests/languages/odin/operator_feature.test | 8 +++++-
3 files changed, 9 insertions(+), 27 deletions(-)
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 45b186edb1..7726674a6c 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -57,7 +57,7 @@
alias: 'property'
},
- 'number': /(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,
+ 'number': /\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.(?!\.)\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?(?!\w)/,
'discard': {
pattern: /\b_\b/,
diff --git a/tests/languages/odin/not_a_number_feature.test b/tests/languages/odin/not_a_number_feature.test
index 01124560b8..e05789eac0 100644
--- a/tests/languages/odin/not_a_number_feature.test
+++ b/tests/languages/odin/not_a_number_feature.test
@@ -27,29 +27,5 @@
----------------------------------------------------
[
- ["number", "0"], "B0\r\n",
- ["number", "0"], "D0\r\n",
- ["number", "0"], "I\r\n",
- ["number", "0"], "O0\r\n",
- ["number", "0"], "Z0\r\n",
- ["number", "0"], "b\r\n",
- ["number", "0"], "b2\r\n",
- ["number", "0"], "d\r\n",
- ["number", "0"], "h\r\n",
- ["number", "0"], "h0\r\n",
- ["number", "0"], "h00\r\n",
- ["number", "0"], "h000\r\n",
- ["number", "0"], "h00000\r\n",
- ["number", "0"], "h0000000\r\n",
- ["number", "0"], "h000000000\r\n",
- ["number", "0"], "h000000000000000\r\n",
- ["number", "0"], "h00000000000000000\r\n",
- ["number", "0"], "h_\r\n",
- ["number", "0"], "o\r\n",
- ["number", "0"], "o8\r\n",
- ["number", "0"], "x\r\n",
- ["number", "0"], "X0\r\n",
- ["number", "0"], "xG\r\n",
- ["number", "0"], "z\r\n",
- ["number", "0"], "zC"
+ "0B0\r\n0D0\r\n0I\r\n0O0\r\n0Z0\r\n0b\r\n0b2\r\n0d\r\n0h\r\n0h0\r\n0h00\r\n0h000\r\n0h00000\r\n0h0000000\r\n0h000000000\r\n0h000000000000000\r\n0h00000000000000000\r\n0h_\r\n0o\r\n0o8\r\n0x\r\n0X0\r\n0xG\r\n0z\r\n0zC"
]
diff --git a/tests/languages/odin/operator_feature.test b/tests/languages/odin/operator_feature.test
index 86bc0d59d3..fd4752a089 100644
--- a/tests/languages/odin/operator_feature.test
+++ b/tests/languages/odin/operator_feature.test
@@ -42,6 +42,9 @@
~
~=
+// ranges
+0..<10
+
----------------------------------------------------
[
@@ -87,5 +90,8 @@
["operator", "||"],
["operator", "||="],
["operator", "~"],
- ["operator", "~="]
+ ["operator", "~="],
+
+ ["comment", "// ranges"],
+ ["number", "0"], ["operator", "..<"], ["number", "10"]
]
From 9770e09fbb8bcbaed8088bd68f53615cd1c68c33 Mon Sep 17 00:00:00 2001
From: RunDevelopment
Date: Tue, 22 Mar 2022 13:25:25 +0100
Subject: [PATCH 15/16] Simplified escape handling
---
components/prism-odin.js | 14 +++---
.../odin/not_a_character_feature.test | 43 -------------------
2 files changed, 5 insertions(+), 52 deletions(-)
delete mode 100644 tests/languages/odin/not_a_character_feature.test
diff --git a/components/prism-odin.js b/components/prism-odin.js
index 7726674a6c..39e8d920be 100644
--- a/components/prism-odin.js
+++ b/components/prism-odin.js
@@ -1,9 +1,5 @@
(function (Prism) {
- var escapes = /\\(?:["'\\abefnrtv]|0[0-7]{2}|U[\dA-Fa-f]{6}|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2})/.source;
-
- function withEscapes(pattern, flags) {
- return RegExp(pattern.replace(//g, escapes), flags);
- }
+ var escapes = /\\(?:["'\\abefnrtv]|0[0-7]{2}|U[\dA-Fa-f]{6}|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2})/;
Prism.languages.odin = {
/**
@@ -31,10 +27,10 @@
* Should be found before strings because of '"'"- and '`'`-like sequences.
*/
'char': {
- pattern: withEscapes(/'(?:|[^\n\r'\\])'/.source),
+ pattern: /'(?:\\(?:.|[0Uux][0-9A-Fa-f]{1,6})|[^\n\r'\\])'/,
greedy: true,
inside: {
- 'symbol': withEscapes(//.source)
+ 'symbol': escapes
}
},
@@ -44,10 +40,10 @@
greedy: true
},
{
- pattern: withEscapes(/"(?:|[^\n\r"\\])*"/.source),
+ pattern: /"(?:\\.|[^\n\r"\\])*"/,
greedy: true,
inside: {
- 'symbol': withEscapes(//.source)
+ 'symbol': escapes
}
}
],
diff --git a/tests/languages/odin/not_a_character_feature.test b/tests/languages/odin/not_a_character_feature.test
deleted file mode 100644
index 3216f76093..0000000000
--- a/tests/languages/odin/not_a_character_feature.test
+++ /dev/null
@@ -1,43 +0,0 @@
-'
-'
-' '
-''
-'\'
-'\0'
-'\00'
-'\0000'
-'\008'
-'\u'
-'\u0'
-'\u00'
-'\u000'
-'\u00000'
-'\uF'
-'\uFF'
-'\uFFF'
-'\uFFFFF'
-'\uf'
-'\uff'
-'\ufff'
-'\ufffff'
-'\x'
-'\x0'
-'\x000'
-'\xF'
-'\xFFF'
-'\xf'
-'\xfff'
-
-----------------------------------------------------
-
-[
- "'\r\n'\r\n' '\r\n''\r\n'\\'\r\n'\\",
- ["number", "0"],
- "'\r\n'\\",
- ["number", "00"],
- "'\r\n'\\",
- ["number", "0000"],
- "'\r\n'\\",
- ["number", "008"],
- "'\r\n'\\u'\r\n'\\u0'\r\n'\\u00'\r\n'\\u000'\r\n'\\u00000'\r\n'\\uF'\r\n'\\uFF'\r\n'\\uFFF'\r\n'\\uFFFFF'\r\n'\\uf'\r\n'\\uff'\r\n'\\ufff'\r\n'\\ufffff'\r\n'\\x'\r\n'\\x0'\r\n'\\x000'\r\n'\\xF'\r\n'\\xFFF'\r\n'\\xf'\r\n'\\xfff'"
-]
From 9f52675662ab534809e0ea411aa46011d90889b3 Mon Sep 17 00:00:00 2001
From: RunDevelopment
Date: Tue, 22 Mar 2022 13:26:50 +0100
Subject: [PATCH 16/16] Rebuild
---
components/prism-odin.min.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/prism-odin.min.js b/components/prism-odin.min.js
index 3c1f357152..23618fbec4 100644
--- a/components/prism-odin.min.js
+++ b/components/prism-odin.min.js
@@ -1 +1 @@
-!function(e){function t(e,t){return RegExp(e.replace(//g,"\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})"),t)}e.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:t("'(?:|[^\n\r'\\\\])'"),greedy:!0,inside:{symbol:t("")}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:t('"(?:|[^\n\r"\\\\])*"'),greedy:!0,inside:{symbol:t("")}}],directive:{pattern:/#\w+/,alias:"property"},number:/(?:\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?)/,discard:{pattern:/\b_\b/,alias:"keyword"},keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|return|struct|switch|transmute|typeid|union|using|when|where)\b/,"procedure-name":[{pattern:/\b\w+(?=[ \t]*(?::[ \n\r\t]*){2}proc\b)/,alias:"function"},{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"}],procedure:{pattern:/\bproc\b/,alias:"keyword"},boolean:/\b(?:false|nil|true)\b/,"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}(Prism);
\ No newline at end of file
+!function(e){var t=/\\(?:["'\\abefnrtv]|0[0-7]{2}|U[\dA-Fa-f]{6}|u[\dA-Fa-f]{4}|x[\dA-Fa-f]{2})/;Prism.languages.odin={comment:[{pattern:/\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:\*(?!\/)|[^*])*(?:\*\/|$))*(?:\*\/|$)/,greedy:!0},{pattern:/#![^\n\r]*/,greedy:!0},{pattern:/\/\/[^\n\r]*/,greedy:!0}],char:{pattern:/'(?:\\(?:.|[0Uux][0-9A-Fa-f]{1,6})|[^\n\r'\\])'/,greedy:!0,inside:{symbol:t}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:/"(?:\\.|[^\n\r"\\])*"/,greedy:!0,inside:{symbol:t}}],directive:{pattern:/#\w+/,alias:"property"},number:/\b0(?:b[01_]+|d[\d_]+|h_*(?:(?:(?:[\dA-Fa-f]_*){8}){1,2}|(?:[\dA-Fa-f]_*){4})|o[0-7_]+|x[\dA-F_a-f]+|z[\dAB_ab]+)\b|(?:\b\d+(?:\.(?!\.)\d*)?|\B\.\d+)(?:[Ee][+-]?\d*)?[ijk]?(?!\w)/,discard:{pattern:/\b_\b/,alias:"keyword"},"procedure-definition":{pattern:/\b\w+(?=[ \t]*(?::\s*){2}proc\b)/,alias:"function"},keyword:/\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\b/,"procedure-name":{pattern:/\b\w+(?=[ \t]*\()/,alias:"function"},boolean:/\b(?:false|nil|true)\b/,"constant-parameter-sign":{pattern:/\$/,alias:"important"},undefined:{pattern:/---/,alias:"operator"},arrow:{pattern:/->/,alias:"punctuation"},operator:/\+\+|--|\.\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\[\]{}]/}}();
\ No newline at end of file