jekyll-spaceship 0.9.5 → 0.9.6

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: 0e8805ddd2b533ed9cff3add639bf6256a4763d2d20ce2d28653815f9001fe1e
4
- data.tar.gz: 12c392bd9f805b26d9d37a6b5803b50cb2cdfb2709db965dbf3cc53d79480feb
3
+ metadata.gz: 917f5191110c86af367498a90d9ad362185254fdfc30f54eeb48705159b72db7
4
+ data.tar.gz: 23e627f48d83363b2b473d2c080c98d327ddc51d982290209e218ff755a8920e
5
5
  SHA512:
6
- metadata.gz: 9c9c0b3600ae2654a40e133aef2d7e1a88be7b2bd2c83f86202e2e90f59b52642730346d8fefaed8580dad6412f20f2ff8dfe8d12787e964171b48ef5141c8cf
7
- data.tar.gz: 979ab9e4f574cba0f7efa8ec86125ffbe992760ce99a766014f98243d2a0c82eebedb69c56106d22016b29776c978bc4af6a63140d746a2eb2857cc69e0433a1
6
+ metadata.gz: daf20ba10a46e6f8538a02b84153bb19f3371e4ea58b689f4c520a04eb7041e76f172ac5886fca2e8a6e9140515fc7afdb30afec97bdda38d99ed43df6ecb3e7
7
+ data.tar.gz: '089e665d0359d9c0bfe0e37c1e91dfb63c6bc1dacc2c7f928e617c9d3cd1d8af959005a9cc70fca63f05a3ab5c662a24ac2ebaed113073483bc71676146bb12f'
data/README.md CHANGED
@@ -177,8 +177,15 @@ jekyll-spaceship:
177
177
  inlineMath:
178
178
  - ['$','$']
179
179
  - ['\(','\)']
180
+ displayMath:
181
+ - ['$$','$$']
182
+ - ['\[','\]']
180
183
  svg:
181
184
  fontCache: 'global'
185
+ optimize: # optimization on building stage to check and add mathjax scripts
186
+ enabled: true # value `false` for adding to all pages
187
+ include: [] # include patterns for math expressions checking (regexp)
188
+ exclude: [] # exclude patterns for math expressions checking (regexp)
182
189
  plantuml-processor:
183
190
  mode: default # mode value 'pre-fetch' for fetching image at building stage
184
191
  css:
@@ -5,6 +5,7 @@ module Jekyll::Spaceship
5
5
  CONFIG_NAME = 'jekyll-spaceship'
