slaw 6.2.0 → 7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eccd929903562e49bbd2ed7d10cd54733d4adce9e304aa94009e7c2ec8876b9a
4
- data.tar.gz: ad3e092d320e446fb14c24b78ac85041da8f76c19c783ba559cee413f52d1b7e
3
+ metadata.gz: fde17ca3304eb910432a89b75fe777e9ce50cf1abed667d2bb7b2d673bc77aa0
4
+ data.tar.gz: 7102e2b19079e12bbf89c783aed99a48b9cd645f9dac396b0b68061279e86174
5
5
  SHA512:
6
- metadata.gz: 2cd345f3906a9fa7742e7e57e631ef39e50c449e7f80beebd891c51a8053acbc2745b7ed7963d996494cf58478826d9161a57a25e3c0808f0d3a2f1a5bc924c6
7
- data.tar.gz: afd015ffd10e75e222907a02b7c5bcd1cb0535287a6618cf78afd4c18333705985c060c78e5564e7a228d1047b33680c680a4526a22e6649164db6e54335f92b
6
+ metadata.gz: c7740c01a12b46d138051b82de734a67806155f5166c2c0c56a9aab1d7d5fc8e79526260bc4236310cd88215dd742ce3beabb298288c086f5a39111375d825ff
7
+ data.tar.gz: 219658ca25c23b52ce5f7ae499728a8e183b488db3f03477cb726d5f88f7ec290faf26a02727c8eb705f21ea85866f64d3e437799b0cafdb53fb3a087fd80144
data/README.md CHANGED
@@ -81,6 +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
+ ### 7.0.0 (31 Jan 2020)
85
+
86
+ * Lists ids are now numbered sequentially, rather than by tree position
87
+ * New Slaw::Grammars::Counters helper module
88
+
84
89
  ### 6.2.0 (15 Jan 2020)
85
90
 
86
91
  * Better support for ol, ul and li when importing from HTML
@@ -0,0 +1,27 @@
1
+ module Slaw
2
+ module Grammars
3
+ class Counters
4
+ # Counters for generating element IDs. This is a hash from the element ID
5
+ # prefix, to another hash that maps the element type name to a count.
6
+ #
7
+ # For backwards compatibility, counters always start at -1, and must be
8
+ # incremented before being used. This ensures that element ids start at 0.
9
+ # This is NOT compatible with AKN 3.0 which requires that element numbers
10
+ # start at 1.
11
+ #
12
+ # eg.
13
+ #
14
+ # section-1 => paragraph => 2
15
+ #
16
+ @@counters = Hash.new{ |h, k| h[k] = Hash.new(-1) }
17
+
18
+ def self.counters
19
+ @@counters
20
+ end
21
+
22
+ def self.reset!
23
+ @@counters.clear
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,4 +1,5 @@
1
1
  require 'slaw/grammars/core_nodes'
2
+ require 'slaw/grammars/counters'
2
3
 
3
4
  module Slaw
4
5
  module Grammars
@@ -281,16 +282,9 @@ module Slaw
281
282
  end
282
283
 
283
284
  class BlockElements < Treetop::Runtime::SyntaxNode
284
- @@counters = {}
285
-
286
- def self.counters
287
- @@counters
288
- end
289
-
290
285
  def to_xml(b, idprefix='', i=0)
291
- @@counters[idprefix] ||= -1
292
- @@counters[idprefix] += 1
293
- id = "#{idprefix}paragraph#{@@counters[idprefix]}"
286
+ cnt = Slaw::Grammars::Counters.counters[idprefix]['paragraph'] += 1
287
+ id = "#{idprefix}paragraph#{cnt}"
294
288
  idprefix = "#{id}."
295
289
 
