3
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
6
require 'erubis/engine'
7
require 'erubis/enhancer'
13
module SchemeGenerator
16
def self.supported_properties() # :nodoc:
18
[:func, '_add', "function name (ex. 'display')"],
22
def init_generator(properties={})
24
@escapefunc ||= 'escape'
25
@func = properties[:func] || '_add' # or 'display'
29
return unless @func == '_add'
30
src << "(let ((_buf '())) " + \
31
"(define (_add x) (set! _buf (cons x _buf))) "
32
#src << "(let* ((_buf '())" + \
33
# " (_add (lambda (x) (set! _buf (cons x _buf))))) "
37
@table_ ||= { '"'=>'\\"', '\\'=>'\\\\' }
38
text.gsub!(/["\\]/) { |m| @table_[m] }
42
def escaped_expr(code)
44
return "(#{@escapefunc} #{code})"
47
def add_text(src, text)
52
src << "(#{@func} \"" << t << "\\n\")\n"
54
src << "(#{@func} \"" << t << '")'
58
def add_stmt(src, code)
62
def add_expr_literal(src, code)
64
src << "(#{@func} #{code})"
67
def add_expr_escaped(src, code)
68
add_expr_literal(src, escaped_expr(code))
71
def add_expr_debug(src, code)
72
s = (code.strip! || code).gsub(/\"/, '\\"')
73
src << "(display \"*** debug: #{s}=\")(display #{code.strip})(display \"\\n\")"
76
def add_postamble(src)
77
return unless @func == '_add'
78
src << "\n" unless src[-1] == ?\n
79
src << " (reverse _buf))\n"
88
class Escheme < Basic::Engine
89
include SchemeGenerator
93
class EscapedEscheme < Escheme
94
include EscapeEnhancer
98
#class XmlEscheme < Escheme
99
# include EscapeEnhancer
103
class PI::Escheme < PI::Engine
104
include SchemeGenerator
106
def init_converter(properties={})