html-table 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGES CHANGED
@@ -1,6 +1,13 @@
1
+ == 1.3.2 - 15-Jul-2008
2
+ * Added to_s and to_str aliases for the html method for all classes.
3
+ * Some documentation updates.
4
+ * Removed unnecessary presetup code from the test files that was no longer
5
+ necessary thanks to Rake.
6
+ * Removed the ts_all.rb file. It was no longer necessary thanks to Rake.
7
+
1
8
  == 1.3.1 - 8-Feb-2008
2
9
  * Fully qualified the HTML::Table class in the HTMLHandler module. This fix
3
- eliminates the need to 'include HTML' to actually some code to work
10
+ eliminates the need to 'include HTML' to actually get some code to work
4
11
  properly. Thanks go to Jos Backus for the spot and patch.
5
12
  * Added a Rakefile with tasks for testing and installation.
6
13
  * Removed the install.rb file. That's now handled by the Rakefile.
data/MANIFEST CHANGED
@@ -41,7 +41,6 @@ lib/html/table.rb
41
41
  lib/html/tablesection.rb
42
42
  lib/html/tag_handler.rb
43
43
 
44
- test/ts_all.rb
45
44
  test/tc_attribute_handler.rb
46
45
  test/tc_body.rb
47
46
  test/tc_caption.rb
