[d24f17c] | 1 | /*
|
---|
| 2 | Language: BASIC
|
---|
| 3 | Author: Raphaël Assénat <raph@raphnet.net>
|
---|
| 4 | Description: Based on the BASIC reference from the Tandy 1000 guide
|
---|
| 5 | Website: https://en.wikipedia.org/wiki/Tandy_1000
|
---|
| 6 | */
|
---|
| 7 |
|
---|
| 8 | /** @type LanguageFn */
|
---|
| 9 | function basic(hljs) {
|
---|
| 10 | return {
|
---|
| 11 | name: 'BASIC',
|
---|
| 12 | case_insensitive: true,
|
---|
| 13 | illegal: '^\.',
|
---|
| 14 | // Support explicitly typed variables that end with $%! or #.
|
---|
| 15 | keywords: {
|
---|
| 16 | $pattern: '[a-zA-Z][a-zA-Z0-9_$%!#]*',
|
---|
| 17 | keyword:
|
---|
| 18 | 'ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE ' +
|
---|
| 19 | 'CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ ' +
|
---|
| 20 | 'DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ ' +
|
---|
| 21 | 'EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO ' +
|
---|
| 22 | 'HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON ' +
|
---|
| 23 | 'OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET ' +
|
---|
| 24 | 'MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION ' +
|
---|
| 25 | 'BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET ' +
|
---|
| 26 | 'PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET ' +
|
---|
| 27 | 'RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP ' +
|
---|
| 28 | 'SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE ' +
|
---|
| 29 | 'WEND WIDTH WINDOW WRITE XOR'
|
---|
| 30 | },
|
---|
| 31 | contains: [
|
---|
| 32 | hljs.QUOTE_STRING_MODE,
|
---|
| 33 | hljs.COMMENT('REM', '$', {
|
---|
| 34 | relevance: 10
|
---|
| 35 | }),
|
---|
| 36 | hljs.COMMENT('\'', '$', {
|
---|
| 37 | relevance: 0
|
---|
| 38 | }),
|
---|
| 39 | {
|
---|
| 40 | // Match line numbers
|
---|
| 41 | className: 'symbol',
|
---|
| 42 | begin: '^[0-9]+ ',
|
---|
| 43 | relevance: 10
|
---|
| 44 | },
|
---|
| 45 | {
|
---|
| 46 | // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)
|
---|
| 47 | className: 'number',
|
---|
| 48 | begin: '\\b\\d+(\\.\\d+)?([edED]\\d+)?[#\!]?',
|
---|
| 49 | relevance: 0
|
---|
| 50 | },
|
---|
| 51 | {
|
---|
| 52 | // Match hexadecimal numbers (&Hxxxx)
|
---|
| 53 | className: 'number',
|
---|
| 54 | begin: '(&[hH][0-9a-fA-F]{1,4})'
|
---|
| 55 | },
|
---|
| 56 | {
|
---|
| 57 | // Match octal numbers (&Oxxxxxx)
|
---|
| 58 | className: 'number',
|
---|
| 59 | begin: '(&[oO][0-7]{1,6})'
|
---|
| 60 | }
|
---|
| 61 | ]
|
---|
| 62 | };
|
---|
| 63 | }
|
---|
| 64 |
|
---|
| 65 | module.exports = basic;
|
---|