jekyll-spaceship 0.8.5 → 0.8.6

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: 5310871597e6232b96116549a1ea824054fe68572ced4bb2a14238bb3b7098fd
4
- data.tar.gz: 41461f5eb94fda09064bdd21126d0b505c84232bec5a51a309b5954ffa5ba2b6
3
+ metadata.gz: 5f3d45fd1335dcec7d9c05900219920869adaa418fd72b29b3fde3fcdfafc14d
4
+ data.tar.gz: 2e1fc457586b11bfa8d9fc215ba6c870a3f09ea85a78872d72a8692eeb12abcf
5
5
  SHA512:
6
- metadata.gz: 9a081bcfb8bcdaed430eeb456cae89172e55de4654ae81412fdf2749b8cb793f2c9cb702b829d1c80aa48db86f8bd5b445bde91cd1d07fdd57d717861e561642
7
- data.tar.gz: e98d3a810ba88e430f9cddfcfafc4e6f7d5cd77b4b91ed9ad2b073b02332af915059b195fbace35f02dddc88415466405eefc11b0e4c9485633f77d5fc1b0415
6
+ metadata.gz: 5c2b6900e10b029dbedad643eeb19c4d7a8332003e0bf8079af7c792bef622bc04ff550194e82d1dde365fd54fcd3f4f3997e25c357fac149db1f7eaca6cb414
7
+ data.tar.gz: 9a3b141d78a7d22aceea2e7ca8545c44a070303e4241db7f56adc301917d34bc91ff6dfb5e09df7dbf8a1739cb6c2f4a1c36c5f73fbc1a9884667350789c9bba
data/README.md CHANGED
@@ -101,6 +101,7 @@ Spaceship is a minimalistic, powerful and extremely customizable [Jekyll](https:
101
101
  - [1.3 Headerless](#headerless)
102
102
  - [1.4 Cell Alignment](#cell-alignment)
103
103
  - [1.5 Cell Markdown](#cell-markdown)
104
+ - [1.6 Cell Inline Attributes](#cell-inline-attributes)
104
105
  - [2. MathJax Usage](#2-mathjax-usage)
105
106
  - [2.1 Performance Optimization](#21-performance-optimization)
106
107
  - [2.2 How to use?](#22-how-to-use)
@@ -534,6 +535,61 @@ Rowspan is 4
534
535
  </tbody>
535
536
  </table>
536
537
 
538
+ #### Cell Inline Attributes
539
+
540
+ This feature is very useful for custom cell such as using inline style. (e.g., background, color, font)
541
+ The idea and syntax comes from the [Maruku](http://maruku.rubyforge.org/) package.
542
+
543
+ [](https://kramdown.gettalong.org/syntax.html#block-ials)
544
+
545
+ Following are some examples of attributes definitions (ALDs) and afterwards comes the syntax explanation:
546
+
547
+ ```markdown
548
+ {:ref-name: #id .cls1 .cls2}
549
+ {:second: ref-name #id-of-other title="hallo you"}
550
+ {:other: ref-name second}
551
+ ```
552
+
553
+ An ALD line has the following structure:
554
+
555
+ - a left brace, optionally preceded by up to three spaces,
556
+ - followed by a colon, the id and another colon,
557
+ - followed by attribute definitions (allowed characters are backslash-escaped closing braces or any character except a not escaped closing brace),
558
+ - followed by a closing brace and optional spaces until the end of the line.
559
+
560
+ If there is more than one ALD with the same reference name, the attribute definitions of all the ALDs are processed like they are defined in one ALD.
561
+
562
+ An inline attribute list (IAL) is used to attach attributes to another element.
563
+ Here are some examples for span IALs:
564
+
565
+ ```markdown
566
+ {: #id .cls1 .cls2} <!-- #id <=> id="id", .cls1 .cls2 <=> class="cls1 cls2" -->
567
+ {: ref-name title="hallo you"}
568
+ {: ref-name class='.cls3' .cls4}
569
+ ```
570
+
571
+ Here is an example for custom table cell with IAL:
572
+
573
+ ```markdown
574
+ {:color-style: style="background: black;" }
575
+ {:color-style: style="color: white;" }
576
+ {:font-style: style="font-weight: 800;" }
577
+
578
+ |: Here's an Inline Attribute Lists example :||||
579
+ | ------- | ------------------------- | -------------------- | ----------- |
580
+ |: :|: <div style="color: red;"> &lt; Normal HTML Block > </div> :|||
581
+ | ^^ | Red {: .cls style="background: orange" } |||
582
+ | ^^ IALs | Green {: #id style="background: green; color: white" } |||
583
+ | ^^ | Blue {: style="background: blue; color: white" } |||
584
+ | ^^ | Black {: color-style font-weight} |||
585
+ ```
586
+
587
+ Code above would be parsed as:
588
+
589
+ <img width="580px" src="https://user-images.githubusercontent.com/9413601/88461592-738afb00-ced7-11ea-9aac-3179023742b0.png" alt="IALs">
590
+
591
+ Additionally, [here](https://kramdown.gettalong.org/syntax.html#block-ials) you can learn more details about IALs.
592
+
537
593
  ### 2. MathJax Usage
538
594
 
539
595
  [MathJax](http://www.mathjax.org/) is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all modern browsers.
@@ -5,6 +5,9 @@ require "nokogiri"
5
5
 
6
6
  module Jekyll::Spaceship
7
7
  class TableProcessor < Processor
8
+ ATTR_LIST_PATTERN = /((?<!\\)\{:(?:([A-Za-z]\S*):)?(.*?)(?<!\\)\})/
9
+ ATTR_LIST_REFS = {}
10
+
8
11
  def on_handle_markdown(content)
9
12
  # pre-handle reference-style links
10
13
  references = {}
@@ -42,6 +45,19 @@ module Jekyll::Spaceship
42
45
  next if result == replace
43
46
  content = content.gsub(result, replace)
44
47
  end
48
+
49
+ # pre-handle attribute list (AL)
50
+ ATTR_LIST_REFS.clear()
51
+ content.scan(ATTR_LIST_PATTERN) do |result|
52
+ ref = result[1]
53
+ list = result[2]
54
+ next if ref.nil?
55
+ if ATTR_LIST_REFS.has_key? ref
56
+ ATTR_LIST_REFS[ref] += list
57
+ else
58
+ ATTR_LIST_REFS[ref] = list
59
+ end
60
+ end
45
61
  content
46
62
  end
47
63
 
@@ -69,6 +85,7 @@ module Jekyll::Spaceship
69
85
  handle_multi_rows(data)
70
86
  handle_text_align(data)
71
87
  handle_rowspan(data)
88
+ handle_attr_list(data)
72
89
  end
73
90
  end
74
91
  rows.each do |row|
@@ -161,7 +178,7 @@ module Jekyll::Spaceship
161
178
  if scope.table.multi_row_cells != cells and scope.table.multi_row_start
162
179
  for i in 0...scope.table.multi_row_cells.count do
163
180
  multi_row_cell = scope.table.multi_row_cells[i]
164
- multi_row_cell.inner_html += "<br>#{cells[i].inner_html}"
181
+ multi_row_cell.inner_html += "\n<br>\n#{cells[i].inner_html}"
165
182
  end
166
183
  row.remove
167
184
  end
@@ -186,7 +203,7 @@ module Jekyll::Spaceship
186
203
  span_cell = scope.table.span_row_cells[scope.row.col_index]
187
204
  if span_cell and cell.content.match(/^\s*\^{2}/)
188
205
  cell.content = cell.content.gsub(/^\s*\^{2}/, '')
189
- span_cell.inner_html += "<br>#{cell.inner_html}"
206
+ span_cell.inner_html += "\n<br>\n#{cell.inner_html}"
190
207
  rowspan = span_cell.get_attribute('rowspan') || 1
191
208
  rowspan = rowspan.to_i + 1
192
209
  span_cell.set_attribute('rowspan', "#{rowspan}")
@@ -235,6 +252,52 @@ module Jekyll::Spaceship
235
252
  cell.set_attribute('style', style)
236
253
  end
237
254
 
255
+ # Examples:
256
+ # {:ref-name: .cls1 title="hello" }
257
+ # {: #id ref-name data="world" }
258
+ # {: #id title="hello" }
259
+ # {: .cls style="color: #333" }
260
+ def handle_attr_list(data)
261
+ cell = data.cell
262
+ content = cell.inner_html
263
+ # inline attribute list(IAL) handler
264
+ ial_handler = ->(list) do
265
+ list.scan(/(\S+)=("|')(.*?)\2|(\S+)/) do |attr|
266
+ key = attr[0]
267
+ val = attr[2]
268
+ single = attr[3]
269
+ if !key.nil?
270
+ val = (cell.get_attribute(key) || '') + val
271
+ cell.set_attribute(key, val)
272
+ elsif !single.nil?
273
+ if single.start_with? '#'
274
+ key = 'id'
275
+ val = single[1..-1]
276
+ elsif single.start_with? '.'
277
+ key = 'class'
278
+ val = cell.get_attribute(key) || ''
279
+ val += (val.size.zero? ? '' : ' ') + single[1..-1]
280
+ elsif ATTR_LIST_REFS.has_key? single
281
+ ial_handler.call ATTR_LIST_REFS[single]
282
+ end
283
+ unless key.nil?
284
+ cell.set_attribute(key, val)
285
+ end
286
+ end
287
+ end
288
+ end
289
+ # handle attribute list
290
+ content.scan(ATTR_LIST_PATTERN) do |result|
291
+ ref = result[1]
292
+ list = result[2]
293
+ # handle inline attribute list
294
+ ial_handler.call list if ref.nil?
295
+ # remove attr_list
296
+ content = content.sub(result[0], '')
297
+ end
298
+ cell.inner_html = content
299
+ end
300
+
238
301
  def handle_format(data)
239
302
  cell = data.cell
240
303
  cvter = self.converter('markdown')
@@ -242,6 +305,8 @@ module Jekyll::Spaceship
242
305
  content = cell.inner_html
243
306
  .gsub(/(?<!\\)\|/, '\\|')
244
307
  .gsub(/^\s+|\s+$/, '')
308
+ .gsub(/&lt;/, '<')
309
+ .gsub(/&gt;/, '>')
245
310
  content = cvter.convert(content)
246
311
  content = Nokogiri::HTML.fragment(content)
247
312
  if content.children.first&.name == 'p'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Spaceship
5
- VERSION = "0.8.5"
5
+ VERSION = "0.8.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.8.5
4
+ version: 0.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - jeffreytse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-21 00:00:00.000000000 Z
11
+ date: 2020-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -169,8 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  - !ruby/object:Gem::Version
170
170
  version: '0'
171
171
  requirements: []
172
- rubyforge_project:
173
- rubygems_version: 2.7.7
172
+ rubygems_version: 3.0.8
174
173
  signing_key:
175
174
  specification_version: 4
176
175
  summary: A Jekyll plugin to provide powerful supports for table, mathjax, plantuml,