Skip to content

Commit

Permalink
Added support for Magma (CAS) (#3055)
Browse files Browse the repository at this point in the history
  • Loading branch information
RunDevelopment committed Sep 12, 2021
1 parent 23cd9b6 commit a1b67ce
Show file tree
Hide file tree
Showing 15 changed files with 387 additions and 2 deletions.
2 changes: 1 addition & 1 deletion components.js

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions components.json
Expand Up @@ -783,6 +783,10 @@
"title": "Lua",
"owner": "Golmote"
},
"magma": {
"title": "Magma (CAS)",
"owner": "RunDevelopment"
},
"makefile": {
"title": "Makefile",
"owner": "Golmote"
Expand Down
35 changes: 35 additions & 0 deletions components/prism-magma.js
@@ -0,0 +1,35 @@
Prism.languages.magma = {
'output': {
pattern: /^(>.*(?:\r(?:\n|(?!\n))|\n))(?!>)(?:.+|(?:\r(?:\n|(?!\n))|\n)(?!>).*)(?:(?:\r(?:\n|(?!\n))|\n)(?!>).*)*/m,
lookbehind: true,
greedy: true
},

'comment': {
pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
greedy: true
},
'string': {
pattern: /(^|[^\\"])"(?:[^\r\n\\"]|\\.)*"/,
lookbehind: true,
greedy: true
},

// http://magma.maths.usyd.edu.au/magma/handbook/text/82
'keyword': /\b(?:_|adj|and|assert|assert2|assert3|assigned|break|by|case|cat|catch|clear|cmpeq|cmpne|continue|declare|default|delete|diff|div|do|elif|else|end|eq|error|eval|exists|exit|for|forall|forward|fprintf|freeze|function|ge|gt|if|iload|import|in|intrinsic|is|join|le|load|local|lt|meet|mod|ne|not|notadj|notin|notsubset|or|print|printf|procedure|quit|random|read|readi|repeat|require|requirege|requirerange|restore|return|save|sdiff|select|subset|then|time|to|try|until|vprint|vprintf|vtime|when|where|while|xor)\b/,
'boolean': /\b(?:false|true)\b/,

'generator': {
pattern: /\b[a-z_]\w*(?=\s*<)/i,
alias: 'class-name'
},
'function': /\b[a-z_]\w*(?=\s*\()/i,

'number': {
pattern: /(^|[^\w.]|\.\.)(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?:_[a-z]?)?(?=$|[^\w.]|\.\.)/,
lookbehind: true
},

'operator': /->|[-+*/^~!|#=]|:=|\.\./,
'punctuation': /[()[\]{}<>,;.:]/
};
1 change: 1 addition & 0 deletions components/prism-magma.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions examples/prism-magma.html
@@ -0,0 +1,34 @@
<h2>Full example</h2>
<pre><code>// Source: http://magma.maths.usyd.edu.au/magma/handbook/text/115#963
> D := Denominator;
> N := Numerator;
> farey := function(n)
> f := [ RationalField() | 0, 1/n ];
> p := 0;
> q := 1;
> while p/q lt 1 do
> p := ( D(f[#f-1]) + n) div D(f[#f]) * N(f[#f]) - N(f[#f-1]);
> q := ( D(f[#f-1]) + n) div D(f[#f]) * D(f[#f]) - D(f[#f-1]);
> Append(~f, p/q);
> end while;
> return f;
> end function;
> function farey(n)
> if n eq 1 then
> return [RationalField() | 0, 1 ];
> else
> f := farey(n-1);
> i := 0;
> while i lt #f-1 do
> i +:= 1;
> if D(f[i]) + D(f[i+1]) eq n then
> Insert( ~f, i+1, (N(f[i]) + N(f[i+1]))/(D(f[i]) + D(f[i+1])));
> end if;
> end while;
> return f;
> end if;
> end function;
> farey := func&lt; n |
> Sort(Setseq({ a/b : a in { 0..n }, b in { 1..n } | a le b }))>;
> farey(6);
[ 0, 1/6, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 1 ]</code></pre>
1 change: 1 addition & 0 deletions plugins/show-language/prism-show-language.js
Expand Up @@ -137,6 +137,7 @@
"llvm": "LLVM IR",
"log": "Log file",
"lolcode": "LOLCODE",
"magma": "Magma (CAS)",
"md": "Markdown",
"markup-templating": "Markup templating",
"matlab": "MATLAB",
Expand Down
2 changes: 1 addition & 1 deletion plugins/show-language/prism-show-language.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions tests/languages/magma/boolean_feature.test
@@ -0,0 +1,9 @@
true
false

----------------------------------------------------

[
["boolean", "true"],
["boolean", "false"]
]
13 changes: 13 additions & 0 deletions tests/languages/magma/comment_feature.test
@@ -0,0 +1,13 @@
// comment

/*
comment
*/

----------------------------------------------------

[
["comment", "// comment"],

["comment", "/*\r\n comment\r\n */"]
]
36 changes: 36 additions & 0 deletions tests/languages/magma/generator_feature.test
@@ -0,0 +1,36 @@
G<a, b> := Group<a, b | a^2 = b^3 = a^b*b^2>;

----------------------------------------------------

[
["generator", "G"],
["punctuation", "<"],
"a",
["punctuation", ","],
" b",
["punctuation", ">"],
["operator", ":="],
["generator", "Group"],
["punctuation", "<"],
"a",
["punctuation", ","],
" b ",
["operator", "|"],
" a",
["operator", "^"],
["number", "2"],
["operator", "="],
" b",
["operator", "^"],
["number", "3"],
["operator", "="],
" a",
["operator", "^"],
"b",
["operator", "*"],
"b",
["operator", "^"],
["number", "2"],
["punctuation", ">"],
["punctuation", ";"]
]
177 changes: 177 additions & 0 deletions tests/languages/magma/keyword_feature.test
@@ -0,0 +1,177 @@
_;
adj;
and;
assert;
assert2;
assert3;
assigned;
break;
by;
case;
cat;
catch;
clear;
cmpeq;
cmpne;
continue;
declare;
default;
delete;
diff;
div;
do;
elif;
else;
end;
eq;
error;
eval;
exists;
exit;
for;
forall;
forward;
fprintf;
freeze;
function;
ge;
gt;
if;
iload;
import;
in;
intrinsic;
is;
join;
le;
load;
local;
lt;
meet;
mod;
ne;
not;
notadj;
notin;
notsubset;
or;
print;
printf;
procedure;
quit;
random;
read;
readi;
repeat;
require;
requirege;
requirerange;
restore;
return;
save;
sdiff;
select;
subset;
then;
time;
to;
try;
until;
vprint;
vprintf;
vtime;
when;
where;
while;
xor;

----------------------------------------------------

[
["keyword", "_"], ["punctuation", ";"],
["keyword", "adj"], ["punctuation", ";"],
["keyword", "and"], ["punctuation", ";"],
["keyword", "assert"], ["punctuation", ";"],
["keyword", "assert2"], ["punctuation", ";"],
["keyword", "assert3"], ["punctuation", ";"],
["keyword", "assigned"], ["punctuation", ";"],
["keyword", "break"], ["punctuation", ";"],
["keyword", "by"], ["punctuation", ";"],
["keyword", "case"], ["punctuation", ";"],
["keyword", "cat"], ["punctuation", ";"],
["keyword", "catch"], ["punctuation", ";"],
["keyword", "clear"], ["punctuation", ";"],
["keyword", "cmpeq"], ["punctuation", ";"],
["keyword", "cmpne"], ["punctuation", ";"],
["keyword", "continue"], ["punctuation", ";"],
["keyword", "declare"], ["punctuation", ";"],
["keyword", "default"], ["punctuation", ";"],
["keyword", "delete"], ["punctuation", ";"],
["keyword", "diff"], ["punctuation", ";"],
["keyword", "div"], ["punctuation", ";"],
["keyword", "do"], ["punctuation", ";"],
["keyword", "elif"], ["punctuation", ";"],
["keyword", "else"], ["punctuation", ";"],
["keyword", "end"], ["punctuation", ";"],
["keyword", "eq"], ["punctuation", ";"],
["keyword", "error"], ["punctuation", ";"],
["keyword", "eval"], ["punctuation", ";"],
["keyword", "exists"], ["punctuation", ";"],
["keyword", "exit"], ["punctuation", ";"],
["keyword", "for"], ["punctuation", ";"],
["keyword", "forall"], ["punctuation", ";"],
["keyword", "forward"], ["punctuation", ";"],
["keyword", "fprintf"], ["punctuation", ";"],
["keyword", "freeze"], ["punctuation", ";"],
["keyword", "function"], ["punctuation", ";"],
["keyword", "ge"], ["punctuation", ";"],
["keyword", "gt"], ["punctuation", ";"],
["keyword", "if"], ["punctuation", ";"],
["keyword", "iload"], ["punctuation", ";"],
["keyword", "import"], ["punctuation", ";"],
["keyword", "in"], ["punctuation", ";"],
["keyword", "intrinsic"], ["punctuation", ";"],
["keyword", "is"], ["punctuation", ";"],
["keyword", "join"], ["punctuation", ";"],
["keyword", "le"], ["punctuation", ";"],
["keyword", "load"], ["punctuation", ";"],
["keyword", "local"], ["punctuation", ";"],
["keyword", "lt"], ["punctuation", ";"],
["keyword", "meet"], ["punctuation", ";"],
["keyword", "mod"], ["punctuation", ";"],
["keyword", "ne"], ["punctuation", ";"],
["keyword", "not"], ["punctuation", ";"],
["keyword", "notadj"], ["punctuation", ";"],
["keyword", "notin"], ["punctuation", ";"],
["keyword", "notsubset"], ["punctuation", ";"],
["keyword", "or"], ["punctuation", ";"],
["keyword", "print"], ["punctuation", ";"],
["keyword", "printf"], ["punctuation", ";"],
["keyword", "procedure"], ["punctuation", ";"],
["keyword", "quit"], ["punctuation", ";"],
["keyword", "random"], ["punctuation", ";"],
["keyword", "read"], ["punctuation", ";"],
["keyword", "readi"], ["punctuation", ";"],
["keyword", "repeat"], ["punctuation", ";"],
["keyword", "require"], ["punctuation", ";"],
["keyword", "requirege"], ["punctuation", ";"],
["keyword", "requirerange"], ["punctuation", ";"],
["keyword", "restore"], ["punctuation", ";"],
["keyword", "return"], ["punctuation", ";"],
["keyword", "save"], ["punctuation", ";"],
["keyword", "sdiff"], ["punctuation", ";"],
["keyword", "select"], ["punctuation", ";"],
["keyword", "subset"], ["punctuation", ";"],
["keyword", "then"], ["punctuation", ";"],
["keyword", "time"], ["punctuation", ";"],
["keyword", "to"], ["punctuation", ";"],
["keyword", "try"], ["punctuation", ";"],
["keyword", "until"], ["punctuation", ";"],
["keyword", "vprint"], ["punctuation", ";"],
["keyword", "vprintf"], ["punctuation", ";"],
["keyword", "vtime"], ["punctuation", ";"],
["keyword", "when"], ["punctuation", ";"],
["keyword", "where"], ["punctuation", ";"],
["keyword", "while"], ["punctuation", ";"],
["keyword", "xor"], ["punctuation", ";"]
]
17 changes: 17 additions & 0 deletions tests/languages/magma/number_feature.test
@@ -0,0 +1,17 @@
123
-123

1.234

0..100

----------------------------------------------------

[
["number", "123"],
["operator", "-"], ["number", "123"],

["number", "1.234"],

["number", "0"], ["operator", ".."], ["number", "100"]
]
25 changes: 25 additions & 0 deletions tests/languages/magma/operator_feature.test
@@ -0,0 +1,25 @@
+ - * / ^ ~ !
=
:= -> ..
| #

----------------------------------------------------

[
["operator", "+"],
["operator", "-"],
["operator", "*"],
["operator", "/"],
["operator", "^"],
["operator", "~"],
["operator", "!"],

["operator", "="],

["operator", ":="],
["operator", "->"],
["operator", ".."],

["operator", "|"],
["operator", "#"]
]

0 comments on commit a1b67ce

Please sign in to comment.