From b7b1f640798a295a4d86f020a6888181cd9ad915 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Mon, 19 Jan 2015 20:38:48 +0000 Subject: [PATCH] Faster textile table parsing by using a single scan instead of a regexp matching for each cell (#18883). git-svn-id: http://svn.redmine.org/redmine/trunk@13918 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redcloth3.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/redcloth3.rb b/lib/redcloth3.rb index 0386589f6..eacd6d920 100644 --- a/lib/redcloth3.rb +++ b/lib/redcloth3.rb @@ -529,13 +529,13 @@ class RedCloth3 < String fullrow.each_line do |row| ratts, row = pba( $1, 'tr' ), $2 if row =~ /^(#{A}#{C}\. )(.*)/m cells = [] - row.split( /(\|)(?![^\[\|]*\]\])/ )[1..-2].each do |cell| - next if cell == '|' + # the regexp prevents wiki links with a | from being cut as cells + row.scan(/\|(_?#{S}#{A}#{C}\. ?)?((\[\[[^|\]]*\|[^|\]]*\]\]|[^|])*?)(?=\|)/) do |modifiers, cell| ctyp = 'd' - ctyp = 'h' if cell =~ /^_/ + ctyp = 'h' if modifiers && modifiers =~ /^_/ catts = nil - catts, cell = pba( $1, 'td' ), $2 if cell =~ /^(_?#{S}#{A}#{C}\. ?)(.*)/ + catts = pba( modifiers, 'td' ) if modifiers catts = shelve( catts ) if catts cells << "\t\t\t#{ cell }" -- 2.39.5