Skip to content

Commit d0c1c70

Browse files
authored
Added support for PureBasic (#2369)
A language based on Basic (BlitzBasic to be precise) with inline assembler also and direct API calls. Can compile on Windows, Linux, and macOS
1 parent 0d65d6c commit d0c1c70

14 files changed

+392
-3
lines changed

components.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components.json

+6
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,12 @@
848848
],
849849
"owner": "Golmote"
850850
},
851+
"purebasic": {
852+
"title": "PureBasic",
853+
"require": "clike",
854+
"alias": "pbfasm",
855+
"owner": "HeX0R101"
856+
},
851857
"python": {
852858
"title": "Python",
853859
"alias": "py",

components/prism-purebasic.js

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
Original Code by Bas Groothedde
3+
!!MANY THANKS!! I never would have made this, regex and me will never be best friends ;)
4+
==> https://codepen.io/ImagineProgramming/details/JYydBy/
5+
slightly changed to pass all tests
6+
*/
7+
8+
9+
// PureBasic support, steal stuff from ansi-c
10+
Prism.languages.purebasic = Prism.languages.extend('clike', {
11+
'comment': /;.*/,
12+
'keyword': /\b(?:declarecdll|declaredll|compilerselect|compilercase|compilerdefault|compilerendselect|compilererror|enableexplicit|disableexplicit|not|and|or|xor|calldebugger|debuglevel|enabledebugger|disabledebugger|restore|read|includepath|includebinary|threaded|runtime|with|endwith|structureunion|endstructureunion|align|newlist|newmap|interface|endinterface|extends|enumeration|endenumeration|swap|foreach|continue|fakereturn|goto|gosub|return|break|module|endmodule|declaremodule|enddeclaremodule|declare|declarec|prototype|prototypec|enableasm|disableasm|dim|redim|data|datasection|enddatasection|to|procedurereturn|debug|default|case|select|endselect|as|import|endimport|importc|compilerif|compilerelse|compilerendif|compilerelseif|end|structure|endstructure|while|wend|for|next|step|if|else|elseif|endif|repeat|until|procedure|proceduredll|procedurec|procedurecdll|endprocedure|protected|shared|static|global|define|includefile|xincludefile|macro|endmacro)\b/i,
13+
'function': /\b\w+(?:\.\w+)?\s*(?=\()/,
14+
'number': /(?:\$[\da-f]+|\b-?\d*\.?\d+(?:e[+-]?\d+)?)\b/i,
15+
'operator': /(?:@\*?|\?|\*)\w+|-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*/@]/
16+
});
17+
18+
Prism.languages.insertBefore('purebasic', 'keyword', {
19+
'tag': /#\w+/,
20+
'asm': {
21+
pattern: /(^\s*)!.*/m,
22+
lookbehind: true,
23+
alias: 'tag',
24+
inside: {
25+
'comment': /;.*/,
26+
'string': {
27+
pattern: /(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,
28+
greedy: true
29+
},
30+
// Anonymous label references, i.e.: jmp @b
31+
'label-reference-anonymous': {
32+
pattern: /(\s*!\s*j[a-z]+\s+)@[fb]/i,
33+
lookbehind: true,
34+
alias: 'fasm-label'
35+
},
36+
// Named label reference, i.e.: jne label1
37+
'label-reference-addressed': {
38+
pattern: /(\s*!\s*j[a-z]+\s+)[A-Z._?$@][\w.?$@~#]*/i,
39+
lookbehind: true,
40+
alias: 'fasm-label'
41+
},
42+
'function': {
43+
pattern: /^(\s*!\s*)[\da-z]+(?=\s|$)/im,
44+
lookbehind: true
45+
},
46+
'function-inline': {
47+
pattern: /(\s*:\s*)[\da-z]+(?=\s)/i,
48+
lookbehind: true,
49+
alias: 'function'
50+
},
51+
'label': {
52+
pattern: /^(\s*!\s*)[A-Za-z._?$@][\w.?$@~#]*(?=:)/m,
53+
lookbehind: true,
54+
alias: 'fasm-label'
55+
},
56+
'keyword': [
57+
/(?:extern|extern|global)[^;\r\n]*/i,
58+
/(?:CPU|FLOAT|DEFAULT).*/
59+
],
60+
'register': /\b(?:st\d|[xyz]mm\d\d?|[cdt]r\d|r\d\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|sp|si|di)|[cdefgs]s|mm\d+)\b/i,
61+
'number': /(?:\b|-|(?=\$))(?:0[hx][\da-f]*\.?[\da-f]+(?:p[+-]?\d+)?|\d[\da-f]+[hx]|\$\d[\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\d+|\d*\.?\d+(?:\.?e[+-]?\d+)?[dt]?)\b/i,
62+
'operator': /[\[\]*+\-/%<>=&|$!,.:]/
63+
}
64+
}
65+
});
66+
67+
delete Prism.languages.purebasic['class-name'];
68+
delete Prism.languages.purebasic['boolean'];
69+
70+
Prism.languages.pbfasm = Prism.languages['purebasic'];

components/prism-purebasic.min.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/prism-purebasic.html

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<p>Note: PureBasic Examples.</p>
2+
3+
<h2>Comments</h2>
4+
<pre><code>; This is a comment</code></pre>
5+
6+
<h2>Strings</h2>
7+
<pre><code>"This a string."</code></pre>
8+
9+
<h2>Numbers</h2>
10+
<pre><code>42
11+
3.14159
12+
-42
13+
-3.14159
14+
.5
15+
10.
16+
2E10
17+
4.2E-14
18+
-3E+2</code></pre>
19+
20+
<h2>PureBasic example</h2>
21+
<pre><code>Procedure.s Test(s.s)
22+
Protected a$, b$, Result.s
23+
24+
Result = Mid(s, 1, 3)
25+
26+
ProcedureReturn Result
27+
EndProcedure
28+
29+
Test()
30+
End</code></pre>

plugins/autoloader/prism-autoloader.js

+2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
"markup",
9797
"javascript"
9898
],
99+
"purebasic": "clike",
99100
"qml": "javascript",
100101
"qore": "clike",
101102
"racket": "scheme",
@@ -182,6 +183,7 @@
182183
"pcode": "peoplecode",
183184
"pq": "powerquery",
184185
"mscript": "powerquery",
186+
"pbfasm": "purebasic",
185187
"py": "python",
186188
"rkt": "racket",
187189
"robot": "robotframework",

plugins/autoloader/prism-autoloader.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/show-language/prism-show-language.js

+2
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@
134134
"powershell": "PowerShell",
135135
"properties": ".properties",
136136
"protobuf": "Protocol Buffers",
137+
"purebasic": "PureBasic",
138+
"pbfasm": "PureBasic",
137139
"py": "Python",
138140
"q": "Q (kdb+ database)",
139141
"qml": "QML",

0 commit comments

Comments
 (0)