perf: match markdown table more exactly

This commit is contained in:
jeffreytse 2020-07-01 23:56:55 +08:00
parent bf641a67f6
commit 40103470cd

View File

@ -14,9 +14,9 @@ module Jekyll::Spaceship
references[ref_name] = ref_value references[ref_name] = ref_value
end end
if references.size > 0 if references.size > 0
content.scan(/.*(?<!\\)\|.*/) do |result| content.scan(/[^\n]*(?<!\\)\|[^\n]*/) do |result|
references.each do |key, val| references.each do |key, val|
replace = result.gsub(/\[(.*)\]\s*\[#{key}\]/, "[\1](#{val})") replace = result.gsub(/\[([^\n]*)\]\s*\[#{key}\]/, "[\1](#{val})")
next if result == replace next if result == replace
content = content.gsub(result, replace) content = content.gsub(result, replace)
end end
@ -24,15 +24,15 @@ module Jekyll::Spaceship
end end
# pre-handle row-span # pre-handle row-span
content = content.gsub(/(?<!\\)(\|.*\\\s*)\|\s*\n/, "\\1\n") content = content.gsub(/(?<!\\)(\|[^\n]*\\\s*)\|\s*\n/, "\\1\n")
# escape | and : # escape | and :
content = content.gsub(/\|(?=\|)/, '\\|') content = content.gsub(/\|(?=\|)/, '\\|')
.gsub(/\\:(?=.*?(?<!\\)\|)/, '\\\\\\\\:') .gsub(/\\:(?=[^\n]*?(?<!\\)\|)/, '\\\\\\\\:')
.gsub(/((?<!\\)\|.*?)(\\:)/, '\1\\\\\\\\:') .gsub(/((?<!\\)\|[^\n]*?)(\\:)/, '\1\\\\\\\\:')
# escape * and _ and $ etc. # escape * and _ and $ etc.
content.scan(/.*(?<!\\)\|.*/) do |result| content.scan(/[^\n]*(?<!\\)\|[^\n]*/) do |result|
replace = result.gsub( replace = result.gsub(
/(?<!(?<!\\)\\)(\*|\$|\[|\(|\"|_)/, /(?<!(?<!\\)\\)(\*|\$|\[|\(|\"|_)/,
'\\\\\\\\\1') '\\\\\\\\\1')