]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/marker/state/state.factor
Delete empty unit tests files, remove 1- and 1+, reorder IN: lines in a lot of places...
[factor.git] / basis / xmode / marker / state / state.factor
1 ! Copyright (C) 2007, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: xmode.marker.context xmode.rules accessors
4 xmode.tokens namespaces make kernel sequences assocs math ;
5 IN: xmode.marker.state
6
7 ! Based on org.gjt.sp.jedit.syntax.TokenMarker
8
9 SYMBOLS: line last-offset position context
10  whitespace-end seen-whitespace-end?
11  escaped?  process-escape?  delegate-end-escaped? ;
12
13 : current-rule ( -- rule )
14     context get in-rule>> ;
15
16 : current-rule-set ( -- rule )
17     context get in-rule-set>> ;
18
19 : current-keywords ( -- keyword-map )
20     current-rule-set keywords>> ;
21
22 : token, ( from to id -- )
23     2over = [ 3drop ] [ [ line get subseq ] dip <token> , ] if ;
24
25 : prev-token, ( id -- )
26     [ last-offset get position get ] dip token,
27     position get last-offset set ;
28
29 : next-token, ( len id -- )
30     [ position get 2dup + ] dip token,
31     position get + dup 1 - position set last-offset set ;
32
33 : push-context ( rules -- )
34     context [ <line-context> ] change ;
35
36 : pop-context ( -- )
37     context get parent>>
38     f >>in-rule context set ;
39
40 : init-token-marker ( main prev-context line -- )
41     line set
42     [ ] [ f <line-context> ] ?if context set
43     0 position set
44     0 last-offset set
45     0 whitespace-end set
46     process-escape? on ;