]> luflow.net public git repositories - flow-web.git/blob - static/highlight/languages/basic.js
Initial commit.
[flow-web.git] / static / highlight / languages / basic.js
1 /*! `basic` grammar compiled for Highlight.js 11.11.1 */
2 (function(){
3 var hljsGrammar = (function () {
4 'use strict';
5
6 /*
7 Language: BASIC
8 Author: Raphaël Assénat <raph@raphnet.net>
9 Description: Based on the BASIC reference from the Tandy 1000 guide
10 Website: https://en.wikipedia.org/wiki/Tandy_1000
11 Category: system
12 */
13
14 /** @type LanguageFn */
15 function basic(hljs) {
16 const KEYWORDS = [
17 "ABS",
18 "ASC",
19 "AND",
20 "ATN",
21 "AUTO|0",
22 "BEEP",
23 "BLOAD|10",
24 "BSAVE|10",
25 "CALL",
26 "CALLS",
27 "CDBL",
28 "CHAIN",
29 "CHDIR",
30 "CHR$|10",
31 "CINT",
32 "CIRCLE",
33 "CLEAR",
34 "CLOSE",
35 "CLS",
36 "COLOR",
37 "COM",
38 "COMMON",
39 "CONT",
40 "COS",
41 "CSNG",
42 "CSRLIN",
43 "CVD",
44 "CVI",
45 "CVS",
46 "DATA",
47 "DATE$",
48 "DEFDBL",
49 "DEFINT",
50 "DEFSNG",
51 "DEFSTR",
52 "DEF|0",
53 "SEG",
54 "USR",
55 "DELETE",
56 "DIM",
57 "DRAW",
58 "EDIT",
59 "END",
60 "ENVIRON",
61 "ENVIRON$",
62 "EOF",
63 "EQV",
64 "ERASE",
65 "ERDEV",
66 "ERDEV$",
67 "ERL",
68 "ERR",
69 "ERROR",
70 "EXP",
71 "FIELD",
72 "FILES",
73 "FIX",
74 "FOR|0",
75 "FRE",
76 "GET",
77 "GOSUB|10",
78 "GOTO",
79 "HEX$",
80 "IF",
81 "THEN",
82 "ELSE|0",
83 "INKEY$",
84 "INP",
85 "INPUT",
86 "INPUT#",
87 "INPUT$",
88 "INSTR",
89 "IMP",
90 "INT",
91 "IOCTL",
92 "IOCTL$",
93 "KEY",
94 "ON",
95 "OFF",
96 "LIST",
97 "KILL",
98 "LEFT$",
99 "LEN",
100 "LET",
101 "LINE",
102 "LLIST",
103 "LOAD",
104 "LOC",
105 "LOCATE",
106 "LOF",
107 "LOG",
108 "LPRINT",
109 "USING",
110 "LSET",
111 "MERGE",
112 "MID$",
113 "MKDIR",
114 "MKD$",
115 "MKI$",
116 "MKS$",
117 "MOD",
118 "NAME",
119 "NEW",
120 "NEXT",
121 "NOISE",
122 "NOT",
123 "OCT$",
124 "ON",
125 "OR",
126 "PEN",
127 "PLAY",
128 "STRIG",
129 "OPEN",
130 "OPTION",
131 "BASE",
132 "OUT",
133 "PAINT",
134 "PALETTE",
135 "PCOPY",
136 "PEEK",
137 "PMAP",
138 "POINT",
139 "POKE",
140 "POS",
141 "PRINT",
142 "PRINT]",
143 "PSET",
144 "PRESET",
145 "PUT",
146 "RANDOMIZE",
147 "READ",
148 "REM",
149 "RENUM",
150 "RESET|0",
151 "RESTORE",
152 "RESUME",
153 "RETURN|0",
154 "RIGHT$",
155 "RMDIR",
156 "RND",
157 "RSET",
158 "RUN",
159 "SAVE",
160 "SCREEN",
161 "SGN",
162 "SHELL",
163 "SIN",
164 "SOUND",
165 "SPACE$",
166 "SPC",
167 "SQR",
168 "STEP",
169 "STICK",
170 "STOP",
171 "STR$",
172 "STRING$",
173 "SWAP",
174 "SYSTEM",
175 "TAB",
176 "TAN",
177 "TIME$",
178 "TIMER",
179 "TROFF",
180 "TRON",
181 "TO",
182 "USR",
183 "VAL",
184 "VARPTR",
185 "VARPTR$",
186 "VIEW",
187 "WAIT",
188 "WHILE",
189 "WEND",
190 "WIDTH",
191 "WINDOW",
192 "WRITE",
193 "XOR"
194 ];
195
196 return {
197 name: 'BASIC',
198 case_insensitive: true,
199 illegal: '^\.',
200 // Support explicitly typed variables that end with $%! or #.
201 keywords: {
202 $pattern: '[a-zA-Z][a-zA-Z0-9_$%!#]*',
203 keyword: KEYWORDS
204 },
205 contains: [
206 {
207 // Match strings that start with " and end with " or a line break
208 scope: 'string',
209 begin: /"/,
210 end: /"|$/,
211 contains: [ hljs.BACKSLASH_ESCAPE ]
212 },
213 hljs.COMMENT('REM', '$', { relevance: 10 }),
214 hljs.COMMENT('\'', '$', { relevance: 0 }),
215 {
216 // Match line numbers
217 className: 'symbol',
218 begin: '^[0-9]+ ',
219 relevance: 10
220 },
221 {
222 // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)
223 className: 'number',
224 begin: '\\b\\d+(\\.\\d+)?([edED]\\d+)?[#\!]?',
225 relevance: 0
226 },
227 {
228 // Match hexadecimal numbers (&Hxxxx)
229 className: 'number',
230 begin: '(&[hH][0-9a-fA-F]{1,4})'
231 },
232 {
233 // Match octal numbers (&Oxxxxxx)
234 className: 'number',
235 begin: '(&[oO][0-7]{1,6})'
236 }
237 ]
238 };
239 }
240
241 return basic;
242
243 })();
244
245 hljs.registerLanguage('basic', hljsGrammar);
246 })();