slaw 2.2.0 → 3.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.
@@ -1,271 +0,0 @@
1
- <?xml version="1.0"?>
2
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
3
- xmlns:a="http://www.akomantoso.org/2.0"
4
- exclude-result-prefixes="a">
5
-
6
- <xsl:output method="text" indent="no" omit-xml-declaration="yes" />
7
- <xsl:strip-space elements="*"/>
8
-
9
- <!-- adds a backslash to the start of the value param, if necessary -->
10
- <xsl:template name="escape">
11
- <xsl:param name="value"/>
12
-
13
- <xsl:variable name="prefix" select="translate(substring($value, 1, 10), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
14
- <xsl:variable name="numprefix" select="translate(translate(substring($prefix, 1, 3), '1234567890', 'NNNNNNNNNN'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'NNNNNNNNNNNNNNNNNNNNNNNNNN')" />
15
-
16
- <!-- p tags must escape initial content that looks like a block element marker.
17
- Note that the two hyphens are different characters. -->
18
- <xsl:if test="$prefix = 'BODY' or
19
- $prefix = 'PREAMBLE' or
20
- $prefix = 'PREFACE' or
21
- starts-with($prefix, 'ROZDZIA') or
22
- starts-with($prefix, 'DZIA') or
23
- starts-with($prefix, 'ODDZIA') or
24
- starts-with($prefix, 'ART.') or
25
- starts-with($prefix, '§') or
26
- starts-with($prefix, 'SCHEDULE ') or
27
- starts-with($prefix, '{|') or
28
- starts-with($numprefix, 'N)') or
29
- starts-with($numprefix, 'NN)') or
30
- starts-with($numprefix, 'N.') or
31
- starts-with($numprefix, 'NN.') or
32
- starts-with($numprefix, '-') or
33
- starts-with($numprefix, '–')">
34
- <xsl:text>\</xsl:text>
35
- </xsl:if>
36
- <xsl:value-of select="$value"/>
37
- </xsl:template>
38
-
39
- <xsl:template match="a:act">
40
- <xsl:apply-templates select="a:coverPage" />
41
- <xsl:apply-templates select="a:preface" />
42
- <xsl:apply-templates select="a:preamble" />
43
- <xsl:apply-templates select="a:body" />
44
- <xsl:apply-templates select="a:conclusions" />
45
- </xsl:template>
46
-
47
- <xsl:template match="a:preface">
48
- <xsl:text>PREFACE</xsl:text>
49
- <xsl:text>
50
-
51
- </xsl:text>
52
- <xsl:apply-templates />
53
- </xsl:template>
54
-
55
- <xsl:template match="a:preamble">
56
- <xsl:text>PREAMBLE</xsl:text>
57
- <xsl:text>
58
-
59
- </xsl:text>
60
- <xsl:apply-templates />
61
- </xsl:template>
62
-
63
- <xsl:template match="a:division">
64
- <xsl:text>Dział </xsl:text>
65
- <xsl:value-of select="./a:num" />
66
- <xsl:text> - </xsl:text>
67
- <xsl:value-of select="./a:heading" />
68
- <xsl:text>
69
-
70
- </xsl:text>
71
- <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
72
- </xsl:template>
73
-
74
- <xsl:template match="a:chapter">
75
- <xsl:text>Rozdział </xsl:text>
76
- <xsl:value-of select="./a:num" />
77
- <xsl:text> - </xsl:text>
78
- <xsl:value-of select="./a:heading" />
79
- <xsl:text>
80
-
81
- </xsl:text>
82
- <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
83
- </xsl:template>
84
-
85
- <xsl:template match="a:article">
86
- <xsl:text>Art. </xsl:text>
87
- <xsl:value-of select="a:num" />
88
- <xsl:text>
89
-
90
- </xsl:text>
91
- <xsl:apply-templates select="./*[not(self::a:num)]" />
92
- </xsl:template>
93
-
94
- <xsl:template match="a:section">
95
- <xsl:text>§ </xsl:text>
96
- <xsl:value-of select="a:num" />
97
- <xsl:text>
98
-
99
- </xsl:text>
100
- <xsl:apply-templates select="./*[not(self::a:num)]" />
101
- </xsl:template>
102
-
103
- <xsl:template match="a:paragraph">
104
- <xsl:if test="a:num != ''">
105
- <xsl:value-of select="a:num" />
106
- <xsl:text> </xsl:text>
107
- </xsl:if>
108
- <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
109
- </xsl:template>
110
-
111
- <xsl:template match="a:indent">
112
- <xsl:value-of select="a:num" />
113
- <xsl:text>- </xsl:text>
114
- <xsl:apply-templates select="./*[not(self::a:num)]" />
115
- </xsl:template>
116
-
117
- <!-- these are block elements and have a newline at the end -->
118
- <xsl:template match="a:heading">
119
- <xsl:apply-templates />
120
- <xsl:text>
121
-
122
- </xsl:text>
123
- </xsl:template>
124
-
125
- <xsl:template match="a:p">
126
- <xsl:apply-templates/>
127
- <!-- p tags must end with a newline -->
128
- <xsl:text>
129
-
130
- </xsl:text>
131
- </xsl:template>
132
-
133
- <!-- numbered lists -->
134
- <xsl:template match="a:item | a:alinea | a:point">
135
- <xsl:value-of select="./a:num" />
136
- <xsl:text> </xsl:text>
137
- <xsl:apply-templates select="./*[not(self::a:num)]" />
138
- </xsl:template>
139
-
140
- <xsl:template match="a:list">
141
- <xsl:if test="a:intro != ''">
142
- <xsl:value-of select="a:intro" />
143
- <xsl:text>
144
-
145
- </xsl:text>
146
- </xsl:if>
147
- <xsl:apply-templates select="./*[not(self::a:intro)]" />
148
- </xsl:template>
149
-
150
- <!-- first text nodes of these elems must be escaped if they have special chars -->
151
- <xsl:template match="a:p[not(ancestor::a:table)]/text()[1] | a:intro/text()[1]">
152
- <xsl:call-template name="escape">
153
- <xsl:with-param name="value" select="." />
154
- </xsl:call-template>
155
- </xsl:template>
156
-
157
- <!-- components/schedules -->
158
- <xsl:template match="a:doc">
159
- <xsl:text>Schedule - </xsl:text>
160
- <xsl:value-of select="a:meta/a:identification/a:FRBRWork/a:FRBRalias/@value" />
161
-
162
- <xsl:if test="a:mainBody/a:article/a:heading">
163
- <xsl:text>
164
- </xsl:text>
165
- <xsl:value-of select="a:mainBody/a:article/a:heading" />
166
- </xsl:if>
167
-
168
- <xsl:text>
169
-
170
- </xsl:text>
171
- <xsl:apply-templates select="a:mainBody" />
172
- </xsl:template>
173
-
174
- <xsl:template match="a:mainBody/a:article/a:heading">
175
- <!-- no-op, this is handled by the schedules template above -->
176
- </xsl:template>
177
-
178
- <!-- tables -->
179
- <xsl:template match="a:table">
180
- <xsl:text>{| </xsl:text>
181
-
182
- <!-- attributes -->
183
- <xsl:for-each select="@*[local-name()!='id']">
184
- <xsl:value-of select="local-name(.)" />
185
- <xsl:text>="</xsl:text>
186
- <xsl:value-of select="." />
187
- <xsl:text>" </xsl:text>
188
- </xsl:for-each>
189
- <xsl:text>
190
- |-</xsl:text>
191
-
192
- <xsl:apply-templates />
193
- <xsl:text>
194
- |}
195
-
196
- </xsl:text>
197
- </xsl:template>
198
-
199
- <xsl:template match="a:tr">
200
- <xsl:apply-templates />
201
- <xsl:text>
202
- |-</xsl:text>
203
- </xsl:template>
204
-
205
- <xsl:template match="a:th|a:td">
206
- <xsl:choose>
207
- <xsl:when test="local-name(.) = 'th'">
208
- <xsl:text>
209
- ! </xsl:text>
210
- </xsl:when>
211
- <xsl:when test="local-name(.) = 'td'">
212
- <xsl:text>
213
- | </xsl:text>
214
- </xsl:when>
215
- </xsl:choose>
216
-
217
- <!-- attributes -->
218
- <xsl:if test="@*">
219
- <xsl:for-each select="@*">
220
- <xsl:value-of select="local-name(.)" />
221
- <xsl:text>="</xsl:text>
222
- <xsl:value-of select="." />
223
- <xsl:text>" </xsl:text>
224
- </xsl:for-each>
225
- <xsl:text>| </xsl:text>
226
- </xsl:if>
227
-
228
- <xsl:apply-templates />
229
- </xsl:template>
230
-
231
- <!-- don't end p tags with newlines in tables -->
232
- <xsl:template match="a:table//a:p">
233
- <xsl:apply-templates />
234
- </xsl:template>
235
-
236
- <!-- END tables -->
237
-
238
- <xsl:template match="a:remark">
239
- <xsl:text>[</xsl:text>
240
- <xsl:apply-templates />
241
- <xsl:text>]</xsl:text>
242
- </xsl:template>
243
-
244
- <xsl:template match="a:ref">
245
- <xsl:text>[</xsl:text>
246
- <xsl:apply-templates />
247
- <xsl:text>](</xsl:text>
248
- <xsl:value-of select="@href" />
249
- <xsl:text>)</xsl:text>
250
- </xsl:template>
251
-
252
- <xsl:template match="a:img">
253
- <xsl:text>![</xsl:text>
254
- <xsl:value-of select="@alt" />
255
- <xsl:text>](</xsl:text>
256
- <xsl:value-of select="@src" />
257
- <xsl:text>)</xsl:text>
258
- </xsl:template>
259
-
260
- <xsl:template match="a:eol">
261
- <xsl:text>
262
- </xsl:text>
263
- </xsl:template>
264
-
265
-
266
- <!-- for most nodes, just dump their text content -->
267
- <xsl:template match="*">
268
- <xsl:text/><xsl:apply-templates /><xsl:text/>
269
- </xsl:template>
270
-
271
- </xsl:stylesheet>
@@ -1,677 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'slaw'
4
-
5
- describe Slaw::ActGenerator do
6
- subject { Slaw::ActGenerator.new('pl') }
7
-
8
- def parse(rule, s)
9
- subject.builder.text_to_syntax_tree(s, {root: rule})
10
- end
11
-
12
- def should_parse(rule, s)
13
- s << "\n" unless s.end_with?("\n")
14
- tree = subject.builder.text_to_syntax_tree(s, {root: rule})
15
-
16
- if not tree
17
- raise Exception.new(subject.failure_reason || "Couldn't match to grammar") if tree.nil?
18
- else
19
- # count an assertion
20
- tree.should_not be_nil
21
- end
22
- end
23
-
24
- def to_xml(node, *args)
25
- b = ::Nokogiri::XML::Builder.new
26
- node.to_xml(b, *args)
27
- b.doc.root.to_xml(encoding: 'UTF-8')
28
- end
29
-
30
- #-------------------------------------------------------------------------------
31
- # Basics
32
-
33
- describe 'full test' do
34
- it 'should handle a full hierarchy' do
35
- node = parse :body, <<EOS
36
- DZIAŁ I
37
-
38
- Projekt ustawy
39
-
40
- Rozdział 7. Oznaczanie przepisów ustawy i ich systematyzacja
41
-
42
- § 54. Podstawową jednostką redakcyjną ustawy jest artykuł.
43
-
44
- § 55.
45
- 1. Każdą samodzielną myśl ujmuje się w odrębny artykuł.
46
- 2. Artykuł powinien być w miarę możliwości jednozdaniowy.
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 (§).
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ł.
49
-
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.
52
- 2. W obrębie punktów można dokonać dalszego wyliczenia, wprowadzając litery.
53
- EOS
54
-
55
- to_xml(node).should == '<body>
56
- <division id="division-I">
57
- <num>I</num>
58
- <subparagraph id="division-I.subparagraph-0">
59
- <content>
60
- <p>Projekt ustawy</p>
61
- </content>
62
- </subparagraph>
63
- <chapter id="chapter-7">
64
- <num>7</num>
65
- <heading>Oznaczanie przepisów ustawy i ich systematyzacja</heading>
66
- <section id="section-54">
67
- <num>54.</num>
68
- <content>
69
- <p>Podstawową jednostką redakcyjną ustawy jest artykuł.</p>
70
- </content>
71
- </section>
72
- <section id="section-55">
73
- <num>55.</num>
74
- <paragraph id="section-55.paragraph-1">
75
- <num>1.</num>
76
- <content>
77
- <p>Każdą samodzielną myśl ujmuje się w odrębny artykuł.</p>
78
- </content>
79
- </paragraph>
80
- <paragraph id="section-55.paragraph-2">
81
- <num>2.</num>
82
- <content>
83
- <p>Artykuł powinien być w miarę możliwości jednozdaniowy.</p>
84
- </content>
85
- </paragraph>
86
- <paragraph id="section-55.paragraph-3">
87
- <num>3.</num>
88
- <content>
89
- <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>
90
- </content>
91
- </paragraph>
92
- <paragraph id="section-55.paragraph-4">
93
- <num>4.</num>
94
- <content>
95
- <p>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ł.</p>
96
- </content>
97
- </paragraph>
98
- </section>
99
- <section id="section-56">
100
- <num>56.</num>
101
- <paragraph id="section-56.paragraph-1">
102
- <num>1.</num>
103
- <content>
104
- <p>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.</p>
105
- </content>
106
- </paragraph>
107
- <paragraph id="section-56.paragraph-2">
108
- <num>2.</num>
109
- <content>
110
- <p>W obrębie punktów można dokonać dalszego wyliczenia, wprowadzając litery.</p>
111
- </content>
112
- </paragraph>
113
- </section>
114
- </chapter>
115
- </division>
116
- </body>'
117
- end
118
- end
119
-
120
- #-------------------------------------------------------------------------------
121
- # Articles
122
-
123
- describe 'articles' do
124
- it 'should handle articles' do
125
- node = parse :article, <<EOS
126
- Art. 1. Ustawa reguluje opodatkowanie podatkiem dochodowym dochodów osób fizycznych
127
- EOS
128
- to_xml(node).should == '<article id="article-1">
129
- <num>1.</num>
130
- <content>
131
- <p>Ustawa reguluje opodatkowanie podatkiem dochodowym dochodów osób fizycznych</p>
132
- </content>
133
- </article>'
134
- end
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
-
150
- it 'should handle consecutive articles' do
151
- node = parse :body, <<EOS
152
- Art. 1. Ustawa reguluje opodatkowanie podatkiem dochodowym dochodów osób fizycznych
153
- Art. 2. Something else
154
- EOS
155
- to_xml(node).should == '<body>
156
- <article id="article-1">
157
- <num>1.</num>
158
- <content>
159
- <p>Ustawa reguluje opodatkowanie podatkiem dochodowym dochodów osób fizycznych</p>
160
- </content>
161
- </article>
162
- <article id="article-2">
163
- <num>2.</num>
164
- <content>
165
- <p>Something else</p>
166
- </content>
167
- </article>
168
- </body>'
169
- end
170
-
171
- it 'should handle nested content' do
172
- node = parse :article, <<EOS
173
- Art. 2.
174
- 1. Przepisów ustawy nie stosuje się do:
175
- 1) przychodów z działalności rolniczej, z wyjątkiem przychodów z działów specjalnych produkcji rolnej;
176
- 2) przychodów z gospodarki leśnej w rozumieniu ustawy o lasach;
177
- EOS
178
- to_xml(node).should == '<article id="article-2">
179
- <num>2.</num>
180
- <paragraph id="article-2.paragraph-1">
181
- <num>1.</num>
182
- <intro>
183
- <p>Przepisów ustawy nie stosuje się do:</p>
184
- </intro>
185
- <point id="article-2.paragraph-1.point-1">
186
- <num>1)</num>
187
- <content>
188
- <p>przychodów z działalności rolniczej, z wyjątkiem przychodów z działów specjalnych produkcji rolnej;</p>
189
- </content>
190
- </point>
191
- <point id="article-2.paragraph-1.point-2">
192
- <num>2)</num>
193
- <content>
194
- <p>przychodów z gospodarki leśnej w rozumieniu ustawy o lasach;</p>
195
- </content>
196
- </point>
197
- </paragraph>
198
- </article>'
199
- end
200
- end
201
-
202
- #-------------------------------------------------------------------------------
203
- # Divisions
204
-
205
- describe 'divisions' do
206
- it 'should handle divisions' do
207
- node = parse :division, <<EOS
208
- DZIAŁ I
209
- Projekt ustawy
210
-
211
- Rozdział 7. Oznaczanie przepisów ustawy i ich systematyzacja
212
-
213
- § 54. Podstawową jednostką redakcyjną ustawy jest artykuł.
214
- EOS
215
- to_xml(node).should == '<division id="division-I">
216
- <num>I</num>
217
- <heading>Projekt ustawy</heading>
218
- <chapter id="chapter-7">
219
- <num>7</num>
220
- <heading>Oznaczanie przepisów ustawy i ich systematyzacja</heading>
221
- <section id="section-54">
222
- <num>54.</num>
223
- <content>
224
- <p>Podstawową jednostką redakcyjną ustawy jest artykuł.</p>
225
- </content>
226
- </section>
227
- </chapter>
228
- </division>'
229
- end
230
- end
231
-
232
- #-------------------------------------------------------------------------------
233
- # Subdivisions
234
-
235
- describe 'subdivisions' do
236
- it 'should handle subdivisions' do
237
- node = parse :subdivision, <<EOS
238
- ODDZIAŁ I
239
- Projekt ustawy
240
-
241
- § 54. Podstawową jednostką redakcyjną ustawy jest artykuł.
242
- EOS
243
- to_xml(node).should == '<subdivision id="subdivision-I">
244
- <num>I</num>
245
- <heading>Projekt ustawy</heading>
246
- <section id="section-54">
247
- <num>54.</num>
248
- <content>
249
- <p>Podstawową jednostką redakcyjną ustawy jest artykuł.</p>
250
- </content>
251
- </section>
252
- </subdivision>'
253
- end
254
- end
255
-
256
- #-------------------------------------------------------------------------------
257
- # Paragraph
258
-
259
- describe 'paragraph' do
260
- it 'should handle simple para' do
261
- node = parse :paragraph, <<EOS
262
- 1. Każdą samodzielną myśl ujmuje się w odrębny artykuł.
263
- EOS
264
-
265
- to_xml(node).should == '<paragraph id="paragraph-1">
266
- <num>1.</num>
267
- <content>
268
- <p>Każdą samodzielną myśl ujmuje się w odrębny artykuł.</p>
269
- </content>
270
- </paragraph>'
271
- end
272
-
273
- it 'should handle an empty para' do
274
- node = parse :paragraph, <<EOS
275
- 1.
276
- EOS
277
-
278
- to_xml(node).should == '<paragraph id="paragraph-1">
279
- <num>1.</num>
280
- <content>
281
- <p/>
282
- </content>
283
- </paragraph>'
284
- end
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
-
301
- it 'should handle paragraphs with points' do
302
- node = parse :paragraph, <<EOS
303
- 2. W ustawie należy unikać posługiwania się:
304
- 1) określeniami specjalistycznymi, o ile ich użycie nie jest powodowane zapewnieniem należytej precyzji tekstu;
305
- 2) określeniami lub zapożyczeniami obcojęzycznymi, chyba że nie mają dokładnego odpowiednika w języku polskim;
306
- 3) nowo tworzonymi pojęciami lub strukturami językowymi, chyba że w dotychczasowym słownictwie polskim brak jest odpowiedniego określenia.
307
- EOS
308
-
309
- to_xml(node).should == '<paragraph id="paragraph-2">
310
- <num>2.</num>
311
- <intro>
312
- <p>W ustawie należy unikać posługiwania się:</p>
313
- </intro>
314
- <point id="paragraph-2.point-1">
315
- <num>1)</num>
316
- <content>
317
- <p>określeniami specjalistycznymi, o ile ich użycie nie jest powodowane zapewnieniem należytej precyzji tekstu;</p>
318
- </content>
319
- </point>
320
- <point id="paragraph-2.point-2">
321
- <num>2)</num>
322
- <content>
323
- <p>określeniami lub zapożyczeniami obcojęzycznymi, chyba że nie mają dokładnego odpowiednika w języku polskim;</p>
324
- </content>
325
- </point>
326
- <point id="paragraph-2.point-3">
327
- <num>3)</num>
328
- <content>
329
- <p>nowo tworzonymi pojęciami lub strukturami językowymi, chyba że w dotychczasowym słownictwie polskim brak jest odpowiedniego określenia.</p>
330
- </content>
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>
359
- </paragraph>'
360
- end
361
- end
362
-
363
- #-------------------------------------------------------------------------------
364
- # Section
365
-
366
- describe 'section' do
367
- it 'should handle section with un-numbered para' do
368
- node = parse :section, <<EOS
369
- § 5.
370
-
371
- Przepisy ustawy redaguje si´ zwi´êle i syntetycznie, unikajàc nadmiernej szczegó∏owoÊci, a zarazem w sposób, w jaki opisuje si´ typowe sytuacje wyst´pujàce w dziedzinie spraw regulowanych tà ustawà.
372
- EOS
373
-
374
- to_xml(node).should == '<section id="section-5">
375
- <num>5.</num>
376
- <content>
377
- <p>Przepisy ustawy redaguje si´ zwi´êle i syntetycznie, unikajàc nadmiernej szczegó∏owoÊci, a zarazem w sposób, w jaki opisuje si´ typowe sytuacje wyst´pujàce w dziedzinie spraw regulowanych tà ustawà.</p>
378
- </content>
379
- </section>'
380
- end
381
-
382
- it 'should handle section with numbered para on the same line' do
383
- node = parse :section, <<EOS
384
- § 54. Podstawową jednostką redakcyjną ustawy jest artykuł.
385
- EOS
386
-
387
- to_xml(node).should == '<section id="section-54">
388
- <num>54.</num>
389
- <content>
390
- <p>Podstawową jednostką redakcyjną ustawy jest artykuł.</p>
391
- </content>
392
- </section>'
393
- end
394
-
395
- it 'should handle section with numbered paras' do
396
- node = parse :section, <<EOS
397
- § 55.
398
- 1. Każdą samodzielną myśl ujmuje się w odrębny artykuł.
399
- 2. Artykuł powinien być w miarę możliwości jednozdaniowy.
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 (§).
401
- EOS
402
-
403
- to_xml(node).should == '<section id="section-55">
404
- <num>55.</num>
405
- <paragraph id="section-55.paragraph-1">
406
- <num>1.</num>
407
- <content>
408
- <p>Każdą samodzielną myśl ujmuje się w odrębny artykuł.</p>
409
- </content>
410
- </paragraph>
411
- <paragraph id="section-55.paragraph-2">
412
- <num>2.</num>
413
- <content>
414
- <p>Artykuł powinien być w miarę możliwości jednozdaniowy.</p>
415
- </content>
416
- </paragraph>
417
- <paragraph id="section-55.paragraph-3">
418
- <num>3.</num>
419
- <content>
420
- <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>
421
- </content>
422
- </paragraph>
423
- </section>'
424
- end
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
-
446
- it 'should handle section with intro, para and points' do
447
- node = parse :section, <<EOS
448
- § 54. Podstawową jednostką redakcyjną ustawy jest artykuł.
449
-
450
- Something here
451
-
452
- 1) a point
453
- 2) second point
454
- EOS
455
-
456
- to_xml(node).should == '<section id="section-54">
457
- <num>54.</num>
458
- <intro>
459
- <p>Podstawową jednostką redakcyjną ustawy jest artykuł.</p>
460
- </intro>
461
- <subparagraph id="section-54.subparagraph-0">
462
- <content>
463
- <p>Something here</p>
464
- </content>
465
- </subparagraph>
466
- <point id="section-54.point-1">
467
- <num>1)</num>
468
- <content>
469
- <p>a point</p>
470
- </content>
471
- </point>
472
- <point id="section-54.point-2">
473
- <num>2)</num>
474
- <content>
475
- <p>second point</p>
476
- </content>
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>
491
- </section>'
492
- end
493
- end
494
-
495
- #-------------------------------------------------------------------------------
496
- # Point
497
-
498
- describe 'point' do
499
- it 'should handle basic point' do
500
- node = parse :point, <<EOS
501
- 1) szczegółowy tryb i terminy rozpatrywania wniosków o udzielenie finansowego wsparcia;
502
- EOS
503
-
504
- to_xml(node, 'prefix.', 0).should == '<point id="prefix.point-1">
505
- <num>1)</num>
506
- <content>
507
- <p>szczegółowy tryb i terminy rozpatrywania wniosków o udzielenie finansowego wsparcia;</p>
508
- </content>
509
- </point>'
510
- end
511
-
512
- it 'should handle points with litera' do
513
- node = parse :point, <<EOS
514
- 1) dokumenty potwierdzające prawo własności albo prawo użytkowania wieczystego nieruchomości, której dotyczy przedsięwzięcie albo na której położony jest budynek, którego budowę, remont lub przebudowę zamierza się przepro- wadzić w ramach realizacji przedsięwzięcia, w tym:
515
-
516
- a) oryginał albo potwierdzoną za zgodność z oryginałem kopię wypisu i wyrysu z rejestru gruntów wszystkich dzia- łek ewidencyjnych, na których realizowane jest przedsięwzięcie, wydanego nie wcześniej niż 3 miesiące przed dniem złożenia wniosku, oraz
517
-
518
- b) numer księgi wieczystej;
519
- EOS
520
-
521
- to_xml(node, 'prefix.', 0).should == '<point id="prefix.point-1">
522
- <num>1)</num>
523
- <intro>
524
- <p>dokumenty potwierdzające prawo własności albo prawo użytkowania wieczystego nieruchomości, której dotyczy przedsięwzięcie albo na której położony jest budynek, którego budowę, remont lub przebudowę zamierza się przepro- wadzić w ramach realizacji przedsięwzięcia, w tym:</p>
525
- </intro>
526
- <alinea id="prefix.point-1.alinea-a">
527
- <num>a)</num>
528
- <content>
529
- <p>oryginał albo potwierdzoną za zgodność z oryginałem kopię wypisu i wyrysu z rejestru gruntów wszystkich dzia- łek ewidencyjnych, na których realizowane jest przedsięwzięcie, wydanego nie wcześniej niż 3 miesiące przed dniem złożenia wniosku, oraz</p>
530
- </content>
531
- </alinea>
532
- <alinea id="prefix.point-1.alinea-b">
533
- <num>b)</num>
534
- <content>
535
- <p>numer księgi wieczystej;</p>
536
- </content>
537
- </alinea>
538
- </point>'
539
- end
540
- end
541
-
542
- #-------------------------------------------------------------------------------
543
- # Litera
544
-
545
- describe 'litera' do
546
-
547
- it 'should handle litera with indents' do
548
- node = parse :litera, <<EOS
549
- b) liczby:
550
- - tworzonych lokali wchodzących w skład mieszkaniowego zasobu gminy,
551
- - mieszkań chronionych,
552
- - lokali mieszkalnych powstających z udziałem gminy albo związku międzygminnego w wyniku realizacji przedsięwzięć, o których mowa w art. 5 ust. 1 i art. 5a ust. 1 ustawy,
553
- - tymczasowych pomieszczeń,
554
- - miejsc w noclegowniach, schroniskach dla bezdomnych i ogrzewalniach,
555
- EOS
556
- to_xml(node, 'prefix.', 0).should == '<alinea id="prefix.alinea-b">
557
- <num>b)</num>
558
- <intro>
559
- <p>liczby:</p>
560
- </intro>
561
- <list id="prefix.alinea-b.list-0">
562
- <indent id="prefix.alinea-b.list-0.indent-0">
563
- <content>
564
- <p>tworzonych lokali wchodzących w skład mieszkaniowego zasobu gminy,</p>
565
- </content>
566
- </indent>
567
- <indent id="prefix.alinea-b.list-0.indent-1">
568
- <content>
569
- <p>mieszkań chronionych,</p>
570
- </content>
571
- </indent>
572
- <indent id="prefix.alinea-b.list-0.indent-2">
573
- <content>
574
- <p>lokali mieszkalnych powstających z udziałem gminy albo związku międzygminnego w wyniku realizacji przedsięwzięć, o których mowa w art. 5 ust. 1 i art. 5a ust. 1 ustawy,</p>
575
- </content>
576
- </indent>
577
- <indent id="prefix.alinea-b.list-0.indent-3">
578
- <content>
579
- <p>tymczasowych pomieszczeń,</p>
580
- </content>
581
- </indent>
582
- <indent id="prefix.alinea-b.list-0.indent-4">
583
- <content>
584
- <p>miejsc w noclegowniach, schroniskach dla bezdomnych i ogrzewalniach,</p>
585
- </content>
586
- </indent>
587
- </list>
588
- </alinea>'
589
- end
590
- end
591
-
592
- #-------------------------------------------------------------------------------
593
- # Indent
594
-
595
- describe 'indent' do
596
- it 'should handle basic indent' do
597
- node = parse :indents, <<EOS
598
- - tworzonych lokali wchodzących w skład mieszkaniowego zasobu gminy,
599
- EOS
600
-
601
- to_xml(node, 'prefix.', 0).should == '<list id="prefix.list-0">
602
- <indent id="prefix.list-0.indent-0">
603
- <content>
604
- <p>tworzonych lokali wchodzących w skład mieszkaniowego zasobu gminy,</p>
605
- </content>
606
- </indent>
607
- </list>'
608
- end
609
-
610
- it 'should handle indents with different dash characters' do
611
- node = parse :indents, <<EOS
612
- – foo
613
- - bar
614
- EOS
615
-
616
- to_xml(node, 'prefix.', 0).should == '<list id="prefix.list-0">
617
- <indent id="prefix.list-0.indent-0">
618
- <content>
619
- <p>foo</p>
620
- </content>
621
- </indent>
622
- <indent id="prefix.list-0.indent-1">
623
- <content>
624
- <p>bar</p>
625
- </content>
626
- </indent>
627
- </list>'
628
- end
629
-
630
- it 'should handle empty indents' do
631
- node = parse :indents, <<EOS
632
- -
633
- -
634
- EOS
635
-
636
- to_xml(node, 'prefix.', 0).should == '<list id="prefix.list-0">
637
- <indent id="prefix.list-0.indent-0">
638
- <content>
639
- <p/>
640
- </content>
641
- </indent>
642
- <indent id="prefix.list-0.indent-1">
643
- <content>
644
- <p/>
645
- </content>
646
- </indent>
647
- </list>'
648
- end
649
-
650
- it 'should handle multiple indent items' do
651
- node = parse :indents, <<EOS
652
- - tworzonych lokali wchodzących w skład mieszkaniowego zasobu gminy,
653
- - mieszkań chronionych,
654
- - lokali mieszkalnych powstających z udziałem gminy albo związku międzygminnego w wyniku realizacji przedsięwzięć, o których mowa w art. 5 ust. 1 i art. 5a ust. 1 ustawy,
655
- EOS
656
-
657
- to_xml(node, 'prefix.', 0).should == '<list id="prefix.list-0">
658
- <indent id="prefix.list-0.indent-0">
659
- <content>
660
- <p>tworzonych lokali wchodzących w skład mieszkaniowego zasobu gminy,</p>
661
- </content>
662
- </indent>
663
- <indent id="prefix.list-0.indent-1">
664
- <content>
665
- <p>mieszkań chronionych,</p>
666
- </content>
667
- </indent>
668
- <indent id="prefix.list-0.indent-2">
669
- <content>
670
- <p>lokali mieszkalnych powstających z udziałem gminy albo związku międzygminnego w wyniku realizacji przedsięwzięć, o których mowa w art. 5 ust. 1 i art. 5a ust. 1 ustawy,</p>
671
- </content>
672
- </indent>
673
- </list>'
674
- end
675
- end
676
-
677
- end