in src/main/java/org/apache/bsf/util/cf/CodeFormatter.java [157:278]
private void printLine(final String line, final IndentWriter out) {
final char[] source = line.toCharArray();
char ch;
char quoteChar = ' ';
boolean inEscapeSequence = false;
boolean inString = false;
final StringBuilder tokBuf = new StringBuilder(), targetBuf = new StringBuilder(hangingIndent + line.length());
for (int i = 0; i < source.length; i++) {
ch = source[i];
if (inEscapeSequence) {
tokBuf.append(ch);
inEscapeSequence = false;
} else {
if (inString) {
switch (ch) {
case '\\':
tokBuf.append('\\');
inEscapeSequence = true;
break;
case '\'':
case '\"':
tokBuf.append(ch);
if (ch == quoteChar) {
addTok(targetBuf, tokBuf, out);
tokBuf.setLength(0);
inString = false;
}
break;
case 9: // pass thru tab characters...
tokBuf.append(ch);
break;
default:
if (ch > 31) {
tokBuf.append(ch);
}
break;
}
} else // !inString
{
if (inCPP_Comment) {
tokBuf.append(ch);
if (ch == '/' && i > 0 && source[i - 1] == '*') {
inCPP_Comment = false;
}
} else {
switch (ch) {
case '/':
tokBuf.append(ch);
if (i > 0 && source[i - 1] == '/') {
final String tokStr = tokBuf.append(source, i + 1, source.length - (i + 1)).toString();
out.println(indent, targetBuf.append(tokStr).toString());
return;
}
break;
case '*':
tokBuf.append(ch);
if (i > 0 && source[i - 1] == '/') {
inCPP_Comment = true;
}
break;
case '\'':
case '\"':
addTok(targetBuf, tokBuf, out);
tokBuf.setLength(0);
tokBuf.append(ch);
quoteChar = ch;
inString = true;
break;
case 9: // replace tab characters...
tokBuf.append(StringUtils.getChars(indentationStep, ' '));
break;
case '{':
tokBuf.append(ch);
origIndent += indentationStep;
break;
case '}':
tokBuf.append(ch);
origIndent -= indentationStep;
if (i == 0) {
indent = origIndent;
}
break;
default:
if (ch > 31) {
if (delimiters.indexOf(ch) != -1) {
addTok(targetBuf, tokBuf, out);
tokBuf.setLength(0);
tokBuf.append(ch);
} else if (stickyDelimiters.indexOf(ch) != -1) {
tokBuf.append(ch);
addTok(targetBuf, tokBuf, out);
tokBuf.setLength(0);
} else {
tokBuf.append(ch);
}
}
break;
}
}
}
}
}
if (tokBuf.length() > 0) {
addTok(targetBuf, tokBuf, out);
}
final String lastLine = targetBuf.toString().trim();
if (lastLine.length() > 0) {
out.println(indent, lastLine);
}
}