package syntaxhighlighter::forth; $VERSION = '0.01'; sub load{ use Wx qw(wxSTC_LEX_FORTH wxSTC_H_TAG); # control keywords Forth my $forth_keywords = 'AGAIN BEGIN CASE DO ELSE ENDCASE ENDOF IF LOOP OF REPEAT THEN UNTIL WHILE [IF] [ELSE] [THEN] ?DO'; # keywords my $forth_keywords2 = 'DUP DROP ROT SWAP OVER @ ! 2@ 2! 2DUP 2DROP 2SWAP 2OVER NIP R@ >R R> 2R@ 2>R 2R> 0= 0< SP@ SP! W@ W! C@ C! < > = <> 0<> SPACE SPACES KEY? KEY THROW CATCH ABORT */ 2* /MOD CELL+ CELLS CHAR+ CHARS MOVE ERASE DABS TITLE HEX DECIMAL HOLD <# # #S #> SIGN D. . U. DUMP (.") >NUMBER IMMEDIATE EXIT RECURSE UNLOOP LEAVE HERE ALLOT , C, W, COMPILE, BRANCH, RET, LIT, DLIT, ?BRANCH, ", >MARK >RESOLVE1 RESOLVE ALIGN ALIGNED USER-ALLOT USER-HERE HEADER DOES> SMUDGE HIDE :NONAME LAST-WORD ?ERROR ERROR2 FIND1 SFIND SET-CURRENT GET-CURRENT DEFINITIONS GET-ORDER FORTH ONLY SET-ORDER ALSO PREVIOUS VOC-NAME. ORDER LATEST LITERAL 2LITERAL SLITERAL CLITERAL ?LITERAL1 ?SLITERAL1 HEX-LITERAL HEX-SLITERAL ?LITERAL2 ?SLITERAL2 SOURCE EndOfChunk CharAddr PeekChar IsDelimiter GetChar OnDelimiter SkipDelimiters OnNotDelimiter SkipWord SkipUpTo ParseWord NextWord PARSE SKIP CONSOLE-HANDLES REFILL DEPTH ?STACK ?COMP WORD INTERPRET BYE QUIT MAIN1 EVALUATE INCLUDE-FILE INCLUDED >BODY +WORD WORDLIST CLASS! CLASS@ PAR! PAR@ ID. ?IMMEDIATE ?VOC IMMEDIATE VOC WordByAddrWl WordByAddr NLIST WORDS SAVE OPTIONS /notransl ANSI>OEM ACCEPT EMIT CR TYPE EKEY? EKEY EKEY>CHAR EXTERNTASK ERASE-IMPORTS ModuleName ModuleDirName ENVIRONMENT? DROP-EXC-HANDLER SET-EXC-HANDLER HALT ERR CLOSE-FILE CREATE-FILE CREATE-FILE-SHARED OPEN-FILE-SHARED DELETE-FILE FILE-POSITION FILE-SIZE OPEN-FILE READ-FILE REPOSITION-FILE DOS-LINES UNIX-LINES READ-LINE WRITE-FILE RESIZE-FILE WRITE-LINE ALLOCATE FREE RESIZE START SUSPEND RESUME STOP PAUSE MIN MAX TRUE FALSE ASCIIZ> R/O W/O ;CLASS ENDWITH OR AND /STRING SEARCH COMPARE EXPORT ;MODULE SPACE /''; # defwords my $forth_keywords3 = 'VARIABLE CREATE : VALUE CONSTANT VM: M: var dvar chars OBJ CONSTR: DESTR: CLASS: OBJECT: POINTER USER USER-CREATE USER-VALUE VECT WNDPROC: VOCABULARY -- TASK: CEZ: MODULE:'; # prewords1 my $forth_keywords4 = 'CHAR [CHAR] POSTPONE WITH ['] TO [COMPILE] CHAR ASCII '; # prewords2 my $forth_keywords5 = 'REQUIRE WINAPI:'; # string words my $forth_keywords6 = 'S" ABORT" Z" " ." C"'; $_[0]->SetLexer( wxSTC_LEX_FORTH ); # Set Lexers to use $_[0]->SetKeyWords(0,$forth_keywords); $_[0]->SetKeyWords(1,$forth_keywords2); $_[0]->SetKeyWords(2,$forth_keywords3); $_[0]->SetKeyWords(3,$forth_keywords4); $_[0]->SetKeyWords(4,$forth_keywords5); $_[0]->SetKeyWords(5,$forth_keywords6); # $_[0]->StyleSetSpec( wxSTC_H_TAG, "fore:#000055" ); # Apply tag style for selected lexer (blue) $_[0]->StyleSetSpec( 0,"fore:#000000"); # whitespace (SCE_FORTH_DEFAULT) $_[0]->StyleSetSpec( 1,"fore:#009933"); # Comment (SCE_FORTH_COMMENT) $_[0]->StyleSetSpec( 2,"fore:#007f00"); # ML comment (SCE_FORTH_COMMENT_ML) $_[0]->StyleSetSpec( 3,"fore:#000000,bold"); # ML comment (SCE_FORTH_IDENTIFIER) $_[0]->StyleSetSpec( 4,"fore:#00007f,bold"); # control (SCE_FORTH_CONTROL) $_[0]->StyleSetSpec( 5,"fore:#000000,bold"); # Keywords $_[0]->StyleSetSpec( 6,"fore:#ff0000"); # defwords (SCE_FORTH_DEFWORD) $_[0]->StyleSetSpec( 7,"fore:#cc3300"); # preword1 (SCE_FORTH_PREWORD1) $_[0]->StyleSetSpec( 8,"fore:#996633"); # preword2 (SCE_FORTH_PREWORD2) $_[0]->StyleSetSpec( 9,"fore:#007f7f"); # number (SCE_FORTH_NUMBER) $_[0]->StyleSetSpec(10,"fore:#cc3300"); # Double quoted string (SCE_FORTH_STRING) $_[0]->StyleSetSpec(11,"fore:#0000cc"); # locale } 1;