private void printLine()

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);
        }
    }