Skip to content

Commit dea7183

Browse files
committed
provisionally implement Novox syntax highlighting engine
1 parent 6079560 commit dea7183

10 files changed

+401
-97
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
__pycache__/

resources/Nova/novox/code.txt

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<sup ver="6" sty="utinax-vis" ind=3>
2+
\\
3+
DISCLAIMER –
4+
This code is only a peek at what supcode can do.
5+
It is not by any means functional, optimised or perfect.
6+
Enjoy ^v^
7+
\\
8+
9+
<sec 'structs'>
10+
create struct 'profile' {
11+
\\
12+
Represents a user profile.
13+
\\
14+
15+
evolve action create self(ctx) [
16+
| int 'id'
17+
| str 'user', 'name'
18+
| str, list(str) 'alts' = none
19+
| list(str) 'langs' = list()
20+
| list(str) 'apts' = list()
21+
| (par)s 'pars'
22+
] {
23+
\\
24+
Creates a new profile.
25+
\\
26+
27+
auto set id, name, alt-name, langs, apts
28+
29+
set self.'render-keywords' = dict(
30+
"id" = "User ID",
31+
"name" = "Username",
32+
"alts" = "Alternative Usernames",
33+
"langs" = "Programming Languages",
34+
"apts" = "Aptitudes",
35+
)
36+
37+
loop for key, val in pars {
38+
set self.(shard(key)) = val
39+
}
40+
}
41+
42+
create func self.render-text() to str {
43+
set 'text' = "Profile[" + "\n"
44+
45+
loop for 'var' in self._vars_ {
46+
if var in self.render-keywords {
47+
alt text + "`render-keywords # var`: "
48+
} else {
49+
alt text + str(var) + ": "
50+
}
51+
52+
alt text + { if var is iterable then {
53+
str.join(
54+
{ for each in var out str(each) }
55+
) [sep = ", "]
56+
} else str(var) }
57+
}
58+
59+
out text
60+
}
61+
}
62+
</sec>
63+
64+
<sec "core">
65+
evolve sys.run(ctx) [(par)s]
66+
{
67+
set 'sup' = profile() [
68+
| id = 2.0
69+
| name = "Sup#2.0"
70+
| alt-name = "Sup2point0"
71+
| langs = "supcode", "Scratch", "Python", "C#", "HTML", "CSS", "JavaScript",
72+
| apts = (
73+
"creating", "designing", "coding", "procrastinating",
74+
)
75+
]
76+
77+
sys.out(sup.render-text())
78+
sys.in()
79+
sys.quit()
80+
}
81+
</sec>
82+
83+
\ how’d you like that?
84+
</sup>

resources/Nova/novox/colours.json

