1 package eu.svjatoslav.inspector.tokenizer;
3 import java.util.ArrayList;
6 public class Tokenizer {
8 private final List<Terminator> terminators = new ArrayList<Terminator>();
9 private final String source;
11 private int currentIndex = 0;
13 public Tokenizer(final String source) {
17 public void addTerminator(final String terminator, final boolean empty) {
19 terminators.add(new Terminator(terminator, empty));
22 public TokenizerMatch getToken() {
23 final StringBuffer result = new StringBuffer();
26 if (currentIndex >= source.length())
29 boolean accumulateCurrentChar = true;
31 findTerminator: for (final Terminator terminator : terminators)
32 if (terminatorMatches(terminator))
33 // empty space detected
34 if (terminator.empty) {
35 currentIndex += terminator.value.length();
36 if (result.length() > 0)
37 return new TokenizerMatch(result.toString(),
40 accumulateCurrentChar = false;
43 } else if (result.length() > 0)
44 return new TokenizerMatch(result.toString(), terminator);
46 currentIndex += terminator.value.length();
47 return new TokenizerMatch(terminator.value, terminator);
50 if (accumulateCurrentChar) {
51 result.append(source.charAt(currentIndex));
58 public boolean terminatorMatches(final Terminator terminator) {
59 if ((currentIndex + terminator.value.length()) > source.length())
62 for (int i = 0; i < terminator.value.length(); i++)
63 if (terminator.value.charAt(i) != source.charAt(i + currentIndex))