jekyll-antex 0.3.2 → 0.4.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: '06739363162b9ec5b67dd702ec1f408a01071ddf5b96799f2dbc399d70be4ddc'
4
- data.tar.gz: 46564b16ae23c2e33e8cc4f9eea73db81a217de09674b17cd70db0e38068e8d2
3
+ metadata.gz: b8af04a4d3122b7e58926aed907120b7bef5e4d5cfb660be03c625f1e0ec48d4
4
+ data.tar.gz: 4066bd201baba8f6bdcf724f38ea8991eb011da58f1da13831d32547781ade9c
5
5
  SHA512:
6
- metadata.gz: 3e4558ba74f46c1b95e5888ec24c6a400ceb28349f6657fb2a8515ece96c00e67c27d98785e076261d2aca31093b75dbc446b436ac3e81bdbdea326161a6a965
7
- data.tar.gz: 178445b2a72d6955c0d5690006e31989c7d14f4b1cd26f0ae1827725516f69e17d27db8ac489dcc7e68a51a8cd4f2c77cc63d95e185bd10bd2fb31613adbed16
6
+ metadata.gz: 86ebce737fc0c681b040f329d46aee48198d528a25e0bab5bbbecebc5da5215fb5f462bd385a5f211e97063b45639feaf76cfa0343ac19ec7fd28ccf0091c530
7
+ data.tar.gz: 381bc28893d16e442f07567eddee15b08bab1eed15387eb4b3793dbc8e35949a61dcaa0d79e98b1716db5268762d99c6e91304c806a81e914eeaaf111658eee3
data/lib/jekyll/antex.rb CHANGED
@@ -4,11 +4,9 @@ require 'antex'
4
4
 
5
5
  require 'jekyll/antex/version'
6
6
  require 'jekyll/antex/error'
7
- require 'jekyll/antex/utils'
8
7
  require 'jekyll/antex/options'
9
8
  require 'jekyll/antex/guard'
10
- require 'jekyll/antex/guardian'
9
+ require 'jekyll/antex/stasher'
11
10
  require 'jekyll/antex/alias'
12
- require 'jekyll/antex/dealiaser'
13
11
  require 'jekyll/antex/generator'
14
12
  require 'jekyll/antex/block'
@@ -1,31 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'jekyll/antex/error'
4
- require 'jekyll/antex/utils'
5
4
 
6
5
  module Jekyll
7
6
  module Antex
8
- class Alias
9
- class InvalidRegexp < Error; end
7
+ class InvalidRegexp < Error; end
10
8
 
11
- attr_reader :priority, :regexp, :options
9
+ Alias = Struct.new(:priority, :regexp, :options, keyword_init: true) do
12
10
 
13
- def initialize(priority:, regexp:, options: {},
14
- multiline: false, extended: true)
15
- @priority = priority.to_i
16
- @regexp = Utils.build_regexp source: regexp,
17
- extended: extended,
18
- multiline: multiline
11
+ def initialize(*args)
12
+ super
19
13
  validate_regexp!
20
- @options = options.to_h
21
14
  end
22
15
 
23
16
  private
24
17
 
25
18
  def validate_regexp!
26
- return if @regexp.names.include? 'code'
19
+ return if regexp.names.include? 'code'
27
20
  raise InvalidRegexp, <<~MESSAGE
28
- The regexp #{@regexp.inspect} is missing the required named matching group "code".
21
+ The regexp #{regexp.inspect} is missing the required named matching group "code".
29
22
  MESSAGE
30
23
  end
31
24
  end
@@ -76,45 +76,40 @@ commands:
76
76
  guards:
77
77
  comment:
78
78
  priority: 1000
79
- multiline: true
80
- regexp: >
81
- <!---
79
+ regexp: !ruby/regexp |
80
+ /<!---
82
81
  .*?
83
- --->
82
+ --->/mx
84
83
  verbatim:
85
84
  priority: 100
86
- multiline: true
87
- regexp: >
88
- ```
85
+ regexp: !ruby/regexp |
86
+ /```
89
87
  .*?
90
- ```
88
+ ```/mx
91
89
  aliases:
92
90
  # 'internal' must have the highest priority;
93
91
  # it is the liquid tag all other aliases are rendered to.
94
92
  internal:
95
93
  priority: 1000