+38-36
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
11
{
2-
"comment": "grey.nova",
3-
"comment.single": "grey.nova",
4-
"comment.double": "grey.nova",
5-
"comment.triple": "grey.nova",
6-
"comment.single.bounded": "grey.nova",
7-
"comment.double.bounded": "grey.nova",
8-
"comment.triple.bounded": "grey.nova",
9-
"keyword": "blue.nova",
10-
"action": "blue.nova", // TODO
11-
"logic": "orange.solar",
12-
"function": "pink.electric",
13-
"struct": "lilac.nova",
14-
"shard": "#fff", // TODO
15-
"string": "#fff", // TODO
16-
"number": "blue.crescent",
17-
"bool": "lilac.crescent",
18-
"none": "lilac.crescent",
19-
"class": "lilac.nova", // TODO
20-
"object": "#fff",
21-
"object.constant": "#fff", // TODO
22-
"object.ephemeral": ["#fff", "italic"], // TODO
23-
"object.argument": "pink.spirit",
24-
"object.parameter": "pink.spirit",
25-
"object.special": ["lilac.crescent", "italic"],
26-
"extension": "teal.electric",
27-
"ixtension": "teal.electric",
28-
"particle": "#fff", // TODO
29-
"secator": "purple.spirit",
30-
"operator": "orange.solar",
31-
"dot": "grey.nova",
32-
"colon": "orange.spirit",
33-
"semicolon": "blue.deep",
34-
"pipe": "#fff",
35-
"bracket.round": "#fff",
36-
"bracket.square": "#fff",
37-
"brace": "#fff",
2+
"blue-nova": "#4090f1",
3+
"blue-crescent": "#c0f0ff",
4+
"blue-spirit": "#70c7ff",
5+
"blue-sky": "#45c7f1",
6+
"blue-ocean": "#2070c1",
7+
"blue-deep": "#145090",
8+
"blue-electric": "#40e0ff",
9+
"blue-accent": "#0064f1",
10+
"blue-midnight": "#00172a",
11+
"grey-nova": "#a9b0b8",
12+
"grey-swallow": "#dfe7f1",
13+
"grey-spirit": "#c7d0d9",
14+
"grey-ocean": "#90969e",
15+
"grey-storm": "#70767c",
16+
"lilac-nova": "#9090f1",
17+
"lilac-crescent": "#c7c7ff",
18+
"pink-electric": "#ff0090",
19+
"pink-spirit": "#f190f1",
20+
"purple-spirit": "#9040f1",
21+
"purple-nova": "#6040f1",
22+
"purple-accent": "#7000ff",
23+
"red-nova": "#ff0040",
24+
"red-spirit": "#ff2000",
25+
"red-crescent": "#ffc0a9",
26+
"orange-spirit": "#ff7000",
27+
"orange-solar": "#ff9020",
28+
"yellow-solar": "#ffa920",
29+
"yellow-nova": "#ffc720",
30+
"mellow-crescent": "#fff0c0",
31+
"green-solar": "#70c720",
32+
"green-spirit": "#40c740",
33+
"green-nova": "#00c745",
34+
"aquamarine-accent": "#33c070",
35+
"teal-electric": "#40f190",
36+
"teal-lightning": "#c1fff1",
37+
"teal-spirit": "#60c7c7",
38+
"teal-nova": "#409090"
3839
}
40+

resources/Nova/novox/export.html

