--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core.util;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.core.JavaElement;
+
+public class MementoTokenizer {
+ private static final String COUNT = Character.toString(JavaElement.JEM_COUNT);
+ private static final String JAVAPROJECT = Character.toString(JavaElement.JEM_JAVAPROJECT);
+ private static final String PACKAGEFRAGMENTROOT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENTROOT);
+ private static final String PACKAGEFRAGMENT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENT);
+ private static final String FIELD = Character.toString(JavaElement.JEM_FIELD);
+ private static final String METHOD = Character.toString(JavaElement.JEM_METHOD);
+ private static final String INITIALIZER = Character.toString(JavaElement.JEM_INITIALIZER);
+ private static final String COMPILATIONUNIT = Character.toString(JavaElement.JEM_COMPILATIONUNIT);
+// private static final String CLASSFILE = Character.toString(JavaElement.JEM_CLASSFILE);
+ private static final String TYPE = Character.toString(JavaElement.JEM_TYPE);
+ private static final String PACKAGEDECLARATION = Character.toString(JavaElement.JEM_PACKAGEDECLARATION);
+ private static final String IMPORTDECLARATION = Character.toString(JavaElement.JEM_IMPORTDECLARATION);
+ private static final String LOCALVARIABLE = Character.toString(JavaElement.JEM_LOCALVARIABLE);
+
+ private final char[] memento;
+ private final int length;
+ private int index = 0;
+
+ public MementoTokenizer(String memento) {
+ this.memento = memento.toCharArray();
+ this.length = this.memento.length;
+ }
+
+ public boolean hasMoreTokens() {
+ return this.index < this.length;
+ }
+
+ public String nextToken() {
+ int start = this.index;
+ StringBuffer buffer = null;
+ switch (this.memento[this.index++]) {
+ case JavaElement.JEM_ESCAPE:
+ buffer = new StringBuffer();
+ buffer.append(this.memento[this.index]);
+ start = ++this.index;
+ break;
+ case JavaElement.JEM_COUNT:
+ return COUNT;
+ case JavaElement.JEM_JAVAPROJECT:
+ return JAVAPROJECT;
+ case JavaElement.JEM_PACKAGEFRAGMENTROOT:
+ return PACKAGEFRAGMENTROOT;
+ case JavaElement.JEM_PACKAGEFRAGMENT:
+ return PACKAGEFRAGMENT;
+ case JavaElement.JEM_FIELD:
+ return FIELD;
+ case JavaElement.JEM_METHOD:
+ return METHOD;
+ case JavaElement.JEM_INITIALIZER:
+ return INITIALIZER;
+ case JavaElement.JEM_COMPILATIONUNIT:
+ return COMPILATIONUNIT;
+// case JavaElement.JEM_CLASSFILE:
+// return CLASSFILE;
+ case JavaElement.JEM_TYPE:
+ return TYPE;
+ case JavaElement.JEM_PACKAGEDECLARATION:
+ return PACKAGEDECLARATION;
+ case JavaElement.JEM_IMPORTDECLARATION:
+ return IMPORTDECLARATION;
+ case JavaElement.JEM_LOCALVARIABLE:
+ return LOCALVARIABLE;
+ }
+ loop: while (this.index < this.length) {
+ switch (this.memento[this.index]) {
+ case JavaElement.JEM_ESCAPE:
+ if (buffer == null) buffer = new StringBuffer();
+ buffer.append(CharOperation.subarray(this.memento, start, this.index));
+ start = ++this.index;
+ break;
+ case JavaElement.JEM_COUNT:
+ case JavaElement.JEM_JAVAPROJECT:
+ case JavaElement.JEM_PACKAGEFRAGMENTROOT:
+ case JavaElement.JEM_PACKAGEFRAGMENT:
+ case JavaElement.JEM_FIELD:
+ case JavaElement.JEM_METHOD:
+ case JavaElement.JEM_INITIALIZER:
+ case JavaElement.JEM_COMPILATIONUNIT:
+// case JavaElement.JEM_CLASSFILE:
+ case JavaElement.JEM_TYPE:
+ case JavaElement.JEM_PACKAGEDECLARATION:
+ case JavaElement.JEM_IMPORTDECLARATION:
+ case JavaElement.JEM_LOCALVARIABLE:
+ break loop;
+ }
+ this.index++;
+ }
+ if (buffer != null) {
+ buffer.append(CharOperation.subarray(this.memento, start, this.index));
+ return buffer.toString();
+ } else {
+ return new String(CharOperation.subarray(this.memento, start, this.index));
+ }
+ }
+
+}