package com.hundsun.ares.studio.internal.core;
import com.hundsun.ares.studio.internal.core.ARESElement;
public class MementoTokenizer {
private static final String ARESPROJECT = Character.toString(ARESElement.AEM_ARESPROJECT);
private static final String MODULEROOT = Character.toString(ARESElement.AEM_MODULEROOT);
private static final String MODULE = Character.toString(ARESElement.AEM_MODULE);
private static final String COMPILATIONUNIT = Character.toString(ARESElement.AEM_RESOURCE);
private static final String LIB = Character.toString(ARESElement.AEM_LIB);
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 ARESElement.AEM_ESCAPE:
buffer = new StringBuffer();
buffer.append(this.memento[this.index]);
start = ++this.index;
break;
case ARESElement.AEM_ARESPROJECT:
return ARESPROJECT;
case ARESElement.AEM_MODULEROOT:
return MODULEROOT;
case ARESElement.AEM_MODULE:
return MODULE;
case ARESElement.AEM_RESOURCE:
return COMPILATIONUNIT;
case ARESElement.AEM_LIB:
return LIB;
}
loop: while (this.index < this.length) {
switch (this.memento[this.index]) {
case ARESElement.AEM_ESCAPE:
if (buffer == null) buffer = new StringBuffer();
buffer.append(this.memento, start, this.index - start);
start = ++this.index;
break;
case ARESElement.AEM_ARESPROJECT:
case ARESElement.AEM_MODULEROOT:
case ARESElement.AEM_MODULE:
case ARESElement.AEM_RESOURCE:
case ARESElement.AEM_LIB:
break loop;
}
this.index++;
}
if (buffer != null) {
buffer.append(this.memento, start, this.index - start);
return buffer.toString();
} else {
return new String(this.memento, start, this.index - start);
}
}
}