]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/winterwell.markdown/src/winterwell/markdown/editors/ListRule.java b/bundles/winterwell.markdown/src/winterwell/markdown/editors/ListRule.java
new file mode 100644 (file)
index 0000000..11ff3f0
--- /dev/null
@@ -0,0 +1,77 @@
+/**\r
+ * Copyright winterwell Mathematics Ltd.\r
+ * @author Daniel Winterstein\r
+ * 11 Jan 2007\r
+ */\r
+package winterwell.markdown.editors;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Arrays;\r
+\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.text.rules.ICharacterScanner;\r
+import org.eclipse.jface.text.rules.IRule;\r
+import org.eclipse.jface.text.rules.IToken;\r
+import org.eclipse.jface.text.rules.Token;\r
+\r
+/**\r
+ * \r
+ *\r
+ * @author Daniel Winterstein\r
+ */\r
+public class ListRule implements IRule {\r
+       private ArrayList<Integer> markerList;\r
+       protected IToken fToken;\r
+               \r
+       public ListRule(IToken token) { \r
+               Assert.isNotNull(token);\r
+               fToken= token;\r
+       }\r
+       \r
+\r
+       /*\r
+        * @see IRule#evaluate(ICharacterScanner)\r
+        * @since 2.0\r
+        */\r
+       public IToken evaluate(ICharacterScanner scanner) {\r
+               if (scanner.getColumn() != 0) {\r
+                       return Token.UNDEFINED;\r
+               }\r
+//             // Fast mode\r
+//             if (scanner.read() != '-') {\r
+//                     scanner.unread();\r
+//                     return Token.UNDEFINED;\r
+//             }\r
+//             if (Character.isWhitespace(scanner.read())) {\r
+//                     return fToken;\r
+//             }\r
+//             scanner.unread();\r
+//             scanner.unread();\r
+//             return Token.UNDEFINED;\r
+//             // Fast mode\r
+               int readCount = 0;\r
+               int c;\r
+               while ((c = scanner.read()) != ICharacterScanner.EOF) {\r
+                       readCount++;\r
+                       if( !Character.isWhitespace( c ) ) {\r
+                               int after = scanner.read();\r
+//                             readCount++;\r
+                               scanner.unread();\r
+//                             if ( markerList.contains(c) && Character.isWhitespace( after ) ) {\r
+                               if ( (c == '-' || c == '+' || c == '*') \r
+                                               && Character.isWhitespace( after ) ) {\r
+                                       return fToken;\r
+                               } else {\r
+                                       for (; readCount > 0; readCount--)\r
+                                               scanner.unread();\r
+                                       return Token.UNDEFINED;\r
+                               }\r
+                       }\r
+               }\r
+               // Reached ICharacterScanner.EOF\r
+               for (; readCount > 0; readCount--)\r
+                       scanner.unread();\r
+               return Token.UNDEFINED;\r
+       }\r
+}\r