1 USING: xmode.marker.context xmode.rules symbols accessors
2 xmode.tokens namespaces kernel sequences assocs math ;
5 ! Based on org.gjt.sp.jedit.syntax.TokenMarker
7 SYMBOLS: line last-offset position context
8 whitespace-end seen-whitespace-end?
9 escaped? process-escape? delegate-end-escaped? ;
11 : current-rule ( -- rule )
12 context get in-rule>> ;
14 : current-rule-set ( -- rule )
15 context get in-rule-set>> ;
17 : current-keywords ( -- keyword-map )
18 current-rule-set keywords>> ;
20 : token, ( from to id -- )
21 2over = [ 3drop ] [ >r line get subseq r> <token> , ] if ;
23 : prev-token, ( id -- )
24 >r last-offset get position get r> token,
25 position get last-offset set ;
27 : next-token, ( len id -- )
28 >r position get 2dup + r> token,
29 position get + dup 1- position set last-offset set ;
31 : push-context ( rules -- )
32 context [ <line-context> ] change ;
36 f >>in-rule context set ;
38 : init-token-marker ( main prev-context line -- )
40 [ ] [ f <line-context> ] ?if context set