summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormakoto kuwata <kwa@kuwata-lab.com>2007-09-10 07:23:59 +0000
committermakoto kuwata <kwa@kuwata-lab.com>2007-09-10 07:23:59 +0000
commit5cdc7a11e351e6322fb1a4eb01532e49cdb7c804 (patch)
tree8ee5b319d4a50d36bfdf33ceb7ee1b320b47b5d6
parent204983a9e68b4d0be44842a4f98fc36d1aced035 (diff)
downloaderubis-5cdc7a11e351e6322fb1a4eb01532e49cdb7c804.tar.gz
- [bugfix] PercentLineEnhancer#add_text() was very slow (now very fast)
-rw-r--r--ChangeLog.txt6
-rw-r--r--lib/erubis/enhancer.rb27
-rw-r--r--test/test-enhancers.rb4
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