private void printLine()

in src/main/java/org/apache/bsf/util/cf/CodeFormatter.java [174:316]


  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 StringBuffer tokBuf           = new StringBuffer(),
                 targetBuf        = new StringBuffer(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);
    }
  }