class Asciidoctor::Table

Public: Methods and constants for managing AsciiDoc table content in a document. It supports all three of AsciiDoc's table formats: psv, dsv and csv.

Constants

ALIGNMENTS

Public: A Hash mapping alignment abbreviations to alignments (horizontal and vertial) that can be applies to a table column or cell

BLANK_LINE_PATTERN

Public: A compiled Regexp to match a blank line

DATA_FORMATS

Public: An Array of String keys that represent the table formats in AsciiDoc

DEFAULT_DATA_FORMAT

Public: A String key that specifies the default table format in AsciiDoc (psv)

DEFAULT_DELIMITERS

Public: A Hash mapping the AsciiDoc table formats to their default delimiters

TEXT_STYLES

Public: A Hash mapping styles abbreviations to styles that can be applied to a table column or cell

Attributes

caption[RW]

Public: Get/Set the String caption (unused, necessary for compatibility w/ next_block)

columns[RW]

Public: Get/Set the columns for this table

rows[RW]

Public: Get/Set the Rows struct for this table (encapsulates head, foot and body rows)

Public Class Methods

new(parent, attributes) click to toggle source
# File lib/asciidoctor/table.rb, line 60
def initialize(parent, attributes)
  super(parent, :table)
  # QUESTION since caption is on block, should it go to AbstractBlock?
  @caption = nil
  @rows = Rows.new([], [], [])
  @columns = []

  unless @attributes.has_key? 'tablepcwidth'
    # smell like we need a utility method here
    # to resolve an integer width from potential bogus input
    pcwidth = attributes['width']
    pcwidth_intval = pcwidth.to_i.abs
    if pcwidth_intval == 0 && pcwidth != "0" || pcwidth_intval > 100
      pcwidth_intval = 100
    end
    @attributes['tablepcwidth'] = pcwidth_intval
  end

  if @document.attributes.has_key? 'pagewidth'
    @attributes['tableabswidth'] ||=
        ((@attributes['tablepcwidth'].to_f / 100) * @document.attributes['pagewidth']).round
  end
end

Public Instance Methods

create_columns(col_specs) click to toggle source

Internal: Creates the Column objects from the column spec

returns nothing

# File lib/asciidoctor/table.rb, line 87
def create_columns(col_specs)
  total_width = 0
  @columns = col_specs.inject([]) {|collector, col_spec|
    total_width += col_spec['width']
    collector << Column.new(self, collector.size, col_spec)
    collector
  }

  if !@columns.empty?
    @attributes['colcount'] = @columns.size
    even_width = (100.0 / @columns.size).floor
    @columns.each {|c| c.assign_width(total_width, even_width) }
  end

  nil
end
render() click to toggle source

Public: Get the rendered String content for this Block. If the block has child blocks, the content method should cause them to be rendered and returned as content that can be included in the parent block's template.

# File lib/asciidoctor/table.rb, line 132
def render
  Debug.debug { "Now attempting to render for table my own bad #{self}" }
  Debug.debug { "Parent is #{@parent}" }
  Debug.debug { "Renderer is #{renderer}" }
  @document.playback_attributes @attributes
  renderer.render('block_table', self) 
end