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 })();