]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/marker/state/state.factor
9075ff63294c14110ba49ee15a046dd7715a9a40
[factor.git] / basis / xmode / marker / state / state.factor
1 USING: xmode.marker.context xmode.rules symbols accessors
2 xmode.tokens namespaces kernel sequences assocs math ;
3 IN: xmode.marker.state
4
5 ! Based on org.gjt.sp.jedit.syntax.TokenMarker
6
7 SYMBOLS: line last-offset position context
8  whitespace-end seen-whitespace-end?
9  escaped?  process-escape?  delegate-end-escaped? ;
10
11 : current-rule ( -- rule )
12     context get in-rule>> ;
13
14 : current-rule-set ( -- rule )
15     context get in-rule-set>> ;
16
17 : current-keywords ( -- keyword-map )
18     current-rule-set keywords>> ;
19
20 : token, ( from to id -- )
21     2over = [ 3drop ] [ >r line get subseq r> <token> , ] if ;
22
23 : prev-token, ( id -- )
24     >r last-offset get position get r> token,
25     position get last-offset set ;
26
27 : next-token, ( len id -- )
28     >r position get 2dup + r> token,
29     position get + dup 1- position set last-offset set ;
30
31 : push-context ( rules -- )
32     context [ <line-context> ] change ;
33
34 : pop-context ( -- )
35     context get parent>>
36     f >>in-rule context set ;
37
38 : init-token-marker ( main prev-context line -- )
39     line set
40     [ ] [ f <line-context> ] ?if context set
41     0 position set
42     0 last-offset set
43     0 whitespace-end set
44     process-escape? on ;