ruby-web 1.1.1
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/ChangeLog +474 -0
- data/INSTALL.txt +9 -0
- data/InstalledFiles +180 -0
- data/LICENSE.txt +74 -0
- data/Rakefile +529 -0
- data/TODO +65 -0
- data/doc/additional.xml +149 -0
- data/doc/core.xml +652 -0
- data/doc/credits/index.xml +52 -0
- data/doc/credits/php.contributors.xml +118 -0
- data/doc/credits/php.language-snippets.ent +622 -0
- data/doc/install/index.xml +136 -0
- data/doc/install/mac/index.xml +21 -0
- data/doc/install/ruby-web.install.rb.instructions.xml +7 -0
- data/doc/install/unix/index.xml +46 -0
- data/doc/install/win/apache1.xml +166 -0
- data/doc/install/win/apache2.xml +141 -0
- data/doc/install/win/iis.xml +162 -0
- data/doc/install/win/index.xml +24 -0
- data/doc/install/win/installer.xml +31 -0
- data/doc/install/win/manual.xml +43 -0
- data/doc/manual.xml +69 -0
- data/doc/old/apache_cgi.txt +23 -0
- data/doc/old/fastcgi.txt +23 -0
- data/doc/old/mod_ruby.txt +21 -0
- data/doc/old/snippets.rdoc +183 -0
- data/doc/old/webrick.txt +23 -0
- data/doc/old/windows_cgi.txt +9 -0
- data/doc/tutorial.xml +14 -0
- data/doc/xsl/manual-multi.xsl +10 -0
- data/doc/xsl/manual-pdf.xsl +6 -0
- data/doc/xsl/manual-single.xsl +6 -0
- data/doc/xsl/manual.css +22 -0
- data/install.rb +1022 -0
- data/lib/formatter.rb +314 -0
- data/lib/html-parser.rb +429 -0
- data/lib/htmlrepair.rb +113 -0
- data/lib/htmlsplit.rb +842 -0
- data/lib/sgml-parser.rb +332 -0
- data/lib/web.rb +68 -0
- data/lib/web/assertinclude.rb +129 -0
- data/lib/web/config.rb +50 -0
- data/lib/web/connection.rb +1070 -0
- data/lib/web/convenience.rb +154 -0
- data/lib/web/formreader.rb +318 -0
- data/lib/web/htmlparser/html-parser.rb +429 -0
- data/lib/web/htmlparser/sgml-parser.rb +332 -0
- data/lib/web/htmltools/element.rb +296 -0
- data/lib/web/htmltools/stparser.rb +276 -0
- data/lib/web/htmltools/tags.rb +286 -0
- data/lib/web/htmltools/tree.rb +139 -0
- data/lib/web/htmltools/xmltree.rb +160 -0
- data/lib/web/htmltools/xpath.rb +71 -0
- data/lib/web/info.rb +63 -0
- data/lib/web/load.rb +210 -0
- data/lib/web/mime.rb +87 -0
- data/lib/web/phprb.rb +340 -0
- data/lib/web/resources/test/cookie.rb +33 -0
- data/lib/web/resources/test/counter.rb +20 -0
- data/lib/web/resources/test/multipart.rb +14 -0
- data/lib/web/resources/test/redirect.rb +8 -0
- data/lib/web/resources/test/stock.rb +33 -0
- data/lib/web/sapi/apache.rb +129 -0
- data/lib/web/sapi/fastcgi.rb +22 -0
- data/lib/web/sapi/install/apache.rb +180 -0
- data/lib/web/sapi/install/iis.rb +93 -0
- data/lib/web/sapi/install/macosx.rb +90 -0
- data/lib/web/sapi/webrick.rb +86 -0
- data/lib/web/session.rb +83 -0
- data/lib/web/shim/cgi.rb +129 -0
- data/lib/web/shim/rails.rb +175 -0
- data/lib/web/stringio.rb +78 -0
- data/lib/web/strscanparser.rb +24 -0
- data/lib/web/tagparser.rb +96 -0
- data/lib/web/testing.rb +666 -0
- data/lib/web/traceoutput.rb +75 -0
- data/lib/web/unit.rb +56 -0
- data/lib/web/upload.rb +59 -0
- data/lib/web/validate.rb +52 -0
- data/lib/web/wiki.rb +557 -0
- data/lib/web/wiki/linker.rb +72 -0
- data/lib/web/wiki/page.rb +201 -0
- data/lib/webunit.rb +27 -0
- data/lib/webunit/assert.rb +152 -0
- data/lib/webunit/converter.rb +154 -0
- data/lib/webunit/cookie.rb +118 -0
- data/lib/webunit/domwalker.rb +185 -0
- data/lib/webunit/exception.rb +14 -0
- data/lib/webunit/form.rb +116 -0
- data/lib/webunit/frame.rb +37 -0
- data/lib/webunit/htmlelem.rb +122 -0
- data/lib/webunit/image.rb +26 -0
- data/lib/webunit/jscript.rb +31 -0
- data/lib/webunit/link.rb +33 -0
- data/lib/webunit/params.rb +321 -0
- data/lib/webunit/parser.rb +229 -0
- data/lib/webunit/response.rb +464 -0
- data/lib/webunit/runtest.rb +41 -0
- data/lib/webunit/table.rb +148 -0
- data/lib/webunit/testcase.rb +45 -0
- data/lib/webunit/ui/cui/testrunner.rb +50 -0
- data/lib/webunit/utils.rb +68 -0
- data/lib/webunit/webunit.rb +28 -0
- data/test/dev/action.rb +83 -0
- data/test/dev/forms.rb +104 -0
- data/test/dev/forms2.rb +104 -0
- data/test/dev/parser.rb +17 -0
- data/test/dev/scripts/dump.rb +24 -0
- data/test/dev/scripts/makedist.rb +62 -0
- data/test/dev/scripts/uri.rb +41 -0
- data/test/dev/scripts/uri/common.rb +432 -0
- data/test/dev/scripts/uri/ftp.rb +149 -0
- data/test/dev/scripts/uri/generic.rb +1106 -0
- data/test/dev/scripts/uri/http.rb +76 -0
- data/test/dev/scripts/uri/https.rb +26 -0
- data/test/dev/scripts/uri/ldap.rb +238 -0
- data/test/dev/scripts/uri/mailto.rb +260 -0
- data/test/dev/scripts/urireg.rb +174 -0
- data/test/dev/simpledispatcher.rb +156 -0
- data/test/dev/test.action.rb +146 -0
- data/test/dev/test.formreader.rb +463 -0
- data/test/dev/test.simpledispatcher.rb +186 -0
- data/test/dev/webunit/conv/digit-0.rb +21 -0
- data/test/dev/webunit/conv/digit-1.rb +17 -0
- data/test/dev/webunit/conv/digit.rb +23 -0
- data/test/dev/webunit/conv/test_digit-0.rb +16 -0
- data/test/dev/webunit/conv/test_digit-1.rb +19 -0
- data/test/dev/webunit/conv/test_digit.rb +26 -0
- data/test/dev/webunit/conv/test_digit_view-0.rb +76 -0
- data/test/dev/webunit/conv/test_digit_view-1.rb +102 -0
- data/test/dev/webunit/conv/test_digit_view.rb +134 -0
- data/test/installation/htdocs/cgi_test.rb +296 -0
- data/test/installation/htdocs/test_install.rb +4 -0
- data/test/installation/runwebtest.rb +5 -0
- data/test/installation/test_cookie.rb +128 -0
- data/test/installation/test_form.rb +47 -0
- data/test/installation/test_multipart.rb +51 -0
- data/test/installation/test_request.rb +24 -0
- data/test/installation/test_response.rb +35 -0
- data/test/unit/htdocs/cookie.rb +32 -0
- data/test/unit/htdocs/multipart.rb +28 -0
- data/test/unit/htdocs/redirect.rb +12 -0
- data/test/unit/htdocs/simple.rb +13 -0
- data/test/unit/htdocs/stock.rb +33 -0
- data/test/unit/test_assert.rb +162 -0
- data/test/unit/test_cookie.rb +114 -0
- data/test/unit/test_domwalker.rb +77 -0
- data/test/unit/test_form.rb +42 -0
- data/test/unit/test_frame.rb +40 -0
- data/test/unit/test_htmlelem.rb +74 -0
- data/test/unit/test_image.rb +45 -0
- data/test/unit/test_jscript.rb +57 -0
- data/test/unit/test_link.rb +85 -0
- data/test/unit/test_multipart.rb +51 -0
- data/test/unit/test_params.rb +210 -0
- data/test/unit/test_parser.rb +53 -0
- data/test/unit/test_response.rb +150 -0
- data/test/unit/test_table.rb +70 -0
- data/test/unit/test_utils.rb +106 -0
- data/test/unit/test_webunit.rb +28 -0
- data/test/web/mod_ruby_stub.rb +39 -0
- data/test/web/test.assertinclude.rb +109 -0
- data/test/web/test.buffer.rb +182 -0
- data/test/web/test.code.loader.rb +78 -0
- data/test/web/test.config.rb +31 -0
- data/test/web/test.error.handling.rb +91 -0
- data/test/web/test.formreader-2.0.rb +352 -0
- data/test/web/test.load.rb +125 -0
- data/test/web/test.mime-type.rb +23 -0
- data/test/web/test.narf.cgi.rb +106 -0
- data/test/web/test.phprb.rb +239 -0
- data/test/web/test.request.rb +368 -0
- data/test/web/test.response.rb +637 -0
- data/test/web/test.ruby-web.rb +10 -0
- data/test/web/test.session.rb +50 -0
- data/test/web/test.shim.cgi.rb +96 -0
- data/test/web/test.tagparser.rb +65 -0
- data/test/web/test.template2.rb +297 -0
- data/test/web/test.testing2.rb +318 -0
- data/test/web/test.upload.rb +45 -0
- data/test/web/test.validate.rb +46 -0
- data/test/web/test.web.test.rb +495 -0
- data/test/wiki/test.history.rb +297 -0
- data/test/wiki/test.illustration_page.rb +287 -0
- data/test/wiki/test.linker.rb +197 -0
- data/test/wiki/test.tarpit.rb +56 -0
- data/test/wiki/test.wiki.rb +300 -0
- data/test/wikitestroot/admin.rb +7 -0
- data/test/wikitestroot/wiki.rb +6 -0
- metadata +234 -0
data/lib/formatter.rb
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
class NullFormatter
|
|
2
|
+
def initialize(writer=nil)
|
|
3
|
+
if not writer
|
|
4
|
+
writer = NullWriter.new
|
|
5
|
+
end
|
|
6
|
+
@writer = writer
|
|
7
|
+
end
|
|
8
|
+
def end_paragraph(blankline) end
|
|
9
|
+
def add_line_break() end
|
|
10
|
+
#def add_hor_rule(*args, **kw) end
|
|
11
|
+
def add_hor_rule() end
|
|
12
|
+
def add_label_data(format, counter, blankline=nil) end
|
|
13
|
+
def add_flowing_data(data) end
|
|
14
|
+
def add_literal_data(data) end
|
|
15
|
+
def flush_softspace() end
|
|
16
|
+
def push_alignment(align) end
|
|
17
|
+
def pop_alignment() end
|
|
18
|
+
def push_font(size, i, b, tt) end
|
|
19
|
+
def pop_font() end
|
|
20
|
+
def push_margin(margin) end
|
|
21
|
+
def pop_margin() end
|
|
22
|
+
def set_spacing(spacing) end
|
|
23
|
+
def push_style(*styles) end
|
|
24
|
+
def pop_style(n=1) end
|
|
25
|
+
def assert_line_data(flag=1) end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class AbstractFormatter < NullFormatter
|
|
29
|
+
|
|
30
|
+
def initialize(writer)
|
|
31
|
+
@writer = writer
|
|
32
|
+
@align = nil
|
|
33
|
+
@align_stack = []
|
|
34
|
+
@font_stack = []
|
|
35
|
+
@margin_stack = []
|
|
36
|
+
@spacing = nil
|
|
37
|
+
@style_stack = []
|
|
38
|
+
@nospace = true
|
|
39
|
+
@softspace = false
|
|
40
|
+
@para_end = true
|
|
41
|
+
@parskip = 0
|
|
42
|
+
@hard_break = true
|
|
43
|
+
@have_label = false
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def end_paragraph(blankline)
|
|
47
|
+
if not @hard_break
|
|
48
|
+
@writer.send_line_break
|
|
49
|
+
@have_label = false
|
|
50
|
+
end
|
|
51
|
+
if (@parskip < blankline) and !@have_label
|
|
52
|
+
@writer.send_paragraph(blankline - @parskip)
|
|
53
|
+
@parskip = blankline
|
|
54
|
+
@have_label = 0
|
|
55
|
+
end
|
|
56
|
+
@hard_break = true
|
|
57
|
+
@nospace = true
|
|
58
|
+
@para_end = true
|
|
59
|
+
@softspace = false
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def add_line_break
|
|
63
|
+
if not (@hard_break or @para_end)
|
|
64
|
+
@writer.send_line_break
|
|
65
|
+
@have_label = false
|
|
66
|
+
@parskip = 0
|
|
67
|
+
end
|
|
68
|
+
@hard_break = true
|
|
69
|
+
@nospace = true
|
|
70
|
+
@softspace = false
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def add_hor_rule
|
|
74
|
+
if not @hard_break
|
|
75
|
+
@writer.send_line_break
|
|
76
|
+
end
|
|
77
|
+
@writer.send_hor_rule #(args, kw)
|
|
78
|
+
@hard_break = true
|
|
79
|
+
@nospace = true
|
|
80
|
+
@have_label = false
|
|
81
|
+
@para_end = false
|
|
82
|
+
@softspace = false
|
|
83
|
+
@parskip = 0
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def add_label_data(format, counter, blankline = nil)
|
|
87
|
+
if @have_label or !@hard_break
|
|
88
|
+
@writer.send_line_break
|
|
89
|
+
end
|
|
90
|
+
if not @para_end
|
|
91
|
+
@writer.send_paragraph(1) #((blankline and 1) or 0)
|
|
92
|
+
end
|
|
93
|
+
if format.kind_of? String
|
|
94
|
+
#@writer.send_label_data(format_counter(format, counter))
|
|
95
|
+
else
|
|
96
|
+
@writer.send_label_data(format)
|
|
97
|
+
end
|
|
98
|
+
@nospace = @have_label = @hard_break = @para_end = 1
|
|
99
|
+
@softspace = @parskip = 0
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def add_flowing_data(data)
|
|
103
|
+
return if not data
|
|
104
|
+
prespace = (/^\s/ =~ data)
|
|
105
|
+
postspace = (/\s$/ =~ data)
|
|
106
|
+
data = data.split.join(" ")
|
|
107
|
+
if @nospace and data.length < 1
|
|
108
|
+
return
|
|
109
|
+
elsif prespace or @softspace
|
|
110
|
+
if data.length == 0
|
|
111
|
+
if not @nospace
|
|
112
|
+
@softspace = true
|
|
113
|
+
@parskip = 0
|
|
114
|
+
end
|
|
115
|
+
return
|
|
116
|
+
end
|
|
117
|
+
if not @nospace
|
|
118
|
+
data = ' ' + data
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
@hard_break = @nospace = @para_end = false
|
|
122
|
+
@have_label = false
|
|
123
|
+
@parskip = 0
|
|
124
|
+
@softspace = postspace
|
|
125
|
+
@writer.send_flowing_data(data)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def add_literal_data(data)
|
|
129
|
+
return if not data
|
|
130
|
+
if @softspace
|
|
131
|
+
@writer.send_flowing_data("_")
|
|
132
|
+
end
|
|
133
|
+
@hard_break = (data[-1,1] == "\n")
|
|
134
|
+
@nospace = @para_end = @softspace = false
|
|
135
|
+
@have_label = false
|
|
136
|
+
@parskip = 0
|
|
137
|
+
@writer.send_literal_data(data)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def flush_softspace
|
|
141
|
+
if @softspace
|
|
142
|
+
@hard_break = false
|
|
143
|
+
@para_end = false
|
|
144
|
+
@have_label = false
|
|
145
|
+
@softspace = false
|
|
146
|
+
@parskip = 0
|
|
147
|
+
@nospace = true
|
|
148
|
+
@writer.send_flowing_data(' ')
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def push_font(size, i, b, tt)
|
|
153
|
+
if @softspace
|
|
154
|
+
@hard_break = false
|
|
155
|
+
@para_end = false
|
|
156
|
+
@softspace = false
|
|
157
|
+
@nospace = true
|
|
158
|
+
@writer.send_flowing_data(' ')
|
|
159
|
+
end
|
|
160
|
+
if @font_stack.length > 0
|
|
161
|
+
csize, ci, cb, ctt = @font_stack[-1]
|
|
162
|
+
if size == nil
|
|
163
|
+
size = csize
|
|
164
|
+
end
|
|
165
|
+
if i == nil
|
|
166
|
+
i = ci
|
|
167
|
+
end
|
|
168
|
+
if b == nil
|
|
169
|
+
b = cb
|
|
170
|
+
end
|
|
171
|
+
if tt == nil
|
|
172
|
+
tt = ctt
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
font = [size, i, b, tt]
|
|
176
|
+
@font_stack << font
|
|
177
|
+
@writer.new_font(font)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def pop_font
|
|
181
|
+
if @font_stack.length > 0
|
|
182
|
+
@font_stack.pop
|
|
183
|
+
end
|
|
184
|
+
if @font_stack
|
|
185
|
+
font = @font_stack[-1]
|
|
186
|
+
else
|
|
187
|
+
font = nil
|
|
188
|
+
end
|
|
189
|
+
@writer.new_font(font)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def push_margin(margin)
|
|
193
|
+
@margin_stack << margin
|
|
194
|
+
fstack = @margin_stack.compact
|
|
195
|
+
if (!margin) && (fstack.length > 0)
|
|
196
|
+
margin = fstack[-1]
|
|
197
|
+
end
|
|
198
|
+
@writer.new_margin(margin, fstack.length)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def pop_margin
|
|
202
|
+
if @margin_stack
|
|
203
|
+
@margin_stack.pop
|
|
204
|
+
end
|
|
205
|
+
fstack = @margin_stack.compact
|
|
206
|
+
if fstack.length > 0
|
|
207
|
+
margin = fstack[-1]
|
|
208
|
+
else
|
|
209
|
+
margin = nil
|
|
210
|
+
end
|
|
211
|
+
@writer.new_margin(margin, fstack.length)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def set_spacing(spacing)
|
|
215
|
+
@spacing = spacing
|
|
216
|
+
@writer.new_spacing(spacing)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def assert_line_data(flag=true)
|
|
220
|
+
@nospace = !flag
|
|
221
|
+
@hard_break = !flag
|
|
222
|
+
@para_end = false
|
|
223
|
+
@have_label = false
|
|
224
|
+
@parskip = 0
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
class NullWriter
|
|
230
|
+
def initialize() end
|
|
231
|
+
def flush() end
|
|
232
|
+
def new_alignment(align) end
|
|
233
|
+
def new_font(font) end
|
|
234
|
+
def new_margin(margin, level) end
|
|
235
|
+
def new_spacing(spacing) end
|
|
236
|
+
def new_styles(styles) end
|
|
237
|
+
def send_paragraph(blankline) end
|
|
238
|
+
def send_line_break() end
|
|
239
|
+
def send_hor_rule() end
|
|
240
|
+
def send_label_data(data) end
|
|
241
|
+
def send_flowing_data(data) end
|
|
242
|
+
def send_literal_data(data) end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
class DumbWriter < NullWriter
|
|
246
|
+
|
|
247
|
+
def initialize(file=STDOUT, maxcol=72)
|
|
248
|
+
@file = file
|
|
249
|
+
@maxcol = maxcol
|
|
250
|
+
super()
|
|
251
|
+
reset
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def reset
|
|
255
|
+
@col = 0
|
|
256
|
+
@atbreak = false
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def send_paragraph(blankline)
|
|
260
|
+
@file.write("\n" + "\n"*blankline)
|
|
261
|
+
@col = 0
|
|
262
|
+
@atbreak = false
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def send_line_break
|
|
266
|
+
@file.write("\n")
|
|
267
|
+
@col = 0
|
|
268
|
+
@atbreak = false
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def send_hor_rule #(*args, **kw)
|
|
272
|
+
@file.write("\n")
|
|
273
|
+
@file.write('-'*@maxcol)
|
|
274
|
+
@file.write("\n")
|
|
275
|
+
@col = 0
|
|
276
|
+
@atbreak = false
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def send_literal_data(data)
|
|
280
|
+
@file.write(data)
|
|
281
|
+
i = data.rindex("\n")
|
|
282
|
+
if i
|
|
283
|
+
@col = 0
|
|
284
|
+
data = data[i+1..-1]
|
|
285
|
+
#data = string.expandtabs(data)
|
|
286
|
+
@col = @col + data.length
|
|
287
|
+
@atbreak = false
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def send_flowing_data(data)
|
|
292
|
+
return if not data
|
|
293
|
+
atbreak = (@atbreak || (/^\s/ =~ data))
|
|
294
|
+
col = @col
|
|
295
|
+
maxcol = @maxcol
|
|
296
|
+
for word in data.split
|
|
297
|
+
if atbreak
|
|
298
|
+
if col + word.length >= maxcol
|
|
299
|
+
@file.write("\n")
|
|
300
|
+
col = 0
|
|
301
|
+
else
|
|
302
|
+
@file.write(' ')
|
|
303
|
+
col = col + 1
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
@file.write(word)
|
|
307
|
+
col = col + word.length
|
|
308
|
+
atbreak = true
|
|
309
|
+
end
|
|
310
|
+
@col = col
|
|
311
|
+
@atbreak = (/\s$/ =~ data)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
end
|
data/lib/html-parser.rb
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
# HTML parser
|
|
2
|
+
|
|
3
|
+
require 'sgml-parser'
|
|
4
|
+
|
|
5
|
+
class HTMLParser < SGMLParser
|
|
6
|
+
|
|
7
|
+
def initialize(formatter, verbose=nil)
|
|
8
|
+
super(verbose)
|
|
9
|
+
@formatter = formatter
|
|
10
|
+
@savedata = nil
|
|
11
|
+
@isindex = 0
|
|
12
|
+
@title = nil
|
|
13
|
+
@base = nil
|
|
14
|
+
@anchor = nil
|
|
15
|
+
@anchorlist = []
|
|
16
|
+
@nofill = 0
|
|
17
|
+
@list_stack = []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def handle_data(data)
|
|
22
|
+
if @savedata
|
|
23
|
+
@savedata = @savedata + data
|
|
24
|
+
else
|
|
25
|
+
if @nofill != 0
|
|
26
|
+
@formatter.add_literal_data(data)
|
|
27
|
+
else
|
|
28
|
+
@formatter.add_flowing_data(data)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def save_bgn
|
|
34
|
+
@savedata = ''
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def save_end
|
|
38
|
+
data = @savedata
|
|
39
|
+
@savedata = nil
|
|
40
|
+
data = '' if data == nil
|
|
41
|
+
if @nofill == 0
|
|
42
|
+
data = data.split.join(" ")
|
|
43
|
+
end
|
|
44
|
+
return data
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def anchor_bgn(href, name, type)
|
|
48
|
+
@anchor = href
|
|
49
|
+
if @anchor
|
|
50
|
+
@anchorlist << href
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def anchor_end
|
|
55
|
+
if @anchor
|
|
56
|
+
#handle_data(format "[%d]", @anchorlist.length)
|
|
57
|
+
@anchor = nil
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def handle_image(src, alt, *args)
|
|
62
|
+
handle_data(alt)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def start_html(attrs) end
|
|
66
|
+
def end_html() end
|
|
67
|
+
|
|
68
|
+
def start_head(attrs) end
|
|
69
|
+
def end_head() end
|
|
70
|
+
|
|
71
|
+
def start_body(attrs) end
|
|
72
|
+
def end_body() end
|
|
73
|
+
|
|
74
|
+
def start_title(attrs)
|
|
75
|
+
save_bgn
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def end_title
|
|
79
|
+
@title = save_end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def do_base(attrs)
|
|
83
|
+
for a, v in attrs
|
|
84
|
+
if a == 'href'
|
|
85
|
+
@base = v
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def do_isindex(attrs)
|
|
91
|
+
@isindex = 1
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def do_link(attrs)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def do_meta(attrs)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def do_nextid(attrs) # Deprecated
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def start_h1(attrs)
|
|
105
|
+
@formatter.end_paragraph(1)
|
|
106
|
+
@formatter.push_font('h1', 0, 1, 0)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def end_h1
|
|
110
|
+
@formatter.end_paragraph(1)
|
|
111
|
+
@formatter.pop_font()
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def start_h2(attrs)
|
|
115
|
+
@formatter.end_paragraph(1)
|
|
116
|
+
@formatter.push_font('h2', 0, 1, 0)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def end_h2
|
|
120
|
+
@formatter.end_paragraph(1)
|
|
121
|
+
@formatter.pop_font()
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def start_h3(attrs)
|
|
125
|
+
@formatter.end_paragraph(1)
|
|
126
|
+
@formatter.push_font('h3', 0, 1, 0)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def end_h3
|
|
130
|
+
@formatter.end_paragraph(1)
|
|
131
|
+
@formatter.pop_font()
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def start_h4(attrs)
|
|
135
|
+
@formatter.end_paragraph(1)
|
|
136
|
+
@formatter.push_font('h4', 0, 1, 0)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def end_h4
|
|
140
|
+
@formatter.end_paragraph(1)
|
|
141
|
+
@formatter.pop_font()
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def start_h5(attrs)
|
|
145
|
+
@formatter.end_paragraph(1)
|
|
146
|
+
@formatter.push_font('h5', 0, 1, 0)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def end_h5
|
|
150
|
+
@formatter.end_paragraph(1)
|
|
151
|
+
@formatter.pop_font()
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def start_h6(attrs)
|
|
155
|
+
@formatter.end_paragraph(1)
|
|
156
|
+
@formatter.push_font('h6', 0, 1, 0)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def end_h6
|
|
160
|
+
@formatter.end_paragraph(1)
|
|
161
|
+
@formatter.pop_font()
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def do_p(attrs)
|
|
165
|
+
@formatter.end_paragraph(1)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def start_pre(attrs)
|
|
169
|
+
@formatter.end_paragraph(1)
|
|
170
|
+
@formatter.push_font(nil, nil, nil, 1)
|
|
171
|
+
@nofill = @nofill + 1
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def end_pre
|
|
175
|
+
@formatter.end_paragraph(1)
|
|
176
|
+
@formatter.pop_font()
|
|
177
|
+
@nofill = @nofill - 1
|
|
178
|
+
if @nofill < 0 then @nofill = 0 end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def start_xmp(attrs)
|
|
182
|
+
start_pre(attrs)
|
|
183
|
+
setliteral('xmp') # Tell SGML parser
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def end_xmp
|
|
187
|
+
end_pre
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def start_listing(attrs)
|
|
191
|
+
start_pre(attrs)
|
|
192
|
+
setliteral('listing') # Tell SGML parser
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def end_listing
|
|
196
|
+
end_pre
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def start_address(attrs)
|
|
200
|
+
@formatter.end_paragraph(0)
|
|
201
|
+
@formatter.push_font(nil, 1, nil, nil)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def end_address
|
|
205
|
+
@formatter.end_paragraph(0)
|
|
206
|
+
@formatter.pop_font()
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def start_blockquote(attrs)
|
|
210
|
+
@formatter.end_paragraph(1)
|
|
211
|
+
@formatter.push_margin('blockquote')
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def end_blockquote
|
|
215
|
+
@formatter.end_paragraph(1)
|
|
216
|
+
@formatter.pop_margin()
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def start_ul(attrs)
|
|
220
|
+
@formatter.end_paragraph(0)
|
|
221
|
+
@formatter.push_margin('ul')
|
|
222
|
+
@list_stack << ['ul', '*', 0]
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def end_ul
|
|
226
|
+
if @list_stack
|
|
227
|
+
@list_stack.pop
|
|
228
|
+
end
|
|
229
|
+
@formatter.end_paragraph(0)
|
|
230
|
+
@formatter.pop_margin
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def do_li(attrs)
|
|
234
|
+
@formatter.end_paragraph(0)
|
|
235
|
+
if @list_stack && @list_stack.size > 0
|
|
236
|
+
dummy, label, counter = top = @list_stack[-1]
|
|
237
|
+
top[2] = counter = counter+1
|
|
238
|
+
else
|
|
239
|
+
label, counter = '*', 0
|
|
240
|
+
end
|
|
241
|
+
@formatter.add_label_data(label, counter)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def start_ol(attrs)
|
|
245
|
+
@formatter.end_paragraph(0)
|
|
246
|
+
@formatter.push_margin('ol')
|
|
247
|
+
label = '1.'
|
|
248
|
+
for a, v in attrs
|
|
249
|
+
if a == 'type'
|
|
250
|
+
if v.length == 1
|
|
251
|
+
v = v + '.'
|
|
252
|
+
label = v
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
@list_stack << ['ol', label, 0]
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def end_ol
|
|
260
|
+
if @list_stack
|
|
261
|
+
@list_stack.pop
|
|
262
|
+
end
|
|
263
|
+
@formatter.end_paragraph(0)
|
|
264
|
+
@formatter.pop_margin
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def start_menu(attrs)
|
|
268
|
+
start_ul(attrs)
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def end_menu
|
|
272
|
+
end_ul
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
def start_dir(attrs)
|
|
276
|
+
start_ul(attrs)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def end_dir
|
|
280
|
+
end_ul
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def start_dl(attrs)
|
|
284
|
+
@formatter.end_paragraph(1)
|
|
285
|
+
@list_stack << ['dl', '', 0]
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def end_dl
|
|
289
|
+
ddpop(1)
|
|
290
|
+
if @list_stack.length > 0
|
|
291
|
+
@list_stack.pop
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def do_dt(attrs)
|
|
296
|
+
ddpop
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def do_dd(attrs)
|
|
300
|
+
ddpop
|
|
301
|
+
@formatter.push_margin('dd')
|
|
302
|
+
@list_stack << ['dd', '', 0]
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def ddpop(bl=0)
|
|
306
|
+
@formatter.end_paragraph(bl)
|
|
307
|
+
if @list_stack.length > 0
|
|
308
|
+
if @list_stack[-1][0] == 'dd'
|
|
309
|
+
@list_stack.pop
|
|
310
|
+
@formatter.pop_margin
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
def start_cite(attrs) start_i(attrs) end
|
|
316
|
+
def end_cite() end_i end
|
|
317
|
+
|
|
318
|
+
def start_code(attrs) start_tt(attrs) end
|
|
319
|
+
def end_code() end_tt end
|
|
320
|
+
|
|
321
|
+
def start_em(attrs) start_i(attrs) end
|
|
322
|
+
def end_em() end_i end
|
|
323
|
+
|
|
324
|
+
def start_kbd(attrs) start_tt(attrs) end
|
|
325
|
+
def end_kbd() end_tt end
|
|
326
|
+
|
|
327
|
+
def start_samp(attrs) start_tt(attrs) end
|
|
328
|
+
def end_samp() end_tt end
|
|
329
|
+
|
|
330
|
+
def start_strong(attrs) start_b(attrs) end
|
|
331
|
+
def end_strong() end_b end
|
|
332
|
+
|
|
333
|
+
def start_var(attrs) start_i(attrs) end
|
|
334
|
+
def end_var() end_i end
|
|
335
|
+
|
|
336
|
+
def start_i(attrs)
|
|
337
|
+
@formatter.push_font(nil, 1, nil, nil)
|
|
338
|
+
end
|
|
339
|
+
def end_i
|
|
340
|
+
@formatter.pop_font
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
def start_b(attrs)
|
|
344
|
+
@formatter.push_font(nil, nil, 1, nil)
|
|
345
|
+
end
|
|
346
|
+
def end_b
|
|
347
|
+
@formatter.pop_font
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def start_tt(attrs)
|
|
351
|
+
@formatter.push_font(nil, nil, nil, 1)
|
|
352
|
+
end
|
|
353
|
+
def end_tt
|
|
354
|
+
@formatter.pop_font
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
def start_a(attrs)
|
|
358
|
+
href = nil
|
|
359
|
+
name = nil
|
|
360
|
+
type = nil
|
|
361
|
+
for attrname, value in attrs
|
|
362
|
+
value = value.strip
|
|
363
|
+
if attrname == 'href'
|
|
364
|
+
href = value
|
|
365
|
+
end
|
|
366
|
+
if attrname == 'name'
|
|
367
|
+
name = value
|
|
368
|
+
end
|
|
369
|
+
if attrname == 'type'
|
|
370
|
+
type = value.downcase
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
anchor_bgn(href, name, type)
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
def end_a
|
|
377
|
+
anchor_end
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
def do_br(attrs)
|
|
381
|
+
@formatter.add_line_break
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
def do_hr(attrs)
|
|
385
|
+
@formatter.add_hor_rule
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
def do_img(attrs)
|
|
389
|
+
align = nil
|
|
390
|
+
alt = '(image)'
|
|
391
|
+
ismap = nil
|
|
392
|
+
src = nil
|
|
393
|
+
width = 0
|
|
394
|
+
height = 0
|
|
395
|
+
for attrname, value in attrs
|
|
396
|
+
if attrname == 'align'
|
|
397
|
+
align = value
|
|
398
|
+
end
|
|
399
|
+
if attrname == 'alt'
|
|
400
|
+
alt = value
|
|
401
|
+
end
|
|
402
|
+
if attrname == 'ismap'
|
|
403
|
+
ismap = value
|
|
404
|
+
end
|
|
405
|
+
if attrname == 'src'
|
|
406
|
+
src = value
|
|
407
|
+
end
|
|
408
|
+
if attrname == 'width'
|
|
409
|
+
width = Integer(value)
|
|
410
|
+
end
|
|
411
|
+
if attrname == 'height'
|
|
412
|
+
height = Integer(value)
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
handle_image(src, alt, ismap, align, width, height)
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
def do_plaintext(attrs)
|
|
419
|
+
start_pre(attrs)
|
|
420
|
+
setnomoretags # Tell SGML parser
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
def unknown_starttag(tag, attrs)
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
def unknown_endtag(tag)
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
end
|