[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;
+}