/*
- * Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 3 of the GNU Lesser General Public License
- * or later as published by the Free Software Foundation.
+ * Svjatoslav Commons - shared library of common functionality. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
*/
-
package eu.svjatoslav.commons.string.tokenizer;
import java.util.ArrayList;
}
+ /**
+ *
+ * @return next @TokenizerMatch or <code>null</code> if end of input is reached.
+ * @throws InvalidSyntaxException
+ */
public TokenizerMatch getNextToken() throws InvalidSyntaxException {
tokenIndexes.push(currentIndex);
currentIndex += terminator.startSequence.length();
}
- private TokenizerMatch buildPreservedToken(StringBuilder token, Terminator terminator) throws InvalidSyntaxException {
+ /**
+ * @throws InvalidSyntaxException if end sequence is not found as is expected by given token.
+ */
+ private TokenizerMatch buildPreservedToken(StringBuilder token, Terminator terminator)
+ throws InvalidSyntaxException {
if (hasAccumulatedToken(token))
return new TokenizerMatch(token.toString(), null, terminator);
if (terminator.hasEndSequence())
- return buildComplexPreservedToken(terminator);
+ return buildTokenWithExpectedENdSequence(terminator);
else
- return buildSimplePreservedToken(terminator);
+ return buildTokenWithoutEndSequence(terminator);
}
- private TokenizerMatch buildSimplePreservedToken(Terminator terminator) {
+ private TokenizerMatch buildTokenWithoutEndSequence(Terminator terminator) {
currentIndex += terminator.startSequence.length();
return new TokenizerMatch(terminator.startSequence, null, terminator);
}
- private TokenizerMatch buildComplexPreservedToken(Terminator terminator) throws InvalidSyntaxException {
+ private TokenizerMatch buildTokenWithExpectedENdSequence(Terminator terminator) throws InvalidSyntaxException {
int endSequenceIndex = getEndSequenceIndex(terminator);
String reminder = source.substring(currentIndex + terminator.startSequence.length(), endSequenceIndex);
currentIndex = endSequenceIndex + terminator.endSequence.length();
return new TokenizerMatch(terminator.startSequence, reminder, terminator);
}
+ /**
+ * @throws InvalidSyntaxException if end of input is reached without finding expected end sequence.
+ */
private int getEndSequenceIndex(Terminator terminator) throws InvalidSyntaxException {
int endSequenceIndex = source.indexOf(terminator.endSequence,
currentIndex + terminator.startSequence.length());