File:
[LON-CAPA] /
loncom /
xml /
lontable.pm
Revision
1.1:
download - view:
text,
annotated -
select for diffs
Mon Nov 24 11:56:53 2008 UTC (15 years, 5 months ago) by
foxr
Branches:
MAIN
CVS tags:
HEAD
Initial definition of the data structures and implementation of the
new operator.
This file will contain an object oriented interface to the data structures
needed to define a table in 'tex' mode and generate it using the
Latex::Table package.
1: # The LearningOnline Network with CAPA
2: # Generating TeX tables.
3: #
4: # $Id: lontable.pm,v 1.1 2008/11/24 11:56:53 foxr Exp $
5: #
6: #
7: # Copyright Michigan State University Board of Trustees
8: #
9: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
10: #
11: # LON-CAPA is free software; you can redistribute it and/or modify
12: # it under the terms of the GNU General Public License as published by
13: # the Free Software Foundation; either version 2 of the License, or
14: # (at your option) any later version.
15: #
16: # LON-CAPA is distributed in the hope that it will be useful,
17: # but WITHOUT ANY WARRANTY; without even the implied warranty of
18: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19: # GNU General Public License for more details.
20: #
21: # You should have received a copy of the GNU General Public License
22: # along with LON-CAPA; if not, write to the Free Software
23: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24: #
25: # /home/httpd/html/adm/gpl.txt
26: #
27: # http://www.lon-capa.org/
28: ## Copyright for TtHfunc and TtMfunc by Ian Hutchinson.
29: # TtHfunc and TtMfunc (the "Code") may be compiled and linked into
30: # binary executable programs or libraries distributed by the
31: # Michigan State University (the "Licensee"), but any binaries so
32: # distributed are hereby licensed only for use in the context
33: # of a program or computational system for which the Licensee is the
34: # primary author or distributor, and which performs substantial
35: # additional tasks beyond the translation of (La)TeX into HTML.
36: # The C source of the Code may not be distributed by the Licensee
37: # to any other parties under any circumstances.
38: #
39:
40: # This module is a support packkage that helps londefdef generate
41: # LaTeX tables using the LaTeX::Table package. A prerequisite is that
42: # the print generator must have added the following to the LaTeX header:
43: #
44: # \usepackage{xtab}
45: # \usepackage{booktabs}
46: # \usepackage{array}
47: # \usepackage{colortbl}
48: # \usepackage{xcolor}
49: #
50: # These packages are installed in the packaged LaTeX distributions we know of as of
51: # 11/24/2008
52: #
53:
54:
55:
56: package Apache::lontable;
57: use strict;
58: use LaTeX::Table;
59:
60:
61: =pod
62:
63: =head1 lontable Table generation assistant for the LaTeX target
64:
65: This module contains support software for generating tables in LaTeX output mode
66: In this implementation, we use the LaTeX::Table package to do the actual final formatting.
67: Each table creates a new object. Table objects can have global properties configured.
68: The main operations on a table object are:
69:
70: =over 3
71:
72: =item start_row
73:
74: Opens a new table row.
75:
76: =item end_row
77:
78: Closes a table row.
79:
80: =item start_header
81:
82: Starts a new row that has the header attribute (e.g. <th> tagged row).
83: header rows are ended with an end_row just like any ordinary row.
84:
85: =item configure_row
86:
87: Modifies a configuration item in the currently open row.
88:
89: =item generate
90:
91: Returns the generated table string.
92:
93: =item configure
94:
95: Configures a table's global configuration.
96:
97: =back
98:
99: =cut
100:
101: =pod
102:
103: =head2 new - create a new object.
104:
105: Create a new table object. Any of the raw table configuration items can be
106: modified by this. These configuration items include:
107:
108: my $table = lontable::new(\%config_hash)
109:
110: =over3
111:
112: =item alignment
113:
114: Table alignment. Some table styles support this but not all.
115:
116: =item tableborder
117:
118: If true, a border is drawn around the table.
119:
120: =item cellborder
121:
122: If true, borders are drawn around the cells inside a table.
123:
124: =item caption
125:
126: The table caption text.
127:
128: =item theme
129:
130: The theme of the table to use. Defaults to Zurich. Themes we know about are:
131: NYC, NYC2, Zurich, Berlin, Dresden, Houston, Miami, plain, Paris. Other themes can be added
132: to the LaTeX::Table package, and they will become supported automatically, as theme names are
133: not error checked. Any use of a non-existent theme is reported by the LaTeX::Table package
134: when the table text is generated.
135:
136: =back
137:
138: =head3 Member data
139:
140: The object hash has the following members:
141:
142: =over 3
143:
144: =item column_count
145:
146: Maintained internally, the number of colums in the widest row.
147:
148: =item alignment
149:
150: Table alignment (configurable) "left", "center", or "right".
151:
152: =item outer_border
153:
154: True if a border should be drawn around the entire table (configurable)
155:
156: =item inner_borders
157:
158: True if a border should be drawn around all cells (configurable).
159:
160: =item caption
161:
162: Table caption (configurable).
163:
164: =item theme
165:
166: Theme desired (configurable).
167:
168: =item row_open
169:
170: True if a row is open and not yet closed.
171:
172: =item rows
173:
174: Array of row data. This is an array of hashes described below.
175:
176: =back
177:
178: =head3 Row data.
179:
180: Each row of table data is an element of the rows hash array. Hash elements are
181:
182: =over 3
183:
184: =item is_header
185:
186: True if the user wants to format this row like a header. This row will be used to generate
187: the table header. All header rows will be gathered together into the table header. If there
188: are multiple table headers interspersed with non table header data, this can lead to some
189: surprises.
190:
191: =item default_halign
192:
193: Default horizontal alignment for cells in this row.
194:
195: =item default_valign
196:
197: Default vertical alignment for cells in this row (may be ignored).
198:
199: =item cells
200:
201: Array of hashes where each element represents the data for a cell.
202: The contents of each element of this hash are described below:
203:
204: =over 3
205:
206: =item halign
207:
208: If present, overrides the row default horizontal alignment.
209:
210: =item valign
211:
212: if present, override the row default vertical alignment.
213:
214: =item rowspan
215:
216: If present, indicates the number of rows this cell spans.
217:
218: =item colspan
219:
220: If present indicates the number of columns this cell spans.
221: Note that a cell can span both rows and columns.
222:
223: =item contents
224:
225: The contents of the cell.
226:
227: =back
228:
229: =back
230:
231: =cut
232:
233: sub new {
234: my ($class, $configuration) = @_;
235:
236: # Initialize the object member data with the default values
237: # then override with any stuff in $configuration.
238:
239: my $self = {
240: alignment => "left",
241: outer_border => 0,
242: inner_borders => 0,
243: caption => "",
244: theme => "Zurich",
245: column_count => 0,
246: row_open => 0,
247: rows => [],
248: };
249:
250: foreach my $key (keys %$configuration) {
251: $self->{$key} = $$configuration{$key};
252: }
253:
254: bless($self, $class);
255:
256: return $self;
257: }
258:
259: #-------------------------------------------------------------------------
260: #
261: # Methods that get/set table global configuration.
262:
263:
264:
265:
266: # Mandatory initialization.
267:
268: 1;
269: __END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>