erubis 2.6.6 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES.txt +79 -3
- data/MIT-LICENSE +1 -1
- data/README.txt +2 -2
- data/benchmark/bench.rb +2 -2
- data/bin/erubis +2 -2
- data/contrib/erubis +293 -155
- data/contrib/inline-require +2 -2
- data/doc-api/classes/Erubis.html +10 -1
- data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +12 -12
- data/doc-api/classes/Erubis/ArrayEnhancer.html +14 -14
- data/doc-api/classes/Erubis/Basic/Converter.html +24 -24
- data/doc-api/classes/Erubis/BiPatternEnhancer.html +12 -12
- data/doc-api/classes/Erubis/CGenerator.html +60 -60
- data/doc-api/classes/Erubis/Context.html +42 -42
- data/doc-api/classes/Erubis/Converter.html +27 -27
- data/doc-api/classes/Erubis/CppGenerator.html +382 -0
- data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +7 -7
- data/doc-api/classes/Erubis/Ecpp.html +126 -0
- data/doc-api/classes/Erubis/Engine.html +36 -36
- data/doc-api/classes/Erubis/ErboutEnhancer.html +14 -14
- data/doc-api/classes/Erubis/EscapeEnhancer.html +6 -6
- data/doc-api/classes/Erubis/EscapedEcpp.html +120 -0
- data/doc-api/classes/Erubis/Evaluator.html +19 -19
- data/doc-api/classes/Erubis/Generator.html +60 -60
- data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +14 -14
- data/doc-api/classes/Erubis/Helpers/RailsFormHelper.html +150 -150
- data/doc-api/classes/Erubis/Helpers/RailsHelper.html +49 -49
- data/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html +24 -24
- data/doc-api/classes/Erubis/InterpolationEnhancer.html +38 -39
- data/doc-api/classes/Erubis/JavaGenerator.html +60 -60
- data/doc-api/classes/Erubis/JavascriptGenerator.html +66 -66
- data/doc-api/classes/Erubis/Main.html +22 -22
- data/doc-api/classes/Erubis/NoCodeEnhancer.html +30 -30
- data/doc-api/classes/Erubis/NoTextEnhancer.html +6 -6
- data/doc-api/classes/Erubis/OptimizedEruby.html +6 -6
- data/doc-api/classes/Erubis/OptimizedGenerator.html +72 -72
- data/doc-api/classes/Erubis/OptimizedXmlEruby.html +6 -6
- data/doc-api/classes/Erubis/PI.html +1 -0
- data/doc-api/classes/Erubis/PI/Converter.html +18 -18
- data/doc-api/classes/Erubis/PI/Ec.html +6 -6
- data/doc-api/classes/Erubis/PI/Ecpp.html +166 -0
- data/doc-api/classes/Erubis/PI/Ejava.html +6 -6
- data/doc-api/classes/Erubis/PI/Ejavascript.html +6 -6
- data/doc-api/classes/Erubis/PI/Eperl.html +6 -6
- data/doc-api/classes/Erubis/PI/Ephp.html +6 -6
- data/doc-api/classes/Erubis/PI/Eruby.html +7 -7
- data/doc-api/classes/Erubis/PI/Escheme.html +6 -6
- data/doc-api/classes/Erubis/PI/TinyEruby.html +24 -24
- data/doc-api/classes/Erubis/PercentLineEnhancer.html +18 -34
- data/doc-api/classes/Erubis/PerlGenerator.html +54 -54
- data/doc-api/classes/Erubis/PhpGenerator.html +54 -54
- data/doc-api/classes/Erubis/PrefixedLineEnhancer.html +210 -0
- data/doc-api/classes/Erubis/PrefixedLineEruby.html +120 -0
- data/doc-api/classes/Erubis/PreprocessingEruby.html +12 -12
- data/doc-api/classes/Erubis/PreprocessingHelper.html +22 -22
- data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +20 -20
- data/doc-api/classes/Erubis/PrintOutEnhancer.html +33 -33
- data/doc-api/classes/Erubis/RubyEvaluator.html +18 -18
- data/doc-api/classes/Erubis/RubyGenerator.html +59 -58
- data/doc-api/classes/Erubis/SchemeGenerator.html +60 -60
- data/doc-api/classes/Erubis/SimplifyEnhancer.html +7 -7
- data/doc-api/classes/Erubis/StdoutEnhancer.html +13 -13
- data/doc-api/classes/Erubis/StringBufferEnhancer.html +14 -14
- data/doc-api/classes/Erubis/TinyEruby.html +24 -24
- data/doc-api/classes/Erubis/XmlHelper.html +30 -30
- data/doc-api/classes/Kernel.html +155 -0
- data/doc-api/created.rid +1 -1
- data/doc-api/files/README_txt.html +3 -3
- data/doc-api/files/erubis/context_rb.html +1 -1
- data/doc-api/files/erubis/converter_rb.html +3 -3
- data/doc-api/files/erubis/engine/ec_rb.html +1 -1
- data/doc-api/files/erubis/engine/ecpp_rb.html +115 -0
- data/doc-api/files/erubis/engine/ejava_rb.html +2 -2
- data/doc-api/files/erubis/engine/ejavascript_rb.html +2 -2
- data/doc-api/files/erubis/engine/enhanced_rb.html +2 -2
- data/doc-api/files/erubis/engine/eperl_rb.html +1 -1
- data/doc-api/files/erubis/engine/ephp_rb.html +1 -1
- data/doc-api/files/erubis/engine/eruby_rb.html +2 -2
- data/doc-api/files/erubis/engine/escheme_rb.html +1 -1
- data/doc-api/files/erubis/engine/optimized_rb.html +1 -1
- data/doc-api/files/erubis/engine_rb.html +2 -2
- data/doc-api/files/erubis/enhancer_rb.html +2 -2
- data/doc-api/files/erubis/error_rb.html +1 -1
- data/doc-api/files/erubis/evaluator_rb.html +1 -1
- data/doc-api/files/erubis/generator_rb.html +3 -3
- data/doc-api/files/erubis/helper_rb.html +1 -1
- data/doc-api/files/erubis/helpers/rails_form_helper_rb.html +1 -1
- data/doc-api/files/erubis/helpers/rails_helper_rb.html +1 -1
- data/doc-api/files/erubis/local-setting_rb.html +1 -1
- data/doc-api/files/erubis/main_rb.html +4 -2
- data/doc-api/files/erubis/preprocessing_rb.html +1 -1
- data/doc-api/files/erubis/tiny_rb.html +1 -1
- data/doc-api/files/erubis/util_rb.html +107 -0
- data/doc-api/files/erubis_rb.html +2 -2
- data/doc-api/fr_class_index.html +7 -0
- data/doc-api/fr_file_index.html +2 -0
- data/doc-api/fr_method_index.html +237 -223
- data/doc/docstyle.css +25 -4
- data/doc/users-guide.html +286 -21
- data/examples/basic/Makefile +7 -2
- data/examples/basic/example.ecpp +33 -0
- data/lib/erubis.rb +4 -3
- data/lib/erubis/context.rb +2 -2
- data/lib/erubis/converter.rb +3 -3
- data/lib/erubis/engine.rb +8 -8
- data/lib/erubis/engine/ec.rb +2 -2
- data/lib/erubis/engine/ecpp.rb +113 -0
- data/lib/erubis/engine/ejava.rb +9 -9
- data/lib/erubis/engine/ejavascript.rb +9 -9
- data/lib/erubis/engine/enhanced.rb +7 -2
- data/lib/erubis/engine/eperl.rb +2 -2
- data/lib/erubis/engine/ephp.rb +2 -2
- data/lib/erubis/engine/eruby.rb +8 -7
- data/lib/erubis/engine/escheme.rb +2 -2
- data/lib/erubis/engine/optimized.rb +2 -2
- data/lib/erubis/enhancer.rb +70 -27
- data/lib/erubis/error.rb +2 -2
- data/lib/erubis/evaluator.rb +2 -2
- data/lib/erubis/generator.rb +3 -3
- data/lib/erubis/helper.rb +2 -2
- data/lib/erubis/helpers/rails_form_helper.rb +2 -2
- data/lib/erubis/helpers/rails_helper.rb +2 -2
- data/lib/erubis/local-setting.rb +2 -2
- data/lib/erubis/main.rb +31 -4
- data/lib/erubis/preprocessing.rb +2 -2
- data/lib/erubis/tiny.rb +2 -2
- data/lib/erubis/util.rb +22 -0
- data/test/assert-text-equal.rb +2 -2
- data/test/data/users-guide/bufvar-example.rb +10 -0
- data/test/data/users-guide/bufvar-example.result +17 -0
- data/test/data/users-guide/example.ecpp +30 -0
- data/test/data/users-guide/example_c.result +22 -19
- data/test/data/users-guide/fasteruby-example.rb +8 -0
- data/test/data/users-guide/fasteruby-example.result +18 -0
- data/test/data/users-guide/percentline-example.rhtml +3 -1
- data/test/data/users-guide/percentline_example.result +5 -3
- data/test/data/users-guide/prefixedline-example.rb +9 -0
- data/test/data/users-guide/prefixedline-example.rhtml +6 -0
- data/test/data/users-guide/prefixedline_example.result +9 -0
- data/test/test-engines.rb +58 -2
- data/test/test-enhancers.rb +51 -2
- data/test/test-erubis.rb +14 -10
- data/test/test-index-cgi.rb +191 -0
- data/test/test-main.rb +35 -4
- data/test/test-users-guide.rb +18 -2
- data/test/test.rb +18 -2
- data/test/testutil.rb +22 -7
- metadata +30 -24
data/lib/erubis/enhancer.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
##
|
2
|
-
## $Release: 2.
|
3
|
-
## copyright(c) 2006-
|
2
|
+
## $Release: 2.7.0 $
|
3
|
+
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
4
4
|
##
|
5
5
|
|
6
6
|
|
@@ -67,7 +67,7 @@ module Erubis
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def add_preamble(src)
|
70
|
-
src << "
|
70
|
+
src << "#{@bufvar} = $stdout;"
|
71
71
|
end
|
72
72
|
|
73
73
|
def add_postamble(src)
|
@@ -92,15 +92,15 @@ module Erubis
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def add_text(src, text)
|
95
|
-
src << " print '
|
95
|
+
src << " print '#{escape_text(text)}';" unless text.empty?
|
96
96
|
end
|
97
97
|
|
98
98
|
def add_expr_literal(src, code)
|
99
|
-
src <<
|
99
|
+
src << " print((#{code}).to_s);"
|
100
100
|
end
|
101
101
|
|
102
102
|
def add_expr_escaped(src, code)
|
103
|
-
src <<
|
103
|
+
src << " print #{escaped_expr(code)};"
|
104
104
|
end
|
105
105
|
|
106
106
|
def add_postamble(src)
|
@@ -162,12 +162,12 @@ module Erubis
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def add_preamble(src)
|
165
|
-
src << "
|
165
|
+
src << "#{@bufvar} = [];"
|
166
166
|
end
|
167
167
|
|
168
168
|
def add_postamble(src)
|
169
169
|
src << "\n" unless src[-1] == ?\n
|
170
|
-
src << "
|
170
|
+
src << "#{@bufvar}\n"
|
171
171
|
end
|
172
172
|
|
173
173
|
end
|
@@ -208,12 +208,12 @@ module Erubis
|
|
208
208
|
end
|
209
209
|
|
210
210
|
def add_preamble(src)
|
211
|
-
src << "
|
211
|
+
src << "#{@bufvar} = '';"
|
212
212
|
end
|
213
213
|
|
214
214
|
def add_postamble(src)
|
215
215
|
src << "\n" unless src[-1] == ?\n
|
216
|
-
src << "
|
216
|
+
src << "#{@bufvar}.to_s\n"
|
217
217
|
end
|
218
218
|
|
219
219
|
end
|
@@ -231,12 +231,12 @@ module Erubis
|
|
231
231
|
end
|
232
232
|
|
233
233
|
def add_preamble(src)
|
234
|
-
src << "
|
234
|
+
src << "#{@bufvar} = StringIO.new;"
|
235
235
|
end
|
236
236
|
|
237
237
|
def add_postamble(src)
|
238
238
|
src << "\n" unless src[-1] == ?\n
|
239
|
-
src << "
|
239
|
+
src << "#{@bufvar}.string\n"
|
240
240
|
end
|
241
241
|
|
242
242
|
end
|
@@ -254,12 +254,12 @@ module Erubis
|
|
254
254
|
end
|
255
255
|
|
256
256
|
def add_preamble(src)
|
257
|
-
src << "_erbout =
|
257
|
+
src << "_erbout = #{@bufvar} = '';"
|
258
258
|
end
|
259
259
|
|
260
260
|
def add_postamble(src)
|
261
261
|
src << "\n" unless src[-1] == ?\n
|
262
|
-
src << "
|
262
|
+
src << "#{@bufvar}.to_s\n"
|
263
263
|
end
|
264
264
|
|
265
265
|
end
|
@@ -434,23 +434,34 @@ module Erubis
|
|
434
434
|
|
435
435
|
|
436
436
|
##
|
437
|
-
## regards lines starting with '
|
437
|
+
## regards lines starting with '^[ \t]*%' as program code
|
438
438
|
##
|
439
|
-
##
|
439
|
+
## in addition you can specify prefix character (default '%')
|
440
440
|
##
|
441
441
|
## this is language-independent.
|
442
442
|
##
|
443
|
-
module
|
443
|
+
module PrefixedLineEnhancer
|
444
444
|
|
445
445
|
def self.desc # :nodoc:
|
446
|
-
"regard lines
|
446
|
+
"regard lines matched to '^[ \t]*%' as program code"
|
447
|
+
end
|
448
|
+
|
449
|
+
def init_generator(properties={})
|
450
|
+
super
|
451
|
+
@prefixchar = properties[:prefixchar]
|
447
452
|
end
|
448
453
|
|
449
454
|
def add_text(src, text)
|
455
|
+
unless @prefixrexp
|
456
|
+
@prefixchar ||= '%'
|
457
|
+
@prefixrexp = Regexp.compile("^([ \\t]*)\\#{@prefixchar}(.*?\\r?\\n)")
|
458
|
+
end
|
450
459
|
pos = 0
|
451
460
|
text2 = ''
|
452
|
-
text.scan(
|
453
|
-
|
461
|
+
text.scan(@prefixrexp) do
|
462
|
+
space = $1
|
463
|
+
line = $2
|
464
|
+
space, line = '', $1 unless $2
|
454
465
|
match = Regexp.last_match
|
455
466
|
len = match.begin(0) - pos
|
456
467
|
str = text[pos, len]
|
@@ -460,12 +471,12 @@ module Erubis
|
|
460
471
|
else
|
461
472
|
text2 << str
|
462
473
|
end
|
463
|
-
if line[0] ==
|
464
|
-
text2 << line
|
474
|
+
if line[0, 1] == @prefixchar
|
475
|
+
text2 << space << line
|
465
476
|
else
|
466
477
|
super(src, text2)
|
467
478
|
text2 = ''
|
468
|
-
add_stmt(src, line)
|
479
|
+
add_stmt(src, space + line)
|
469
480
|
end
|
470
481
|
end
|
471
482
|
#rest = pos == 0 ? text : $' # ruby1.8
|
@@ -480,6 +491,39 @@ module Erubis
|
|
480
491
|
end
|
481
492
|
|
482
493
|
|
494
|
+
##
|
495
|
+
## regards lines starting with '%' as program code
|
496
|
+
##
|
497
|
+
## this is for compatibility to eruby and ERB.
|
498
|
+
##
|
499
|
+
## this is language-independent.
|
500
|
+
##
|
501
|
+
module PercentLineEnhancer
|
502
|
+
include PrefixedLineEnhancer
|
503
|
+
|
504
|
+
def self.desc # :nodoc:
|
505
|
+
"regard lines starting with '%' as program code"
|
506
|
+
end
|
507
|
+
|
508
|
+
#--
|
509
|
+
#def init_generator(properties={})
|
510
|
+
# super
|
511
|
+
# @prefixchar = '%'
|
512
|
+
# @prefixrexp = /^\%(.*?\r?\n)/
|
513
|
+
#end
|
514
|
+
#++
|
515
|
+
|
516
|
+
def add_text(src, text)
|
517
|
+
unless @prefixrexp
|
518
|
+
@prefixchar = '%'
|
519
|
+
@prefixrexp = /^\%(.*?\r?\n)/
|
520
|
+
end
|
521
|
+
super(src, text)
|
522
|
+
end
|
523
|
+
|
524
|
+
end
|
525
|
+
|
526
|
+
|
483
527
|
##
|
484
528
|
## [experimental] allow header and footer in eRuby script
|
485
529
|
##
|
@@ -654,16 +698,15 @@ module Erubis
|
|
654
698
|
#src << " _buf << %Q`" << text << "`;"
|
655
699
|
if text[-1] == ?\n
|
656
700
|
text[-1] = "\\n"
|
657
|
-
src << "
|
701
|
+
src << " #{@bufvar} << %Q`#{text}`\n"
|
658
702
|
else
|
659
|
-
src << "
|
703
|
+
src << " #{@bufvar} << %Q`#{text}`;"
|
660
704
|
end
|
661
705
|
end
|
662
706
|
|
663
707
|
def _add_text_to_str(str, text)
|
664
708
|
return if !text || text.empty?
|
665
|
-
text.gsub
|
666
|
-
str << text
|
709
|
+
str << text.gsub(/[`\#\\]/, '\\\\\&')
|
667
710
|
end
|
668
711
|
|
669
712
|
def add_expr_escaped(str, code)
|
data/lib/erubis/error.rb
CHANGED
data/lib/erubis/evaluator.rb
CHANGED
data/lib/erubis/generator.rb
CHANGED
data/lib/erubis/helper.rb
CHANGED
data/lib/erubis/local-setting.rb
CHANGED
data/lib/erubis/main.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###
|
2
|
-
### $Release: 2.
|
3
|
-
### copyright(c) 2006-
|
2
|
+
### $Release: 2.7.0 $
|
3
|
+
### copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
4
4
|
###
|
5
5
|
|
6
6
|
require 'yaml'
|
@@ -11,6 +11,7 @@ require 'erubis/engine/optimized'
|
|
11
11
|
require 'erubis/engine/eruby'
|
12
12
|
require 'erubis/engine/ephp'
|
13
13
|
require 'erubis/engine/ec'
|
14
|
+
require 'erubis/engine/ecpp'
|
14
15
|
require 'erubis/engine/ejava'
|
15
16
|
require 'erubis/engine/escheme'
|
16
17
|
require 'erubis/engine/eperl'
|
@@ -231,7 +232,7 @@ module Erubis
|
|
231
232
|
buf << " -z : syntax checking"
|
232
233
|
buf << " -e : escape (equal to '--E Escape')"
|
233
234
|
buf << " -p pattern : embedded pattern (default '<% %>')"
|
234
|
-
buf << " -l lang : convert but no execute (ruby/php/c/java/scheme/perl/js)"
|
235
|
+
buf << " -l lang : convert but no execute (ruby/php/c/cpp/java/scheme/perl/js)"
|
235
236
|
buf << " -E e1,e2,... : enhancer names (Escape, PercentLine, BiPattern, ...)"
|
236
237
|
buf << " -I path : library include path"
|
237
238
|
buf << " -K kanji : kanji code (euc/sjis/utf8) (default none)"
|
@@ -269,7 +270,7 @@ module Erubis
|
|
269
270
|
list << ['(common)', common_props]
|
270
271
|
list << ['(basic)', basic_props - common_props]
|
271
272
|
list << ['(pi)', pi_props - common_props]
|
272
|
-
%w[ruby php c java scheme perl javascript].each do |lang|
|
273
|
+
%w[ruby php c cpp java scheme perl javascript].each do |lang|
|
273
274
|
klass = Erubis.const_get("E#{lang}")
|
274
275
|
list << [lang, collect_supported_properties(klass) - basic_props]
|
275
276
|
end
|
@@ -484,6 +485,32 @@ module Erubis
|
|
484
485
|
return "#{filename}:#{linenum}: #{message}"
|
485
486
|
end
|
486
487
|
|
488
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx"
|
489
|
+
def check_syntax(filename, src)
|
490
|
+
require 'compiler'
|
491
|
+
verbose = $VERBOSE
|
492
|
+
msg = nil
|
493
|
+
begin
|
494
|
+
$VERBOSE = true
|
495
|
+
Rubinius::Compiler.compile_string(src, filename)
|
496
|
+
rescue SyntaxError => ex
|
497
|
+
ex_linenum = ex.line
|
498
|
+
linenum = 0
|
499
|
+
srcline = src.each_line do |line|
|
500
|
+
linenum += 1
|
501
|
+
break line if linenum == ex_linenum
|
502
|
+
end
|
503
|
+
msg = "#{ex.message}\n"
|
504
|
+
msg << srcline
|
505
|
+
msg << "\n" unless srcline =~ /\n\z/
|
506
|
+
msg << (" " * (ex.column-1)) << "^\n"
|
507
|
+
ensure
|
508
|
+
$VERBOSE = verbose
|
509
|
+
end
|
510
|
+
return msg
|
511
|
+
end
|
512
|
+
end
|
513
|
+
|
487
514
|
end
|
488
515
|
|
489
516
|
end
|
data/lib/erubis/preprocessing.rb
CHANGED
data/lib/erubis/tiny.rb
CHANGED
data/lib/erubis/util.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
##
|
2
|
+
## $Release: 2.7.0 $
|
3
|
+
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
4
|
+
##
|
5
|
+
|
6
|
+
module Kernel
|
7
|
+
|
8
|
+
##
|
9
|
+
## raise NotImplementedError
|
10
|
+
##
|
11
|
+
def not_implemented #:doc:
|
12
|
+
backtrace = caller()
|
13
|
+
method_name = (backtrace.shift =~ /`(\w+)'$/) && $1
|
14
|
+
mesg = "class #{self.class.name} must implement abstract method '#{method_name}()'."
|
15
|
+
#mesg = "#{self.class.name}##{method_name}() is not implemented."
|
16
|
+
err = NotImplementedError.new mesg
|
17
|
+
err.set_backtrace backtrace
|
18
|
+
raise err
|
19
|
+
end
|
20
|
+
private :not_implemented
|
21
|
+
|
22
|
+
end
|
data/test/assert-text-equal.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'erubis'
|
2
|
+
input = File.read('example.eruby')
|
3
|
+
|
4
|
+
puts "----- default -----"
|
5
|
+
eruby = Erubis::FastEruby.new(input)
|
6
|
+
puts eruby.src
|
7
|
+
|
8
|
+
puts "----- with :bufvar option -----"
|
9
|
+
eruby = Erubis::FastEruby.new(input, :bufvar=>'@_out_buf')
|
10
|
+
print eruby.src
|
@@ -0,0 +1,17 @@
|
|
1
|
+
$ ruby bufvar-example.rb
|
2
|
+
----- default -----
|
3
|
+
_buf = ''; _buf << %Q`<div>\n`
|
4
|
+
for item in list
|
5
|
+
_buf << %Q` <p>#{ item }</p>
|
6
|
+
<p>#{Erubis::XmlHelper.escape_xml( item )}</p>\n`
|
7
|
+
end
|
8
|
+
_buf << %Q`</div>\n`
|
9
|
+
_buf.to_s
|
10
|
+
----- with :bufvar option -----
|
11
|
+
@_out_buf = ''; @_out_buf << %Q`<div>\n`
|
12
|
+
for item in list
|
13
|
+
@_out_buf << %Q` <p>#{ item }</p>
|
14
|
+
<p>#{Erubis::XmlHelper.escape_xml( item )}</p>\n`
|
15
|
+
end
|
16
|
+
@_out_buf << %Q`</div>\n`
|
17
|
+
@_out_buf.to_s
|