html-template-pro 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +44 -45
- data/README.rdoc +36 -11
- data/Rakefile +6 -1
- data/ext/html/template/{internal/Pro.xs → Pro.xs} +0 -0
- data/ext/html/template/{internal/builtin_findfile.inc → builtin_findfile.inc} +0 -0
- data/ext/html/template/{internal/calc.h → calc.h} +0 -0
- data/ext/html/template/{internal/calc.inc → calc.inc} +0 -0
- data/ext/html/template/{internal/callback_stubs.inc → callback_stubs.inc} +0 -0
- data/ext/html/template/{internal/expr.c → expr.c} +2 -2
- data/ext/html/template/{internal/expr.y → expr.y} +1 -1
- data/ext/html/template/{internal/expr_iface.c → expr_iface.c} +0 -0
- data/ext/html/template/{internal/exprpstr.h → exprpstr.h} +0 -0
- data/ext/html/template/{internal/exprpstr.inc → exprpstr.inc} +0 -0
- data/ext/html/template/{internal/exprtool.h → exprtool.h} +0 -0
- data/ext/html/template/{internal/exprtool.inc → exprtool.inc} +0 -0
- data/ext/html/template/{internal/exprtype.h → exprtype.h} +0 -0
- data/ext/html/template/{internal/exprval.h → exprval.h} +0 -0
- data/ext/html/template/{internal/extconf.rb → extconf.rb} +0 -0
- data/ext/html/template/{internal/internal.c → internal.c} +2 -2
- data/ext/html/template/{internal/loadfile.h → loadfile.h} +0 -0
- data/ext/html/template/{internal/loadfile.inc → loadfile.inc} +0 -0
- data/ext/html/template/{internal/pabidecl.h → pabidecl.h} +0 -0
- data/ext/html/template/{internal/pabstract.h → pabstract.h} +0 -0
- data/ext/html/template/{internal/parse_expr.h → parse_expr.h} +0 -0
- data/ext/html/template/{internal/pbuffer.c → pbuffer.c} +0 -0
- data/ext/html/template/{internal/pbuffer.h → pbuffer.h} +0 -0
- data/ext/html/template/{internal/pmiscdef.h → pmiscdef.h} +0 -0
- data/ext/html/template/{internal/pparam.h → pparam.h} +0 -0
- data/ext/html/template/{internal/ppport.h → ppport.h} +0 -0
- data/ext/html/template/{internal/procore.c → procore.c} +0 -0
- data/ext/html/template/{internal/procore.h → procore.h} +0 -0
- data/ext/html/template/{internal/proparam.c → proparam.c} +0 -0
- data/ext/html/template/{internal/proparam.h → proparam.h} +0 -0
- data/ext/html/template/{internal/proscope.h → proscope.h} +0 -0
- data/ext/html/template/{internal/proscope.inc → proscope.inc} +0 -0
- data/ext/html/template/{internal/prostate.h → prostate.h} +0 -0
- data/ext/html/template/{internal/prostate.inc → prostate.inc} +0 -0
- data/ext/html/template/{internal/provalue.h → provalue.h} +0 -0
- data/ext/html/template/{internal/pstring.h → pstring.h} +0 -0
- data/ext/html/template/{internal/pstrutils.h → pstrutils.h} +0 -0
- data/ext/html/template/{internal/pstrutils.inc → pstrutils.inc} +0 -0
- data/ext/html/template/{internal/tagstack.h → tagstack.h} +0 -0
- data/ext/html/template/{internal/tagstack.inc → tagstack.inc} +0 -0
- data/ext/html/template/{internal/tmpllog.c → tmpllog.c} +0 -0
- data/ext/html/template/{internal/tmpllog.h → tmpllog.h} +0 -0
- data/ext/html/template/{internal/tmplpro.h → tmplpro.h} +0 -0
- data/ext/html/template/{internal/tmplpro_version.c → tmplpro_version.c} +0 -0
- data/lib/html/template/pro.rb +265 -18
- data/tasks/extconf/tmplpro.rake +1 -1
- data/website/index.txt +37 -9
- metadata +56 -53
- data/test/test_html_template_internal_extn.rb +0 -10
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -7,50 +7,50 @@ README.rdoc
|
|
7
7
|
Rakefile
|
8
8
|
benchmark.rb
|
9
9
|
config/website.yml
|
10
|
-
ext/html/template/
|
11
|
-
ext/html/template/
|
12
|
-
ext/html/template/
|
13
|
-
ext/html/template/
|
14
|
-
ext/html/template/
|
15
|
-
ext/html/template/
|
16
|
-
ext/html/template/
|
17
|
-
ext/html/template/
|
18
|
-
ext/html/template/
|
19
|
-
ext/html/template/
|
20
|
-
ext/html/template/
|
21
|
-
ext/html/template/
|
22
|
-
ext/html/template/
|
23
|
-
ext/html/template/
|
24
|
-
ext/html/template/
|
25
|
-
ext/html/template/internal
|
26
|
-
ext/html/template/
|
27
|
-
ext/html/template/
|
28
|
-
ext/html/template/
|
29
|
-
ext/html/template/
|
30
|
-
ext/html/template/
|
31
|
-
ext/html/template/
|
32
|
-
ext/html/template/
|
33
|
-
ext/html/template/
|
34
|
-
ext/html/template/
|
35
|
-
ext/html/template/
|
36
|
-
ext/html/template/
|
37
|
-
ext/html/template/
|
38
|
-
ext/html/template/
|
39
|
-
ext/html/template/
|
40
|
-
ext/html/template/
|
41
|
-
ext/html/template/
|
42
|
-
ext/html/template/
|
43
|
-
ext/html/template/
|
44
|
-
ext/html/template/
|
45
|
-
ext/html/template/
|
46
|
-
ext/html/template/
|
47
|
-
ext/html/template/
|
48
|
-
ext/html/template/
|
49
|
-
ext/html/template/
|
50
|
-
ext/html/template/
|
51
|
-
ext/html/template/
|
52
|
-
ext/html/template/
|
53
|
-
ext/html/template/
|
10
|
+
ext/html/template/Pro.xs
|
11
|
+
ext/html/template/builtin_findfile.inc
|
12
|
+
ext/html/template/calc.h
|
13
|
+
ext/html/template/calc.inc
|
14
|
+
ext/html/template/callback_stubs.inc
|
15
|
+
ext/html/template/expr.c
|
16
|
+
ext/html/template/expr.y
|
17
|
+
ext/html/template/expr_iface.c
|
18
|
+
ext/html/template/exprpstr.h
|
19
|
+
ext/html/template/exprpstr.inc
|
20
|
+
ext/html/template/exprtool.h
|
21
|
+
ext/html/template/exprtool.inc
|
22
|
+
ext/html/template/exprtype.h
|
23
|
+
ext/html/template/exprval.h
|
24
|
+
ext/html/template/extconf.rb
|
25
|
+
ext/html/template/internal.c
|
26
|
+
ext/html/template/loadfile.h
|
27
|
+
ext/html/template/loadfile.inc
|
28
|
+
ext/html/template/pabidecl.h
|
29
|
+
ext/html/template/pabstract.h
|
30
|
+
ext/html/template/parse_expr.h
|
31
|
+
ext/html/template/pbuffer.c
|
32
|
+
ext/html/template/pbuffer.h
|
33
|
+
ext/html/template/pmiscdef.h
|
34
|
+
ext/html/template/pparam.h
|
35
|
+
ext/html/template/ppport.h
|
36
|
+
ext/html/template/procore.c
|
37
|
+
ext/html/template/procore.h
|
38
|
+
ext/html/template/proparam.c
|
39
|
+
ext/html/template/proparam.h
|
40
|
+
ext/html/template/proscope.h
|
41
|
+
ext/html/template/proscope.inc
|
42
|
+
ext/html/template/prostate.h
|
43
|
+
ext/html/template/prostate.inc
|
44
|
+
ext/html/template/provalue.h
|
45
|
+
ext/html/template/pstring.h
|
46
|
+
ext/html/template/pstrutils.h
|
47
|
+
ext/html/template/pstrutils.inc
|
48
|
+
ext/html/template/tagstack.h
|
49
|
+
ext/html/template/tagstack.inc
|
50
|
+
ext/html/template/tmpllog.c
|
51
|
+
ext/html/template/tmpllog.h
|
52
|
+
ext/html/template/tmplpro.h
|
53
|
+
ext/html/template/tmplpro_version.c
|
54
54
|
lib/html/template/pro.rb
|
55
55
|
script/console
|
56
56
|
script/destroy
|
@@ -207,7 +207,6 @@ test/test_coderefs.rb
|
|
207
207
|
test/test_complex.rb
|
208
208
|
test/test_helper.rb
|
209
209
|
test/test_html_template.rb
|
210
|
-
test/test_html_template_internal_extn.rb
|
211
210
|
test/test_html_template_pro.rb
|
212
211
|
test/test_path_like_variable_scope.rb
|
213
212
|
test/test_random.rb
|
data/README.rdoc
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
=
|
1
|
+
= html-template-pro
|
2
2
|
|
3
3
|
* http://github.com/tom-lpsd/ruby-html-template-pro
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
A Ruby port of HTML::Template::Pro
|
8
|
-
in Perl and XS
|
7
|
+
A Ruby port of `HTML::Template::Pro'. `HTML::Template::Pro' is
|
8
|
+
template engine originally written in Perl and XS. It's so fast
|
9
|
+
because of its C based implementation. Its syntax is very simple.
|
10
|
+
This results clearly separation of application logic and its view.
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
* Fast. (Main part is written in C.)
|
13
|
-
* Simple. (It avoids mixing up complex logic in View.)
|
12
|
+
Template syntax complies with original perl module's syntax.
|
13
|
+
Please see, HTML::Template::SYNTAX[http://search.cpan.org/~viy/HTML-Template-Pro-0.92/lib/HTML/Template/SYNTAX.pod#SYNOPSIS].
|
14
14
|
|
15
15
|
== SYNOPSIS:
|
16
16
|
|
@@ -38,15 +38,40 @@ in Perl and XS).
|
|
38
38
|
</body>
|
39
39
|
</html>
|
40
40
|
|
41
|
-
|
42
41
|
== REQUIREMENTS:
|
43
42
|
|
44
|
-
* C99
|
43
|
+
* C99 compiler.
|
44
|
+
* ruby > 1.9.
|
45
45
|
|
46
46
|
== INSTALL:
|
47
47
|
|
48
48
|
* sudo gem install html-template-pro
|
49
49
|
|
50
|
-
==
|
50
|
+
== SEE ALSO:
|
51
|
+
|
52
|
+
* Original perl module
|
53
|
+
HTML::Template::Pro[http://search.cpan.org/~viy/HTML-Template-Pro-0.92/]
|
54
|
+
|
55
|
+
== WEBSITE:
|
56
|
+
|
57
|
+
* http://tmplpro.rubyforge.org/
|
58
|
+
|
59
|
+
== AUTHOR:
|
60
|
+
|
61
|
+
Tom Tsuruhara <tom.lpsd@gmail.com>
|
62
|
+
|
63
|
+
Original perl module
|
64
|
+
HTML::Template::Pro[http://search.cpan.org/~viy/HTML-Template-Pro-0.92/]
|
65
|
+
(and most of this package's C code) is written by I. Vlasenko
|
66
|
+
<viy@altlinux.org>. Thanks to him for his great work.
|
67
|
+
|
68
|
+
== COPYRIGHT AND LICENSE:
|
69
|
+
|
70
|
+
Copyright (C) 2009 by Tom Tsuruhara.
|
71
|
+
Most of C codes (except internal.c) are
|
72
|
+
Copyright (C) 2005-2009 by I. Yu. Vlasenko.
|
51
73
|
|
52
|
-
|
74
|
+
This library is free software; you can redistribute it and/or modify
|
75
|
+
it under the same terms of the GNU Lesser General Public License as
|
76
|
+
published by the Free Software Foundation; either version 2 of the
|
77
|
+
License, or (at your option) any later version.
|
data/Rakefile
CHANGED
@@ -5,13 +5,18 @@ require 'fileutils'
|
|
5
5
|
|
6
6
|
Hoe.plugin :newgem
|
7
7
|
Hoe.plugin :website
|
8
|
+
Hoe.add_include_dirs 'ext/html/template'
|
8
9
|
|
9
10
|
$hoe = Hoe.spec 'html-template-pro' do
|
10
11
|
self.developer 'Tsuruhara Tom', 'tom.lpsd@gmail.com'
|
11
12
|
self.rubyforge_name = 'tmplpro'
|
12
|
-
self.version = "0.0.
|
13
|
+
self.version = "0.0.3"
|
13
14
|
self.summary = 'A Ruby port of HTML::Template::Pro'
|
14
15
|
self.extra_rdoc_files = ['README.rdoc']
|
16
|
+
|
17
|
+
clean_globs.push('ext/html/template/*.o')
|
18
|
+
|
19
|
+
spec_extras[:required_ruby_version] = Gem::Requirement.new '> 1.9.0'
|
15
20
|
end
|
16
21
|
|
17
22
|
require 'newgem/tasks'
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -241,7 +241,7 @@ typedef short int yytype_int16;
|
|
241
241
|
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
|
242
242
|
|
243
243
|
#ifndef YY_
|
244
|
-
# if YYENABLE_NLS
|
244
|
+
# if defined YYENABLE_NLS && YYENABLE_NLS
|
245
245
|
# if ENABLE_NLS
|
246
246
|
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
|
247
247
|
# define YY_(msgid) dgettext ("bison-runtime", msgid)
|
@@ -762,7 +762,7 @@ while (YYID (0))
|
|
762
762
|
we won't break user code: when these are the locations we know. */
|
763
763
|
|
764
764
|
#ifndef YY_LOCATION_PRINT
|
765
|
-
# if YYLTYPE_IS_TRIVIAL
|
765
|
+
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
|
766
766
|
# define YY_LOCATION_PRINT(File, Loc) \
|
767
767
|
fprintf (File, "%d.%d-%d.%d", \
|
768
768
|
(Loc).first_line, (Loc).first_column, \
|
@@ -188,7 +188,7 @@ numEXP: NUM { $$ = $1; }
|
|
188
188
|
;
|
189
189
|
|
190
190
|
arglist: EXTFUNC '(' numEXP {
|
191
|
-
$1.arglist=state->param->InitExprArglistFuncPtr(state->param->
|
191
|
+
$1.arglist=state->param->InitExprArglistFuncPtr(state->param->ext_calluserfunc_state);
|
192
192
|
pusharg_expr_userfunc(exprobj,state->param,$1,$3);
|
193
193
|
$$ = $1;
|
194
194
|
}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -413,7 +413,7 @@ static void setup_internal(VALUE self)
|
|
413
413
|
rb_ivar_set(self, rb_intern("@internal_expr_results"), rb_ary_new());
|
414
414
|
}
|
415
415
|
|
416
|
-
static VALUE exec_tmpl(VALUE self, VALUE output)
|
416
|
+
static VALUE exec_tmpl(VALUE module, VALUE self, VALUE output)
|
417
417
|
{
|
418
418
|
writer_functype writer;
|
419
419
|
struct tmplpro_param* proparam;
|
@@ -444,6 +444,6 @@ void Init_internal(void)
|
|
444
444
|
mHtml = rb_define_module("HTML");
|
445
445
|
mHtmlTemplate = rb_define_module_under(mHtml, "Template");
|
446
446
|
mHtmlTemplateInternal = rb_define_module_under(mHtmlTemplate, "Internal");
|
447
|
-
rb_define_module_function(mHtmlTemplateInternal, "exec_tmpl", &exec_tmpl,
|
447
|
+
rb_define_module_function(mHtmlTemplateInternal, "exec_tmpl", &exec_tmpl, 2);
|
448
448
|
cHtmlTemplateInternalState = rb_define_class_under(mHtmlTemplateInternal, "State", rb_cObject);
|
449
449
|
}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/html/template/pro.rb
CHANGED
@@ -1,35 +1,45 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'html/template/internal'
|
2
3
|
|
3
|
-
module HTML
|
4
|
-
module Template
|
4
|
+
module HTML # :nodoc:
|
5
|
+
module Template # :nodoc:
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
module Internal # :nodoc:
|
8
|
+
|
9
|
+
class State # :nodoc:
|
10
|
+
# supress documentation
|
11
|
+
end
|
12
|
+
|
13
|
+
module_function
|
14
|
+
|
15
|
+
def register_functions_impl(registory, func_spec, &block) # :nodoc:
|
16
|
+
if block && func_spec.kind_of?(Symbol)
|
17
|
+
registory[func_spec] = block
|
18
|
+
elsif func_spec.kind_of? Hash
|
19
|
+
unless func_spec.values.all?{|e| e.kind_of? Proc}
|
20
|
+
raise ArgumentError, "functions must be kind_of Proc"
|
21
|
+
end
|
22
|
+
registory.update(func_spec)
|
23
|
+
else
|
24
|
+
raise ArgumentError, "first argument must be symbol or hash contains functions"
|
12
25
|
end
|
13
|
-
registory.update(func_spec)
|
14
|
-
else
|
15
|
-
raise ArgumentError, "first argument must be symbol or hash contains functions"
|
16
26
|
end
|
17
27
|
end
|
18
28
|
|
19
29
|
class Pro
|
20
30
|
|
21
|
-
VERSION = "0.0.
|
22
|
-
|
23
|
-
include HTML::Template::Internal
|
24
|
-
|
25
|
-
INPUTS = [:filename, :filehandle, :arrayref, :scalarref, :source]
|
31
|
+
VERSION = "0.0.3"
|
26
32
|
|
33
|
+
# :stopdoc:
|
27
34
|
ASK_NAME_DEFAULT = 0
|
28
35
|
ASK_NAME_AS_IS = 1
|
29
36
|
ASK_NAME_LOWERCASE = 2
|
30
37
|
ASK_NAME_UPPERCASE = 4
|
31
38
|
ASK_NAME_MASK = ASK_NAME_AS_IS | ASK_NAME_LOWERCASE | ASK_NAME_UPPERCASE
|
32
39
|
|
40
|
+
INPUTS = [:filename, :filehandle, :arrayref, :scalarref, :source]
|
41
|
+
# :startdoc:
|
42
|
+
|
33
43
|
@@func = {
|
34
44
|
# note that length,defined,sin,cos,log,tan,... are built-in
|
35
45
|
:sprintf => lambda { |*args| sprintf(*args) },
|
@@ -47,6 +57,142 @@ module HTML
|
|
47
57
|
:srand => lambda { |seed| srand seed },
|
48
58
|
}
|
49
59
|
|
60
|
+
# Create a `Template' object. `Template' source is specified by several way.
|
61
|
+
# Exactly one kind of source must be specified.
|
62
|
+
#
|
63
|
+
# * specify filename
|
64
|
+
#
|
65
|
+
# template = HTML::Template::Pro.new(:filename => 'foo.tmpl')
|
66
|
+
#
|
67
|
+
# * specify source as string
|
68
|
+
#
|
69
|
+
# template = HTLM::Template::Pro.new(:source => '<html><body><TMPL_VAR NAME="hello">!!</body></html>')
|
70
|
+
#
|
71
|
+
# * specify source by array of string
|
72
|
+
#
|
73
|
+
# template = HTLM::Template::Pro.new(:source => ['<html>', '<body><TMPL_VAR NAME="hello">!!</body>', '</html>'])
|
74
|
+
#
|
75
|
+
# * specify IO object
|
76
|
+
#
|
77
|
+
# template = HTLM::Template::Pro.new(:source => $stdin)
|
78
|
+
#
|
79
|
+
# === Other options
|
80
|
+
#
|
81
|
+
# ==== path
|
82
|
+
#
|
83
|
+
# Array of file path which include template files.
|
84
|
+
#
|
85
|
+
# Example:
|
86
|
+
#
|
87
|
+
# # find out tmpl/foo.tmpl
|
88
|
+
# template = HTLM::Template::Pro.new(:filename => 'foo.tmpl', :path => ['tmpl'])
|
89
|
+
#
|
90
|
+
# ==== search_path_on_include
|
91
|
+
#
|
92
|
+
# Boolean that indicates whether we search directory specified
|
93
|
+
# by `path' param when we meet the TMPL_INCLUDE tag.
|
94
|
+
#
|
95
|
+
# Example:
|
96
|
+
#
|
97
|
+
# # tmpl_includes/foo.tmpl is used.
|
98
|
+
# template = HTLM::Template::Pro.new(:source => '<TMPL_INCLUDE NAME="foo.tmpl">',
|
99
|
+
# :path => ['tmpl_includes'],
|
100
|
+
# :search_path_on_include => true)
|
101
|
+
#
|
102
|
+
# ==== associate
|
103
|
+
#
|
104
|
+
# this option allows you to inherit the parameter values from
|
105
|
+
# other objects. The only requirement for the other object is
|
106
|
+
# that it have a "param()" method that works like HTML::Template::Pro#param.
|
107
|
+
#
|
108
|
+
# ==== case_sensitive
|
109
|
+
#
|
110
|
+
# if this options is true, template variable is treated as case sensitive.
|
111
|
+
#
|
112
|
+
# Example:
|
113
|
+
#
|
114
|
+
# template = HTML::Template::Pro.new(:source => '<TMPL_VAR NAME="FoO">',
|
115
|
+
# :case_sensitive => true)
|
116
|
+
# template.param(:foo => 100)
|
117
|
+
# puts template.output # output empty string ( foo is not 'FoO' )
|
118
|
+
#
|
119
|
+
# ==== loop_context_vars
|
120
|
+
#
|
121
|
+
# when this parameter is set to true (it is false by default)
|
122
|
+
# five loop context variables are made available inside a loop:
|
123
|
+
# __first__, __last__, __inner__, __odd__, __counter__. They
|
124
|
+
# can be used with <TMPL_IF>, <TMPL_UNLESS> and <TMPL_ELSE> to
|
125
|
+
# control how a loop is output.
|
126
|
+
#
|
127
|
+
# Example:
|
128
|
+
# In your templates,
|
129
|
+
#
|
130
|
+
# <TMPL_LOOP NAME="loop">
|
131
|
+
# <TMPL_IF NAME="__first__">First!</TMPL_IF>
|
132
|
+
# <TMPL_VAR NAME="__counter__">
|
133
|
+
# <TMPL_IF NAME="__last__">Last!</TMPL_IF>
|
134
|
+
# </TMPL_LOOP>
|
135
|
+
#
|
136
|
+
# ==== no_includes
|
137
|
+
#
|
138
|
+
# set this option to true to disallow the <TMPL_INCLUDE> tag in the
|
139
|
+
# template file. This can be used to make opening untrusted
|
140
|
+
# templates *slightly* less dangerous. Defaults to false.
|
141
|
+
#
|
142
|
+
# ==== max_includes
|
143
|
+
#
|
144
|
+
# set this variable to determine the maximum depth that includes
|
145
|
+
# can reach. Set to 10 by default. Including files to a depth
|
146
|
+
# greater than this value causes an error message to be
|
147
|
+
# displayed. Set to 0 to disable this protection.
|
148
|
+
#
|
149
|
+
# ==== global_vars
|
150
|
+
#
|
151
|
+
# normally variables declared outside a loop are not available
|
152
|
+
# inside a loop. This option makes <TMPL_VAR>s like global
|
153
|
+
# variables - they have unlimited scope. This option also
|
154
|
+
# affects <TMPL_IF> and <TMPL_UNLESS>.
|
155
|
+
#
|
156
|
+
# ==== path_like_variable_scope
|
157
|
+
#
|
158
|
+
# this option switches on a Shigeki Morimoto extension to
|
159
|
+
# HTML::Template::Pro that allows access to variables that are
|
160
|
+
# outside the current loop scope using path-like expressions.
|
161
|
+
#
|
162
|
+
# Example:
|
163
|
+
#
|
164
|
+
# <TMPL_LOOP NAME=class>
|
165
|
+
# <TMPL_LOOP NAME=person>
|
166
|
+
# <TMPL_VAR NAME="../teacher_name"> <!-- access to class.teacher_name -->
|
167
|
+
# <TMPL_VAR NAME="name">
|
168
|
+
# <TMPL_VAR NAME="/top_level_value"> <!-- access to top level value -->
|
169
|
+
# <TMPL_VAR NAME="age">
|
170
|
+
# <TMPL_LOOP NAME="../../school"> <!-- enter loop before accessing its vars -->
|
171
|
+
# <TMPL_VAR NAME="school_name"> <!-- access to [../../]school.school_name -->
|
172
|
+
# </TMPL_LOOP>
|
173
|
+
# </TMPL_LOOP>
|
174
|
+
# </TMPL_LOOP>
|
175
|
+
#
|
176
|
+
# ==== filter
|
177
|
+
#
|
178
|
+
# By using this option, you can filter the source of template
|
179
|
+
# before HTML::Template::Pro prcesses it.
|
180
|
+
#
|
181
|
+
# Example:
|
182
|
+
#
|
183
|
+
# myfilter = ->(source){ source.gsub(/Foo/, 'Bar') }
|
184
|
+
# template = HTML::Template::Pro.new(:source => '<TMPL_VAR NAME="Foo">!!',
|
185
|
+
# :filter => myfilter)
|
186
|
+
# template.param(:Bar => 'hello')
|
187
|
+
# puts template.output # displays 'hello!!'
|
188
|
+
#
|
189
|
+
# ==== default_escape
|
190
|
+
#
|
191
|
+
# Set this parameter to "HTML", "URL" or "JS" and
|
192
|
+
# HTML::Template::Pro will apply the specified escaping to all
|
193
|
+
# variables unless they declare a different escape in the
|
194
|
+
# template.
|
195
|
+
#
|
50
196
|
def initialize(args={})
|
51
197
|
@options = default_options.merge(args)
|
52
198
|
if args.keys.count(&INPUTS.method(:include?)) != 1
|
@@ -66,6 +212,48 @@ module HTML
|
|
66
212
|
@filtered_template = {}
|
67
213
|
end
|
68
214
|
|
215
|
+
# #param can be called in a number of ways.
|
216
|
+
#
|
217
|
+
# 1. call with no arguments.
|
218
|
+
#
|
219
|
+
# returns a list of parameters set after new.
|
220
|
+
#
|
221
|
+
# Example:
|
222
|
+
# template = HTML::Template::Pro.new(:filename => 'foo.tmpl')
|
223
|
+
# template.param(:foo => 10, :bar => 20)
|
224
|
+
# params = template.param # returns [:foo, :bar]
|
225
|
+
#
|
226
|
+
# 2. pass one parameter name.
|
227
|
+
#
|
228
|
+
# returns the value of a parameter.
|
229
|
+
#
|
230
|
+
# Example:
|
231
|
+
# template = HTML::Template::Pro.new(:filename => 'foo.tmpl')
|
232
|
+
# template.param(:foo => 10, :bar => 20)
|
233
|
+
# val = template.param(:foo) # now `val' equals 10.
|
234
|
+
#
|
235
|
+
# 3. pass hash.
|
236
|
+
#
|
237
|
+
# assign values to parameters.
|
238
|
+
#
|
239
|
+
# Example:
|
240
|
+
#
|
241
|
+
# template = HTML::Template::Pro.new(:source => <<'TMPL')
|
242
|
+
# <TMPL_VAR NAME="foo">
|
243
|
+
# <TMPL_VAR NAME="bar">
|
244
|
+
# TMPL
|
245
|
+
# template.param(:foo => 10, :bar => 20)
|
246
|
+
# puts template.output # displays "10\n20\n"
|
247
|
+
#
|
248
|
+
# # you can specify the value by passing block.
|
249
|
+
# # in this way, you must assign exactly one parameter.
|
250
|
+
# template.param(:foo) { Time.now }
|
251
|
+
# puts template.output # prints the time #output is executed.
|
252
|
+
#
|
253
|
+
# # Or you can use proc or lambda.
|
254
|
+
# template.param(:foo => lambda { Time.now },
|
255
|
+
# :bar => lambda { rand(100) })
|
256
|
+
#
|
69
257
|
def param(args=nil, &block)
|
70
258
|
return @params.keys if args.nil?
|
71
259
|
if !(args.kind_of? Hash)
|
@@ -79,10 +267,26 @@ module HTML
|
|
79
267
|
merge_params(args)
|
80
268
|
end
|
81
269
|
|
270
|
+
# Clear the internal param hash. All the parameters set before
|
271
|
+
# this call is reset.
|
82
272
|
def clear_params
|
83
273
|
@params.clear
|
84
274
|
end
|
85
275
|
|
276
|
+
# returns the final result of the template. If you want to print
|
277
|
+
# out the result, you can do:
|
278
|
+
# puts template.output
|
279
|
+
#
|
280
|
+
# When `output' is called each occurrence of <TMPL_VAR
|
281
|
+
# NAME=name> is replaced with the value assigned to "name" via
|
282
|
+
# "param()". If a named parameter is unset it is simply replaced
|
283
|
+
# with ’’. <TMPL_LOOPS> are evaluated once per parameter set,
|
284
|
+
# accumulating output on each pass.
|
285
|
+
#
|
286
|
+
# You may optionally supply a IO object to print:
|
287
|
+
# File.open('result.html', 'w') do |file|
|
288
|
+
# template.output(:print_to => file)
|
289
|
+
# end
|
86
290
|
def output(options={})
|
87
291
|
|
88
292
|
@options[:associate].reverse.each do |assoc|
|
@@ -92,22 +296,65 @@ module HTML
|
|
92
296
|
end
|
93
297
|
|
94
298
|
if (options.include? :print_to)
|
95
|
-
exec_tmpl(options[:print_to])
|
299
|
+
HTML::Template::Internal.exec_tmpl(self, options[:print_to])
|
96
300
|
else
|
97
301
|
output_string = String.new
|
98
|
-
exec_tmpl(output_string)
|
302
|
+
HTML::Template::Internal.exec_tmpl(self, output_string)
|
99
303
|
return output_string
|
100
304
|
end
|
101
305
|
end
|
102
306
|
|
307
|
+
# <b>for perl compatibility</b>
|
308
|
+
#
|
309
|
+
# shortcut to HTML::Template::Pro.new(:filehandle => file)
|
103
310
|
def self.new_filehandle(file)
|
104
311
|
self.new(:filehandle => file)
|
105
312
|
end
|
106
313
|
|
314
|
+
# <b>for perl compatibility</b>
|
315
|
+
#
|
316
|
+
# shortcut to HTML::Template::Pro.new(:filename => filename)
|
317
|
+
def self.new_file(filename)
|
318
|
+
self.new(:filename => file)
|
319
|
+
end
|
320
|
+
|
321
|
+
# <b>for perl compatibility</b>
|
322
|
+
#
|
323
|
+
# shortcut to HTML::Template::Pro.new(:arrayref => lines)
|
324
|
+
def self.new_array_ref(lines)
|
325
|
+
self.new(:arrayref => lines)
|
326
|
+
end
|
327
|
+
|
328
|
+
# <b>for perl compatibility</b>
|
329
|
+
#
|
330
|
+
# shortcut to HTML::Template::Pro.new(:scalarref => source_string)
|
331
|
+
def self.new_scalar_ref(source)
|
332
|
+
self.new(:scalarref => source)
|
333
|
+
end
|
334
|
+
|
335
|
+
# register the function globally. See HTML::Template::Pro#register_function.
|
336
|
+
# Functions registered by this class method is shared by all instances.
|
107
337
|
def self.register_function(func_spec, &block)
|
108
338
|
HTML::Template::Internal.register_functions_impl(@@func, func_spec, &block)
|
109
339
|
end
|
110
340
|
|
341
|
+
# define a new function that can be used in <tt><TMPL_VAR
|
342
|
+
# EXPR=""></tt> tag. function is specified by block or lambda.
|
343
|
+
#
|
344
|
+
# Example:
|
345
|
+
# template = HTML::Template::Pro.new(:source => '<TMPL_VAR EXPR="double(10)">')
|
346
|
+
# template.register_function(:double) {|num| num * 2 }
|
347
|
+
# # or template.register_function(:double => lambda {|num| num * 2 })
|
348
|
+
# puts template.output # displays `20'
|
349
|
+
#
|
350
|
+
# You can also register the functions by passing lambdas to new.
|
351
|
+
#
|
352
|
+
# Example:
|
353
|
+
# template = HTML::Template::Pro.new(:filename => 'foo.tmpl',
|
354
|
+
# :functions => {
|
355
|
+
# :square => lambda {|x| x * x },
|
356
|
+
# })
|
357
|
+
#
|
111
358
|
def register_function(func_spec, &block)
|
112
359
|
HTML::Template::Internal.register_functions_impl(@options[:expr_func], func_spec, &block)
|
113
360
|
end
|
data/tasks/extconf/tmplpro.rake
CHANGED
data/website/index.txt
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
h1. html-template-pro
|
2
2
|
|
3
|
-
|
4
3
|
h2. What
|
5
4
|
|
6
5
|
A Ruby port of HTML::Template::Pro (template engine originally written
|
@@ -12,16 +11,41 @@ h2. Installing
|
|
12
11
|
|
13
12
|
h2. The basics
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
<pre syntex="ruby">
|
15
|
+
# foo.rb
|
16
|
+
require 'html/template/pro'
|
17
|
+
|
18
|
+
template = HTML::Template::Pro.new(:filename => 'foo.tmpl')
|
19
|
+
template.param(:param1 => 100)
|
20
|
+
puts template.output
|
21
|
+
|
22
|
+
# foo.tmpl
|
23
|
+
<html>
|
24
|
+
<head></head>
|
25
|
+
<body>
|
26
|
+
<h1><TMPL_VAR NAME="param1"></h1>
|
27
|
+
</body>
|
28
|
+
</html>
|
29
|
+
|
30
|
+
# results
|
31
|
+
$ ruby foo.rb
|
32
|
+
<html>
|
33
|
+
<head></head>
|
34
|
+
<body>
|
35
|
+
<h1>100</h1>
|
36
|
+
</body>
|
37
|
+
</html>
|
38
|
+
</pre>
|
39
|
+
|
40
|
+
Template syntax compies with original Perl module's. See also,
|
41
|
+
"HTML::Template::SYNTAX":http://search.cpan.org/~viy/HTML-Template-Pro-0.92/lib/HTML/Template/SYNTAX.pod#SYNOPSIS
|
42
|
+
|
43
|
+
h2. Project
|
18
44
|
|
19
45
|
<% if rubyforge_project_id %>
|
20
46
|
|
21
47
|
* rubyforge: "http://rubyforge.org/scm/?group_id=<%= rubyforge_project_id %>":http://rubyforge.org/scm/?group_id=<%= rubyforge_project_id %>
|
22
48
|
|
23
|
-
<pre>git clone git://rubyforge.org/tmplpro.git</pre>
|
24
|
-
|
25
49
|
<% else %>
|
26
50
|
|
27
51
|
* rubyforge: MISSING IN ACTION
|
@@ -35,6 +59,8 @@ Or you can hack website/index.txt and make it all go away!!
|
|
35
59
|
|
36
60
|
<% end %>
|
37
61
|
|
62
|
+
* rdoc documentations: "http://tmplpro.rubyforge.org/rdoc/":http://tmplpro.rubyforge.org/rdoc/
|
63
|
+
|
38
64
|
* github: "http://github.com/tom-lpsd/ruby-html-template-pro/tree/master":http://github.com/tom-lpsd/ruby-html-template-pro/tree/master
|
39
65
|
|
40
66
|
<pre>git clone git://github.com/tom-lpsd/ruby-html-template-pro.git</pre>
|
@@ -42,16 +68,18 @@ Or you can hack website/index.txt and make it all go away!!
|
|
42
68
|
|
43
69
|
h3. Build and test instructions
|
44
70
|
|
45
|
-
<pre>cd
|
71
|
+
<pre>cd ruby-html-template-pro
|
46
72
|
rake test
|
47
73
|
rake install_gem</pre>
|
48
74
|
|
49
75
|
|
50
76
|
h2. License
|
51
77
|
|
52
|
-
|
78
|
+
This library is free software; you can redistribute it and/or modify
|
79
|
+
it under the same terms of the GNU Lesser General Public License as
|
80
|
+
published by the Free Software Foundation; either version 2 of the
|
81
|
+
License, or (at your option) any later version.
|
53
82
|
|
54
83
|
h2. Contact
|
55
84
|
|
56
85
|
Comments are welcome. Send an email to "Tom Tsuruhara":mailto:tom.lpsd@gmail.com
|
57
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html-template-pro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tsuruhara Tom
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-03 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -23,14 +23,19 @@ dependencies:
|
|
23
23
|
version: 2.3.3
|
24
24
|
version:
|
25
25
|
description: |-
|
26
|
-
A Ruby port of HTML::Template::Pro
|
27
|
-
in Perl and XS
|
26
|
+
A Ruby port of `HTML::Template::Pro'. `HTML::Template::Pro' is
|
27
|
+
template engine originally written in Perl and XS. It's so fast
|
28
|
+
because of its C based implementation. Its syntax is very simple.
|
29
|
+
This results clearly separation of application logic and its view.
|
30
|
+
|
31
|
+
Template syntax complies with original perl module's syntax.
|
32
|
+
Please see, HTML::Template::SYNTAX[http://search.cpan.org/~viy/HTML-Template-Pro-0.92/lib/HTML/Template/SYNTAX.pod#SYNOPSIS].
|
28
33
|
email:
|
29
34
|
- tom.lpsd@gmail.com
|
30
35
|
executables: []
|
31
36
|
|
32
37
|
extensions:
|
33
|
-
- ext/html/template/
|
38
|
+
- ext/html/template/extconf.rb
|
34
39
|
extra_rdoc_files:
|
35
40
|
- History.txt
|
36
41
|
- Manifest.txt
|
@@ -46,50 +51,50 @@ files:
|
|
46
51
|
- Rakefile
|
47
52
|
- benchmark.rb
|
48
53
|
- config/website.yml
|
49
|
-
- ext/html/template/
|
50
|
-
- ext/html/template/
|
51
|
-
- ext/html/template/
|
52
|
-
- ext/html/template/
|
53
|
-
- ext/html/template/
|
54
|
-
- ext/html/template/
|
55
|
-
- ext/html/template/
|
56
|
-
- ext/html/template/
|
57
|
-
- ext/html/template/
|
58
|
-
- ext/html/template/
|
59
|
-
- ext/html/template/
|
60
|
-
- ext/html/template/
|
61
|
-
- ext/html/template/
|
62
|
-
- ext/html/template/
|
63
|
-
- ext/html/template/
|
64
|
-
- ext/html/template/internal
|
65
|
-
- ext/html/template/
|
66
|
-
- ext/html/template/
|
67
|
-
- ext/html/template/
|
68
|
-
- ext/html/template/
|
69
|
-
- ext/html/template/
|
70
|
-
- ext/html/template/
|
71
|
-
- ext/html/template/
|
72
|
-
- ext/html/template/
|
73
|
-
- ext/html/template/
|
74
|
-
- ext/html/template/
|
75
|
-
- ext/html/template/
|
76
|
-
- ext/html/template/
|
77
|
-
- ext/html/template/
|
78
|
-
- ext/html/template/
|
79
|
-
- ext/html/template/
|
80
|
-
- ext/html/template/
|
81
|
-
- ext/html/template/
|
82
|
-
- ext/html/template/
|
83
|
-
- ext/html/template/
|
84
|
-
- ext/html/template/
|
85
|
-
- ext/html/template/
|
86
|
-
- ext/html/template/
|
87
|
-
- ext/html/template/
|
88
|
-
- ext/html/template/
|
89
|
-
- ext/html/template/
|
90
|
-
- ext/html/template/
|
91
|
-
- ext/html/template/
|
92
|
-
- ext/html/template/
|
54
|
+
- ext/html/template/Pro.xs
|
55
|
+
- ext/html/template/builtin_findfile.inc
|
56
|
+
- ext/html/template/calc.h
|
57
|
+
- ext/html/template/calc.inc
|
58
|
+
- ext/html/template/callback_stubs.inc
|
59
|
+
- ext/html/template/expr.c
|
60
|
+
- ext/html/template/expr.y
|
61
|
+
- ext/html/template/expr_iface.c
|
62
|
+
- ext/html/template/exprpstr.h
|
63
|
+
- ext/html/template/exprpstr.inc
|
64
|
+
- ext/html/template/exprtool.h
|
65
|
+
- ext/html/template/exprtool.inc
|
66
|
+
- ext/html/template/exprtype.h
|
67
|
+
- ext/html/template/exprval.h
|
68
|
+
- ext/html/template/extconf.rb
|
69
|
+
- ext/html/template/internal.c
|
70
|
+
- ext/html/template/loadfile.h
|
71
|
+
- ext/html/template/loadfile.inc
|
72
|
+
- ext/html/template/pabidecl.h
|
73
|
+
- ext/html/template/pabstract.h
|
74
|
+
- ext/html/template/parse_expr.h
|
75
|
+
- ext/html/template/pbuffer.c
|
76
|
+
- ext/html/template/pbuffer.h
|
77
|
+
- ext/html/template/pmiscdef.h
|
78
|
+
- ext/html/template/pparam.h
|
79
|
+
- ext/html/template/ppport.h
|
80
|
+
- ext/html/template/procore.c
|
81
|
+
- ext/html/template/procore.h
|
82
|
+
- ext/html/template/proparam.c
|
83
|
+
- ext/html/template/proparam.h
|
84
|
+
- ext/html/template/proscope.h
|
85
|
+
- ext/html/template/proscope.inc
|
86
|
+
- ext/html/template/prostate.h
|
87
|
+
- ext/html/template/prostate.inc
|
88
|
+
- ext/html/template/provalue.h
|
89
|
+
- ext/html/template/pstring.h
|
90
|
+
- ext/html/template/pstrutils.h
|
91
|
+
- ext/html/template/pstrutils.inc
|
92
|
+
- ext/html/template/tagstack.h
|
93
|
+
- ext/html/template/tagstack.inc
|
94
|
+
- ext/html/template/tmpllog.c
|
95
|
+
- ext/html/template/tmpllog.h
|
96
|
+
- ext/html/template/tmplpro.h
|
97
|
+
- ext/html/template/tmplpro_version.c
|
93
98
|
- lib/html/template/pro.rb
|
94
99
|
- script/console
|
95
100
|
- script/destroy
|
@@ -246,7 +251,6 @@ files:
|
|
246
251
|
- test/test_complex.rb
|
247
252
|
- test/test_helper.rb
|
248
253
|
- test/test_html_template.rb
|
249
|
-
- test/test_html_template_internal_extn.rb
|
250
254
|
- test/test_html_template_pro.rb
|
251
255
|
- test/test_path_like_variable_scope.rb
|
252
256
|
- test/test_random.rb
|
@@ -271,9 +275,9 @@ require_paths:
|
|
271
275
|
- ext/html
|
272
276
|
required_ruby_version: !ruby/object:Gem::Requirement
|
273
277
|
requirements:
|
274
|
-
- - "
|
278
|
+
- - ">"
|
275
279
|
- !ruby/object:Gem::Version
|
276
|
-
version:
|
280
|
+
version: 1.9.0
|
277
281
|
version:
|
278
282
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
279
283
|
requirements:
|
@@ -294,7 +298,6 @@ test_files:
|
|
294
298
|
- test/test_complex.rb
|
295
299
|
- test/test_helper.rb
|
296
300
|
- test/test_html_template.rb
|
297
|
-
- test/test_html_template_internal_extn.rb
|
298
301
|
- test/test_html_template_pro.rb
|
299
302
|
- test/test_path_like_variable_scope.rb
|
300
303
|
- test/test_random.rb
|