-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsculp.js
41 lines (38 loc) · 1.32 KB
/
sculp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const { Expressions } = require('@dspacenet/sculp-parser');
/**
* Adds the required metadata for each procedure that is being executed en in
* the program
* @param {Expressions.Procedure} procedure
* @param {String} user
*/
function tagProcedures(procedure, { user }) {
switch (procedure.name) {
case 'vote':
procedure.params.list[0].value = `<pids|v|uid|${user}>${procedure.params.list[0].value}`;
procedure.pushParam(user);
break;
case 'signal':
procedure.params.list[0].value = `<pids|s|uid|${user}>${procedure.params.list[0].value}`;
break;
case 'post':
case 'notify':
case 'mail':
procedure.params.list[0].value = `<pids|p|uid|${user}>${procedure.params.list[0].value}`;
break;
// no default
}
}
/**
* Translate SCULP only expressions to SCCP
* @param {Expressions.Expression} expression
*/
function translateSCULP(expression) {
if (expression instanceof Expressions.MatchList) {
const pid = expression.list.pid ? expression.list.pid.pattern : '*';
const usr = expression.list.usr ? expression.list.usr.pattern : '*';
const txt = expression.list.txt ? expression.list.txt.pattern : '*';
return new Expressions.Pattern(`"<" . ${pid} . * . "|" . ${usr} . ">" . ${txt}`);
}
return expression;
}
module.exports = { tagProcedures, translateSCULP };