]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/winterwell.markdown/src/winterwell/markdown/editors/ListRule.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / winterwell.markdown / src / winterwell / markdown / editors / ListRule.java
1 /**
2  * Copyright winterwell Mathematics Ltd.
3  * @author Daniel Winterstein
4  * 11 Jan 2007
5  */
6 package winterwell.markdown.editors;
7
8 import java.util.ArrayList;
9 import java.util.List;
10 import java.util.Arrays;
11
12 import org.eclipse.core.runtime.Assert;
13 import org.eclipse.jface.text.rules.ICharacterScanner;
14 import org.eclipse.jface.text.rules.IRule;
15 import org.eclipse.jface.text.rules.IToken;
16 import org.eclipse.jface.text.rules.Token;
17
18 /**
19  * 
20  *
21  * @author Daniel Winterstein
22  */
23 public class ListRule implements IRule {
24         private ArrayList<Integer> markerList;
25         protected IToken fToken;
26                 
27         public ListRule(IToken token) { 
28                 Assert.isNotNull(token);
29                 fToken= token;
30         }
31         
32
33         /*
34          * @see IRule#evaluate(ICharacterScanner)
35          * @since 2.0
36          */
37         public IToken evaluate(ICharacterScanner scanner) {
38                 if (scanner.getColumn() != 0) {
39                         return Token.UNDEFINED;
40                 }
41 //              // Fast mode
42 //              if (scanner.read() != '-') {
43 //                      scanner.unread();
44 //                      return Token.UNDEFINED;
45 //              }
46 //              if (Character.isWhitespace(scanner.read())) {
47 //                      return fToken;
48 //              }
49 //              scanner.unread();
50 //              scanner.unread();
51 //              return Token.UNDEFINED;
52 //              // Fast mode
53                 int readCount = 0;
54                 int c;
55                 while ((c = scanner.read()) != ICharacterScanner.EOF) {
56                         readCount++;
57                         if( !Character.isWhitespace( c ) ) {
58                                 int after = scanner.read();
59 //                              readCount++;
60                                 scanner.unread();
61 //                              if ( markerList.contains(c) && Character.isWhitespace( after ) ) {
62                                 if ( (c == '-' || c == '+' || c == '*') 
63                                                 && Character.isWhitespace( after ) ) {
64                                         return fToken;
65                                 } else {
66                                         for (; readCount > 0; readCount--)
67                                                 scanner.unread();
68                                         return Token.UNDEFINED;
69                                 }
70                         }
71                 }
72                 // Reached ICharacterScanner.EOF
73                 for (; readCount > 0; readCount--)
74                         scanner.unread();
75                 return Token.UNDEFINED;
76         }
77 }