slaw 8.0.1 → 9.0.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: 7cba3c62f1c3c2a16a04cec4cba4334c64160ec5e81e8e8163395040228d5988
4
- data.tar.gz: 7cd98967f6f401e38364fa6221ef2fba64f2f26c44439ffb17545a9f63193ada
3
+ metadata.gz: 6784c4dd73555dd25e51d2f2bc75e547a6c6b067f5c097695d70a00c9b2cedff
4
+ data.tar.gz: f8424f209e1f681fcb3ea3841b9af2f608a691fe3e929979c4f184b6fe558049
5
5
  SHA512:
6
- metadata.gz: 68e500d4147013ce4ad18b943eac052da23c5ef9d383b19f817d9ae6dad79d13aac1910a9e1e3f93e6e05f9fb133de82a8e482a7ec0aabf3dc010ff05725b007
7
- data.tar.gz: af4cd75b8da34a996ab3877d30e2262663eadd89fda74783bfe9a0219c7a0bdc4b83b993b4a958b705b4934f3e3557c5df457989b737f5f715d89570b6bd233d
6
+ metadata.gz: 0c3116bf7d489212f239a8b15ec2082141eb92c749109144b49071b4cce35775c1a9753c2117975ec7406b0d6a73d5c1e8ce9f82d213c8a83bf4140d658b5965
7
+ data.tar.gz: 74ec26e6b94f4417cb50187d0ec183c5b47b9fbf21119e4e814f1c7f57f729ade48440950d669b9cec9e60c355c0eb03eb9efecccdad42b8e11d4a05edb52dd3
data/README.md CHANGED
@@ -81,6 +81,10 @@ You can create your own grammar by creating a gem that provides these files and
81
81
 
82
82
  ## Changelog
83
83
 
84
+ ### 9.0.0 (17 Mar 2020)
85
+
86
+ * Support SUBPART
87
+
84
88
  ### 8.0.1 (26 Feb 2020)
85
89
 
86
90
  * Fix bug with id prefix on schedules container
@@ -44,37 +44,43 @@ module Slaw
44
44
 
45
45
  rule body
46
46
  ('BODY' space? eol)?
47
- children:(chapter / part / section / subsection / generic_container)* <Body>
47
+ children:(chapter / part / subpart / section / subsection / generic_container)* <Body>
48
48
  end
49
49
 
50
50
  # chapter (parts allowed)
51
51
  rule chapter
52
52
  heading:chapter_heading
53
- children:(part_no_chapter / section / subsection / generic_container)*
53
+ children:(part_no_chapter / subpart / section / subsection / generic_container)*
54
54
  <Chapter>
55
55
  end
56
56
 
57
57
  # part (chapters allowed)
58
58
  rule part
59
59
  heading:part_heading
60
- children:(chapter_no_part / section / subsection / generic_container)*
60
+ children:(chapter_no_part / subpart / section / subsection / generic_container)*
61
61
  <Part>
62
62
  end
63
63
 
64
64
  # part (no chapters)
65
65
  rule part_no_chapter
66
66
  heading:part_heading
67
- children:(section / subsection / generic_container)*
67
+ children:(subpart / section / subsection / generic_container)*
68
68
  <Part>
69
69
  end
70
70
 
71
71
  # chapter (no parts)
72
72
  rule chapter_no_part
73
73
  heading:chapter_heading
74
- children:(section / subsection / generic_container)*
74
+ children:(subpart / section / subsection / generic_container)*
75
75
  <Chapter>
76
76
  end
77
77
 
78
+ rule subpart
79
+ heading:subpart_heading
80
+ children:(section / subsection / generic_container)*
81
+ <Subpart>
82
+ end
83
+
78
84
  rule section
79
85
  section_title
80
86
  children:(subsection / generic_container)* <Section>
@@ -134,6 +140,10 @@ module Slaw
134
140
  children:part_no_chapter+ <GroupNode>
135
141
  end
136
142
 
143
+ rule subparts
144
+ children:subpart+ <GroupNode>
145
+ end
146
+
137
147
  rule sections
138
148
  children:section+ <GroupNode>
139
149
  end
@@ -151,6 +161,11 @@ module Slaw
151
161
  <PartHeading>
152
162
  end
153
163
 
164
+ rule subpart_heading
165
+ space? subpart_heading_prefix heading:(newline? space? inline_items)? eol
166
+ <SubpartHeading>
167
+ end
168
+
154
169
  rule section_title
155
170
  section_title_1 / section_1_title
156
171
  end
@@ -241,6 +256,10 @@ module Slaw
241
256
  'part'i space alphanums [ :-]*
242
257
  end
243
258
 
259
+ rule subpart_heading_prefix
260
+ 'subpart'i space alphanums [ :-]*
261
+ end
262
+
244
263
  rule chapter_heading_prefix
245
264
  'chapter'i space alphanums [ :-]*
246
265
  end
@@ -275,12 +294,12 @@ module Slaw
275
294
 
276
295
  rule body_hierarchy_prefix
277
296
  # Text that indicates the start of a hierarchy element, in the body
278
- chapter_heading / part_heading / section_title / schedule_title / subsection_prefix / crossheading
297
+ chapter_heading / part_heading / subpart_heading / section_title / schedule_title / subsection_prefix / crossheading
279
298
  end
280
299
 
281
300
  rule non_body_hierarchy_prefix
282
301
  # Text that indicates the start of a hierarchy element, in the preamble or preface
