erubis 2.6.6 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. data/CHANGES.txt +79 -3
  2. data/MIT-LICENSE +1 -1
  3. data/README.txt +2 -2
  4. data/benchmark/bench.rb +2 -2
  5. data/bin/erubis +2 -2
  6. data/contrib/erubis +293 -155
  7. data/contrib/inline-require +2 -2
  8. data/doc-api/classes/Erubis.html +10 -1
  9. data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +12 -12
  10. data/doc-api/classes/Erubis/ArrayEnhancer.html +14 -14
  11. data/doc-api/classes/Erubis/Basic/Converter.html +24 -24
  12. data/doc-api/classes/Erubis/BiPatternEnhancer.html +12 -12
  13. data/doc-api/classes/Erubis/CGenerator.html +60 -60
  14. data/doc-api/classes/Erubis/Context.html +42 -42
  15. data/doc-api/classes/Erubis/Converter.html +27 -27
  16. data/doc-api/classes/Erubis/CppGenerator.html +382 -0
  17. data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +7 -7
  18. data/doc-api/classes/Erubis/Ecpp.html +126 -0
  19. data/doc-api/classes/Erubis/Engine.html +36 -36
  20. data/doc-api/classes/Erubis/ErboutEnhancer.html +14 -14
  21. data/doc-api/classes/Erubis/EscapeEnhancer.html +6 -6
  22. data/doc-api/classes/Erubis/EscapedEcpp.html +120 -0
  23. data/doc-api/classes/Erubis/Evaluator.html +19 -19
  24. data/doc-api/classes/Erubis/Generator.html +60 -60
  25. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +14 -14
  26. data/doc-api/classes/Erubis/Helpers/RailsFormHelper.html +150 -150
  27. data/doc-api/classes/Erubis/Helpers/RailsHelper.html +49 -49
  28. data/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html +24 -24
  29. data/doc-api/classes/Erubis/InterpolationEnhancer.html +38 -39
  30. data/doc-api/classes/Erubis/JavaGenerator.html +60 -60
  31. data/doc-api/classes/Erubis/JavascriptGenerator.html +66 -66
  32. data/doc-api/classes/Erubis/Main.html +22 -22
  33. data/doc-api/classes/Erubis/NoCodeEnhancer.html +30 -30
  34. data/doc-api/classes/Erubis/NoTextEnhancer.html +6 -6
  35. data/doc-api/classes/Erubis/OptimizedEruby.html +6 -6
  36. data/doc-api/classes/Erubis/OptimizedGenerator.html +72 -72
  37. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +6 -6
  38. data/doc-api/classes/Erubis/PI.html +1 -0
  39. data/doc-api/classes/Erubis/PI/Converter.html +18 -18
  40. data/doc-api/classes/Erubis/PI/Ec.html +6 -6
  41. data/doc-api/classes/Erubis/PI/Ecpp.html +166 -0
  42. data/doc-api/classes/Erubis/PI/Ejava.html +6 -6
  43. data/doc-api/classes/Erubis/PI/Ejavascript.html +6 -6
  44. data/doc-api/classes/Erubis/PI/Eperl.html +6 -6
  45. data/doc-api/classes/Erubis/PI/Ephp.html +6 -6
  46. data/doc-api/classes/Erubis/PI/Eruby.html +7 -7
  47. data/doc-api/classes/Erubis/PI/Escheme.html +6 -6
  48. data/doc-api/classes/Erubis/PI/TinyEruby.html +24 -24
  49. data/doc-api/classes/Erubis/PercentLineEnhancer.html +18 -34
  50. data/doc-api/classes/Erubis/PerlGenerator.html +54 -54
  51. data/doc-api/classes/Erubis/PhpGenerator.html +54 -54
  52. data/doc-api/classes/Erubis/PrefixedLineEnhancer.html +210 -0
  53. data/doc-api/classes/Erubis/PrefixedLineEruby.html +120 -0
  54. data/doc-api/classes/Erubis/PreprocessingEruby.html +12 -12
  55. data/doc-api/classes/Erubis/PreprocessingHelper.html +22 -22
  56. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +20 -20
  57. data/doc-api/classes/Erubis/PrintOutEnhancer.html +33 -33
  58. data/doc-api/classes/Erubis/RubyEvaluator.html +18 -18
  59. data/doc-api/classes/Erubis/RubyGenerator.html +59 -58
  60. data/doc-api/classes/Erubis/SchemeGenerator.html +60 -60
  61. data/doc-api/classes/Erubis/SimplifyEnhancer.html +7 -7
  62. data/doc-api/classes/Erubis/StdoutEnhancer.html +13 -13
  63. data/doc-api/classes/Erubis/StringBufferEnhancer.html +14 -14
  64. data/doc-api/classes/Erubis/TinyEruby.html +24 -24
  65. data/doc-api/classes/Erubis/XmlHelper.html +30 -30
  66. data/doc-api/classes/Kernel.html +155 -0
  67. data/doc-api/created.rid +1 -1
  68. data/doc-api/files/README_txt.html +3 -3
  69. data/doc-api/files/erubis/context_rb.html +1 -1
  70. data/doc-api/files/erubis/converter_rb.html +3 -3
  71. data/doc-api/files/erubis/engine/ec_rb.html +1 -1
  72. data/doc-api/files/erubis/engine/ecpp_rb.html +115 -0
  73. data/doc-api/files/erubis/engine/ejava_rb.html +2 -2
  74. data/doc-api/files/erubis/engine/ejavascript_rb.html +2 -2
  75. data/doc-api/files/erubis/engine/enhanced_rb.html +2 -2
  76. data/doc-api/files/erubis/engine/eperl_rb.html +1 -1
  77. data/doc-api/files/erubis/engine/ephp_rb.html +1 -1
  78. data/doc-api/files/erubis/engine/eruby_rb.html +2 -2
  79. data/doc-api/files/erubis/engine/escheme_rb.html +1 -1
  80. data/doc-api/files/erubis/engine/optimized_rb.html +1 -1
  81. data/doc-api/files/erubis/engine_rb.html +2 -2
  82. data/doc-api/files/erubis/enhancer_rb.html +2 -2
  83. data/doc-api/files/erubis/error_rb.html +1 -1
  84. data/doc-api/files/erubis/evaluator_rb.html +1 -1
  85. data/doc-api/files/erubis/generator_rb.html +3 -3
  86. data/doc-api/files/erubis/helper_rb.html +1 -1
  87. data/doc-api/files/erubis/helpers/rails_form_helper_rb.html +1 -1
  88. data/doc-api/files/erubis/helpers/rails_helper_rb.html +1 -1
  89. data/doc-api/files/erubis/local-setting_rb.html +1 -1
  90. data/doc-api/files/erubis/main_rb.html +4 -2
  91. data/doc-api/files/erubis/preprocessing_rb.html +1 -1
  92. data/doc-api/files/erubis/tiny_rb.html +1 -1
  93. data/doc-api/files/erubis/util_rb.html +107 -0
  94. data/doc-api/files/erubis_rb.html +2 -2
  95. data/doc-api/fr_class_index.html +7 -0
  96. data/doc-api/fr_file_index.html +2 -0
  97. data/doc-api/fr_method_index.html +237 -223
  98. data/doc/docstyle.css +25 -4
  99. data/doc/users-guide.html +286 -21
  100. data/examples/basic/Makefile +7 -2
  101. data/examples/basic/example.ecpp +33 -0
  102. data/lib/erubis.rb +4 -3
  103. data/lib/erubis/context.rb +2 -2
  104. data/lib/erubis/converter.rb +3 -3
  105. data/lib/erubis/engine.rb +8 -8
  106. data/lib/erubis/engine/ec.rb +2 -2
  107. data/lib/erubis/engine/ecpp.rb +113 -0
  108. data/lib/erubis/engine/ejava.rb +9 -9
  109. data/lib/erubis/engine/ejavascript.rb +9 -9
  110. data/lib/erubis/engine/enhanced.rb +7 -2
  111. data/lib/erubis/engine/eperl.rb +2 -2
  112. data/lib/erubis/engine/ephp.rb +2 -2
  113. data/lib/erubis/engine/eruby.rb +8 -7
  114. data/lib/erubis/engine/escheme.rb +2 -2
  115. data/lib/erubis/engine/optimized.rb +2 -2
  116. data/lib/erubis/enhancer.rb +70 -27
  117. data/lib/erubis/error.rb +2 -2
  118. data/lib/erubis/evaluator.rb +2 -2
  119. data/lib/erubis/generator.rb +3 -3
  120. data/lib/erubis/helper.rb +2 -2
  121. data/lib/erubis/helpers/rails_form_helper.rb +2 -2
  122. data/lib/erubis/helpers/rails_helper.rb +2 -2
  123. data/lib/erubis/local-setting.rb +2 -2
  124. data/lib/erubis/main.rb +31 -4
  125. data/lib/erubis/preprocessing.rb +2 -2
  126. data/lib/erubis/tiny.rb +2 -2
  127. data/lib/erubis/util.rb +22 -0
  128. data/test/assert-text-equal.rb +2 -2
  129. data/test/data/users-guide/bufvar-example.rb +10 -0
  130. data/test/data/users-guide/bufvar-example.result +17 -0
  131. data/test/data/users-guide/example.ecpp +30 -0
  132. data/test/data/users-guide/example_c.result +22 -19
  133. data/test/data/users-guide/fasteruby-example.rb +8 -0
  134. data/test/data/users-guide/fasteruby-example.result +18 -0
  135. data/test/data/users-guide/percentline-example.rhtml +3 -1
  136. data/test/data/users-guide/percentline_example.result +5 -3
  137. data/test/data/users-guide/prefixedline-example.rb +9 -0
  138. data/test/data/users-guide/prefixedline-example.rhtml +6 -0
  139. data/test/data/users-guide/prefixedline_example.result +9 -0
  140. data/test/test-engines.rb +58 -2
  141. data/test/test-enhancers.rb +51 -2
  142. data/test/test-erubis.rb +14 -10
  143. data/test/test-index-cgi.rb +191 -0
  144. data/test/test-main.rb +35 -4
  145. data/test/test-users-guide.rb +18 -2
  146. data/test/test.rb +18 -2
  147. data/test/testutil.rb +22 -7
  148. metadata +30 -24
@@ -1,7 +1,83 @@
1
1
  # -*- coding: utf-8 -*-
2
- # $Release: 2.6.6 $
3
- # copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2
+ # $Release: 2.7.0 $
3
+ # copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
4
4
 
5
+ - release: 2.7.0
6
+ date: 2011-04-01
7
+ enhancements:
8
+
9
+ - |
10
+ New option ':bufvar' supported to specify buffer variable name.
11
+
12
+ ex:
13
+ input = "Hello <%= name %>!"
14
+ eruby = Erubis::Eruby.new(input)
15
+ puts eruby.src
16
+ #=> _buf = ''; _buf << "Hello "; _buf << ( name ).to_s; _buf << '!';
17
+
18
+ eruby = Erubis::Eruby.new(input, :bufvar=>'@_out')
19
+ puts eruby.src
20
+ #=> @_out = ''; @_out << 'Hello '; @_out << ( name ).to_s; @_out << '!';
21
+
22
+ - |
23
+ New enhancer 'PrefixedLineEnhancer' which is a customizable version
24
+ of PercentLineEnhancer.
25
+ The difference between PrefixedLineEnhancer and PercentLineEnhancer is:
26
+ * You can indent Ruby statetment lines starting with '%'
27
+ * You can specify prefix character by :prefixchar option.
28
+
29
+ ex:
30
+ class MyEruby < Erubis::Eruby
31
+ include Erubis::PrefixedLineEnhancer
32
+ end
33
+ input = <<END
34
+ <ul>
35
+ % for item in @items
36
+ <li><%= item %></li>
37
+ % end
38
+ %% you can indent '%' lines
39
+ </ul>
40
+ END
41
+ eruby = MyEruby.new(input, :prefixchar=>'%') # default '%'
42
+ puts eruby.src
43
+
44
+ output:
45
+ _buf = ''; _buf << '<ul>
46
+ '; for item in @items
47
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
48
+ '; end
49
+ % you can indent '%' lines
50
+ _buf << '</ul>
51
+ ';
52
+ _buf.to_s
53
+
54
+ - |
55
+ Add helper CGI script. See 'public_html/README.txt' for details.
56
+
57
+ - |
58
+ Rubinius is supported as first-class Ruby implementation.
59
+
60
+ - |
61
+ C++ support. Try '-l cpp' command-line option.
62
+
63
+
64
+ changes:
65
+
66
+ - |
67
+ Remove dependency to 'abstract' library.
68
+ You don't need to install 'abstract' gem.
69
+
70
+ - |
71
+ Erubis::Eruby#load_file() now sets cache file timestamp to the same
72
+ value as original eRuby file. For example, if you restore eRuby files
73
+ from backup, Erubis::Eruby#load_file() can detect it and generate
74
+ cache file again.
75
+
76
+ ## generates cache file (A.rhtml.cache).
77
+ eruby = Erubis::Eruby.load_file('A.rhtml')
78
+ p File.mtime('A.rhtml') == File.mtime('A.rhtml.cache') #=> true
79
+
80
+
5
81
 
6
82
  - release: 2.6.6
7
83
  date: 2010-06-27
@@ -21,7 +97,7 @@
21
97
 
22
98
  - release: 2.6.4
23
99
  date: 2009-02-18
24
- enhancemens:
100
+ enhancements:
25
101
 
26
102
  - |
27
103
  Rails 2.2 and 2.3 support.
@@ -1,4 +1,4 @@
1
- copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
1
+ copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  = README
2
2
 
3
- release:: 2.6.6
4
- copyright:: copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
3
+ release:: 2.7.0
4
+ copyright:: copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
5
5
 
6
6
 
7
7
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ###
4
- ### $Release: 2.6.6 $
5
- ### copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
4
+ ### $Release: 2.7.0 $
5
+ ### copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
6
6
  ###
7
7
 
8
8
  require 'erb'
data/bin/erubis CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ###
4
- ### $Release: 2.6.6 $
5
- ### copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
4
+ ### $Release: 2.7.0 $
5
+ ### copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
6
6
  ###
7
7
 
8
8
  require 'erubis/main'
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ###
4
- ### $Release: 2.6.6 $
5
- ### copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
4
+ ### $Release: 2.7.0 $
5
+ ### copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
6
6
  ###
7
7
 
8
8
  #--begin of require 'erubis/main'
9
9
  ###
10
- ### $Release: 2.6.6 $
11
- ### copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
10
+ ### $Release: 2.7.0 $
11
+ ### copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
12
12
  ###
13
13
 
14
14
  require 'yaml'
15
15
  #--begin of require 'erubis'
16
16
  ##
17
- ## $Release: 2.6.6 $
18
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
17
+ ## $Release: 2.7.0 $
18
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
19
19
  ##
20
20
 
21
21
  ##
@@ -62,81 +62,28 @@ require 'yaml'
62
62
 
63
63
 
64
64
  module Erubis
65
- VERSION = ('$Release: 2.6.6 $' =~ /([.\d]+)/) && $1
65
+ VERSION = ('$Release: 2.7.0 $' =~ /([.\d]+)/) && $1
66
66
  end
67
67
 
68
68
  #--begin of require 'erubis/engine'
69
69
  ##
70
- ## $Release: 2.6.6 $
71
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
70
+ ## $Release: 2.7.0 $
71
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
72
72
  ##
73
73
 
74
74
 
75
75
  #--begin of require 'erubis/generator'
76
76
  ##
77
- ## $Release: 2.6.6 $
78
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
77
+ ## $Release: 2.7.0 $
78
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
79
79
  ##
80
80
 
81
- #--begin of require 'abstract'
81
+ #--begin of require 'erubis/util'
82
82
  ##
83
- ## $Rev: 1 $
84
- ## $Release: 0.1.0 $
85
- ## copyright(c) 2006 kuwata-lab.com all rights reserved.
83
+ ## $Release: 2.7.0 $
84
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
86
85
  ##
87
- ##
88
- ## helper to define abstract method in Ruby.
89
- ##
90
- ##
91
- ## example1. (shorter notation)
92
- ##
93
- ## require 'abstract'
94
- ## class Foo
95
- ## abstract_method 'arg1, arg2=""', :method1, :method2, :method3
96
- ## end
97
- ##
98
- ##
99
- ## example2. (RDoc friendly notation)
100
- ##
101
- ## require 'abstract'
102
- ## class Bar
103
- ## # ... method1 description ...
104
- ## def method1(arg1, arg2="")
105
- ## not_implemented
106
- ## end
107
- ##
108
- ## # ... method2 description ...
109
- ## def method2(arg1, arg2="")
110
- ## not_implemented
111
- ## end
112
- ## end
113
- ##
114
-
115
-
116
- ##
117
- class Module
118
-
119
- ##
120
- ## define abstract methods
121
- ##
122
- def abstract_method args_str, *method_names
123
- method_names.each do |name|
124
- module_eval <<-END
125
- def #{name}(#{args_str})
126
- mesg = "class \#{self.class.name} must implement abstract method `#{self.name}##{name}()'."
127
- #mesg = "\#{self.class.name}##{name}() is not implemented."
128
- err = NotImplementedError.new mesg
129
- err.set_backtrace caller()
130
- raise err
131
- end
132
- END
133
- end
134
- end
135
-
136
- end
137
86
 
138
-
139
- ##
140
87
  module Kernel
141
88
 
142
89
  ##
@@ -154,7 +101,7 @@ module Kernel
154
101
  private :not_implemented
155
102
 
156
103
  end
157
- #--end of require 'abstract'
104
+ #--end of require 'erubis/util'
158
105
 
159
106
  module Erubis
160
107
 
@@ -237,11 +184,11 @@ end
237
184
  #--end of require 'erubis/generator'
238
185
  #--begin of require 'erubis/converter'
239
186
  ##
240
- ## $Release: 2.6.6 $
241
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
187
+ ## $Release: 2.7.0 $
188
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
242
189
  ##
243
190
 
244
- #--already included require 'abstract'
191
+ #--already included require 'erubis/util'
245
192
 
246
193
  module Erubis
247
194
 
@@ -596,14 +543,14 @@ end
596
543
  #--end of require 'erubis/converter'
597
544
  #--begin of require 'erubis/evaluator'
598
545
  ##
599
- ## $Release: 2.6.6 $
600
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
546
+ ## $Release: 2.7.0 $
547
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
601
548
  ##
602
549
 
603
550
  #--begin of require 'erubis/error'
604
551
  ##
605
- ## $Release: 2.6.6 $
606
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
552
+ ## $Release: 2.7.0 $
553
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
607
554
  ##
608
555
 
609
556
  module Erubis
@@ -627,8 +574,8 @@ end
627
574
  #--end of require 'erubis/error'
628
575
  #--begin of require 'erubis/context'
629
576
  ##
630
- ## $Release: 2.6.6 $
631
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
577
+ ## $Release: 2.7.0 $
578
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
632
579
  ##
633
580
 
634
581
 
@@ -833,17 +780,17 @@ module Erubis
833
780
  def self.load_file(filename, properties={})
834
781
  cachename = properties[:cachename] || (filename + '.cache')
835
782
  properties[:filename] = filename
836
- if test(?f, cachename) && File.mtime(filename) <= File.mtime(cachename)
783
+ timestamp = File.mtime(filename)
784
+ if test(?f, cachename) && timestamp == File.mtime(cachename)
837
785
  engine = self.new(nil, properties)
838
786
  engine.src = File.read(cachename)
839
787
  else
840
788
  input = File.open(filename, 'rb') {|f| f.read }
841
789
  engine = self.new(input, properties)
842
- File.open(cachename, 'wb') do |f|
843
- f.flock(File::LOCK_EX)
844
- f.write(engine.src)
845
- f.flush()
846
- end
790
+ tmpname = cachename + rand().to_s[1,8]
791
+ File.open(tmpname, 'wb') {|f| f.write(engine.src) }
792
+ File.rename(tmpname, cachename)
793
+ File.utime(timestamp, timestamp, cachename)
847
794
  end
848
795
  engine.src.untaint # ok?
849
796
  return engine
@@ -909,10 +856,11 @@ end
909
856
  #require 'erubis/evaluator'
910
857
  #require 'erubis/error'
911
858
  #require 'erubis/context'
859
+ #requier 'erubis/util'
912
860
  #--begin of require 'erubis/helper'
913
861
  ##
914
- ## $Release: 2.6.6 $
915
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
862
+ ## $Release: 2.7.0 $
863
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
916
864
  ##
917
865
 
918
866
 
@@ -960,8 +908,8 @@ end
960
908
  #--end of require 'erubis/helper'
961
909
  #--begin of require 'erubis/enhancer'
962
910
  ##
963
- ## $Release: 2.6.6 $
964
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
911
+ ## $Release: 2.7.0 $
912
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
965
913
  ##
966
914
 
967
915
 
@@ -1028,7 +976,7 @@ module Erubis
1028
976
  end
1029
977
 
1030
978
  def add_preamble(src)
1031
- src << "_buf = $stdout;"
979
+ src << "#{@bufvar} = $stdout;"
1032
980
  end
1033
981
 
1034
982
  def add_postamble(src)
@@ -1053,15 +1001,15 @@ module Erubis
1053
1001
  end
1054
1002
 
1055
1003
  def add_text(src, text)
1056
- src << " print '" << escape_text(text) << "';" unless text.empty?
1004
+ src << " print '#{escape_text(text)}';" unless text.empty?
1057
1005
  end
1058
1006
 
1059
1007
  def add_expr_literal(src, code)
1060
- src << ' print((' << code << ').to_s);'
1008
+ src << " print((#{code}).to_s);"
1061
1009
  end
1062
1010
 
1063
1011
  def add_expr_escaped(src, code)
1064
- src << ' print ' << escaped_expr(code) << ';'
1012
+ src << " print #{escaped_expr(code)};"
1065
1013
  end
1066
1014
 
1067
1015
  def add_postamble(src)
@@ -1123,12 +1071,12 @@ module Erubis
1123
1071
  end
1124
1072
 
1125
1073
  def add_preamble(src)
1126
- src << "_buf = [];"
1074
+ src << "#{@bufvar} = [];"
1127
1075
  end
1128
1076
 
1129
1077
  def add_postamble(src)
1130
1078
  src << "\n" unless src[-1] == ?\n
1131
- src << "_buf\n"
1079
+ src << "#{@bufvar}\n"
1132
1080
  end
1133
1081
 
1134
1082
  end
@@ -1169,12 +1117,12 @@ module Erubis
1169
1117
  end
1170
1118
 
1171
1119
  def add_preamble(src)
1172
- src << "_buf = '';"
1120
+ src << "#{@bufvar} = '';"
1173
1121
  end
1174
1122
 
1175
1123
  def add_postamble(src)
1176
1124
  src << "\n" unless src[-1] == ?\n
1177
- src << "_buf.to_s\n"
1125
+ src << "#{@bufvar}.to_s\n"
1178
1126
  end
1179
1127
 
1180
1128
  end
@@ -1192,12 +1140,12 @@ module Erubis
1192
1140
  end
1193
1141
 
1194
1142
  def add_preamble(src)
1195
- src << "_buf = StringIO.new;"
1143
+ src << "#{@bufvar} = StringIO.new;"
1196
1144
  end
1197
1145
 
1198
1146
  def add_postamble(src)
1199
1147
  src << "\n" unless src[-1] == ?\n
1200
- src << "_buf.string\n"
1148
+ src << "#{@bufvar}.string\n"
1201
1149
  end
1202
1150
 
1203
1151
  end
@@ -1215,12 +1163,12 @@ module Erubis
1215
1163
  end
1216
1164
 
1217
1165
  def add_preamble(src)
1218
- src << "_erbout = _buf = '';"
1166
+ src << "_erbout = #{@bufvar} = '';"
1219
1167
  end
1220
1168
 
1221
1169
  def add_postamble(src)
1222
1170
  src << "\n" unless src[-1] == ?\n
1223
- src << "_buf.to_s\n"
1171
+ src << "#{@bufvar}.to_s\n"
1224
1172
  end
1225
1173
 
1226
1174
  end
@@ -1395,23 +1343,34 @@ module Erubis
1395
1343
 
1396
1344
 
1397
1345
  ##
1398
- ## regards lines starting with '%' as program code
1346
+ ## regards lines starting with '^[ \t]*%' as program code
1399
1347
  ##
1400
- ## this is for compatibility to eruby and ERB.
1348
+ ## in addition you can specify prefix character (default '%')
1401
1349
  ##
1402
1350
  ## this is language-independent.
1403
1351
  ##
1404
- module PercentLineEnhancer
1352
+ module PrefixedLineEnhancer
1405
1353
 
1406
1354
  def self.desc # :nodoc:
1407
- "regard lines starting with '%' as program code"
1355
+ "regard lines matched to '^[ \t]*%' as program code"
1356
+ end
1357
+
1358
+ def init_generator(properties={})
1359
+ super
1360
+ @prefixchar = properties[:prefixchar]
1408
1361
  end
1409
1362
 
1410
1363
  def add_text(src, text)
1364
+ unless @prefixrexp
1365
+ @prefixchar ||= '%'
1366
+ @prefixrexp = Regexp.compile("^([ \\t]*)\\#{@prefixchar}(.*?\\r?\\n)")
1367
+ end
1411
1368
  pos = 0
1412
1369
  text2 = ''
1413
- text.scan(/^\%(.*?\r?\n)/) do
1414
- line = $1
1370
+ text.scan(@prefixrexp) do
1371
+ space = $1
1372
+ line = $2
1373
+ space, line = '', $1 unless $2
1415
1374
  match = Regexp.last_match
1416
1375
  len = match.begin(0) - pos
1417
1376
  str = text[pos, len]
@@ -1421,12 +1380,12 @@ module Erubis
1421
1380
  else
1422
1381
  text2 << str
1423
1382
  end
1424
- if line[0] == ?%
1425
- text2 << line
1383
+ if line[0, 1] == @prefixchar
1384
+ text2 << space << line
1426
1385
  else
1427
1386
  super(src, text2)
1428
1387
  text2 = ''
1429
- add_stmt(src, line)
1388
+ add_stmt(src, space + line)
1430
1389
  end
1431
1390
  end
1432
1391
  #rest = pos == 0 ? text : $' # ruby1.8
@@ -1441,6 +1400,39 @@ module Erubis
1441
1400
  end
1442
1401
 
1443
1402
 
1403
+ ##
1404
+ ## regards lines starting with '%' as program code
1405
+ ##
1406
+ ## this is for compatibility to eruby and ERB.
1407
+ ##
1408
+ ## this is language-independent.
1409
+ ##
1410
+ module PercentLineEnhancer
1411
+ include PrefixedLineEnhancer
1412
+
1413
+ def self.desc # :nodoc:
1414
+ "regard lines starting with '%' as program code"
1415
+ end
1416
+
1417
+ #--
1418
+ #def init_generator(properties={})
1419
+ # super
1420
+ # @prefixchar = '%'
1421
+ # @prefixrexp = /^\%(.*?\r?\n)/
1422
+ #end
1423
+ #++
1424
+
1425
+ def add_text(src, text)
1426
+ unless @prefixrexp
1427
+ @prefixchar = '%'
1428
+ @prefixrexp = /^\%(.*?\r?\n)/
1429
+ end
1430
+ super(src, text)
1431
+ end
1432
+
1433
+ end
1434
+
1435
+
1444
1436
  ##
1445
1437
  ## [experimental] allow header and footer in eRuby script
1446
1438
  ##
@@ -1615,16 +1607,15 @@ module Erubis
1615
1607
  #src << " _buf << %Q`" << text << "`;"
1616
1608
  if text[-1] == ?\n
1617
1609
  text[-1] = "\\n"
1618
- src << " _buf << %Q`" << text << "`\n"
1610
+ src << " #{@bufvar} << %Q`#{text}`\n"
1619
1611
  else
1620
- src << " _buf << %Q`" << text << "`;"
1612
+ src << " #{@bufvar} << %Q`#{text}`;"
1621
1613
  end
1622
1614
  end
1623
1615
 
1624
1616
  def _add_text_to_str(str, text)
1625
1617
  return if !text || text.empty?
1626
- text.gsub!(/[`\#\\]/, '\\\\\&')
1627
- str << text
1618
+ str << text.gsub(/[`\#\\]/, '\\\\\&')
1628
1619
  end
1629
1620
 
1630
1621
  def add_expr_escaped(str, code)
@@ -1643,8 +1634,8 @@ end
1643
1634
  #require 'erubis/tiny'
1644
1635
  #--begin of require 'erubis/engine/eruby'
1645
1636
  ##
1646
- ## $Release: 2.6.6 $
1647
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
1637
+ ## $Release: 2.7.0 $
1638
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
1648
1639
  ##
1649
1640
 
1650
1641
  #--already included require 'erubis/engine'
@@ -1665,6 +1656,7 @@ module Erubis
1665
1656
  def init_generator(properties={})
1666
1657
  super
1667
1658
  @escapefunc ||= "Erubis::XmlHelper.escape_xml"
1659
+ @bufvar = properties[:bufvar] || "_buf"
1668
1660
  end
1669
1661
 
1670
1662
  def self.supported_properties() # :nodoc:
@@ -1681,12 +1673,12 @@ module Erubis
1681
1673
 
1682
1674
  #--
1683
1675
  #def add_preamble(src)
1684
- # src << "_buf = [];"
1676
+ # src << "#{@bufvar} = [];"
1685
1677
  #end
1686
1678
  #++
1687
1679
 
1688
1680
  def add_text(src, text)
1689
- src << " _buf << '" << escape_text(text) << "';" unless text.empty?
1681
+ src << " #{@bufvar} << '" << escape_text(text) << "';" unless text.empty?
1690
1682
  end
1691
1683
 
1692
1684
  def add_stmt(src, code)
@@ -1696,11 +1688,11 @@ module Erubis
1696
1688
  end
1697
1689
 
1698
1690
  def add_expr_literal(src, code)
1699
- src << ' _buf << (' << code << ').to_s;'
1691
+ src << " #{@bufvar} << (" << code << ').to_s;'
1700
1692
  end
1701
1693
 
1702
1694
  def add_expr_escaped(src, code)
1703
- src << ' _buf << ' << escaped_expr(code) << ';'
1695
+ src << " #{@bufvar} << " << escaped_expr(code) << ';'
1704
1696
  end
1705
1697
 
1706
1698
  def add_expr_debug(src, code)
@@ -1711,7 +1703,7 @@ module Erubis
1711
1703
 
1712
1704
  #--
1713
1705
  #def add_postamble(src)
1714
- # src << "\n_buf.join\n"
1706
+ # src << "\n#{@bufvar}.join\n"
1715
1707
  #end
1716
1708
  #++
1717
1709
 
@@ -1778,8 +1770,8 @@ end
1778
1770
 
1779
1771
  #--begin of require 'erubis/local-setting'
1780
1772
  ##
1781
- ## $Release: 2.6.6 $
1782
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
1773
+ ## $Release: 2.7.0 $
1774
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
1783
1775
  ##
1784
1776
 
1785
1777
  ##
@@ -1790,8 +1782,8 @@ end
1790
1782
  #--end of require 'erubis'
1791
1783
  #--begin of require 'erubis/tiny'
1792
1784
  ##
1793
- ## $Release: 2.6.6 $
1794
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
1785
+ ## $Release: 2.7.0 $
1786
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
1795
1787
  ##
1796
1788
 
1797
1789
  module Erubis
@@ -1936,8 +1928,8 @@ end
1936
1928
  #--end of require 'erubis/tiny'
1937
1929
  #--begin of require 'erubis/engine/enhanced'
1938
1930
  ##
1939
- ## $Release: 2.6.6 $
1940
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
1931
+ ## $Release: 2.7.0 $
1932
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
1941
1933
  ##
1942
1934
 
1943
1935
  #--already included require 'erubis/enhancer'
@@ -2040,6 +2032,11 @@ module Erubis
2040
2032
  end
2041
2033
 
2042
2034
 
2035
+ class PrefixedLineEruby < Eruby
2036
+ include PrefixedLineEnhancer
2037
+ end
2038
+
2039
+
2043
2040
  class HeaderFooterEruby < Eruby
2044
2041
  include HeaderFooterEnhancer
2045
2042
  end
@@ -2059,8 +2056,8 @@ end
2059
2056
  #--end of require 'erubis/engine/enhanced'
2060
2057
  #--begin of require 'erubis/engine/optimized'
2061
2058
  ##
2062
- ## $Release: 2.6.6 $
2063
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2059
+ ## $Release: 2.7.0 $
2060
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2064
2061
  ##
2065
2062
 
2066
2063
 
@@ -2189,8 +2186,8 @@ end
2189
2186
  #--already included require 'erubis/engine/eruby'
2190
2187
  #--begin of require 'erubis/engine/ephp'
2191
2188
  ##
2192
- ## $Release: 2.6.6 $
2193
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2189
+ ## $Release: 2.7.0 $
2190
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2194
2191
  ##
2195
2192
 
2196
2193
  #--already included require 'erubis/engine'
@@ -2290,8 +2287,8 @@ end
2290
2287
  #--end of require 'erubis/engine/ephp'
2291
2288
  #--begin of require 'erubis/engine/ec'
2292
2289
  ##
2293
- ## $Release: 2.6.6 $
2294
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2290
+ ## $Release: 2.7.0 $
2291
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2295
2292
  ##
2296
2293
 
2297
2294
  #--already included require 'erubis/engine'
@@ -2407,10 +2404,125 @@ module Erubis
2407
2404
 
2408
2405
  end
2409
2406
  #--end of require 'erubis/engine/ec'
2407
+ #--begin of require 'erubis/engine/ecpp'
2408
+ ##
2409
+ ## $Release: 2.7.0 $
2410
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2411
+ ##
2412
+
2413
+ #--already included require 'erubis/engine'
2414
+ #--already included require 'erubis/enhancer'
2415
+
2416
+
2417
+ module Erubis
2418
+
2419
+
2420
+ module CppGenerator
2421
+ include Generator
2422
+
2423
+ def self.supported_properties() # :nodoc:
2424
+ return [
2425
+ [:indent, '', "indent spaces (ex. ' ')"],
2426
+ [:bufvar, '_buf', "buffer variable name"],
2427
+ ]
2428
+ end
2429
+
2430
+ def init_generator(properties={})
2431
+ super
2432
+ @escapefunc ||= "escape"
2433
+ @indent = properties[:indent] || ''
2434
+ @bufvar = properties[:bufvar] || '_buf'
2435
+ end
2436
+
2437
+ def add_preamble(src)
2438
+ src << "#line 1 \"#{self.filename}\"\n" if self.filename
2439
+ end
2440
+
2441
+ def escape_text(text)
2442
+ @@table_ ||= { "\r"=>"\\r", "\n"=>"\\n", "\t"=>"\\t", '"'=>'\\"', "\\"=>"\\\\" }
2443
+ text.gsub!(/[\r\n\t"\\]/) { |m| @@table_[m] }
2444
+ return text
2445
+ end
2446
+
2447
+ def escaped_expr(code)
2448
+ return "#{@escapefunc}(#{code.strip})"
2449
+ end
2450
+
2451
+ def add_text(src, text)
2452
+ return if text.empty?
2453
+ src << (src.empty? || src[-1] == ?\n ? @indent : ' ')
2454
+ src << "_buf << "
2455
+ i = 0
2456
+ text.each_line do |line|
2457
+ src << "\n" << @indent << " " if i > 0
2458
+ i += 1
2459
+ src << '"' << escape_text(line) << '"'
2460
+ end
2461
+ src << ";" #<< (text[-1] == ?\n ? "\n" : "")
2462
+ src << "\n" if text[-1] == ?\n
2463
+ end
2464
+
2465
+ def add_stmt(src, code)
2466
+ src << code
2467
+ end
2468
+
2469
+ def add_expr_literal(src, code)
2470
+ src << @indent if src.empty? || src[-1] == ?\n
2471
+ src << " _buf << (" << code.strip << ");"
2472
+ end
2473
+
2474
+ def add_expr_escaped(src, code)
2475
+ src << @indent if src.empty? || src[-1] == ?\n
2476
+ src << ' ' << escaped_expr(code) << ';'
2477
+ end
2478
+
2479
+ def add_expr_debug(src, code)
2480
+ code.strip!
2481
+ src << @indent if src.empty? || src[-1] == ?\n
2482
+ src << " std::cerr << \"*** debug: #{code.gsub(/(")/, '\\\&')}=\" << (#{code});"
2483
+ end
2484
+
2485
+ def add_postamble(src)
2486
+ # empty
2487
+ end
2488
+
2489
+ end
2490
+
2491
+
2492
+ ##
2493
+ ## engine for C
2494
+ ##
2495
+ class Ecpp < Basic::Engine
2496
+ include CppGenerator
2497
+ end
2498
+
2499
+
2500
+ class EscapedEcpp < Ecpp
2501
+ include EscapeEnhancer
2502
+ end
2503
+
2504
+
2505
+ #class XmlEcpp < Ecpp
2506
+ # include EscapeEnhancer
2507
+ #end
2508
+
2509
+ class PI::Ecpp < PI::Engine
2510
+ include CppGenerator
2511
+
2512
+ def init_converter(properties={})
2513
+ @pi = 'cpp'
2514
+ super(properties)
2515
+ end
2516
+
2517
+ end
2518
+
2519
+
2520
+ end
2521
+ #--end of require 'erubis/engine/ecpp'
2410
2522
  #--begin of require 'erubis/engine/ejava'
2411
2523
  ##
2412
- ## $Release: 2.6.6 $
2413
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2524
+ ## $Release: 2.7.0 $
2525
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2414
2526
  ##
2415
2527
 
2416
2528
  #--already included require 'erubis/engine'
@@ -2426,7 +2538,7 @@ module Erubis
2426
2538
  def self.supported_properties() # :nodoc:
2427
2539
  return [
2428
2540
  [:indent, '', "indent spaces (ex. ' ')"],
2429
- [:buf, '_buf', "output buffer name"],
2541
+ [:bufvar, '_buf', "output buffer variable name"],
2430
2542
  [:bufclass, 'StringBuffer', "output buffer class (ex. 'StringBuilder')"],
2431
2543
  ]
2432
2544
  end
@@ -2435,12 +2547,12 @@ module Erubis
2435
2547
  super
2436
2548
  @escapefunc ||= 'escape'
2437
2549
  @indent = properties[:indent] || ''
2438
- @buf = properties[:buf] || '_buf'
2550
+ @bufvar = properties[:bufvar] || '_buf'
2439
2551
  @bufclass = properties[:bufclass] || 'StringBuffer'
2440
2552
  end
2441
2553
 
2442
2554
  def add_preamble(src)
2443
- src << "#{@indent}#{@bufclass} #{@buf} = new #{@bufclass}();"
2555
+ src << "#{@indent}#{@bufclass} #{@bufvar} = new #{@bufclass}();"
2444
2556
  end
2445
2557
 
2446
2558
  def escape_text(text)
@@ -2451,7 +2563,7 @@ module Erubis
2451
2563
  def add_text(src, text)
2452
2564
  return if text.empty?
2453
2565
  src << (src.empty? || src[-1] == ?\n ? @indent : ' ')
2454
- src << @buf << ".append("
2566
+ src << @bufvar << ".append("
2455
2567
  i = 0
2456
2568
  text.each_line do |line|
2457
2569
  src << "\n" << @indent << ' + ' if i > 0
@@ -2468,7 +2580,7 @@ module Erubis
2468
2580
  def add_expr_literal(src, code)
2469
2581
  src << @indent if src.empty? || src[-1] == ?\n
2470
2582
  code.strip!
2471
- src << " #{@buf}.append(#{code});"
2583
+ src << " #{@bufvar}.append(#{code});"
2472
2584
  end
2473
2585
 
2474
2586
  def add_expr_escaped(src, code)
@@ -2483,8 +2595,8 @@ module Erubis
2483
2595
 
2484
2596
  def add_postamble(src)
2485
2597
  src << "\n" if src[-1] == ?;
2486
- src << @indent << "return " << @buf << ".toString();\n"
2487
- #src << @indent << "System.out.print(" << @buf << ".toString());\n"
2598
+ src << @indent << "return " << @bufvar << ".toString();\n"
2599
+ #src << @indent << "System.out.print(" << @bufvar << ".toString());\n"
2488
2600
  end
2489
2601
 
2490
2602
  end
@@ -2521,8 +2633,8 @@ end
2521
2633
  #--end of require 'erubis/engine/ejava'
2522
2634
  #--begin of require 'erubis/engine/escheme'
2523
2635
  ##
2524
- ## $Release: 2.6.6 $
2525
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2636
+ ## $Release: 2.7.0 $
2637
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2526
2638
  ##
2527
2639
 
2528
2640
  #--already included require 'erubis/engine'
@@ -2637,8 +2749,8 @@ end
2637
2749
  #--end of require 'erubis/engine/escheme'
2638
2750
  #--begin of require 'erubis/engine/eperl'
2639
2751
  ##
2640
- ## $Release: 2.6.6 $
2641
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2752
+ ## $Release: 2.7.0 $
2753
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2642
2754
  ##
2643
2755
 
2644
2756
  #--already included require 'erubis/engine'
@@ -2734,8 +2846,8 @@ end
2734
2846
  #--end of require 'erubis/engine/eperl'
2735
2847
  #--begin of require 'erubis/engine/ejavascript'
2736
2848
  ##
2737
- ## $Release: 2.6.6 $
2738
- ## copyright(c) 2006-2010 kuwata-lab.com all rights reserved.
2849
+ ## $Release: 2.7.0 $
2850
+ ## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
2739
2851
  ##
2740
2852
 
2741
2853
  #--already included require 'erubis/engine'
@@ -2751,7 +2863,7 @@ module Erubis
2751
2863
  def self.supported_properties() # :nodoc:
2752
2864
  list = []
2753
2865
  #list << [:indent, '', "indent spaces (ex. ' ')"]
2754
- #list << [:buf, '_buf', "output buffer name"]
2866
+ #list << [:bufvar, '_buf', "output buffer variable name"]
2755
2867
  list << [:docwrite, true, "use 'document.write()' when true"]
2756
2868
  return list
2757
2869
  end
@@ -2760,12 +2872,12 @@ module Erubis
2760
2872
  super
2761
2873
  @escapefunc ||= 'escape'
2762
2874
  @indent = properties[:indent] || ''
2763
- @buf = properties[:out] || '_buf'
2875
+ @bufvar = properties[:bufvar] || '_buf'
2764
2876
  @docwrite = properties[:docwrite] != false # '!= false' will be removed in the next release
2765
2877
  end
2766
2878
 
2767
2879
  def add_preamble(src)
2768
- src << "#{@indent}var #{@buf} = [];"
2880
+ src << "#{@indent}var #{@bufvar} = [];"
2769
2881
  end
2770
2882
 
2771
2883
  def escape_text(text)
@@ -2780,7 +2892,7 @@ module Erubis
2780
2892
  def add_text(src, text)
2781
2893
  return if text.empty?
2782
2894
  add_indent(src, @indent)
2783
- src << @buf << '.push("'
2895
+ src << @bufvar << '.push("'
2784
2896
  s = escape_text(text)
2785
2897
  if s[-1] == ?\n
2786
2898
  s[-2, 2] = ''
@@ -2797,7 +2909,7 @@ module Erubis
2797
2909
  def add_expr_literal(src, code)
2798
2910
  add_indent(src, @indent)
2799
2911
  code.strip!
2800
- src << "#{@buf}.push(#{code});"
2912
+ src << "#{@bufvar}.push(#{code});"
2801
2913
  end
2802
2914
 
2803
2915
  def add_expr_escaped(src, code)
@@ -2813,9 +2925,9 @@ module Erubis
2813
2925
  def add_postamble(src)
2814
2926
  src << "\n" if src[-1] == ?;
2815
2927
  if @docwrite
2816
- src << @indent << 'document.write(' << @buf << ".join(\"\"));\n"
2928
+ src << @indent << 'document.write(' << @bufvar << ".join(\"\"));\n"
2817
2929
  else
2818
- src << @indent << @buf << ".join(\"\");\n"
2930
+ src << @indent << @bufvar << ".join(\"\");\n"
2819
2931
  end
2820
2932
  end
2821
2933
 
@@ -3069,7 +3181,7 @@ module Erubis
3069
3181
  buf << " -z : syntax checking"
3070
3182
  buf << " -e : escape (equal to '--E Escape')"
3071
3183
  buf << " -p pattern : embedded pattern (default '<% %>')"
3072
- buf << " -l lang : convert but no execute (ruby/php/c/java/scheme/perl/js)"
3184
+ buf << " -l lang : convert but no execute (ruby/php/c/cpp/java/scheme/perl/js)"
3073
3185
  buf << " -E e1,e2,... : enhancer names (Escape, PercentLine, BiPattern, ...)"
3074
3186
  buf << " -I path : library include path"
3075
3187
  buf << " -K kanji : kanji code (euc/sjis/utf8) (default none)"
@@ -3107,7 +3219,7 @@ module Erubis
3107
3219
  list << ['(common)', common_props]
3108
3220
  list << ['(basic)', basic_props - common_props]
3109
3221
  list << ['(pi)', pi_props - common_props]
3110
- %w[ruby php c java scheme perl javascript].each do |lang|
3222
+ %w[ruby php c cpp java scheme perl javascript].each do |lang|
3111
3223
  klass = Erubis.const_get("E#{lang}")
3112
3224
  list << [lang, collect_supported_properties(klass) - basic_props]
3113
3225
  end
@@ -3322,6 +3434,32 @@ module Erubis
3322
3434
  return "#{filename}:#{linenum}: #{message}"
3323
3435
  end
3324
3436
 
3437
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx"
3438
+ def check_syntax(filename, src)
3439
+ require 'compiler'
3440
+ verbose = $VERBOSE
3441
+ msg = nil
3442
+ begin
3443
+ $VERBOSE = true
3444
+ Rubinius::Compiler.compile_string(src, filename)
3445
+ rescue SyntaxError => ex
3446
+ ex_linenum = ex.line
3447
+ linenum = 0
3448
+ srcline = src.each_line do |line|
3449
+ linenum += 1
3450
+ break line if linenum == ex_linenum
3451
+ end
3452
+ msg = "#{ex.message}\n"
3453
+ msg << srcline
3454
+ msg << "\n" unless srcline =~ /\n\z/
3455
+ msg << (" " * (ex.column-1)) << "^\n"
3456
+ ensure
3457
+ $VERBOSE = verbose
3458
+ end
3459
+ return msg
3460
+ end
3461
+ end
3462
+
3325
3463
  end
3326
3464
 
3327
3465
  end