erubis 2.3.1 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
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