mirror of
https://github.com/SharpeTronics/jekyll-spaceship.git
synced 2025-12-16 00:03:21 -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
|
||||
class TableProcessor < Processor
|
||||
ATTR_LIST_PATTERN = /((?<!\\)\{:(?:([A-Za-z]\S*):)?(.*?)(?<!\\)\})/
|
||||
ATTR_LIST_REFS = {}
|
||||
|
||||
def on_handle_markdown(content)
|
||||
# pre-handle reference-style links
|
||||
references = {}
|
||||
@ -42,6 +45,19 @@ module Jekyll::Spaceship
|
||||
next if result == replace
|
||||
content = content.gsub(result, replace)
|
||||
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
|
||||
end
|
||||
|
||||
@ -69,6 +85,7 @@ module Jekyll::Spaceship
|
||||
handle_multi_rows(data)
|
||||
handle_text_align(data)
|
||||
handle_rowspan(data)
|
||||
handle_attr_list(data)
|
||||
end
|
||||
end
|
||||
rows.each do |row|
|
||||
@ -235,6 +252,52 @@ module Jekyll::Spaceship
|
||||
cell.set_attribute('style', style)
|
||||
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)
|
||||
cell = data.cell
|
||||
cvter = self.converter('markdown')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user