+180
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title> supcode Render </title>
5+
<meta charset="utf-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<link rel="stylesheet" href="style.css">
8+
</head>
9+
<body>
10+
<p><pre><span class="operator">&lt;</span>sup ver<span class="operator">=</span>"6" sty<span class="operator">=</span>"utinax-vis" ind<span class="operator">=</span>3<span class="operator">&gt;</span>
11+
12+
\\
13+
14+
DISCLAIMER –
15+
16+
This code <span class="logic">is</span> only a peek at what supcode can do.
17+
18+
It <span class="logic">is</span> <span class="logic">not</span> by any means functional, optimised <span class="logic">or</span> perfect.
19+
20+
Enjoy <span class="operator">^</span>v<span class="operator">^</span>
21+
22+
\\
23+
24+
25+
26+
<span class="operator">&lt;</span>sec 'structs'<span class="operator">&gt;</span>
27+
28+
<span class="action">create</span> <span class="struct">struct</span> 'profile' {
29+
30+
\\
31+
32+
Represents a user profile.
33+
34+
\\
35+
36+
37+
38+
<span class="action">evolve</span> <span class="struct">action</span> <span class="action">create</span> self(ctx) [
39+
40+
| <span class="struct">int</span> 'id'
41+
42+
| <span class="struct">str</span> 'user', 'name'
43+
44+
| <span class="struct">str</span>, <span class="struct">list</span>(<span class="struct">str</span>) 'alts' <span class="operator">=</span> none
45+
46+
| <span class="struct">list</span>(<span class="struct">str</span>) 'langs' <span class="operator">=</span> <span class="struct">list</span>()
47+
48+
| <span class="struct">list</span>(<span class="struct">str</span>) 'apts' <span class="operator">=</span> <span class="struct">list</span>()
49+
50+
| (par)s 'pars'
51+
52+
] {
53+
54+
\\
55+
56+
Creates a new profile.
57+
58+
\\
59+
60+
61+
62+
<span class="keyword">auto</span> <span class="action">set</span> id, name, <span class="action">alt</span>-name, langs, apts
63+
64+
65+
66+
<span class="action">set</span> self.'render-keywords' <span class="operator">=</span> <span class="struct">dict</span>(
67+
68+
"id" <span class="operator">=</span> "User ID",
69+
70+
"name" <span class="operator">=</span> "Username",
71+
72+
"alts" <span class="operator">=</span> "Alternative Usernames",
73+
74+
"langs" <span class="operator">=</span> "Programming Languages",
75+
76+
"apts" <span class="operator">=</span> "Aptitudes",
77+
78+
)
79+
80+
81+
82+
<span class="action">loop</span> for key, val <span class="logic">in</span> pars {
83+
84+
<span class="action">set</span> self.(shard(key)) <span class="operator">=</span> val
85+
86+
}
87+
88+
}
89+
90+
91+
92+
<span class="action">create</span> <span class="struct">func</span> self.render-text() <span class="action">to</span> <span class="struct">str</span> {
93+
94+
<span class="action">set</span> 'text' <span class="operator">=</span> "Profile[" <span class="operator">+</span> "\n"
95+
96+
97+
98+
<span class="action">loop</span> for 'var' <span class="logic">in</span> self._vars_ {
99+
100+
<span class="keyword">if</span> var <span class="logic">in</span> self.render-keywords {
101+
102+
<span class="action">alt</span> text <span class="operator">+</span> "`render-keywords <span class="operator">#</span> var`: "
103+
104+
} <span class="keyword">else</span> {
105+
106+
<span class="action">alt</span> text <span class="operator">+</span> <span class="struct">str</span>(var) <span class="operator">+</span> ": "
107+
108+
}
109+
110+
111+
112+
<span class="action">alt</span> text <span class="operator">+</span> { <span class="keyword">if</span> var <span class="logic">is</span> iterable then {
113+
114+
<span class="struct">str</span>.join(
115+
116+
{ for each <span class="logic">in</span> var <span class="action">out</span> <span class="struct">str</span>(each) }
117+
118+
) [sep <span class="operator">=</span> ", "]
119+
120+
} <span class="keyword">else</span> <span class="struct">str</span>(var) }
121+
122+
}
123+
124+
125+
126+
<span class="action">out</span> text
127+
128+
}
129+
130+
}
131+
132+
<span class="operator">&lt;</span><span class="operator">/</span>sec<span class="operator">&gt;</span>
133+
134+
135+
136+
<span class="operator">&lt;</span>sec "core"<span class="operator">&gt;</span>
137+
138+
<span class="action">evolve</span> sys.run(ctx) [(par)s]
139+
140+
{
141+
142+
<span class="action">set</span> 'sup' <span class="operator">=</span> profile() [
143+
144+
| id <span class="operator">=</span> 2.0
145+
146+
| name <span class="operator">=</span> "Sup<span class="operator">#</span>2.0"
147+
148+
| <span class="action">alt</span>-name <span class="operator">=</span> "Sup2point0"
149+
150+
| langs <span class="operator">=</span> "supcode", "Scratch", "Python", "C<span class="operator">#</span>", "HTML", "CSS", "JavaScript",
151+
152+
| apts <span class="operator">=</span> (
153+
154+
"creating", "designing", "coding", "procrastinating",
155+
156+
)
157+
158+
]
159+
160+
161+
162+
sys.<span class="action">out</span>(sup.render-text())
163+
164+
sys.<span class="logic">in</span>()
165+
166+
sys.quit()
167+
168+
}
169+
170+
<span class="operator">&lt;</span><span class="operator">/</span>sec<span class="operator">&gt;</span>
171+
172+
173+
174+
\ how’d you like that?
175+
176+
<span class="operator">&lt;</span><span class="operator">/</span>sup<span class="operator">&gt;</span>
177+
178+
</pre></p>
179+
</body>
180+
</html>

0 commit comments

Comments
 (0)