slaw 3.1.1 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3403f22ffd64d8ab9ca92ad9e26fed22d0c38b9ab525cb0d91708c3f5e9a13d3
4
- data.tar.gz: f2f40ece1aa1acc39bcb5cd2fdcda83449e883d98e86b6393433cb0284c060b0
3
+ metadata.gz: 4411a620b2f2ff5cad3942e1944d344a9e6282e654df6313a78a99e654a91347
4
+ data.tar.gz: '0789f05372eda817a52d97ba55ec4481f77d69557908709e3d4117b57c5d822b'
5
5
  SHA512:
6
- metadata.gz: fc3a1f6fb83768feb8d1ec85538a33fffdb5e2d9678fdcf72ced7be712385b47c07dd141ba8caaf92fbcaeb0410c418999eab547f30ab521fe1717e820f8684a
7
- data.tar.gz: 8c961961f1e3e7f43400c5541c9afca35cc3d26edfa78977a5e846626b743150657bf0441df2c465e12f1df28dd35af110dcdce52b1a94ab1a643a6b7194da79
6
+ metadata.gz: 9b0da1d5da9fb240a3efac4cd280fc567fc58979f219186c3b8719b13c3a3d2ebba5c20abc939e84b187539fa8a3d4ad1c5c7431b421902c0a7ae831dff51fda
7
+ data.tar.gz: be10a3d7c7ca33d81490b4c9c126a1bf2d6db2a9ec008bd989af4d3fb9485b55d74f560cf561b08b41669babd85831568be6f47937ee8b748ec6d4be02805712
data/README.md CHANGED
@@ -81,7 +81,11 @@ You can create your own grammar by creating a gem that provides these files and
81
81
 
82
82
  ## Changelog
83
83
 
84
- ### 3.1.1 (?)
84
+ ### 3.2.0 (22 April 2019)
85
+
86
+ * Permit inline content in chapter, part and section headings
87
+
88
+ ### 3.1.1 (10 April 2019)
85
89
 
86
90
  * FIX don't error when a line is just a backslash
87
91
 
@@ -3,15 +3,6 @@
3
3
  module Slaw
4
4
  module Grammars
5
5
  grammar Terminals
6
- #########
7
- ## one line of basic content
8
-
9
- rule content
10
- # anything but a newline, followed by a
11
- # newline or end of file (without consuming the newline)
12
- [^\n]+ &eol
13
- end
14
-
15
6
  ##########
16
7
  # terminals
17
8
 
@@ -106,12 +106,12 @@ module Slaw
106
106
  # headings
107
107
 
108
108
  rule chapter_heading
109
- space? chapter_heading_prefix heading:(newline? content)? eol
109
+ space? chapter_heading_prefix heading:(newline? space? inline_items)? eol
110
110
  <ChapterHeading>
111
111
  end
112
112
 
113
113
  rule part_heading
114
- space? part_heading_prefix heading:(newline? content)? eol
114
+ space? part_heading_prefix heading:(newline? space? inline_items)? eol
115
115
  <PartHeading>
116
116
  end
117
117
 
@@ -123,7 +123,7 @@ module Slaw
123
123
  &{ |s| options[:section_number_after_title] }
124
124
  # Section title
125
125
  # 1. Section content
126
- content eol
126
+ space? inline_items eol
127
127
  section_title_prefix whitespace <SectionTitleType1>
128
128
  end
129
129
 
@@ -141,7 +141,7 @@ module Slaw
141
141
  # don't match subsections, eg.
142
142
  #
143
143
  # 10. (1) subsection content...
144
- space !subsection_prefix content eol
144
+ space !subsection_prefix inline_items eol
145
145
  end
146
146
 
147
147
  ##########
@@ -154,15 +154,13 @@ module Slaw
154
154
  part_heading_prefix.alphanums.text_value
155
155
  end
156
156
 
157
- def title
158
- if heading.text_value and heading.respond_to? :content
159
- heading.content.text_value.strip
160
- end
161
- end
162
-
163
157
  def to_xml(b)
164
158
  b.num(num)
165
- b.heading(title) if title
159
+ if heading.respond_to? :inline_items
160
+ b.heading { |b|
161
+ heading.inline_items.to_xml(b)
162
+ }
163
+ end
166
164
  end
167
165
  end
168
166
 
@@ -191,15 +189,13 @@ module Slaw
191
189
  chapter_heading_prefix.alphanums.text_value
192
190
  end
193
191
 
194
- def title
195
- if heading.text_value and heading.respond_to? :content
196
- heading.content.text_value.strip
197
- end
198
- end
199
-
200
192
  def to_xml(b)
