jekyll-spaceship 0.4.0 → 0.5.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 +4 -4
- data/.codeclimate.yml +38 -0
- data/.github/FUNDING.yml +12 -0
- data/.travis.yml +32 -0
- data/README.md +111 -11
- data/Rakefile +8 -0
- data/jekyll-spaceship.gemspec +4 -4
- data/lib/jekyll-spaceship.rb +2 -0
- data/lib/jekyll-spaceship/cores/logger.rb +12 -0
- data/lib/jekyll-spaceship/cores/manager.rb +118 -0
- data/lib/jekyll-spaceship/cores/processor.rb +83 -200
- data/lib/jekyll-spaceship/cores/register.rb +1 -5
- data/lib/jekyll-spaceship/cores/type.rb +41 -0
- data/lib/jekyll-spaceship/processors/emoji-processor.rb +65 -0
- data/lib/jekyll-spaceship/processors/mathjax-processor.rb +9 -3
- data/lib/jekyll-spaceship/processors/plantuml-processor.rb +2 -0
- data/lib/jekyll-spaceship/processors/polyfill-processor.rb +1 -1
- data/lib/jekyll-spaceship/processors/table-processor.rb +56 -57
- data/lib/jekyll-spaceship/processors/video-processor.rb +15 -7
- data/lib/jekyll-spaceship/version.rb +1 -1
- data/logos/jekyll-spaceship-logo.png +0 -0
- data/script/cibuild +6 -0
- data/script/test +4 -0
- metadata +34 -17
@@ -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({
|
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 =
|
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,65 @@ 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
|
107
|
-
|
108
|
-
|
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
|
-
|
113
|
-
|
114
|
-
range = (cells.count - scope_row.colspan)...cells.count
|
115
|
+
if cell == cells.last and scope.row.colspan > 0
|
116
|
+
range = (cells.count - scope.row.colspan)...cells.count
|
115
117
|
for i in range do
|
116
118
|
cells[i].remove
|
117
119
|
end
|
118
120
|
end
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
121
|
+
|
122
|
+
result = cell.content.match(/(\s*\|)+$/)
|
123
|
+
return if result.nil?
|
124
|
+
|
125
|
+
cell.content = cell.content.gsub(/(\s*\|)+$/, '')
|
126
|
+
result = result[0]
|
127
|
+
colspan = result.scan(/\|/).count
|
128
|
+
scope.row.colspan += colspan
|
129
|
+
cell.set_attribute('colspan', colspan + 1)
|
125
130
|
end
|
126
131
|
|
127
132
|
def handle_multi_rows(data)
|
128
133
|
scope = data.scope.call __method__
|
129
|
-
scope_table = scope.table
|
130
134
|
cells = data.cells
|
131
135
|
row = data.row
|
132
136
|
cell = data.cell
|
133
137
|
|
134
|
-
if
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
+
if scope.table.table != data.table
|
139
|
+
scope.table.table = data.table
|
140
|
+
scope.table.multi_row_cells = nil
|
141
|
+
scope.table.multi_row_start = false
|
138
142
|
end
|
139
143
|
|
140
144
|
# handle multi-rows
|
@@ -143,41 +147,38 @@ module Jekyll::Spaceship
|
|
143
147
|
match = cell.content.match(/(?<!\\)\\\s*$/)
|
144
148
|
if match
|
145
149
|
cell.content = cell.content.gsub(/(?<!\\)\\\s*$/, '')
|
146
|
-
if not
|
147
|
-
|
148
|
-
|
150
|
+
if not scope.table.multi_row_start
|
151
|
+
scope.table.multi_row_cells = cells
|
152
|
+
scope.table.multi_row_start = true
|
149
153
|
end
|
150
154
|
end
|
151
155
|
|
152
|
-
if
|
153
|
-
for i in 0...
|
154
|
-
multi_row_cell =
|
156
|
+
if scope.table.multi_row_cells != cells and scope.table.multi_row_start
|
157
|
+
for i in 0...scope.table.multi_row_cells.count do
|
158
|
+
multi_row_cell = scope.table.multi_row_cells[i]
|
155
159
|
multi_row_cell.content += " \n#{cells[i].content}"
|
156
160
|
end
|
157
161
|
row.remove
|
158
162
|
end
|
159
|
-
|
163
|
+
scope.table.multi_row_start = false if not match
|
160
164
|
end
|
161
165
|
|
162
166
|
def handle_rowspan(data)
|
163
167
|
scope = data.scope.call __method__
|
164
|
-
scope_table = scope.table
|
165
|
-
scope_row = scope.row
|
166
168
|
cell = data.cell
|
167
169
|
cells = data.cells
|
168
170
|
|
169
|
-
if
|
170
|
-
|
171
|
-
|
171
|
+
if scope.table.table != data.table
|
172
|
+
scope.table.table = data.table
|
173
|
+
scope.table.span_row_cells = []
|
172
174
|
end
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
scope_row.col_index = 0
|
175
|
+
if scope.row.row != data.row
|
176
|
+
scope.row.row = data.row
|
177
|
+
scope.row.col_index = 0
|
177
178
|
end
|
178
179
|
|
179
180
|
# handle rowspan
|
180
|
-
span_cell =
|
181
|
+
span_cell = scope.table.span_row_cells[scope.row.col_index]
|
181
182
|
if span_cell and cell.content.match(/^\s*\^{2}/)
|
182
183
|
cell.content = cell.content.gsub(/^\s*\^{2}/, '')
|
183
184
|
span_cell.content += " \n#{cell.content}"
|
@@ -186,10 +187,9 @@ module Jekyll::Spaceship
|
|
186
187
|
span_cell.set_attribute('rowspan', "#{rowspan}")
|
187
188
|
cell.remove
|
188
189
|
else
|
189
|
-
|
190
|
+
scope.table.span_row_cells[scope.row.col_index] = cell
|
190
191
|
end
|
191
|
-
|
192
|
-
scope_row.col_index += 1
|
192
|
+
scope.row.col_index += [cell.get_attribute('colspan').to_i, 1].max
|
193
193
|
end
|
194
194
|
|
195
195
|
def handle_text_align(data)
|
@@ -211,7 +211,6 @@ module Jekyll::Spaceship
|
|
211
211
|
|
212
212
|
# handle text align
|
213
213
|
return if align == 0
|
214
|
-
|
215
214
|
style = cell.get_attribute('style')
|
216
215
|
if align == 1
|
217
216
|
align = 'text-align: left'
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'uri'
|
4
|
+
|
3
5
|
module Jekyll::Spaceship
|
4
6
|
class VideoProcessor < Processor
|
5
7
|
def on_handle_markdown(content)
|
@@ -70,20 +72,26 @@ module Jekyll::Spaceship
|
|
70
72
|
url = match_data[2]
|
71
73
|
id = match_data[4]
|
72
74
|
title = match_data[6]
|
73
|
-
|
74
|
-
|
75
|
+
qs = url.match(/(?<=\?)(\S*?)$/)
|
76
|
+
qs = Hash[URI.decode_www_form(qs.to_s)].reject do |k, v|
|
77
|
+
next true if v == id or v == ''
|
78
|
+
end
|
79
|
+
|
80
|
+
width = qs['width'] || data[:width] || 600
|
81
|
+
height = qs['height'] || data[:height] || 400
|
82
|
+
style = "max-width: 100%" if width.nil?
|
75
83
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
height = data[:height] if height.nil?
|
84
|
+
url = URI("#{iframe_url}#{id}").tap do |v|
|
85
|
+
v.query = URI.encode_www_form(qs) if qs.size > 0
|
86
|
+
end
|
80
87
|
|
81
|
-
url = "#{iframe_url}#{id}"
|
82
88
|
html = "<iframe \
|
83
89
|
src=\"#{url}\" \
|
84
90
|
title=\"#{title}\" \
|
85
91
|
width=\"#{width}\" \
|
86
92
|
height=\"#{height}\" \
|
93
|
+
style=\"#{style}\" \
|
94
|
+
allow=\"autoplay; encrypted-media\" \
|
87
95
|
frameborder=\"0\" \
|
88
96
|
allowfullscreen=\"\">\
|
89
97
|
</iframe>"
|
Binary file
|
data/script/cibuild
ADDED
data/script/test
ADDED
metadata
CHANGED
@@ -1,57 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-spaceship
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jeffreytse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: jekyll
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3.6'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
29
|
+
version: '3.6'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
34
|
+
name: nokogiri
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
type: :
|
39
|
+
version: '1.6'
|
40
|
+
type: :runtime
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
44
|
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
46
|
+
version: '1.6'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: bundler
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - ">="
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - "
|
58
|
+
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '0'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: rake
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,15 +93,22 @@ executables: []
|
|
87
93
|
extensions: []
|
88
94
|
extra_rdoc_files: []
|
89
95
|
files:
|
96
|
+
- ".codeclimate.yml"
|
97
|
+
- ".github/FUNDING.yml"
|
90
98
|
- ".gitignore"
|
99
|
+
- ".travis.yml"
|
91
100
|
- Gemfile
|
92
101
|
- LICENSE.txt
|
93
102
|
- README.md
|
103
|
+
- Rakefile
|
94
104
|
- jekyll-spaceship.gemspec
|
95
105
|
- lib/jekyll-spaceship.rb
|
96
106
|
- lib/jekyll-spaceship/cores/logger.rb
|
107
|
+
- lib/jekyll-spaceship/cores/manager.rb
|
97
108
|
- lib/jekyll-spaceship/cores/processor.rb
|
98
109
|
- lib/jekyll-spaceship/cores/register.rb
|
110
|
+
- lib/jekyll-spaceship/cores/type.rb
|
111
|
+
- lib/jekyll-spaceship/processors/emoji-processor.rb
|
99
112
|
- lib/jekyll-spaceship/processors/mathjax-processor.rb
|
100
113
|
- lib/jekyll-spaceship/processors/plantuml-processor.rb
|
101
114
|
- lib/jekyll-spaceship/processors/polyfill-processor.rb
|
@@ -103,6 +116,9 @@ files:
|
|
103
116
|
- lib/jekyll-spaceship/processors/video-processor.rb
|
104
117
|
- lib/jekyll-spaceship/utils/plantuml/plantuml.jar
|
105
118
|
- lib/jekyll-spaceship/version.rb
|
119
|
+
- logos/jekyll-spaceship-logo.png
|
120
|
+
- script/cibuild
|
121
|
+
- script/test
|
106
122
|
homepage: https://github.com/jeffreytse/jekyll-spaceship
|
107
123
|
licenses:
|
108
124
|
- MIT
|
@@ -122,9 +138,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
138
|
- !ruby/object:Gem::Version
|
123
139
|
version: '0'
|
124
140
|
requirements: []
|
125
|
-
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 2.7.7
|
126
143
|
signing_key:
|
127
144
|
specification_version: 4
|
128
145
|
summary: A Jekyll plugin to provide powerful supports for table, mathjax, plantuml,
|
129
|
-
youtube, etc.
|
146
|
+
emoji, youtube, vimeo, dailymotion, etc.
|
130
147
|
test_files: []
|