Advertisement
12Me21

ok this should work

Dec 30th, 2016
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var applySyntaxHighlighting = (function()
  2. {
  3.     //find matches and add them to the list.
  4.     var index=0;
  5.     function find(color,regex,text,list)
  6.     {
  7.         while (match=regex.exec(text)){
  8.             list.push({
  9.                 start: match.index,
  10.                 end: match.index+match[0].length,
  11.                 color: color,
  12.                 index: index++
  13.             });
  14.         console.log(match)
  15.         }
  16.     }
  17.    
  18.     //sort by lower start pos, then longer length
  19.     function listCompare(a,b)
  20.     {
  21.         return a.start-b.start || b.end-a.end || a.index-b.index;
  22.     }
  23.    
  24.     //highlight
  25.     return function(text)
  26.     {
  27.         //Each highlightable word has the properties "start", "end", and "color"
  28.         var list=[];
  29.         //find potential things to highlight
  30.         find([0x6B,0xBD,0xF5],/ELSEIF|ENDIF|AND|BREAK|CALL|COMMON|CONTINUE|DATA|DEC|DEF|DIM|DIV|ELSE|END|EXEC|FALSE|FOR|GOSUB|GOTO|IF|INC|INPUT|LINPUT|MOD|NEXT|NOT|ON|OUT|OR|PRINT|READ|REM|REPEAT|RESTORE|RETURN|STEP|STOP|SWAP|THEN|TO|TRUE|UNTIL|USE|VAR|WEND|WHILE|XOR/igm,text,list);
  31.         find([0x7A,0x7C,0xF7],/ABS|ACCEL|ACLS|ACOS|ARYOP|ASC|ASIN|ATAN|ATTR|BACKCOLOR|BACKTRACE|BEEP|BGANIM|BGCHK|BGCLIP|BGCLR|BGCOLOR|BGCOORD|BGCOPY|BGFILL|BGFUNC|BGGET|BGHIDE|BGHOME|BGLOAD|BGMCHK|BGMCLEAR|BGMCONT|BGMPAUSE|BGMPLAY|BGMPRG|BGMPRGA|BGMSET|BGMSETD|BGMSTOP|BGMVAR|BGMVOL|BGOFS|BGPAGE|BGPUT|BGROT|BGSAVE|BGSCALE|BGSCREEN|BGSHOW|BGSTART|BGSTOP|BGVAR|BIN\$|BIQUAD|BREPEAT|BQPARAM|BUTTON|CALLIDX|CEIL|CHKCALL|CHKCHR|CHKFILE|CHKLABEL|CHKVAR|CHR\$|CLASSIFY|CLIPBOARD|CLS|COLOR|COPY|COS|COSH|CSRX|CSRY|CSRZ|DATE\$|DEG|DELETE|DIALOG|DISPLAY|DLCOPEN|DTREAD|EFCOFF|EFCON|EFCSET|EFCWET|ERRNUM|ERRLINE|ERRPRG|EXP|EXTFEATURE|FADE|FADECHK|FFT|FFTWFN|FILL|FILES|FLOOR|FONTDEF|FORMAT\$|FREEMEM|GBOX|GCIRCLE|GCLIP|GCLS|GCOLOR|GCOPY|GFILL|GLINE|GLOAD|GOFS|GPAGE|GPAINT|GPRIO|GPSET|GPUTCHR|GSAVE|GSPOIT|GTRI|GYROA|GYROV|GYROSYNC|HARDWARE|HEX\$|IFFT|INKEY\$|INSTR|KEY|LEFT\$|LEN|LOAD|LOCATE|LOG|MAINCNT|MAX|MICDATA|MICPOS|MICSAVE|MICSIZE|MICSTART|MICSTOP|MID\$|MILLISEC|MIN|MPCOUNT|MPEND|MPGET|MPHOST|MPLOCAL|MPNAME\$|MPRECV|MPSEND|MPSET|MPSTART|MPSTAT|OPTION|PCMCONT|PCMPOS|PCMSTOP|PCMSTREAM|PCMVOL|POW|POP|PRGDEL|PRGEDIT|PRGGET\$|PRGINS|PRGNAME\$|PRGSET|PRGSIZE|PRGSLOT|PROJECT|PUSH|RAD|RANDOMIZE|RENAME|RESULT|RGB|RGBREAD|RIGHT\$|RINGCOPY|RND|RNDF|ROUND|RSORT|SAVE|SCROLL|SGN|SHIFT|SIN|SINH|SNDSTOP|SORT|SPANIM|SPCHK|SPCHR|SPCLIP|SPCLR|SPCOL|SPCOLOR|SPCOLVEC|SPDEF|SPFUNC|SPHIDE|SPHITINFO|SPHITRC|SPHITSP|SPHOME|SPLINK|SPOFS|SPPAGE|SPROT|SPSCALE|SPSET|SPSHOW|SPSTART|SPSTOP|SPUSED|SPUNLINK|SPVAR|SQR|STICK|STICKEX|STR\$|SUBST\$|SYSBEEP|TABSTEP|TALK|TALKCHK|TALKSTOP|TAN|TANH|TIME\$|TMREAD|TOUCH|UNSHIFT|VAL|VERSON|VISIBLE|VSYNC|WAIT|WAVSET|WAVSETA|WIDTH|XOFF|XON|XSCREEN/igm,text,list);
  32.         find([0xFF,0xFF,0xFF],/[A-Z_][A-Z0-9_]*[$%#]?/igm,text,list); //must be after keyword and function. Prevents functions/keywords from being highlighted in the middle of user variable/function names
  33.         find([0xFF,0xFF,0xFF],/(?:\d*\.)?\d+(?=E)/igm,text,list); //must be before number. Causes numbers using E without a digit after to not be highlighted
  34.         find([0xF6,0x7B,0xD5],/-?(?:(?:\d*\.(?:\d+(?:E-?\d+)?)?)|(?:\d+(?:E-?\d+)?))#?|&H[\dA-F]+|&B[01]+|#[A-Z\d]+/igm,text,list);
  35.         find([0xF7,0xA6,0x00],/@[0-9A-Z_]*/igm,text,list);
  36.         find([0xF6,0xE6,0x52],/\".*?(?:\"|$)/igm,text,list);
  37.         find([0x10,0xB6,0x30],/'[^'\n\r]*/igm,text,list);
  38.        
  39.         //highlight the correct ones
  40.         list=list.sort(listCompare);
  41.         var pos=0,output=[];
  42.         for(var i=0;i<list.length;i++)
  43.         {
  44.             var word=list[i];
  45.             if (word.start>=pos) //only highlight if it's past the end of the previous keyword
  46.             {
  47.                 output.push({
  48.                     text: text.substring(pos,word.start),
  49.                     color: "white"
  50.                 });
  51.                 output.push({
  52.                     text: text.substring(word.start,word.end),
  53.                     color: word.color
  54.                 });
  55.                 pos=word.end;
  56.             }
  57.         }
  58.         output.push({
  59.             text: text.substring(pos),
  60.             color: "white"
  61.         });
  62.         return output;
  63.     };
  64.    
  65. }) ();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement