jekyll-spaceship 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae6d96db2dd9498238ac13344b4b5f57bae9128792f0ecfab4c21e68e165f1d8
4
- data.tar.gz: f2d39600125fb3775285a6d1851f9d9549dc24ae68fcaec042d8c487356e6bb2
3
+ metadata.gz: b764caa91610338387d31e7e46e9e8a76bad9de85ae35218e5e555080fe84566
4
+ data.tar.gz: ae0a3cb843e45c686f15e467809bf885692809edf54cca48a4667c6cc2685280
5
5
  SHA512:
6
- metadata.gz: 3755de40d7d23166ee87a215530517732ae0589fe7c30eb080ec06c8586f99d3e4899919511352b2e21185616b39768fe0067b8e12665d33a9243ca7fcd8768b
7
- data.tar.gz: a1d8018a105dc552493e1590ad20b1902bdbf81e20d018cbe5af0e80fa7b7f83522bf20f7f9d2a5463286f8421c54a414d9152233164f99149548bb9c411a6ea
6
+ metadata.gz: 39c4090c57da17685ae4af607a5267799a71e39df0740c5e9e65ef0de121e28ae4bf735e00a55373f7ce5446424684930ce9864f82578d0eb28ed0e20e68cf80
7
+ data.tar.gz: ed8ff5bb71e5763a862c6281c0d7572d3e74f082092d165f925b732e720ab02ea26fdb13bc89a9f4333313aa439aad5d0501cab48e8b9c78d862e08d14f13a03
data/.codeclimate.yml ADDED
@@ -0,0 +1,38 @@
1
+ version: "2"
2
+ checks:
3
+ argument-count:
4
+ enabled: true
5
+ config:
6
+ threshold: 5
7
+ file-lines:
8
+ enabled: true
9
+ config:
10
+ threshold: 300
11
+ method-complexity:
12
+ enabled: true
13
+ config:
14
+ threshold: 15
15
+ method-count:
16
+ enabled: true
17
+ config:
18
+ threshold: 50
19
+ method-lines:
20
+ enabled: true
21
+ config:
22
+ threshold: 30
23
+ plugins:
24
+ fixme:
25
+ enabled: false
26
+
27
+ exclude_patterns:
28
+ - "*.*"
29
+ - ".*"
30
+
31
+ - Gemfile
32
+ - LICENSE.txt
33
+ - Rakefile
34
+
35
+ - rake/
36
+ - script/
37
+ - spec/
38
+ - test/
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'nokogiri'
4
+ require __dir__ + '/type'
5
+
6
+ module Jekyll::Spaceship
7
+ class Manager
8
+ @@_hooks = {}
9
+ @@_processers = []
10
+
11
+ def self.add(processor)
12
+ # register for listening event
13
+ processor.registers.each do |_register|
14
+ container = _register.first
15
+ events = _register.last.uniq
16
+ events = events.select do |event|
17
+ next true if event.match(/^post/)
18
+ next !events.any?(event.to_s.gsub(/^pre/, 'post').to_sym)
19
+ end
20
+ events.each do |event|
21
+ self.hook container, event
22
+ end
23
+ end
24
+ @@_processers.push(processor)
25
+ @@_processers = @@_processers.sort { |a, b| b.priority <=> a.priority }
26
+ end
27
+
28
+ def self.hook(container, event, &block)
29
+ return if not is_hooked? container, event
30
+
31
+ handler = ->(page) {
32
+ self.dispatch page, container, event
33
+ block.call if block
34
+ }
35
+
36
+ if event.to_s.start_with?('after')
37
+ Jekyll::Hooks.register container, event do |page|
38
+ handler.call page
39
+ end
40
+ elsif event.to_s.start_with?('post')
41
+ Jekyll::Hooks.register container, event do |page|
42
+ handler.call page
43
+ end
44
+ # auto add pre-event
45
+ self.hook container, event.to_s.sub('post', 'pre').to_sym
46
+ elsif event.to_s.start_with?('pre')
47
+ Jekyll::Hooks.register container, event do |page|
48
+ handler.call page
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.is_hooked?(container, event)
54
+ hook_name = "#{container}_#{event}".to_sym
55
+ return false if @@_hooks.has_key? hook_name
56
+ @@_hooks[hook_name] = true
57
+ end
58
+
59
+ def self.dispatch(page, container, event)
60
+ @@_processers.each do |processor|
61
+ processor.dispatch page, container, event
62
+ end
63
+ if event.to_s.start_with?('post') and Type.html? output_ext(page)
64
+ self.dispatch_html_block(page)
65
+ end
66
+ @@_processers.each do |processor|
67
+ processor.on_handled if processor.handled
68
+ end
69
+ end
70
+
71
+ def self.ext(page)
72
+ page.data['ext']
73
+ end
74
+
75
+ def self.output_ext(page)
76
+ page.url_placeholders[:output_ext]
77
+ end
78
+
79
+ def self.converter(page, name)
80
+ page.site.converters.each do |converter|
81
+ class_name = converter.class.to_s.downcase
82
+ return converter if class_name.end_with?(name.downcase)
83
+ end
84
+ end
85
+
86
+ def self.dispatch_html_block(page)
87
+ doc = Nokogiri::HTML(page.output)
88
+ doc.css('script').each do |node|
89
+ type = Type.html_block_type node['type']
90
+ content = node.content
91
+ next if type.nil?
92
+
93
+ # dispatch to on_handle_html_block
94
+ @@_processers.each do |processor|
95
+ next unless processor.process?
96
+ content = processor.on_handle_html_block content, type
97
+ # dispatch to type handlers
98
+ method = "on_handle_#{type}"
99
+ next unless processor.respond_to? method
100
+ content = processor.pre_exclude content
101
+ content = processor.send method, content
102
+ content = processor.after_exclude content
103
+ end
104
+
105
+ cvter = self.converter page, type
106
+ content = cvter.convert content unless cvter.nil?
107
+
108
+ # dispatch to on_handle_html
109
+ @@_processers.each do |processor|
110
+ next unless processor.process?
111
+ content = processor.on_handle_html content
112
+ end
113
+ node.replace Nokogiri::HTML.fragment content
114
+ end
115
+ page.output = doc.to_html
116
+ end
117
+ end
118
+ end
@@ -1,56 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'nokogiri'
4
-
5
3
  module Jekyll::Spaceship