96
- multiline: true
97
- regexp: >
98
- {%\s*antex\s*(?<markup>.*?)%}
94
+ regexp: !ruby/regexp |
95
+ /{%\s*antex\s*(?<markup>.*?)%}
99
96
  (?<code>.*?)
100
- {%\s*endantex\s*%}
97
+ {%\s*endantex\s*%}/mx
101
98
  # 'default' is the standard generic purpose alias.
102
99
  # Since it can contain tikz pictures,
103
100
  # it must have higher priority than 'tikzpicture' alias.
104
101
  default:
105
102
  priority: 100
106
- multiline: true
107
- regexp: >
108
- {%\s*tex\s*(?<markup>.*?)%}
103
+ regexp: !ruby/regexp |
104
+ /{%\s*tex\s*(?<markup>.*?)%}
109
105
  (?<code>.*?)
110
- {%\s*endtex\s*%}
106
+ {%\s*endtex\s*%}/mx
111
107
  tikzpicture:
112
108
  priority: 90
113
- multiline: true
114
- regexp: >
115
- {%\s*tikz\s*(?<markup>.*?)%}
109
+ regexp: !ruby/regexp |
110
+ /{%\s*tikz\s*(?<markup>.*?)%}
116
111
  (?<code>.*?)
117
- {%\s*endtikz\s*%}
112
+ {%\s*endtikz\s*%}/mx
118
113
  options:
119
114
  prepend: '\\begin{tikzpicture}'
120
115
  append: '\\end{tikzpicture}'
@@ -123,19 +118,18 @@ aliases:
123
118
  # since the respective deliniters are double and single dollars.
124
119
  display_math:
125
120
  priority: 20
126
- multiline: true
127
- regexp: >
128
- \$\$
121
+ regexp: !ruby/regexp |
122
+ /\$\$
129
123
  (?<code>.*?)
130
- \$\$
124
+ \$\$/mx
131
125
  options:
132
126
  prepend: '$\\displaystyle'
133
127
  append: $
134
128
  classes: [antex, display]
135
129
  inline_math:
136
130
  priority: 10
137
- regexp: >
138
- \$(?<code>.*?)\$
131
+ regexp: !ruby/regexp |
132
+ /\$(?<code>.*?)\$/x
139
133
  options:
140
134
  prepend: $
141
135
  append: $
@@ -144,7 +138,7 @@ aliases:
144
138
  # to avoid interference with others aliases.
145
139
  inline_macro:
146
140
  priority: 0
147
- regexp: >
148
- (?<code>\\[A-z]+)
141
+ regexp: !ruby/regexp |
142
+ /(?<code>\\[A-z]+)/x
149
143
  options:
150
144
  classes: [antex, inline]
@@ -4,10 +4,12 @@ require 'jekyll'
4
4
  require 'jekyll/utils'
5
5
 
6
6
  require 'jekyll/antex/alias'
7
- require 'jekyll/antex/dealiaser'
8
-
9
7
  require 'jekyll/antex/guard'
10
- require 'jekyll/antex/guardian'
8
+ require 'jekyll/antex/stasher'
9
+ require 'jekyll/antex/options'
10
+
11
+ # NOTE: I'm pretty conflicted about this.
12
+ SafeYAML::OPTIONS[:whitelisted_tags].push('!ruby/regexp')
11
13
 
12
14
  module Jekyll
13
15
  module Antex
@@ -27,11 +29,13 @@ module Jekyll
27
29
 
28
30
  def dealias_resource_content!(site:, resource:)
29
31
  options = build_options site: site, resource: resource
30
- guardian = build_guardian options['guards']
31
- dealiaser = build_dealiaser options['aliases']
32
- resource.content = guardian.apply resource.content
33
- resource.content = dealiaser.parse resource.content
34
- resource.content = guardian.remove resource.content
32
+ guardian = Jekyll::Antex::Stasher.new(build_guards(options['guards']))
33
+ dealiaser = Jekyll::Antex::Stasher.new(build_aliases(options['aliases']))
34
+ resource.content = guardian.lift(resource.content)
35
+ resource.content = dealiaser.lift(resource.content)
36
+ dealiaser.bake(&self.class.method(:dealias_tag))
37
+ resource.content = dealiaser.drop(resource.content)
38
+ resource.content = guardian.drop(resource.content)
35
39
  end
