slaw 5.0.0 → 6.0.0
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.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/lib/slaw/grammars/za/act.treetop +2 -0
- data/lib/slaw/grammars/za/postprocess.rb +28 -0
- data/lib/slaw/parse/blocklists.rb +5 -0
- data/lib/slaw/parse/builder.rb +1 -16
- data/lib/slaw/parse/grammar_helpers.rb +8 -0
- data/lib/slaw/version.rb +1 -1
- data/spec/parse/blocklists_spec.rb +714 -0
- data/spec/parse/builder_spec.rb +0 -708
- data/spec/za/postprocess_spec.rb +117 -0
- metadata +7 -2
data/spec/parse/builder_spec.rb
CHANGED
@@ -7,714 +7,6 @@ describe Slaw::Parse::Builder do
|
|
7
7
|
let(:parser) { double("parser") }
|
8
8
|
subject { Slaw::Parse::Builder.new(parser: parser) }
|
9
9
|
|
10
|
-
describe '#adjust_blocklists' do
|
11
|
-
it 'should nest simple blocks' do
|
12
|
-
doc = xml2doc(subsection(<<XML
|
13
|
-
<blockList id="section-10.1.lst0" renest="true">
|
14
|
-
<item id="section-10.1.lst0.a">
|
15
|
-
<num>(a)</num>
|
16
|
-
<p>foo</p>
|
17
|
-
</item>
|
18
|
-
<item id="section-10.1.lst0.i">
|
19
|
-
<num>(i)</num>
|
20
|
-
<p>item-i</p>
|
21
|
-
</item>
|
22
|
-
<item id="section-10.1.lst0.ii">
|
23
|
-
<num>(ii)</num>
|
24
|
-
<p>item-ii</p>
|
25
|
-
</item>
|
26
|
-
<item id="section-10.1.lst0.iii">
|
27
|
-
<num>(iii)</num>
|
28
|
-
<p>item-iii</p>
|
29
|
-
</item>
|
30
|
-
<item id="section-10.1.lst0.aa">
|
31
|
-
<num>(aa)</num>
|
32
|
-
<p>item-aa</p>
|
33
|
-
</item>
|
34
|
-
<item id="section-10.1.lst0.bb">
|
35
|
-
<num>(bb)</num>
|
36
|
-
<p>item-bb</p>
|
37
|
-
</item>
|
38
|
-
</blockList>
|
39
|
-
XML
|
40
|
-
))
|
41
|
-
|
42
|
-
subject.adjust_blocklists(doc)
|
43
|
-
doc.to_s.should == subsection(<<XML
|
44
|
-
<blockList id="section-10.1.lst0">
|
45
|
-
<item id="section-10.1.lst0.a">
|
46
|
-
<num>(a)</num>
|
47
|
-
<blockList id="section-10.1.lst0.a.list0">
|
48
|
-
<listIntroduction>foo</listIntroduction>
|
49
|
-
<item id="section-10.1.lst0.a.list0.i">
|
50
|
-
<num>(i)</num>
|
51
|
-
<p>item-i</p>
|
52
|
-
</item>
|
53
|
-
<item id="section-10.1.lst0.a.list0.ii">
|
54
|
-
<num>(ii)</num>
|
55
|
-
<p>item-ii</p>
|
56
|
-
</item>
|
57
|
-
<item id="section-10.1.lst0.a.list0.iii">
|
58
|
-
<num>(iii)</num>
|
59
|
-
<blockList id="section-10.1.lst0.a.list0.iii.list0">
|
60
|
-
<listIntroduction>item-iii</listIntroduction>
|
61
|
-
<item id="section-10.1.lst0.a.list0.iii.list0.aa">
|
62
|
-
<num>(aa)</num>
|
63
|
-
<p>item-aa</p>
|
64
|
-
</item>
|
65
|
-
<item id="section-10.1.lst0.a.list0.iii.list0.bb">
|
66
|
-
<num>(bb)</num>
|
67
|
-
<p>item-bb</p>
|
68
|
-
</item>
|
69
|
-
</blockList>
|
70
|
-
</item>
|
71
|
-
</blockList>
|
72
|
-
</item>
|
73
|
-
</blockList>
|
74
|
-
XML
|
75
|
-
)
|
76
|
-
end
|
77
|
-
|
78
|
-
# -------------------------------------------------------------------------
|
79
|
-
|
80
|
-
it 'should jump back up a level' do
|
81
|
-
doc = xml2doc(subsection(<<XML
|
82
|
-
<blockList id="section-10.1.lst0" renest="true">
|
83
|
-
<item id="section-10.1.lst0.a">
|
84
|
-
<num>(a)</num>
|
85
|
-
<p>foo</p>
|
86
|
-
</item>
|
87
|
-
<item id="section-10.1.lst0.i">
|
88
|
-
<num>(i)</num>
|
89
|
-
<p>item-i</p>
|
90
|
-
</item>
|
91
|
-
<item id="section-10.1.lst0.ii">
|
92
|
-
<num>(ii)</num>
|
93
|
-
<p>item-ii</p>
|
94
|
-
</item>
|
95
|
-
<item id="section-10.1.lst0.c">
|
96
|
-
<num>(c)</num>
|
97
|
-
<p>item-c</p>
|
98
|
-
</item>
|
99
|
-
</blockList>
|
100
|
-
XML
|
101
|
-
))
|
102
|
-
|
103
|
-
subject.adjust_blocklists(doc)
|
104
|
-
doc.to_s.should == subsection(<<XML
|
105
|
-
<blockList id="section-10.1.lst0">
|
106
|
-
<item id="section-10.1.lst0.a">
|
107
|
-
<num>(a)</num>
|
108
|
-
<blockList id="section-10.1.lst0.a.list0">
|
109
|
-
<listIntroduction>foo</listIntroduction>
|
110
|
-
<item id="section-10.1.lst0.a.list0.i">
|
111
|
-
<num>(i)</num>
|
112
|
-
<p>item-i</p>
|
113
|
-
</item>
|
114
|
-
<item id="section-10.1.lst0.a.list0.ii">
|
115
|
-
<num>(ii)</num>
|
116
|
-
<p>item-ii</p>
|
117
|
-
</item>
|
118
|
-
</blockList>
|
119
|
-
</item>
|
120
|
-
<item id="section-10.1.lst0.c">
|
121
|
-
<num>(c)</num>
|
122
|
-
<p>item-c</p>
|
123
|
-
</item>
|
124
|
-
</blockList>
|
125
|
-
XML
|
126
|
-
)
|
127
|
-
end
|
128
|
-
|
129
|
-
# -------------------------------------------------------------------------
|
130
|
-
|
131
|
-
it 'should handle (i) correctly' do
|
132
|
-
doc = xml2doc(subsection(<<XML
|
133
|
-
<blockList id="section-10.1.lst0" renest="true">
|
134
|
-
<item id="section-10.1.lst0.h">
|
135
|
-
<num>(h)</num>
|
136
|
-
<p>foo</p>
|
137
|
-
</item>
|
138
|
-
<item id="section-10.1.lst0.i">
|
139
|
-
<num>(i)</num>
|
140
|
-
<p>item-i</p>
|
141
|
-
</item>
|
142
|
-
<item id="section-10.1.lst0.j">
|
143
|
-
<num>(j)</num>
|
144
|
-
<p>item-ii</p>
|
145
|
-
</item>
|
146
|
-
</blockList>
|
147
|
-
XML
|
148
|
-
))
|
149
|
-
|
150
|
-
subject.adjust_blocklists(doc)
|
151
|
-
doc.to_s.should == subsection(<<XML
|
152
|
-
<blockList id="section-10.1.lst0">
|
153
|
-
<item id="section-10.1.lst0.h">
|
154
|
-
<num>(h)</num>
|
155
|
-
<p>foo</p>
|
156
|
-
</item>
|
157
|
-
<item id="section-10.1.lst0.i">
|
158
|
-
<num>(i)</num>
|
159
|
-
<p>item-i</p>
|
160
|
-
</item>
|
161
|
-
<item id="section-10.1.lst0.j">
|
162
|
-
<num>(j)</num>
|
163
|
-
<p>item-ii</p>
|
164
|
-
</item>
|
165
|
-
</blockList>
|
166
|
-
XML
|
167
|
-
)
|
168
|
-
end
|
169
|
-
|
170
|
-
# -------------------------------------------------------------------------
|
171
|
-
|
172
|
-
it 'should handle (u) (v) and (x) correctly' do
|
173
|
-
doc = xml2doc(subsection(<<XML
|
174
|
-
<blockList id="section-10.1.lst0" renest="true">
|
175
|
-
<item id="section-10.1.lst0.t">
|
176
|
-
<num>(t)</num>
|
177
|
-
<p>foo</p>
|
178
|
-
</item>
|
179
|
-
<item id="section-10.1.lst0.u">
|
180
|
-
<num>(u)</num>
|
181
|
-
<p>item-i</p>
|
182
|
-
</item>
|
183
|
-
<item id="section-10.1.lst0.v">
|
184
|
-
<num>(v)</num>
|
185
|
-
<p>item-ii</p>
|
186
|
-
</item>
|
187
|
-
<item id="section-10.1.lst0.w">
|
188
|
-
<num>(w)</num>
|
189
|
-
<p>item-ii</p>
|
190
|
-
</item>
|
191
|
-
<item id="section-10.1.lst0.x">
|
192
|
-
<num>(x)</num>
|
193
|
-
<p>item-ii</p>
|
194
|
-
</item>
|
195
|
-
</blockList>
|
196
|
-
XML
|
197
|
-
))
|
198
|
-
|
199
|
-
subject.adjust_blocklists(doc)
|
200
|
-
doc.to_s.should == subsection(<<XML
|
201
|
-
<blockList id="section-10.1.lst0">
|
202
|
-
<item id="section-10.1.lst0.t">
|
203
|
-
<num>(t)</num>
|
204
|
-
<p>foo</p>
|
205
|
-
</item>
|
206
|
-
<item id="section-10.1.lst0.u">
|
207
|
-
<num>(u)</num>
|
208
|
-
<p>item-i</p>
|
209
|
-
</item>
|
210
|
-
<item id="section-10.1.lst0.v">
|
211
|
-
<num>(v)</num>
|
212
|
-
<p>item-ii</p>
|
213
|
-
</item>
|
214
|
-
<item id="section-10.1.lst0.w">
|
215
|
-
<num>(w)</num>
|
216
|
-
<p>item-ii</p>
|
217
|
-
</item>
|
218
|
-
<item id="section-10.1.lst0.x">
|
219
|
-
<num>(x)</num>
|
220
|
-
<p>item-ii</p>
|
221
|
-
</item>
|
222
|
-
</blockList>
|
223
|
-
XML
|
224
|
-
)
|
225
|
-
end
|
226
|
-
|
227
|
-
|
228
|
-
# -------------------------------------------------------------------------
|
229
|
-
|
230
|
-
it 'should handle (j) correctly' do
|
231
|
-
doc = xml2doc(subsection(<<XML
|
232
|
-
<blockList id="section-28.3.list2" renest="true">
|
233
|
-
<item id="section-28.3.list2.g">
|
234
|
-
<num>(g)</num>
|
235
|
-
<p>all <term refersTo="#term-memorial_work" id="trm381">memorial work</term> up to 150 mm in thickness must be securely attached to the base;</p>
|
236
|
-
</item>
|
237
|
-
<item id="section-28.3.list2.h">
|
238
|
-
<num>(h)</num>
|
239
|
-
<p>all the components of <term refersTo="#term-memorial_work" id="trm382">memorial work</term> must be completed before being brought into a <term refersTo="#term-cemetery" id="trm383">cemetery</term>;</p>
|
240
|
-
</item>
|
241
|
-
<item id="section-28.3.list2.i">
|
242
|
-
<num>(i)</num>
|
243
|
-
<p>footstones must consist of one solid piece;</p>
|
244
|
-
</item>
|
245
|
-
<item id="section-28.3.list2.j">
|
246
|
-
<num>(j)</num>
|
247
|
-
<p>in all cases where <term refersTo="#term-memorial_work" id="trm384">memorial work</term> rests on a base -</p>
|
248
|
-
</item>
|
249
|
-
<item id="section-28.3.list2.i">
|
250
|
-
<num>(i)</num>
|
251
|
-
<p>such <term refersTo="#term-memorial_work" id="trm385">memorial work</term> must have a foundation;</p>
|
252
|
-
</item>
|
253
|
-
<item id="section-28.3.list2.ii">
|
254
|
-
<num>(ii)</num>
|
255
|
-
<p>such <term refersTo="#term-memorial_work" id="trm386">memorial work</term> must be set with cement mortar;</p>
|
256
|
-
</item>
|
257
|
-
<item id="section-28.3.list2.iii">
|
258
|
-
<num>(iii)</num>
|
259
|
-
<p>the bottom base of a single <term refersTo="#term-memorial_work" id="trm387">memorial work</term> must not be less than 900mm long 220 mm wide x 250 mm thick and that of a double <term refersTo="#term-memorial_work" id="trm388">memorial work</term> not less than 2 286 mm long x 200 mm wide x 250 mm thick; and</p>
|
260
|
-
</item>
|
261
|
-
</blockList>
|
262
|
-
XML
|
263
|
-
))
|
264
|
-
|
265
|
-
subject.adjust_blocklists(doc)
|
266
|
-
doc.to_s.should == subsection(<<XML
|
267
|
-
<blockList id="section-28.3.list2">
|
268
|
-
<item id="section-28.3.list2.g">
|
269
|
-
<num>(g)</num>
|
270
|
-
<p>all <term refersTo="#term-memorial_work" id="trm381">memorial work</term> up to 150 mm in thickness must be securely attached to the base;</p>
|
271
|
-
</item>
|
272
|
-
<item id="section-28.3.list2.h">
|
273
|
-
<num>(h)</num>
|
274
|
-
<p>all the components of <term refersTo="#term-memorial_work" id="trm382">memorial work</term> must be completed before being brought into a <term refersTo="#term-cemetery" id="trm383">cemetery</term>;</p>
|
275
|
-
</item>
|
276
|
-
<item id="section-28.3.list2.i">
|
277
|
-
<num>(i)</num>
|
278
|
-
<p>footstones must consist of one solid piece;</p>
|
279
|
-
</item>
|
280
|
-
<item id="section-28.3.list2.j">
|
281
|
-
<num>(j)</num>
|
282
|
-
<blockList id="section-28.3.list2.j.list0">
|
283
|
-
<listIntroduction>in all cases where <term refersTo="#term-memorial_work" id="trm384">memorial work</term> rests on a base -</listIntroduction>
|
284
|
-
<item id="section-28.3.list2.j.list0.i">
|
285
|
-
<num>(i)</num>
|
286
|
-
<p>such <term refersTo="#term-memorial_work" id="trm385">memorial work</term> must have a foundation;</p>
|
287
|
-
</item>
|
288
|
-
<item id="section-28.3.list2.j.list0.ii">
|
289
|
-
<num>(ii)</num>
|
290
|
-
<p>such <term refersTo="#term-memorial_work" id="trm386">memorial work</term> must be set with cement mortar;</p>
|
291
|
-
</item>
|
292
|
-
<item id="section-28.3.list2.j.list0.iii">
|
293
|
-
<num>(iii)</num>
|
294
|
-
<p>the bottom base of a single <term refersTo="#term-memorial_work" id="trm387">memorial work</term> must not be less than 900mm long 220 mm wide x 250 mm thick and that of a double <term refersTo="#term-memorial_work" id="trm388">memorial work</term> not less than 2 286 mm long x 200 mm wide x 250 mm thick; and</p>
|
295
|
-
</item>
|
296
|
-
</blockList>
|
297
|
-
</item>
|
298
|
-
</blockList>
|
299
|
-
XML
|
300
|
-
)
|
301
|
-
end
|
302
|
-
|
303
|
-
# -------------------------------------------------------------------------
|
304
|
-
it 'should handle (I) correctly' do
|
305
|
-
doc = xml2doc(subsection(<<XML
|
306
|
-
<blockList id="section-28.3.list2" renest="true">
|
307
|
-
<item id="section-28.3.list2.g">
|
308
|
-
<num>(g)</num>
|
309
|
-
<p>all memorial work up to 150 mm in thickness must be securely attached to the base;</p>
|
310
|
-
</item>
|
311
|
-
<item id="section-28.3.list2.h">
|
312
|
-
<num>(h)</num>
|
313
|
-
<p>all the components of memorial work must be completed before being brought into a cemetery;</p>
|
314
|
-
</item>
|
315
|
-
<item id="section-28.3.list2.i">
|
316
|
-
<num>(i)</num>
|
317
|
-
<p>item i</p>
|
318
|
-
</item>
|
319
|
-
<item id="section-28.3.list2.I">
|
320
|
-
<num>(I)</num>
|
321
|
-
<p>a subitem</p>
|
322
|
-
</item>
|
323
|
-
<item id="section-28.3.list2.II">
|
324
|
-
<num>(II)</num>
|
325
|
-
<p>another subitem</p>
|
326
|
-
</item>
|
327
|
-
<item id="section-28.3.list2.j">
|
328
|
-
<num>(j)</num>
|
329
|
-
<p>in all cases where memorial work rests on a base -</p>
|
330
|
-
</item>
|
331
|
-
<item id="section-28.3.list2.i">
|
332
|
-
<num>(i)</num>
|
333
|
-
<p>such memorial work must have a foundation;</p>
|
334
|
-
</item>
|
335
|
-
<item id="section-28.3.list2.ii">
|
336
|
-
<num>(ii)</num>
|
337
|
-
<p>such memorial work must be set with cement mortar;</p>
|
338
|
-
</item>
|
339
|
-
<item id="section-28.3.list2.iii">
|
340
|
-
<num>(iii)</num>
|
341
|
-
<p>the bottom base of a single memorial work must not be less than 900mm long 220 mm wide x 250 mm thick and that of a double memorial work not less than 2 286 mm long x 200 mm wide x 250 mm thick; and</p>
|
342
|
-
</item>
|
343
|
-
</blockList>
|
344
|
-
XML
|
345
|
-
))
|
346
|
-
|
347
|
-
subject.adjust_blocklists(doc)
|
348
|
-
doc.to_s.should == subsection(<<XML
|
349
|
-
<blockList id="section-28.3.list2">
|
350
|
-
<item id="section-28.3.list2.g">
|
351
|
-
<num>(g)</num>
|
352
|
-
<p>all memorial work up to 150 mm in thickness must be securely attached to the base;</p>
|
353
|
-
</item>
|
354
|
-
<item id="section-28.3.list2.h">
|
355
|
-
<num>(h)</num>
|
356
|
-
<p>all the components of memorial work must be completed before being brought into a cemetery;</p>
|
357
|
-
</item>
|
358
|
-
<item id="section-28.3.list2.i">
|
359
|
-
<num>(i)</num>
|
360
|
-
<blockList id="section-28.3.list2.i.list0">
|
361
|
-
<listIntroduction>item i</listIntroduction>
|
362
|
-
<item id="section-28.3.list2.i.list0.I">
|
363
|
-
<num>(I)</num>
|
364
|
-
<p>a subitem</p>
|
365
|
-
</item>
|
366
|
-
<item id="section-28.3.list2.i.list0.II">
|
367
|
-
<num>(II)</num>
|
368
|
-
<p>another subitem</p>
|
369
|
-
</item>
|
370
|
-
</blockList>
|
371
|
-
</item>
|
372
|
-
<item id="section-28.3.list2.j">
|
373
|
-
<num>(j)</num>
|
374
|
-
<blockList id="section-28.3.list2.j.list1">
|
375
|
-
<listIntroduction>in all cases where memorial work rests on a base -</listIntroduction>
|
376
|
-
<item id="section-28.3.list2.j.list1.i">
|
377
|
-
<num>(i)</num>
|
378
|
-
<p>such memorial work must have a foundation;</p>
|
379
|
-
</item>
|
380
|
-
<item id="section-28.3.list2.j.list1.ii">
|
381
|
-
<num>(ii)</num>
|
382
|
-
<p>such memorial work must be set with cement mortar;</p>
|
383
|
-
</item>
|
384
|
-
<item id="section-28.3.list2.j.list1.iii">
|
385
|
-
<num>(iii)</num>
|
386
|
-
<p>the bottom base of a single memorial work must not be less than 900mm long 220 mm wide x 250 mm thick and that of a double memorial work not less than 2 286 mm long x 200 mm wide x 250 mm thick; and</p>
|
387
|
-
</item>
|
388
|
-
</blockList>
|
389
|
-
</item>
|
390
|
-
</blockList>
|
391
|
-
XML
|
392
|
-
)
|
393
|
-
end
|
394
|
-
|
395
|
-
# -------------------------------------------------------------------------
|
396
|
-
|
397
|
-
it 'should treat (aa) after (z) as siblings' do
|
398
|
-
doc = xml2doc(subsection(<<XML
|
399
|
-
<blockList id="list0">
|
400
|
-
<item id="list0.y">
|
401
|
-
<num>(y)</num>
|
402
|
-
<p>foo</p>
|
403
|
-
</item>
|
404
|
-
<item id="list0.z">
|
405
|
-
<num>(z)</num>
|
406
|
-
<p>item-z</p>
|
407
|
-
</item>
|
408
|
-
<item id="list0.aa">
|
409
|
-
<num>(aa)</num>
|
410
|
-
<p>item-aa</p>
|
411
|
-
</item>
|
412
|
-
<item id="list0.bb">
|
413
|
-
<num>(bb)</num>
|
414
|
-
<p>item-bb</p>
|
415
|
-
</item>
|
416
|
-
</blockList>
|
417
|
-
XML
|
418
|
-
))
|
419
|
-
|
420
|
-
subject.adjust_blocklists(doc)
|
421
|
-
doc.to_s.should == subsection(<<XML
|
422
|
-
<blockList id="list0">
|
423
|
-
<item id="list0.y">
|
424
|
-
<num>(y)</num>
|
425
|
-
<p>foo</p>
|
426
|
-
</item>
|
427
|
-
<item id="list0.z">
|
428
|
-
<num>(z)</num>
|
429
|
-
<p>item-z</p>
|
430
|
-
</item>
|
431
|
-
<item id="list0.aa">
|
432
|
-
<num>(aa)</num>
|
433
|
-
<p>item-aa</p>
|
434
|
-
</item>
|
435
|
-
<item id="list0.bb">
|
436
|
-
<num>(bb)</num>
|
437
|
-
<p>item-bb</p>
|
438
|
-
</item>
|
439
|
-
</blockList>
|
440
|
-
XML
|
441
|
-
)
|
442
|
-
end
|
443
|
-
|
444
|
-
# -------------------------------------------------------------------------
|
445
|
-
|
446
|
-
it 'should treat (AA) after (z) a sublist' do
|
447
|
-
doc = xml2doc(subsection(<<XML
|
448
|
-
<blockList id="list0" renest="true">
|
449
|
-
<item id="list0.y">
|
450
|
-
<num>(y)</num>
|
451
|
-
<p>foo</p>
|
452
|
-
</item>
|
453
|
-
<item id="list0.z">
|
454
|
-
<num>(z)</num>
|
455
|
-
<p>item-z</p>
|
456
|
-
</item>
|
457
|
-
<item id="list0.AA">
|
458
|
-
<num>(AA)</num>
|
459
|
-
<p>item-AA</p>
|
460
|
-
</item>
|
461
|
-
<item id="list0.BB">
|
462
|
-
<num>(BB)</num>
|
463
|
-
<p>item-BB</p>
|
464
|
-
</item>
|
465
|
-
</blockList>
|
466
|
-
XML
|
467
|
-
))
|
468
|
-
|
469
|
-
subject.adjust_blocklists(doc)
|
470
|
-
doc.to_s.should == subsection(<<XML
|
471
|
-
<blockList id="list0">
|
472
|
-
<item id="list0.y">
|
473
|
-
<num>(y)</num>
|
474
|
-
<p>foo</p>
|
475
|
-
</item>
|
476
|
-
<item id="list0.z">
|
477
|
-
<num>(z)</num>
|
478
|
-
<blockList id="list0.z.list0">
|
479
|
-
<listIntroduction>item-z</listIntroduction>
|
480
|
-
<item id="list0.z.list0.AA">
|
481
|
-
<num>(AA)</num>
|
482
|
-
<p>item-AA</p>
|
483
|
-
</item>
|
484
|
-
<item id="list0.z.list0.BB">
|
485
|
-
<num>(BB)</num>
|
486
|
-
<p>item-BB</p>
|
487
|
-
</item>
|
488
|
-
</blockList>
|
489
|
-
</item>
|
490
|
-
</blockList>
|
491
|
-
XML
|
492
|
-
)
|
493
|
-
end
|
494
|
-
|
495
|
-
# -------------------------------------------------------------------------
|
496
|
-
|
497
|
-
it 'should handle deeply nested lists' do
|
498
|
-
doc = xml2doc(subsection(<<XML
|
499
|
-
<blockList id="list0" renest="true">
|
500
|
-
<item id="list0.a">
|
501
|
-
<num>(a)</num>
|
502
|
-
<p>foo</p>
|
503
|
-
</item>
|
504
|
-
<item id="list0.b">
|
505
|
-
<num>(b)</num>
|
506
|
-
<p>item-b</p>
|
507
|
-
</item>
|
508
|
-
<item id="list0.i">
|
509
|
-
<num>(i)</num>
|
510
|
-
<p>item-b-i</p>
|
511
|
-
</item>
|
512
|
-
<item id="list0.aa">
|
513
|
-
<num>(aa)</num>
|
514
|
-
<p>item-i-aa</p>
|
515
|
-
</item>
|
516
|
-
<item id="list0.bb">
|
517
|
-
<num>(bb)</num>
|
518
|
-
<p>item-i-bb</p>
|
519
|
-
</item>
|
520
|
-
<item id="list0.ii">
|
521
|
-
<num>(ii)</num>
|
522
|
-
<p>item-b-ii</p>
|
523
|
-
</item>
|
524
|
-
<item id="list0.c">
|
525
|
-
<num>(c)</num>
|
526
|
-
<p>item-c</p>
|
527
|
-
</item>
|
528
|
-
<item id="list0.i">
|
529
|
-
<num>(i)</num>
|
530
|
-
<p>item-c-i</p>
|
531
|
-
</item>
|
532
|
-
<item id="list0.ii">
|
533
|
-
<num>(ii)</num>
|
534
|
-
<p>item-c-ii</p>
|
535
|
-
</item>
|
536
|
-
<item id="list0.iii">
|
537
|
-
<num>(iii)</num>
|
538
|
-
<p>item-c-iii</p>
|
539
|
-
</item>
|
540
|
-
</blockList>
|
541
|
-
XML
|
542
|
-
))
|
543
|
-
|
544
|
-
subject.adjust_blocklists(doc)
|
545
|
-
doc.to_s.should == subsection(<<XML
|
546
|
-
<blockList id="list0">
|
547
|
-
<item id="list0.a">
|
548
|
-
<num>(a)</num>
|
549
|
-
<p>foo</p>
|
550
|
-
</item>
|
551
|
-
<item id="list0.b">
|
552
|
-
<num>(b)</num>
|
553
|
-
<blockList id="list0.b.list0">
|
554
|
-
<listIntroduction>item-b</listIntroduction>
|
555
|
-
<item id="list0.b.list0.i">
|
556
|
-
<num>(i)</num>
|
557
|
-
<blockList id="list0.b.list0.i.list0">
|
558
|
-
<listIntroduction>item-b-i</listIntroduction>
|
559
|
-
<item id="list0.b.list0.i.list0.aa">
|
560
|
-
<num>(aa)</num>
|
561
|
-
<p>item-i-aa</p>
|
562
|
-
</item>
|
563
|
-
<item id="list0.b.list0.i.list0.bb">
|
564
|
-
<num>(bb)</num>
|
565
|
-
<p>item-i-bb</p>
|
566
|
-
</item>
|
567
|
-
</blockList>
|
568
|
-
</item>
|
569
|
-
<item id="list0.b.list0.ii">
|
570
|
-
<num>(ii)</num>
|
571
|
-
<p>item-b-ii</p>
|
572
|
-
</item>
|
573
|
-
</blockList>
|
574
|
-
</item>
|
575
|
-
<item id="list0.c">
|
576
|
-
<num>(c)</num>
|
577
|
-
<blockList id="list0.c.list1">
|
578
|
-
<listIntroduction>item-c</listIntroduction>
|
579
|
-
<item id="list0.c.list1.i">
|
580
|
-
<num>(i)</num>
|
581
|
-
<p>item-c-i</p>
|
582
|
-
</item>
|
583
|
-
<item id="list0.c.list1.ii">
|
584
|
-
<num>(ii)</num>
|
585
|
-
<p>item-c-ii</p>
|
586
|
-
</item>
|
587
|
-
<item id="list0.c.list1.iii">
|
588
|
-
<num>(iii)</num>
|
589
|
-
<p>item-c-iii</p>
|
590
|
-
</item>
|
591
|
-
</blockList>
|
592
|
-
</item>
|
593
|
-
</blockList>
|
594
|
-
XML
|
595
|
-
)
|
596
|
-
end
|
597
|
-
|
598
|
-
# -------------------------------------------------------------------------
|
599
|
-
|
600
|
-
it 'should jump back up a level when finding (i) near (h)' do
|
601
|
-
doc = xml2doc(subsection(<<XML
|
602
|
-
<blockList id="section-10.1.lst0" renest="true">
|
603
|
-
<item id="section-10.1.lst0.h">
|
604
|
-
<num>(h)</num>
|
605
|
-
<p>foo</p>
|
606
|
-
</item>
|
607
|
-
<item id="section-10.1.lst0.i">
|
608
|
-
<num>(i)</num>
|
609
|
-
<p>item-i</p>
|
610
|
-
</item>
|
611
|
-
<item id="section-10.1.lst0.ii">
|
612
|
-
<num>(ii)</num>
|
613
|
-
<p>item-ii</p>
|
614
|
-
</item>
|
615
|
-
<item id="section-10.1.lst0.i">
|
616
|
-
<num>(i)</num>
|
617
|
-
<p>item-i</p>
|
618
|
-
</item>
|
619
|
-
</blockList>
|
620
|
-
XML
|
621
|
-
))
|
622
|
-
|
623
|
-
subject.adjust_blocklists(doc)
|
624
|
-
doc.to_s.should == subsection(<<XML
|
625
|
-
<blockList id="section-10.1.lst0">
|
626
|
-
<item id="section-10.1.lst0.h">
|
627
|
-
<num>(h)</num>
|
628
|
-
<blockList id="section-10.1.lst0.h.list0">
|
629
|
-
<listIntroduction>foo</listIntroduction>
|
630
|
-
<item id="section-10.1.lst0.h.list0.i">
|
631
|
-
<num>(i)</num>
|
632
|
-
<p>item-i</p>
|
633
|
-
</item>
|
634
|
-
<item id="section-10.1.lst0.h.list0.ii">
|
635
|
-
<num>(ii)</num>
|
636
|
-
<p>item-ii</p>
|
637
|
-
</item>
|
638
|
-
</blockList>
|
639
|
-
</item>
|
640
|
-
<item id="section-10.1.lst0.i">
|
641
|
-
<num>(i)</num>
|
642
|
-
<p>item-i</p>
|
643
|
-
</item>
|
644
|
-
</blockList>
|
645
|
-
XML
|
646
|
-
)
|
647
|
-
end
|
648
|
-
|
649
|
-
# -------------------------------------------------------------------------
|
650
|
-
|
651
|
-
it 'should handle dotted numbers correctly' do
|
652
|
-
doc = xml2doc(subsection(<<XML
|
653
|
-
<blockList id="section-9.subsection-2.list2" renest="true">
|
654
|
-
<item id="section-9.subsection-2.list2.9.2.1">
|
655
|
-
<num>9.2.1</num>
|
656
|
-
<p>is incapable of trading because of an illness, provided that:</p>
|
657
|
-
</item>
|
658
|
-
<item id="section-9.subsection-2.list2.9.2.1.1">
|
659
|
-
<num>9.2.1.1</num>
|
660
|
-
<p>proof from a medical practitioner is provided to the City which certifies that the permit-holder is unable to trade; and</p>
|
661
|
-
</item>
|
662
|
-
<item id="section-9.subsection-2.list2.9.2.1.2">
|
663
|
-
<num>9.2.1.2</num>
|
664
|
-
<p>the dependent or assistant is only permitted to replace the permit-</p>
|
665
|
-
</item>
|
666
|
-
</blockList>
|
667
|
-
XML
|
668
|
-
))
|
669
|
-
|
670
|
-
subject.adjust_blocklists(doc)
|
671
|
-
doc.to_s.should == subsection(<<XML
|
672
|
-
<blockList id="section-9.subsection-2.list2">
|
673
|
-
<item id="section-9.subsection-2.list2.9.2.1">
|
674
|
-
<num>9.2.1</num>
|
675
|
-
<blockList id="section-9.subsection-2.list2.9.2.1.list0">
|
676
|
-
<listIntroduction>is incapable of trading because of an illness, provided that:</listIntroduction>
|
677
|
-
<item id="section-9.subsection-2.list2.9.2.1.list0.9.2.1.1">
|
678
|
-
<num>9.2.1.1</num>
|
679
|
-
<p>proof from a medical practitioner is provided to the City which certifies that the permit-holder is unable to trade; and</p>
|
680
|
-
</item>
|
681
|
-
<item id="section-9.subsection-2.list2.9.2.1.list0.9.2.1.2">
|
682
|
-
<num>9.2.1.2</num>
|
683
|
-
<p>the dependent or assistant is only permitted to replace the permit-</p>
|
684
|
-
</item>
|
685
|
-
</blockList>
|
686
|
-
</item>
|
687
|
-
</blockList>
|
688
|
-
XML
|
689
|
-
)
|
690
|
-
end
|
691
|
-
|
692
|
-
it 'should handle p tags just before' do
|
693
|
-
doc = xml2doc(subsection(<<XML
|
694
|
-
<p>intro</p>
|
695
|
-
<blockList id="section-10.1.lst0">
|
696
|
-
<item id="section-10.1.lst0.a">
|
697
|
-
<num>(a)</num>
|
698
|
-
<p>foo</p>
|
699
|
-
</item>
|
700
|
-
</blockList>
|
701
|
-
XML
|
702
|
-
))
|
703
|
-
|
704
|
-
subject.adjust_blocklists(doc)
|
705
|
-
doc.to_s.should == subsection(<<XML
|
706
|
-
<blockList id="section-10.1.lst0">
|
707
|
-
<listIntroduction>intro</listIntroduction>
|
708
|
-
<item id="section-10.1.lst0.a">
|
709
|
-
<num>(a)</num>
|
710
|
-
<p>foo</p>
|
711
|
-
</item>
|
712
|
-
</blockList>
|
713
|
-
XML
|
714
|
-
)
|
715
|
-
end
|
716
|
-
end
|
717
|
-
|
718
10
|
describe '#preprocess' do
|
719
11
|
it 'should split inline table cells into block table cells' do
|
720
12
|
text = <<EOS
|