html-table 1.3.3 → 1.3.4
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 +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
|