govspeak 1.5.4 → 1.6.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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 1.6.0
2
+
3
+ * Add `$LegislativeList` to allow editors to insert lists with custom markers.
4
+
1
5
  ## 1.5.4
2
6
 
3
7
  * Stop steps list regex matching newline.
data/lib/govspeak.rb CHANGED
@@ -3,6 +3,7 @@ require 'govspeak/header_extractor'
3
3
  require 'govspeak/structured_header_extractor'
4
4
  require 'govspeak/html_validator'
5
5
  require 'govspeak/html_sanitizer'
6
+ require 'govspeak/kramdown_overrides'
6
7
  require 'kramdown/parser/kramdown_with_automatic_external_links'
7
8
  require 'htmlentities'
8
9
 
@@ -159,6 +160,16 @@ module Govspeak
159
160
  %{<div class="address"><div class="adr org fn"><p>\n#{body.sub("\n", "").gsub("\n", "<br />")}\n</p></div></div>\n}
160
161
  }
161
162
 
163
+ extension("legislative list", /\$LegislativeList\s*$(.*?)(?:^\s*$|\Z)/m) do |body|
164
+ Govspeak::KramdownOverrides.with_kramdown_ordered_lists_disabled do
165
+ Kramdown::Document.new(body.strip).to_html.tap do |doc|
166
+ doc.gsub!('<ul>', '<ol>')
167
+ doc.gsub!('</ul>', '</ol>')
168
+ doc.sub!('<ol>', '<ol class="legislative-list">')
169
+ end
170
+ end
171
+ end
172
+
162
173
  extension("numbered list", /^[ \t]*((s\d+\.\s.*(?:\n|$))+)/) do |body|
163
174
  steps ||= 0
164
175
  body.gsub!(/s(\d+)\.\s(.*)(?:\n|$)/) do |b|
@@ -0,0 +1,39 @@
1
+ module Govspeak
2
+ module KramdownOverrides
3
+ # This depends on two internal parts of Kramdown.
4
+ # 1. Parser registry (kramdown/parser/kramdown.rb#define_parser)
5
+ # 2. Kramdown list regexes (kramdown/parser/kramdown/list.rb)
6
+ # Updating the Kramdown gem therefore also means updating this file to to
7
+ # match Kramdown's internals.
8
+
9
+ def self.with_kramdown_ordered_lists_disabled
10
+ original_list_start = list_start
11
+ redefine_kramdown_const(:LIST_START, list_start_ul)
12
+ list_parser = kramdown_parsers.delete(:list)
13
+ Kramdown::Parser::Kramdown.define_parser(:list, list_start_ul)
14
+
15
+ yield
16
+ ensure
17
+ redefine_kramdown_const(:LIST_START, original_list_start)
18
+ kramdown_parsers[:list] = list_parser
19
+ end
20
+
21
+ private
22
+ def self.list_start
23
+ Kramdown::Parser::Kramdown::LIST_START
24
+ end
25
+
26
+ def self.list_start_ul
27
+ Kramdown::Parser::Kramdown::LIST_START_UL
28
+ end
29
+
30
+ def self.kramdown_parsers
31
+ Kramdown::Parser::Kramdown.class_variable_get("@@parsers")
32
+ end
33
+
34
+ def self.redefine_kramdown_const(const, value)
35
+ Kramdown::Parser::Kramdown.send(:remove_const, const)
36
+ Kramdown::Parser::Kramdown.send(:const_set, const, value)
37
+ end
38
+ end
39
+ end
@@ -1,3 +1,3 @@
1
1
  module Govspeak
2
- VERSION = "1.5.4"
2
+ VERSION = "1.6.0"
3
3
  end
@@ -396,6 +396,28 @@ $CTA
396
396
  assert_text_output "unordered list step list"
397
397
  end
398
398
 
399
+ test_given_govspeak "
400
+ $LegislativeList
401
+ * 1. The quick
402
+ * 2. Brown fox
403
+ * a) Jumps over
404
+ * b) The lazy
405
+ * 3. Dog
406
+ " do
407
+ assert_html_output %{
408
+ <ol class="legislative-list">
409
+ <li>1. The quick</li>
410
+ <li>2. Brown fox
411
+ <ol>
412
+ <li>a) Jumps over</li>
413
+ <li>b) The lazy</li>
414
+ </ol>
415
+ </li>
416
+ <li>3. Dog</li>
417
+ </ol>
418
+ }
419
+ end
420
+
399
421
  test_given_govspeak "
400
422
  Zippy, Bungle and George did not qualify for the tax exemption in s428. They filled in their tax return accordingly.
401
423
  " do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govspeak
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.4
4
+ version: 1.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-06-11 00:00:00.000000000 Z
13
+ date: 2014-06-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: kramdown
@@ -153,6 +153,7 @@ files:
153
153
  - lib/kramdown/parser/kramdown_with_automatic_external_links.rb
154
154
  - lib/govspeak.rb
155
155
  - lib/govspeak/html_validator.rb
156
+ - lib/govspeak/kramdown_overrides.rb
156
157
  - lib/govspeak/version.rb
157
158
  - lib/govspeak/html_sanitizer.rb
158
159
  - lib/govspeak/header_extractor.rb
@@ -181,7 +182,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
182
  version: '0'
182
183
  segments:
183
184
  - 0
184
- hash: 17277922338174539
185
+ hash: 3370036994273431811
185
186
  required_rubygems_version: !ruby/object:Gem::Requirement
186
187
  none: false
187
188
  requirements:
@@ -190,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
191
  version: '0'
191
192
  segments:
192
193
  - 0
193
- hash: 17277922338174539
194
+ hash: 3370036994273431811
194
195
  requirements: []
195
196
  rubyforge_project:
196
197
  rubygems_version: 1.8.23