Improved package structure
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / asm / editor / rules / AsmLabelRule.java
1 package net.mograsim.plugin.asm.editor.rules;\r
2 \r
3 import org.eclipse.core.runtime.Assert;\r
4 import org.eclipse.jface.text.rules.ICharacterScanner;\r
5 import org.eclipse.jface.text.rules.IRule;\r
6 import org.eclipse.jface.text.rules.IToken;\r
7 import org.eclipse.jface.text.rules.Token;\r
8 \r
9 public class AsmLabelRule implements IRule\r
10 {\r
11 \r
12         /** The token to be returned when this rule is successful */\r
13         protected IToken fToken;\r
14 \r
15         /**\r
16          * Creates a rule which will return the specified token when a numerical sequence is detected.\r
17          *\r
18          * @param token the token to be returned\r
19          */\r
20         public AsmLabelRule(IToken token)\r
21         {\r
22                 Assert.isNotNull(token);\r
23                 fToken = token;\r
24         }\r
25 \r
26         @Override\r
27         public IToken evaluate(ICharacterScanner scanner)\r
28         {\r
29                 int c = scanner.read();\r
30                 int i = 1;\r
31                 if (Character.isJavaIdentifierStart(c))\r
32                 {\r
33                         do\r
34                         {\r
35                                 c = scanner.read();\r
36                                 i++;\r
37                         } while (Character.isJavaIdentifierPart(c));\r
38                         if (c == ':')\r
39                                 return fToken;\r
40                         return abort(scanner, i);\r
41                 }\r
42                 scanner.unread();\r
43                 return Token.UNDEFINED;\r
44         }\r
45 \r
46         private static IToken abort(ICharacterScanner scanner, int i)\r
47         {\r
48                 for (int j = 0; j < i; j++)\r
49                         scanner.unread();\r
50                 return Token.UNDEFINED;\r
51         }\r
52 }