slaw 0.7.1 → 0.7.2
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/README.md +11 -0
- data/bin/slaw +13 -0
- data/lib/slaw/generator.rb +19 -0
- data/lib/slaw/version.rb +1 -1
- data/lib/slaw/za/act.treetop +2 -2
- data/spec/generator_spec.rb +41 -0
- data/spec/za/act_spec.rb +34 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9da16bde12dc6832dbf6772de7205268e7ebe3d2
|
4
|
+
data.tar.gz: 74eb889730d1be5cf02a656f410cf66f7878fa50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5b5d462affc8dc8e2a39fffee9c6612f1755746a9c5c3c31b654515f9062dd060ef0f9aebc383dd92e1799db583bac41ccb72abc0bdeaec3e44051f54fd9932
|
7
|
+
data.tar.gz: d06d15f2768bd2abb2aae5ca2919975d55e75acde2e4c256099c96e75aac84b01cb43832db2146836be9c864a945045100778c8897f901c0eb54a434d8626c37
|
data/README.md
CHANGED
@@ -213,3 +213,14 @@ Akoma Ntoso `component` elements at the end of the XML document, with a name of
|
|
213
213
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
214
214
|
4. Push to the branch (`git push origin my-new-feature`)
|
215
215
|
5. Create new Pull Request
|
216
|
+
|
217
|
+
## Changelog
|
218
|
+
|
219
|
+
### 0.7.2
|
220
|
+
|
221
|
+
* add --section-number-position argument to slaw command
|
222
|
+
* grammar supports empty chapters and parts
|
223
|
+
|
224
|
+
### 0.7.1
|
225
|
+
|
226
|
+
* major changes to grammar to permit chapters, parts, sections etc. in schedules
|
data/bin/slaw
CHANGED
@@ -14,6 +14,7 @@ class SlawCLI < Thor
|
|
14
14
|
option :definitions, type: :boolean, desc: "Find and link definitions (this can be slow). Default: false"
|
15
15
|
option :fragment, type: :string, desc: "Akoma Ntoso element name that the imported text represents. Support depends on the grammar."
|
16
16
|
option :id_prefix, type: :string, desc: "Prefix to be used when generating ID elements when parsing a fragment."
|
17
|
+
option :section_number_position, enum: ['before-title', 'after-title', 'guess'], desc: "Where do section titles come in relation to the section number? Default: before-title"
|
17
18
|
def parse(name)
|
18
19
|
logging
|
19
20
|
|
@@ -56,6 +57,18 @@ class SlawCLI < Thor
|
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
60
|
+
case (options[:section_number_position] || "before-title")
|
61
|
+
when "before-title"
|
62
|
+
generator.parser.options[:section_number_after_title] = false
|
63
|
+
when "after-title"
|
64
|
+
generator.parser.options[:section_number_after_title] = true
|
65
|
+
when "guess"
|
66
|
+
after = generator.guess_section_number_after_title(text)
|
67
|
+
error "guessed section number position is #{after ? "after-title" : "before-title"}"
|
68
|
+
|
69
|
+
generator.parser.options[:section_number_after_title] = after
|
70
|
+
end
|
71
|
+
|
59
72
|
begin
|
60
73
|
act = generator.generate_from_text(text)
|
61
74
|
rescue Slaw::Parse::ParseError => e
|
data/lib/slaw/generator.rb
CHANGED
@@ -35,5 +35,24 @@ module Slaw
|
|
35
35
|
text = @cleanser.reformat(text)
|
36
36
|
text
|
37
37
|
end
|
38
|
+
|
39
|
+
# Try to determine if section numbers come after titles,
|
40
|
+
# rather than before.
|
41
|
+
#
|
42
|
+
# eg:
|
43
|
+
#
|
44
|
+
# Section title
|
45
|
+
# 1. Section content
|
46
|
+
#
|
47
|
+
# versus
|
48
|
+
#
|
49
|
+
# 1. Section title
|
50
|
+
# Section content
|
51
|
+
def guess_section_number_after_title(text)
|
52
|
+
before = text.scan(/^\w{4,}[^\n]+\n\d+\. /).length
|
53
|
+
after = text.scan(/^\s*\n\d+\. \w{4,}/).length
|
54
|
+
|
55
|
+
before > after * 1.25
|
56
|
+
end
|
38
57
|
end
|
39
58
|
end
|
data/lib/slaw/version.rb
CHANGED
data/lib/slaw/za/act.treetop
CHANGED
@@ -36,13 +36,13 @@ module Slaw
|
|
36
36
|
|
37
37
|
rule chapter
|
38
38
|
heading:chapter_heading
|
39
|
-
children:(part / section / block_paragraphs / subsection)
|
39
|
+
children:(part / section / block_paragraphs / subsection)*
|
40
40
|
<Chapter>
|
41
41
|
end
|
42
42
|
|
43
43
|
rule part
|
44
44
|
heading:part_heading
|
45
|
-
children:(section / block_paragraphs / subsection)
|
45
|
+
children:(section / block_paragraphs / subsection)*
|
46
46
|
<Part>
|
47
47
|
end
|
48
48
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'slaw'
|
5
|
+
|
6
|
+
describe Slaw::ActGenerator do
|
7
|
+
describe 'guess_section_number_after_title' do
|
8
|
+
context 'section number after title' do
|
9
|
+
it 'should work' do
|
10
|
+
text = "
|
11
|
+
Section title
|
12
|
+
1. Section content
|
13
|
+
|
14
|
+
Another section title
|
15
|
+
2. Section content that is long.
|
16
|
+
"
|
17
|
+
subject.guess_section_number_after_title(text).should be_true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'section number before title' do
|
22
|
+
it 'should default to false' do
|
23
|
+
subject.guess_section_number_after_title("").should be_false
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should be false' do
|
27
|
+
text = "
|
28
|
+
Mistaken title
|
29
|
+
1. Section title
|
30
|
+
|
31
|
+
Some content.
|
32
|
+
|
33
|
+
2. Second title
|
34
|
+
|
35
|
+
Some content.
|
36
|
+
"
|
37
|
+
subject.guess_section_number_after_title(text).should be_false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/za/act_spec.rb
CHANGED
@@ -215,6 +215,23 @@ EOS
|
|
215
215
|
</section>
|
216
216
|
</chapter>'
|
217
217
|
end
|
218
|
+
|
219
|
+
it 'should handle empty chapters' do
|
220
|
+
node = parse :body, <<EOS
|
221
|
+
Chapter 2 The Chapter Heading
|
222
|
+
Chapter 3 The Other Heading
|
223
|
+
EOS
|
224
|
+
to_xml(node).should == '<body>
|
225
|
+
<chapter id="chapter-2">
|
226
|
+
<num>2</num>
|
227
|
+
<heading>The Chapter Heading</heading>
|
228
|
+
</chapter>
|
229
|
+
<chapter id="chapter-3">
|
230
|
+
<num>3</num>
|
231
|
+
<heading>The Other Heading</heading>
|
232
|
+
</chapter>
|
233
|
+
</body>'
|
234
|
+
end
|
218
235
|
end
|
219
236
|
|
220
237
|
#-------------------------------------------------------------------------------
|
@@ -382,6 +399,23 @@ EOS
|
|
382
399
|
</section>
|
383
400
|
</part>'
|
384
401
|
end
|
402
|
+
|
403
|
+
it 'should handle empty parts' do
|
404
|
+
node = parse :body, <<EOS
|
405
|
+
Part 2 The Part Heading
|
406
|
+
Part 3 The Other Heading
|
407
|
+
EOS
|
408
|
+
to_xml(node).should == '<body>
|
409
|
+
<part id="part-2">
|
410
|
+
<num>2</num>
|
411
|
+
<heading>The Part Heading</heading>
|
412
|
+
</part>
|
413
|
+
<part id="part-3">
|
414
|
+
<num>3</num>
|
415
|
+
<heading>The Other Heading</heading>
|
416
|
+
</part>
|
417
|
+
</body>'
|
418
|
+
end
|
385
419
|
end
|
386
420
|
|
387
421
|
#-------------------------------------------------------------------------------
|
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: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Kempe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -196,6 +196,7 @@ files:
|
|
196
196
|
- spec/bylaw_spec.rb
|
197
197
|
- spec/extract/extractor_spec.rb
|
198
198
|
- spec/fixtures/community-fire-safety.xml
|
199
|
+
- spec/generator_spec.rb
|
199
200
|
- spec/parse/builder_spec.rb
|
200
201
|
- spec/parse/cleanser_spec.rb
|
201
202
|
- spec/spec_helper.rb
|
@@ -230,6 +231,7 @@ test_files:
|
|
230
231
|
- spec/bylaw_spec.rb
|
231
232
|
- spec/extract/extractor_spec.rb
|
232
233
|
- spec/fixtures/community-fire-safety.xml
|
234
|
+
- spec/generator_spec.rb
|
233
235
|
- spec/parse/builder_spec.rb
|
234
236
|
- spec/parse/cleanser_spec.rb
|
235
237
|
- spec/spec_helper.rb
|