jekyll-documents 0.7.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34e9456980c65a0eab294a17100d6de0bcf522bc3652afcadc3c2521c8c9d48b
4
- data.tar.gz: be4ff590ed8c3e251fb7c56a1e57a33e2650d60a63c44113bb2a4c48402fe906
3
+ metadata.gz: 884c3afc18e96312dcd25a2328f652ec8cb1417ad8ec26337b4aa4ee2f175517
4
+ data.tar.gz: 29e0d75b6b50c68acb124e0b31123cc85c3810789c39d562beb8da00c5c50a87
5
5
  SHA512:
6
- metadata.gz: 4c456c2e5ff0b55a6d51bc777770bed926b6cfa4c8a1393fda110f5d0a8d3e0e49af5c5399e1a0bdf2f4c8f5632e19ec8490975722842a5657b9f6e737c4412a
7
- data.tar.gz: 5ff47c4204e58ad1e49bd48cd146d4f51ccf44254f1244530b0fd39f8fa2b5817531cfa293409a3f6fbad7063bc3425599e2c1bf37d094b5dbb45bba5cc13dc8
6
+ metadata.gz: c50ee45d94b33d62b344dadda31c9cf865d8d175de1b00e7c7f92aaeb046f0cef7fec3835de627e68ec0ce9849d925b8fbacb3012be5a5face435822c173b9c3
7
+ data.tar.gz: 3a28dee0ff0b8078cac42e4097676a991496e8510a38518bd7d6ea013275f2f9f804b15b5f4ab46e846f6ab2a5eaa8e72dfd4a535ed8a1b9c7cf338671a64019
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.2] - 2026-09-09
4
+
5
+ ### Fixed
6
+ - Replaced polynomial-time Liquid tag option regexes with a shared linear-time parser
7
+
8
+ ## [0.7.1] - 2026-09-09
9
+
10
+ ### Changed
11
+ - Development dependencies now live in `Gemfile`; the gemspec declares runtime dependencies only
12
+ - Removed redundant transitive dependency pins and made `Gemfile` read the exact Ruby version from `.ruby-version`
13
+ - Refreshed compatible locked dependency versions and tracked `Gemfile.lock` for reproducible CI development environments
14
+ - Updated CI and release workflows to use `.ruby-version`
15
+
3
16
  ## [0.7.0] - 2026-09-05
4
17
 
5
18
  ### Added
@@ -31,13 +31,4 @@ Gem::Specification.new do |spec|
31
31
  spec.require_paths = ["lib"]
32
32
 
33
33
  spec.add_dependency "jekyll", ">= 4.4", "< 5.0"
34
-
35
- spec.add_development_dependency "bundler-audit", "~> 0.9"
36
- spec.add_development_dependency "plaintext", "~> 0.3"
37
- spec.add_development_dependency "rake", "~> 13.4"
38
- spec.add_development_dependency "rspec", "~> 3.13"
39
- spec.add_development_dependency "rubocop", "~> 1.90"
40
- spec.add_development_dependency "rubocop-performance", "~> 1.27"
41
- spec.add_development_dependency "simplecov", "~> 1.1"
42
- spec.add_development_dependency "yard", "~> 0.9"
43
34
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "strscan"
4
+
5
+ module Jekyll
6
+ module Documents
7
+ # Linear-time parser for Liquid tag markup key:value pairs.
8
+ # Replaces polynomial-redos-vulnerable regex scanning with
9
+ # anchored scans that advance through the input once.
10
+ module OptionsParser
11
+ module_function
12
+
13
+ def parse_options(markup)
14
+ scanner = StringScanner.new(markup.to_s)
15
+ options = {}
16
+
17
+ until scanner.eos?
18
+ scanner.skip(/\s+/)
19
+ break if scanner.eos?
20
+
21
+ key = scanner.scan(/\w+/)
22
+ unless key
23
+ scanner.getch
24
+ next
25
+ end
26
+
27
+ scanner.skip(/\s*/)
28
+ next unless scanner.scan(":")
29
+
30
+ scanner.skip(/\s*/)
31
+ value = if scanner.scan(/'([^']*)'/) || scanner.scan(/"([^"]*)"/)
32
+ scanner[1]
33
+ else
34
+ scanner.scan(/\S+/)
35
+ end
36
+ options[key] = value unless value.nil?
37
+ end
38
+
39
+ options
40
+ end
41
+ end
42
+ end
43
+ end
@@ -152,13 +152,7 @@ module Jekyll
152
152
  end
153
153
 
154
154
  def extract_options(text)
155
- options = {}
156
- text.to_s.scan(
157
- /(\w+)\s*:\s*(?:'([^']*)'|"([^"]*)"|([^\s]+))/
158
- ) do |key, single, double, bare|
159
- options[key] = single || double || bare
160
- end
161
- options
155
+ OptionsParser.parse_options(text)
162
156
  end
163
157
 
164
158
  def escape_html(value)
@@ -148,13 +148,7 @@ module Jekyll
148
148
  end
149
149
 
150
150
  def extract_options(text)
151
- options = {}
152
- text.to_s.scan(
153
- /(\w+)\s*:\s*(?:'([^']*)'|"([^"]*)"|([^\s]+))/
154
- ) do |key, single, double, bare|
155
- options[key] = single || double || bare
156
- end
157
- options
151
+ OptionsParser.parse_options(text)
158
152
  end
