-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.js
More file actions
124 lines (106 loc) · 3.06 KB
/
parser.js
File metadata and controls
124 lines (106 loc) · 3.06 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* Parser Skript
* Permet d'appliquer des classes de coloration syntaxique au code
* Ecris par Uneo7
**/
let code = $('pre').html();
// Chaines entre guillemets
// Remplacement de tous les guillements par lur représentation HTML (evite les conflits plus tard)
code = code.replace(
/"/gim,
'"'
);
// Force les chaines entre guillement à rester grises
code = code.replace(/"(.*)"/gi, match => {
const split = match.split(/"/gi);
split.shift();
split.pop();
if (split.length === 1) {
return `<span class="gray">"${split[0].trim()}"</span>`;
}
match = '';
for (let i in split) {
if (i % 2 === 0) {
match += `<span class="gray">"${split[i].trim()}"</span>`;
continue;
}
match += ' ' + split[i].trim() + ' ';
}
return match;
});
// Fonctions
// Retour
code = code.replace(
/(function.*::\s{0,})(.*):/gim,
'$1<span class="blue">$2</span>:'
);
// Signature
code = code.replace(
/^function\s(\w{1,})(\(.*\))\s{0,}:/gim,
'function <span class="yellow">$1</span><span class="blue">$2</span>:'
);
// Conditions / Boucles
// While if else elseif
code = code.replace(
/(while|if|else|else if)/gi,
'<span class="orange">$1</span>'
);
// Boucles
code = code.replace(/(loop\s(.*)\stimes\s{0,}:)|(loop(.*)\s{0,}:)/gi, (match, p1, p2, p3, p4) => {
if (p1 === undefined && p2 === undefined) {
return `<span class="orange">loop</span><span class="green">${p4}</span>:`
}
if (p3 === undefined && p4 === undefined) {
return `<span class="orange">loop</span><span class="green">${p2}</span><span class="orange">times</span>:`
}
});
// Mot clef
// Tous les events qui ne comment pas par: on, command, function, options, variables
code = code.replace(
/^(?!on|command|function|options|variables|[\s]+)(.*):/gim,
'<span class="yellow">$1</span>:'
);
// Events on
code = code.replace(
/^(on)(.*)(:)/gim,
'$1<span class="yellow">$2</span>$3'
);
// on, command, function, options, variables
code = code.replace(
/^(on|command|function|variables|options)/gim,
'<span class="red">$1</span>'
);
// Modifiers
code = code.replace(
/(\sadd\s|\sgive\s|\sincrease\s|\sset\s|\sremove\s|\ssubstract\s|\sreduce\s|\sdelete\s|\sclear\s|\sreset\s|\sfrom\s|\sof\s|\swith\s|\sin\s|\sfor\s|\sby\s|\sto\s)/gi,
'<span class="dark-blue">$1</span>'
);
// Variables
// Globale
code = code.replace(
/({(?!_)\w{1,}})/gi,
'<span class="purple">$1</span>'
);
// Locale
code = code.replace(
/({_\w{1,}})/gi,
'<span class="dark-gray">$1</span>'
);
// Option
code = code.replace(
/({@\w{1,}})/gi,
'<span class="cyan">$1</span>'
);
// Comentaires
code = code.replace(/(#.*)/gi, (match, p1, p2) => {
const split = match.split(/</gi);
if(split.length === 1) return `<span class="dark-green">${match}</span>`;
let comment = [];
for(let i in split) {
let elem = split[i].replace(/^span\sclass=".*">/gi, '');
elem = elem.replace(/^\/span>/gi, '');
comment.push(elem.trim());
}
return `<span class="dark-green">${comment.join(' ')}</span>`;
});
$('pre').html(code);