erubis 2.3.1 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. data/{CHANGES → CHANGES.txt} +373 -3
  2. data/MIT-LICENSE +1 -1
  3. data/README.txt +6 -5
  4. data/benchmark/bench.rb +18 -11
  5. data/bin/erubis +3 -4
  6. data/contrib/erubis +3462 -5
  7. data/contrib/inline-require +54 -28
  8. data/doc/docstyle.css +25 -4
  9. data/doc/users-guide.html +814 -110
  10. data/doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html +209 -0
  11. data/doc-api/classes/ActionView.html +105 -0
  12. data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +14 -14
  13. data/doc-api/classes/Erubis/ArrayEnhancer.html +16 -16
  14. data/doc-api/classes/Erubis/Basic/Converter.html +36 -31
  15. data/doc-api/classes/Erubis/BiPatternEnhancer.html +16 -13
  16. data/doc-api/classes/Erubis/CGenerator.html +70 -70
  17. data/doc-api/classes/Erubis/Context.html +49 -49
  18. data/doc-api/classes/Erubis/Converter.html +30 -29
  19. data/doc-api/classes/Erubis/CppGenerator.html +382 -0
  20. data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +7 -7
  21. data/doc-api/classes/Erubis/Ecpp.html +126 -0
  22. data/doc-api/classes/Erubis/Engine.html +46 -43
  23. data/doc-api/classes/Erubis/ErboutEnhancer.html +16 -16
  24. data/doc-api/classes/Erubis/EscapeEnhancer.html +7 -7
  25. data/doc-api/classes/Erubis/EscapedEcpp.html +120 -0
  26. data/doc-api/classes/Erubis/Evaluator.html +22 -22
  27. data/doc-api/classes/Erubis/Generator.html +70 -70
  28. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +18 -15
  29. data/doc-api/classes/Erubis/Helpers/RailsFormHelper.html +787 -0
  30. data/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html +213 -0
  31. data/doc-api/classes/Erubis/Helpers/RailsHelper.html +103 -54
  32. data/doc-api/classes/Erubis/Helpers.html +6 -1
  33. data/doc-api/classes/Erubis/InterpolationEnhancer.html +42 -41
  34. data/doc-api/classes/Erubis/JavaGenerator.html +69 -69
  35. data/doc-api/classes/Erubis/JavascriptGenerator.html +79 -74
  36. data/doc-api/classes/Erubis/Main.html +49 -48
  37. data/doc-api/classes/Erubis/NoCodeEnhancer.html +35 -35
  38. data/doc-api/classes/Erubis/NoTextEnhancer.html +7 -7
  39. data/doc-api/classes/Erubis/OptimizedEruby.html +7 -7
  40. data/doc-api/classes/Erubis/OptimizedGenerator.html +84 -84
  41. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +7 -7
  42. data/doc-api/classes/Erubis/PI/Converter.html +23 -22
  43. data/doc-api/classes/Erubis/PI/Ec.html +7 -7
  44. data/doc-api/classes/Erubis/PI/Ecpp.html +166 -0
  45. data/doc-api/classes/Erubis/PI/Ejava.html +7 -7
  46. data/doc-api/classes/Erubis/PI/Ejavascript.html +7 -7
  47. data/doc-api/classes/Erubis/PI/Eperl.html +7 -7
  48. data/doc-api/classes/Erubis/PI/Ephp.html +7 -7
  49. data/doc-api/classes/Erubis/PI/Eruby.html +6 -6
  50. data/doc-api/classes/Erubis/PI/Escheme.html +7 -7
  51. data/doc-api/classes/Erubis/PI/TinyEruby.html +28 -27
  52. data/doc-api/classes/Erubis/PI.html +1 -0
  53. data/doc-api/classes/Erubis/PercentLineEnhancer.html +18 -29
  54. data/doc-api/classes/Erubis/PerlGenerator.html +63 -63
  55. data/doc-api/classes/Erubis/PhpGenerator.html +63 -63
  56. data/doc-api/classes/Erubis/PrefixedLineEnhancer.html +210 -0
  57. data/doc-api/classes/Erubis/PrefixedLineEruby.html +120 -0
  58. data/doc-api/classes/Erubis/PreprocessingEruby.html +183 -0
  59. data/doc-api/classes/Erubis/PreprocessingHelper.html +212 -0
  60. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +23 -23
  61. data/doc-api/classes/Erubis/PrintOutEnhancer.html +38 -38
  62. data/doc-api/classes/Erubis/RubyEvaluator.html +59 -22
  63. data/doc-api/classes/Erubis/RubyGenerator.html +53 -52
  64. data/doc-api/classes/Erubis/SchemeGenerator.html +70 -70
  65. data/doc-api/classes/Erubis/SimplifyEnhancer.html +10 -9
  66. data/doc-api/classes/Erubis/StdoutEnhancer.html +3 -3
  67. data/doc-api/classes/Erubis/StringBufferEnhancer.html +16 -16
  68. data/doc-api/classes/Erubis/TinyEruby.html +33 -33
  69. data/doc-api/classes/Erubis/XmlHelper.html +80 -15
  70. data/doc-api/classes/Erubis.html +25 -1
  71. data/doc-api/classes/Kernel.html +155 -0
  72. data/doc-api/created.rid +1 -1
  73. data/doc-api/files/README_txt.html +8 -8
  74. data/doc-api/files/erubis/context_rb.html +2 -2
  75. data/doc-api/files/erubis/converter_rb.html +3 -3
  76. data/doc-api/files/erubis/engine/ec_rb.html +2 -2
  77. data/doc-api/files/erubis/engine/ecpp_rb.html +115 -0
  78. data/doc-api/files/erubis/engine/ejava_rb.html +2 -2
  79. data/doc-api/files/erubis/engine/ejavascript_rb.html +2 -2
  80. data/doc-api/files/erubis/engine/enhanced_rb.html +2 -2
  81. data/doc-api/files/erubis/engine/eperl_rb.html +2 -2
  82. data/doc-api/files/erubis/engine/ephp_rb.html +2 -2
  83. data/doc-api/files/erubis/engine/eruby_rb.html +2 -2
  84. data/doc-api/files/erubis/engine/escheme_rb.html +2 -2
  85. data/doc-api/files/erubis/engine/optimized_rb.html +2 -2
  86. data/doc-api/files/erubis/engine_rb.html +2 -2
  87. data/doc-api/files/erubis/enhancer_rb.html +2 -2
  88. data/doc-api/files/erubis/error_rb.html +2 -2
  89. data/doc-api/files/erubis/evaluator_rb.html +2 -2
  90. data/doc-api/files/erubis/generator_rb.html +3 -3
  91. data/doc-api/files/erubis/helper_rb.html +2 -2
  92. data/doc-api/files/erubis/helpers/rails_form_helper_rb.html +107 -0
  93. data/doc-api/files/erubis/helpers/rails_helper_rb.html +3 -2
  94. data/doc-api/files/erubis/local-setting_rb.html +2 -2
  95. data/doc-api/files/erubis/main_rb.html +4 -2
  96. data/doc-api/files/erubis/preprocessing_rb.html +114 -0
  97. data/doc-api/files/erubis/tiny_rb.html +2 -2
  98. data/doc-api/files/erubis/util_rb.html +107 -0
  99. data/doc-api/files/erubis_rb.html +2 -2
  100. data/doc-api/fr_class_index.html +13 -0
  101. data/doc-api/fr_file_index.html +4 -0
  102. data/doc-api/fr_method_index.html +237 -179
  103. data/examples/basic/Makefile +7 -2
  104. data/examples/basic/example.ecpp +33 -0
  105. data/lib/erubis/context.rb +2 -3
  106. data/lib/erubis/converter.rb +17 -11
  107. data/lib/erubis/engine/ec.rb +2 -3
  108. data/lib/erubis/engine/ecpp.rb +113 -0
  109. data/lib/erubis/engine/ejava.rb +9 -10
  110. data/lib/erubis/engine/ejavascript.rb +14 -9
  111. data/lib/erubis/engine/enhanced.rb +7 -3
  112. data/lib/erubis/engine/eperl.rb +2 -3
  113. data/lib/erubis/engine/ephp.rb +2 -3
  114. data/lib/erubis/engine/eruby.rb +8 -8
  115. data/lib/erubis/engine/escheme.rb +2 -3
  116. data/lib/erubis/engine/optimized.rb +2 -3
  117. data/lib/erubis/engine.rb +13 -11
  118. data/lib/erubis/enhancer.rb +101 -34
  119. data/lib/erubis/error.rb +2 -3
  120. data/lib/erubis/evaluator.rb +27 -10
  121. data/lib/erubis/generator.rb +3 -4
  122. data/lib/erubis/helper.rb +14 -3
  123. data/lib/erubis/helpers/rails_form_helper.rb +197 -0
  124. data/lib/erubis/helpers/rails_helper.rb +219 -77
  125. data/lib/erubis/local-setting.rb +2 -3
  126. data/lib/erubis/main.rb +85 -60
  127. data/lib/erubis/preprocessing.rb +58 -0
  128. data/lib/erubis/tiny.rb +9 -9
  129. data/lib/erubis/util.rb +22 -0
  130. data/lib/erubis.rb +4 -4
  131. data/test/assert-text-equal.rb +2 -3
  132. data/test/data/users-guide/bufvar-example.rb +10 -0
  133. data/test/data/users-guide/bufvar-example.result +17 -0
  134. data/test/data/users-guide/def_method.rb +14 -0
  135. data/test/data/users-guide/def_method.result +3 -0
  136. data/test/data/users-guide/example.ecpp +30 -0
  137. data/test/data/users-guide/example1.rb +1 -0
  138. data/test/data/users-guide/example_c.result +22 -19
  139. data/test/data/users-guide/fasteruby-example.rb +8 -0
  140. data/test/data/users-guide/fasteruby-example.result +18 -0
  141. data/test/data/users-guide/main_program1.rb +8 -0
  142. data/test/data/users-guide/main_program1.result +6 -0
  143. data/test/data/users-guide/main_program2.rb +8 -0
  144. data/test/data/users-guide/main_program2.result +6 -0
  145. data/test/data/users-guide/percentline-example.rhtml +3 -1
  146. data/test/data/users-guide/percentline_example.result +5 -3
  147. data/test/data/users-guide/prefixedline-example.rb +9 -0
  148. data/test/data/users-guide/prefixedline-example.rhtml +6 -0
  149. data/test/data/users-guide/prefixedline_example.result +9 -0
  150. data/test/data/users-guide/tail_260.result +4 -0
  151. data/test/data/users-guide/tailnewline.rhtml +3 -0
  152. data/test/data/users-guide/template1.rhtml +4 -0
  153. data/test/data/users-guide/template2.rhtml +4 -0
  154. data/test/test-engines.rb +88 -5
  155. data/test/test-enhancers.rb +83 -6
  156. data/test/test-erubis.rb +115 -11
  157. data/test/test-index-cgi.rb +191 -0
  158. data/test/test-main.rb +143 -31
  159. data/test/test-users-guide.rb +20 -3
  160. data/test/test.rb +18 -3
  161. data/test/testutil.rb +44 -8
  162. metadata +104 -67
  163. data/contrib/action_view_base_rb.patch +0 -23
@@ -1,10 +1,9 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
- require 'abstract'
6
+ require 'erubis/util'
8
7
 
9
8
  module Erubis
10
9
 
@@ -36,6 +35,7 @@ module Erubis
36
35
  @preamble.nil? ? add_preamble(codebuf) : (@preamble && (codebuf << @preamble))
37
36
  convert_input(codebuf, input)
38
37
  @postamble.nil? ? add_postamble(codebuf) : (@postamble && (codebuf << @postamble))
38
+ @_proc = nil # clear cached proc object
39
39
  return codebuf # or codebuf.join()
40
40
  end
41
41
 
@@ -110,10 +110,10 @@ module Erubis
110
110
 
111
111
  ## return regexp of pattern to parse eRuby script
112
112
  def pattern_regexp(pattern)
113
- prefix, postfix = pattern.split() # '<% %>' => '<%', '%>'
114
- #return /(.*?)(^[ \t]*)?#{prefix}(=+|\#)?(.*?)-?#{postfix}([ \t]*\r?\n)?/m
115
- #return /(^[ \t]*)?#{prefix}(=+|\#)?(.*?)-?#{postfix}([ \t]*\r?\n)?/m
116
- return /#{prefix}(=+|-|\#)?(.*?)-?#{postfix}([ \t]*\r?\n)?/m
113
+ @prefix, @postfix = pattern.split() # '<% %>' => '<%', '%>'
114
+ #return /(.*?)(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m
115
+ #return /(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m
116
+ return /#{@prefix}(=+|-|\#|%)?(.*?)([-=])?#{@postfix}([ \t]*\r?\n)?/m
117
117
  end
118
118
  module_function :pattern_regexp
119
119
 
@@ -129,7 +129,7 @@ module Erubis
129
129
  regexp = pat.nil? || pat == '<% %>' ? DEFAULT_REGEXP : pattern_regexp(pat)
130
130
  pos = 0
131
131
  is_bol = true # is beginning of line
132
- input.scan(regexp) do |indicator, code, rspace|
132
+ input.scan(regexp) do |indicator, code, tailch, rspace|
133
133
  match = Regexp.last_match()
134
134
  len = match.begin(0) - pos
135
135
  text = input[pos, len]
@@ -141,6 +141,7 @@ module Erubis
141
141
  ## * when '<%= %>', do nothing
142
142
  ## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
143
143
  if ch == ?= # <%= %>
144
+ rspace = nil if tailch && !tailch.empty?
144
145
  add_text(src, lspace) if lspace
145
146
  add_expr(src, code, indicator)
146
147
  add_text(src, rspace) if rspace
@@ -153,6 +154,9 @@ module Erubis
153
154
  add_stmt(src, "\n" * n)
154
155
  add_text(src, rspace) if rspace
155
156
  end
157
+ elsif ch == ?% # <%% %>
158
+ s = "#{lspace}#{@prefix||='<%'}#{code}#{tailch}#{@postfix||='%>'}#{rspace}"
159
+ add_text(src, s)
156
160
  else # <% %>
157
161
  if @trim && lspace && rspace
158
162
  add_stmt(src, "#{lspace}#{code}#{rspace}")
@@ -163,7 +167,8 @@ module Erubis
163
167
  end
164
168
  end
165
169
  end
166
- rest = $' || input # add input when no matched
170
+ #rest = $' || input # ruby1.8
171
+ rest = pos == 0 ? input : input[pos..-1] # ruby1.9
167
172
  add_text(src, rest)
168
173
  end
169
174
 
@@ -259,7 +264,8 @@ module Erubis
259
264
  add_pi_expr(codebuf, expr1 || expr2, indicator1 || indicator2)
260
265
  end
261
266
  end
262
- rest = $' || input
267
+ #rest = $' || input # ruby1.8
268
+ rest = pos == 0 ? input : input[pos..-1] # ruby1.9
263
269
  add_text(codebuf, rest)
264
270
  end
265
271
 
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/engine'
@@ -0,0 +1,113 @@
1
+ ##
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
4
+ ##
5
+
6
+ require 'erubis/engine'
7
+ require 'erubis/enhancer'
8
+
9
+
10
+ module Erubis
11
+
12
+
13
+ module CppGenerator
14
+ include Generator
15
+
16
+ def self.supported_properties() # :nodoc:
17
+ return [
18
+ [:indent, '', "indent spaces (ex. ' ')"],
19
+ [:bufvar, '_buf', "buffer variable name"],
20
+ ]
21
+ end
22
+
23
+ def init_generator(properties={})
24
+ super
25
+ @escapefunc ||= "escape"
26
+ @indent = properties[:indent] || ''
27
+ @bufvar = properties[:bufvar] || '_buf'
28
+ end
29
+
30
+ def add_preamble(src)
31
+ src << "#line 1 \"#{self.filename}\"\n" if self.filename
32
+ end
33
+
34
+ def escape_text(text)
35
+ @@table_ ||= { "\r"=>"\\r", "\n"=>"\\n", "\t"=>"\\t", '"'=>'\\"', "\\"=>"\\\\" }
36
+ text.gsub!(/[\r\n\t"\\]/) { |m| @@table_[m] }
37
+ return text
38
+ end
39
+
40
+ def escaped_expr(code)
41
+ return "#{@escapefunc}(#{code.strip})"
42
+ end
43
+
44
+ def add_text(src, text)
45
+ return if text.empty?
46
+ src << (src.empty? || src[-1] == ?\n ? @indent : ' ')
47
+ src << "_buf << "
48
+ i = 0
49
+ text.each_line do |line|
50
+ src << "\n" << @indent << " " if i > 0
51
+ i += 1
52
+ src << '"' << escape_text(line) << '"'
53
+ end
54
+ src << ";" #<< (text[-1] == ?\n ? "\n" : "")
55
+ src << "\n" if text[-1] == ?\n
56
+ end
57
+
58
+ def add_stmt(src, code)
59
+ src << code
60
+ end
61
+
62
+ def add_expr_literal(src, code)
63
+ src << @indent if src.empty? || src[-1] == ?\n
64
+ src << " _buf << (" << code.strip << ");"
65
+ end
66
+
67
+ def add_expr_escaped(src, code)
68
+ src << @indent if src.empty? || src[-1] == ?\n
69
+ src << ' ' << escaped_expr(code) << ';'
70
+ end
71
+
72
+ def add_expr_debug(src, code)
73
+ code.strip!
74
+ src << @indent if src.empty? || src[-1] == ?\n
75
+ src << " std::cerr << \"*** debug: #{code.gsub(/(")/, '\\\&')}=\" << (#{code});"
76
+ end
77
+
78
+ def add_postamble(src)
79
+ # empty
80
+ end
81
+
82
+ end
83
+
84
+
85
+ ##
86
+ ## engine for C
87
+ ##
88
+ class Ecpp < Basic::Engine
89
+ include CppGenerator
90
+ end
91
+
92
+
93
+ class EscapedEcpp < Ecpp
94
+ include EscapeEnhancer
95
+ end
96
+
97
+
98
+ #class XmlEcpp < Ecpp
99
+ # include EscapeEnhancer
100
+ #end
101
+
102
+ class PI::Ecpp < PI::Engine
103
+ include CppGenerator
104
+
105
+ def init_converter(properties={})
106
+ @pi = 'cpp'
107
+ super(properties)
108
+ end
109
+
110
+ end
111
+
112
+
113
+ end
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/engine'
@@ -17,7 +16,7 @@ module Erubis
17
16
  def self.supported_properties() # :nodoc:
18
17
  return [
19
18
  [:indent, '', "indent spaces (ex. ' ')"],
20
- [:buf, '_buf', "output buffer name"],
19
+ [:bufvar, '_buf', "output buffer variable name"],
21
20
  [:bufclass, 'StringBuffer', "output buffer class (ex. 'StringBuilder')"],
22
21
  ]
23
22
  end
@@ -26,12 +25,12 @@ module Erubis
26
25
  super
27
26
  @escapefunc ||= 'escape'
28
27
  @indent = properties[:indent] || ''
29
- @buf = properties[:buf] || '_buf'
28
+ @bufvar = properties[:bufvar] || '_buf'
30
29
  @bufclass = properties[:bufclass] || 'StringBuffer'
31
30
  end
32
31
 
33
32
  def add_preamble(src)
34
- src << "#{@indent}#{@bufclass} #{@buf} = new #{@bufclass}();"
33
+ src << "#{@indent}#{@bufclass} #{@bufvar} = new #{@bufclass}();"
35
34
  end
36
35
 
37
36
  def escape_text(text)
@@ -42,7 +41,7 @@ module Erubis
42
41
  def add_text(src, text)
43
42
  return if text.empty?
44
43
  src << (src.empty? || src[-1] == ?\n ? @indent : ' ')
45
- src << @buf << ".append("
44
+ src << @bufvar << ".append("
46
45
  i = 0
47
46
  text.each_line do |line|
48
47
  src << "\n" << @indent << ' + ' if i > 0
@@ -59,7 +58,7 @@ module Erubis
59
58
  def add_expr_literal(src, code)
60
59
  src << @indent if src.empty? || src[-1] == ?\n
61
60
  code.strip!
62
- src << " #{@buf}.append(#{code});"
61
+ src << " #{@bufvar}.append(#{code});"
63
62
  end
64
63
 
65
64
  def add_expr_escaped(src, code)
@@ -74,8 +73,8 @@ module Erubis
74
73
 
75
74
  def add_postamble(src)
76
75
  src << "\n" if src[-1] == ?;
77
- src << @indent << "return " << @buf << ".toString();\n"
78
- #src << @indent << "System.out.print(" << @buf << ".toString());\n"
76
+ src << @indent << "return " << @bufvar << ".toString();\n"
77
+ #src << @indent << "System.out.print(" << @bufvar << ".toString());\n"
79
78
  end
80
79
 
81
80
  end
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/engine'
@@ -17,7 +16,8 @@ module Erubis
17
16
  def self.supported_properties() # :nodoc:
18
17
  list = []
19
18
  #list << [:indent, '', "indent spaces (ex. ' ')"]
20
- #list << [:buf, '_buf', "output buffer name"]
19
+ #list << [:bufvar, '_buf', "output buffer variable name"]
20
+ list << [:docwrite, true, "use 'document.write()' when true"]
21
21
  return list
22
22
  end
23
23
 
@@ -25,11 +25,12 @@ module Erubis
25
25
  super
26
26
  @escapefunc ||= 'escape'
27
27
  @indent = properties[:indent] || ''
28
- @buf = properties[:out] || '_buf'
28
+ @bufvar = properties[:bufvar] || '_buf'
29
+ @docwrite = properties[:docwrite] != false # '!= false' will be removed in the next release
29
30
  end
30
31
 
31
32
  def add_preamble(src)
32
- src << "#{@indent}var #{@buf} = [];"
33
+ src << "#{@indent}var #{@bufvar} = [];"
33
34
  end
34
35
 
35
36
  def escape_text(text)
@@ -44,7 +45,7 @@ module Erubis
44
45
  def add_text(src, text)
45
46
  return if text.empty?
46
47
  add_indent(src, @indent)
47
- src << @buf << '.push("'
48
+ src << @bufvar << '.push("'
48
49
  s = escape_text(text)
49
50
  if s[-1] == ?\n
50
51
  s[-2, 2] = ''
@@ -61,7 +62,7 @@ module Erubis
61
62
  def add_expr_literal(src, code)
62
63
  add_indent(src, @indent)
63
64
  code.strip!
64
- src << "#{@buf}.push(#{code});"
65
+ src << "#{@bufvar}.push(#{code});"
65
66
  end
66
67
 
67
68
  def add_expr_escaped(src, code)
@@ -76,7 +77,11 @@ module Erubis
76
77
 
77
78
  def add_postamble(src)
78
79
  src << "\n" if src[-1] == ?;
79
- src << @indent << 'document.write(' << @buf << ".join(\"\"));\n"
80
+ if @docwrite
81
+ src << @indent << 'document.write(' << @bufvar << ".join(\"\"));\n"
82
+ else
83
+ src << @indent << @bufvar << ".join(\"\");\n"
84
+ end
80
85
  end
81
86
 
82
87
  end
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/enhancer'
@@ -104,6 +103,11 @@ module Erubis
104
103
  end
105
104
 
106
105
 
106
+ class PrefixedLineEruby < Eruby
107
+ include PrefixedLineEnhancer
108
+ end
109
+
110
+
107
111
  class HeaderFooterEruby < Eruby
108
112
  include HeaderFooterEnhancer
109
113
  end
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/engine'
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/engine'
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/engine'
@@ -22,6 +21,7 @@ module Erubis
22
21
  def init_generator(properties={})
23
22
  super
24
23
  @escapefunc ||= "Erubis::XmlHelper.escape_xml"
24
+ @bufvar = properties[:bufvar] || "_buf"
25
25
  end
26
26
 
27
27
  def self.supported_properties() # :nodoc:
@@ -38,12 +38,12 @@ module Erubis
38
38
 
39
39
  #--
40
40
  #def add_preamble(src)
41
- # src << "_buf = [];"
41
+ # src << "#{@bufvar} = [];"
42
42
  #end
43
43
  #++
44
44
 
45
45
  def add_text(src, text)
46
- src << " _buf << '" << escape_text(text) << "';" unless text.empty?
46
+ src << " #{@bufvar} << '" << escape_text(text) << "';" unless text.empty?
47
47
  end
48
48
 
49
49
  def add_stmt(src, code)
@@ -53,11 +53,11 @@ module Erubis
53
53
  end
54
54
 
55
55
  def add_expr_literal(src, code)
56
- src << ' _buf << (' << code << ').to_s;'
56
+ src << " #{@bufvar} << (" << code << ').to_s;'
57
57
  end
58
58
 
59
59
  def add_expr_escaped(src, code)
60
- src << ' _buf << ' << escaped_expr(code) << ';'
60
+ src << " #{@bufvar} << " << escaped_expr(code) << ';'
61
61
  end
62
62
 
63
63
  def add_expr_debug(src, code)
@@ -68,7 +68,7 @@ module Erubis
68
68
 
69
69
  #--
70
70
  #def add_postamble(src)
71
- # src << "\n_buf.join\n"
71
+ # src << "\n#{@bufvar}.join\n"
72
72
  #end
73
73
  #++
74
74
 
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
  require 'erubis/engine'
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
 
data/lib/erubis/engine.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  ##
2
- ## $Rev: 77 $
3
- ## $Release: 2.3.1 $
4
- ## copyright(c) 2006-2007 kuwata-lab.com all rights reserved.
2
+ ## $Release: 2.7.0 $
3
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
4
  ##
6
5
 
7
6
 
@@ -42,21 +41,24 @@ module Erubis
42
41
 
43
42
  ##
44
43
  ## load file, write cache file, and return engine object.
45
- ## this method create cache file (filename + '.cache') automatically.
44
+ ## this method create code cache file automatically.
45
+ ## cachefile name can be specified with properties[:cachename],
46
+ ## or filname + 'cache' is used as default.
46
47
  ##
47
48
  def self.load_file(filename, properties={})
48
- cachename = filename + '.cache'
49
+ cachename = properties[:cachename] || (filename + '.cache')
49
50
  properties[:filename] = filename
50
- if test(?f, cachename) && File.mtime(filename) <= File.mtime(cachename)
51
+ timestamp = File.mtime(filename)
52
+ if test(?f, cachename) && timestamp == File.mtime(cachename)
51
53
  engine = self.new(nil, properties)
52
54
  engine.src = File.read(cachename)
53
55
  else
54
- input = File.open(filename, 'rb') { |f| f.read }
56
+ input = File.open(filename, 'rb') {|f| f.read }
55
57
  engine = self.new(input, properties)
56
- File.open(cachename, 'w') do |f|
57
- f.flock(File::LOCK_EX)
58
- f.write(engine.src)
59
- end
58
+ tmpname = cachename + rand().to_s[1,8]
59
+ File.open(tmpname, 'wb') {|f| f.write(engine.src) }
60
+ File.rename(tmpname, cachename)
61
+ File.utime(timestamp, timestamp, cachename)
60
62
  end
61
63
  engine.src.untaint # ok?
62
64
  return engine