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