6
4
  class Processor
7
- @@_hooks = {}
8
- @@_registers = []
9
- @@_processers = []
10
- @@_exclusions = []
11
- @@_priority = nil
12
-
13
- attr_accessor :priority
14
- attr_accessor :page
15
- attr_accessor :handled
16
-
17
5
  DEFAULT_PRIORITY = 20
18
6
 
19
7
  PRIORITY_MAP = {
20
- :low => 10,
21
- :normal => 20,
22
- :high => 30,
8
+ :lowest => 0,
9
+ :low => 10,
10
+ :normal => 20,
11
+ :high => 30,
12
+ :highest => 40,
23
13
  }.freeze
24
14
 
25
- HTML_EXTENSIONS = %w(
26
- .html
27
- .xhtml
28
- .htm
29
- ).freeze
30
-
31
- CSS_EXTENSIONS = %w(
32
- .css
33
- .scss
34
- ).freeze
15
+ @@_registers = []
16
+ @@_exclusions = []
17
+ @@_priority = nil
35
18
 
36
- MD_EXTENSIONS = %w(
37
- .md
38
- .markdown
39
- ).freeze
19
+ attr_reader :page
20
+ attr_reader :priority
21
+ attr_reader :registers
22
+ attr_reader :exclusions
23
+ attr_accessor :handled
40
24
 
41
25
  def initialize()
42
26
  self.initialize_priority
43
27
  self.initialize_register
44
28
  self.initialize_exclusions
29
+ Manager.add self
45
30
  end
46
31
 
47
32
  def initialize_priority
48
- @@_priority = DEFAULT_PRIORITY if @@_priority.nil?
49
33
  @priority = @@_priority
34
+ unless @priority.nil? or @priority.is_a? Numeric
35
+ @priority = PRIORITY_MAP[@priority.to_sym]
36
+ end
37
+ @priority = DEFAULT_PRIORITY if @priority.nil?
50
38
  @@_priority = nil
51
-
52
- @@_processers.push(self)
53
- @@_processers = @@_processers.sort { |a, b| b.priority <=> a.priority }
54
39
  end
55
40
 
56
41
  def initialize_register
@@ -58,18 +43,7 @@ module Jekyll::Spaceship
58
43
  self.class.register :pages, :pre_render, :post_render
59
44
  self.class.register :posts, :pre_render, :post_render
60
45
  end
61
-
62
- @@_registers.each do |_register|
63
- container = _register.first
64
- events = _register.last.uniq
65
- events = events.select do |event|
66
- next true if event.match(/^post/)
67
- next !events.any?(event.to_s.gsub(/^pre/, 'post').to_sym)
68
- end
69
- events.each do |event|
70
- self.class.hook container, event
71
- end
72
- end
46
+ @registers = Array.new @@_registers
73
47
  @@_registers.clear
74
48
  end
75
49
 
@@ -77,165 +51,85 @@ module Jekyll::Spaceship
77
51
  if @@_exclusions.size.zero?
78
52
  self.class.exclude :code, :block_quotes
79
53
  end
80
- @_exclusions = @@_exclusions.uniq
54
+ @exclusions = @@_exclusions.uniq
81
55
  @@_exclusions.clear
82
56
  end
83
57
 
84
58
  def self.priority(value)
85
- value = value.to_sym
86
- if PRIORITY_MAP.has_key? value
87
- @@_priority = PRIORITY_MAP[value]
88
- elsif value.nil?
89
- @@_priority = DEFAULT_PRIORITY
90
- else
91
- @@_priority = value
92
- end
59
+ @@_priority = value.to_sym
93
60
  end
94
61
 
95
62
  def self.register(container, *events)
96
63
  @@_registers << [container, events]
97
64
  end
98
65
 
99
- def self.hook_register(container, event)
100
- hook_name = "#{container}_#{event}".to_sym
101
- return false if @@_hooks.has_key? hook_name
102
- @@_hooks[hook_name] = true
66
+ def self.exclude(*types)
67
+ @@_exclusions = types
103
68
  end
104
69
 
105
- def self.hook(container, event, &block)
106
- return if not hook_register container, event
70
+ def process?
71
+ Type.html?(output_ext) or Type.markdown?(ext)
72
+ end
107
73
 
108
- # define dispatch proc
109
- dispatch = ->(instance) {
110
- @@_processers.each do |processor|
111
- processor.page = instance
112
- processor.handled = false
113
- next if not processor.process?
114
- processor.dispatch container, event
115
- end
116
- if event.to_s.start_with?('post') and self.html? output_ext(instance)
117
- self.handle_html_block(instance)
118
- end
119
- @@_processers.each do |processor|
120
- processor.page = instance
121
- if processor.handled
122
- processor.on_handled
123
- end
124
- end
125
- block.call if block
126
- }
74
+ def ext
75
+ Manager.ext @page
76
+ end
127
77
 
128
- if event.to_s.start_with?('after')
129
- Jekyll::Hooks.register container, event do |instance|
130
- dispatch.call instance
131
- end
132
- elsif event.to_s.start_with?('post')
133
- Jekyll::Hooks.register container, event do |instance|
134
- dispatch.call instance
135
- end
78
+ def output_ext
79
+ Manager.output_ext @page
80
+ end
136
81
 
137
- # auto add pre-event
138
- register container, event.to_s.sub('post', 'pre').to_sym
139
- elsif event.to_s.start_with?('pre')
140
- Jekyll::Hooks.register container, event do |instance|
141
- dispatch.call instance
142
- end
143
- end
82
+ def converter(name)
83
+ Manager.converter @page, name
144
84
  end
145
85
 
146
- def dispatch(container, event)
86
+ def dispatch(page, container, event)
87
+ @page = page
88
+ @handled = false
89
+ return unless self.process?
147
90
  method = "on_#{container}_#{event}"
148
91
  self.send method, @page if self.respond_to? method
149
-
92
+ method = ''
150
93
  if event.to_s.start_with?('pre')
151
- if markdown? ext
94
+ if Type.markdown? ext
152
95
  method = 'on_handle_markdown'
153
- else
154
- method = ''
155
96
  end
156
-
157
97
  if self.respond_to? method
158
98
  @page.content = self.pre_exclude @page.content
159
99
  @page.content = self.send method, @page.content
160
100
  @page.content = self.after_exclude @page.content
161
101
  end
162
102
  else
163
- if html? output_ext
103
+ if Type.html? output_ext
164
104
  method = 'on_handle_html'
165
105
  elsif css? output_ext
166
106
  method = 'on_handle_css'
167
- else
168
- method = ''
169
107
  end
170
-
171
108
  if self.respond_to? method
172
109
  @page.output = self.send method, @page.output
173
110
  end
174
111
  end
175
112
  end
176
113
 
177
- def self.exclude(*types)
178
- @@_exclusions = types
179
- end
180
-
181
- def html?(_ext)
182
- self.class.html? _ext
183
- end
184
-
185
- def css?(_ext)
186
- self.class.css? _ext
187
- end
188
-
189
- def markdown?(_ext)
190
- self.class.markdown? _ext
191
- end
192
-
193
- def self.html?(_ext)
194
- HTML_EXTENSIONS.include?(_ext)
195
- end
196
-
197
- def self.css?(_ext)
198
- CSS_EXTENSIONS.include?(_ext)
199
- end
200
-
201
- def self.markdown?(_ext)
202
- MD_EXTENSIONS.include?(_ext)
203
- end
204
-
205
- def converter(name)
206
- self.class.converter(@page, name)
207
- end
208
-
209
- def self.converter(instance, name)
210
- instance.site.converters.each do |converter|
211
- class_name = converter.class.to_s.downcase
212
- return converter if class_name.end_with?(name.downcase)
213
- end
214
- end
215
-
216
- def ext
217
- self.class.ext @page
218
- end
219
-
220
- def output_ext
221
- self.class.output_ext @page
222
- end
223
-
224
- def self.ext(instance)
225
- instance.data['ext']
114
+ def on_handle_html_block(content, type)
115
+ # default handle method
116
+ content
226
117
  end
227
118
 
228
- def self.output_ext(instance)
229
- instance.url_placeholders[:output_ext]
119
+ def on_handle_html(content)
120
+ # default handle method
121
+ content
230
122
  end
231
123
 
232
- def process?
233
- html?(output_ext) or markdown?(ext)
124
+ def on_handled
125
+ processor = self.class.name.split('::').last
126
+ file = page.path.gsub(/.*_posts\//, '')
127
+ Logger.log "[#{processor}] #{file}"
234
128
  end
235
129
 
236
130
  def pre_exclude(content)
237
- @_exclusion_store = []
238
- @_exclusions.each do |type|
131
+ @exclusion_store = []
132
+ @exclusions.each do |type|
239
133
  regex = nil
240
134
  if type == :code
241
135
  regex = /(`{3}\s*(\w*)((?:.|\n)*?)`{3})/
@@ -243,83 +137,22 @@ module Jekyll::Spaceship
243
137
  next if regex.nil?
244
138
  content.scan(regex) do |match_data|
245
139
  match = match_data[0]
246
- id = @_exclusion_store.size
140
+ id = @exclusion_store.size
247
141
  content = content.gsub(match, "[//]: JEKYLL_EXCLUDE_##{id}")
248
- @_exclusion_store.push match
142
+ @exclusion_store.push match
249
143
  end
250
144
  end
251
145
  content
252
146
  end
253
147
 
254
148
  def after_exclude(content)
255
- while @_exclusion_store.size > 0
256
- match = @_exclusion_store.pop
257
- id = @_exclusion_store.size
149
+ while @exclusion_store.size > 0
150
+ match = @exclusion_store.pop
151
+ id = @exclusion_store.size
258
152
  content = content.gsub("[//]: JEKYLL_EXCLUDE_##{id}", match)
259
153
  end
260
- @_exclusion_store = []
154
+ @exclusion_store = []
261
155
  content
262
156
  end
263
-
264
- def on_handled
265
- processor = self.class.name.split('::').last
266
- file = page.path.gsub(/.*_posts\//, '')
267
- Logger.log "[#{processor}] #{file}"
268
- end
269
-
270
- def self.handle_html_block(instance)
271
- doc = Nokogiri::HTML(instance.output)
272
-
273
- doc.css('script').each do |node|
274
- blk_type = node['type']
275
- blk_content = node.content
276
-
277
- cvter = nil
278
- method = ''
279
- block_method = 'on_handle_html_block'
280
-
281
- case blk_type
282
- when 'text/markdown'
283
- method = 'on_handle_markdown'
284
- cvter = self.converter(instance, 'markdown')
285
- end
286
-
287
- @@_processers.each do |processor|
288
- processor.page = instance
289
- next if not processor.process?
290
-
291
- # dispatch to on_handle_html_block
292
- if processor.respond_to? block_method
293
- blk_content = processor.send block_method blk_content, blk_type
294
- end
295
-
296
- # dispatch to other handlers
297
- if processor.respond_to? method
298
- blk_content = processor.pre_exclude blk_content
299
- blk_content = processor.send method, blk_content
300
- blk_content = processor.after_exclude blk_content
301
- end
302
- end
303
-
304
- if not cvter.nil?
305
- blk_content = cvter.convert blk_content
306
- end
307
-
308
- next if method == ''
309
-
310
- method = 'on_handle_html'
311
- @@_processers.each do |processor|
312
- processor.page = instance
313
- next if not processor.process?
314
- if processor.respond_to? method
315
- blk_content = processor.send method, blk_content
316
- end
317
- end
318
-
319
- node.replace Nokogiri::HTML.fragment(blk_content)
320
- end
321
-
322
- instance.output = doc.to_html
323
- end
324
157
  end
325
158
  end
@@ -25,17 +25,13 @@ module Jekyll::Spaceship
25
25
  next if filename.gsub(/-/, '').downcase != name
26
26
 
27
27
  Logger.log "use #{filename}"
28
-
29
28
  require path
30
-
31
29
  constants = Jekyll::Spaceship.constants.select do |c|
32
30
  c.downcase.to_s == name
33
31
  end
34
32
 
35
33
  next if constants.first.nil?
36
-
37
34
  _class = Jekyll::Spaceship.const_get(constants.first)
38
-
39
35
  next unless _class.is_a? Class
40
36
 
41
37
  _class.new
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll::Spaceship
4
+ class Type
5
+ HTML_EXTENSIONS = %w(
6
+ .html
7
+ .xhtml
8
+ .htm
9
+ ).freeze
10
+
11
+ CSS_EXTENSIONS = %w(
12
+ .css
13
+ .scss
14
+ ).freeze
15
+
16
+ MD_EXTENSIONS = %w(
17
+ .md
18
+ .markdown
19
+ ).freeze
20
+
21
+ HTML_BLOCK_TYPE_MAP = {
22
+ 'text/markdown' => 'markdown',
23
+ }.freeze
24
+
25
+ def self.html?(_ext)
26
+ HTML_EXTENSIONS.include?(_ext)
27
+ end
28
+
29
+ def self.css?(_ext)
30
+ CSS_EXTENSIONS.include?(_ext)
31
+ end
32
+
33
+ def self.markdown?(_ext)
34
+ MD_EXTENSIONS.include?(_ext)
35
+ end
36
+
37
+ def self.html_block_type(type)
38
+ HTML_BLOCK_TYPE_MAP[type]
39
+ end
40
+ end
41
+ end
@@ -5,7 +5,7 @@ require "nokogiri"
5
5
  module Jekyll::Spaceship
6
6
  class MathjaxProcessor < Processor
7
7
  def process?
8
- return true if html?(output_ext)
8
+ return true if Type.html?(output_ext)
9
9
  end
10
10
 
11
11
  def on_handle_html(content)
@@ -20,7 +20,10 @@ module Jekyll::Spaceship
20
20
 
21
21
  params = "config=TeX-AMS-MML_HTMLorMML"
22
22
  src = "//cdn.mathjax.org/mathjax/latest/MathJax.js?#{params}"
23
- config = "MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});"
23
+ config = "MathJax.Hub.Config({ \
24
+ tex2jax: { inlineMath: [['$','$'], ['\\\\(','\\\\)']] } \
25
+ });"
26
+
24
27
  head.add_child("<script src=\"#{src}\">#{config}</script>")
25
28
 
26
29
  doc.to_html
@@ -28,7 +31,10 @@ module Jekyll::Spaceship
28
31
 
29
32
  def has_mathjax_expression?(doc)
30
33
  doc.css('*').each do |node|
31
- if node.content.match(/\$.+\$/)
34
+ if node.content.match(/(?<!\\)\$.+(?<!\\)\$/)
35
+ return true
36
+ end
37
+ if node.content.match(/(?<!\\)\\\(.+(?<!\\)\\\)/)
32
38
  return true
33
39
  end
34
40
  end
@@ -46,23 +46,7 @@ module Jekyll::Spaceship
46
46
  # use nokogiri to parse html content
47
47
  doc = Nokogiri::HTML(content)
48
48
 
49
- data = OpenStruct.new(_: OpenStruct.new)
50
- data.reset = ->(scope, namespace = nil) {
51
- data._.marshal_dump.each do |key, val|
52
- if namespace == key or namespace.nil?
53
- data._[key][scope] = OpenStruct.new
54
- end
55
- end
56
- }
57
- data.scope = ->(namespace) {
58
- if not data._[namespace]
59
- data._[namespace] = OpenStruct.new(
60
- table: OpenStruct.new,
61
- row: OpenStruct.new
62
- )
63
- end
64
- data._[namespace]
65
- }
49
+ data = self.table_scope_data
66
50
 
67
51
  # handle each table
68
52
  doc.css('table').each do |table|
@@ -96,45 +80,63 @@ module Jekyll::Spaceship
96
80
  doc.to_html
97
81
  end
98
82
 
83
+ def table_scope_data
84
+ data = OpenStruct.new(_: OpenStruct.new)
85
+ data.reset = ->(scope, namespace = nil) {
86
+ data._.marshal_dump.each do |key, val|
87
+ if namespace == key or namespace.nil?
88
+ data._[key][scope] = OpenStruct.new
89
+ end
90
+ end
91
+ }
92
+ data.scope = ->(namespace) {
93
+ if not data._[namespace]
94
+ data._[namespace] = OpenStruct.new(
95
+ table: OpenStruct.new,
96
+ row: OpenStruct.new
97
+ )
98
+ end
99
+ data._[namespace]
100
+ }
101
+ data
102
+ end
103
+
99
104
  def handle_colspan(data)
100
105
  scope = data.scope.call __method__
101
- scope_table = scope.table
102
- scope_row = scope.row
103
106
  cells = data.cells
104
107
  cell = data.cell
105
108
 
106
- if scope_table.row != data.row
107
- scope_table.row = data.row
108
- scope_row.colspan = 0
109
+ if scope.table.row != data.row
110
+ scope.table.row = data.row
111
+ scope.row.colspan = 0
109
112
  end
110
113
 
111
114
  # handle colspan
112
115
  result = cell.content.match(/(\s*\|)+$/)
113
- if cell == cells.last and scope_row.colspan > 0
114
- range = (cells.count - scope_row.colspan)...cells.count
116
+ if cell == cells.last and scope.row.colspan > 0
117
+ range = (cells.count - scope.row.colspan)...cells.count
115
118
  for i in range do
116
119
  cells[i].remove
117
120
  end
118
121
  end
119
122
  if result
120
123
  result = result[0]
121
- scope_row.colspan += result.scan(/\|/).count
124
+ scope.row.colspan += result.scan(/\|/).count
122
125
  cell.content = cell.content.gsub(/(\s*\|)+$/, '')
123
- cell.set_attribute('colspan', scope_row.colspan + 1)
126
+ cell.set_attribute('colspan', scope.row.colspan + 1)
124
127
  end
125
128
  end
126
129
 
127
130
  def handle_multi_rows(data)
128
131
  scope = data.scope.call __method__
129
- scope_table = scope.table
130
132
  cells = data.cells
131
133
  row = data.row
132
134
  cell = data.cell
133
135
 
134
- if scope_table.table != data.table
135
- scope_table.table = data.table
136
- scope_table.multi_row_cells = nil
137
- scope_table.multi_row_start = false
136
+ if scope.table.table != data.table
137
+ scope.table.table = data.table
138
+ scope.table.multi_row_cells = nil
139
+ scope.table.multi_row_start = false
138
140
  end
139
141
 
140
142
  # handle multi-rows
@@ -143,41 +145,38 @@ module Jekyll::Spaceship
143
145
  match = cell.content.match(/(?<!\\)\\\s*$/)
144
146
  if match
145
147
  cell.content = cell.content.gsub(/(?<!\\)\\\s*$/, '')
146
- if not scope_table.multi_row_start
147
- scope_table.multi_row_cells = cells
148
- scope_table.multi_row_start = true
148
+ if not scope.table.multi_row_start
149
+ scope.table.multi_row_cells = cells
150
+ scope.table.multi_row_start = true
149
151
  end
