slaw 1.0.0.alpha.4 → 1.0.0.alpha.5
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/lib/slaw/grammars/pl/act.treetop +11 -12
- data/lib/slaw/grammars/pl/act_nodes.rb +38 -65
- data/lib/slaw/version.rb +1 -1
- data/spec/pl/act_block_spec.rb +97 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8377cd0de850d01757d9521eb73e57840e5ae857
|
4
|
+
data.tar.gz: df62a774c045f204e90f2ddf9b3278b00310ee0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ec34a0c15fd5c9017774e60eba1020c87e584c75b928998682c92399fc95c7403dffcfd294937178605f126d8180df7405be614960e74e72b22c2125e475b5b
|
7
|
+
data.tar.gz: 1f095a2dea3d24e88aedd838e678a7c916602075dad24d2f8ed6475aeec6988332c1916a0c284173616021cac0dbdce96ce0b5f67d484abb3ed14e4751135da6
|
@@ -59,39 +59,35 @@ module Slaw
|
|
59
59
|
end
|
60
60
|
|
61
61
|
rule article
|
62
|
-
# Art. 55.
|
63
|
-
|
64
|
-
intro
|
62
|
+
# Art. 55. some optional text
|
63
|
+
# 1. first paragraph etc.
|
64
|
+
article_prefix intro
|
65
65
|
children:(section / paragraph / point / litera / indents / block_paragraphs)* <Article>
|
66
66
|
end
|
67
67
|
|
68
68
|
rule section
|
69
69
|
# § 55. foo
|
70
|
-
section_prefix
|
71
|
-
intro:block_element?
|
70
|
+
section_prefix intro
|
72
71
|
children:(paragraph / point / litera / indents / block_paragraphs)* <Section>
|
73
72
|
end
|
74
73
|
|
75
74
|
rule paragraph
|
76
75
|
# ustęp:
|
77
76
|
# 34. ...
|
78
|
-
paragraph_prefix
|
79
|
-
intro:block_element?
|
77
|
+
paragraph_prefix intro
|
80
78
|
children:(point / litera / indents / block_paragraphs)* <Paragraph>
|
81
79
|
end
|
82
80
|
|
83
81
|
rule point
|
84
82
|
# 12) aoeuaoeu
|
85
83
|
# 12a) aoeuaoeu
|
86
|
-
point_prefix
|
87
|
-
intro:block_element?
|
84
|
+
point_prefix intro
|
88
85
|
children:(litera / indents / block_paragraphs)* <Point>
|
89
86
|
end
|
90
87
|
|
91
88
|
rule litera
|
92
89
|
# a) aoeuaoeu
|
93
|
-
litera_prefix
|
94
|
-
intro:block_element?
|
90
|
+
litera_prefix intro
|
95
91
|
children:(indents / block_paragraphs)* <Litera>
|
96
92
|
end
|
97
93
|
|
@@ -105,6 +101,10 @@ module Slaw
|
|
105
101
|
indent_prefix item_content:inline_block_element? eol? <IndentItem>
|
106
102
|
end
|
107
103
|
|
104
|
+
rule intro
|
105
|
+
(intro_inline:inline_block_element / (eol intro_block:block_element))? eol?
|
106
|
+
end
|
107
|
+
|
108
108
|
##########
|
109
109
|
# group elements
|
110
110
|
#
|
@@ -241,4 +241,3 @@ module Slaw
|
|
241
241
|
end
|
242
242
|
end
|
243
243
|
end
|
244
|
-
|
@@ -191,7 +191,35 @@ module Slaw
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
-
class
|
194
|
+
class BlockWithIntroAndChildren < Treetop::Runtime::SyntaxNode
|
195
|
+
def intro_node
|
196
|
+
if intro.elements.length >= 1
|
197
|
+
el = intro.elements[0]
|
198
|
+
|
199
|
+
if el.respond_to? :intro_inline
|
200
|
+
el.intro_inline
|
201
|
+
elsif el.respond_to? :intro_block
|
202
|
+
el.intro_block
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def intro_and_children_xml(b, idprefix)
|
208
|
+
if intro_node and !intro_node.empty?
|
209
|
+
if not children.empty?
|
210
|
+
b.intro { |b| intro_node.to_xml(b, idprefix) }
|
211
|
+
else
|
212
|
+
b.content { |b| intro_node.to_xml(b, idprefix) }
|
213
|
+
end
|
214
|
+
elsif children.empty?
|
215
|
+
b.content { |b| b.p }
|
216
|
+
end
|
217
|
+
|
218
|
+
children.elements.each_with_index { |e, i| e.to_xml(b, idprefix, i) }
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
class Article < BlockWithIntroAndChildren
|
195
223
|
def num
|
196
224
|
article_prefix.number_letter.text_value
|
197
225
|
end
|
@@ -202,23 +230,12 @@ module Slaw
|
|
202
230
|
|
203
231
|
b.article(id: id) { |b|
|
204
232
|
b.num("#{num}.")
|
205
|
-
|
206
|
-
if !intro.empty?
|
207
|
-
if not children.empty?
|
208
|
-
b.intro { |b| intro.to_xml(b, idprefix) }
|
209
|
-
else
|
210
|
-
b.content { |b| intro.to_xml(b, idprefix) }
|
211
|
-
end
|
212
|
-
elsif children.empty?
|
213
|
-
b.content { |b| b.p }
|
214
|
-
end
|
215
|
-
|
216
|
-
children.elements.each_with_index { |e, i| e.to_xml(b, idprefix, i) }
|
233
|
+
intro_and_children_xml(b, idprefix)
|
217
234
|
}
|
218
235
|
end
|
219
236
|
end
|
220
237
|
|
221
|
-
class Section <
|
238
|
+
class Section < BlockWithIntroAndChildren
|
222
239
|
def num
|
223
240
|
section_prefix.alphanums.text_value
|
224
241
|
end
|
@@ -229,23 +246,12 @@ module Slaw
|
|
229
246
|
|
230
247
|
b.section(id: id) { |b|
|
231
248
|
b.num("#{num}.")
|
232
|
-
|
233
|
-
if !intro.empty?
|
234
|
-
if not children.empty?
|
235
|
-
b.intro { |b| intro.to_xml(b, idprefix) }
|
236
|
-
else
|
237
|
-
b.content { |b| intro.to_xml(b, idprefix) }
|
238
|
-
end
|
239
|
-
elsif children.empty?
|
240
|
-
b.content { |b| b.p }
|
241
|
-
end
|
242
|
-
|
243
|
-
children.elements.each_with_index { |e, i| e.to_xml(b, idprefix, i) }
|
249
|
+
intro_and_children_xml(b, idprefix)
|
244
250
|
}
|
245
251
|
end
|
246
252
|
end
|
247
253
|
|
248
|
-
class Paragraph <
|
254
|
+
class Paragraph < BlockWithIntroAndChildren
|
249
255
|
def num
|
250
256
|
paragraph_prefix.number_letter.text_value
|
251
257
|
end
|
@@ -256,23 +262,12 @@ module Slaw
|
|
256
262
|
|
257
263
|
b.paragraph(id: id) { |b|
|
258
264
|
b.num(paragraph_prefix.text_value)
|
259
|
-
|
260
|
-
if !intro.empty?
|
261
|
-
if not children.empty?
|
262
|
-
b.intro { |b| intro.to_xml(b, idprefix) }
|
263
|
-
else
|
264
|
-
b.content { |b| intro.to_xml(b, idprefix) }
|
265
|
-
end
|
266
|
-
elsif children.empty?
|
267
|
-
b.content { |b| b.p }
|
268
|
-
end
|
269
|
-
|
270
|
-
children.elements.each_with_index { |e, i| e.to_xml(b, idprefix, i) }
|
265
|
+
intro_and_children_xml(b, idprefix)
|
271
266
|
}
|
272
267
|
end
|
273
268
|
end
|
274
269
|
|
275
|
-
class Point <
|
270
|
+
class Point < BlockWithIntroAndChildren
|
276
271
|
def num
|
277
272
|
point_prefix.number_letter.text_value
|
278
273
|
end
|
@@ -283,23 +278,12 @@ module Slaw
|
|
283
278
|
|
284
279
|
b.point(id: id) { |b|
|
285
280
|
b.num(point_prefix.text_value)
|
286
|
-
|
287
|
-
if !intro.empty?
|
288
|
-
if not children.empty?
|
289
|
-
b.intro { |b| intro.to_xml(b, idprefix) }
|
290
|
-
else
|
291
|
-
b.content { |b| intro.to_xml(b, idprefix) }
|
292
|
-
end
|
293
|
-
elsif children.empty?
|
294
|
-
b.content { |b| b.p }
|
295
|
-
end
|
296
|
-
|
297
|
-
children.elements.each_with_index { |e, i| e.to_xml(b, idprefix, i) }
|
281
|
+
intro_and_children_xml(b, idprefix)
|
298
282
|
}
|
299
283
|
end
|
300
284
|
end
|
301
285
|
|
302
|
-
class Litera <
|
286
|
+
class Litera < BlockWithIntroAndChildren
|
303
287
|
def num
|
304
288
|
litera_prefix.letters.text_value
|
305
289
|
end
|
@@ -310,18 +294,7 @@ module Slaw
|
|
310
294
|
|
311
295
|
b.list(id: id) { |b|
|
312
296
|
b.num(litera_prefix.text_value)
|
313
|
-
|
314
|
-
if !intro.empty?
|
315
|
-
if not children.empty?
|
316
|
-
b.intro { |b| intro.to_xml(b, idprefix) }
|
317
|
-
else
|
318
|
-
b.content { |b| intro.to_xml(b, idprefix) }
|
319
|
-
end
|
320
|
-
elsif children.empty?
|
321
|
-
b.content { |b| b.p }
|
322
|
-
end
|
323
|
-
|
324
|
-
children.elements.each_with_index { |e, i| e.to_xml(b, idprefix, i) }
|
297
|
+
intro_and_children_xml(b, idprefix)
|
325
298
|
}
|
326
299
|
end
|
327
300
|
end
|
data/lib/slaw/version.rb
CHANGED
data/spec/pl/act_block_spec.rb
CHANGED
@@ -41,12 +41,14 @@ Rozdział 7. Oznaczanie przepisów ustawy i ich systematyzacja
|
|
41
41
|
|
42
42
|
§ 54. Podstawową jednostką redakcyjną ustawy jest artykuł.
|
43
43
|
|
44
|
-
§ 55.
|
44
|
+
§ 55.
|
45
|
+
1. Każdą samodzielną myśl ujmuje się w odrębny artykuł.
|
45
46
|
2. Artykuł powinien być w miarę możliwości jednozdaniowy.
|
46
47
|
3. Jeżeli samodzielną myśl wyraża zespół zdań, dokonuje się podziału artykułu na ustępy. W ustawie określanej jako "kodeks" ustępy oznacza się paragrafami (§).
|
47
48
|
4. Podział artykułu na ustępy wprowadza się także w przypadku, gdy między zdaniami wyrażającymi samodzielne myśli występują powiązania treściowe, ale treść żadnego z nich nie jest na tyle istotna, aby wydzielić ją w odrębny artykuł.
|
48
49
|
|
49
|
-
§ 56.
|
50
|
+
§ 56.
|
51
|
+
1. W obrębie artykułu (ustępu) zawierającego wyliczenie wyróżnia się dwie części: wprowadzenie do wyliczenia oraz punkty. Wyliczenie może kończyć się częścią wspólną, odnoszącą się do wszystkich punktów. Po części wspólnej nie dodaje się kolejnej samodzielnej myśli; w razie potrzeby formułuje się ją w kolejnym ustępie.
|
50
52
|
2. W obrębie punktów można dokonać dalszego wyliczenia, wprowadzając litery.
|
51
53
|
EOS
|
52
54
|
|
@@ -131,6 +133,20 @@ EOS
|
|
131
133
|
</article>'
|
132
134
|
end
|
133
135
|
|
136
|
+
it 'should handle articles with blank lines' do
|
137
|
+
node = parse :article, <<EOS
|
138
|
+
Art. 1.
|
139
|
+
|
140
|
+
Ustawa reguluje opodatkowanie podatkiem dochodowym dochodów osób fizycznych
|
141
|
+
EOS
|
142
|
+
to_xml(node).should == '<article id="article-1">
|
143
|
+
<num>1.</num>
|
144
|
+
<content>
|
145
|
+
<p>Ustawa reguluje opodatkowanie podatkiem dochodowym dochodów osób fizycznych</p>
|
146
|
+
</content>
|
147
|
+
</article>'
|
148
|
+
end
|
149
|
+
|
134
150
|
it 'should handle consecutive articles' do
|
135
151
|
node = parse :body, <<EOS
|
136
152
|
Art. 1. Ustawa reguluje opodatkowanie podatkiem dochodowym dochodów osób fizycznych
|
@@ -154,7 +170,8 @@ EOS
|
|
154
170
|
|
155
171
|
it 'should handle nested content' do
|
156
172
|
node = parse :article, <<EOS
|
157
|
-
Art. 2.
|
173
|
+
Art. 2.
|
174
|
+
1. Przepisów ustawy nie stosuje się do:
|
158
175
|
1) przychodów z działalności rolniczej, z wyjątkiem przychodów z działów specjalnych produkcji rolnej;
|
159
176
|
2) przychodów z gospodarki leśnej w rozumieniu ustawy o lasach;
|
160
177
|
EOS
|
@@ -266,6 +283,21 @@ EOS
|
|
266
283
|
</paragraph>'
|
267
284
|
end
|
268
285
|
|
286
|
+
it 'should handle a para with whitespace' do
|
287
|
+
node = parse :paragraph, <<EOS
|
288
|
+
1.
|
289
|
+
|
290
|
+
foo bar
|
291
|
+
EOS
|
292
|
+
|
293
|
+
to_xml(node).should == '<paragraph id="paragraph-1">
|
294
|
+
<num>1.</num>
|
295
|
+
<content>
|
296
|
+
<p>foo bar</p>
|
297
|
+
</content>
|
298
|
+
</paragraph>'
|
299
|
+
end
|
300
|
+
|
269
301
|
it 'should handle paragraphs with points' do
|
270
302
|
node = parse :paragraph, <<EOS
|
271
303
|
2. W ustawie należy unikać posługiwania się:
|
@@ -297,6 +329,33 @@ EOS
|
|
297
329
|
<p>nowo tworzonymi pojęciami lub strukturami językowymi, chyba że w dotychczasowym słownictwie polskim brak jest odpowiedniego określenia.</p>
|
298
330
|
</content>
|
299
331
|
</point>
|
332
|
+
</paragraph>'
|
333
|
+
end
|
334
|
+
|
335
|
+
it 'should not get confused by points with articles' do
|
336
|
+
node = parse :paragraph, <<EOS
|
337
|
+
2. W ustawie należy unikać posługiwania się:
|
338
|
+
1) art. 1
|
339
|
+
2) art. 2
|
340
|
+
EOS
|
341
|
+
|
342
|
+
to_xml(node).should == '<paragraph id="paragraph-2">
|
343
|
+
<num>2.</num>
|
344
|
+
<intro>
|
345
|
+
<p>W ustawie należy unikać posługiwania się:</p>
|
346
|
+
</intro>
|
347
|
+
<point id="paragraph-2.point-1">
|
348
|
+
<num>1)</num>
|
349
|
+
<content>
|
350
|
+
<p>art. 1</p>
|
351
|
+
</content>
|
352
|
+
</point>
|
353
|
+
<point id="paragraph-2.point-2">
|
354
|
+
<num>2)</num>
|
355
|
+
<content>
|
356
|
+
<p>art. 2</p>
|
357
|
+
</content>
|
358
|
+
</point>
|
300
359
|
</paragraph>'
|
301
360
|
end
|
302
361
|
end
|
@@ -335,7 +394,8 @@ EOS
|
|
335
394
|
|
336
395
|
it 'should handle section with numbered paras' do
|
337
396
|
node = parse :section, <<EOS
|
338
|
-
§ 55.
|
397
|
+
§ 55.
|
398
|
+
1. Każdą samodzielną myśl ujmuje się w odrębny artykuł.
|
339
399
|
2. Artykuł powinien być w miarę możliwości jednozdaniowy.
|
340
400
|
3. Jeżeli samodzielną myśl wyraża zespół zdań, dokonuje się podziału artykułu na ustępy. W ustawie określanej jako "kodeks" ustępy oznacza się paragrafami (§).
|
341
401
|
EOS
|
@@ -363,6 +423,26 @@ EOS
|
|
363
423
|
</section>'
|
364
424
|
end
|
365
425
|
|
426
|
+
it 'should not confuse section content with block elements' do
|
427
|
+
node = parse :section, <<EOS
|
428
|
+
§ 55. 1. Każdą samodzielną myśl ujmuje się w odrębny artykuł.
|
429
|
+
3. Jeżeli samodzielną myśl wyraża zespół zdań, dokonuje się podziału artykułu na ustępy. W ustawie określanej jako "kodeks" ustępy oznacza się paragrafami (§).
|
430
|
+
EOS
|
431
|
+
|
432
|
+
to_xml(node).should == '<section id="section-55">
|
433
|
+
<num>55.</num>
|
434
|
+
<intro>
|
435
|
+
<p>1. Każdą samodzielną myśl ujmuje się w odrębny artykuł.</p>
|
436
|
+
</intro>
|
437
|
+
<paragraph id="section-55.paragraph-3">
|
438
|
+
<num>3.</num>
|
439
|
+
<content>
|
440
|
+
<p>Jeżeli samodzielną myśl wyraża zespół zdań, dokonuje się podziału artykułu na ustępy. W ustawie określanej jako "kodeks" ustępy oznacza się paragrafami (§).</p>
|
441
|
+
</content>
|
442
|
+
</paragraph>
|
443
|
+
</section>'
|
444
|
+
end
|
445
|
+
|
366
446
|
it 'should handle section with intro, para and points' do
|
367
447
|
node = parse :section, <<EOS
|
368
448
|
§ 54. Podstawową jednostką redakcyjną ustawy jest artykuł.
|
@@ -395,6 +475,19 @@ EOS
|
|
395
475
|
<p>second point</p>
|
396
476
|
</content>
|
397
477
|
</point>
|
478
|
+
</section>'
|
479
|
+
end
|
480
|
+
|
481
|
+
it 'should not get confused by sections with articles' do
|
482
|
+
node = parse :section, <<EOS
|
483
|
+
§ 54. Art 1. is changed...
|
484
|
+
EOS
|
485
|
+
|
486
|
+
to_xml(node).should == '<section id="section-54">
|
487
|
+
<num>54.</num>
|
488
|
+
<content>
|
489
|
+
<p>Art 1. is changed...</p>
|
490
|
+
</content>
|
398
491
|
</section>'
|
399
492
|
end
|
400
493
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slaw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.alpha.
|
4
|
+
version: 1.0.0.alpha.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Kempe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|