Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var applySyntaxHighlighting = (function()
- {
- //find matches and add them to the list.
- var index=0;
- function find(color,regex,text,list)
- {
- while (match=regex.exec(text)){
- list.push({
- start: match.index,
- end: match.index+match[0].length,
- color: color,
- index: index++
- });
- console.log(match)
- }
- }
- //sort by lower start pos, then longer length
- function listCompare(a,b)
- {
- return a.start-b.start || b.end-a.end || a.index-b.index;
- }
- //highlight
- return function(text)
- {
- //Each highlightable word has the properties "start", "end", and "color"
- var list=[];
- //find potential things to highlight
- 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);
- 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);
- 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
- 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
- find([0xF6,0x7B,0xD5],/-?(?:(?:\d*\.(?:\d+(?:E-?\d+)?)?)|(?:\d+(?:E-?\d+)?))#?|&H[\dA-F]+|&B[01]+|#[A-Z\d]+/igm,text,list);
- find([0xF7,0xA6,0x00],/@[0-9A-Z_]*/igm,text,list);
- find([0xF6,0xE6,0x52],/\".*?(?:\"|$)/igm,text,list);
- find([0x10,0xB6,0x30],/'[^'\n\r]*/igm,text,list);
- //highlight the correct ones
- list=list.sort(listCompare);
- var pos=0,output=[];
- for(var i=0;i<list.length;i++)
- {
- var word=list[i];
- if (word.start>=pos) //only highlight if it's past the end of the previous keyword
- {
- output.push({
- text: text.substring(pos,word.start),
- color: "white"
- });
- output.push({
- text: text.substring(word.start,word.end),
- color: word.color
- });
- pos=word.end;
- }
- }
- output.push({
- text: text.substring(pos),
- color: "white"
- });
- return output;
- };
- }) ();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement