diff options
-rw-r--r-- | ChangeLog.txt | 6 | ||||
-rw-r--r-- | lib/erubis/enhancer.rb | 27 | ||||
-rw-r--r-- | test/test-enhancers.rb | 4 |
3 files changed, 29 insertions, 8 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt index 37b2558..4dc8609 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -2,6 +2,12 @@ .?lastupdate: $Date$ .?version: $Rev$ +: Rev.93 (2007-09-10) + .- [bugfix] PercentLineEnhancer#add_text() was very slow (now very fast) + +: Rev.92 (2007-07-19) + .- [release] 2.4.0 + : Rev.91 (2007-07-19) .- [enhance] RubyEvaluator#def_method() can take instance object as well was module object diff --git a/lib/erubis/enhancer.rb b/lib/erubis/enhancer.rb index 3b61975..b129a11 100644 --- a/lib/erubis/enhancer.rb +++ b/lib/erubis/enhancer.rb @@ -443,18 +443,33 @@ module Erubis "regard lines starting with '%' as program code" end - PERCENT_LINE_PATTERN = /(.*?)^\%(.*?\r?\n)/m - def add_text(src, text) - text.scan(PERCENT_LINE_PATTERN) do |txt, line| - super(src, txt) + pos = 0 + text2 = '' + text.scan(/^\%(.*?\r?\n)/) do + line = $1 + match = Regexp.last_match + len = match.begin(0) - pos + str = text[pos, len] + pos = match.end(0) + if text2.empty? + text2 = str + else + text2 << str + end if line[0] == ?% - super(src, line) + text2 << line else + super(src, text2) + text2 = '' add_stmt(src, line) end end - rest = $' || text + rest = pos == 0 ? text : $' # or $' || text + unless text2.empty? + text2 << rest if rest + rest = text2 + end super(src, rest) end diff --git a/test/test-enhancers.rb b/test/test-enhancers.rb index 5b9a47b..0b9e025 100644 --- a/test/test-enhancers.rb +++ b/test/test-enhancers.rb @@ -471,8 +471,8 @@ __END__ '; end _buf << '</table> <pre> - '; _buf << '% double percent - '; _buf << ' % spaced percent + % double percent + % spaced percent </pre> '; _buf.to_s |