protected void append(Appendable appendable, ColumnState state, CellBuffer cellBuffer) throws IOException {

    boolean doIndentThisLine = false;
    int width = state.getWidth();
    if (state.isComplete()) {
      cellBuffer.reset(width);
    } else {
      TextColumnInfo columnInfo = state.getColumnInfo();
      if (width >= TextColumnInfo.MINIMUM_WIDTH_FOR_INDENT_AND_HYPHEN) {
        if (state.indent) {
          doIndentThisLine = true;
          width = width - columnInfo.getIndent().length();
          // omit specific characters at beginning of this line...
          String text = state.getText();
          while (isIn(text.charAt(state.textIndex), columnInfo.getOmitChars())) {
            state.textIndex++;
            if (state.textIndex >= state.currentSegment.endIndex) {
              boolean todo = state.proceedTextSegment();
              if (!todo) {
                break;
              }
            }
          }
        }
        state.indent = true;
      }
      // clear to reuse...
      cellBuffer.reset(width);
      // fill up buffer with cells payload...
      appendCellBuffer(state, cellBuffer);
    }
    // append payload with indent and alignment...
    appendWithAlignment(appendable, state, doIndentThisLine, cellBuffer);
  }
protected void append ( Appendable appendable , ColumnState state , CellBuffer cellBuffer ) throws IOException { boolean doIndentThisLine = false ; int width = state . getWidth ( ) ; if ( state . isComplete ( ) ) { cellBuffer . reset ( width ) ; } else { TextColumnInfo columnInfo = state . getColumnInfo ( ) ; if ( width >= TextColumnInfo . MINIMUM_WIDTH_FOR_INDENT_AND_HYPHEN ) { if ( state . indent ) { doIndentThisLine = true ; width = width - columnInfo . getIndent ( ) . length ( ) ; String text = state . getText ( ) ; while ( isIn ( text . charAt ( state . textIndex ) , columnInfo . getOmitChars ( ) ) ) { state . textIndex ++ ; if ( state . textIndex >= state . currentSegment . endIndex ) { boolean todo = state . proceedTextSegment ( ) ; if ( ! todo ) { break ; } } } } state . indent = true ; } cellBuffer . reset ( width ) ; appendCellBuffer ( state , cellBuffer ) ; } appendWithAlignment ( appendable , state , doIndentThisLine , cellBuffer ) ; }
This method appends the text of a single cell (line of a single column).

@param appendable is the {@link Appendable} where to append the text to.
@param state the {@link ColumnState} of the current column where to fill a single cell.
@param cellBuffer is the {@link CellBuffer} for the payload of the current cell.
@throws IOException if caused by the {@link Appendable}.