ghazel-erubis 2.6.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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