36
40
 
37
41
  def build_options(site:, resource:)
@@ -40,18 +44,6 @@ module Jekyll
40
44
  resource.data['antex'] || {}
41
45
  end
42
46
 
43
- def build_guardian(guards_options_hash)
44
- guardian = Jekyll::Antex::Guardian.new
45
- guardian.add_guards build_guards(guards_options_hash)
46
- guardian
47
- end
48
-
49
- def build_dealiaser(aliases_options_hash)
50
- dealiaser = Jekyll::Antex::Dealiaser.new
51
- dealiaser.add_aliases build_aliases(aliases_options_hash)
52
- dealiaser
53
- end
54
-
55
47
  def build_guards(options_hash)
56
48
  options_hash.values.map do |args|
57
49
  Guard.new Jekyll::Utils.symbolize_hash_keys(args)
@@ -63,6 +55,13 @@ module Jekyll
63
55
  Alias.new Jekyll::Utils.symbolize_hash_keys(args)
64
56
  end
65
57
  end
58
+
59
+ def self.dealias_tag(match, matcher)
60
+ markup = YAML.safe_load match[:markup] if match.names.include?('markup')
61
+ markup = YAML.dump Options.build(matcher.options || {}, markup || {})
62
+ code = match['code']
63
+ "{% antex #{markup} %}#{code}{% endantex %}"
64
+ end
66
65
  end
67
66
  end
68
67
  end
@@ -1,19 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'jekyll/antex/utils'
4
-
5
3
  module Jekyll
6
4
  module Antex
7
- class Guard
8
- attr_reader :priority, :regexp
9
-
10
- def initialize(priority:, regexp:,
11
- multiline: false, extended: true)
12
- @priority = priority.to_i
13
- @regexp = Utils.build_regexp source: regexp,
14
- extended: extended,
15
- multiline: multiline
16
- end
17
- end
5
+ Guard = Struct.new(:priority, :regexp, keyword_init: true)
18
6
  end
19
7
  end
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaml'
4
-
5
- require 'liquid/drop'
6
- require 'jekyll/drops/drop'
7
4
  require 'jekyll/utils'
8
- # NOTE: not sure why/how utils require drops, though
9
5
 
10
6
  module Jekyll
11
7
  module Antex
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Jekyll
6
+ module Antex
7
+ class Stasher
8
+ attr_reader :matchers
9
+
10
+ def initialize(matchers)
11
+ @stash = []
12
+ @matchers = matchers
13
+ @matchers.sort_by!(&:priority)
14
+ @matchers.reverse!
15
+ end
16
+
17
+ def lift(input)
18
+ input.dup.tap do |output|
19
+ @matchers.each do |matcher|
20
+ output.gsub!(matcher.regexp) do
21
+ store(Regexp.last_match, matcher)
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ def bake
28
+ @stash.map! do |uuid, match, matcher|
29
+ replacement = yield match, matcher
30
+ [uuid, match, matcher, replacement]
31
+ end
32
+ end
33
+
34
+ def drop(input)
35
+ input.dup.tap do |output|
36
+ @stash.each do |uuid, match, _, replacement|
37
+ output.gsub!(uuid) { replacement || match.to_s }
38
+ end
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def store(match, matcher)
45
+ SecureRandom.uuid.tap do |uuid|
46
+ @stash.push([uuid, match, matcher, nil])
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Antex
5
- VERSION = '0.3.2'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-antex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paolo Brasolin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-04 00:00:00.000000000 Z
11
+ date: 2018-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '3.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '3.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: antex
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,84 +44,98 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '9.1'
47
+ version: '10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '9.1'
54
+ version: '10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.14'
61
+ version: '2'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.14'
68
+ version: '2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '4.7'
75
+ version: '4'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '4.7'
82
+ version: '4'
83
83
  - !ruby/object:Gem::Dependency
84
- name: simplecov
84
+ name: reek
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.15'
89
+ version: '4'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.15'
96
+ version: '4'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.6'
103
+ version: '3'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '3.6'
110
+ version: '3'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0.50'
117
+ version: '0.52'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.52'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.16'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '0.50'
138
+ version: '0.16'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: yard
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -148,14 +162,12 @@ files:
148
162
  - lib/jekyll/antex.rb