201
193
  b.num(num)
202
- b.heading(title) if title
194
+ if heading.respond_to? :inline_items
195
+ b.heading { |b|
196
+ heading.inline_items.to_xml(b)
197
+ }
198
+ end
203
199
  end
204
200
  end
205
201
 
@@ -208,18 +204,12 @@ module Slaw
208
204
  section_title.num
209
205
  end
210
206
 
211
- def title
212
- section_title.title
213
- end
214
-
215
207
  def to_xml(b, *args)
216
208
  id = "section-#{num}"
217
209
  b.section(id: id) { |b|
218
- b.num("#{num}.")
219
- b.heading(title)
210
+ section_title.to_xml(b)
220
211
 
221
212
  idprefix = "#{id}."
222
-
223
213
  children.elements.each_with_index { |e, i| e.to_xml(b, idprefix, i) }
224
214
  }
225
215
  end
@@ -235,8 +225,14 @@ module Slaw
235
225
  section_title_prefix.number_letter.text_value
236
226
  end
237
227
 
238
- def title
239
- content.text_value
228
+ def to_xml(b, *args)
229
+ b.num("#{num}.")
230
+
231
+ if inline_items.text_value
232
+ b.heading { |b|
233
+ inline_items.to_xml(b)
234
+ }
235
+ end
240
236
  end
241
237
  end
242
238
 
@@ -253,8 +249,16 @@ module Slaw
253
249
  section_title_prefix.number_letter.text_value
254
250
  end
255
251
 
256
- def title
257
- section_title.empty? ? "" : section_title.content.text_value
252
+ def to_xml(b, *args)
253
+ b.num("#{num}.")
254
+
255
+ if section_title.respond_to? :inline_items and section_title.inline_items.text_value
256
+ b.heading { |b|
257
+ section_title.inline_items.to_xml(b)
258
+ }
259
+ else
260
+ b.heading
261
+ end
258
262
  end
259
263
  end
260
264
 
data/lib/slaw/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Slaw
2
- VERSION = "3.1.1"
2
+ VERSION = "3.2.0"
3
3
  end
@@ -201,7 +201,7 @@ CROSSHEADING crossheading
201
201
  Some lines at the start of the chapter.
202
202
  EOS
203
203
  node.num.should == "2"
204
- node.heading.title.should == 'The Chapter Heading'
204
+ node.heading.heading.text_value.should == "\nThe Chapter Heading"
205
205
  to_xml(node).should == '<chapter id="chapter-2">
206
206
  <num>2</num>
207
207
  <heading>The Chapter Heading</heading>
@@ -227,7 +227,7 @@ Some lines at the start of the chapter.
227
227
  Section text.
228
228
  EOS
229
229
  node.num.should == "2"
230
- node.heading.title.should == 'The Chapter Heading'
230
+ node.heading.heading.text_value.should == 'The Chapter Heading'
231
231
  to_xml(node).should == '<chapter id="chapter-2">
232
232
  <num>2</num>
233
233
  <heading>The Chapter Heading</heading>
@@ -270,6 +270,51 @@ EOS
270
270
  </chapter>'
271
271
  end
272
272
 
273
+ it 'should handle inlines in chapter titles after newline' do
274
+ node = parse :chapter, <<EOS
275
+ Chapter 2
276
+ The **Chapter** [Heading](/za/act/1990/1) [[remark]]
277
+
278
+ 1. Section
279
+ Hello there
280
+ EOS
281
+ to_xml(node).should == '<chapter id="chapter-2">
282
+ <num>2</num>
283
+ <heading>The <b>Chapter</b> <ref href="/za/act/1990/1">Heading</ref> <remark status="editorial">[remark]</remark></heading>
284
+ <section id="section-1">
285
+ <num>1.</num>
286
+ <heading>Section</heading>
287
+ <paragraph id="section-1.paragraph0">
288
+ <content>
289
+ <p>Hello there</p>
290
+ </content>
291
+ </paragraph>
292
+ </section>
293
+ </chapter>'
294
+ end
295
+
296
+ it 'should handle inlines in chapter titles' do
297
+ node = parse :chapter, <<EOS
298
+ Chapter 2 - The **Chapter** [Heading](/za/act/1990/1) [[remark]]
299
+
300
+ 1. Section
301
+ Hello there
302
+ EOS
303
+ to_xml(node).should == '<chapter id="chapter-2">
304
+ <num>2</num>
305
+ <heading>The <b>Chapter</b> <ref href="/za/act/1990/1">Heading</ref> <remark status="editorial">[remark]</remark></heading>
306
+ <section id="section-1">
307
+ <num>1.</num>
308
+ <heading>Section</heading>
309
+ <paragraph id="section-1.paragraph0">
310
+ <content>
311
+ <p>Hello there</p>
312
+ </content>
313
+ </paragraph>
314
+ </section>
315
+ </chapter>'
316
+ end
317
+
273
318
  it 'should handle empty chapters' do