159
153
 
160
154
  def escape_html(value)
@@ -45,13 +45,7 @@ module Jekyll
45
45
 
46
46
  def parse_markup(markup)
47
47
  expression = markup.to_s.strip[/\A[^\s]+/]
48
- options = {}
49
- markup.to_s.scan(
50
- /(\w+)\s*:\s*(?:'([^']*)'|"([^"]*)"|([^\s]+))/
51
- ) do |key, single, double, bare|
52
- options[key] = single || double || bare
53
- end
54
- [expression, options]
48
+ [expression, OptionsParser.parse_options(markup)]
55
49
  end
56
50
 
57
51
  def escape_html(value)
@@ -46,19 +46,9 @@ module Jekyll
46
46
  })
47
47
  end
48
48
 
49
+ # supports: count:5 category:'referat'
49
50
  def parse_args(markup)
50
- # supports: count:5 category:'referat'
51
- args = {}
52
- # Safe: markup comes from Jekyll template authors (trusted), not end users
53
- # Runs only during static site generation, not on user requests
54
- markup.scan(/(\w+)\s*:\s*'([^']*)'|(\w+)\s*:\s*([^\s]+)/).each do |match|
55
- if match[0]
56
- args[match[0]] = match[1]
57
- else
58
- args[match[2]] = match[3]
59
- end
60
- end
61
- args
51
+ OptionsParser.parse_options(markup)
62
52
  end
63
53
  end
64
54
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Documents
5
- VERSION = "0.7.0"
5
+ VERSION = "0.7.2"
6
6
  end
7
7
  end
@@ -11,6 +11,7 @@ require_relative "jekyll/documents/text_extraction_manifest"
11
11
  require_relative "jekyll/documents/assets_generator"
12
12
  require_relative "jekyll/documents/json_index_generator"
13
13
  require_relative "jekyll/documents/layout_registrar"
14
+ require_relative "jekyll/documents/options_parser"
14
15
 
15
16
  # Liquid tag(s)
16
17
  require_relative "jekyll/documents/tags/latest_documents"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-documents
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Svend Gundestrup
@@ -29,118 +29,6 @@ dependencies:
29
29
  - - "<"
30
30
  - !ruby/object:Gem::Version
31
31
  version: '5.0'
32
- - !ruby/object:Gem::Dependency
33
- name: bundler-audit
34
- requirement: !ruby/object:Gem::Requirement
35
- requirements:
36
- - - "~>"
37
- - !ruby/object:Gem::Version
38
- version: '0.9'
39
- type: :development
40
- prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- requirements:
43
- - - "~>"
44
- - !ruby/object:Gem::Version
45
- version: '0.9'
46
- - !ruby/object:Gem::Dependency
47
- name: plaintext
48
- requirement: !ruby/object:Gem::Requirement
49
- requirements:
50
- - - "~>"
51
- - !ruby/object:Gem::Version
52
- version: '0.3'
53
- type: :development
54
- prerelease: false
55
- version_requirements: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '0.3'
60
- - !ruby/object:Gem::Dependency
61
- name: rake
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '13.4'
67
- type: :development
68
- prerelease: false
69
- version_requirements: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '13.4'
74
- - !ruby/object:Gem::Dependency
75
- name: rspec
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '3.13'
81
- type: :development
82
- prerelease: false
83
- version_requirements: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "~>"
86
- - !ruby/object:Gem::Version
87
- version: '3.13'
88
- - !ruby/object:Gem::Dependency
89
- name: rubocop
90
- requirement: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - "~>"
93
- - !ruby/object:Gem::Version
94
- version: '1.90'
95
- type: :development
96
- prerelease: false
97
- version_requirements: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '1.90'
102
- - !ruby/object:Gem::Dependency
103
- name: rubocop-performance
104
- requirement: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '1.27'
109
- type: :development
110
- prerelease: false
111
- version_requirements: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '1.27'
116
- - !ruby/object:Gem::Dependency
117
- name: simplecov
118
- requirement: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '1.1'
123
- type: :development
124
- prerelease: false
125
- version_requirements: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '1.1'
130
- - !ruby/object:Gem::Dependency
131
- name: yard
132
- requirement: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - "~>"
135
- - !ruby/object:Gem::Version
136
- version: '0.9'
137
- type: :development
138
- prerelease: false
139
- version_requirements: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - "~>"
142
- - !ruby/object:Gem::Version
143
- version: '0.9'
144
32
  description: A Jekyll plugin + theme that scans assets/documents/**, creates a collection
145
33
  item per file, adds metadata (title/date/category), outputs pages, generates a JSON
146
34
  index for Lunr, and integrates with jekyll-sitemap.
@@ -266,6 +154,7 @@ files:
266
154
  - lib/jekyll/documents/generator.rb
267
155
  - lib/jekyll/documents/json_index_generator.rb
268
156
  - lib/jekyll/documents/layout_registrar.rb
157
+ - lib/jekyll/documents/options_parser.rb
269
158
  - lib/jekyll/documents/tags/doc_category.rb
270
159
  - lib/jekyll/documents/tags/doc_link.rb
271
160
  - lib/jekyll/documents/tags/document_icon.rb