mirror of
https://github.com/SharpeTronics/jekyll-spaceship.git
synced 2025-12-17 00:03:13 -05:00
feat: support table cell attribute list (#19)
This commit is contained in:
parent
a85ec310cd
commit
04ff451208
@ -5,6 +5,9 @@ require "nokogiri"
|
|||||||
|
|
||||||
module Jekyll::Spaceship
|
module Jekyll::Spaceship
|
||||||
class TableProcessor < Processor
|
class TableProcessor < Processor
|
||||||
|
ATTR_LIST_PATTERN = /((?<!\\)\{:(?:([A-Za-z]\S*):)?(.*?)(?<!\\)\})/
|
||||||
|
ATTR_LIST_REFS = {}
|
||||||
|
|
||||||
def on_handle_markdown(content)
|
def on_handle_markdown(content)
|
||||||
# pre-handle reference-style links
|
# pre-handle reference-style links
|
||||||
references = {}
|
references = {}
|
||||||
@ -42,6 +45,19 @@ module Jekyll::Spaceship
|
|||||||
next if result == replace
|
next if result == replace
|
||||||
content = content.gsub(result, replace)
|
content = content.gsub(result, replace)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# pre-handle attribute list (AL)
|
||||||
|
ATTR_LIST_REFS.clear()
|
||||||
|
content.scan(ATTR_LIST_PATTERN) do |result|
|
||||||
|
ref = result[1]
|
||||||
|
list = result[2]
|
||||||
|
next if ref.nil?
|
||||||
|
if ATTR_LIST_REFS.has_key? ref
|
||||||
|
ATTR_LIST_REFS[ref] += list
|
||||||
|
else
|
||||||
|
ATTR_LIST_REFS[ref] = list
|
||||||
|
end
|
||||||
|
end
|
||||||
content
|
content
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -69,6 +85,7 @@ module Jekyll::Spaceship
|
|||||||
handle_multi_rows(data)
|
handle_multi_rows(data)
|
||||||
handle_text_align(data)
|
handle_text_align(data)
|
||||||
handle_rowspan(data)
|
handle_rowspan(data)
|
||||||
|
handle_attr_list(data)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
rows.each do |row|
|
rows.each do |row|
|
||||||
@ -235,6 +252,52 @@ module Jekyll::Spaceship
|
|||||||
cell.set_attribute('style', style)
|
cell.set_attribute('style', style)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Examples:
|
||||||
|
# {:ref-name: .cls1 title="hello" }
|
||||||
|
# {: #id ref-name data="world" }
|
||||||
|
# {: #id title="hello" }
|
||||||
|
# {: .cls style="color: #333" }
|
||||||
|
def handle_attr_list(data)
|
||||||
|
cell = data.cell
|
||||||
|
content = cell.inner_html
|
||||||
|
# inline attribute list(IAL) handler
|
||||||
|
ial_handler = ->(list) do
|
||||||
|
list.scan(/(\S+)=("|')(.*?)\2|(\S+)/) do |attr|
|
||||||
|
key = attr[0]
|
||||||
|
val = attr[2]
|
||||||
|
single = attr[3]
|
||||||
|
if !key.nil?
|
||||||
|
val = (cell.get_attribute(key) || '') + val
|
||||||
|
cell.set_attribute(key, val)
|
||||||
|
elsif !single.nil?
|
||||||
|
if single.start_with? '#'
|
||||||
|
key = 'id'
|
||||||
|
val = single[1..-1]
|
||||||
|
elsif single.start_with? '.'
|
||||||
|
key = 'class'
|
||||||
|
val = cell.get_attribute(key) || ''
|
||||||
|
val += (val.size.zero? ? '' : ' ') + single[1..-1]
|
||||||
|
elsif ATTR_LIST_REFS.has_key? single
|
||||||
|
ial_handler.call ATTR_LIST_REFS[single]
|
||||||
|
end
|
||||||
|
unless key.nil?
|
||||||
|
cell.set_attribute(key, val)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
# handle attribute list
|
||||||
|
content.scan(ATTR_LIST_PATTERN) do |result|
|
||||||
|
ref = result[1]
|
||||||
|
list = result[2]
|
||||||
|
# handle inline attribute list
|
||||||
|
ial_handler.call list if ref.nil?
|
||||||
|
# remove attr_list
|
||||||
|
content = content.sub(result[0], '')
|
||||||
|
end
|
||||||
|
cell.inner_html = content
|
||||||
|
end
|
||||||
|
|
||||||
def handle_format(data)
|
def handle_format(data)
|
||||||
cell = data.cell
|
cell = data.cell
|
||||||
cvter = self.converter('markdown')
|
cvter = self.converter('markdown')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user