274
319
  node = parse :body, <<EOS
275
320
  Chapter 2 The Chapter Heading
@@ -453,6 +498,49 @@ EOS
453
498
  </part>'
454
499
  end
455
500
 
501
+ it 'should handle part headers with inline elements after newline' do
502
+ node = parse :part, <<EOS
503
+ Part 2
504
+ The **Part** Heading
505
+ 1. Section
506
+ Hello there
507
+ EOS
508
+ to_xml(node).should == '<part id="part-2">
509
+ <num>2</num>
510
+ <heading>The <b>Part</b> Heading</heading>
511
+ <section id="section-1">
512
+ <num>1.</num>
513
+ <heading>Section</heading>
514
+ <paragraph id="section-1.paragraph0">
515
+ <content>
516
+ <p>Hello there</p>
517
+ </content>
518
+ </paragraph>
519
+ </section>
520
+ </part>'
521
+ end
522
+
523
+ it 'should handle part headers with inline elements' do
524
+ node = parse :part, <<EOS
525
+ Part 2 The **Part** Heading
526
+ 1. Section
527
+ Hello there
528
+ EOS
529
+ to_xml(node).should == '<part id="part-2">
530
+ <num>2</num>
531
+ <heading>The <b>Part</b> Heading</heading>
532
+ <section id="section-1">
533
+ <num>1.</num>
534
+ <heading>Section</heading>
535
+ <paragraph id="section-1.paragraph0">
536
+ <content>
537
+ <p>Hello there</p>
538
+ </content>
539
+ </paragraph>
540
+ </section>
541
+ </part>'
542
+ end
543
+
456
544
  it 'should handle parts and odd section numbers' do
457
545
  subject.parser.options = {section_number_after_title: false}
458
546
  node = parse :parts, <<EOS
@@ -487,7 +575,7 @@ Some text before the part.
487
575
  Hello there
488
576
  EOS
489
577
  node.num.should == "2"
490
- node.heading.title.should == 'The Part Heading'
578
+ node.heading.heading.text_value.should == "\nThe Part Heading"
491
579
  to_xml(node).should == '<part id="part-2">
492
580
  <num>2</num>
493
581
  <heading>The Part Heading</heading>
@@ -1274,6 +1362,47 @@ EOS
1274
1362
  </section>'
1275
1363
  end
1276
1364
 
1365
+ it 'should handle sections with inline markup in headings' do
1366
+ subject.parser.options = {section_number_after_title: false}
1367
+ node = parse :section, <<EOS
1368
+ 1. Section **bold** [foo](/za/act/1990/1)
1369
+
1370
+ something
1371
+ EOS
1372
+
1373
+ s = to_xml(node)
1374
+ s.should == '<section id="section-1">
1375
+ <num>1.</num>
1376
+ <heading>Section <b>bold</b> <ref href="/za/act/1990/1">foo</ref></heading>
1377
+ <paragraph id="section-1.paragraph0">
1378
+ <content>
1379
+ <p>something</p>
1380
+ </content>
1381
+ </paragraph>
1382
+ </section>'
1383
+ end
1384
+
1385
+ it 'should handle prefixed sections with inline markup in headings' do
1386
+ subject.parser.options = {section_number_after_title: true}
1387
+ node = parse :section, <<EOS
1388
+ Section **bold** [foo](/za/act/1990/1)
1389
+ 1.
1390
+
1391
+ something
1392
+ EOS
1393
+
1394
+ s = to_xml(node)
1395
+ s.should == '<section id="section-1">
1396
+ <num>1.</num>
1397
+ <heading>Section <b>bold</b> <ref href="/za/act/1990/1">foo</ref></heading>
1398
+ <paragraph id="section-1.paragraph0">
1399
+ <content>
1400
+ <p>something</p>
1401
+ </content>
1402
+ </paragraph>
1403
+ </section>'
1404
+ end
1405
+
1277
1406
  it 'should handle a naked statement' do
1278
1407
  should_parse :section, <<EOS
1279
1408
  1. Section
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: 3.1.1
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Kempe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-10 00:00:00.000000000 Z
11
+ date: 2019-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake