Diff for /loncom/xml/lontable.pm between versions 1.2 and 1.3

version 1.2, 2008/11/25 12:27:34 version 1.3, 2008/12/01 12:25:06
Line 77  Opens a new table row. Line 77  Opens a new table row.
   
 Closes a table row.  Closes a table row.
   
 =item start_header  
   
 Starts a new row that has the header attribute (e.g. <th> tagged row).  
 header rows are ended with an end_row just like any ordinary row.  
   
 =item configure_row  =item configure_row
   
 Modifies a configuration item in the currently open row.  Modifies a configuration item in the currently open row.
Line 94  Returns the generated table string. Line 89  Returns the generated table string.
   
 Configures a table's global configuration.  Configures a table's global configuration.
   
   =item add_cell
   
   Add and configure a cell to the current row.6
   
 =back  =back
   
 =cut  =cut
Line 181  Each row of table data is an element of Line 180  Each row of table data is an element of
   
 =over 3  =over 3
   
 =item is_header  
   
 True if the user wants to format this row like a header.  This row will be used to generate  
 the table header.  All header rows will be gathered together into the table header.  If there  
 are multiple table headers interspersed with non table header data, this can lead to some   
 surprises.  
   
 =item default_halign   =item default_halign 
   0
 Default horizontal alignment for cells in this row.  Default horizontal alignment for cells in this row.
   
 =item default_valign  =item default_valign
Line 203  The contents of each element of this has Line 196  The contents of each element of this has
   
 =over 3  =over 3
   
   =item header
   
   If present, the row is a 'header' that is it was made via the
   <th> tag.
   
 =item halign  =item halign
   
 If present, overrides the row default horizontal alignment.  If present, overrides the row default horizontal alignment.
Line 256  sub new { Line 254  sub new {
     return $self;      return $self;
 }  }
   
   
 #-------------------------------------------------------------------------  #-------------------------------------------------------------------------
 #  #
 #  Methods that get/set table global configuration.  #  Methods that get/set table global configuration.
Line 419  sub start_row { Line 418  sub start_row {
  $self->end_row;   $self->end_row;
     }      }
     my $row_hash = {      my $row_hash = {
  is_header      =>  0,  
  default_halign => "left",   default_halign => "left",
  default_valign => "top",   default_valign => "top",
  cells          => []   cells          => []
Line 462  sub close_row { Line 460  sub close_row {
   
  my $row        = $self->{rows}[-1];   my $row        = $self->{rows}[-1];
  my $cells      = $row->{cells};   my $cells      = $row->{cells};
  my $cell_count = scalar(@$cells);   my $raw_cell_count = scalar(@$cells);
   
    # Need to iterate through the columns as 
    # colspans affect the count:
    #
    my $cell_count = 0;
    for (my $i =0; $i < $raw_cell_count; $i++) {
       $cell_count = $cell_count + $cells->[$i]->{colspan};
    }
  if ($cell_count > $self->{column_count}) {   if ($cell_count > $self->{column_count}) {
     $self->{column_count} = $cell_count;      $self->{column_count} = $cell_count;
  }   }
Line 473  sub close_row { Line 479  sub close_row {
   
 =pod  =pod
   
 =head2 start_header  =head2 configure_row
   
   Modify the configuration of a row.   If a row is not open, a new one will be opened.
   
   =head3 Parameters:
   
 Starts a row that is a header.  This is the same as start_row,but the is_header flag  config_hash - A hash that contains new values for the set of row confiuguration 
 is set to true.  items to be modified.  There is currently no check/penalty for items that are not in
   the set of defined configuration properties which are:
   
   =over 2
   
   =item default_halign
   
   The default horizontal alignment for text in  cells in the row.  This can be any of:
   "left", "right" or "center".
   
   =item default_valign
   
   The default vertical alignment for text in cells in the row.  This can be any of:
   
   "top", "bottom" or "center"
   
   =back 
   
 =cut  =cut
   
 sub start_header {  sub configure_row {
     my ($self, %config) = @_;      my ($self, $config) = @_;
   
     $self->start_row(%config);      if (!$self->row_open) {
     $self->{rows}[-1]->is_header = 1;   $self->start_row();
       }
       
       my $row = $self->{rows}[-1];
       foreach my $config_item (keys %$config) {
    $row->{$config_item} = $config->{$config_item};
       }
 }  }
   
   
   =pod
   
   =head2 add_cell
   
   Add a new cell to a row.  If there is a row above us, we need to 
   watch out for row spans that may force additional blank cell entries
   to fill in the span. 
   
   =head3 Parameters:
   
   =over 2
   
   =item text
   
   Text to put in the cell.
   
   =item cell_config
   
   Hash of configuration options that override the defaults.   The recognized options,
   and their defaults are:
   
   =over 2
   
   =item halign 
   
   If nonblank overrides the row's default for the cell's horizontal alignment.
   
   =item valign
   
   If nonblank, overrides the row's default for the cdell's vertical alignment.
   
   =item rowspan
   
   Number of rows the cell spans.
   
   =item colspan
   
   Number of columns the cell spans.
   
   =back
   
   =cut
   
   sub add_cell {
       my ($self, $text, $config) = @_;
   
       # If a row is not open, we must open it:
   
       if (!$self->row_open) {
    $self->start_row();
       }
   
       my $current_row   = $self->{rows}->[-1];
       my $current_cells = $current_row->{cells}; 
   
       # The way we handle row spans is to insert additional
       # blank cells as needed to reach this column.  Each
       # cell that is inserted is empty, but has a row span decreased by one
       # from the row above.  Column spans are propagated down from the row above
       # and handled when the table's LaTeX is generated.
       # There must be at least two rows in the row table to need to do this:
   
       my $row_count = scalar(@$self->{rows});
       if ($row_count > 1) {
    my $prior_row      = $self->{rows}->[-2];
    my $curr_colcount  = scaler(@$current_row->{cells});
    my $prior_colcount = scaler(@$prior_row->{cells});
   
    while (($curr_colcount < $prior_colcount) &&
          $prior_row->{cells}->[$curr_colcount]->{rowspan} > 1) {
       my %cell = $prior_row->{cells}->[$curr_colcount];
       %cell->{rowspan}--;
       %cell->{contents} = "";
       push(@$current_cells, \%cell);
    }
       }
       #
       # Now we're ready to build up our cell:
   
       my $cell = {
    rowspan    => 1,
    colspan    => 1,
    contents   => $text
       };
       
       if (defined($config)) {
    foreach my $key (keys(%$config)) {
       $cell->{$key} = $config->{$key};
    }
       }
       push(@$current_cells, $cell);
   }
   
   
 #   Mandatory initialization.  #   Mandatory initialization.
   

Removed from v.1.2  
changed lines
  Added in v.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>