6
6
  DEFAULT_CONFIG = {
7
7
  'processors' => [
8
+ 'cache-processor',
8
9
  'table-processor',
9
10
  'mathjax-processor',
10
11
  'plantuml-processor',
@@ -31,6 +32,16 @@ module Jekyll::Spaceship
31
32
  first.merge(second.to_h, &merger)
32
33
  end
33
34
 
35
+ def self.deep_dig(obj, key)
36
+ if obj.respond_to?(:key?) && obj.key?(key)
37
+ obj[key]
38
+ elsif obj.respond_to?(:each)
39
+ result = nil
40
+ obj.find { |*a| result = self.deep_dig(a.last, key) }
41
+ result
42
+ end
43
+ end
44
+
34
45
  def self.store(section, default)
35
46
  return @@store[section] if default.nil?
36
47
  @@store[section] = deep_merge(default, @@store[section])
@@ -54,7 +65,10 @@ module Jekyll::Spaceship
54
65
  def self.load_config
55
66
  # post load site config for `group :jekyll_plugin`
56
67
  Jekyll::Hooks.register :site, :after_init do |site|
68
+ # load config
57
69
  self.load(site.config)
70
+ # dispatch site after_init event
71
+ Manager.dispatch(site, :site, :after_init)
58
72
  end
59
73
  end
60
74
  end
@@ -14,6 +14,7 @@ module Jekyll::Spaceship
14
14
  container = _register.first
15
15
  events = _register.last.uniq
16
16
  events = events.select do |event|
17
+ next true if event.match(/^after/)
17
18
  next true if event.match(/^post/)
18
19
  next events.index(event.to_s.gsub(/^pre/, 'post').to_sym).nil?
19
20
  end
@@ -59,21 +60,25 @@ module Jekyll::Spaceship
59
60
  def self.dispatch(page, container, event)
60
61
  @@_processors.each do |processor|
61
62
  processor.dispatch page, container, event
63
+ break unless processor.next?
62
64
  end
63
65
  if event.to_s.start_with?('post') and Type.html? output_ext(page)
64
66
  self.dispatch_html_block(page)
65
67
  end
66
68
  @@_processors.each do |processor|
67
69
  processor.on_handled if processor.handled
70
+ break unless processor.next?
68
71
  end
69
72
  end
70
73
 
71
74
  def self.ext(page)
75
+ return unless page.respond_to? :path
72
76
  ext = page.path.match(/\.[^.]+$/)
73
77
  ext.to_s.rstrip
74
78
  end
75
79
 
76
80
  def self.output_ext(page)
81
+ return unless page.respond_to? :url_placeholders
77
82
  page.url_placeholders[:output_ext]
78
83
  end
79
84
 
@@ -25,7 +25,11 @@ module Jekyll::Spaceship
25
25
  attr_accessor :handled
26
26
 
27
27
  def name
28
- self.class.name.split('::').last
28
+ self.class.class_name
29
+ end
30
+
31
+ def self.class_name
32
+ self.name.split('::').last
29
33
  end
30
34
 
31
35
  def filename
@@ -86,6 +90,10 @@ module Jekyll::Spaceship
86
90
  def self.config
87
91
  end
88
92
 
93
+ def next?
94
+ true
95
+ end
96
+
89
97
  def process?
90
98
  Type.html?(output_ext) or Type.markdown?(ext)
91
99
  end
@@ -190,6 +198,20 @@ module Jekyll::Spaceship
190
198
  content
191
199
  end
192
200
 
201
+ def get_exclusion(id)
202
+ result = nil
203
+ match_data = id.match /<!JEKYLL@(.+)@(.+)>/
204
+ unless match_data.nil?
205
+ id = match_data[2].to_i
206
+ result = {
207
+ :id => id,
208
+ :marker => match_data[0],
209
+ :content => @exclusion_store[id]
210
+ }
211
+ end
212
+ result
213
+ end
214
+
193
215
  def self.escape_html(content)
194
216
  # escape link
195
217
  content.scan(/((https?:)?\/\/\S+\?[a-zA-Z0-9%\-_=\.&;]+)/) do |result|
@@ -212,6 +234,7 @@ module Jekyll::Spaceship
212
234
  'body' => content_body
213
235
  }
214
236
  rescue StandardError => msg
237
+ logger = Logger.new(self.class_name)
215
238
  logger.log msg
216
239
  end
217
240
  end
@@ -232,5 +255,31 @@ module Jekyll::Spaceship
232
255
  "<img class=\"#{css_class}\" src=\"#{body}\">"
233
256
  end
234
257
  end
258
+
259
+ def self.handle_bang_link(
260
+ content,
261
+ url = '(https?:)?\\/\\/.*',
262
+ title = '("(.*)".*){0,1}',
263
+ &block
264
+ )
265
+ # pre-handle reference-style links
266
+ regex = /(\[(.*)\]:\s*(#{url}\s*#{title}))/
267
+ content.scan regex do |match_data|
268
+ match = match_data[0]
269
+ ref_name = match_data[1]
270
+ ref_value = match_data[2]
271
+ content = content.gsub(match, '')
272
+ .gsub(/\!\[(.*)\]\s*\[#{ref_name}\]/,
273
+ "![\1](#{ref_value})")
274
+ end
275
+
276
+ # handle inline-style links
277
+ regex = /(\!\[(.*)\]\(.*#{url}\s*#{title}\))/
278
+ content.scan regex do |match_data|
279
+ url = match_data[2]
280
+ title = match_data[6]
281
+ block.call(url, title)
282
+ end
283
+ end
235
284
  end
236
285
  end
@@ -11,14 +11,42 @@ module Jekyll::Spaceship
11
11
  'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js',
12
12
  ],
13
13
  'config' => {
14
- 'tex' => { 'inlineMath' => [['$','$'], ['\\(','\\)']] },
14
+ 'tex' => {
15
+ 'inlineMath' => [['$','$'], ['\\(','\\)']],
16
+ 'displayMath' => [['$$','$$'], ['\\[','\\]']]
17
+ },
15
18
  'svg': { 'fontCache': 'global' }
19
+ },
20
+ 'optimize' => {
21
+ 'enabled' => true,
22
+ 'include' => [],
23
+ 'exclude' => []
16
24
  }
17
25
  }
18
26
  end
19
27
 
20
28
  def process?
21
- return true if Type.html?(output_ext)
29
+ return true if Type.html?(output_ext) or Type.markdown?(output_ext)
30
+ end
31
+
32
+ def on_handle_markdown(content)
33
+ # pre-handle mathjax expressions in markdown
34
+ patterns = get_math_patterns()
35
+ patterns['include'].each do |pattern|
36
+ content.scan(pattern) do |result|
37
+ expr = result[0]
38
+ is_excluded = false
39
+ patterns['exclude'].each do |pe|
40
+ break is_excluded = true if expr.match(/#{pe}/)
41
+ end
42
+ next if is_excluded
43
+ escaped_expr = expr
44
+ .gsub(/(?<!^)\\(?!\S$)/, '\\\\\\\\')
45
+ .gsub(/\\ /, '\\\\\\ ')
46
+ content = content.gsub(expr, escaped_expr)
47
+ end
48
+ end
49
+ content
22
50
  end
23
51
 
24
52
  def on_handle_html(content)
@@ -45,22 +73,60 @@ module Jekyll::Spaceship
45
73
  end
46
74
 
47
75
  def has_mathjax_expression?(doc)
48
- doc.css('*').each do |node|
49
- if node.content.match(/(?<!\\)\$.+(?<!\\)\$/)
50
- return true
51
- end
52
- if node.content.match(/(?<!\\)\\\(.+(?<!\\)\\\)/)
53
- return true
76
+ return true unless config['optimize']['enabled'] == true
77
+ scan_mathjax_expression(doc) do
78
+ return true
79
+ end
80
+ false
81
+ end
82
+
83
+ def get_math_patterns()
84
+ patterns = []
85
+ math_patterns = []
86
+ ['tex', 'tex2jax'].each do |t|
87
+ ['inlineMath', 'displayMath'].each do |m|
88
+ r = config.dig('config', t, m)
89
+ r&.each do |i|
90
+ btag = Regexp.escape(i[0])
91
+ etag = Regexp.escape(i[1])
92
+ patterns <<= /((?<!\\\\)#{btag}.+?(?<!\\\\)#{etag})/
93
+ end
54
94
  end
55
95
  end
96
+ config['optimize']['include'].each do |pattern|
97
+ patterns <<= /(#{pattern})/
98
+ end
99
+ {
100
+ 'include' => patterns,
101
+ 'exclude' => config['optimize']['exclude']
102
+ }
103
+ end
56
104
 
57
- doc.css('script').each do |node|
58
- type = node['type']
59
- if type and type.match(/math\/tex/)
60
- return true
105
+ def scan_mathjax_expression(doc, &block)
106
+ patterns = get_math_patterns()
107
+ doc.css('*').each do |node|
108
+ next if ['code', 'pre', 'figure'].include? node.name
109
+ next if node.ancestors('code, pre, figure').size > 0
110
+ next if node.children.size > 1
111
+ patterns['include'].each do |pattern|
112
+ # check scripting mathjax expression
113
+ if node.name == 'script'
114
+ type = node['type']
115
+ next unless type
116
+ next unless type.match(/math\/tex/)
117
+ end
118
+ # check normal mathjax expression
119
+ node.content.scan(pattern) do |result|
120
+ expr = result[0]
121
+ is_excluded = false
122
+ patterns['exclude'].each do |pe|
123
+ break is_excluded = true if expr.match(/#{pe}/)
124
+ end
125
+ next if is_excluded
126
+ block.call(node, expr)
127
+ end
61
128
  end
62
129
  end
63
- false
64
130
  end
65
131
  end
66
132
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Spaceship
5
- VERSION = "0.9.5"
5
+ VERSION = "0.9.6"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-spaceship
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - jeffreytse
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-07 00:00:00.000000000 Z
11
+ date: 2020-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -114,7 +114,7 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '3.0'
117
- description:
117
+ description:
118
118
  email:
119
119
  - jeffreytse.mail@gmail.com
120
120
  executables: []
@@ -155,7 +155,7 @@ homepage: https://github.com/jeffreytse/jekyll-spaceship
155
155
  licenses:
156
156
  - MIT
157
157
  metadata: {}
158
- post_install_message:
158
+ post_install_message:
159
159
  rdoc_options: []
160
160
  require_paths:
161
161
  - lib
@@ -171,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  version: '0'
172
172
  requirements: []
173
173
  rubygems_version: 3.0.8
174
- signing_key:
174
+ signing_key:
175
175
  specification_version: 4
176
176
  summary: A Jekyll plugin to provide powerful supports for table, mathjax, plantuml,
177
177
  mermaid, emoji, video, audio, youtube, vimeo, dailymotion, spotify, soundcloud,