# File lib/asciidoctor/table.rb, line 216
  def initialize column, cell_text, attributes = {}, opts = {}
    super column, :cell
    if column
      cell_style = (in_header_row = column.table.header_row?) ? nil : column.attributes['style']
      # REVIEW feels hacky to inherit all attributes from column
      update_attributes column.attributes
    else
      in_header_row = cell_style = nil
    end
    if attributes
      @colspan = attributes.delete 'colspan'
      @rowspan = attributes.delete 'rowspan'
      # TODO eventually remove the style attribute from the attributes hash
      #cell_style = attributes.delete 'style' unless in_header_row || !(attributes.key? 'style')
      cell_style = attributes['style'] unless in_header_row || !(attributes.key? 'style')
      if opts[:strip_text]
        if cell_style == :literal || cell_style == :verse
          cell_text = cell_text.rstrip
          cell_text = cell_text.slice 1, cell_text.length - 1 while cell_text.start_with? LF
        else
          cell_text = cell_text.strip
        end
      end
      update_attributes attributes
    else
      @colspan = nil
      @rowspan = nil
    end
    # NOTE only true for non-header rows
    if cell_style == :asciidoc
      # FIXME hide doctitle from nested document; temporary workaround to fix
      # nested document seeing doctitle and assuming it has its own document title
      parent_doctitle = @document.attributes.delete('doctitle')
      # NOTE we need to process the first line of content as it may not have been processed
      # the included content cannot expect to match conditional terminators in the remaining
      # lines of table cell content, it must be self-contained logic
      # QUESTION should we reset cell_text to nil?
      # QUESTION is is faster to check for :: before splitting?
      inner_document_lines = cell_text.split LF, -1
      if (unprocessed_line1 = inner_document_lines[0]).include? '::'
        preprocessed_lines = (PreprocessorReader.new @document, [unprocessed_line1]).readlines
        unless unprocessed_line1 == preprocessed_lines[0] && preprocessed_lines.size < 2
          inner_document_lines.shift
          inner_document_lines.unshift(*preprocessed_lines) unless preprocessed_lines.empty?
        end
      end unless inner_document_lines.empty?
      @inner_document = Document.new(inner_document_lines, :header_footer => false, :parent => @document, :cursor => opts[:cursor])
      @document.attributes['doctitle'] = parent_doctitle unless parent_doctitle.nil?
    end
    @text = cell_text
    @style = cell_style
  end