283
- chapter_heading / part_heading / section_title / schedule_title / crossheading
302
+ chapter_heading / part_heading / subpart_heading / section_title / schedule_title / crossheading
284
303
  end
285
304
 
286
305
  include Slaw::Grammars::Inlines
@@ -162,6 +162,36 @@ module Slaw
162
162
  end
163
163
  end
164
164
 
165
+ class Subpart < Treetop::Runtime::SyntaxNode
166
+ def num
167
+ heading.num
168
+ end
169
+
170
+ def to_xml(b, id_prefix='', *args)
171
+ id = id_prefix + "subpart-#{num}"
172
+
173
+ b.subpart(id: id) { |b|
174
+ heading.to_xml(b)
175
+ children.elements.each_with_index { |e, i| e.to_xml(b, id + '.', i) }
176
+ }
177
+ end
178
+ end
179
+
180
+ class SubpartHeading < Treetop::Runtime::SyntaxNode
181
+ def num
182
+ subpart_heading_prefix.alphanums.text_value
183
+ end
184
+
185
+ def to_xml(b)
186
+ b.num(num)
187
+ if heading.respond_to? :inline_items
188
+ b.heading { |b|
189
+ heading.inline_items.to_xml(b)
190
+ }
191
+ end
192
+ end
193
+ end
194
+
165
195
  class Chapter < Treetop::Runtime::SyntaxNode
166
196
  def num
167
197
  heading.num
@@ -23,6 +23,7 @@
23
23
  $prefix = 'PREFACE' or
24
24
  starts-with($prefix, 'CHAPTER ') or
25
25
  starts-with($prefix, 'PART ') or
26
+ starts-with($prefix, 'SUBPART ') or
26
27
  starts-with($prefix, 'SCHEDULE ') or
27
28
  starts-with($prefix, 'HEADING ') or
28
29
  starts-with($prefix, 'SUBHEADING ') or
@@ -74,6 +75,16 @@
74
75
  <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
75
76
  </xsl:template>
76
77
 
78
+ <xsl:template match="a:subpart">
79
+ <xsl:text>Subpart </xsl:text>
80
+ <xsl:value-of select="a:num" />
81
+ <xsl:text> - </xsl:text>
82
+ <xsl:apply-templates select="a:heading" />
83
+ <xsl:text>&#10;&#10;</xsl:text>
84
+
85
+ <xsl:apply-templates select="./*[not(self::a:num) and not(self::a:heading)]" />
86
+ </xsl:template>
87
+
77
88
  <xsl:template match="a:chapter">
78
89
  <xsl:text>Chapter </xsl:text>
79
90
  <xsl:value-of select="a:num" />
@@ -1,3 +1,3 @@
1
1
  module Slaw
2
- VERSION = "8.0.1"
2
+ VERSION = "9.0.0"
3
3
  end
@@ -755,6 +755,81 @@ EOS
755
755
  end
756
756
  end
757
757
 
758
+ #-------------------------------------------------------------------------------
759
+ # Subparts
760
+
761
+ describe 'subparts' do
762
+ it 'should handle subparts' do
763
+ node = parse :subpart, <<EOS
764
+ SUBPART 2 - Heading
765
+
766
+ 1. Section
767
+ Hello there
768
+ EOS
769
+ to_xml(node).should == '<subpart id="subpart-2">
770
+ <num>2</num>
771
+ <heading>Heading</heading>
772
+ <section id="section-1">
773
+ <num>1.</num>
774
+ <heading>Section</heading>
775
+ <paragraph id="section-1.paragraph0">
776
+ <content>
777
+ <p>Hello there</p>
778
+ </content>
779
+ </paragraph>
780
+ </section>
781
+ </subpart>'
782
+ end
783
+
784
+ it 'should handle subparts in parts' do
785
+ node = parse :part, <<EOS
786
+ PART A - The Part
787
+
788
+ SUBPART 1 - The Subpart 1
789
+
790
+ 1. Section
791
+
792
+ Hello
793
+
794
+ SUBPART 2 - The Subpart 2
795
+
796
+ 2. Section
797
+
798
+ Bye
799
+ EOS
800
+ to_xml(node).should == '<part id="part-A">
801
+ <num>A</num>
802
+ <heading>The Part</heading>
803
+ <subpart id="part-A.subpart-1">
804
+ <num>1</num>
805
+ <heading>The Subpart 1</heading>
806
+ <section id="section-1">
807
+ <num>1.</num>
808
+ <heading>Section</heading>
809
+ <paragraph id="section-1.paragraph0">
810
+ <content>
811
+ <p>Hello</p>
812
+ </content>
813
+ </paragraph>
814
+ </section>
815
+ </subpart>
816
+ <subpart id="part-A.subpart-2">
817
+ <num>2</num>
818
+ <heading>The Subpart 2</heading>
819
+ <section id="section-2">
820
+ <num>2.</num>
821
+ <heading>Section</heading>
822
+ <paragraph id="section-2.paragraph0">
823
+ <content>
824
+ <p>Bye</p>
825
+ </content>
826
+ </paragraph>
827
+ </section>
828
+ </subpart>
829
+ </part>'
830
+ end
831
+ end
832
+
758
833
  #-------------------------------------------------------------------------------
759
834
  # Subsections
760
835
 
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: 8.0.1
4
+ version: 9.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-02-26 00:00:00.000000000 Z
11
+ date: 2020-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake