rdoc-babel 0.9.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/.autotest +12 -0
- data/.gemtest +0 -0
- data/HISTORY.rdoc +8 -0
- data/Manifest.txt +28 -0
- data/README.rdoc +103 -0
- data/Rakefile +38 -0
- data/lib/rdoc/discover.rb +1 -0
- data/lib/rdoc/generator/babel.rb +407 -0
- data/lib/rdoc/generator/ruby-lang/class-page.html.erb +272 -0
- data/lib/rdoc/generator/ruby-lang/file-page.html.erb +62 -0
- data/lib/rdoc/generator/ruby-lang/images/zoom.png +0 -0
- data/lib/rdoc/generator/ruby-lang/index.html.erb +11 -0
- data/lib/rdoc/generator/ruby-lang/indexes.html.erb +50 -0
- data/lib/rdoc/generator/ruby-lang/rdoc.css +591 -0
- data/lib/rdoc/generator/ruby-lang/scripts/indexFrame.js +311 -0
- data/lib/rdoc/generator/ruby-lang/scripts/jquery.js +32 -0
- data/lib/rdoc/generator/ruby-lang/scripts/jquery.quicksearch.js +152 -0
- data/lib/rdoc/generator/ruby-lang/scripts/mainFrame.js +107 -0
- data/lib/rdoc_babel.rb +3 -0
- data/test/data/HISTORY.rdoc +2 -0
- data/test/data/README.rdoc +2 -0
- data/test/data/ancestors.rb +42 -0
- data/test/data/commented.rb +2 -0
- data/test/data/context_alias.rb +8 -0
- data/test/data/main_file.rb +15 -0
- data/test/data/no_class_nor_module.rb +2 -0
- data/test/data/no_content.rb +3 -0
- data/test/data/not_commented.rb +10 -0
- data/test/test_rdoc_generator_babel.rb +251 -0
- metadata +167 -0
@@ -0,0 +1,591 @@
|
|
1
|
+
|
2
|
+
/*
|
3
|
+
* ===============
|
4
|
+
* General reset
|
5
|
+
* ===============
|
6
|
+
*/
|
7
|
+
|
8
|
+
* { padding: 0; margin: 0; }
|
9
|
+
|
10
|
+
body {
|
11
|
+
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
12
|
+
background-color: white;
|
13
|
+
color: black;
|
14
|
+
font-size: 10pt;
|
15
|
+
}
|
16
|
+
|
17
|
+
pre, p, h1, h2, h3, h4, h5, h6, ul, ol, dl {
|
18
|
+
margin-top: 1ex;
|
19
|
+
}
|
20
|
+
|
21
|
+
td {
|
22
|
+
vertical-align: top;
|
23
|
+
padding-right: 1ex;
|
24
|
+
}
|
25
|
+
|
26
|
+
ul { margin-left: 1.5em; }
|
27
|
+
ol { margin-left: 2em; }
|
28
|
+
li { margin-top: 0.5ex; }
|
29
|
+
ol li { margin-top: 1em; }
|
30
|
+
|
31
|
+
dt {
|
32
|
+
margin-top: 1ex;
|
33
|
+
font-weight: bold;
|
34
|
+
}
|
35
|
+
dt tt { font-size: 100%; }
|
36
|
+
dd { margin-left: 2em; }
|
37
|
+
|
38
|
+
table {
|
39
|
+
border-collapse: collapse;
|
40
|
+
margin-top: 1ex;
|
41
|
+
}
|
42
|
+
|
43
|
+
td p {
|
44
|
+
margin-top: 0.5ex;
|
45
|
+
}
|
46
|
+
|
47
|
+
table.rdoc-list .rdoc-term {
|
48
|
+
font-weight: bold;
|
49
|
+
}
|
50
|
+
|
51
|
+
hr {
|
52
|
+
margin-top: 1ex;
|
53
|
+
border: 0;
|
54
|
+
height: 2px;
|
55
|
+
color: silver;
|
56
|
+
background-color: silver;
|
57
|
+
}
|
58
|
+
|
59
|
+
a {
|
60
|
+
color: #00C; /* less aggressive than pure blue */
|
61
|
+
text-decoration: none;
|
62
|
+
}
|
63
|
+
|
64
|
+
a:hover {
|
65
|
+
color: #00C;
|
66
|
+
background-color: #ffa; /* pale yellow */
|
67
|
+
padding-bottom: 2px;
|
68
|
+
}
|
69
|
+
|
70
|
+
.nodoc a {
|
71
|
+
color: #555;
|
72
|
+
}
|
73
|
+
|
74
|
+
/* banner colors */
|
75
|
+
|
76
|
+
#header, .index .title {
|
77
|
+
color: white;
|
78
|
+
background-color: #275382;
|
79
|
+
background: -moz-linear-gradient(left, #164270, #77a1d1); /* firefox 3.6+ */
|
80
|
+
background: -webkit-gradient(linear, left top, right top, from(#164270), to(#77a1d1)); /* webkit browsers */
|
81
|
+
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, StartColorStr='#164270', EndColorStr='#77a1d1'); /* IE */
|
82
|
+
}
|
83
|
+
|
84
|
+
/*
|
85
|
+
* =============
|
86
|
+
* Index files
|
87
|
+
* =============
|
88
|
+
*/
|
89
|
+
|
90
|
+
.index p, .index ul {
|
91
|
+
margin: 0;
|
92
|
+
padding: 0;
|
93
|
+
}
|
94
|
+
|
95
|
+
body.index {
|
96
|
+
background-color: #f5f5f5; /* very pale grey */
|
97
|
+
}
|
98
|
+
|
99
|
+
.index .title {
|
100
|
+
padding: 3px 2px 5px 5px; /* TRBL */
|
101
|
+
font-family: Georgia, Palatino, "Times New Roman", Times, serif;
|
102
|
+
font-size: 100%;
|
103
|
+
}
|
104
|
+
.search-field {
|
105
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
106
|
+
position: absolute;
|
107
|
+
right: 3px;
|
108
|
+
padding: 0 1px 2px 2px; /* TRBL */
|
109
|
+
background: #f5f5f5;
|
110
|
+
border: 1px solid silver;
|
111
|
+
color: silver;
|
112
|
+
width: 8em; /* search... */
|
113
|
+
}
|
114
|
+
.search-field.active {
|
115
|
+
background: #fffffa; /* very pale yellow */
|
116
|
+
color: black;
|
117
|
+
}
|
118
|
+
|
119
|
+
.index .entries {
|
120
|
+
padding: 0.2em 0;
|
121
|
+
font-size: 80%;
|
122
|
+
overflow-x: hidden;
|
123
|
+
overflow-y: auto;
|
124
|
+
}
|
125
|
+
.index p {
|
126
|
+
white-space: nowrap;
|
127
|
+
}
|
128
|
+
.index .type {
|
129
|
+
color:#444;
|
130
|
+
font-size:75%;
|
131
|
+
padding-left:0.67ex;
|
132
|
+
display:inline-block;
|
133
|
+
width:0.85em;
|
134
|
+
}
|
135
|
+
.index a, .index a:hover {
|
136
|
+
padding: 0 0.5ex;
|
137
|
+
}
|
138
|
+
|
139
|
+
/*
|
140
|
+
* =============
|
141
|
+
* Main files
|
142
|
+
* =============
|
143
|
+
*
|
144
|
+
* The structure is:
|
145
|
+
* #header
|
146
|
+
* #documentation
|
147
|
+
*
|
148
|
+
*/
|
149
|
+
|
150
|
+
h1, h2, h3, h4, h5, h6 {
|
151
|
+
font-family: Georgia, Palatino, "Times New Roman", Times, serif;
|
152
|
+
color: #c61a1a; /* ruby red ;) */
|
153
|
+
padding-bottom: 0.5ex;
|
154
|
+
font-weight: normal;
|
155
|
+
}
|
156
|
+
|
157
|
+
h1, h2, h3 {
|
158
|
+
border-bottom: 1px dotted #ddd;
|
159
|
+
}
|
160
|
+
|
161
|
+
h1 a, h2 a, h3 a {
|
162
|
+
color: red; /* not the best, but no other idea */
|
163
|
+
}
|
164
|
+
|
165
|
+
h1 a:hover, h2 a:hover, h3 a:hover {
|
166
|
+
color: red;
|
167
|
+
}
|
168
|
+
|
169
|
+
h1 {
|
170
|
+
margin-top: 1em;
|
171
|
+
margin-bottom: 1ex;
|
172
|
+
font-size: 200%;
|
173
|
+
}
|
174
|
+
|
175
|
+
h2 {
|
176
|
+
margin-top: 1em;
|
177
|
+
margin-bottom: 1ex;
|
178
|
+
font-size: 150%;
|
179
|
+
}
|
180
|
+
|
181
|
+
h3 {
|
182
|
+
margin-top: 1em;
|
183
|
+
margin-bottom: 1ex;
|
184
|
+
font-size: 120%;
|
185
|
+
font-weight: bold;
|
186
|
+
}
|
187
|
+
|
188
|
+
#documentation > h1:first-child,
|
189
|
+
#documentation > h2:first-child,
|
190
|
+
#documentation > h3:first-child {
|
191
|
+
margin-top: 0;
|
192
|
+
}
|
193
|
+
|
194
|
+
h4, h5, h6 {
|
195
|
+
margin-top: 0.75em;
|
196
|
+
border: none;
|
197
|
+
}
|
198
|
+
|
199
|
+
tt {
|
200
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
201
|
+
font-size: 100%;
|
202
|
+
}
|
203
|
+
|
204
|
+
pre {
|
205
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
206
|
+
padding: 1ex;
|
207
|
+
background-color: #f5f5f5; /* very pale grey */
|
208
|
+
}
|
209
|
+
|
210
|
+
#documentation {
|
211
|
+
padding: 1em; /* TRBL */
|
212
|
+
overflow: auto;
|
213
|
+
}
|
214
|
+
|
215
|
+
/* --- top header of main files
|
216
|
+
|
217
|
+
div#header
|
218
|
+
p.header-title
|
219
|
+
span.prefix
|
220
|
+
span.name
|
221
|
+
p.header-title
|
222
|
+
span.parent
|
223
|
+
p#file-info
|
224
|
+
span.displayed
|
225
|
+
span.in-files
|
226
|
+
'In:'
|
227
|
+
span.first-files
|
228
|
+
a (link to 1st files)
|
229
|
+
a#show-all-files # if more than 2 files
|
230
|
+
span.hidden
|
231
|
+
(same as .displayed, but no #show-all-files id on last a)
|
232
|
+
span#all-files
|
233
|
+
a (link to each file)
|
234
|
+
|
235
|
+
The reason for repeating the spans .displayed & .hidden is to have
|
236
|
+
.displayed to the right, on the same line as the class title if it fits,
|
237
|
+
on the next line otherwise:
|
238
|
+
|
239
|
+
class Object In: object.c
|
240
|
+
|
241
|
+
class VeryLongNameInVeryLongFileName
|
242
|
+
In: very_long_name_in_very_long_filename.rb
|
243
|
+
|
244
|
+
class VeryLongNameInVeryLongFileName < Object
|
245
|
+
In: very_long_name_in_very_long_filename.rb
|
246
|
+
|
247
|
+
class VeryLongNameInVeryLongFileNameAndAlsoASuperclass
|
248
|
+
< Object In: very_long_name_in_very_long_filename.rb
|
249
|
+
|
250
|
+
Because p#file-info has 'white-space: nowrap', .displayed & .hidden
|
251
|
+
are always on the same line.
|
252
|
+
|
253
|
+
*/
|
254
|
+
|
255
|
+
#header {
|
256
|
+
padding: 1ex;
|
257
|
+
}
|
258
|
+
|
259
|
+
#header p {
|
260
|
+
margin: 0;
|
261
|
+
padding: 0;
|
262
|
+
display: inline-block;
|
263
|
+
white-space: nowrap;
|
264
|
+
}
|
265
|
+
|
266
|
+
#header a {
|
267
|
+
color: #ee0;
|
268
|
+
padding: 0 2px 1px 2px; /* TRBL */
|
269
|
+
}
|
270
|
+
#header a:hover {
|
271
|
+
color: yellow;
|
272
|
+
background-color: inherit;
|
273
|
+
border-bottom: 1px dotted yellow;
|
274
|
+
}
|
275
|
+
|
276
|
+
.header-title {
|
277
|
+
font-family: Georgia, Palatino, "Times New Roman", Times, serif;
|
278
|
+
/* vertical-align: middle; */
|
279
|
+
}
|
280
|
+
|
281
|
+
#header .prefix { font-size: 130%; }
|
282
|
+
#header .name { font-size: 170%; }
|
283
|
+
#header .parent { font-size: 130%; }
|
284
|
+
|
285
|
+
#file-info {
|
286
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
287
|
+
font-size: 90%;
|
288
|
+
vertical-align: top;
|
289
|
+
}
|
290
|
+
.displayed {
|
291
|
+
position: absolute;
|
292
|
+
right: 1ex;
|
293
|
+
}
|
294
|
+
.hidden {
|
295
|
+
visibility: hidden;
|
296
|
+
display: inline-block;
|
297
|
+
}
|
298
|
+
.in-files {
|
299
|
+
vertical-align: top;
|
300
|
+
}
|
301
|
+
.first-files {
|
302
|
+
display: inline-block;
|
303
|
+
}
|
304
|
+
#all-files {
|
305
|
+
border: 1px solid silver;
|
306
|
+
margin-top: 0.5ex;
|
307
|
+
background-color: white;
|
308
|
+
padding: 1px 0;
|
309
|
+
max-height: 30em;
|
310
|
+
overflow-x: hidden;
|
311
|
+
overflow-y: auto;
|
312
|
+
display: none;
|
313
|
+
position: absolute;
|
314
|
+
right: 1ex;
|
315
|
+
}
|
316
|
+
#all-files a {
|
317
|
+
color: #00C;
|
318
|
+
padding-top: 0;
|
319
|
+
padding-bottom: 0;
|
320
|
+
}
|
321
|
+
#all-files a:hover {
|
322
|
+
color: #00C;
|
323
|
+
background-color: #ffa;
|
324
|
+
}
|
325
|
+
|
326
|
+
/* --- class page
|
327
|
+
|
328
|
+
#header (see above)
|
329
|
+
#documentation
|
330
|
+
(description stuff if any)
|
331
|
+
#class-aliases (.list ul)
|
332
|
+
#method-list (ul)
|
333
|
+
#namespace-list (.list ul)
|
334
|
+
#include-list (.list ul)
|
335
|
+
#constant-list (.list table)
|
336
|
+
tr.const-display
|
337
|
+
td.const-name
|
338
|
+
td.const-desc
|
339
|
+
td.click-advice
|
340
|
+
tr.const-value
|
341
|
+
...
|
342
|
+
#external-aliases (.list table)
|
343
|
+
#class-attributes (.list table)
|
344
|
+
td.attr-rw
|
345
|
+
td.attr-name
|
346
|
+
td.attr-desc
|
347
|
+
...
|
348
|
+
#instance-attributes (.list table)
|
349
|
+
...
|
350
|
+
#<visibility>-<type>-methods
|
351
|
+
#method:<method_name> (.method-detail [.method-alias])
|
352
|
+
.method-heading
|
353
|
+
.method-call-seq | .method-name + .method-args
|
354
|
+
.click-advice
|
355
|
+
.method-description
|
356
|
+
.method-source-code
|
357
|
+
*/
|
358
|
+
|
359
|
+
.click-advice {
|
360
|
+
font-size: 10px;
|
361
|
+
color: #9b9877;
|
362
|
+
background: url(images/zoom.png) no-repeat right top;
|
363
|
+
padding-right: 20px;
|
364
|
+
line-height: 16px;
|
365
|
+
visibility: hidden;
|
366
|
+
white-space: nowrap;
|
367
|
+
}
|
368
|
+
|
369
|
+
/* lists */
|
370
|
+
|
371
|
+
.list h3 {
|
372
|
+
margin-bottom: 0.5ex;
|
373
|
+
}
|
374
|
+
|
375
|
+
/* ul lists */
|
376
|
+
|
377
|
+
.list > ul {
|
378
|
+
list-style-type: none;
|
379
|
+
margin: 0 1ex;
|
380
|
+
padding: 0;
|
381
|
+
}
|
382
|
+
.list li {
|
383
|
+
margin: 0;
|
384
|
+
padding: 0;
|
385
|
+
}
|
386
|
+
|
387
|
+
/* list of methods */
|
388
|
+
|
389
|
+
#method-list ul {
|
390
|
+
line-height: 1;
|
391
|
+
}
|
392
|
+
#method-list li {
|
393
|
+
display: inline-block;
|
394
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
395
|
+
font-size: 100%;
|
396
|
+
padding: 2px 0;
|
397
|
+
}
|
398
|
+
#method-list .type {
|
399
|
+
padding-right: 1px;
|
400
|
+
font-size: 80%;
|
401
|
+
}
|
402
|
+
#method-list li a {
|
403
|
+
padding: 0 4px 2px 4px; /* TRBL */
|
404
|
+
}
|
405
|
+
|
406
|
+
/* mixed class/module lists */
|
407
|
+
|
408
|
+
table.classes-modules {
|
409
|
+
margin: 0;
|
410
|
+
margin-left: 1ex;
|
411
|
+
}
|
412
|
+
|
413
|
+
/* table lists */
|
414
|
+
|
415
|
+
.list table {
|
416
|
+
margin-top: 0;
|
417
|
+
}
|
418
|
+
|
419
|
+
.list p {
|
420
|
+
margin-top: 0.5ex;
|
421
|
+
}
|
422
|
+
|
423
|
+
.list table ul, .list table ol {
|
424
|
+
margin-top: 0;
|
425
|
+
}
|
426
|
+
|
427
|
+
.attr-rw p {
|
428
|
+
font-size: 70%;
|
429
|
+
padding: 0.75ex 0 0 1ex;
|
430
|
+
}
|
431
|
+
.const-name p, .attr-name p {
|
432
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
433
|
+
font-size: 100%;
|
434
|
+
font-weight: bold;
|
435
|
+
padding: 0 0.5ex 0 0.2ex;
|
436
|
+
}
|
437
|
+
.const-desc p, .attr-desc p {
|
438
|
+
}
|
439
|
+
.const-display {
|
440
|
+
cursor: pointer;
|
441
|
+
}
|
442
|
+
.const-display:hover .click-advice {
|
443
|
+
visibility: visible;
|
444
|
+
}
|
445
|
+
.const-value {
|
446
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
447
|
+
display: none;
|
448
|
+
}
|
449
|
+
|
450
|
+
/* --- method details
|
451
|
+
.method-detail [.method-alias]
|
452
|
+
.method-heading
|
453
|
+
.method-call-seq | .method-name + .method-args
|
454
|
+
.click-advice
|
455
|
+
.method-description
|
456
|
+
.method-source-code
|
457
|
+
*/
|
458
|
+
|
459
|
+
.method-detail {
|
460
|
+
border: 1px dotted #ddd;
|
461
|
+
margin-top: 1em;
|
462
|
+
padding-bottom: 1ex;
|
463
|
+
/* cursor: pointer; */
|
464
|
+
}
|
465
|
+
|
466
|
+
.highlighted {
|
467
|
+
border: 1px solid red !important;
|
468
|
+
}
|
469
|
+
|
470
|
+
.method-detail h3 {
|
471
|
+
border: none;
|
472
|
+
font-weight: normal;
|
473
|
+
padding-bottom: 0;
|
474
|
+
}
|
475
|
+
|
476
|
+
.method-heading {
|
477
|
+
position: relative;
|
478
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
479
|
+
font-size: 105%;
|
480
|
+
padding: 0.5ex 1ex;
|
481
|
+
border-bottom: 1px dotted #ddd;
|
482
|
+
background-color: #eee;
|
483
|
+
cursor: pointer;
|
484
|
+
}
|
485
|
+
.method-heading :link,
|
486
|
+
.method-heading :visited {
|
487
|
+
color: inherit;
|
488
|
+
}
|
489
|
+
.method-call-seq {}
|
490
|
+
.method-name {
|
491
|
+
font-weight: bold;
|
492
|
+
}
|
493
|
+
.method-args {}
|
494
|
+
|
495
|
+
.method-heading .click-advice {
|
496
|
+
position: absolute;
|
497
|
+
top: 4px;
|
498
|
+
right: 5px;
|
499
|
+
}
|
500
|
+
.method-heading:hover .click-advice {
|
501
|
+
visibility: visible;
|
502
|
+
}
|
503
|
+
|
504
|
+
.method-description {
|
505
|
+
padding: 0 1ex;
|
506
|
+
}
|
507
|
+
.method-description p + p {
|
508
|
+
margin-bottom: 0.5ex;
|
509
|
+
}
|
510
|
+
.method-description .nodoc {
|
511
|
+
color: #888;
|
512
|
+
}
|
513
|
+
|
514
|
+
/* source code */
|
515
|
+
|
516
|
+
pre.method-source-code {
|
517
|
+
border: 1px solid #fff5dd; /* very page orange */
|
518
|
+
background-color: #fffffa; /* very pale yellow */
|
519
|
+
margin-top: 1ex;
|
520
|
+
padding-top: 0;
|
521
|
+
padding-left: 0.5ex;
|
522
|
+
padding-bottom: 0.5ex;
|
523
|
+
|
524
|
+
display: none;
|
525
|
+
}
|
526
|
+
|
527
|
+
.ruby-constant { color: #7700cc; } /* violet */
|
528
|
+
.ruby-keyword { color: #3333ff; font-weight: bold; } /* a blue */
|
529
|
+
.ruby-ivar { color: #2233dd; } /* a lighter blue */
|
530
|
+
.ruby-operator { color: black; }
|
531
|
+
.ruby-identifier { color: black; }
|
532
|
+
.ruby-node { color: #860000; } /* dark red / light brown (resolved strings) */
|
533
|
+
.ruby-comment { color: green; }
|
534
|
+
.ruby-regexp { color: #ca1a1a; } /* orangish brown */
|
535
|
+
.ruby-string { color: #860000; } /* dark red / light brown (unresolved strings) */
|
536
|
+
.ruby-value { color: #860000; } /* dark red / light brown */
|
537
|
+
.line-num { color: grey; }
|
538
|
+
|
539
|
+
/* --- file page (simple parser)
|
540
|
+
#header (see above)
|
541
|
+
#documentation
|
542
|
+
(description)
|
543
|
+
|
544
|
+
--- other files
|
545
|
+
#header (see above)
|
546
|
+
#documentation
|
547
|
+
(description if any)
|
548
|
+
#file-details
|
549
|
+
(requires in ul)
|
550
|
+
(classes & modules)
|
551
|
+
(webcvs)
|
552
|
+
*/
|
553
|
+
|
554
|
+
#file-details h3 {
|
555
|
+
border: none;
|
556
|
+
font-weight: normal;
|
557
|
+
padding-bottom: 0;
|
558
|
+
}
|
559
|
+
|
560
|
+
/* requires */
|
561
|
+
#file-details li {
|
562
|
+
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
563
|
+
}
|
564
|
+
|
565
|
+
/* maybe JS stuff */
|
566
|
+
|
567
|
+
.initially-hidden {
|
568
|
+
display: none;
|
569
|
+
}
|
570
|
+
|
571
|
+
.missing-docs {
|
572
|
+
-webkit-border-radius: 5px;
|
573
|
+
-moz-border-radius: 5px;
|
574
|
+
}
|
575
|
+
|
576
|
+
|
577
|
+
/* debugging section */
|
578
|
+
|
579
|
+
#debugging-toggle {
|
580
|
+
text-align: center;
|
581
|
+
}
|
582
|
+
#debugging-toggle img {
|
583
|
+
cursor: pointer;
|
584
|
+
}
|
585
|
+
|
586
|
+
#rdoc-debugging-section-dump {
|
587
|
+
display: none;
|
588
|
+
margin: 0 2em 2em;
|
589
|
+
background: #ccc;
|
590
|
+
border: 1px solid #999;
|
591
|
+
}
|