296
290
  b.paragraph(id: id) { |b|
@@ -321,7 +315,8 @@ module Slaw
321
315
  # Render a block list to xml. If a block is given,
322
316
  # yield to it a builder to insert a listIntroduction node
323
317
  def to_xml(b, idprefix, i=0, &block)
324
- id = idprefix + "list#{i}"
318
+ cnt = Slaw::Grammars::Counters.counters[idprefix]['list'] += 1
319
+ id = idprefix + "list#{cnt}"
325
320
  idprefix = id + '.'
326
321
 
327
322
  b.blockList(id: id, renest: true) { |b|
@@ -348,16 +343,9 @@ module Slaw
348
343
  end
349
344
 
350
345
  class Crossheading < Treetop::Runtime::SyntaxNode
351
- @@counters = {}
352
-
353
- def self.counters
354
- @@counters
355
- end
356
-
357
346
  def to_xml(b, idprefix, i=0)
358
- @@counters[idprefix] ||= -1
359
- @@counters[idprefix] += 1
360
- id = "#{idprefix}crossheading-#{@@counters[idprefix]}"
347
+ cnt = Slaw::Grammars::Counters.counters[idprefix]['crossheading'] += 1
348
+ id = "#{idprefix}crossheading-#{cnt}"
361
349
 
362
350
  b.hcontainer(id: id, name: 'crossheading') { |b|
363
351
  b.heading { |b|
data/lib/slaw/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Slaw
2
- VERSION = "6.2.0"
2
+ VERSION = "7.0.0"
3
3
  end
@@ -29,8 +29,7 @@ describe Slaw::ActGenerator do
29
29
  end
30
30
 
31
31
  before(:each) do
32
- Slaw::Grammars::ZA::Act::Crossheading.counters.clear
33
- Slaw::Grammars::ZA::Act::BlockElements.counters.clear
32
+ Slaw::Grammars::Counters.reset!
34
33
  end
35
34
 
36
35
  #-------------------------------------------------------------------------------
@@ -85,12 +84,12 @@ EOS
85
84
  <paragraph id="paragraph0">
86
85
  <content>
87
86
  <p>Some content before the section</p>
88
- <blockList id="paragraph0.list1" renest="true">
89
- <item id="paragraph0.list1.a">
87
+ <blockList id="paragraph0.list0" renest="true">
88
+ <item id="paragraph0.list0.a">
90
89
  <num>(a)</num>
91
90
  <p>foo</p>
92
91
  </item>
93
- <item id="paragraph0.list1.b">
92
+ <item id="paragraph0.list0.b">
94
93
  <num>(b)</num>
95
94
  <p>bar</p>
96
95
  </item>
@@ -778,20 +777,20 @@ EOS
778
777
  <num>(2)</num>
779
778
  <content>
780
779
  <p>title</p>
781
- <blockList id="2.list1" renest="true">
782
- <item id="2.list1.a">
780
+ <blockList id="2.list0" renest="true">
781
+ <item id="2.list0.a">
783
782
  <num>(a)</num>
784
783
  <p>one</p>
785
784
  </item>
786
- <item id="2.list1.b">
785
+ <item id="2.list0.b">
787
786
  <num>(b)</num>
788
787
  <p>two</p>
789
788
  </item>
790
- <item id="2.list1.c">
789
+ <item id="2.list0.c">
791
790
  <num>(c)</num>
792
791
  <p>three</p>
793
792
  </item>
794
- <item id="2.list1.i">
793
+ <item id="2.list0.i">
795
794
  <num>(i)</num>
796
795
  <p>four</p>
797
796
  </item>
@@ -902,20 +901,20 @@ EOS
902
901
  <num>(1)</num>
903
902
  <content>
904
903
  <p>here\'s my really cool list,</p>
905
- <blockList id="1.list1" renest="true">
906
- <item id="1.list1.a">
904
+ <blockList id="1.list0" renest="true">
905
+ <item id="1.list0.a">
907
906
  <num>(a)</num>
908
907
  <p>one</p>
909
908
  </item>
910
- <item id="1.list1.b">
909
+ <item id="1.list0.b">
911
910
  <num>(b)</num>
912
911
  <p/>
913
912
  </item>
914
- <item id="1.list1.i">
913
+ <item id="1.list0.i">
915
914
  <num>(i)</num>
916
915
  <p>single</p>
917
916
  </item>
918
- <item id="1.list1.ii">
917
+ <item id="1.list0.ii">
919
918
  <num>(ii)</num>
920
919
  <p>double</p>
921
920
  </item>
@@ -936,20 +935,20 @@ EOS
936
935
  <num>(1)</num>
937
936
  <content>
938
937
  <p>here\'s my really cool list,</p>
939
- <blockList id="1.list1" renest="true">
940
- <item id="1.list1.a">
938
+ <blockList id="1.list0" renest="true">
939
+ <item id="1.list0.a">
941
940
  <num>(a)</num>
942
941
  <p/>
943
942
  </item>
944
- <item id="1.list1.b">
943
+ <item id="1.list0.b">
945
944
  <num>(b)</num>
946
945
  <p/>
947
946
  </item>
948
- <item id="1.list1.i">
947
+ <item id="1.list0.i">
949
948
  <num>(i)</num>
950
949
  <p>single</p>
951
950
  </item>
952
- <item id="1.list1.ii">
951
+ <item id="1.list0.ii">
953
952
  <num>(ii)</num>
954
953
  <p>double</p>
955
954
  </item>
@@ -978,16 +977,16 @@ EOS
978
977
  <num>9.9</num>
979
978
  <content>
980
979
  <p>foo</p>
981
- <blockList id="9.9.list1" renest="true">
982
- <item id="9.9.list1.9.9.1">
980
+ <blockList id="9.9.list0" renest="true">
981
+ <item id="9.9.list0.9.9.1">
983
982
  <num>9.9.1</num>
984
983
  <p>item1</p>
985
984
  </item>
986
- <item id="9.9.list1.9.9.2">
985
+ <item id="9.9.list0.9.9.2">
987
986
  <num>9.9.2</num>
988
987
  <p>item2</p>
989
988
  </item>
990
- <item id="9.9.list1.9.9.2.1">
989
+ <item id="9.9.list0.9.9.2.1">
991
990
  <num>9.9.2.1</num>
992
991
  <p>item3</p>
993
992
  </item>
@@ -1012,23 +1011,23 @@ EOS
1012
1011
  <num>(1)</num>
1013
1012
  <content>
1014
1013
  <p>a list</p>
1015
- <blockList id="1.list1" renest="true">
1016
- <item id="1.list1.a">
1014
+ <blockList id="1.list0" renest="true">
1015
+ <item id="1.list0.a">
1017
1016
  <num>(a)</num>
1018
1017
  <p>item 1</p>
1019
1018
  </item>
1020
- <item id="1.list1.b">
1019
+ <item id="1.list0.b">
1021
1020
  <num>(b)</num>
1022
1021
  <p>item 2</p>
1023
1022
  </item>
1024
1023
  </blockList>
1025
1024
  <p>some text</p>
1026
- <blockList id="1.list3" renest="true">
1027
- <item id="1.list3.c">
1025
+ <blockList id="1.list1" renest="true">
1026
+ <item id="1.list1.c">
1028
1027
  <num>(c)</num>
1029
1028
  <p>item 3</p>
1030
1029
  </item>
1031
- <item id="1.list3.d">
1030
+ <item id="1.list1.d">
1032
1031
  <num>(d)</num>
1033
1032
  <p>item 4</p>
1034
1033
  </item>
@@ -1615,12 +1614,12 @@ EOS
1615
1614
  <paragraph id="section-1.paragraph0">
1616
1615
  <content>
1617
1616
  <p>naked statement (c) blah</p>
1618
- <blockList id="section-1.paragraph0.list1" renest="true">
1619
- <item id="section-1.paragraph0.list1.a">
1617
+ <blockList id="section-1.paragraph0.list0" renest="true">
1618
+ <item id="section-1.paragraph0.list0.a">
1620
1619
  <num>(a)</num>
1621
1620
  <p>foo</p>
1622
1621
  </item>
1623
- <item id="section-1.paragraph0.list1.b">
1622
+ <item id="section-1.paragraph0.list0.b">
1624
1623
  <num>(b)</num>
1625
1624
  <p>bar</p>
1626
1625
  </item>
@@ -1657,12 +1656,12 @@ EOS
1657
1656
  <num>(2)</num>
1658
1657
  <content>
1659
1658
  <p>Schedule 1</p>
1660
- <blockList id="section-1.2.list1" renest="true">
1661
- <item id="section-1.2.list1.a">
1659
+ <blockList id="section-1.2.list0" renest="true">
1660
+ <item id="section-1.2.list0.a">
1662
1661
  <num>(a)</num>
1663
1662
  <p>Part 1</p>
1664
1663
  </item>
1665
- <item id="section-1.2.list1.b">
1664
+ <item id="section-1.2.list0.b">
1666
1665
  <num>(b)</num>
1667
1666
  <p>thing</p>
1668
1667
  </item>
@@ -1729,12 +1728,12 @@ EOS
1729
1728
  <num>3.1</num>
1730
1729
  <content>
1731
1730
  <p>Informal trading may include, amongst others:-</p>
1732
- <blockList id="section-3.3.1.list1" renest="true">
1733
- <item id="section-3.3.1.list1.3.1.1">
1731
+ <blockList id="section-3.3.1.list0" renest="true">
1732
+ <item id="section-3.3.1.list0.3.1.1">
1734
1733
  <num>3.1.1</num>
1735
1734
  <p>street trading;</p>
1736
1735
  </item>
1737
- <item id="section-3.3.1.list1.3.1.2">
1736
+ <item id="section-3.3.1.list0.3.1.2">
1738
1737
  <num>3.1.2</num>
1739
1738
  <p>trading in pedestrian malls;</p>
1740
1739
  </item>
@@ -29,8 +29,7 @@ describe Slaw::ActGenerator do
29
29
  end
30
30
 
31
31
  before(:each) do
32
- Slaw::Grammars::ZA::Act::Crossheading.counters.clear
33
- Slaw::Grammars::ZA::Act::BlockElements.counters.clear
32
+ Slaw::Grammars::Counters.reset!
34
33
  end
35
34
 
36
35
  #-------------------------------------------------------------------------------
@@ -146,8 +145,8 @@ EOS
146
145
  <num>(1)</num>
147
146
  <content>
148
147
  <p>something</p>
149
- <blockList id="section-1.1.list1" renest="true">
150
- <item id="section-1.1.list1.a">
148
+ <blockList id="section-1.1.list0" renest="true">
149
+ <item id="section-1.1.list0.a">
151
150
  <num>(a)</num>
152
151
  <p>with a remark <remark status="editorial">[Section 1 amended by Act 23 of 2004]</remark></p>
153
152
  </item>
@@ -29,8 +29,7 @@ describe Slaw::ActGenerator do
29
29
  end
30
30
 
31
31
  before(:each) do
32
- Slaw::Grammars::ZA::Act::Crossheading.counters.clear
33
- Slaw::Grammars::ZA::Act::BlockElements.counters.clear
32
+ Slaw::Grammars::Counters.reset!
34
33
  end
35
34
 
36
35
  #-------------------------------------------------------------------------------
@@ -29,8 +29,7 @@ describe Slaw::ActGenerator do
29
29
  end
30
30
 
31
31
  before(:each) do
32
- Slaw::Grammars::ZA::Act::Crossheading.counters.clear
33
- Slaw::Grammars::ZA::Act::BlockElements.counters.clear
32
+ Slaw::Grammars::Counters.reset!
34
33
  end
35
34
 
36
35
  describe 'tables' do
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: 6.2.0
4
+ version: 7.0.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: 2020-01-15 00:00:00.000000000 Z
11
+ date: 2020-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -130,6 +130,7 @@ files:
130
130
  - lib/slaw/extract/html_to_akn_text.xsl
131
131
  - lib/slaw/generator.rb
132
132
  - lib/slaw/grammars/core_nodes.rb
133
+ - lib/slaw/grammars/counters.rb
133
134
  - lib/slaw/grammars/inlines.treetop
134
135
  - lib/slaw/grammars/inlines_nodes.rb
135
136
  - lib/slaw/grammars/schedules.treetop