[LON-CAPA-cvs] cvs: loncom /xml lontable.pm

foxr lon-capa-cvs-allow@mail.lon-capa.org
Tue, 25 Nov 2008 12:27:35 -0000


foxr		Tue Nov 25 12:27:35 2008 EDT

  Modified files:              
    /loncom/xml	lontable.pm 
  Log:
  Bunch o' coding.
  
  
Index: loncom/xml/lontable.pm
diff -u loncom/xml/lontable.pm:1.1 loncom/xml/lontable.pm:1.2
--- loncom/xml/lontable.pm:1.1	Mon Nov 24 11:56:53 2008
+++ loncom/xml/lontable.pm	Tue Nov 25 12:27:34 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 #  Generating TeX tables.
 #
-# $Id: lontable.pm,v 1.1 2008/11/24 11:56:53 foxr Exp $
+# $Id: lontable.pm,v 1.2 2008/11/25 12:27:34 foxr Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -239,7 +239,7 @@
     my $self = {
 	alignment      => "left",
 	outer_border   => 0,
-	inner_borders  => 0,
+	inner_border  => 0,
 	caption        => "",
 	theme          => "Zurich",
 	column_count   => 0,
@@ -259,7 +259,234 @@
 #-------------------------------------------------------------------------
 #
 #  Methods that get/set table global configuration.
+#
+
+=pod
+
+=head2 Gets/set alignment.  
+
+If the method is passed a new alignment value, that replaces the current one.
+Regardless, the current alignment is used:
+
+=head3 Examples:
+
+ my $align = $table->alignment(); # Return current alignment
+ $table->alignment("center");     # Attempt centered alignment.
+
+=cut
+
+sub alignment {
+    my ($self, $new_value) = @_;
+
+    if (defined($new_value)) {
+	$self->{alignment} = $new_value;
+    }
+    return $self->{alignment};
+}
+
+=pod
+
+=head2 table_border
+
+Set or get the presence of an outer border in the table.
+If passed a parameter, that parameter replaces the current request
+for or not for an outer border. Regardless, the function returns
+the final value of the outer_border request.
+
+=head3 Examples:
+
+  $table->table_border(1);      # Request an outer border.
+  my $outer_requested = $table->table_border();
+
+=cut
+
+sub table_border {
+    my ($self, $new_value) = @_;
+
+    if (defined($new_value)) {
+	$self->{outer_border} = $new_value;
+    }
+    return $self->{outer_border};
+}
+
+
+=pod
+
+=head2 cell_border
+
+Set or get the presence of a request for cells to have borders
+drawn around them.  If a paramter is passed, it will be treated as
+a new value for the cell border configuration.  Regardless,the final
+value of that configuration parameter is returned.
+
+=head3 Examples:
+
+ my $cell_borders = $table->cell_border(); # ask if cell borders are requested.
+ $table->cell_border(1);	# Request cell borders.
+
+=cut
+
+sub cell_borders {
+    my ($self, $new_value) = @_;
+
+    if (defined($new_value)) {
+	$self->{inner_border} = $new_value;
+    }
+    reurn $self->{inner_border};
+}
+
+=pod
+
+=head2 caption
+
+Gets and/or sets the caption string for the table.  The caption string appears to label
+the table.  If a parameter is supplied it will become the new caption string.k
+
+=head3 Examples:
+
+
+  $my caption = $table->caption();
+  $table->caption("This is the new table caption");
+
+=cut
+
+sub caption {
+    my ($self, $new_value) = @_;
+
+    if (defined($new_value)) {
+	$self->catpion = $new_value;
+    }
+
+    return $self->caption;
+}
+
+=pod
+
+=head2 theme
+
+Gets and optionally sets the table theme.  The table theme describes how the
+table will be typset by the table package.  If a parameter is supplied it
+will be the new theme selection.
+
+=head3 Examples:
 
+  my $theme = $table->theme();
+  $table->theme("Dresden");
+
+=cut
+
+sub theme {
+    my ($self, $new_value) = @_;
+
+    if (defined($new_value)) {
+	$self->theme = $new_value;
+    }
+    return $self->theme;
+}
+
+=pod
+
+=head2 start_row
+
+Begins a new row in the table.  If a row is already open, that row is
+closed off prior to starting the new row.  Rows can have the following attributes
+which are specified by an optional hash passed in to this function.
+
+=over 3
+
+=item default_halign
+
+The default horizontal alignment of the row. This can be "left", "center", or "right"
+
+=item default_valign
+
+The default vertical alignment of the row.  This can be "top", "center", or "bottom"
+
+=back
+
+=head3 Examples:
+
+  $table_start_row();                  # no attributes.
+  $table_start({default_halign => "center",
+                default_valign => "bottom"}); # Create setting the attrbutes.
+
+=cut
+
+sub start_row {
+    my ($self, %config) = @_;
+
+    if ($self->row_open) { 
+	$self->end_row;
+    }
+    my $row_hash = {
+	is_header      =>  0,
+	default_halign => "left",
+	default_valign => "top",
+	cells          => []
+    };
+
+    # Override the defaults if the config hash is present:
+
+    if (defined(%config)) {
+	foreach my $key  (keys %config) {
+	    $row_hash->{$key} = $config{$key};
+	}
+    }
+    
+    my $rows = $self->{rows};
+    push(@$rows, $row_hash);
+
+    $self->row_open = 1;	# Row is now open and ready for business.
+}
+
+=pod
+
+=head2  end_row 
+
+Closes off a row.  Once closed, cells cannot be added to this row again.
+
+=head3 Examples:
+
+   $table->close_row();
+
+
+=cut
+
+sub close_row {
+    my ($self) = @_;
+
+    if ($self->row_open) {
+	
+	# Mostly we need to determine if this row has the maximum
+	# cell count of any row in existence in the table:
+
+	my $row        = $self->{rows}[-1];
+	my $cells      = $row->{cells};
+	my $cell_count = scalar(@$cells);
+	if ($cell_count > $self->{column_count}) {
+	    $self->{column_count} = $cell_count;
+	}
+
+	$self->row_closed;
+    }
+}
+
+=pod
+
+=head2 start_header
+
+Starts a row that is a header.  This is the same as start_row,but the is_header flag
+is set to true.
+
+
+=cut
+
+sub start_header {
+    my ($self, %config) = @_;
+
+    $self->start_row(%config);
+    $self->{rows}[-1]->is_header = 1;
+}