/ src / theme / languages / basic.js
basic.js
  1  /*! `basic` grammar compiled for Highlight.js 11.10.0 */
  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          hljs.QUOTE_STRING_MODE,
207          hljs.COMMENT('REM', '$', { relevance: 10 }),
208          hljs.COMMENT('\'', '$', { relevance: 0 }),
209          {
210            // Match line numbers
211            className: 'symbol',
212            begin: '^[0-9]+ ',
213            relevance: 10
214          },
215          {
216            // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)
217            className: 'number',
218            begin: '\\b\\d+(\\.\\d+)?([edED]\\d+)?[#\!]?',
219            relevance: 0
220          },
221          {
222            // Match hexadecimal numbers (&Hxxxx)
223            className: 'number',
224            begin: '(&[hH][0-9a-fA-F]{1,4})'
225          },
226          {
227            // Match octal numbers (&Oxxxxxx)
228            className: 'number',
229            begin: '(&[oO][0-7]{1,6})'
230          }
231        ]
232      };
233    }
234  
235    return basic;
236  
237  })();
238  
239      hljs.registerLanguage('basic', hljsGrammar);
240    })();