150
152
  end
151
153
 
152
- if scope_table.multi_row_cells != cells and scope_table.multi_row_start
153
- for i in 0...scope_table.multi_row_cells.count do
154
- multi_row_cell = scope_table.multi_row_cells[i]
154
+ if scope.table.multi_row_cells != cells and scope.table.multi_row_start
155
+ for i in 0...scope.table.multi_row_cells.count do
156
+ multi_row_cell = scope.table.multi_row_cells[i]
155
157
  multi_row_cell.content += " \n#{cells[i].content}"
156
158
  end
157
159
  row.remove
158
160
  end
159
- scope_table.multi_row_start = false if not match
161
+ scope.table.multi_row_start = false if not match
160
162
  end
161
163
 
162
164
  def handle_rowspan(data)
163
165
  scope = data.scope.call __method__
164
- scope_table = scope.table
165
- scope_row = scope.row
166
166
  cell = data.cell
167
167
  cells = data.cells
168
168
 
169
- if scope_table.table != data.table
170
- scope_table.table = data.table
171
- scope_table.span_row_cells = []
169
+ if scope.table.table != data.table
170
+ scope.table.table = data.table
171
+ scope.table.span_row_cells = []
172
172
  end
173
-
174
- if scope_row.row != data.row
175
- scope_row.row = data.row
176
- scope_row.col_index = 0
173
+ if scope.row.row != data.row
174
+ scope.row.row = data.row
175
+ scope.row.col_index = 0
177
176
  end
178
177
 
179
178
  # handle rowspan
180
- span_cell = scope_table.span_row_cells[scope_row.col_index]
179
+ span_cell = scope.table.span_row_cells[scope.row.col_index]
181
180
  if span_cell and cell.content.match(/^\s*\^{2}/)
182
181
  cell.content = cell.content.gsub(/^\s*\^{2}/, '')
183
182
  span_cell.content += " \n#{cell.content}"
@@ -186,10 +185,9 @@ module Jekyll::Spaceship
186
185
  span_cell.set_attribute('rowspan', "#{rowspan}")
187
186
  cell.remove
188
187
  else
189
- scope_table.span_row_cells[scope_row.col_index] = cell
188
+ scope.table.span_row_cells[scope.row.col_index] = cell
190
189
  end
191
-
192
- scope_row.col_index += 1
190
+ scope.row.col_index += 1
193
191
  end
194
192
 
195
193
  def handle_text_align(data)
@@ -211,7 +209,6 @@ module Jekyll::Spaceship
211
209
 
212
210
  # handle text align
213
211
  return if align == 0
214
-
215
212
  style = cell.get_attribute('style')
216
213
  if align == 1
217
214
  align = 'text-align: left'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Spaceship
5
- VERSION = "0.4.2"
5
+ VERSION = "0.4.3"
6
6
  end
7
7
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'jekyll-spaceship/cores/logger'
4
+ require 'jekyll-spaceship/cores/manager'
4
5
  require 'jekyll-spaceship/cores/processor'
5
6
  require 'jekyll-spaceship/cores/register'
6
7
 
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.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - jeffreytse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-29 00:00:00.000000000 Z
11
+ date: 2020-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -93,6 +93,7 @@ executables: []
93
93
  extensions: []
94
94
  extra_rdoc_files: []
95
95
  files:
96
+ - ".codeclimate.yml"
96
97
  - ".gitignore"
97
98
  - ".travis.yml"
98
99
  - Gemfile
@@ -102,8 +103,10 @@ files:
102
103
  - jekyll-spaceship.gemspec
103
104
  - lib/jekyll-spaceship.rb
104
105
  - lib/jekyll-spaceship/cores/logger.rb
106
+ - lib/jekyll-spaceship/cores/manager.rb
105
107
  - lib/jekyll-spaceship/cores/processor.rb
106
108
  - lib/jekyll-spaceship/cores/register.rb
109
+ - lib/jekyll-spaceship/cores/type.rb
107
110
  - lib/jekyll-spaceship/processors/mathjax-processor.rb
108
111
  - lib/jekyll-spaceship/processors/plantuml-processor.rb
109
112
  - lib/jekyll-spaceship/processors/polyfill-processor.rb