icalendar 0.97 → 0.98
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/Rakefile +2 -2
- data/docs/api/classes/Icalendar/Component.src/M000029.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000030.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000035.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000040.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000041.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000042.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000043.html +9 -4
- data/docs/api/classes/Icalendar/Component.src/M000044.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000045.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000046.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000047.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000048.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000049.html +1 -1
- data/docs/api/classes/Icalendar/Component.src/M000050.html +1 -1
- data/docs/api/classes/Icalendar/Geo.html +2 -2
- data/docs/api/classes/Icalendar/Geo.src/M000024.html +1 -1
- data/docs/api/classes/Icalendar/Geo.src/M000025.html +1 -1
- data/docs/api/classes/String.src/M000012.html +1 -1
- data/docs/api/created.rid +1 -1
- data/docs/api/files/lib/icalendar/component_rb.html +1 -1
- data/docs/api/files/lib/icalendar/conversions_rb.html +1 -1
- data/docs/api/files/lib/icalendar/parser_rb.html +1 -1
- data/lib/icalendar/component.rb +10 -3
- data/lib/icalendar/conversions.rb +1 -1
- data/lib/icalendar/parser.rb +1 -1
- data/test/conversions_test.rb +35 -4
- data/test/fixtures/folding.ics +23 -0
- data/test/{life.ics → fixtures/life.ics} +0 -0
- data/test/{simplecal.ics → fixtures/simplecal.ics} +0 -0
- data/test/{single_event.ics → fixtures/single_event.ics} +1 -1
- data/test/parser_test.rb +2 -2
- metadata +7 -44
- data/test/coverage/-home-rosejn-projects-icalendar-lib-hash_attrs_rb.html +0 -574
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-base_rb.html +0 -575
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-calendar_rb.html +0 -629
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-component-alarm_rb.html +0 -581
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-component-event_rb.html +0 -658
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-component-freebusy_rb.html +0 -574
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-component-journal_rb.html +0 -597
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-component-timezone_rb.html +0 -625
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-component-todo_rb.html +0 -600
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-component_rb.html +0 -924
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-conversions_rb.html +0 -667
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar-parser_rb.html +0 -938
- data/test/coverage/-home-rosejn-projects-icalendar-lib-icalendar_rb.html +0 -576
- data/test/coverage/-home-rosejn-projects-icalendar-lib-meta_rb.html +0 -572
- data/test/coverage/calendar_test_rb.html +0 -590
- data/test/coverage/component_test_rb.html +0 -602
- data/test/coverage/index.html +0 -1009
- data/test/coverage/lib-hash_attrs_rb.html +0 -574
- data/test/coverage/lib-icalendar-base_rb.html +0 -583
- data/test/coverage/lib-icalendar-calendar_rb.html +0 -631
- data/test/coverage/lib-icalendar-component-alarm_rb.html +0 -581
- data/test/coverage/lib-icalendar-component-event_rb.html +0 -661
- data/test/coverage/lib-icalendar-component-freebusy_rb.html +0 -576
- data/test/coverage/lib-icalendar-component-journal_rb.html +0 -599
- data/test/coverage/lib-icalendar-component-timezone_rb.html +0 -625
- data/test/coverage/lib-icalendar-component-todo_rb.html +0 -602
- data/test/coverage/lib-icalendar-component_rb.html +0 -941
- data/test/coverage/lib-icalendar-conversions_rb.html +0 -673
- data/test/coverage/lib-icalendar-parser_rb.html +0 -916
- data/test/coverage/lib-icalendar_rb.html +0 -576
- data/test/coverage/lib-meta_rb.html +0 -572
- data/test/coverage/parameter_test_rb.html +0 -569
- data/test/coverage/parser_test_rb.html +0 -623
- data/test/coverage/test-calendar_test_rb.html +0 -590
- data/test/coverage/test-component-event_test_rb.html +0 -584
- data/test/coverage/test-component_test_rb.html +0 -606
- data/test/coverage/test-conversions_test_rb.html +0 -603
- data/test/coverage/test-parameter_test_rb.html +0 -569
- data/test/coverage/test-parser_test_rb.html +0 -624
|
@@ -1,924 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>/home/rosejn/projects/icalendar/lib/icalendar/component.rb - C0 code coverage information</title><style type='text/css'>body { background-color: rgb(240, 240, 245); }</style><style type='text/css'>span.marked {
|
|
2
|
-
background-color: rgb(185, 200, 200);
|
|
3
|
-
display: block;
|
|
4
|
-
}
|
|
5
|
-
span.inferred {
|
|
6
|
-
background-color: rgb(170, 185, 185);
|
|
7
|
-
display: block;
|
|
8
|
-
}
|
|
9
|
-
span.overview {
|
|
10
|
-
border-bottom: 8px solid black;
|
|
11
|
-
}
|
|
12
|
-
div.overview {
|
|
13
|
-
border-bottom: 8px solid black;
|
|
14
|
-
}
|
|
15
|
-
body {
|
|
16
|
-
font-family: verdana, arial, helvetica;
|
|
17
|
-
}
|
|
18
|
-
div.footer {
|
|
19
|
-
font-size: 68%;
|
|
20
|
-
margin-top: 1.5em;
|
|
21
|
-
}
|
|
22
|
-
h1, h2, h3, h4, h5, h6 {
|
|
23
|
-
margin-bottom: 0.5em;
|
|
24
|
-
}
|
|
25
|
-
h5 {
|
|
26
|
-
margin-top: 0.5em;
|
|
27
|
-
}
|
|
28
|
-
.hidden {
|
|
29
|
-
display: none;
|
|
30
|
-
}
|
|
31
|
-
div.separator {
|
|
32
|
-
height: 10px;
|
|
33
|
-
}
|
|
34
|
-
table tr td, table tr th {
|
|
35
|
-
font-size: 68%;
|
|
36
|
-
}
|
|
37
|
-
td.value table tr td {
|
|
38
|
-
font-size: 11px;
|
|
39
|
-
}
|
|
40
|
-
table.percent_graph {
|
|
41
|
-
height: 12px;
|
|
42
|
-
border: #808080 1px solid;
|
|
43
|
-
empty-cells: show;
|
|
44
|
-
}
|
|
45
|
-
table.percent_graph td.covered {
|
|
46
|
-
height: 10px;
|
|
47
|
-
background: #00f000;
|
|
48
|
-
}
|
|
49
|
-
table.percent_graph td.uncovered {
|
|
50
|
-
height: 10px;
|
|
51
|
-
background: #e00000;
|
|
52
|
-
}
|
|
53
|
-
table.percent_graph td.NA {
|
|
54
|
-
height: 10px;
|
|
55
|
-
background: #eaeaea;
|
|
56
|
-
}
|
|
57
|
-
table.report {
|
|
58
|
-
border-collapse: collapse;
|
|
59
|
-
width: 100%;
|
|
60
|
-
}
|
|
61
|
-
table.report td.heading {
|
|
62
|
-
background: #dcecff;
|
|
63
|
-
border: #d0d0d0 1px solid;
|
|
64
|
-
font-weight: bold;
|
|
65
|
-
text-align: center;
|
|
66
|
-
}
|
|
67
|
-
table.report td.heading:hover {
|
|
68
|
-
background: #c0ffc0;
|
|
69
|
-
}
|
|
70
|
-
table.report td.text {
|
|
71
|
-
border: #d0d0d0 1px solid;
|
|
72
|
-
}
|
|
73
|
-
table.report td.value {
|
|
74
|
-
text-align: right;
|
|
75
|
-
border: #d0d0d0 1px solid;
|
|
76
|
-
}
|
|
77
|
-
</style><style type='text/css'>span.run0 {
|
|
78
|
-
background-color: rgb(178, 204, 255);
|
|
79
|
-
display: block;
|
|
80
|
-
}
|
|
81
|
-
span.run1 {
|
|
82
|
-
background-color: rgb(178, 206, 255);
|
|
83
|
-
display: block;
|
|
84
|
-
}
|
|
85
|
-
span.run2 {
|
|
86
|
-
background-color: rgb(178, 209, 255);
|
|
87
|
-
display: block;
|
|
88
|
-
}
|
|
89
|
-
span.run3 {
|
|
90
|
-
background-color: rgb(178, 211, 255);
|
|
91
|
-
display: block;
|
|
92
|
-
}
|
|
93
|
-
span.run4 {
|
|
94
|
-
background-color: rgb(178, 214, 255);
|
|
95
|
-
display: block;
|
|
96
|
-
}
|
|
97
|
-
span.run5 {
|
|
98
|
-
background-color: rgb(178, 218, 255);
|
|
99
|
-
display: block;
|
|
100
|
-
}
|
|
101
|
-
span.run6 {
|
|
102
|
-
background-color: rgb(178, 220, 255);
|
|
103
|
-
display: block;
|
|
104
|
-
}
|
|
105
|
-
span.run7 {
|
|
106
|
-
background-color: rgb(178, 223, 255);
|
|
107
|
-
display: block;
|
|
108
|
-
}
|
|
109
|
-
span.run8 {
|
|
110
|
-
background-color: rgb(178, 225, 255);
|
|
111
|
-
display: block;
|
|
112
|
-
}
|
|
113
|
-
span.run9 {
|
|
114
|
-
background-color: rgb(178, 228, 255);
|
|
115
|
-
display: block;
|
|
116
|
-
}
|
|
117
|
-
span.run10 {
|
|
118
|
-
background-color: rgb(178, 232, 255);
|
|
119
|
-
display: block;
|
|
120
|
-
}
|
|
121
|
-
span.run11 {
|
|
122
|
-
background-color: rgb(178, 234, 255);
|
|
123
|
-
display: block;
|
|
124
|
-
}
|
|
125
|
-
span.run12 {
|
|
126
|
-
background-color: rgb(178, 237, 255);
|
|
127
|
-
display: block;
|
|
128
|
-
}
|
|
129
|
-
span.run13 {
|
|
130
|
-
background-color: rgb(178, 239, 255);
|
|
131
|
-
display: block;
|
|
132
|
-
}
|
|
133
|
-
span.run14 {
|
|
134
|
-
background-color: rgb(178, 242, 255);
|
|
135
|
-
display: block;
|
|
136
|
-
}
|
|
137
|
-
span.run15 {
|
|
138
|
-
background-color: rgb(178, 246, 255);
|
|
139
|
-
display: block;
|
|
140
|
-
}
|
|
141
|
-
span.run16 {
|
|
142
|
-
background-color: rgb(178, 248, 255);
|
|
143
|
-
display: block;
|
|
144
|
-
}
|
|
145
|
-
span.run17 {
|
|
146
|
-
background-color: rgb(178, 251, 255);
|
|
147
|
-
display: block;
|
|
148
|
-
}
|
|
149
|
-
span.run18 {
|
|
150
|
-
background-color: rgb(178, 253, 255);
|
|
151
|
-
display: block;
|
|
152
|
-
}
|
|
153
|
-
span.run19 {
|
|
154
|
-
background-color: rgb(178, 255, 253);
|
|
155
|
-
display: block;
|
|
156
|
-
}
|
|
157
|
-
span.run20 {
|
|
158
|
-
background-color: rgb(178, 255, 249);
|
|
159
|
-
display: block;
|
|
160
|
-
}
|
|
161
|
-
span.run21 {
|
|
162
|
-
background-color: rgb(178, 255, 247);
|
|
163
|
-
display: block;
|
|
164
|
-
}
|
|
165
|
-
span.run22 {
|
|
166
|
-
background-color: rgb(178, 255, 244);
|
|
167
|
-
display: block;
|
|
168
|
-
}
|
|
169
|
-
span.run23 {
|
|
170
|
-
background-color: rgb(178, 255, 242);
|
|
171
|
-
display: block;
|
|
172
|
-
}
|
|
173
|
-
span.run24 {
|
|
174
|
-
background-color: rgb(178, 255, 239);
|
|
175
|
-
display: block;
|
|
176
|
-
}
|
|
177
|
-
span.run25 {
|
|
178
|
-
background-color: rgb(178, 255, 235);
|
|
179
|
-
display: block;
|
|
180
|
-
}
|
|
181
|
-
span.run26 {
|
|
182
|
-
background-color: rgb(178, 255, 233);
|
|
183
|
-
display: block;
|
|
184
|
-
}
|
|
185
|
-
span.run27 {
|
|
186
|
-
background-color: rgb(178, 255, 230);
|
|
187
|
-
display: block;
|
|
188
|
-
}
|
|
189
|
-
span.run28 {
|
|
190
|
-
background-color: rgb(178, 255, 228);
|
|
191
|
-
display: block;
|
|
192
|
-
}
|
|
193
|
-
span.run29 {
|
|
194
|
-
background-color: rgb(178, 255, 225);
|
|
195
|
-
display: block;
|
|
196
|
-
}
|
|
197
|
-
span.run30 {
|
|
198
|
-
background-color: rgb(178, 255, 221);
|
|
199
|
-
display: block;
|
|
200
|
-
}
|
|
201
|
-
span.run31 {
|
|
202
|
-
background-color: rgb(178, 255, 219);
|
|
203
|
-
display: block;
|
|
204
|
-
}
|
|
205
|
-
span.run32 {
|
|
206
|
-
background-color: rgb(178, 255, 216);
|
|
207
|
-
display: block;
|
|
208
|
-
}
|
|
209
|
-
span.run33 {
|
|
210
|
-
background-color: rgb(178, 255, 214);
|
|
211
|
-
display: block;
|
|
212
|
-
}
|
|
213
|
-
span.run34 {
|
|
214
|
-
background-color: rgb(178, 255, 211);
|
|
215
|
-
display: block;
|
|
216
|
-
}
|
|
217
|
-
span.run35 {
|
|
218
|
-
background-color: rgb(178, 255, 207);
|
|
219
|
-
display: block;
|
|
220
|
-
}
|
|
221
|
-
span.run36 {
|
|
222
|
-
background-color: rgb(178, 255, 205);
|
|
223
|
-
display: block;
|
|
224
|
-
}
|
|
225
|
-
span.run37 {
|
|
226
|
-
background-color: rgb(178, 255, 202);
|
|
227
|
-
display: block;
|
|
228
|
-
}
|
|
229
|
-
span.run38 {
|
|
230
|
-
background-color: rgb(178, 255, 200);
|
|
231
|
-
display: block;
|
|
232
|
-
}
|
|
233
|
-
span.run39 {
|
|
234
|
-
background-color: rgb(178, 255, 197);
|
|
235
|
-
display: block;
|
|
236
|
-
}
|
|
237
|
-
span.run40 {
|
|
238
|
-
background-color: rgb(178, 255, 193);
|
|
239
|
-
display: block;
|
|
240
|
-
}
|
|
241
|
-
span.run41 {
|
|
242
|
-
background-color: rgb(178, 255, 191);
|
|
243
|
-
display: block;
|
|
244
|
-
}
|
|
245
|
-
span.run42 {
|
|
246
|
-
background-color: rgb(178, 255, 188);
|
|
247
|
-
display: block;
|
|
248
|
-
}
|
|
249
|
-
span.run43 {
|
|
250
|
-
background-color: rgb(178, 255, 186);
|
|
251
|
-
display: block;
|
|
252
|
-
}
|
|
253
|
-
span.run44 {
|
|
254
|
-
background-color: rgb(178, 255, 183);
|
|
255
|
-
display: block;
|
|
256
|
-
}
|
|
257
|
-
span.run45 {
|
|
258
|
-
background-color: rgb(178, 255, 179);
|
|
259
|
-
display: block;
|
|
260
|
-
}
|
|
261
|
-
span.run46 {
|
|
262
|
-
background-color: rgb(179, 255, 178);
|
|
263
|
-
display: block;
|
|
264
|
-
}
|
|
265
|
-
span.run47 {
|
|
266
|
-
background-color: rgb(182, 255, 178);
|
|
267
|
-
display: block;
|
|
268
|
-
}
|
|
269
|
-
span.run48 {
|
|
270
|
-
background-color: rgb(184, 255, 178);
|
|
271
|
-
display: block;
|
|
272
|
-
}
|
|
273
|
-
span.run49 {
|
|
274
|
-
background-color: rgb(187, 255, 178);
|
|
275
|
-
display: block;
|
|
276
|
-
}
|
|
277
|
-
span.run50 {
|
|
278
|
-
background-color: rgb(191, 255, 178);
|
|
279
|
-
display: block;
|
|
280
|
-
}
|
|
281
|
-
span.run51 {
|
|
282
|
-
background-color: rgb(193, 255, 178);
|
|
283
|
-
display: block;
|
|
284
|
-
}
|
|
285
|
-
span.run52 {
|
|
286
|
-
background-color: rgb(196, 255, 178);
|
|
287
|
-
display: block;
|
|
288
|
-
}
|
|
289
|
-
span.run53 {
|
|
290
|
-
background-color: rgb(198, 255, 178);
|
|
291
|
-
display: block;
|
|
292
|
-
}
|
|
293
|
-
span.run54 {
|
|
294
|
-
background-color: rgb(201, 255, 178);
|
|
295
|
-
display: block;
|
|
296
|
-
}
|
|
297
|
-
span.run55 {
|
|
298
|
-
background-color: rgb(205, 255, 178);
|
|
299
|
-
display: block;
|
|
300
|
-
}
|
|
301
|
-
span.run56 {
|
|
302
|
-
background-color: rgb(207, 255, 178);
|
|
303
|
-
display: block;
|
|
304
|
-
}
|
|
305
|
-
span.run57 {
|
|
306
|
-
background-color: rgb(210, 255, 178);
|
|
307
|
-
display: block;
|
|
308
|
-
}
|
|
309
|
-
span.run58 {
|
|
310
|
-
background-color: rgb(212, 255, 178);
|
|
311
|
-
display: block;
|
|
312
|
-
}
|
|
313
|
-
span.run59 {
|
|
314
|
-
background-color: rgb(215, 255, 178);
|
|
315
|
-
display: block;
|
|
316
|
-
}
|
|
317
|
-
span.run60 {
|
|
318
|
-
background-color: rgb(219, 255, 178);
|
|
319
|
-
display: block;
|
|
320
|
-
}
|
|
321
|
-
span.run61 {
|
|
322
|
-
background-color: rgb(221, 255, 178);
|
|
323
|
-
display: block;
|
|
324
|
-
}
|
|
325
|
-
span.run62 {
|
|
326
|
-
background-color: rgb(224, 255, 178);
|
|
327
|
-
display: block;
|
|
328
|
-
}
|
|
329
|
-
span.run63 {
|
|
330
|
-
background-color: rgb(226, 255, 178);
|
|
331
|
-
display: block;
|
|
332
|
-
}
|
|
333
|
-
span.run64 {
|
|
334
|
-
background-color: rgb(229, 255, 178);
|
|
335
|
-
display: block;
|
|
336
|
-
}
|
|
337
|
-
span.run65 {
|
|
338
|
-
background-color: rgb(233, 255, 178);
|
|
339
|
-
display: block;
|
|
340
|
-
}
|
|
341
|
-
span.run66 {
|
|
342
|
-
background-color: rgb(235, 255, 178);
|
|
343
|
-
display: block;
|
|
344
|
-
}
|
|
345
|
-
span.run67 {
|
|
346
|
-
background-color: rgb(238, 255, 178);
|
|
347
|
-
display: block;
|
|
348
|
-
}
|
|
349
|
-
span.run68 {
|
|
350
|
-
background-color: rgb(240, 255, 178);
|
|
351
|
-
display: block;
|
|
352
|
-
}
|
|
353
|
-
span.run69 {
|
|
354
|
-
background-color: rgb(243, 255, 178);
|
|
355
|
-
display: block;
|
|
356
|
-
}
|
|
357
|
-
span.run70 {
|
|
358
|
-
background-color: rgb(247, 255, 178);
|
|
359
|
-
display: block;
|
|
360
|
-
}
|
|
361
|
-
span.run71 {
|
|
362
|
-
background-color: rgb(249, 255, 178);
|
|
363
|
-
display: block;
|
|
364
|
-
}
|
|
365
|
-
span.run72 {
|
|
366
|
-
background-color: rgb(252, 255, 178);
|
|
367
|
-
display: block;
|
|
368
|
-
}
|
|
369
|
-
span.run73 {
|
|
370
|
-
background-color: rgb(255, 255, 178);
|
|
371
|
-
display: block;
|
|
372
|
-
}
|
|
373
|
-
span.run74 {
|
|
374
|
-
background-color: rgb(255, 252, 178);
|
|
375
|
-
display: block;
|
|
376
|
-
}
|
|
377
|
-
span.run75 {
|
|
378
|
-
background-color: rgb(255, 248, 178);
|
|
379
|
-
display: block;
|
|
380
|
-
}
|
|
381
|
-
span.run76 {
|
|
382
|
-
background-color: rgb(255, 246, 178);
|
|
383
|
-
display: block;
|
|
384
|
-
}
|
|
385
|
-
span.run77 {
|
|
386
|
-
background-color: rgb(255, 243, 178);
|
|
387
|
-
display: block;
|
|
388
|
-
}
|
|
389
|
-
span.run78 {
|
|
390
|
-
background-color: rgb(255, 240, 178);
|
|
391
|
-
display: block;
|
|
392
|
-
}
|
|
393
|
-
span.run79 {
|
|
394
|
-
background-color: rgb(255, 238, 178);
|
|
395
|
-
display: block;
|
|
396
|
-
}
|
|
397
|
-
span.run80 {
|
|
398
|
-
background-color: rgb(255, 234, 178);
|
|
399
|
-
display: block;
|
|
400
|
-
}
|
|
401
|
-
span.run81 {
|
|
402
|
-
background-color: rgb(255, 232, 178);
|
|
403
|
-
display: block;
|
|
404
|
-
}
|
|
405
|
-
span.run82 {
|
|
406
|
-
background-color: rgb(255, 229, 178);
|
|
407
|
-
display: block;
|
|
408
|
-
}
|
|
409
|
-
span.run83 {
|
|
410
|
-
background-color: rgb(255, 226, 178);
|
|
411
|
-
display: block;
|
|
412
|
-
}
|
|
413
|
-
span.run84 {
|
|
414
|
-
background-color: rgb(255, 224, 178);
|
|
415
|
-
display: block;
|
|
416
|
-
}
|
|
417
|
-
span.run85 {
|
|
418
|
-
background-color: rgb(255, 220, 178);
|
|
419
|
-
display: block;
|
|
420
|
-
}
|
|
421
|
-
span.run86 {
|
|
422
|
-
background-color: rgb(255, 218, 178);
|
|
423
|
-
display: block;
|
|
424
|
-
}
|
|
425
|
-
span.run87 {
|
|
426
|
-
background-color: rgb(255, 215, 178);
|
|
427
|
-
display: block;
|
|
428
|
-
}
|
|
429
|
-
span.run88 {
|
|
430
|
-
background-color: rgb(255, 212, 178);
|
|
431
|
-
display: block;
|
|
432
|
-
}
|
|
433
|
-
span.run89 {
|
|
434
|
-
background-color: rgb(255, 210, 178);
|
|
435
|
-
display: block;
|
|
436
|
-
}
|
|
437
|
-
span.run90 {
|
|
438
|
-
background-color: rgb(255, 206, 178);
|
|
439
|
-
display: block;
|
|
440
|
-
}
|
|
441
|
-
span.run91 {
|
|
442
|
-
background-color: rgb(255, 204, 178);
|
|
443
|
-
display: block;
|
|
444
|
-
}
|
|
445
|
-
span.run92 {
|
|
446
|
-
background-color: rgb(255, 201, 178);
|
|
447
|
-
display: block;
|
|
448
|
-
}
|
|
449
|
-
span.run93 {
|
|
450
|
-
background-color: rgb(255, 198, 178);
|
|
451
|
-
display: block;
|
|
452
|
-
}
|
|
453
|
-
span.run94 {
|
|
454
|
-
background-color: rgb(255, 196, 178);
|
|
455
|
-
display: block;
|
|
456
|
-
}
|
|
457
|
-
span.run95 {
|
|
458
|
-
background-color: rgb(255, 192, 178);
|
|
459
|
-
display: block;
|
|
460
|
-
}
|
|
461
|
-
span.run96 {
|
|
462
|
-
background-color: rgb(255, 189, 178);
|
|
463
|
-
display: block;
|
|
464
|
-
}
|
|
465
|
-
span.run97 {
|
|
466
|
-
background-color: rgb(255, 187, 178);
|
|
467
|
-
display: block;
|
|
468
|
-
}
|
|
469
|
-
span.run98 {
|
|
470
|
-
background-color: rgb(255, 184, 178);
|
|
471
|
-
display: block;
|
|
472
|
-
}
|
|
473
|
-
span.run99 {
|
|
474
|
-
background-color: rgb(255, 182, 178);
|
|
475
|
-
display: block;
|
|
476
|
-
}
|
|
477
|
-
span.run100 {
|
|
478
|
-
background-color: rgb(255, 178, 178);
|
|
479
|
-
display: block;
|
|
480
|
-
}
|
|
481
|
-
</style></head><body><h3>C0 code coverage information generated on Sun May 21 00:51:54 CEST 2006</h3><hr /><pre><span class='marked'>Marked code looks like this.
|
|
482
|
-
This line is also marked as covered.
|
|
483
|
-
</span><span class='inferred'>Lines considered as run by rcov, but not reported by Ruby, look like this.
|
|
484
|
-
</span><span class='false'>Finally, here's a line marked as not executed.
|
|
485
|
-
</span></pre> <table class='report'>
|
|
486
|
-
<thead>
|
|
487
|
-
<tr>
|
|
488
|
-
<td class='heading'>Name</td>
|
|
489
|
-
<td class='heading'>Total lines</td>
|
|
490
|
-
<td class='heading'>Lines of code</td>
|
|
491
|
-
<td class='heading'>Total coverage</td>
|
|
492
|
-
<td class='heading'>Code coverage</td>
|
|
493
|
-
</tr>
|
|
494
|
-
</thead>
|
|
495
|
-
<tbody>
|
|
496
|
-
<tr>
|
|
497
|
-
<td>
|
|
498
|
-
<a href='-home-rosejn-projects-icalendar-lib-icalendar-component_rb.html'>/home/rosejn/projects/icalendar/lib/icalendar/component.rb</a>
|
|
499
|
-
</td>
|
|
500
|
-
<td class='value'>
|
|
501
|
-
<tt>384</tt>
|
|
502
|
-
</td>
|
|
503
|
-
<td class='value'>
|
|
504
|
-
<tt>384</tt>
|
|
505
|
-
</td>
|
|
506
|
-
<td>
|
|
507
|
-
<table cellspacing='0' cellpadding='0' align='right'>
|
|
508
|
-
<tr>
|
|
509
|
-
<td>
|
|
510
|
-
<tt>73.2%</tt> </td>
|
|
511
|
-
<td>
|
|
512
|
-
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
|
|
513
|
-
<tr>
|
|
514
|
-
<td class='covered' width='73' />
|
|
515
|
-
<td class='uncovered' width='27' />
|
|
516
|
-
</tr>
|
|
517
|
-
</table>
|
|
518
|
-
</td>
|
|
519
|
-
</tr>
|
|
520
|
-
</table>
|
|
521
|
-
</td>
|
|
522
|
-
<td>
|
|
523
|
-
<table cellspacing='0' cellpadding='0' align='right'>
|
|
524
|
-
<tr>
|
|
525
|
-
<td>
|
|
526
|
-
<tt>65.6%</tt> </td>
|
|
527
|
-
<td>
|
|
528
|
-
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
|
|
529
|
-
<tr>
|
|
530
|
-
<td class='covered' width='66' />
|
|
531
|
-
<td class='uncovered' width='34' />
|
|
532
|
-
</tr>
|
|
533
|
-
</table>
|
|
534
|
-
</td>
|
|
535
|
-
</tr>
|
|
536
|
-
</table>
|
|
537
|
-
</td>
|
|
538
|
-
</tr>
|
|
539
|
-
</tbody>
|
|
540
|
-
</table><pre><span class="false"> 1 =begin
|
|
541
|
-
2 Copyright (C) 2005 Jeff Rose
|
|
542
|
-
3
|
|
543
|
-
4 This library is free software; you can redistribute it and/or modify it
|
|
544
|
-
5 under the same terms as the ruby language itself, see the file COPYING for
|
|
545
|
-
6 details.
|
|
546
|
-
7 =end
|
|
547
|
-
</span><span class="marked"> 8
|
|
548
|
-
9 module Icalendar
|
|
549
|
-
10 # The body of the iCalendar object consists of a sequence of calendar
|
|
550
|
-
11 # properties and one or more calendar components. The calendar
|
|
551
|
-
12 # properties are attributes that apply to the calendar as a whole. The
|
|
552
|
-
13 # calendar components are collections of properties that express a
|
|
553
|
-
14 # particular calendar semantic. For example, the calendar component can
|
|
554
|
-
15 # specify an Event, a Todo, a Journal entry, Timezone information, or
|
|
555
|
-
16 # Freebusy time information, or an Alarm.
|
|
556
|
-
17 class Component < Icalendar::Base
|
|
557
|
-
18
|
|
558
|
-
19 meta_include HashAttrs
|
|
559
|
-
20
|
|
560
|
-
21 attr_reader :name
|
|
561
|
-
22 attr_accessor :properties
|
|
562
|
-
23
|
|
563
|
-
24 @@multi_properties = {}
|
|
564
|
-
25
|
|
565
|
-
26 def initialize(name)
|
|
566
|
-
27 @name = name
|
|
567
|
-
28 @components = Hash.new([])
|
|
568
|
-
29 @properties = {}
|
|
569
|
-
30
|
|
570
|
-
31 @@logger.info("New #{@name[1,@name.size].capitalize}...")
|
|
571
|
-
32 end
|
|
572
|
-
33
|
|
573
|
-
34 # Add a sub-component to the current component object.
|
|
574
|
-
35 def add_component(component)
|
|
575
|
-
36 key = (component.class.to_s.downcase + 's').gsub('icalendar::', '').to_sym
|
|
576
|
-
37
|
|
577
|
-
38 unless @components.has_key? key
|
|
578
|
-
39 @components[key] = []
|
|
579
|
-
40 end
|
|
580
|
-
41
|
|
581
|
-
42 @components[key] << component
|
|
582
|
-
43 end
|
|
583
|
-
44
|
|
584
|
-
45 # Add a component to the calendar.
|
|
585
|
-
46 alias add add_component
|
|
586
|
-
47
|
|
587
|
-
48 # Add an event to the calendar.
|
|
588
|
-
49 alias add_event add_component
|
|
589
|
-
50
|
|
590
|
-
51 # Add a todo item to the calendar.
|
|
591
|
-
52 alias add_todo add_component
|
|
592
|
-
53
|
|
593
|
-
54 # Add a journal item to the calendar.
|
|
594
|
-
55 alias add_journal add_component
|
|
595
|
-
56
|
|
596
|
-
57 def remove_component(component)
|
|
597
|
-
58 key = (component.class.to_s.downcase + 's').gsub('icalendar::', '').to_sym
|
|
598
|
-
59
|
|
599
|
-
60 if @components.has_key? key
|
|
600
|
-
61 @components[key].delete(component)
|
|
601
|
-
62 end
|
|
602
|
-
63 end
|
|
603
|
-
64
|
|
604
|
-
65 # Remove a component from the calendar.
|
|
605
|
-
66 alias remove remove_component
|
|
606
|
-
67
|
|
607
|
-
68 # Remove an event from the calendar.
|
|
608
|
-
69 alias remove_event remove_component
|
|
609
|
-
70
|
|
610
|
-
71 # Remove a todo item from the calendar.
|
|
611
|
-
72 alias remove_todo remove_component
|
|
612
|
-
73
|
|
613
|
-
74 # Remove a journal item from the calendar.
|
|
614
|
-
75 alias remove_journal remove_component
|
|
615
|
-
76
|
|
616
|
-
77 def to_ical
|
|
617
|
-
78 print_component do
|
|
618
|
-
79 s = ""
|
|
619
|
-
80 @components.each_value do |comps|
|
|
620
|
-
81 comps.each { |component| s << component.to_ical }
|
|
621
|
-
82 end
|
|
622
|
-
83 s
|
|
623
|
-
84 end
|
|
624
|
-
85 end
|
|
625
|
-
86
|
|
626
|
-
87 # Print this icalendar component
|
|
627
|
-
88 def print_component
|
|
628
|
-
89 # Begin a new component
|
|
629
|
-
90 "BEGIN:#{@name.upcase}\r\n" +
|
|
630
|
-
91
|
|
631
|
-
92 # Then the properties
|
|
632
|
-
93 print_properties +
|
|
633
|
-
94
|
|
634
|
-
95 # Any custom body of the derived component
|
|
635
|
-
96 yield +
|
|
636
|
-
97
|
|
637
|
-
98 # End of this component
|
|
638
|
-
99 "END:#{@name.upcase}\r\n"
|
|
639
|
-
100 end
|
|
640
|
-
101
|
|
641
|
-
102 # Print this components properties
|
|
642
|
-
103 def print_properties
|
|
643
|
-
104 s = ""
|
|
644
|
-
105
|
|
645
|
-
106 @properties.each do |key,val|
|
|
646
|
-
107
|
|
647
|
-
108 # Take out underscore for property names that conflicted
|
|
648
|
-
109 # with built-in words.
|
|
649
|
-
110 if key =~ /ip_.*/
|
|
650
|
-
111 key = key[3..-1]
|
|
651
|
-
112 end
|
|
652
|
-
113
|
|
653
|
-
114 # Property name
|
|
654
|
-
115 s << "#{key.upcase}" +
|
|
655
|
-
116
|
|
656
|
-
117 # Possible parameters
|
|
657
|
-
118 print_parameters(val) +
|
|
658
|
-
119
|
|
659
|
-
120 # Property value
|
|
660
|
-
121 ":#{val.to_ical}\r\n"
|
|
661
|
-
122 end
|
|
662
|
-
123
|
|
663
|
-
124 s
|
|
664
|
-
125 end
|
|
665
|
-
126
|
|
666
|
-
127 # Print the parameters for a specific property
|
|
667
|
-
128 def print_parameters(val)
|
|
668
|
-
129 s = ""
|
|
669
|
-
130 return s unless val.respond_to?(:ical_params) and not val.ical_params.nil?
|
|
670
|
-
131
|
|
671
|
-
132 val.ical_params.each do |key,val|
|
|
672
|
-
133 s << ";#{key}"
|
|
673
|
-
134 val = [ val ] unless val.is_a?(Array)
|
|
674
|
-
135
|
|
675
|
-
136 # Possible parameter values
|
|
676
|
-
137 unless val.empty?
|
|
677
|
-
138 s << "="
|
|
678
|
-
139 sep = "" # First entry comes after = sign, but then we need commas
|
|
679
|
-
140 val.each do |pval|
|
|
680
|
-
141 if pval.respond_to? :to_ical
|
|
681
|
-
142 s << sep << pval.to_ical
|
|
682
|
-
143 sep = ","
|
|
683
|
-
144 end
|
|
684
|
-
145 end
|
|
685
|
-
146 end
|
|
686
|
-
147 end
|
|
687
|
-
148 s
|
|
688
|
-
149 end
|
|
689
|
-
150
|
|
690
|
-
151 # TODO: Look into the x-property, x-param stuff...
|
|
691
|
-
152 def custom_property(name, value)
|
|
692
|
-
</span><span class="false">153 @properties[name] = value
|
|
693
|
-
154 end
|
|
694
|
-
</span><span class="marked">155
|
|
695
|
-
156 def multi_property?(name)
|
|
696
|
-
157 @@multi_properties.has_key?(name.downcase)
|
|
697
|
-
158 end
|
|
698
|
-
159
|
|
699
|
-
160 # Make it protected so we can monitor usage...
|
|
700
|
-
161 protected
|
|
701
|
-
162
|
|
702
|
-
163 def Component.ical_component(*syms)
|
|
703
|
-
164 hash_accessor :@components, *syms
|
|
704
|
-
165 end
|
|
705
|
-
166
|
|
706
|
-
167 # Define a set of methods supporting a new property
|
|
707
|
-
168 def Component.ical_property(property, alias_name = nil, prop_name = nil)
|
|
708
|
-
169 property = "#{property}".strip.downcase
|
|
709
|
-
170 alias_name = "#{alias_name}".strip.downcase unless alias_name.nil?
|
|
710
|
-
171
|
|
711
|
-
172 # If a prop_name was given then we use that for the actual storage
|
|
712
|
-
173 property = "#{prop_name}".strip.downcase unless prop_name.nil?
|
|
713
|
-
174
|
|
714
|
-
175 generate_getter(property, alias_name)
|
|
715
|
-
176 generate_setter(property, alias_name)
|
|
716
|
-
177 generate_query(property, alias_name)
|
|
717
|
-
178 end
|
|
718
|
-
179
|
|
719
|
-
180 # Define a set of methods defining a new property, which
|
|
720
|
-
181 # supports multiple values for the same property name.
|
|
721
|
-
182 def Component.ical_multi_property(property, singular, plural)
|
|
722
|
-
183 property = "#{property}".strip.downcase.gsub(/-/, '_')
|
|
723
|
-
184 plural = "#{plural}".strip.downcase
|
|
724
|
-
185
|
|
725
|
-
186 # Set this key so the parser knows to use an array for
|
|
726
|
-
187 # storing this property type.
|
|
727
|
-
188 @@multi_properties["#{property}"] = true
|
|
728
|
-
189
|
|
729
|
-
190 generate_multi_getter(property, plural)
|
|
730
|
-
191 generate_multi_setter(property, plural)
|
|
731
|
-
192 generate_multi_query(property, plural)
|
|
732
|
-
193 generate_multi_adder(property, singular)
|
|
733
|
-
194 generate_multi_remover(property, singular)
|
|
734
|
-
195 end
|
|
735
|
-
196
|
|
736
|
-
197 private
|
|
737
|
-
198
|
|
738
|
-
199 def Component.generate_getter(property, alias_name)
|
|
739
|
-
200 unless instance_methods.include? property
|
|
740
|
-
201 code = <<-code
|
|
741
|
-
</span><span class="false">202 def #{property}(val = nil, params = nil)
|
|
742
|
-
203 return @properties["#{property}"] if val.nil?
|
|
743
|
-
204
|
|
744
|
-
205 unless val.respond_to?(:to_ical)
|
|
745
|
-
206 raise(NotImplementedError, "Value of type (" + val.class.to_s + ") does not support to_ical method!")
|
|
746
|
-
207 end
|
|
747
|
-
208
|
|
748
|
-
209 unless params.nil?
|
|
749
|
-
210 # Extend with the parameter methods only if we have to...
|
|
750
|
-
211 unless val.respond_to?(:ical_params)
|
|
751
|
-
212 val.class.class_eval { attr_accessor :ical_params }
|
|
752
|
-
213 end
|
|
753
|
-
214 val.ical_params = params
|
|
754
|
-
215 end
|
|
755
|
-
216
|
|
756
|
-
217 @properties["#{property}"] = val
|
|
757
|
-
218 end
|
|
758
|
-
219 code
|
|
759
|
-
</span><span class="marked">220
|
|
760
|
-
221 class_eval code, "component.rb", 219
|
|
761
|
-
222 alias_method("#{alias_name}", "#{property}") unless alias_name.nil?
|
|
762
|
-
223 end
|
|
763
|
-
224 end
|
|
764
|
-
225
|
|
765
|
-
226 def Component.generate_setter(property, alias_name)
|
|
766
|
-
227 setter = property + '='
|
|
767
|
-
228 unless instance_methods.include? setter
|
|
768
|
-
229 code = <<-code
|
|
769
|
-
</span><span class="false">230 def #{setter}(val)
|
|
770
|
-
231 #{property}(val)
|
|
771
|
-
232 end
|
|
772
|
-
233 code
|
|
773
|
-
</span><span class="marked">234
|
|
774
|
-
235 class_eval code, "component.rb", 233
|
|
775
|
-
236 alias_method("#{alias_name}=", "#{property+'='}") unless alias_name.nil?
|
|
776
|
-
237 end
|
|
777
|
-
238 end
|
|
778
|
-
239
|
|
779
|
-
240 def Component.generate_query(property, alias_name)
|
|
780
|
-
241 query = "#{property}?"
|
|
781
|
-
242 unless instance_methods.include? query
|
|
782
|
-
243 code = <<-code
|
|
783
|
-
</span><span class="false">244 def #{query}
|
|
784
|
-
245 @properties.has_key?("#{property.downcase}")
|
|
785
|
-
246 end
|
|
786
|
-
247 code
|
|
787
|
-
</span><span class="marked">248
|
|
788
|
-
249 class_eval code, "component.rb", 226
|
|
789
|
-
250
|
|
790
|
-
251 alias_method("#{alias_name}\?", "#{query}") unless alias_name.nil?
|
|
791
|
-
252 end
|
|
792
|
-
253 end
|
|
793
|
-
254
|
|
794
|
-
255 def Component.generate_multi_getter(property, plural)
|
|
795
|
-
256 # Getter for whole array
|
|
796
|
-
257 unless instance_methods.include? plural
|
|
797
|
-
258 code = <<-code
|
|
798
|
-
</span><span class="false">259 def #{plural}(a = nil)
|
|
799
|
-
260 if a.nil?
|
|
800
|
-
261 @properties["#{property}"] || []
|
|
801
|
-
262 else
|
|
802
|
-
263 self.#{plural}=(a)
|
|
803
|
-
264 end
|
|
804
|
-
265 end
|
|
805
|
-
266 code
|
|
806
|
-
</span><span class="marked">267
|
|
807
|
-
268 class_eval code, "component.rb", 186
|
|
808
|
-
269 end
|
|
809
|
-
270 end
|
|
810
|
-
271
|
|
811
|
-
272 def Component.generate_multi_setter(property, plural)
|
|
812
|
-
273 # Setter for whole array
|
|
813
|
-
274 unless instance_methods.include? plural+'+'
|
|
814
|
-
275 code = <<-code
|
|
815
|
-
</span><span class="false">276 def #{plural}=(a)
|
|
816
|
-
277 if a.respond_to?(:to_ary)
|
|
817
|
-
278 a.to_ary.each do |val|
|
|
818
|
-
279 unless val.respond_to?(:to_ical)
|
|
819
|
-
280 raise(NotImplementedError, "Property values do not support to_ical method!")
|
|
820
|
-
281 end
|
|
821
|
-
282 end
|
|
822
|
-
283
|
|
823
|
-
284 @properties["#{property}"] = a.to_ary
|
|
824
|
-
285 else
|
|
825
|
-
286 raise ArgumentError, "#{plural} is a multi-property that must be an array! Use the add_[property] method to add single entries."
|
|
826
|
-
287 end
|
|
827
|
-
288 end
|
|
828
|
-
289 code
|
|
829
|
-
</span><span class="marked">290
|
|
830
|
-
291 class_eval code, "component.rb", 198
|
|
831
|
-
292 end
|
|
832
|
-
293 end
|
|
833
|
-
294
|
|
834
|
-
295 def Component.generate_multi_query(property, plural)
|
|
835
|
-
296 # Query for any of these properties
|
|
836
|
-
297 unless instance_methods.include? plural+'?'
|
|
837
|
-
298 code = <<-code
|
|
838
|
-
</span><span class="false">299 def #{plural}?
|
|
839
|
-
300 @properties.has_key?("#{property}")
|
|
840
|
-
301 end
|
|
841
|
-
302 code
|
|
842
|
-
</span><span class="marked">303
|
|
843
|
-
304 class_eval code, "component.rb", 210
|
|
844
|
-
305 end
|
|
845
|
-
306 end
|
|
846
|
-
307
|
|
847
|
-
308 def Component.generate_multi_adder(property, singular)
|
|
848
|
-
309 adder = "add_"+singular.to_s
|
|
849
|
-
310 # Add another item to this properties array
|
|
850
|
-
311 unless instance_methods.include? adder
|
|
851
|
-
312 code = <<-code
|
|
852
|
-
</span><span class="false">313 def #{adder}(val, params = {})
|
|
853
|
-
314 unless val.respond_to?(:to_ical)
|
|
854
|
-
315 raise(NotImplementedError, "Property value object does not support to_ical method!")
|
|
855
|
-
316 end
|
|
856
|
-
317
|
|
857
|
-
318 unless params.nil?
|
|
858
|
-
319 # Extend with the parameter methods only if we have to...
|
|
859
|
-
320 unless val.respond_to?(:ical_params)
|
|
860
|
-
321 val.class.class_eval { attr_accessor :ical_params }
|
|
861
|
-
322 end
|
|
862
|
-
323 val.ical_params = params
|
|
863
|
-
324 end
|
|
864
|
-
325
|
|
865
|
-
326 if @properties.has_key?("#{property}")
|
|
866
|
-
327 @properties["#{property}"] << val
|
|
867
|
-
328 else
|
|
868
|
-
329 @properties["#{property}"] = [val]
|
|
869
|
-
330 end
|
|
870
|
-
331 end
|
|
871
|
-
332 code
|
|
872
|
-
</span><span class="marked">333
|
|
873
|
-
334 class_eval code, "component.rb", 289
|
|
874
|
-
335 alias_method("add_#{property.downcase}", "#{adder}")
|
|
875
|
-
336 end
|
|
876
|
-
337 end
|
|
877
|
-
338
|
|
878
|
-
339 def Component.generate_multi_remover(property, singular)
|
|
879
|
-
340 # Remove an item from this properties array
|
|
880
|
-
341 unless instance_methods.include? "remove_#{singular}"
|
|
881
|
-
342 code = <<-code
|
|
882
|
-
</span><span class="false">343 def remove_#{singular}(a)
|
|
883
|
-
344 if @properties.has_key?("#{property}")
|
|
884
|
-
345 @properties["#{property}"].delete(a)
|
|
885
|
-
346 end
|
|
886
|
-
347 end
|
|
887
|
-
348 code
|
|
888
|
-
</span><span class="marked">349
|
|
889
|
-
350 class_eval code, "component.rb", 303
|
|
890
|
-
351 alias_method("remove_#{property.downcase}", "remove_#{singular}")
|
|
891
|
-
352 end
|
|
892
|
-
353 end
|
|
893
|
-
354
|
|
894
|
-
355 def method_missing(method_name, *args)
|
|
895
|
-
</span><span class="false">356 method_name = method_name.to_s.downcase
|
|
896
|
-
357
|
|
897
|
-
358 unless method_name =~ /x_.*/
|
|
898
|
-
359 raise NoMethodError, "Method Name: #{method_name}"
|
|
899
|
-
360 end
|
|
900
|
-
361
|
|
901
|
-
362 val = args.first
|
|
902
|
-
363
|
|
903
|
-
364 if method_name =~ /(.*)(=)/ # Its a setter
|
|
904
|
-
365 @properties[$1] = val
|
|
905
|
-
366 @@logger.debug("Setting #{$1} => #{val}")
|
|
906
|
-
367 else # Or its a getter
|
|
907
|
-
368 @@logger.debug("Getting #{method_name} => #{@properties[method_name]}")
|
|
908
|
-
369 return @properties[method_name]
|
|
909
|
-
370 end
|
|
910
|
-
371 end
|
|
911
|
-
</span><span class="marked">372
|
|
912
|
-
373 public
|
|
913
|
-
374
|
|
914
|
-
375 def respond_to?(method_name)
|
|
915
|
-
376 unless method_name.to_s.downcase =~ /x-.*/
|
|
916
|
-
377 super
|
|
917
|
-
378 end
|
|
918
|
-
379
|
|
919
|
-
380 true
|
|
920
|
-
381 end
|
|
921
|
-
382
|
|
922
|
-
383 end # class Component
|
|
923
|
-
384 end
|
|
924
|
-
</span></pre><hr /><p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' /></a><a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px' /></a></p></body></html>
|