html-table 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +7 -0
- data/README +1 -3
- data/Rakefile +145 -142
- data/doc/table_content.rdoc +15 -15
- data/examples/advanced.rb +128 -128
- data/examples/intermediate1.rb +72 -72
- data/examples/intermediate2.rb +62 -62
- data/examples/intermediate3.rb +46 -46
- data/examples/simple1.rb +39 -39
- data/examples/simple2.rb +47 -47
- data/examples/simple3.rb +41 -41
- data/html-table.gemspec +21 -20
- data/lib/html/attribute_handler.rb +403 -403
- data/lib/html/body.rb +38 -38
- data/lib/html/caption.rb +48 -48
- data/lib/html/col.rb +41 -41
- data/lib/html/colgroup.rb +113 -113
- data/lib/html/content.rb +18 -18
- data/lib/html/data.rb +68 -68
- data/lib/html/foot.rb +49 -49
- data/lib/html/head.rb +49 -49
- data/lib/html/header.rb +65 -65
- data/lib/html/html_handler.rb +120 -120
- data/lib/html/row.rb +188 -188
- data/lib/html/table.rb +320 -318
- data/lib/html/tablesection.rb +48 -48
- data/lib/html/tag_handler.rb +121 -121
- data/test/test_attribute_handler.rb +364 -364
- data/test/test_body.rb +90 -90
- data/test/test_caption.rb +83 -83
- data/test/test_col.rb +43 -43
- data/test/test_colgroup.rb +92 -92
- data/test/test_data.rb +80 -80
- data/test/test_foot.rb +114 -114
- data/test/test_head.rb +107 -107
- data/test/test_header.rb +80 -80
- data/test/test_html_handler.rb +40 -40
- data/test/test_row.rb +144 -144
- data/test/test_table.rb +157 -157
- data/test/test_tablesection.rb +45 -45
- data/test/test_tag_handler.rb +93 -93
- metadata +30 -34
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 1.3.4 - 29-Sep-2009
|
2
|
+
* The test-unit library is now a development dependency instead of a
|
3
|
+
standard dependency.
|
4
|
+
* Removed all load path mangling.
|
5
|
+
* License changed to Artistic 2.0.
|
6
|
+
* Updated the gemspec description, added a license.
|
7
|
+
|
1
8
|
== 1.3.3 - 5-Feb-2009
|
2
9
|
* Added structured_warnings as a requirement. The non standard tags now
|
3
10
|
raise a NonStandardExtensionWarning. These are now _always_ raised whenever
|
data/README
CHANGED
@@ -103,7 +103,7 @@
|
|
103
103
|
Holden Glova and Culley Harrelson for API suggestions and comments.
|
104
104
|
|
105
105
|
== License
|
106
|
-
|
106
|
+
Artistic 2.0
|
107
107
|
|
108
108
|
== Copyright
|
109
109
|
(C) 2003-2009 Daniel J. Berger
|
@@ -116,8 +116,6 @@
|
|
116
116
|
|
117
117
|
== Author
|
118
118
|
Daniel J. Berger
|
119
|
-
djberg96 at gmail dot com
|
120
|
-
imperator on IRC (irc.freenode.net)
|
121
119
|
|
122
120
|
== Developer's Notes
|
123
121
|
Some people might be a little annoyed with the fact that I required Ryan
|
data/Rakefile
CHANGED
@@ -1,142 +1,145 @@
|
|
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
|
14
|
-
task :
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
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 'Build the html-table gem'
|
14
|
+
task :gem do
|
15
|
+
spec = eval(IO.read('html-table.gemspec'))
|
16
|
+
Gem::Builder.new(spec).build
|
17
|
+
|
18
|
+
desc "Install the html-table package as a gem"
|
19
|
+
task :install_gem => [:gem] do
|
20
|
+
file = Dir["*.gem"].first
|
21
|
+
sh "gem install #{file}"
|
22
|
+
end
|
23
|
+
|
24
|
+
namespace 'example' do
|
25
|
+
desc "Run the first simple html-table example"
|
26
|
+
task :simple1 do
|
27
|
+
sh 'ruby -Ilib examples/simple1.rb'
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Run the second simple html-table example"
|
31
|
+
task :simple2 do
|
32
|
+
sh 'ruby -Ilib examples/simple2.rb'
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Run the third simple html-table example"
|
36
|
+
task :simple3 do
|
37
|
+
sh 'ruby -Ilib examples/simple3.rb'
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "Run the first intermediate html-table example"
|
41
|
+
task :intermediate1 do
|
42
|
+
sh 'ruby -Ilib examples/intermediate1.rb'
|
43
|
+
end
|
44
|
+
|
45
|
+
desc "Run the second intermediate html-table example"
|
46
|
+
task :intermediate2 do
|
47
|
+
sh 'ruby -Ilib examples/intermediate2.rb'
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "Run the advanced html-table example"
|
51
|
+
task :advanced do
|
52
|
+
sh 'ruby -Ilib examples/advanced.rb'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Rake::TestTask.new do |t|
|
57
|
+
t.warning = true
|
58
|
+
t.verbose = true
|
59
|
+
end
|
60
|
+
|
61
|
+
namespace 'test' do
|
62
|
+
Rake::TestTask.new('attribute_handler') do |t|
|
63
|
+
t.warning = true
|
64
|
+
t.verbose = true
|
65
|
+
t.test_files = FileList['test/test_attribute_handler.rb']
|
66
|
+
end
|
67
|
+
|
68
|
+
Rake::TestTask.new('body') do |t|
|
69
|
+
t.warning = true
|
70
|
+
t.verbose = true
|
71
|
+
t.test_files = FileList['test/test_body.rb']
|
72
|
+
end
|
73
|
+
|
74
|
+
Rake::TestTask.new('caption') do |t|
|
75
|
+
t.warning = true
|
76
|
+
t.verbose = true
|
77
|
+
t.test_files = FileList['test/test_caption.rb']
|
78
|
+
end
|
79
|
+
|
80
|
+
Rake::TestTask.new('col') do |t|
|
81
|
+
t.warning = true
|
82
|
+
t.verbose = true
|
83
|
+
t.test_files = FileList['test/test_col.rb']
|
84
|
+
end
|
85
|
+
|
86
|
+
Rake::TestTask.new('colgroup') do |t|
|
87
|
+
t.warning = true
|
88
|
+
t.verbose = true
|
89
|
+
t.test_files = FileList['test/test_colgroup.rb']
|
90
|
+
end
|
91
|
+
|
92
|
+
Rake::TestTask.new('data') do |t|
|
93
|
+
t.warning = true
|
94
|
+
t.verbose = true
|
95
|
+
t.test_files = FileList['test/test_data.rb']
|
96
|
+
end
|
97
|
+
|
98
|
+
Rake::TestTask.new('foot') do |t|
|
99
|
+
t.warning = true
|
100
|
+
t.verbose = true
|
101
|
+
t.test_files = FileList['test/test_foot.rb']
|
102
|
+
end
|
103
|
+
|
104
|
+
Rake::TestTask.new('head') do |t|
|
105
|
+
t.warning = true
|
106
|
+
t.verbose = true
|
107
|
+
t.test_files = FileList['test/test_head.rb']
|
108
|
+
end
|
109
|
+
|
110
|
+
Rake::TestTask.new('header') do |t|
|
111
|
+
t.warning = true
|
112
|
+
t.verbose = true
|
113
|
+
t.test_files = FileList['test/test_header.rb']
|
114
|
+
end
|
115
|
+
|
116
|
+
Rake::TestTask.new('html_handler') do |t|
|
117
|
+
t.warning = true
|
118
|
+
t.verbose = true
|
119
|
+
t.test_files = FileList['test/test_html_handler.rb']
|
120
|
+
end
|
121
|
+
|
122
|
+
Rake::TestTask.new('row') do |t|
|
123
|
+
t.warning = true
|
124
|
+
t.verbose = true
|
125
|
+
t.test_files = FileList['test/test_row.rb']
|
126
|
+
end
|
127
|
+
|
128
|
+
Rake::TestTask.new('table') do |t|
|
129
|
+
t.warning = true
|
130
|
+
t.verbose = true
|
131
|
+
t.test_files = FileList['test/test_table.rb']
|
132
|
+
end
|
133
|
+
|
134
|
+
Rake::TestTask.new('tablesection') do |t|
|
135
|
+
t.warning = true
|
136
|
+
t.verbose = true
|
137
|
+
t.test_files = FileList['test/test_tablesection.rb']
|
138
|
+
end
|
139
|
+
|
140
|
+
Rake::TestTask.new('tag_handler') do |t|
|
141
|
+
t.warning = true
|
142
|
+
t.verbose = true
|
143
|
+
t.test_files = FileList['test/test_tag_handler.rb']
|
144
|
+
end
|
145
|
+
end
|
data/doc/table_content.rdoc
CHANGED
@@ -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
|
data/examples/advanced.rb
CHANGED
@@ -1,128 +1,128 @@
|
|
1
|
-
##############################################################################
|
2
|
-
# advanced1.rb
|
3
|
-
#
|
4
|
-
# For this example we'll use every feature I can think of to come up with
|
5
|
-
# the example found in "HTML: The Definitive Guide", pp. 395-396 (O'Reilly
|
6
|
-
# & Associates, 3rd ed).
|
7
|
-
#
|
8
|
-
# You can run this example via the 'example:advanced' rake task.
|
9
|
-
##############################################################################
|
10
|
-
require 'html/table'
|
11
|
-
include HTML
|
12
|
-
|
13
|
-
Table::Row::Data.end_tags = false
|
14
|
-
Table::Row::Header.end_tags = false
|
15
|
-
|
16
|
-
# Demonstrates the DSL style syntax
|
17
|
-
table = Table.new do
|
18
|
-
border 1
|
19
|
-
cellspacing 0
|
20
|
-
cellpadding 0
|
21
|
-
rules 'groups'
|
22
|
-
end
|
23
|
-
|
24
|
-
# Demonstrates the use of setters after object creation
|
25
|
-
caption = Table::Caption.new
|
26
|
-
caption.align = "bottom"
|
27
|
-
caption.content = "Kumquat versus a poked eye, by gender"
|
28
|
-
|
29
|
-
thead = Table::Head.create
|
30
|
-
tbody = Table::Body.new
|
31
|
-
tfoot = Table::Foot.create
|
32
|
-
|
33
|
-
# Add a row with a td and th, then configure after the fact.
|
34
|
-
thead.push Table::Row.new{ |r|
|
35
|
-
r.content = Table::Row::Data.new, Table::Row::Header.new
|
36
|
-
}
|
37
|
-
|
38
|
-
# And again, longhand
|
39
|
-
hrow = Table::Row.new
|
40
|
-
h1 = Table::Row::Header.new('Eating Kumquats')
|
41
|
-
h2 = Table::Row::Header.new('Poke In The Eye')
|
42
|
-
hrow.push h1, h2
|
43
|
-
thead.push hrow
|
44
|
-
|
45
|
-
# Configure a row after the fact
|
46
|
-
thead.configure(0,0){ |d|
|
47
|
-
d.colspan = 2
|
48
|
-
d.rowspan = 2
|
49
|
-
}
|
50
|
-
|
51
|
-
thead.configure(0,1){ |h|
|
52
|
-
h.colspan = 2
|
53
|
-
h.align = "center"
|
54
|
-
h.content = "Preference"
|
55
|
-
}
|
56
|
-
|
57
|
-
# Ugly, but just to show you that it's possible
|
58
|
-
tbody.push(
|
59
|
-
Table::Row.new{ |r|
|
60
|
-
r.align = "center"
|
61
|
-
r.content =
|
62
|
-
Table::Row::Header.new{ |h|
|
63
|
-
h.rowspan = 2
|
64
|
-
h.content = "Gender"
|
65
|
-
},
|
66
|
-
Table::Row::Header.new{ |h| h.content = "Male" },
|
67
|
-
"73%",
|
68
|
-
"27%"
|
69
|
-
}
|
70
|
-
)
|
71
|
-
|
72
|
-
brow = Table::Row.new{ |r| r.align = "center" }
|
73
|
-
bheader = Table::Row::Header.new('Female')
|
74
|
-
brow.push(bheader,"16%","84%")
|
75
|
-
|
76
|
-
tbody.push(brow)
|
77
|
-
|
78
|
-
frow = Table::Row.new{ |r|
|
79
|
-
r.content = Table::Row::Data.new{ |d|
|
80
|
-
d.colspan = 4
|
81
|
-
d.align = "center"
|
82
|
-
d.content = "Note: eye pokes did not result in permanent injury"
|
83
|
-
}
|
84
|
-
}
|
85
|
-
|
86
|
-
tfoot[0] = frow
|
87
|
-
|
88
|
-
table.push thead, tbody, tfoot
|
89
|
-
|
90
|
-
# caption is added last, but does the right thing
|
91
|
-
table.push caption
|
92
|
-
|
93
|
-
puts table.html
|
94
|
-
|
95
|
-
=begin
|
96
|
-
### OUTPUT ###
|
97
|
-
<table border=1 cellspacing=0 cellpadding=0 rules='groups'>
|
98
|
-
<caption align='bottom'>Kumquat versus a poked eye, by gender</caption>
|
99
|
-
<thead>
|
100
|
-
<tr>
|
101
|
-
<td colspan=2 rowspan=2>
|
102
|
-
<th colspan=2 align='center'>Preference
|
103
|
-
</tr>
|
104
|
-
<tr>
|
105
|
-
<th>Eating Kumquats
|
106
|
-
<th>Poke In The Eye
|
107
|
-
</tr>
|
108
|
-
</thead>
|
109
|
-
<tbody>
|
110
|
-
<tr align='center'>
|
111
|
-
<th rowspan=2>Gender
|
112
|
-
<th>Male
|
113
|
-
<td>73%
|
114
|
-
<td>27%
|
115
|
-
</tr>
|
116
|
-
<tr align='center'>
|
117
|
-
<th>Female
|
118
|
-
<td>16%
|
119
|
-
<td>84%
|
120
|
-
</tr>
|
121
|
-
</tbody>
|
122
|
-
<tfoot>
|
123
|
-
<tr>
|
124
|
-
<td colspan=4 align='center'>Note: eye pokes did not result in permanent injury
|
125
|
-
</tr>
|
126
|
-
</tfoot>
|
127
|
-
</table>
|
128
|
-
=end
|
1
|
+
##############################################################################
|
2
|
+
# advanced1.rb
|
3
|
+
#
|
4
|
+
# For this example we'll use every feature I can think of to come up with
|
5
|
+
# the example found in "HTML: The Definitive Guide", pp. 395-396 (O'Reilly
|
6
|
+
# & Associates, 3rd ed).
|
7
|
+
#
|
8
|
+
# You can run this example via the 'example:advanced' rake task.
|
9
|
+
##############################################################################
|
10
|
+
require 'html/table'
|
11
|
+
include HTML
|
12
|
+
|
13
|
+
Table::Row::Data.end_tags = false
|
14
|
+
Table::Row::Header.end_tags = false
|
15
|
+
|
16
|
+
# Demonstrates the DSL style syntax
|
17
|
+
table = Table.new do
|
18
|
+
border 1
|
19
|
+
cellspacing 0
|
20
|
+
cellpadding 0
|
21
|
+
rules 'groups'
|
22
|
+
end
|
23
|
+
|
24
|
+
# Demonstrates the use of setters after object creation
|
25
|
+
caption = Table::Caption.new
|
26
|
+
caption.align = "bottom"
|
27
|
+
caption.content = "Kumquat versus a poked eye, by gender"
|
28
|
+
|
29
|
+
thead = Table::Head.create
|
30
|
+
tbody = Table::Body.new
|
31
|
+
tfoot = Table::Foot.create
|
32
|
+
|
33
|
+
# Add a row with a td and th, then configure after the fact.
|
34
|
+
thead.push Table::Row.new{ |r|
|
35
|
+
r.content = Table::Row::Data.new, Table::Row::Header.new
|
36
|
+
}
|
37
|
+
|
38
|
+
# And again, longhand
|
39
|
+
hrow = Table::Row.new
|
40
|
+
h1 = Table::Row::Header.new('Eating Kumquats')
|
41
|
+
h2 = Table::Row::Header.new('Poke In The Eye')
|
42
|
+
hrow.push h1, h2
|
43
|
+
thead.push hrow
|
44
|
+
|
45
|
+
# Configure a row after the fact
|
46
|
+
thead.configure(0,0){ |d|
|
47
|
+
d.colspan = 2
|
48
|
+
d.rowspan = 2
|
49
|
+
}
|
50
|
+
|
51
|
+
thead.configure(0,1){ |h|
|
52
|
+
h.colspan = 2
|
53
|
+
h.align = "center"
|
54
|
+
h.content = "Preference"
|
55
|
+
}
|
56
|
+
|
57
|
+
# Ugly, but just to show you that it's possible
|
58
|
+
tbody.push(
|
59
|
+
Table::Row.new{ |r|
|
60
|
+
r.align = "center"
|
61
|
+
r.content =
|
62
|
+
Table::Row::Header.new{ |h|
|
63
|
+
h.rowspan = 2
|
64
|
+
h.content = "Gender"
|
65
|
+
},
|
66
|
+
Table::Row::Header.new{ |h| h.content = "Male" },
|
67
|
+
"73%",
|
68
|
+
"27%"
|
69
|
+
}
|
70
|
+
)
|
71
|
+
|
72
|
+
brow = Table::Row.new{ |r| r.align = "center" }
|
73
|
+
bheader = Table::Row::Header.new('Female')
|
74
|
+
brow.push(bheader,"16%","84%")
|
75
|
+
|
76
|
+
tbody.push(brow)
|
77
|
+
|
78
|
+
frow = Table::Row.new{ |r|
|
79
|
+
r.content = Table::Row::Data.new{ |d|
|
80
|
+
d.colspan = 4
|
81
|
+
d.align = "center"
|
82
|
+
d.content = "Note: eye pokes did not result in permanent injury"
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
tfoot[0] = frow
|
87
|
+
|
88
|
+
table.push thead, tbody, tfoot
|
89
|
+
|
90
|
+
# caption is added last, but does the right thing
|
91
|
+
table.push caption
|
92
|
+
|
93
|
+
puts table.html
|
94
|
+
|
95
|
+
=begin
|
96
|
+
### OUTPUT ###
|
97
|
+
<table border=1 cellspacing=0 cellpadding=0 rules='groups'>
|
98
|
+
<caption align='bottom'>Kumquat versus a poked eye, by gender</caption>
|
99
|
+
<thead>
|
100
|
+
<tr>
|
101
|
+
<td colspan=2 rowspan=2>
|
102
|
+
<th colspan=2 align='center'>Preference
|
103
|
+
</tr>
|
104
|
+
<tr>
|
105
|
+
<th>Eating Kumquats
|
106
|
+
<th>Poke In The Eye
|
107
|
+
</tr>
|
108
|
+
</thead>
|
109
|
+
<tbody>
|
110
|
+
<tr align='center'>
|
111
|
+
<th rowspan=2>Gender
|
112
|
+
<th>Male
|
113
|
+
<td>73%
|
114
|
+
<td>27%
|
115
|
+
</tr>
|
116
|
+
<tr align='center'>
|
117
|
+
<th>Female
|
118
|
+
<td>16%
|
119
|
+
<td>84%
|
120
|
+
</tr>
|
121
|
+
</tbody>
|
122
|
+
<tfoot>
|
123
|
+
<tr>
|
124
|
+
<td colspan=4 align='center'>Note: eye pokes did not result in permanent injury
|
125
|
+
</tr>
|
126
|
+
</tfoot>
|
127
|
+
</table>
|
128
|
+
=end
|