LoginLogin
Nintendo shutting down 3DS + Wii U online services, see our post

Syntax Highlighting for GTKSourceView (gedit)

Root / General / [.]

dankrauseCreated:
I put together a SmileBASIC language definition for GTKSourceView, used by gedit and others in Gnome. It can be found here: https://gist.github.com/dankrause/1a3592efa9a0e9722007 It's not perfect (I didn't spend a ton of time making sure numbers and operators are parsed properly in all the edge cases) but it makes writing SmileBASIC in gedit much nicer.

You can use some of the lists and regexes from my syntax highlighter: http://12me21.github.io/syntax/script.js
find("keyword" ,/CONTINUE|RESTORE|ELSEIF|COMMON|LINPUT|REPEAT|RETURN|ENDIF|BREAK|FALSE|GOSUB|INPUT|PRINT|UNTIL|WHILE|CALL|DATA|ELSE|EXEC|GOTO|NEXT|READ|STEP|STOP|SWAP|THEN|TRUE|WEND|AND|DEC|DEF|DIM|DIV|END|FOR|INC|MOD|NOT|OUT|REM|USE|VAR|XOR|IF|ON|OR|TO/igm,text,list);
find("function",/EXTFEATURE|BACKCOLOR|BACKTRACE|CLIPBOARD|PCMSTREAM|RANDOMIZE|SPHITINFO|BGMCLEAR|BGMPAUSE|BGSCREEN|CHKLABEL|CLASSIFY|GYROSYNC|HARDWARE|MICSTART|MILLISEC|PRGNAME\$|RINGCOPY|SPCOLVEC|SPUNLINK|TALKSTOP|BGCOLOR|BGCOORD|BGMCONT|BGMPLAY|BGMPRGA|BGMSETD|BGMSTOP|BGSCALE|BGSTART|BREPEAT|BQPARAM|CALLIDX|CHKCALL|CHKFILE|DISPLAY|DLCOPEN|ERRLINE|FADECHK|FONTDEF|FORMAT\$|FREEMEM|GCIRCLE|GPUTCHR|MAINCNT|MICDATA|MICSAVE|MICSIZE|MICSTOP|MPCOUNT|MPLOCAL|MPNAME\$|MPSTART|PCMCONT|PCMSTOP|PRGEDIT|PRGGET\$|PRGSIZE|PRGSLOT|PROJECT|RGBREAD|SNDSTOP|SPCOLOR|SPHITRC|SPHITSP|SPSCALE|SPSTART|STICKEX|SYSBEEP|TABSTEP|TALKCHK|UNSHIFT|VISIBLE|WAVSETA|XSCREEN|BGANIM|BGCLIP|BGCOPY|BGFILL|BGFUNC|BGHIDE|BGHOME|BGLOAD|BGMCHK|BGMPRG|BGMSET|BGMVAR|BGMVOL|BGPAGE|BGSAVE|BGSHOW|BGSTOP|BIQUAD|BUTTON|CHKCHR|CHKVAR|DELETE|DIALOG|DTREAD|EFCOFF|EFCSET|EFCWET|ERRNUM|ERRPRG|FFTWFN|GCOLOR|GPAINT|GSPOIT|INKEY\$|LOCATE|MICPOS|MPHOST|MPRECV|MPSEND|MPSTAT|OPTION|PCMPOS|PCMVOL|PRGDEL|PRGINS|PRGSET|RENAME|RESULT|RIGHT\$|SCROLL|SPANIM|SPCLIP|SPFUNC|SPHIDE|SPHOME|SPLINK|SPPAGE|SPSHOW|SPSTOP|SPUSED|SUBST\$|TMREAD|VERSON|WAVSET|ACCEL|ARYOP|BGCHK|BGCLR|BGGET|BGOFS|BGPUT|BGROT|BGVAR|COLOR|DATE\$|EFCON|FILES|FLOOR|GCLIP|GCOPY|GFILL|GLINE|GLOAD|GPAGE|GPRIO|GPSET|GSAVE|GYROA|GYROV|INSTR|LEFT\$|MPEND|MPGET|MPSET|ROUND|RSORT|SHIFT|SPCHK|SPCHR|SPCLR|SPCOL|SPDEF|SPOFS|SPROT|SPSET|SPVAR|STICK|TIME\$|TOUCH|VSYNC|WIDTH|ACLS|ACOS|ASIN|ATAN|ATTR|BEEP|BIN\$|CEIL|CHR\$|COPY|COSH|CSRX|CSRY|CSRZ|FADE|FILL|GBOX|GCLS|GOFS|GTRI|HEX\$|IFFT|LOAD|MID\$|PUSH|RNDF|SAVE|SINH|SORT|STR\$|TALK|TANH|WAIT|XOFF|ABS|ASC|CLS|COS|DEG|EXP|FFT|KEY|LEN|LOG|MAX|MIN|POW|POP|RAD|RGB|RND|SGN|SIN|SQR|TAN|VAL|XON/igm,text,list);
find(false     ,/[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(false     ,/(?:\d*\.)?\d+(?=E)/igm,text,list); //must be before number. Causes numbers using E without a digit after to not be highlighted
find(false     ,/&&|&&/igm,text,list); //must be before number. Makes sure code like 7&&HEAD is not interpreted as a hex number.
find("number"  ,/\d*\.#?/igm,text,list); // x. and . numbers handled separately
find("number"  ,/(?:\d*\.)?\d+(?:E[+-]?\d+)?#?|(?:&|&)H[\dA-F]+|(?:&|&)B[01]+|#[A-Z0-9]+/igm,text,list);
find("label"   ,/@[0-9A-Z_]*/igm,text,list);
find("string"  ,/\".*?(?:\"|$)/igm,text,list);
find("comment" ,/'[^'\n\r]*/igm,text,list);
A few other mistakes: REM (not REN) works the same as ' (it can be placed anywhere in the line) The direct mode commands shouldn't be in the error list, since you can define functions with the same names (and PROJECT() is valid in programs) operators should be: - ! * / + << >> < > <= >= == != && || AND OR XOR DIV MOD NOT