The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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 <MARK >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;