1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: FORTH 3071d4279SBram Moolenaar" Maintainer: Christian V. J. Br�ssow <[email protected]> 4*3577c6faSBram Moolenaar" Last Change: Sa 14 Jul 2007 21:39:53 CEST 5071d4279SBram Moolenaar" Filenames: *.fs,*.ft 6071d4279SBram Moolenaar" URL: http://www.cvjb.de/comp/vim/forth.vim 7071d4279SBram Moolenaar 8071d4279SBram Moolenaar" $Id$ 9071d4279SBram Moolenaar 10071d4279SBram Moolenaar" The list of keywords is incomplete, compared with the offical ANS 11071d4279SBram Moolenaar" wordlist. If you use this language, please improve it, and send me 12071d4279SBram Moolenaar" the patches. 13071d4279SBram Moolenaar 14071d4279SBram Moolenaar" Many Thanks to... 15071d4279SBram Moolenaar" 16*3577c6faSBram Moolenaar" 2007-07-11: 17*3577c6faSBram Moolenaar" Benjamin Krill <ben at codiert dot org> send me a patch 18*3577c6faSBram Moolenaar" to highlight space errors. 19*3577c6faSBram Moolenaar" You can toggle this feature on through setting the 20*3577c6faSBram Moolenaar" flag forth_space_errors in you vimrc. If you have switched it on, 21*3577c6faSBram Moolenaar" you can turn off highlighting of trailing spaces in comments by 22*3577c6faSBram Moolenaar" setting forth_no_trail_space_error in your vimrc. If you do not want 23*3577c6faSBram Moolenaar" the highlighting of a tabulator following a space in comments, you 24*3577c6faSBram Moolenaar" can turn this off by setting forth_no_tab_space_error. 25*3577c6faSBram Moolenaar" 26*3577c6faSBram Moolenaar" 2006-05-25: 27*3577c6faSBram Moolenaar" Bill McCarthy <WJMc@...> and Ilya Sher <ilya-vim@...> 28*3577c6faSBram Moolenaar" Who found a bug in the ccomment line in 2004!!! 29*3577c6faSBram Moolenaar" I'm really very sorry, that it has taken two years to fix that 30*3577c6faSBram Moolenaar" in the offical version of this file. Shame on me. 31*3577c6faSBram Moolenaar" I think my face will be red the next ten years... 32*3577c6faSBram Moolenaar" 33*3577c6faSBram Moolenaar" 2006-05-21: 34*3577c6faSBram Moolenaar" Thomas E. Vaughan <tevaugha at ball dot com> send me a patch 35*3577c6faSBram Moolenaar" for the parenthesis comment word, so words with a trailing 36*3577c6faSBram Moolenaar" parenthesis will not start the highlighting for such comments. 378299df96SBram Moolenaar" 38071d4279SBram Moolenaar" 2003-05-10: 39071d4279SBram Moolenaar" Andrew Gaul <andrew at gaul.org> send me a patch for 40071d4279SBram Moolenaar" forthOperators. 41071d4279SBram Moolenaar" 42071d4279SBram Moolenaar" 2003-04-03: 43*3577c6faSBram Moolenaar" Ron Aaron <ron at ronware dot org> made updates for an 44071d4279SBram Moolenaar" improved Win32Forth support. 45071d4279SBram Moolenaar" 46071d4279SBram Moolenaar" 2002-04-22: 47*3577c6faSBram Moolenaar" Charles Shattuck <charley at forth dot org> helped me to settle up with the 48071d4279SBram Moolenaar" binary and hex number highlighting. 49071d4279SBram Moolenaar" 50071d4279SBram Moolenaar" 2002-04-20: 51*3577c6faSBram Moolenaar" Charles Shattuck <charley at forth dot org> send me some code for correctly 52071d4279SBram Moolenaar" highlighting char and [char] followed by an opening paren. He also added 53071d4279SBram Moolenaar" some words for operators, conditionals, and definitions; and added the 54071d4279SBram Moolenaar" highlighting for s" and c". 55071d4279SBram Moolenaar" 56071d4279SBram Moolenaar" 2000-03-28: 57*3577c6faSBram Moolenaar" John Providenza <john at probo dot com> made improvements for the 58071d4279SBram Moolenaar" highlighting of strings, and added the code for highlighting hex numbers. 59071d4279SBram Moolenaar" 60071d4279SBram Moolenaar 61071d4279SBram Moolenaar 62071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 63071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 64071d4279SBram Moolenaarif version < 600 65071d4279SBram Moolenaar syntax clear 66071d4279SBram Moolenaarelseif exists("b:current_syntax") 67071d4279SBram Moolenaar finish 68071d4279SBram Moolenaarendif 69071d4279SBram Moolenaar 70071d4279SBram Moolenaar" Synchronization method 718299df96SBram Moolenaarsyn sync ccomment 728299df96SBram Moolenaarsyn sync maxlines=200 73071d4279SBram Moolenaar 74071d4279SBram Moolenaar" I use gforth, so I set this to case ignore 75071d4279SBram Moolenaarsyn case ignore 76071d4279SBram Moolenaar 77071d4279SBram Moolenaar" Some special, non-FORTH keywords 78071d4279SBram Moolenaarsyn keyword forthTodo contained TODO FIXME XXX 79071d4279SBram Moolenaarsyn match forthTodo contained 'Copyright\(\s([Cc])\)\=\(\s[0-9]\{2,4}\)\=' 80071d4279SBram Moolenaar 81071d4279SBram Moolenaar" Characters allowed in keywords 82071d4279SBram Moolenaar" I don't know if 128-255 are allowed in ANS-FORHT 83071d4279SBram Moolenaarif version >= 600 84071d4279SBram Moolenaar setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255 85071d4279SBram Moolenaarelse 86071d4279SBram Moolenaar set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255 87071d4279SBram Moolenaarendif 88071d4279SBram Moolenaar 89*3577c6faSBram Moolenaar" when wanted, highlight trailing white space 90*3577c6faSBram Moolenaarif exists("forth_space_errors") 91*3577c6faSBram Moolenaar if !exists("forth_no_trail_space_error") 92*3577c6faSBram Moolenaar syn match forthSpaceError display excludenl "\s\+$" 93*3577c6faSBram Moolenaar endif 94*3577c6faSBram Moolenaar if !exists("forth_no_tab_space_error") 95*3577c6faSBram Moolenaar syn match forthSpaceError display " \+\t"me=e-1 96*3577c6faSBram Moolenaar endif 97*3577c6faSBram Moolenaarendif 98071d4279SBram Moolenaar 99071d4279SBram Moolenaar" Keywords 100071d4279SBram Moolenaar 101071d4279SBram Moolenaar" basic mathematical and logical operators 102071d4279SBram Moolenaarsyn keyword forthOperators + - * / MOD /MOD NEGATE ABS MIN MAX 103071d4279SBram Moolenaarsyn keyword forthOperators AND OR XOR NOT INVERT 2* 2/ 1+ 1- 2+ 2- 8* 104071d4279SBram Moolenaarsyn keyword forthOperators M+ */ */MOD M* UM* M*/ UM/MOD FM/MOD SM/REM 105071d4279SBram Moolenaarsyn keyword forthOperators D+ D- DNEGATE DABS DMIN DMAX 106071d4279SBram Moolenaarsyn keyword forthOperators F+ F- F* F/ FNEGATE FABS FMAX FMIN FLOOR FROUND 107071d4279SBram Moolenaarsyn keyword forthOperators F** FSQRT FEXP FEXPM1 FLN FLNP1 FLOG FALOG FSIN 108071d4279SBram Moolenaarsyn keyword forthOperators FCOS FSINCOS FTAN FASIN FACOS FATAN FATAN2 FSINH 109071d4279SBram Moolenaarsyn keyword forthOperators FCOSH FTANH FASINH FACOSH FATANH 110071d4279SBram Moolenaarsyn keyword forthOperators 0< 0<= 0<> 0= 0> 0>= < <= <> = > >= 111071d4279SBram Moolenaarsyn keyword forthOperators ?NEGATE ?DNEGATE 112071d4279SBram Moolenaar 113071d4279SBram Moolenaar" stack manipulations 114071d4279SBram Moolenaarsyn keyword forthStack DROP NIP DUP OVER TUCK SWAP ROT -ROT ?DUP PICK ROLL 115071d4279SBram Moolenaarsyn keyword forthStack 2DROP 2NIP 2DUP 2OVER 2TUCK 2SWAP 2ROT 116071d4279SBram Moolenaarsyn keyword forthStack 3DUP 4DUP 117071d4279SBram Moolenaarsyn keyword forthRStack >R R> R@ RDROP 2>R 2R> 2R@ 2RDROP 118071d4279SBram Moolenaarsyn keyword forthFStack FDROP FNIP FDUP FOVER FTUCK FSWAP FROT 119071d4279SBram Moolenaar 120071d4279SBram Moolenaar" stack pointer manipulations 121071d4279SBram Moolenaarsyn keyword forthSP SP@ SP! FP@ FP! RP@ RP! LP@ LP! 122071d4279SBram Moolenaar 123071d4279SBram Moolenaar" address operations 124071d4279SBram Moolenaarsyn keyword forthMemory @ ! +! C@ C! 2@ 2! F@ F! SF@ SF! DF@ DF! 125071d4279SBram Moolenaarsyn keyword forthAdrArith CHARS CHAR+ CELLS CELL+ CELL ALIGN ALIGNED FLOATS 126071d4279SBram Moolenaarsyn keyword forthAdrArith FLOAT+ FLOAT FALIGN FALIGNED SFLOATS SFLOAT+ 127071d4279SBram Moolenaarsyn keyword forthAdrArith SFALIGN SFALIGNED DFLOATS DFLOAT+ DFALIGN DFALIGNED 128071d4279SBram Moolenaarsyn keyword forthAdrArith MAXALIGN MAXALIGNED CFALIGN CFALIGNED 129071d4279SBram Moolenaarsyn keyword forthAdrArith ADDRESS-UNIT-BITS ALLOT ALLOCATE HERE 130071d4279SBram Moolenaarsyn keyword forthMemBlks MOVE ERASE CMOVE CMOVE> FILL BLANK 131071d4279SBram Moolenaar 132071d4279SBram Moolenaar" conditionals 133071d4279SBram Moolenaarsyn keyword forthCond IF ELSE ENDIF THEN CASE OF ENDOF ENDCASE ?DUP-IF 134071d4279SBram Moolenaarsyn keyword forthCond ?DUP-0=-IF AHEAD CS-PICK CS-ROLL CATCH THROW WITHIN 135071d4279SBram Moolenaar 136071d4279SBram Moolenaar" iterations 137071d4279SBram Moolenaarsyn keyword forthLoop BEGIN WHILE REPEAT UNTIL AGAIN 138071d4279SBram Moolenaarsyn keyword forthLoop ?DO LOOP I J K +DO U+DO -DO U-DO DO +LOOP -LOOP 139071d4279SBram Moolenaarsyn keyword forthLoop UNLOOP LEAVE ?LEAVE EXIT DONE FOR NEXT 140071d4279SBram Moolenaar 141071d4279SBram Moolenaar" new words 142071d4279SBram Moolenaarsyn match forthColonDef '\<:m\?\s*[^ \t]\+\>' 143071d4279SBram Moolenaarsyn keyword forthEndOfColonDef ; ;M ;m 144071d4279SBram Moolenaarsyn keyword forthDefine CONSTANT 2CONSTANT FCONSTANT VARIABLE 2VARIABLE CREATE 145071d4279SBram Moolenaarsyn keyword forthDefine USER VALUE TO DEFER IS DOES> IMMEDIATE COMPILE-ONLY 146071d4279SBram Moolenaarsyn keyword forthDefine COMPILE RESTRICT INTERPRET POSTPONE EXECUTE LITERAL 147071d4279SBram Moolenaarsyn keyword forthDefine CREATE-INTERPRET/COMPILE INTERPRETATION> <INTERPRETATION 148071d4279SBram Moolenaarsyn keyword forthDefine COMPILATION> <COMPILATION ] LASTXT COMP' POSTPONE, 149071d4279SBram Moolenaarsyn keyword forthDefine FIND-NAME NAME>INT NAME?INT NAME>COMP NAME>STRING STATE 150071d4279SBram Moolenaarsyn keyword forthDefine C; CVARIABLE 151071d4279SBram Moolenaarsyn match forthDefine "\[COMP']" 152071d4279SBram Moolenaarsyn match forthDefine "'" 153071d4279SBram Moolenaarsyn match forthDefine '\<\[\>' 154071d4279SBram Moolenaarsyn match forthDefine "\[']" 155071d4279SBram Moolenaarsyn match forthDefine '\[COMPILE]' 156071d4279SBram Moolenaarsyn match forthClassDef '\<:class\s*[^ \t]\+\>' 157071d4279SBram Moolenaarsyn match forthObjectDef '\<:object\s*[^ \t]\+\>' 158071d4279SBram Moolenaarsyn keyword forthEndOfClassDef ';class' 159071d4279SBram Moolenaarsyn keyword forthEndOfObjectDef ';object' 160071d4279SBram Moolenaar 161071d4279SBram Moolenaar" debugging 162071d4279SBram Moolenaarsyn keyword forthDebug PRINTDEBUGDATA PRINTDEBUGLINE 163071d4279SBram Moolenaarsyn match forthDebug "\<\~\~\>" 164071d4279SBram Moolenaar 165071d4279SBram Moolenaar" Assembler 166071d4279SBram Moolenaarsyn keyword forthAssembler ASSEMBLER CODE END-CODE ;CODE FLUSH-ICACHE C, 167071d4279SBram Moolenaar 168071d4279SBram Moolenaar" basic character operations 169071d4279SBram Moolenaarsyn keyword forthCharOps (.) CHAR EXPECT FIND WORD TYPE -TRAILING EMIT KEY 170071d4279SBram Moolenaarsyn keyword forthCharOps KEY? TIB CR 171071d4279SBram Moolenaar" recognize 'char (' or '[char] (' correctly, so it doesn't 172071d4279SBram Moolenaar" highlight everything after the paren as a comment till a closing ')' 173071d4279SBram Moolenaarsyn match forthCharOps '\<char\s\S\s' 174071d4279SBram Moolenaarsyn match forthCharOps '\<\[char\]\s\S\s' 175071d4279SBram Moolenaarsyn region forthCharOps start=+."\s+ skip=+\\"+ end=+"+ 176071d4279SBram Moolenaar 177071d4279SBram Moolenaar" char-number conversion 178071d4279SBram Moolenaarsyn keyword forthConversion <# # #> #S (NUMBER) (NUMBER?) CONVERT D>F D>S DIGIT 179071d4279SBram Moolenaarsyn keyword forthConversion DPL F>D HLD HOLD NUMBER S>D SIGN >NUMBER 180071d4279SBram Moolenaar 181071d4279SBram Moolenaar" interptreter, wordbook, compiler 182071d4279SBram Moolenaarsyn keyword forthForth (LOCAL) BYE COLD ABORT >BODY >NEXT >LINK CFA >VIEW HERE 183071d4279SBram Moolenaarsyn keyword forthForth PAD WORDS VIEW VIEW> N>LINK NAME> LINK> L>NAME FORGET 184071d4279SBram Moolenaarsyn keyword forthForth BODY> 185071d4279SBram Moolenaarsyn region forthForth start=+ABORT"\s+ skip=+\\"+ end=+"+ 186071d4279SBram Moolenaar 187071d4279SBram Moolenaar" vocabularies 188071d4279SBram Moolenaarsyn keyword forthVocs ONLY FORTH ALSO ROOT SEAL VOCS ORDER CONTEXT #VOCS 189071d4279SBram Moolenaarsyn keyword forthVocs VOCABULARY DEFINITIONS 190071d4279SBram Moolenaar 191071d4279SBram Moolenaar" numbers 192071d4279SBram Moolenaarsyn keyword forthMath DECIMAL HEX BASE 193071d4279SBram Moolenaarsyn match forthInteger '\<-\=[0-9.]*[0-9.]\+\>' 194071d4279SBram Moolenaar" recognize hex and binary numbers, the '$' and '%' notation is for gforth 195071d4279SBram Moolenaarsyn match forthInteger '\<\$\x*\x\+\>' " *1* --- dont't mess 196071d4279SBram Moolenaarsyn match forthInteger '\<\x*\d\x*\>' " *2* --- this order! 197071d4279SBram Moolenaarsyn match forthInteger '\<%[0-1]*[0-1]\+\>' 198071d4279SBram Moolenaarsyn match forthFloat '\<-\=\d*[.]\=\d\+[Ee]\d\+\>' 199071d4279SBram Moolenaar 200071d4279SBram Moolenaar" Strings 201071d4279SBram Moolenaarsyn region forthString start=+\.*\"+ end=+"+ end=+$+ 202071d4279SBram Moolenaar" XXX 203071d4279SBram Moolenaarsyn region forthString start=+s\"+ end=+"+ end=+$+ 204071d4279SBram Moolenaarsyn region forthString start=+c\"+ end=+"+ end=+$+ 205071d4279SBram Moolenaar 206071d4279SBram Moolenaar" Comments 207*3577c6faSBram Moolenaarsyn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError 208*3577c6faSBram Moolenaarsyn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError 209*3577c6faSBram Moolenaarsyn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError 210*3577c6faSBram Moolenaarsyn region forthComment start='\s(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError 211*3577c6faSBram Moolenaarsyn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError 212071d4279SBram Moolenaar 213071d4279SBram Moolenaar" Include files 214071d4279SBram Moolenaarsyn match forthInclude '^INCLUDE\s\+\k\+' 215071d4279SBram Moolenaarsyn match forthInclude '^fload\s\+' 216071d4279SBram Moolenaarsyn match forthInclude '^needs\s\+' 217071d4279SBram Moolenaar 218071d4279SBram Moolenaar" Define the default highlighting. 219071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already 220071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 221071d4279SBram Moolenaarif version >= 508 || !exists("did_forth_syn_inits") 222071d4279SBram Moolenaar if version < 508 223071d4279SBram Moolenaar let did_forth_syn_inits = 1 224071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 225071d4279SBram Moolenaar else 226071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 227071d4279SBram Moolenaar endif 228071d4279SBram Moolenaar 229071d4279SBram Moolenaar " The default methods for highlighting. Can be overriden later. 230071d4279SBram Moolenaar HiLink forthTodo Todo 231071d4279SBram Moolenaar HiLink forthOperators Operator 232071d4279SBram Moolenaar HiLink forthMath Number 233071d4279SBram Moolenaar HiLink forthInteger Number 234071d4279SBram Moolenaar HiLink forthFloat Float 235071d4279SBram Moolenaar HiLink forthStack Special 236071d4279SBram Moolenaar HiLink forthRstack Special 237071d4279SBram Moolenaar HiLink forthFStack Special 238071d4279SBram Moolenaar HiLink forthSP Special 239071d4279SBram Moolenaar HiLink forthMemory Function 240071d4279SBram Moolenaar HiLink forthAdrArith Function 241071d4279SBram Moolenaar HiLink forthMemBlks Function 242071d4279SBram Moolenaar HiLink forthCond Conditional 243071d4279SBram Moolenaar HiLink forthLoop Repeat 244071d4279SBram Moolenaar HiLink forthColonDef Define 245071d4279SBram Moolenaar HiLink forthEndOfColonDef Define 246071d4279SBram Moolenaar HiLink forthDefine Define 247071d4279SBram Moolenaar HiLink forthDebug Debug 248071d4279SBram Moolenaar HiLink forthAssembler Include 249071d4279SBram Moolenaar HiLink forthCharOps Character 250071d4279SBram Moolenaar HiLink forthConversion String 251071d4279SBram Moolenaar HiLink forthForth Statement 252071d4279SBram Moolenaar HiLink forthVocs Statement 253071d4279SBram Moolenaar HiLink forthString String 254071d4279SBram Moolenaar HiLink forthComment Comment 255071d4279SBram Moolenaar HiLink forthClassDef Define 256071d4279SBram Moolenaar HiLink forthEndOfClassDef Define 257071d4279SBram Moolenaar HiLink forthObjectDef Define 258071d4279SBram Moolenaar HiLink forthEndOfObjectDef Define 259071d4279SBram Moolenaar HiLink forthInclude Include 260*3577c6faSBram Moolenaar HiLink forthSpaceError Error 261071d4279SBram Moolenaar 262071d4279SBram Moolenaar delcommand HiLink 263071d4279SBram Moolenaarendif 264071d4279SBram Moolenaar 265071d4279SBram Moolenaarlet b:current_syntax = "forth" 266071d4279SBram Moolenaar 267071d4279SBram Moolenaar" vim:ts=8:sw=4:nocindent:smartindent: 268