data/Rakefile CHANGED
@@ -1,24 +1,24 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
-
4
- desc "Install the html-table package (non-gem)"
5
- task :install do
6
- dest = File.join(Config::CONFIG['sitelibdir'], 'html')
7
- Dir.mkdir(dest) unless File.exists? dest
8
- Dir['lib/html/*.rb'].each{ |f|
9
- cp f, dest, :verbose => true
10
- }
11
- end
12
-
13
- desc "Install the html-table package as a gem"
14
- task :install_gem do
15
- ruby 'html-table.gemspec'
16
- file = Dir["*.gem"].first
17
- sh "gem install #{file}"
18
- end
19
-
20
- Rake::TestTask.new do |t|
21
- t.libs << 'lib'
22
- t.warning = true
23
- t.test_files = FileList['test/tc*']
24
- end
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+
4
+ desc "Install the html-table package (non-gem)"
5
+ task :install do
6
+ dest = File.join(Config::CONFIG['sitelibdir'], 'html')
7
+ Dir.mkdir(dest) unless File.exists? dest
8
+ Dir['lib/html/*.rb'].each{ |f|
9
+ cp f, dest, :verbose => true
10
+ }
11
+ end
12
+
13
+ desc "Install the html-table package as a gem"
14
+ task :install_gem do
15
+ ruby 'html-table.gemspec'
16
+ file = Dir["*.gem"].first
17
+ sh "gem install #{file}"
18
+ end
19
+
20
+ Rake::TestTask.new do |t|
21
+ t.libs << 'lib'
22
+ t.warning = true
23
+ t.test_files = FileList['test/tc*']
24
+ end
@@ -1,15 +1,15 @@
1
- == Description
2
- A Table::Content is a wrapper for content used for Table::Row::Data and
3
- Table::Row::Header objects. Although it can be instantiated directly, in
4
- practice it is autogenerated for you.
5
-
6
- == Notes
7
- Table::Content is a subclass of String and was mostly created in order
8
- to support a DSL style syntax as well as physical tags.
9
-
10
- == Synopsis
11
- content = Table::Content.new('my content') do
12
- bold true
13
- italics true
14
- underline true
15
- end
1
+ == Description
2
+ A Table::Content is a wrapper for content used for Table::Row::Data and
3
+ Table::Row::Header objects. Although it can be instantiated directly, in
4
+ practice it is autogenerated for you.
5
+
6
+ == Notes
7
+ Table::Content is a subclass of String and was mostly created in order
8
+ to support a DSL style syntax as well as physical tags.
9
+
10
+ == Synopsis
11
+ content = Table::Content.new('my content') do
12
+ bold true
13
+ italics true
14
+ underline true
15
+ end
File without changes
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+
3
+ spec = Gem::Specification.new do |gem|
4
+ gem.name = 'html-table'
5
+ gem.version = '1.3.2'
6
+ gem.author = 'Daniel J. Berger'
7
+ gem.email = 'djberg96@gmail.com'
8
+ gem.homepage = 'http://shards.rubyforge.org'
9
+ gem.rubyforge_project = 'shards'
10
+ gem.platform = Gem::Platform::RUBY
11
+ gem.summary = 'A Ruby interface for generating HTML tables'
12
+ gem.description = 'A Ruby interface for generating HTML tables'
13
+ gem.test_files = Dir['test/*.rb']
14
+ gem.has_rdoc = true
15
+ gem.files = Dir['lib/html/*'] + Dir['[A-Z]*'] + Dir['test/*'] + Dir['doc/*']
16
+ gem.files.reject! { |fn| fn.include? 'CVS' }
17
+ gem.extra_rdoc_files = ['README', 'CHANGES'] + Dir['doc/*.rdoc']
18
+ gem.require_path = 'lib'
19
+ gem.add_dependency('strongtyping')
20
+ end
21
+
22
+ if $0 == __FILE__
23
+ Gem.manage_gems
24
+ Gem::Builder.new(spec).build
25
+ end
@@ -1,411 +1,411 @@
1
- # This module creates methods for each of the various attributes associated
2
- # with HTML tables. In some cases validation is done on the setters.
3
- #--
4
- # The seemingly redundant writer methods were left here for backwards
5
- # compatibility and for those who may not prefer the DSI.
6
- #
7
- module AttributeHandler
8
- def abbr(string = nil)
9
- @abbr ||= nil
10
- self.abbr = string if string
11
- @abbr
12
- end
13
-
14
- def abbr=(string)
15
- @abbr = string
16
- modify_html("abbr", string)
17
- end
18
-
19
- def align(position = nil)
20
- @align ||= nil
21
- self.align = position if position
22
- @align
23
- end
24
-
25
- def align=(position)
26
- valid = %w/top bottom left center right/
27
- raise ArgumentError unless valid.include?(position.downcase)
28
- @align = position
29
- modify_html("align", position)
30
- end
31
-
32
- def axis(string = nil)
33
- @axis ||= nil
34
- self.axis = string if string
35
- @axis
36
- end
37
-
38
- def axis=(string)
39
- @axis = string
40
- modify_html("axis", string)
41
- end
42
-
43
- def background(url = nil)
44
- @background ||= nil
45
- self.background = url if url
46
- @background
47
- end
48
-
49
- def background=(url)
50
- raise TypeError unless url.kind_of?(String)
51
- if $VERBOSE
52
- msg = "'background' is a non-standard extension"
53
- STDERR.puts msg
54
- end
55
- @background = url
56
- modify_html("background", url)
57
- end
58
-
59
- def bgcolor(color = nil)
60
- @bgcolor ||= nil
61
- self.bgcolor = color if color
62
- @bgcolor
63
- end
64
-
65
- def bgcolor=(color)
66
- @bgcolor = color
67
- modify_html("bgcolor", color)
68
- end
69
-
70
- def border(num = nil)
71
- @border ||= nil
72
- self.border = num if num
73
- @border
74
- end
75
-
76
- # Allow either true/false or an integer
77
- def border=(num)
78
- if num.kind_of?(TrueClass)
79
- modify_html("border", true)
80
- elsif num.kind_of?(FalseClass)
81
- # Do nothing
82
- else
83
- @border = num.to_i
84
- modify_html("border", num.to_i)
85
- end
86
- end
87
-
88
- def bordercolor(color = nil)
89
- @bordercolor ||= nil
90
- self.bordercolor = color if color
91
- @bordercolor
92
- end
93
-
94
- def bordercolor=(color)
95
- @bordercolor = color
96
- if $VERBOSE
97
- msg = "'bordercolor' is a non-standard extension"
98
- STDERR.puts msg
99
- end
100
- modify_html("bordercolor", color)
101
- end
102
-
103
- def bordercolordark(color = nil)
104
- @bordercolordark ||= nil
105
- self.bordercolordark = color if color
106
- @bordercolordark
107
- end
108
-
109
- def bordercolordark=(color)
110
- @bordercolordark = color
111
- if $VERBOSE
112
- msg = "'bordercolordark' is a non-standard extension"
113
- STDERR.puts msg
114
- end
115
- modify_html("bordercolordark", color)
116
- end
117
-
118
- def bordercolorlight(color = nil)
119
- @bordercolorlight ||= nil
120
- self.bordercolorlight = color if color
121
- @bordercolorlight
122
- end
123
-
124
- def bordercolorlight=(color)
125
- @bordercolorlight = color
126
- if $VERBOSE
127
- msg = "'bordercolorlight' is a non-standard extension"
128
- STDERR.puts msg
129
- end
130
- modify_html("bordercolorlight", @bordercolorlight)
131
- end
132
-
133
- def cellpadding(num = nil)
134
- @cellpadding ||= nil
135
- self.cellpadding = num if num
136
- @cellpadding
137
- end
138
-
139
- def cellpadding=(num)
140
- raise ArgumentError if num.to_i < 0
141
- @cellpadding = num.to_i
142
- modify_html("cellpadding", @cellpadding)
143
- end
144
-
145
- def cellspacing(num = nil)
146
- @cellspacing ||= nil
147
- self.cellspacing = num if num
148
- @cellspacing
149
- end
150
-
151
- def cellspacing=(num)
152
- raise ArgumentError if num.to_i < 0
153
- @cellspacing = num.to_i
154
- modify_html("cellspacing", @cellspacing)
155
- end
156
-
157
- def char(character = nil)
158
- @char ||= nil
159
- self.char = character if character
160
- @char
161
- end
162
-
163
- def char=(character)
164
- raise ArgumentError if character.to_s.length > 1
165
- @char = character.to_s
166
- modify_html("char", character.to_s)
167
- end
168
-
169
- def charoff(offset = nil)
170
- @charoff ||= nil
171
- self.charoff = offset if offset
172
- @charoff
173
- end
174
-
175
- def charoff=(offset)
176
- raise ArgumentError if offset.to_i < 0
177
- @charoff = offset
178
- modify_html("charoff", offset)
179
- end
180
-
181
- # Returns the CSS class. The trailing underscore is necessary in order
182
- # to avoid conflict with the 'class' keyword.
183
- #
184
- def class_(klass = nil)
185
- @class ||= nil
186
- self.class_ = klass if klass
187
- @class
188
- end
189
-
190
- # Returns the CSS class. The trailing underscore is necessary in order
191
- # to avoid conflict with the 'class' keyword.
192
- #
193
- def class_=(klass)
194
- modify_html('class', klass)
195
- @class = klass
196
- end
197
-
198
- def col(num = nil)
199
- @col ||= nil
200
- self.col = num if num
201
- @col
202
- end
203
-
204
- def col=(num)
205
- raise ArgumentError if num.to_i < 0
206
- @col = num.to_i
207
- modify_html("col", @col)
208
- end
209
-
210
- def colspan(span = nil)
211
- @colspan ||= nil
212
- self.colspan = span if span
213
- @colspan
214
- end
215
-
216
- def colspan=(span)
217
- raise ArgumentError if span.to_i < 0
218
- @colspan = span.to_i
219
- modify_html("colspan", @colspan)
220
- end
221
-
222
- # Allows you to configure various attributes by row or row + column.
223
- #
224
- def configure(row, col=nil, &block)
225
- if col
226
- begin
227
- yield self[row][col]
228
- rescue NameError
229
- msg = "No column to configure in a " + self.class.to_s + " class"
230
- raise ArgumentError, msg
231
- end
232
- else
233
- yield self[row]
234
- end
235
- end
236
-
237
- # Returns the HTML content (i.e. text).
238
- #
239
- def content(arg = nil, &block)
240
- case arg
241
- when String
242
- self.content = Table::Content.new(arg, &block)
243
- when Array
244
- arg.each{ |e|
245
- if e.kind_of?(Array)
246
- row = Table::Row.new
247
- e.each{ |element| row.push(Table::Content.new(element, &block)) }
248
- self.push(row)
249
- else
250
- self.content = Table::Content.new(e, &block)
251
- end
252
- }
253
- else
254
- self.content = arg if arg
255
- end
256
- @html_body
257
- end
258
-
259
- alias data content
260
-
261
- def frame(type = nil)
262
- @frame ||= nil
263
- self.frame = type if type
264
- @frame
265
- end
266
-
267
- def frame=(type)
268
- valid = %w/border void above below hsides lhs rhs vsides box/
269
- raise ArgumentError unless valid.include?(type.downcase)
270
- @frame = type
271
- modify_html("frame", @frame)
272
- end
273
-
274
- def height(num = nil)
275
- @height ||= nil
276
- self.height = num if num
277
- @height
278
- end
279
-
280
- def height=(num)
281
- raise ArgumentError if num.to_i < 0
282
- @height = num.to_i
283
- modify_html("height", @height)
284
- end
285
-
286
- def hspace(num = nil)
287
- @hspace ||= nil
288
- self.hspace = num if num
289
- @hspace
290
- end
291
-
292
- def hspace=(num)
293
- raise ArgumentError if num.to_i < 0
294
- @hspace = num.to_i
295
- modify_html("hspace", @hspace)
296
- end
297
-
298
- def nowrap(bool = nil)
299
- @nowrap ||= nil
300
- self.nowrap = bool if bool
301
- @nowrap
302
- end
303
-
304
- def nowrap=(bool)
305
- unless bool.kind_of?(TrueClass) || bool.kind_of?(FalseClass)
306
- raise TypeError
307
- end
308
- @nowrap = bool
309
- modify_html("nowrap", @nowrap)
310
- end
311
-
312
- def rowspan(num = nil)
313
- @rowspan ||= nil
314
- self.rowspan = num if num
315
- @rowspan
316
- end
317
-
318
- def rowspan=(num)
319
- raise ArgumentError if num.to_i < 0
320
- @rowspan = num.to_i
321
- modify_html("rowspan", @rowspan)
322
- end
323
-
324
- def rules(edges = nil)
325
- @rules ||= nil
326
- self.rules = edges if edges
327
- @rules
328
- end
329
-
330
- def rules=(edges)
331
- valid = %w/all groups rows cols none/
332
- raise ArgumentError unless valid.include?(edges.to_s.downcase)
333
- @rules = edges
334
- modify_html("rules", @rules)
335
- end
336
-
337
- def span(num = nil)
338
- @span ||= nil
339
- self.span = num if num
340
- @span
341
- end
342
-
343
- def span=(num)
344
- raise ArgumentError if num.to_i < 0
345
- @span = num.to_i
346
- modify_html("span", @span)
347
- end
348
-
349
- def style(string = nil)
350
- @style ||= nil
351
- self.style = string if string
352
- @style
353
- end
354
-
355
- def style=(string)
356
- @style = string.to_s
357
- modify_html("style", @style)
358
- end
359
-
360
- def summary(string = nil)
361
- @summary ||= nil
362
- self.summary = string if string
363
- @summary
364
- end
365
-
366
- def summary=(string)
367
- @summary = string.to_s
368
- modify_html("summary", @summary)
369
- end
370
-
371
- def valign(position = nil)
372
- @valign ||= nil
373
- self.valign = position if position
374
- @valign
375
- end
376
-
377
- def valign=(position)
378
- valid = %w/top center bottom baseline/
379
- raise ArgumentError unless valid.include?(position.to_s.downcase)
380
- @valign = position
381
- modify_html("valign", @valign)
382
- end
383
-
384
- def vspace(num = nil)
385
- @vspace ||= nil
386
- self.vspace = num if num
387
- @vspace
388
- end
389
-
390
- def vspace=(num)
391
- raise ArgumentError if num.to_i < 0
392
- @vspace = num.to_i
393
- modify_html("vspace", @vspace)
394
- end
395
-
396
- def width(num = nil)
397
- @width ||= nil
398
- self.width = num if num
399
- @width
400
- end
401
-
402
- def width=(num)
403
- if num =~ /%/
404
- @width = num
405
- else
406
- raise ArgumentError if num.to_i < 0
407
- @width = num.to_i
408
- end
409
- modify_html("width", @width)
410
- end
411
- end
1
+ # This module creates methods for each of the various attributes associated
2
+ # with HTML tables. In some cases validation is done on the setters.
3
+ #--
4
+ # The seemingly redundant writer methods were left here for backwards
5
+ # compatibility and for those who may not prefer the DSI.
6
+ #
7
+ module AttributeHandler
8
+ def abbr(string = nil)
9
+ @abbr ||= nil
10
+ self.abbr = string if string
11
+ @abbr
12
+ end
13
+
14
+ def abbr=(string)
15
+ @abbr = string
16
+ modify_html("abbr", string)
17
+ end
18
+
19
+ def align(position = nil)
20
+ @align ||= nil
21
+ self.align = position if position
22
+ @align
23
+ end
24
+
25
+ def align=(position)
26
+ valid = %w/top bottom left center right/
27
+ raise ArgumentError unless valid.include?(position.downcase)
28
+ @align = position
29
+ modify_html("align", position)
30
+ end
31
+
32
+ def axis(string = nil)
33
+ @axis ||= nil
34
+ self.axis = string if string
35
+ @axis
36
+ end
37
+
38
+ def axis=(string)
39
+ @axis = string
40
+ modify_html("axis", string)
41
+ end
42
+
43
+ def background(url = nil)
44
+ @background ||= nil
45
+ self.background = url if url
46
+ @background
47
+ end
48
+
49
+ def background=(url)
50
+ raise TypeError unless url.kind_of?(String)
51
+ if $VERBOSE
52
+ msg = "'background' is a non-standard extension"
53
+ STDERR.puts msg
54
+ end
55
+ @background = url
56
+ modify_html("background", url)
57
+ end
58
+
59
+ def bgcolor(color = nil)
60
+ @bgcolor ||= nil
61
+ self.bgcolor = color if color
62
+ @bgcolor
63
+ end
64
+
65
+ def bgcolor=(color)
66
+ @bgcolor = color
67
+ modify_html("bgcolor", color)
68
+ end
69
+
70
+ def border(num = nil)
71
+ @border ||= nil
72
+ self.border = num if num
73
+ @border
74
+ end
75
+
76
+ # Allow either true/false or an integer
77
+ def border=(num)
78
+ if num.kind_of?(TrueClass)
79
+ modify_html("border", true)
80
+ elsif num.kind_of?(FalseClass)
81
+ # Do nothing
82
+ else
83
+ @border = num.to_i
84
+ modify_html("border", num.to_i)
85
+ end
86
+ end
87
+
88
+ def bordercolor(color = nil)
89
+ @bordercolor ||= nil
90
+ self.bordercolor = color if color
91
+ @bordercolor
92
+ end
93
+
94
+ def bordercolor=(color)
95
+ @bordercolor = color
96
+ if $VERBOSE
97
+ msg = "'bordercolor' is a non-standard extension"
98
+ STDERR.puts msg
99
+ end
100
+ modify_html("bordercolor", color)
101
+ end
102
+
103
+ def bordercolordark(color = nil)
104
+ @bordercolordark ||= nil
105
+ self.bordercolordark = color if color
106
+ @bordercolordark
107
+ end
108
+
109
+ def bordercolordark=(color)
110
+ @bordercolordark = color
111
+ if $VERBOSE
112
+ msg = "'bordercolordark' is a non-standard extension"
113
+ STDERR.puts msg
114
+ end
115
+ modify_html("bordercolordark", color)
116
+ end
117
+
118
+ def bordercolorlight(color = nil)
119
+ @bordercolorlight ||= nil
120
+ self.bordercolorlight = color if color
121
+ @bordercolorlight
122
+ end
123
+
124
+ def bordercolorlight=(color)
125
+ @bordercolorlight = color
126
+ if $VERBOSE
127
+ msg = "'bordercolorlight' is a non-standard extension"
128
+ STDERR.puts msg
129
+ end
130
+ modify_html("bordercolorlight", @bordercolorlight)
131
+ end
132
+
133
+ def cellpadding(num = nil)
134
+ @cellpadding ||= nil
135
+ self.cellpadding = num if num
136
+ @cellpadding
137
+ end
138
+
139
+ def cellpadding=(num)
140
+ raise ArgumentError if num.to_i < 0
141
+ @cellpadding = num.to_i
142
+ modify_html("cellpadding", @cellpadding)
143
+ end
144
+
145
+ def cellspacing(num = nil)
146
+ @cellspacing ||= nil
147
+ self.cellspacing = num if num
148
+ @cellspacing
149
+ end
150
+
151
+ def cellspacing=(num)
152
+ raise ArgumentError if num.to_i < 0
153
+ @cellspacing = num.to_i
154
+ modify_html("cellspacing", @cellspacing)
155
+ end
156
+
157
+ def char(character = nil)
158
+ @char ||= nil
159
+ self.char = character if character
160
+ @char
161
+ end
162
+
163
+ def char=(character)
164
+ raise ArgumentError if character.to_s.length > 1
165
+ @char = character.to_s
166
+ modify_html("char", character.to_s)
167
+ end
168
+
169
+ def charoff(offset = nil)
170
+ @charoff ||= nil
171
+ self.charoff = offset if offset
172
+ @charoff
173
+ end
174
+
175
+ def charoff=(offset)
176
+ raise ArgumentError if offset.to_i < 0
177
+ @charoff = offset
178
+ modify_html("charoff", offset)
179
+ end
180
+
181
+ # Returns the CSS class. The trailing underscore is necessary in order
182
+ # to avoid conflict with the 'class' keyword.
183
+ #
184
+ def class_(klass = nil)
185
+ @class ||= nil
186
+ self.class_ = klass if klass
187
+ @class
188
+ end
189
+
190
+ # Returns the CSS class. The trailing underscore is necessary in order
191
+ # to avoid conflict with the 'class' keyword.
192
+ #
193
+ def class_=(klass)
194
+ modify_html('class', klass)
195
+ @class = klass
196
+ end
197
+
198
+ def col(num = nil)
199
+ @col ||= nil
200
+ self.col = num if num
201
+ @col
202
+ end
203
+
204
+ def col=(num)
205
+ raise ArgumentError if num.to_i < 0
206
+ @col = num.to_i
207
+ modify_html("col", @col)
208
+ end
209
+
210
+ def colspan(span = nil)
211
+ @colspan ||= nil
212
+ self.colspan = span if span
213
+ @colspan
214
+ end
215
+
216
+ def colspan=(span)
217
+ raise ArgumentError if span.to_i < 0
218
+ @colspan = span.to_i
219
+ modify_html("colspan", @colspan)
220
+ end
221
+
222
+ # Allows you to configure various attributes by row or row + column.
223
+ #
224
+ def configure(row, col=nil, &block)
225
+ if col
226
+ begin
227
+ yield self[row][col]
228
+ rescue NameError
229
+ msg = "No column to configure in a " + self.class.to_s + " class"
230
+ raise ArgumentError, msg
231
+ end
232
+ else
233
+ yield self[row]
234
+ end
235
+ end
236
+
237
+ # Returns the HTML content (i.e. text).
238
+ #
239
+ def content(arg = nil, &block)
240
+ case arg
241
+ when String
242
+ self.content = Table::Content.new(arg, &block)
243
+ when Array
244
+ arg.each{ |e|
245
+ if e.kind_of?(Array)
246
+ row = Table::Row.new
247
+ e.each{ |element| row.push(Table::Content.new(element, &block)) }
248
+ self.push(row)
249
+ else
250
+ self.content = Table::Content.new(e, &block)
251
+ end
252
+ }
253
+ else
254
+ self.content = arg if arg
255
+ end
256
+ @html_body
257
+ end
258
+
259
+ alias data content
260
+
261
+ def frame(type = nil)
262
+ @frame ||= nil
263
+ self.frame = type if type
264
+ @frame
265
+ end
266
+
267
+ def frame=(type)
268
+ valid = %w/border void above below hsides lhs rhs vsides box/
269
+ raise ArgumentError unless valid.include?(type.downcase)
270
+ @frame = type
271
+ modify_html("frame", @frame)
272
+ end
273
+
274
+ def height(num = nil)
275
+ @height ||= nil
276
+ self.height = num if num
277
+ @height
278
+ end
279
+
280
+ def height=(num)
281
+ raise ArgumentError if num.to_i < 0
282
+ @height = num.to_i
283
+ modify_html("height", @height)
284
+ end
285
+
286
+ def hspace(num = nil)
287
+ @hspace ||= nil
288
+ self.hspace = num if num
289
+ @hspace
290
+ end
291
+
292
+ def hspace=(num)
293
+ raise ArgumentError if num.to_i < 0
294
+ @hspace = num.to_i
295
+ modify_html("hspace", @hspace)
296
+ end
297
+
298
+ def nowrap(bool = nil)
299
+ @nowrap ||= nil
300
+ self.nowrap = bool if bool
301
+ @nowrap
302
+ end
303
+
304
+ def nowrap=(bool)
305
+ unless bool.kind_of?(TrueClass) || bool.kind_of?(FalseClass)
306
+ raise TypeError
307
+ end
308
+ @nowrap = bool
309
+ modify_html("nowrap", @nowrap)
310
+ end
311
+
312
+ def rowspan(num = nil)
313
+ @rowspan ||= nil
314
+ self.rowspan = num if num
315
+ @rowspan
316
+ end
317
+
318
+ def rowspan=(num)
319
+ raise ArgumentError if num.to_i < 0
320
+ @rowspan = num.to_i
321
+ modify_html("rowspan", @rowspan)
322
+ end
323
+
324
+ def rules(edges = nil)
325
+ @rules ||= nil
326
+ self.rules = edges if edges
327
+ @rules
328
+ end
329
+
330
+ def rules=(edges)
331
+ valid = %w/all groups rows cols none/
332
+ raise ArgumentError unless valid.include?(edges.to_s.downcase)
333
+ @rules = edges
334
+ modify_html("rules", @rules)
335
+ end
336
+
337
+ def span(num = nil)
338
+ @span ||= nil
339
+ self.span = num if num
340
+ @span
341
+ end
342
+
343
+ def span=(num)
344
+ raise ArgumentError if num.to_i < 0
345
+ @span = num.to_i
346
+ modify_html("span", @span)
347
+ end
348
+
349
+ def style(string = nil)
350
+ @style ||= nil
351
+ self.style = string if string
352
+ @style
353
+ end
354
+
355
+ def style=(string)
356
+ @style = string.to_s
357
+ modify_html("style", @style)
358
+ end
359
+
360
+ def summary(string = nil)
361
+ @summary ||= nil
362
+ self.summary = string if string
363
+ @summary
364
+ end
365
+
366
+ def summary=(string)
367
+ @summary = string.to_s
368
+ modify_html("summary", @summary)
369
+ end
370
+
371
+ def valign(position = nil)
372
+ @valign ||= nil
373
+ self.valign = position if position
374
+ @valign
375
+ end
376
+
377
+ def valign=(position)
378
+ valid = %w/top center bottom baseline/
379
+ raise ArgumentError unless valid.include?(position.to_s.downcase)
380
+ @valign = position
381
+ modify_html("valign", @valign)
382
+ end
383
+
384
+ def vspace(num = nil)
385
+ @vspace ||= nil
386
+ self.vspace = num if num
387
+ @vspace
388
+ end
389
+
390
+ def vspace=(num)
391
+ raise ArgumentError if num.to_i < 0
392
+ @vspace = num.to_i
393
+ modify_html("vspace", @vspace)
394
+ end
395
+
396
+ def width(num = nil)
397
+ @width ||= nil
398
+ self.width = num if num
399
+ @width
400
+ end
401
+
402
+ def width=(num)
403
+ if num =~ /%/
404
+ @width = num
405
+ else
406
+ raise ArgumentError if num.to_i < 0
407
+ @width = num.to_i
408
+ end
409
+ modify_html("width", @width)
410
+ end
411
+ end