1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.vectomatic.svg.edit.client.engine;
19
20
21
22
23
24
25
26
27 public class IdRefTokenizer {
28 protected static final String START = "url(#";
29 protected static final String END = ")";
30 static class IdRefToken {
31 public static final int IDREF = 1;
32 public static final int DATA = 2;
33 int kind;
34 String value;
35 public int getKind() {
36 return kind;
37 }
38 public String getValue() {
39 return value;
40 }
41 }
42 protected IdRefToken token = new IdRefToken();
43 protected String str;
44 protected int index1;
45 protected int index2;
46
47 public void tokenize(String str) {
48 this.str = str;
49 index1 = 0;
50 index2 = 0;
51 token.kind = IdRefToken.IDREF;
52 }
53 public IdRefToken nextToken() {
54 if (index1 != str.length()) {
55 if (token.kind == IdRefToken.IDREF) {
56 token.kind = IdRefToken.DATA;
57 index2 = str.indexOf(START, index1);
58 if (index2 != -1) {
59 token.value = str.substring(index1, index2 + START.length());
60 index1 = index2 + START.length();
61 } else {
62 token.value = str.substring(index1);
63 index1 = str.length();
64 }
65 } else {
66 index2 = str.indexOf(END, index1);
67 if (index2 != -1) {
68 token.value = str.substring(index1, index2);
69 index1 = index2;
70 token.kind = IdRefToken.IDREF;
71 } else {
72 token.value = str.substring(index1);
73 index1 = str.length();
74 }
75 }
76 return token;
77 }
78 return null;
79 }
80 }