149
163
  - lib/jekyll/antex/alias.rb
150
164
  - lib/jekyll/antex/block.rb
151
- - lib/jekyll/antex/dealiaser.rb
152
165
  - lib/jekyll/antex/defaults.yml
153
166
  - lib/jekyll/antex/error.rb
154
167
  - lib/jekyll/antex/generator.rb
155
168
  - lib/jekyll/antex/guard.rb
156
- - lib/jekyll/antex/guardian.rb
157
169
  - lib/jekyll/antex/options.rb
158
- - lib/jekyll/antex/utils.rb
170
+ - lib/jekyll/antex/stasher.rb
159
171
  - lib/jekyll/antex/version.rb
160
172
  homepage: https://github.com/paolobrasolin/antex
161
173
  licenses:
@@ -169,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
181
  requirements:
170
182
  - - ">="
171
183
  - !ruby/object:Gem::Version
172
- version: '2.3'
184
+ version: '2.5'
173
185
  required_rubygems_version: !ruby/object:Gem::Requirement
174
186
  requirements:
175
187
  - - ">="
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'securerandom'
4
-
5
- require 'jekyll/antex/options'
6
-
7
- module Jekyll
8
- module Antex
9
- class Dealiaser
10
- attr_reader :aliases
11
-
12
- def initialize(tag: 'antex')
13
- @aliases = []
14
- @stash = {}
15
- @tag = tag
16
- end
17
-
18
- def add_aliases(aliases)
19
- @aliases.concat(aliases).sort_by!(&:priority).reverse!
20
- end
21
-
22
- def parse(content)
23
- @content = content.dup
24
- @stash = {}
25
- stash_aliases
26
- render_stashed_aliases_as_tags
27
- unstash_tags
28
- @content
29
- end
30
-
31
- private
32
-
33
- def stash_aliases
34
- @aliases.each do |aliaz|
35
- @content.gsub!(aliaz.regexp) do
36
- uuid = SecureRandom.uuid
37
- @stash.store uuid, match: Regexp.last_match, options: aliaz.options
38
- uuid
39
- end
40
- end
41
- end
42
-
43
- def render_stashed_aliases_as_tags
44
- @stash.each do |key, value|
45
- @stash[key] = render_matched_alias_as_tag(**value)
46
- end
47
- end
48
-
49
- def unstash_tags
50
- @stash.each do |uuid, rendered_tag|
51
- @content.gsub!(uuid) { rendered_tag }
52
- end
53
- end
54
-
55
- def render_matched_alias_as_tag(match:, options:)
56
- markup = YAML.safe_load match[:markup] if match.names.include?('markup')
57
- markup = YAML.dump Options.build(options || {}, markup || {})
58
- code = match['code']
59
- "{% #{@tag} #{markup} %}#{code}{% end#{@tag} %}"
60
- end
61
- end
62
- end
63
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'securerandom'
4
-
5
- module Jekyll
6
- module Antex
7
- class Guardian
8
- attr_reader :guards
9
-
10
- def initialize(tag: 'antex')
11
- @guards = []
12
- @stash = {}
13
- @tag = tag
14
- end
15
-
16
- def add_guards(guards)
17
- @guards.concat(guards).sort_by!(&:priority).reverse!
18
- end
19
-
20
- def apply(content)
21
- @content = content.dup
22
- @stash = {}
23
- stash_guards
24
- @content
25
- end
26
-
27
- def remove(content)
28
- @content = content.dup
29
- unstash_guards
30
- @content
31
- end
32
-
33
- private
34
-
35
- def stash_guards
36
- @guards.each do |guard|
37
- @content.gsub!(guard.regexp) do
38
- uuid = SecureRandom.uuid
39
- @stash.store uuid, Regexp.last_match.to_s
40
- uuid
41
- end
42
- end
43
- end
44
-
45
- def unstash_guards
46
- @stash.each do |uuid, guard_match|
47
- @content.gsub!(uuid) { guard_match }
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Antex
5
- module Utils
6
- def self.build_regexp(source:, extended:, multiline:)
7
- options = 0
8
- options |= Regexp::EXTENDED if extended
9
- options |= Regexp::MULTILINE if multiline
10
- Regexp.new source, options
11
- end
12
- end
13
- end
14
- end