jekyll-spaceship 0.8.5 → 0.8.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: 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,