1 /*******************************************************************************
2 * Copyright (c) 2004 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Common Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/cpl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package net.sourceforge.phpdt.internal.core.util;
13 import net.sourceforge.phpdt.core.compiler.CharOperation;
14 import net.sourceforge.phpdt.internal.core.JavaElement;
16 public class MementoTokenizer {
17 private static final String COUNT = Character.toString(JavaElement.JEM_COUNT);
18 private static final String JAVAPROJECT = Character.toString(JavaElement.JEM_JAVAPROJECT);
19 private static final String PACKAGEFRAGMENTROOT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENTROOT);
20 private static final String PACKAGEFRAGMENT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENT);
21 private static final String FIELD = Character.toString(JavaElement.JEM_FIELD);
22 private static final String METHOD = Character.toString(JavaElement.JEM_METHOD);
23 private static final String INITIALIZER = Character.toString(JavaElement.JEM_INITIALIZER);
24 private static final String COMPILATIONUNIT = Character.toString(JavaElement.JEM_COMPILATIONUNIT);
25 // private static final String CLASSFILE = Character.toString(JavaElement.JEM_CLASSFILE);
26 private static final String TYPE = Character.toString(JavaElement.JEM_TYPE);
27 private static final String PACKAGEDECLARATION = Character.toString(JavaElement.JEM_PACKAGEDECLARATION);
28 private static final String IMPORTDECLARATION = Character.toString(JavaElement.JEM_IMPORTDECLARATION);
29 private static final String LOCALVARIABLE = Character.toString(JavaElement.JEM_LOCALVARIABLE);
31 private final char[] memento;
32 private final int length;
33 private int index = 0;
35 public MementoTokenizer(String memento) {
36 this.memento = memento.toCharArray();
37 this.length = this.memento.length;
40 public boolean hasMoreTokens() {
41 return this.index < this.length;
44 public String nextToken() {
45 int start = this.index;
46 StringBuffer buffer = null;
47 switch (this.memento[this.index++]) {
48 case JavaElement.JEM_ESCAPE:
49 buffer = new StringBuffer();
50 buffer.append(this.memento[this.index]);
53 case JavaElement.JEM_COUNT:
55 case JavaElement.JEM_JAVAPROJECT:
57 case JavaElement.JEM_PACKAGEFRAGMENTROOT:
58 return PACKAGEFRAGMENTROOT;
59 case JavaElement.JEM_PACKAGEFRAGMENT:
60 return PACKAGEFRAGMENT;
61 case JavaElement.JEM_FIELD:
63 case JavaElement.JEM_METHOD:
65 case JavaElement.JEM_INITIALIZER:
67 case JavaElement.JEM_COMPILATIONUNIT:
68 return COMPILATIONUNIT;
69 // case JavaElement.JEM_CLASSFILE:
71 case JavaElement.JEM_TYPE:
73 case JavaElement.JEM_PACKAGEDECLARATION:
74 return PACKAGEDECLARATION;
75 case JavaElement.JEM_IMPORTDECLARATION:
76 return IMPORTDECLARATION;
77 case JavaElement.JEM_LOCALVARIABLE:
80 loop: while (this.index < this.length) {
81 switch (this.memento[this.index]) {
82 case JavaElement.JEM_ESCAPE:
83 if (buffer == null) buffer = new StringBuffer();
84 buffer.append(CharOperation.subarray(this.memento, start, this.index));
87 case JavaElement.JEM_COUNT:
88 case JavaElement.JEM_JAVAPROJECT:
89 case JavaElement.JEM_PACKAGEFRAGMENTROOT:
90 case JavaElement.JEM_PACKAGEFRAGMENT:
91 case JavaElement.JEM_FIELD:
92 case JavaElement.JEM_METHOD:
93 case JavaElement.JEM_INITIALIZER:
94 case JavaElement.JEM_COMPILATIONUNIT:
95 // case JavaElement.JEM_CLASSFILE:
96 case JavaElement.JEM_TYPE:
97 case JavaElement.JEM_PACKAGEDECLARATION:
98 case JavaElement.JEM_IMPORTDECLARATION:
99 case JavaElement.JEM_LOCALVARIABLE:
104 if (buffer != null) {
105 buffer.append(CharOperation.subarray(this.memento, start, this.index));
106 return buffer.toString();
108 return new String(CharOperation.subarray(this.memento, start, this.index));