Methods Summary |
---|
private static java.lang.String | fixEscapeSequences(java.lang.String inputString)
int inputLength = inputString.length();
StringBuffer buffer = new StringBuffer();
buffer.ensureCapacity(inputLength);
for (int i = 0; i < inputLength; ++i) {
char currentChar = inputString.charAt(i);
if (currentChar != '\\") {
buffer.append(currentChar);
} else {
if (i < inputLength - 1) {
char nextChar = inputString.charAt(i + 1);
buffer.append(nextChar);
// force a skip over the next character too
++i;
} else {
buffer.append(currentChar);
}
}
}
return buffer.toString();
|
public int | getCurrentToken()Retrieve current token.
return currentToken;
|
public java.lang.String | getCurrentTokenValue()
return currentTokenValue;
|
private static boolean | isControlChar(char c)
return Character.isISOControl(c);
|
private static boolean | isSpecialChar(char c)
boolean lAnswer = false;
switch(c) {
case '(":
case ')":
case '<":
case '>":
case '@":
case ',":
case ';":
case ':":
case '\\":
case '"":
case '/":
case '[":
case ']":
case '?":
case '=":
lAnswer = true;
break;
}
return lAnswer;
|
private static boolean | isStringTokenChar(char c)
return !isSpecialChar(c) && !isControlChar(c) && !isWhiteSpaceChar(c);
|
private static boolean | isWhiteSpaceChar(char c)
return Character.isWhitespace(c);
|
public static java.lang.String | nameForToken(int token)
String name = "really unknown";
switch(token) {
case UNKNOWN_TOKEN:
name = "unknown";
break;
case START_TOKEN:
name = "start";
break;
case STRING_TOKEN:
name = "string";
break;
case EOI_TOKEN:
name = "EOI";
break;
case SLASH_TOKEN:
name = "'/'";
break;
case SEMICOLON_TOKEN:
name = "';'";
break;
case EQUALS_TOKEN:
name = "'='";
break;
}
return name;
|
public int | nextToken()
if (dataIndex < dataLength) {
// skip white space
while ((dataIndex < dataLength) &&
(isWhiteSpaceChar(data.charAt(dataIndex)))) {
++dataIndex;
}
if (dataIndex < dataLength) {
// examine the current character and see what kind of token we have
char c = data.charAt(dataIndex);
if (isAutoquoting) {
if (c == ';" || c == '=") {
currentToken = c;
currentTokenValue = new Character(c).toString();
++dataIndex;
} else {
processAutoquoteToken();
}
} else {
if (isStringTokenChar(c)) {
processStringToken();
} else if ((c == '/") || (c == ';") || (c == '=")) {
currentToken = c;
currentTokenValue = new Character(c).toString();
++dataIndex;
} else {
currentToken = UNKNOWN_TOKEN;
currentTokenValue = new Character(c).toString();
++dataIndex;
}
}
} else {
currentToken = EOI_TOKEN;
currentTokenValue = null;
}
} else {
currentToken = EOI_TOKEN;
currentTokenValue = null;
}
return currentToken;
|
private void | processAutoquoteToken()
// capture the initial index
int initialIndex = dataIndex;
// now skip to the 1st non-escaped autoquote termination character
// XXX - doesn't actually consider escaping
boolean foundTerminator = false;
while ((dataIndex < dataLength) && !foundTerminator) {
char c = data.charAt(dataIndex);
if (c != autoquoteChar) {
++dataIndex;
} else {
foundTerminator = true;
}
}
currentToken = STRING_TOKEN;
currentTokenValue =
fixEscapeSequences(data.substring(initialIndex, dataIndex));
|
private void | processStringToken()
// capture the initial index
int initialIndex = dataIndex;
// skip to 1st non string token character
while ((dataIndex < dataLength) &&
isStringTokenChar(data.charAt(dataIndex))) {
++dataIndex;
}
currentToken = STRING_TOKEN;
currentTokenValue = data.substring(initialIndex, dataIndex);
|
public void | setIsAutoquoting(boolean value)Set whether auto-quoting is on or off.
Auto-quoting means that all characters after the first
non-whitespace, non-control character up to the auto-quote
terminator character or EOI (minus any whitespace immediatley
preceeding it) is considered a token.
This is required for handling command strings in a mailcap entry.
isAutoquoting = value;
|