basic.js 2.2 KB

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