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

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components.json

Lines changed: 6 additions & 0 deletions
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

Lines changed: 70 additions & 0 deletions
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

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/prism-purebasic.html

Lines changed: 30 additions & 0 deletions
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

Lines changed: 2 additions & 0 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy