ghazel-erubis 2.6.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (298) hide show
  1. data/CHANGES.txt +744 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.txt +102 -0
  4. data/benchmark/Makefile +6 -0
  5. data/benchmark/bench.rb +313 -0
  6. data/benchmark/bench_context.yaml +141 -0
  7. data/benchmark/templates/_footer.html +4 -0
  8. data/benchmark/templates/_header.html +52 -0
  9. data/benchmark/templates/bench_erb.rhtml +29 -0
  10. data/benchmark/templates/bench_erubis.rhtml +29 -0
  11. data/benchmark/templates/bench_eruby.rhtml +29 -0
  12. data/bin/erubis +10 -0
  13. data/contrib/erubis +3330 -0
  14. data/contrib/erubis-run.rb +132 -0
  15. data/contrib/inline-require +179 -0
  16. data/doc/docstyle.css +188 -0
  17. data/doc/users-guide.html +3285 -0
  18. data/doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html +209 -0
  19. data/doc-api/classes/ActionView.html +105 -0
  20. data/doc-api/classes/ERB.html +101 -0
  21. data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +175 -0
  22. data/doc-api/classes/Erubis/ArrayBufferEruby.html +120 -0
  23. data/doc-api/classes/Erubis/ArrayEnhancer.html +174 -0
  24. data/doc-api/classes/Erubis/ArrayEruby.html +120 -0
  25. data/doc-api/classes/Erubis/Basic/Converter.html +327 -0
  26. data/doc-api/classes/Erubis/Basic/Engine.html +130 -0
  27. data/doc-api/classes/Erubis/Basic.html +112 -0
  28. data/doc-api/classes/Erubis/BiPatternEnhancer.html +215 -0
  29. data/doc-api/classes/Erubis/BiPatternEruby.html +120 -0
  30. data/doc-api/classes/Erubis/CGenerator.html +386 -0
  31. data/doc-api/classes/Erubis/CommandOptionError.html +113 -0
  32. data/doc-api/classes/Erubis/Context.html +344 -0
  33. data/doc-api/classes/Erubis/Converter.html +283 -0
  34. data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +150 -0
  35. data/doc-api/classes/Erubis/DeleteIndentEruby.html +120 -0
  36. data/doc-api/classes/Erubis/Ec.html +126 -0
  37. data/doc-api/classes/Erubis/Ejava.html +126 -0
  38. data/doc-api/classes/Erubis/Ejavascript.html +126 -0
  39. data/doc-api/classes/Erubis/Engine.html +305 -0
  40. data/doc-api/classes/Erubis/Eperl.html +126 -0
  41. data/doc-api/classes/Erubis/Ephp.html +126 -0
  42. data/doc-api/classes/Erubis/ErboutEnhancer.html +175 -0
  43. data/doc-api/classes/Erubis/ErboutEruby.html +120 -0
  44. data/doc-api/classes/Erubis/ErubisError.html +117 -0
  45. data/doc-api/classes/Erubis/Eruby.html +132 -0
  46. data/doc-api/classes/Erubis/EscapeEnhancer.html +165 -0
  47. data/doc-api/classes/Erubis/EscapedEc.html +120 -0
  48. data/doc-api/classes/Erubis/EscapedEjava.html +120 -0
  49. data/doc-api/classes/Erubis/EscapedEjavascript.html +120 -0
  50. data/doc-api/classes/Erubis/EscapedEperl.html +120 -0
  51. data/doc-api/classes/Erubis/EscapedEphp.html +120 -0
  52. data/doc-api/classes/Erubis/EscapedEruby.html +127 -0
  53. data/doc-api/classes/Erubis/EscapedEscheme.html +120 -0
  54. data/doc-api/classes/Erubis/Escheme.html +126 -0
  55. data/doc-api/classes/Erubis/Evaluator.html +212 -0
  56. data/doc-api/classes/Erubis/FastEruby.html +131 -0
  57. data/doc-api/classes/Erubis/Generator.html +416 -0
  58. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +267 -0
  59. data/doc-api/classes/Erubis/HeaderFooterEruby.html +120 -0
  60. data/doc-api/classes/Erubis/Helpers/RailsFormHelper.html +787 -0
  61. data/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html +213 -0
  62. data/doc-api/classes/Erubis/Helpers/RailsHelper.html +349 -0
  63. data/doc-api/classes/Erubis/Helpers.html +116 -0
  64. data/doc-api/classes/Erubis/InterpolationEnhancer.html +306 -0
  65. data/doc-api/classes/Erubis/InterpolationEruby.html +120 -0
  66. data/doc-api/classes/Erubis/JavaGenerator.html +359 -0
  67. data/doc-api/classes/Erubis/JavascriptGenerator.html +386 -0
  68. data/doc-api/classes/Erubis/Main.html +341 -0
  69. data/doc-api/classes/Erubis/NoCodeEnhancer.html +249 -0
  70. data/doc-api/classes/Erubis/NoCodeEruby.html +120 -0
  71. data/doc-api/classes/Erubis/NoTextEnhancer.html +159 -0
  72. data/doc-api/classes/Erubis/NoTextEruby.html +120 -0
  73. data/doc-api/classes/Erubis/NotSupportedError.html +119 -0
  74. data/doc-api/classes/Erubis/OptimizedEruby.html +163 -0
  75. data/doc-api/classes/Erubis/OptimizedGenerator.html +439 -0
  76. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +163 -0
  77. data/doc-api/classes/Erubis/PI/Converter.html +266 -0
  78. data/doc-api/classes/Erubis/PI/Ec.html +166 -0
  79. data/doc-api/classes/Erubis/PI/Ejava.html +166 -0
  80. data/doc-api/classes/Erubis/PI/Ejavascript.html +166 -0
  81. data/doc-api/classes/Erubis/PI/Engine.html +122 -0
  82. data/doc-api/classes/Erubis/PI/Eperl.html +166 -0
  83. data/doc-api/classes/Erubis/PI/Ephp.html +166 -0
  84. data/doc-api/classes/Erubis/PI/Eruby.html +155 -0
  85. data/doc-api/classes/Erubis/PI/Escheme.html +166 -0
  86. data/doc-api/classes/Erubis/PI/TinyEruby.html +293 -0
  87. data/doc-api/classes/Erubis/PI.html +124 -0
  88. data/doc-api/classes/Erubis/PercentLineEnhancer.html +179 -0
  89. data/doc-api/classes/Erubis/PercentLineEruby.html +120 -0
  90. data/doc-api/classes/Erubis/PerlGenerator.html +344 -0
  91. data/doc-api/classes/Erubis/PhpGenerator.html +350 -0
  92. data/doc-api/classes/Erubis/PreprocessingEruby.html +183 -0
  93. data/doc-api/classes/Erubis/PreprocessingHelper.html +212 -0
  94. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +212 -0
  95. data/doc-api/classes/Erubis/PrintEnabledEruby.html +120 -0
  96. data/doc-api/classes/Erubis/PrintOutEnhancer.html +244 -0
  97. data/doc-api/classes/Erubis/PrintOutEruby.html +120 -0
  98. data/doc-api/classes/Erubis/PrintOutSimplifiedEruby.html +121 -0
  99. data/doc-api/classes/Erubis/RubyEvaluator.html +227 -0
  100. data/doc-api/classes/Erubis/RubyGenerator.html +327 -0
  101. data/doc-api/classes/Erubis/SchemeGenerator.html +382 -0
  102. data/doc-api/classes/Erubis/SimplifiedEruby.html +120 -0
  103. data/doc-api/classes/Erubis/SimplifyEnhancer.html +191 -0
  104. data/doc-api/classes/Erubis/StdoutEnhancer.html +173 -0
  105. data/doc-api/classes/Erubis/StdoutEruby.html +120 -0
  106. data/doc-api/classes/Erubis/StdoutSimplifiedEruby.html +121 -0
  107. data/doc-api/classes/Erubis/StringBufferEnhancer.html +174 -0
  108. data/doc-api/classes/Erubis/StringBufferEruby.html +120 -0
  109. data/doc-api/classes/Erubis/StringIOEruby.html +120 -0
  110. data/doc-api/classes/Erubis/TinyEruby.html +298 -0
  111. data/doc-api/classes/Erubis/XmlEruby.html +130 -0
  112. data/doc-api/classes/Erubis/XmlHelper.html +255 -0
  113. data/doc-api/classes/Erubis.html +353 -0
  114. data/doc-api/created.rid +1 -0
  115. data/doc-api/files/README_txt.html +247 -0
  116. data/doc-api/files/erubis/context_rb.html +107 -0
  117. data/doc-api/files/erubis/converter_rb.html +114 -0
  118. data/doc-api/files/erubis/engine/ec_rb.html +115 -0
  119. data/doc-api/files/erubis/engine/ejava_rb.html +115 -0
  120. data/doc-api/files/erubis/engine/ejavascript_rb.html +115 -0
  121. data/doc-api/files/erubis/engine/enhanced_rb.html +115 -0
  122. data/doc-api/files/erubis/engine/eperl_rb.html +115 -0
  123. data/doc-api/files/erubis/engine/ephp_rb.html +115 -0
  124. data/doc-api/files/erubis/engine/eruby_rb.html +115 -0
  125. data/doc-api/files/erubis/engine/escheme_rb.html +115 -0
  126. data/doc-api/files/erubis/engine/optimized_rb.html +114 -0
  127. data/doc-api/files/erubis/engine_rb.html +117 -0
  128. data/doc-api/files/erubis/enhancer_rb.html +107 -0
  129. data/doc-api/files/erubis/error_rb.html +107 -0
  130. data/doc-api/files/erubis/evaluator_rb.html +115 -0
  131. data/doc-api/files/erubis/generator_rb.html +114 -0
  132. data/doc-api/files/erubis/helper_rb.html +107 -0
  133. data/doc-api/files/erubis/helpers/rails_form_helper_rb.html +107 -0
  134. data/doc-api/files/erubis/helpers/rails_helper_rb.html +116 -0
  135. data/doc-api/files/erubis/local-setting_rb.html +107 -0
  136. data/doc-api/files/erubis/main_rb.html +127 -0
  137. data/doc-api/files/erubis/preprocessing_rb.html +114 -0
  138. data/doc-api/files/erubis/tiny_rb.html +107 -0
  139. data/doc-api/files/erubis_rb.html +118 -0
  140. data/doc-api/fr_class_index.html +122 -0
  141. data/doc-api/fr_file_index.html +51 -0
  142. data/doc-api/fr_method_index.html +251 -0
  143. data/doc-api/index.html +24 -0
  144. data/doc-api/rdoc-style.css +208 -0
  145. data/examples/basic/Makefile +53 -0
  146. data/examples/basic/example.ec +42 -0
  147. data/examples/basic/example.ejava +45 -0
  148. data/examples/basic/example.ejs +16 -0
  149. data/examples/basic/example.eperl +16 -0
  150. data/examples/basic/example.ephp +17 -0
  151. data/examples/basic/example.eruby +15 -0
  152. data/examples/basic/example.escheme +26 -0
  153. data/examples/pi/Makefile +54 -0
  154. data/examples/pi/example.ec +42 -0
  155. data/examples/pi/example.ejava +45 -0
  156. data/examples/pi/example.ejs +16 -0
  157. data/examples/pi/example.eperl +16 -0
  158. data/examples/pi/example.ephp +17 -0
  159. data/examples/pi/example.eruby +15 -0
  160. data/examples/pi/example.escheme +26 -0
  161. data/lib/erubis/context.rb +83 -0
  162. data/lib/erubis/converter.rb +357 -0
  163. data/lib/erubis/engine/ec.rb +117 -0
  164. data/lib/erubis/engine/ejava.rb +110 -0
  165. data/lib/erubis/engine/ejavascript.rb +119 -0
  166. data/lib/erubis/engine/enhanced.rb +121 -0
  167. data/lib/erubis/engine/eperl.rb +95 -0
  168. data/lib/erubis/engine/ephp.rb +99 -0
  169. data/lib/erubis/engine/eruby.rb +124 -0
  170. data/lib/erubis/engine/escheme.rb +114 -0
  171. data/lib/erubis/engine/optimized.rb +127 -0
  172. data/lib/erubis/engine.rb +120 -0
  173. data/lib/erubis/enhancer.rb +680 -0
  174. data/lib/erubis/error.rb +23 -0
  175. data/lib/erubis/evaluator.rb +88 -0
  176. data/lib/erubis/generator.rb +85 -0
  177. data/lib/erubis/helper.rb +47 -0
  178. data/lib/erubis/helpers/rails_form_helper.rb +197 -0
  179. data/lib/erubis/helpers/rails_helper.rb +353 -0
  180. data/lib/erubis/local-setting.rb +9 -0
  181. data/lib/erubis/main.rb +489 -0
  182. data/lib/erubis/preprocessing.rb +58 -0
  183. data/lib/erubis/tiny.rb +144 -0
  184. data/lib/erubis.rb +72 -0
  185. data/setup.rb +1331 -0
  186. data/test/assert-text-equal.rb +44 -0
  187. data/test/data/users-guide/Example.ejava +55 -0
  188. data/test/data/users-guide/array_example.result +9 -0
  189. data/test/data/users-guide/arraybuffer_example.result +9 -0
  190. data/test/data/users-guide/bipattern-example.rhtml +4 -0
  191. data/test/data/users-guide/bipattern_example.result +6 -0
  192. data/test/data/users-guide/context.rb +6 -0
  193. data/test/data/users-guide/context.yaml +8 -0
  194. data/test/data/users-guide/def_method.rb +14 -0
  195. data/test/data/users-guide/def_method.result +3 -0
  196. data/test/data/users-guide/escape_example.result +9 -0
  197. data/test/data/users-guide/example.ec +27 -0
  198. data/test/data/users-guide/example.ejs +20 -0
  199. data/test/data/users-guide/example.eperl +18 -0
  200. data/test/data/users-guide/example.ephp +18 -0
  201. data/test/data/users-guide/example.eruby +6 -0
  202. data/test/data/users-guide/example.escheme +28 -0
  203. data/test/data/users-guide/example1.eruby +6 -0
  204. data/test/data/users-guide/example1.rb +17 -0
  205. data/test/data/users-guide/example1.result +16 -0
  206. data/test/data/users-guide/example10.rb +4 -0
  207. data/test/data/users-guide/example10.result +17 -0
  208. data/test/data/users-guide/example10.xhtml +14 -0
  209. data/test/data/users-guide/example10_x.result +17 -0
  210. data/test/data/users-guide/example11.php +20 -0
  211. data/test/data/users-guide/example11.result +23 -0
  212. data/test/data/users-guide/example11.rhtml +21 -0
  213. data/test/data/users-guide/example11_C.result +10 -0
  214. data/test/data/users-guide/example11_N.result +16 -0
  215. data/test/data/users-guide/example11_U.result +16 -0
  216. data/test/data/users-guide/example11_php.result +15 -0
  217. data/test/data/users-guide/example1_x.result +9 -0
  218. data/test/data/users-guide/example2.eruby +7 -0
  219. data/test/data/users-guide/example2.rb +10 -0
  220. data/test/data/users-guide/example2.result +27 -0
  221. data/test/data/users-guide/example2_trim.result +10 -0
  222. data/test/data/users-guide/example2_x.result +10 -0
  223. data/test/data/users-guide/example3.eruby +6 -0
  224. data/test/data/users-guide/example3.rb +10 -0
  225. data/test/data/users-guide/example31.result +22 -0
  226. data/test/data/users-guide/example32.result +4 -0
  227. data/test/data/users-guide/example3_e.result +8 -0
  228. data/test/data/users-guide/example4.eruby +3 -0
  229. data/test/data/users-guide/example4.rb +11 -0
  230. data/test/data/users-guide/example4.result +10 -0
  231. data/test/data/users-guide/example4_x.result +5 -0
  232. data/test/data/users-guide/example5.eruby +6 -0
  233. data/test/data/users-guide/example5.rb +16 -0
  234. data/test/data/users-guide/example5.result +7 -0
  235. data/test/data/users-guide/example6.rb +12 -0
  236. data/test/data/users-guide/example6.result +7 -0
  237. data/test/data/users-guide/example7.eruby +8 -0
  238. data/test/data/users-guide/example71.result +13 -0
  239. data/test/data/users-guide/example72.result +13 -0
  240. data/test/data/users-guide/example8.eruby +6 -0
  241. data/test/data/users-guide/example8_ruby.result +7 -0
  242. data/test/data/users-guide/example8_yaml.result +7 -0
  243. data/test/data/users-guide/example9.eruby +3 -0
  244. data/test/data/users-guide/example9.rb +8 -0
  245. data/test/data/users-guide/example9.result +9 -0
  246. data/test/data/users-guide/example91.result +5 -0
  247. data/test/data/users-guide/example92.result +4 -0
  248. data/test/data/users-guide/example_c.result +29 -0
  249. data/test/data/users-guide/example_java.result +56 -0
  250. data/test/data/users-guide/example_js.result +22 -0
  251. data/test/data/users-guide/example_perl.result +20 -0
  252. data/test/data/users-guide/example_php.result +19 -0
  253. data/test/data/users-guide/example_scheme.result +30 -0
  254. data/test/data/users-guide/example_scheme_display.result +29 -0
  255. data/test/data/users-guide/fasteruby.rb +11 -0
  256. data/test/data/users-guide/fasteruby.result +38 -0
  257. data/test/data/users-guide/fasteruby.rhtml +15 -0
  258. data/test/data/users-guide/headerfooter-example.eruby +9 -0
  259. data/test/data/users-guide/headerfooter-example2.rb +8 -0
  260. data/test/data/users-guide/headerfooter-example2.rhtml +10 -0
  261. data/test/data/users-guide/headerfooter_example.result +11 -0
  262. data/test/data/users-guide/headerfooter_example2.result +13 -0
  263. data/test/data/users-guide/interpolation_example.result +9 -0
  264. data/test/data/users-guide/main_program1.rb +8 -0
  265. data/test/data/users-guide/main_program1.result +6 -0
  266. data/test/data/users-guide/main_program2.rb +8 -0
  267. data/test/data/users-guide/main_program2.result +6 -0
  268. data/test/data/users-guide/nocode-example.eruby +14 -0
  269. data/test/data/users-guide/nocode-php.result +20 -0
  270. data/test/data/users-guide/nocode_example.result +15 -0
  271. data/test/data/users-guide/normal-eruby-test.eruby +9 -0
  272. data/test/data/users-guide/normal_eruby_test.result +11 -0
  273. data/test/data/users-guide/notext-example.eruby +14 -0
  274. data/test/data/users-guide/notext-example.php +19 -0
  275. data/test/data/users-guide/notext-php.result +20 -0
  276. data/test/data/users-guide/notext_example.result +16 -0
  277. data/test/data/users-guide/percentline-example.rhtml +4 -0
  278. data/test/data/users-guide/percentline_example.result +7 -0
  279. data/test/data/users-guide/printenable_example.result +4 -0
  280. data/test/data/users-guide/printenabled-example.eruby +3 -0
  281. data/test/data/users-guide/printenabled-example.rb +8 -0
  282. data/test/data/users-guide/printstatement_example.result +8 -0
  283. data/test/data/users-guide/simplify_example.result +9 -0
  284. data/test/data/users-guide/stderr.log +3 -0
  285. data/test/data/users-guide/stdout_exmple.result +9 -0
  286. data/test/data/users-guide/stringbuffer_example.result +9 -0
  287. data/test/data/users-guide/tail_260.result +4 -0
  288. data/test/data/users-guide/tailnewline.rhtml +3 -0
  289. data/test/data/users-guide/template1.rhtml +4 -0
  290. data/test/data/users-guide/template2.rhtml +4 -0
  291. data/test/test-engines.rb +369 -0
  292. data/test/test-enhancers.rb +570 -0
  293. data/test/test-erubis.rb +883 -0
  294. data/test/test-main.rb +721 -0
  295. data/test/test-users-guide.rb +57 -0
  296. data/test/test.rb +29 -0
  297. data/test/testutil.rb +96 -0
  298. metadata +360 -0
@@ -0,0 +1,680 @@
1
+ ##
2
+ ## $Release: 2.6.5 $
3
+ ## copyright(c) 2006-2009 kuwata-lab.com all rights reserved.
4
+ ##
5
+
6
+
7
+ module Erubis
8
+
9
+
10
+ ##
11
+ ## switch '<%= ... %>' to escaped and '<%== ... %>' to unescaped
12
+ ##
13
+ ## ex.
14
+ ## class XmlEruby < Eruby
15
+ ## include EscapeEnhancer
16
+ ## end
17
+ ##
18
+ ## this is language-indenedent.
19
+ ##
20
+ module EscapeEnhancer
21
+
22
+ def self.desc # :nodoc:
23
+ "switch '<%= %>' to escaped and '<%== %>' to unescaped"
24
+ end
25
+
26
+ #--
27
+ #def self.included(klass)
28
+ # klass.class_eval <<-END
29
+ # alias _add_expr_literal add_expr_literal
30
+ # alias _add_expr_escaped add_expr_escaped
31
+ # alias add_expr_literal _add_expr_escaped
32
+ # alias add_expr_escaped _add_expr_literal
33
+ # END
34
+ #end
35
+ #++
36
+
37
+ def add_expr(src, code, indicator)
38
+ case indicator
39
+ when '='
40
+ @escape ? add_expr_literal(src, code) : add_expr_escaped(src, code)
41
+ when '=='
42
+ @escape ? add_expr_escaped(src, code) : add_expr_literal(src, code)
43
+ when '==='
44
+ add_expr_debug(src, code)
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+
51
+ #--
52
+ ## (obsolete)
53
+ #module FastEnhancer
54
+ #end
55
+ #++
56
+
57
+
58
+ ##
59
+ ## use $stdout instead of string
60
+ ##
61
+ ## this is only for Eruby.
62
+ ##
63
+ module StdoutEnhancer
64
+
65
+ def self.desc # :nodoc:
66
+ "use $stdout instead of array buffer or string buffer"
67
+ end
68
+
69
+ def add_preamble(src)
70
+ src << "_buf = $stdout;"
71
+ end
72
+
73
+ def add_postamble(src)
74
+ src << "\n''\n"
75
+ end
76
+
77
+ end
78
+
79
+
80
+ ##
81
+ ## use print statement instead of '_buf << ...'
82
+ ##
83
+ ## this is only for Eruby.
84
+ ##
85
+ module PrintOutEnhancer
86
+
87
+ def self.desc # :nodoc:
88
+ "use print statement instead of '_buf << ...'"
89
+ end
90
+
91
+ def add_preamble(src)
92
+ end
93
+
94
+ def add_text(src, text)
95
+ src << " print '" << escape_text(text) << "';" unless text.empty?
96
+ end
97
+
98
+ def add_expr_literal(src, code)
99
+ src << ' print((' << code << ').to_s);'
100
+ end
101
+
102
+ def add_expr_escaped(src, code)
103
+ src << ' print ' << escaped_expr(code) << ';'
104
+ end
105
+
106
+ def add_postamble(src)
107
+ src << "\n" unless src[-1] == ?\n
108
+ end
109
+
110
+ end
111
+
112
+
113
+ ##
114
+ ## enable print function
115
+ ##
116
+ ## Notice: use Eruby#evaluate() and don't use Eruby#result()
117
+ ## to be enable print function.
118
+ ##
119
+ ## this is only for Eruby.
120
+ ##
121
+ module PrintEnabledEnhancer
122
+
123
+ def self.desc # :nodoc:
124
+ "enable to use print function in '<% %>'"
125
+ end
126
+
127
+ def add_preamble(src)
128
+ src << "@_buf = "
129
+ super
130
+ end
131
+
132
+ def print(*args)
133
+ args.each do |arg|
134
+ @_buf << arg.to_s
135
+ end
136
+ end
137
+
138
+ def evaluate(context=nil)
139
+ _src = @src
140
+ if context.is_a?(Hash)
141
+ context.each do |key, val| instance_variable_set("@#{key}", val) end
142
+ elsif context
143
+ context.instance_variables.each do |name|
144
+ instance_variable_set(name, context.instance_variable_get(name))
145
+ end
146
+ end
147
+ return instance_eval(_src, (@filename || '(erubis)'))
148
+ end
149
+
150
+ end
151
+
152
+
153
+ ##
154
+ ## return array instead of string
155
+ ##
156
+ ## this is only for Eruby.
157
+ ##
158
+ module ArrayEnhancer
159
+
160
+ def self.desc # :nodoc:
161
+ "return array instead of string"
162
+ end
163
+
164
+ def add_preamble(src)
165
+ src << "_buf = [];"
166
+ end
167
+
168
+ def add_postamble(src)
169
+ src << "\n" unless src[-1] == ?\n
170
+ src << "_buf\n"
171
+ end
172
+
173
+ end
174
+
175
+
176
+ ##
177
+ ## use an Array object as buffer (included in Eruby by default)
178
+ ##
179
+ ## this is only for Eruby.
180
+ ##
181
+ module ArrayBufferEnhancer
182
+
183
+ def self.desc # :nodoc:
184
+ "use an Array object for buffering (included in Eruby class)"
185
+ end
186
+
187
+ def add_preamble(src)
188
+ src << "_buf = [];"
189
+ end
190
+
191
+ def add_postamble(src)
192
+ src << "\n" unless src[-1] == ?\n
193
+ src << "_buf.join\n"
194
+ end
195
+
196
+ end
197
+
198
+
199
+ ##
200
+ ## use String class for buffering
201
+ ##
202
+ ## this is only for Eruby.
203
+ ##
204
+ module StringBufferEnhancer
205
+
206
+ def self.desc # :nodoc:
207
+ "use a String object for buffering"
208
+ end
209
+
210
+ def add_preamble(src)
211
+ src << "_buf = '';"
212
+ end
213
+
214
+ def add_postamble(src)
215
+ src << "\n" unless src[-1] == ?\n
216
+ src << "_buf.to_s\n"
217
+ end
218
+
219
+ end
220
+
221
+
222
+ ##
223
+ ## use StringIO class for buffering
224
+ ##
225
+ ## this is only for Eruby.
226
+ ##
227
+ module StringIOEnhancer # :nodoc:
228
+
229
+ def self.desc # :nodoc:
230
+ "use a StringIO object for buffering"
231
+ end
232
+
233
+ def add_preamble(src)
234
+ src << "_buf = StringIO.new;"
235
+ end
236
+
237
+ def add_postamble(src)
238
+ src << "\n" unless src[-1] == ?\n
239
+ src << "_buf.string\n"
240
+ end
241
+
242
+ end
243
+
244
+
245
+ ##
246
+ ## set buffer variable name to '_erbout' as well as '_buf'
247
+ ##
248
+ ## this is only for Eruby.
249
+ ##
250
+ module ErboutEnhancer
251
+
252
+ def self.desc # :nodoc:
253
+ "set '_erbout = _buf = \"\";' to be compatible with ERB."
254
+ end
255
+
256
+ def add_preamble(src)
257
+ src << "_erbout = _buf = '';"
258
+ end
259
+
260
+ def add_postamble(src)
261
+ src << "\n" unless src[-1] == ?\n
262
+ src << "_buf.to_s\n"
263
+ end
264
+
265
+ end
266
+
267
+
268
+ ##
269
+ ## remove text and leave code, especially useful when debugging.
270
+ ##
271
+ ## ex.
272
+ ## $ erubis -s -E NoText file.eruby | more
273
+ ##
274
+ ## this is language independent.
275
+ ##
276
+ module NoTextEnhancer
277
+
278
+ def self.desc # :nodoc:
279
+ "remove text and leave code (useful when debugging)"
280
+ end
281
+
282
+ def add_text(src, text)
283
+ src << ("\n" * text.count("\n"))
284
+ if text[-1] != ?\n
285
+ text =~ /^(.*?)\z/
286
+ src << (' ' * $1.length)
287
+ end
288
+ end
289
+
290
+ end
291
+
292
+
293
+ ##
294
+ ## remove code and leave text, especially useful when validating HTML tags.
295
+ ##
296
+ ## ex.
297
+ ## $ erubis -s -E NoCode file.eruby | tidy -errors
298
+ ##
299
+ ## this is language independent.
300
+ ##
301
+ module NoCodeEnhancer
302
+
303
+ def self.desc # :nodoc:
304
+ "remove code and leave text (useful when validating HTML)"
305
+ end
306
+
307
+ def add_preamble(src)
308
+ end
309
+
310
+ def add_postamble(src)
311
+ end
312
+
313
+ def add_text(src, text)
314
+ src << text
315
+ end
316
+
317
+ def add_expr(src, code, indicator)
318
+ src << "\n" * code.count("\n")
319
+ end
320
+
321
+ def add_stmt(src, code)
322
+ src << "\n" * code.count("\n")
323
+ end
324
+
325
+ end
326
+
327
+
328
+ ##
329
+ ## get convert faster, but spaces around '<%...%>' are not trimmed.
330
+ ##
331
+ ## this is language-independent.
332
+ ##
333
+ module SimplifyEnhancer
334
+
335
+ def self.desc # :nodoc:
336
+ "get convert faster but leave spaces around '<% %>'"
337
+ end
338
+
339
+ #DEFAULT_REGEXP = /(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
340
+ SIMPLE_REGEXP = /<%(=+|\#)?(.*?)-?%>/m
341
+
342
+ def convert(input)
343
+ src = ""
344
+ add_preamble(src)
345
+ #regexp = pattern_regexp(@pattern)
346
+ pos = 0
347
+ input.scan(SIMPLE_REGEXP) do |indicator, code|
348
+ match = Regexp.last_match
349
+ index = match.begin(0)
350
+ text = input[pos, index - pos]
351
+ pos = match.end(0)
352
+ add_text(src, text)
353
+ if !indicator # <% %>
354
+ add_stmt(src, code)
355
+ elsif indicator[0] == ?\# # <%# %>
356
+ n = code.count("\n")
357
+ add_stmt(src, "\n" * n)
358
+ else # <%= %>
359
+ add_expr(src, code, indicator)
360
+ end
361
+ end
362
+ #rest = $' || input # ruby1.8
363
+ rest = pos == 0 ? input : input[pos..-1] # ruby1.9
364
+ add_text(src, rest)
365
+ add_postamble(src)
366
+ return src
367
+ end
368
+
369
+ end
370
+
371
+
372
+ ##
373
+ ## enable to use other embedded expression pattern (default is '\[= =\]').
374
+ ##
375
+ ## notice! this is an experimental. spec may change in the future.
376
+ ##
377
+ ## ex.
378
+ ## input = <<END
379
+ ## <% for item in list %>
380
+ ## <%= item %> : <%== item %>
381
+ ## [= item =] : [== item =]
382
+ ## <% end %>
383
+ ## END
384
+ ##
385
+ ## class BiPatternEruby
386
+ ## include BiPatternEnhancer
387
+ ## end
388
+ ## eruby = BiPatternEruby.new(input, :bipattern=>'\[= =\]')
389
+ ## list = ['<a>', 'b&b', '"c"']
390
+ ## print eruby.result(binding())
391
+ ##
392
+ ## ## output
393
+ ## <a> : &lt;a&gt;
394
+ ## <a> : &lt;a&gt;
395
+ ## b&b : b&amp;b
396
+ ## b&b : b&amp;b
397
+ ## "c" : &quot;c&quot;
398
+ ## "c" : &quot;c&quot;
399
+ ##
400
+ ## this is language independent.
401
+ ##
402
+ module BiPatternEnhancer
403
+
404
+ def self.desc # :nodoc:
405
+ "another embedded expression pattern (default '\[= =\]')."
406
+ end
407
+
408
+ def initialize(input, properties={})
409
+ self.bipattern = properties[:bipattern] # or '\$\{ \}'
410
+ super
411
+ end
412
+
413
+ ## when pat is nil then '\[= =\]' is used
414
+ def bipattern=(pat) # :nodoc:
415
+ @bipattern = pat || '\[= =\]'
416
+ pre, post = @bipattern.split()
417
+ @bipattern_regexp = /(.*?)#{pre}(=*)(.*?)#{post}/m
418
+ end
419
+
420
+ def add_text(src, text)
421
+ return unless text
422
+ m = nil
423
+ text.scan(@bipattern_regexp) do |txt, indicator, code|
424
+ m = Regexp.last_match
425
+ super(src, txt)
426
+ add_expr(src, code, '=' + indicator)
427
+ end
428
+ #rest = $' || text # ruby1.8
429
+ rest = m ? text[m.end(0)..-1] : text # ruby1.9
430
+ super(src, rest)
431
+ end
432
+
433
+ end
434
+
435
+
436
+ ##
437
+ ## regards lines starting with '%' as program code
438
+ ##
439
+ ## this is for compatibility to eruby and ERB.
440
+ ##
441
+ ## this is language-independent.
442
+ ##
443
+ module PercentLineEnhancer
444
+
445
+ def self.desc # :nodoc:
446
+ "regard lines starting with '%' as program code"
447
+ end
448
+
449
+ def add_text(src, text)
450
+ pos = 0
451
+ text2 = ''
452
+ text.scan(/^\%(.*?\r?\n)/) do
453
+ line = $1
454
+ match = Regexp.last_match
455
+ len = match.begin(0) - pos
456
+ str = text[pos, len]
457
+ pos = match.end(0)
458
+ if text2.empty?
459
+ text2 = str
460
+ else
461
+ text2 << str
462
+ end
463
+ if line[0] == ?%
464
+ text2 << line
465
+ else
466
+ super(src, text2)
467
+ text2 = ''
468
+ add_stmt(src, line)
469
+ end
470
+ end
471
+ #rest = pos == 0 ? text : $' # ruby1.8
472
+ rest = pos == 0 ? text : text[pos..-1] # ruby1.9
473
+ unless text2.empty?
474
+ text2 << rest if rest
475
+ rest = text2
476
+ end
477
+ super(src, rest)
478
+ end
479
+
480
+ end
481
+
482
+
483
+ ##
484
+ ## [experimental] allow header and footer in eRuby script
485
+ ##
486
+ ## ex.
487
+ ## ====================
488
+ ## ## without header and footer
489
+ ## $ cat ex1.eruby
490
+ ## <% def list_items(list) %>
491
+ ## <% for item in list %>
492
+ ## <li><%= item %></li>
493
+ ## <% end %>
494
+ ## <% end %>
495
+ ##
496
+ ## $ erubis -s ex1.eruby
497
+ ## _buf = []; def list_items(list)
498
+ ## ; for item in list
499
+ ## ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
500
+ ## '; end
501
+ ## ; end
502
+ ## ;
503
+ ## _buf.join
504
+ ##
505
+ ## ## with header and footer
506
+ ## $ cat ex2.eruby
507
+ ## <!--#header:
508
+ ## def list_items(list)
509
+ ## #-->
510
+ ## <% for item in list %>
511
+ ## <li><%= item %></li>
512
+ ## <% end %>
513
+ ## <!--#footer:
514
+ ## end
515
+ ## #-->
516
+ ##
517
+ ## $ erubis -s -c HeaderFooterEruby ex4.eruby
518
+ ##
519
+ ## def list_items(list)
520
+ ## _buf = []; _buf << '
521
+ ## '; for item in list
522
+ ## ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
523
+ ## '; end
524
+ ## ; _buf << '
525
+ ## ';
526
+ ## _buf.join
527
+ ## end
528
+ ##
529
+ ## ====================
530
+ ##
531
+ ## this is language-independent.
532
+ ##
533
+ module HeaderFooterEnhancer
534
+
535
+ def self.desc # :nodoc:
536
+ "allow header/footer in document (ex. '<!--#header: #-->')"
537
+ end
538
+
539
+ HEADER_FOOTER_PATTERN = /(.*?)(^[ \t]*)?<!--\#(\w+):(.*?)\#-->([ \t]*\r?\n)?/m
540
+
541
+ def add_text(src, text)
542
+ m = nil
543
+ text.scan(HEADER_FOOTER_PATTERN) do |txt, lspace, word, content, rspace|
544
+ m = Regexp.last_match
545
+ flag_trim = @trim && lspace && rspace
546
+ super(src, txt)
547
+ content = "#{lspace}#{content}#{rspace}" if flag_trim
548
+ super(src, lspace) if !flag_trim && lspace
549
+ instance_variable_set("@#{word}", content)
550
+ super(src, rspace) if !flag_trim && rspace
551
+ end
552
+ #rest = $' || text # ruby1.8
553
+ rest = m ? text[m.end(0)..-1] : text # ruby1.9
554
+ super(src, rest)
555
+ end
556
+
557
+ attr_accessor :header, :footer
558
+
559
+ def convert(input)
560
+ source = super
561
+ return @src = "#{@header}#{source}#{@footer}"
562
+ end
563
+
564
+ end
565
+
566
+
567
+ ##
568
+ ## delete indentation of HTML.
569
+ ##
570
+ ## this is language-independent.
571
+ ##
572
+ module DeleteIndentEnhancer
573
+
574
+ def self.desc # :nodoc:
575
+ "delete indentation of HTML."
576
+ end
577
+
578
+ def convert_input(src, input)
579
+ input = input.gsub(/^[ \t]+</, '<')
580
+ super(src, input)
581
+ end
582
+
583
+ end
584
+
585
+
586
+ ##
587
+ ## convert "<h1><%=title%></h1>" into "_buf << %Q`<h1>#{title}</h1>`"
588
+ ##
589
+ ## this is only for Eruby.
590
+ ##
591
+ module InterpolationEnhancer
592
+
593
+ def self.desc # :nodoc:
594
+ "convert '<p><%=text%></p>' into '_buf << %Q`<p>\#{text}</p>`'"
595
+ end
596
+
597
+ def convert_input(src, input)
598
+ pat = @pattern
599
+ regexp = pat.nil? || pat == '<% %>' ? Basic::Converter::DEFAULT_REGEXP : pattern_regexp(pat)
600
+ pos = 0
601
+ is_bol = true # is beginning of line
602
+ str = ''
603
+ input.scan(regexp) do |indicator, code, tailch, rspace|
604
+ match = Regexp.last_match()
605
+ len = match.begin(0) - pos
606
+ text = input[pos, len]
607
+ pos = match.end(0)
608
+ ch = indicator ? indicator[0] : nil
609
+ lspace = ch == ?= ? nil : detect_spaces_at_bol(text, is_bol)
610
+ is_bol = rspace ? true : false
611
+ _add_text_to_str(str, text)
612
+ ## * when '<%= %>', do nothing
613
+ ## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
614
+ if ch == ?= # <%= %>
615
+ rspace = nil if tailch && !tailch.empty?
616
+ str << lspace if lspace
617
+ add_expr(str, code, indicator)
618
+ str << rspace if rspace
619
+ elsif ch == ?\# # <%# %>
620
+ n = code.count("\n") + (rspace ? 1 : 0)
621
+ if @trim && lspace && rspace
622
+ add_text(src, str)
623
+ str = ''
624
+ add_stmt(src, "\n" * n)
625
+ else
626
+ str << lspace if lspace
627
+ add_text(src, str)
628
+ str = ''
629
+ add_stmt(src, "\n" * n)
630
+ str << rspace if rspace
631
+ end
632
+ else # <% %>
633
+ if @trim && lspace && rspace
634
+ add_text(src, str)
635
+ str = ''
636
+ add_stmt(src, "#{lspace}#{code}#{rspace}")
637
+ else
638
+ str << lspace if lspace
639
+ add_text(src, str)
640
+ str = ''
641
+ add_stmt(src, code)
642
+ str << rspace if rspace
643
+ end
644
+ end
645
+ end
646
+ #rest = $' || input # ruby1.8
647
+ rest = pos == 0 ? input : input[pos..-1] # ruby1.9
648
+ _add_text_to_str(str, rest)
649
+ add_text(src, str)
650
+ end
651
+
652
+ def add_text(src, text)
653
+ return if !text || text.empty?
654
+ #src << " _buf << %Q`" << text << "`;"
655
+ if text[-1] == ?\n
656
+ text[-1] = "\\n"
657
+ src << " _buf << %Q`" << text << "`\n"
658
+ else
659
+ src << " _buf << %Q`" << text << "`;"
660
+ end
661
+ end
662
+
663
+ def _add_text_to_str(str, text)
664
+ return if !text || text.empty?
665
+ text.gsub!(/['\#\\]/, '\\\\\&')
666
+ str << text
667
+ end
668
+
669
+ def add_expr_escaped(str, code)
670
+ str << "\#{#{escaped_expr(code)}}"
671
+ end
672
+
673
+ def add_expr_literal(str, code)
674
+ str << "\#{#{code}}"
675
+ end
676
+
677
+ end
678
+
679
+
680
+ end
@@ -0,0 +1,23 @@
1
+ ##
2
+ ## $Release: 2.6.5 $
3
+ ## copyright(c) 2006-2009 kuwata-lab.com all rights reserved.
4
+ ##
5
+
6
+ module Erubis
7
+
8
+
9
+ ##
10
+ ## base error class
11
+ ##
12
+ class ErubisError < StandardError
13
+ end
14
+
15
+
16
+ ##
17
+ ## raised when method or function is not supported
18
+ ##
19
+ class NotSupportedError < ErubisError
20
+ end
21
+
22
+
23
+ end