erbse 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/CHANGES.md +3 -0
- data/Gemfile +3 -0
- data/README.md +40 -22
- data/Rakefile +13 -0
- data/lib/erbse.rb +3 -6
- data/lib/erbse/converter.rb +41 -241
- data/lib/erbse/eruby.rb +114 -0
- data/lib/erbse/template.rb +14 -0
- data/lib/erbse/version.rb +1 -1
- data/test/erbse_test.rb +14 -0
- data/test/test_helper.rb +2 -0
- metadata +9 -149
- data/CHANGES.txt +0 -828
- data/bin/erubis +0 -10
- data/lib/erbse/context.rb +0 -83
- data/lib/erbse/engine.rb +0 -114
- data/lib/erbse/engine/ec.rb +0 -117
- data/lib/erbse/engine/ecpp.rb +0 -113
- data/lib/erbse/engine/ejava.rb +0 -110
- data/lib/erbse/engine/ejavascript.rb +0 -119
- data/lib/erbse/engine/enhanced.rb +0 -126
- data/lib/erbse/engine/eperl.rb +0 -95
- data/lib/erbse/engine/ephp.rb +0 -99
- data/lib/erbse/engine/eruby.rb +0 -119
- data/lib/erbse/engine/escheme.rb +0 -114
- data/lib/erbse/engine/optimized.rb +0 -127
- data/lib/erbse/enhancer.rb +0 -723
- data/lib/erbse/error.rb +0 -23
- data/lib/erbse/evaluator.rb +0 -88
- data/lib/erbse/generator.rb +0 -85
- data/lib/erbse/helper.rb +0 -47
- data/lib/erbse/helpers/rails_form_helper.rb +0 -197
- data/lib/erbse/helpers/rails_helper.rb +0 -353
- data/lib/erbse/main.rb +0 -516
- data/lib/erbse/preprocessing.rb +0 -58
- data/lib/erbse/tiny.rb +0 -144
- data/lib/erbse/util.rb +0 -22
- data/test/assert-text-equal.rb +0 -44
- data/test/data/users-guide/Example.ejava +0 -55
- data/test/data/users-guide/array_example.result +0 -9
- data/test/data/users-guide/arraybuffer_example.result +0 -9
- data/test/data/users-guide/bipattern-example.rhtml +0 -4
- data/test/data/users-guide/bipattern_example.result +0 -6
- data/test/data/users-guide/bufvar-example.rb +0 -10
- data/test/data/users-guide/bufvar-example.result +0 -17
- data/test/data/users-guide/context.rb +0 -6
- data/test/data/users-guide/context.yaml +0 -8
- data/test/data/users-guide/def_method.rb +0 -14
- data/test/data/users-guide/def_method.result +0 -3
- data/test/data/users-guide/escape_example.result +0 -9
- data/test/data/users-guide/example.ec +0 -27
- data/test/data/users-guide/example.ecpp +0 -30
- data/test/data/users-guide/example.ejs +0 -20
- data/test/data/users-guide/example.eperl +0 -18
- data/test/data/users-guide/example.ephp +0 -18
- data/test/data/users-guide/example.eruby +0 -6
- data/test/data/users-guide/example.escheme +0 -28
- data/test/data/users-guide/example1.eruby +0 -6
- data/test/data/users-guide/example1.rb +0 -17
- data/test/data/users-guide/example1.result +0 -16
- data/test/data/users-guide/example10.rb +0 -4
- data/test/data/users-guide/example10.result +0 -17
- data/test/data/users-guide/example10.xhtml +0 -14
- data/test/data/users-guide/example10_x.result +0 -17
- data/test/data/users-guide/example11.php +0 -20
- data/test/data/users-guide/example11.result +0 -23
- data/test/data/users-guide/example11.rhtml +0 -21
- data/test/data/users-guide/example11_C.result +0 -10
- data/test/data/users-guide/example11_N.result +0 -16
- data/test/data/users-guide/example11_U.result +0 -16
- data/test/data/users-guide/example11_php.result +0 -15
- data/test/data/users-guide/example1_x.result +0 -9
- data/test/data/users-guide/example2.eruby +0 -7
- data/test/data/users-guide/example2.rb +0 -10
- data/test/data/users-guide/example2.result +0 -27
- data/test/data/users-guide/example2_trim.result +0 -10
- data/test/data/users-guide/example2_x.result +0 -10
- data/test/data/users-guide/example3.eruby +0 -6
- data/test/data/users-guide/example3.rb +0 -10
- data/test/data/users-guide/example31.result +0 -22
- data/test/data/users-guide/example32.result +0 -4
- data/test/data/users-guide/example3_e.result +0 -8
- data/test/data/users-guide/example4.eruby +0 -3
- data/test/data/users-guide/example4.rb +0 -11
- data/test/data/users-guide/example4.result +0 -10
- data/test/data/users-guide/example4_x.result +0 -5
- data/test/data/users-guide/example5.eruby +0 -6
- data/test/data/users-guide/example5.rb +0 -16
- data/test/data/users-guide/example5.result +0 -7
- data/test/data/users-guide/example6.rb +0 -12
- data/test/data/users-guide/example6.result +0 -7
- data/test/data/users-guide/example7.eruby +0 -8
- data/test/data/users-guide/example71.result +0 -13
- data/test/data/users-guide/example72.result +0 -13
- data/test/data/users-guide/example8.eruby +0 -6
- data/test/data/users-guide/example8_ruby.result +0 -7
- data/test/data/users-guide/example8_yaml.result +0 -7
- data/test/data/users-guide/example9.eruby +0 -3
- data/test/data/users-guide/example9.rb +0 -8
- data/test/data/users-guide/example9.result +0 -9
- data/test/data/users-guide/example91.result +0 -5
- data/test/data/users-guide/example92.result +0 -4
- data/test/data/users-guide/example_c.result +0 -32
- data/test/data/users-guide/example_java.result +0 -56
- data/test/data/users-guide/example_js.result +0 -22
- data/test/data/users-guide/example_perl.result +0 -20
- data/test/data/users-guide/example_php.result +0 -19
- data/test/data/users-guide/example_scheme.result +0 -30
- data/test/data/users-guide/example_scheme_display.result +0 -29
- data/test/data/users-guide/fasteruby-example.rb +0 -8
- data/test/data/users-guide/fasteruby-example.result +0 -18
- data/test/data/users-guide/fasteruby.rb +0 -11
- data/test/data/users-guide/fasteruby.result +0 -38
- data/test/data/users-guide/fasteruby.rhtml +0 -15
- data/test/data/users-guide/headerfooter-example.eruby +0 -9
- data/test/data/users-guide/headerfooter-example2.rb +0 -8
- data/test/data/users-guide/headerfooter-example2.rhtml +0 -10
- data/test/data/users-guide/headerfooter_example.result +0 -11
- data/test/data/users-guide/headerfooter_example2.result +0 -13
- data/test/data/users-guide/interpolation_example.result +0 -9
- data/test/data/users-guide/main_program1.rb +0 -8
- data/test/data/users-guide/main_program1.result +0 -6
- data/test/data/users-guide/main_program2.rb +0 -8
- data/test/data/users-guide/main_program2.result +0 -6
- data/test/data/users-guide/nocode-example.eruby +0 -14
- data/test/data/users-guide/nocode-php.result +0 -20
- data/test/data/users-guide/nocode_example.result +0 -15
- data/test/data/users-guide/normal-eruby-test.eruby +0 -9
- data/test/data/users-guide/normal_eruby_test.result +0 -11
- data/test/data/users-guide/notext-example.eruby +0 -14
- data/test/data/users-guide/notext-example.php +0 -19
- data/test/data/users-guide/notext-php.result +0 -20
- data/test/data/users-guide/notext_example.result +0 -16
- data/test/data/users-guide/percentline-example.rhtml +0 -6
- data/test/data/users-guide/percentline_example.result +0 -9
- data/test/data/users-guide/prefixedline-example.rb +0 -9
- data/test/data/users-guide/prefixedline-example.rhtml +0 -6
- data/test/data/users-guide/prefixedline_example.result +0 -9
- data/test/data/users-guide/printenable_example.result +0 -4
- data/test/data/users-guide/printenabled-example.eruby +0 -3
- data/test/data/users-guide/printenabled-example.rb +0 -8
- data/test/data/users-guide/printstatement_example.result +0 -8
- data/test/data/users-guide/simplify_example.result +0 -9
- data/test/data/users-guide/stderr.log +0 -3
- data/test/data/users-guide/stdout_exmple.result +0 -9
- data/test/data/users-guide/stringbuffer_example.result +0 -9
- data/test/data/users-guide/tail_260.result +0 -4
- data/test/data/users-guide/tailnewline.rhtml +0 -3
- data/test/data/users-guide/template1.rhtml +0 -4
- data/test/data/users-guide/template2.rhtml +0 -4
- data/test/test-engines.rb +0 -425
- data/test/test-enhancers.rb +0 -646
- data/test/test-erubis.rb +0 -887
- data/test/test-index-cgi.rb +0 -191
- data/test/test-main.rb +0 -752
- data/test/test-users-guide.rb +0 -73
- data/test/test.rb +0 -45
- data/test/testutil.rb +0 -111
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 37f385edabdf30c0807542d7c5560537b5db5f82
|
|
4
|
+
data.tar.gz: 0bd510e68988198ff9e4ef3f3e796900fde9a41a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 69a822ab5ad04ec4495f484353b9cdce8780a9b78cb25018b57193ec670224a18e10470e0c88b84c01639cfb817456d322a77057e912e04852627209f2ae7bfb
|
|
7
|
+
data.tar.gz: 80e5540f89a2ac0922730960d1c291e7bdd117a3db70b4b9c74f03245dc1945a279d7f59a008b806d5153d53da17b0dcfe7915b6c6814a9c692dddcdf7487c59
|
data/CHANGES.md
ADDED
data/Gemfile
ADDED
data/README.md
CHANGED
|
@@ -2,50 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
_An updated version of Erubis._
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Erbse compiles an ERB string to a string of Ruby. It is completely decoupled from any framework and does only one thing. Pretty boring, I know.
|
|
6
6
|
|
|
7
7
|
## Added features
|
|
8
8
|
|
|
9
|
-
*
|
|
9
|
+
* Block support a la Rails.
|
|
10
|
+
|
|
11
|
+
```erb
|
|
12
|
+
<%= form_tag .. do |f| %>
|
|
13
|
+
<%= f.fields_for do %>
|
|
14
|
+
...
|
|
15
|
+
<% end %>
|
|
16
|
+
<% end %>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## API
|
|
20
|
+
|
|
21
|
+
The API is extremely simple.
|
|
10
22
|
|
|
23
|
+
```ruby
|
|
24
|
+
Erbse::Template.new("<% ... %>").call #=> string of compiled ruby.
|
|
25
|
+
```
|
|
11
26
|
|
|
12
|
-
|
|
27
|
+
Template only accepts a content string which is the ERB template. The only public `#call` method returns a string of the compiled template that can then be evaluated in a context.
|
|
13
28
|
|
|
14
|
-
|
|
15
|
-
* Very fast, almost three times faster than ERB and even 10% faster than eruby
|
|
16
|
-
* Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript)
|
|
17
|
-
* Auto escaping support
|
|
18
|
-
* Auto trimming spaces around '<% %>'
|
|
19
|
-
* Embedded pattern changeable (default '<% %>')
|
|
20
|
-
* Enable to handle Processing Instructions (PI) as embedded pattern (ex. '<?rb ... ?>')
|
|
21
|
-
* Context object available and easy to combine eRuby template with YAML datafile
|
|
22
|
-
* Print statement available
|
|
23
|
-
* Easy to extend and customize in subclass
|
|
24
|
-
* Ruby on Rails support
|
|
29
|
+
The user layer, like Tilt, has to take care of caching the `Erbse::Template` instances.
|
|
25
30
|
|
|
26
|
-
Erubis is implemented in pure Ruby. It requires Ruby 1.8 or higher.
|
|
27
|
-
Erubis now supports Ruby 1.9.
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
## Planned
|
|
30
33
|
|
|
34
|
+
Block inheritance.
|
|
31
35
|
|
|
36
|
+
```erb
|
|
37
|
+
<h1><%= title %></h1>
|
|
32
38
|
|
|
39
|
+
<% fragment :subheader do %>
|
|
40
|
+
Or: <%= subheader %>
|
|
41
|
+
<% end %>
|
|
42
|
+
```
|
|
33
43
|
|
|
44
|
+
This fragment could then be overridden.
|
|
34
45
|
|
|
35
|
-
|
|
46
|
+
Feel free to contribute!!!
|
|
36
47
|
|
|
37
|
-
'benchmark/erubybenchmark.rb' is a benchmark script of Erubis.
|
|
38
|
-
Try 'ruby erubybenchmark.rb' in benchmark directory.
|
|
39
48
|
|
|
49
|
+
## Used where?
|
|
50
|
+
|
|
51
|
+
Erbse is the ERB engine in [Cells 4](https://github.com/apotonick/cells).
|
|
52
|
+
|
|
53
|
+
It also hopefully gets used in Rails 5/6, so we can remove those horrible hacks from AV.
|
|
40
54
|
|
|
41
55
|
|
|
42
56
|
# License
|
|
43
57
|
|
|
44
58
|
MIT License
|
|
45
59
|
|
|
60
|
+
# Contributors
|
|
61
|
+
|
|
62
|
+
* @iazel
|
|
63
|
+
* @seuros
|
|
46
64
|
|
|
47
65
|
|
|
48
66
|
# Authors
|
|
49
67
|
|
|
50
|
-
Copyright 2015 Nick Sutterer <apotonick@gmail.com>
|
|
51
|
-
Copyright 2006-2011 makoto kuwata <kwa(at)kuwata-lab.com>
|
|
68
|
+
* Copyright 2015 Nick Sutterer <apotonick@gmail.com>
|
|
69
|
+
* Copyright 2006-2011 makoto kuwata <kwa(at)kuwata-lab.com>
|
data/Rakefile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
Bundler::GemHelper.install_tasks
|
|
3
|
+
|
|
4
|
+
require 'rake/testtask'
|
|
5
|
+
|
|
6
|
+
desc 'Default: run unit tests.'
|
|
7
|
+
task :default => :test
|
|
8
|
+
|
|
9
|
+
Rake::TestTask.new(:test) do |test|
|
|
10
|
+
test.libs << 'test'
|
|
11
|
+
test.pattern = 'test/*_test.rb'
|
|
12
|
+
test.verbose = true
|
|
13
|
+
end
|
data/lib/erbse.rb
CHANGED
|
@@ -44,9 +44,6 @@
|
|
|
44
44
|
module Erbse
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
require
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
require 'erbse/engine/eruby'
|
|
51
|
-
|
|
52
|
-
# require 'erbse/local-setting'
|
|
47
|
+
require "erbse/converter"
|
|
48
|
+
require "erbse/template"
|
|
49
|
+
require "erbse/eruby"
|
data/lib/erbse/converter.rb
CHANGED
|
@@ -1,46 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
module Erubis
|
|
9
|
-
|
|
1
|
+
module Erbse
|
|
2
|
+
# convert input string into target language
|
|
3
|
+
class Converter
|
|
4
|
+
def initialize(properties={}, generator)
|
|
5
|
+
init_converter!(properties)
|
|
6
|
+
@generator = generator
|
|
7
|
+
end
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
def convert(input) # TODO: rename to #call.
|
|
10
|
+
codebuf = "" # or []
|
|
11
|
+
@preamble.nil? ? generator.add_preamble(codebuf) : (@preamble && (codebuf << @preamble))
|
|
12
|
+
convert_input(codebuf, input)
|
|
13
|
+
@postamble.nil? ? generator.add_postamble(codebuf) : (@postamble && (codebuf << @postamble))
|
|
14
|
+
@_proc = nil # clear cached proc object
|
|
15
|
+
return codebuf # or codebuf.join()
|
|
16
|
+
end
|
|
15
17
|
|
|
18
|
+
private
|
|
16
19
|
attr_accessor :preamble, :postamble, :escape
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
return [
|
|
20
|
-
[:preamble, nil, "preamble (no preamble when false)"],
|
|
21
|
-
[:postamble, nil, "postamble (no postamble when false)"],
|
|
22
|
-
[:escape, nil, "escape expression or not in default"],
|
|
23
|
-
]
|
|
24
|
-
end
|
|
21
|
+
attr_reader :generator
|
|
25
22
|
|
|
26
|
-
def init_converter(properties
|
|
23
|
+
def init_converter!(properties)
|
|
27
24
|
@preamble = properties[:preamble]
|
|
28
25
|
@postamble = properties[:postamble]
|
|
29
26
|
@escape = properties[:escape]
|
|
30
27
|
end
|
|
31
28
|
|
|
32
|
-
## convert input string into target language
|
|
33
|
-
def convert(input)
|
|
34
|
-
codebuf = "" # or []
|
|
35
|
-
@preamble.nil? ? add_preamble(codebuf) : (@preamble && (codebuf << @preamble))
|
|
36
|
-
convert_input(codebuf, input)
|
|
37
|
-
@postamble.nil? ? add_postamble(codebuf) : (@postamble && (codebuf << @postamble))
|
|
38
|
-
@_proc = nil # clear cached proc object
|
|
39
|
-
return codebuf # or codebuf.join()
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
protected
|
|
43
|
-
|
|
44
29
|
##
|
|
45
30
|
## detect spaces at beginning of line
|
|
46
31
|
##
|
|
@@ -70,14 +55,6 @@ module Erubis
|
|
|
70
55
|
end
|
|
71
56
|
return lspace
|
|
72
57
|
end
|
|
73
|
-
|
|
74
|
-
##
|
|
75
|
-
## (abstract) convert input to code
|
|
76
|
-
##
|
|
77
|
-
def convert_input(codebuf, input)
|
|
78
|
-
not_implemented
|
|
79
|
-
end
|
|
80
|
-
|
|
81
58
|
end
|
|
82
59
|
|
|
83
60
|
|
|
@@ -88,9 +65,7 @@ module Erubis
|
|
|
88
65
|
##
|
|
89
66
|
## basic converter which supports '<% ... %>' notation.
|
|
90
67
|
##
|
|
91
|
-
|
|
92
|
-
include Erubis::Converter
|
|
93
|
-
|
|
68
|
+
class Basic::Converter < Converter
|
|
94
69
|
def self.supported_properties # :nodoc:
|
|
95
70
|
return [
|
|
96
71
|
[:pattern, '<% %>', "embed pattern"],
|
|
@@ -98,32 +73,27 @@ module Erubis
|
|
|
98
73
|
]
|
|
99
74
|
end
|
|
100
75
|
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
101
79
|
attr_accessor :pattern, :trim
|
|
102
80
|
|
|
103
|
-
def init_converter(properties={})
|
|
81
|
+
def init_converter!(properties={})
|
|
104
82
|
super(properties)
|
|
105
83
|
@pattern = properties[:pattern]
|
|
106
84
|
@trim = properties[:trim] != false
|
|
107
85
|
end
|
|
108
86
|
|
|
109
|
-
|
|
87
|
+
|
|
110
88
|
|
|
111
89
|
## return regexp of pattern to parse eRuby script
|
|
112
|
-
def pattern_regexp(pattern)
|
|
90
|
+
def self.pattern_regexp(pattern)
|
|
113
91
|
@prefix, @postfix = pattern.split() # '<% %>' => '<%', '%>'
|
|
114
|
-
#return /(.*?)(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m
|
|
115
|
-
#return /(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m
|
|
116
92
|
return /#{@prefix}(=+|-|\#|%)?(.*?)([-=])?#{@postfix}([ \t]*\r?\n)?/m
|
|
117
93
|
end
|
|
118
|
-
module_function :pattern_regexp
|
|
119
94
|
|
|
120
|
-
#DEFAULT_REGEXP = /(.*?)(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
|
|
121
|
-
#DEFAULT_REGEXP = /(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
|
|
122
|
-
#DEFAULT_REGEXP = /<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
|
|
123
95
|
DEFAULT_REGEXP = pattern_regexp('<% %>')
|
|
124
96
|
|
|
125
|
-
public
|
|
126
|
-
|
|
127
97
|
def convert_input(src, input)
|
|
128
98
|
pat = @pattern
|
|
129
99
|
regexp = pat.nil? || pat == '<% %>' ? DEFAULT_REGEXP : pattern_regexp(pat)
|
|
@@ -137,221 +107,51 @@ module Erubis
|
|
|
137
107
|
ch = indicator ? indicator[0] : nil
|
|
138
108
|
lspace = ch == ?= ? nil : detect_spaces_at_bol(text, is_bol)
|
|
139
109
|
is_bol = rspace ? true : false
|
|
140
|
-
add_text(src, text) if text && !text.empty?
|
|
110
|
+
generator.add_text(src, text) if text && !text.empty?
|
|
141
111
|
## * when '<%= %>', do nothing
|
|
142
112
|
## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
|
|
143
113
|
if ch == ?= # <%= %>
|
|
144
114
|
rspace = nil if tailch && !tailch.empty?
|
|
145
|
-
add_text(src, lspace) if lspace
|
|
115
|
+
generator.add_text(src, lspace) if lspace
|
|
146
116
|
add_expr(src, code, indicator)
|
|
147
|
-
add_text(src, rspace) if rspace
|
|
117
|
+
generator.add_text(src, rspace) if rspace
|
|
148
118
|
elsif ch == ?\# # <%# %>
|
|
149
119
|
n = code.count("\n") + (rspace ? 1 : 0)
|
|
150
120
|
if @trim && lspace && rspace
|
|
151
|
-
add_stmt(src, "\n" * n)
|
|
121
|
+
generator.add_stmt(src, "\n" * n)
|
|
152
122
|
else
|
|
153
|
-
add_text(src, lspace) if lspace
|
|
154
|
-
add_stmt(src, "\n" * n)
|
|
155
|
-
add_text(src, rspace) if rspace
|
|
123
|
+
generator.add_text(src, lspace) if lspace
|
|
124
|
+
generator.add_stmt(src, "\n" * n)
|
|
125
|
+
generator.add_text(src, rspace) if rspace
|
|
156
126
|
end
|
|
157
127
|
elsif ch == ?% # <%% %>
|
|
158
128
|
s = "#{lspace}#{@prefix||='<%'}#{code}#{tailch}#{@postfix||='%>'}#{rspace}"
|
|
159
|
-
add_text(src, s)
|
|
129
|
+
generator.add_text(src, s)
|
|
160
130
|
else # <% %>
|
|
161
131
|
if @trim && lspace && rspace
|
|
162
|
-
add_stmt(src, "#{lspace}#{code}#{rspace}")
|
|
132
|
+
generator.add_stmt(src, "#{lspace}#{code}#{rspace}")
|
|
163
133
|
else
|
|
164
|
-
add_text(src, lspace) if lspace
|
|
165
|
-
add_stmt(src, code)
|
|
166
|
-
add_text(src, rspace) if rspace
|
|
134
|
+
generator.add_text(src, lspace) if lspace
|
|
135
|
+
generator.add_stmt(src, code)
|
|
136
|
+
generator.add_text(src, rspace) if rspace
|
|
167
137
|
end
|
|
168
138
|
end
|
|
169
139
|
end
|
|
170
140
|
#rest = $' || input # ruby1.8
|
|
171
141
|
rest = pos == 0 ? input : input[pos..-1] # ruby1.9
|
|
172
|
-
add_text(src, rest)
|
|
142
|
+
generator.add_text(src, rest)
|
|
173
143
|
end
|
|
174
144
|
|
|
175
145
|
## add expression code to src
|
|
176
146
|
def add_expr(src, code, indicator)
|
|
177
147
|
case indicator
|
|
178
148
|
when '='
|
|
179
|
-
@escape ? add_expr_escaped(src, code) : add_expr_literal(src, code)
|
|
149
|
+
@escape ? generator.add_expr_escaped(src, code) : generator.add_expr_literal(src, code)
|
|
180
150
|
when '=='
|
|
181
|
-
@escape ? add_expr_literal(src, code) : add_expr_escaped(src, code)
|
|
151
|
+
@escape ? generator.add_expr_literal(src, code) : generator.add_expr_escaped(src, code)
|
|
182
152
|
when '==='
|
|
183
|
-
add_expr_debug(src, code)
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
module PI
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
##
|
|
194
|
-
## Processing Instructions (PI) converter for XML.
|
|
195
|
-
## this class converts '<?rb ... ?>' and '${...}' notation.
|
|
196
|
-
##
|
|
197
|
-
module PI::Converter
|
|
198
|
-
include Erubis::Converter
|
|
199
|
-
|
|
200
|
-
def self.desc # :nodoc:
|
|
201
|
-
"use processing instructions (PI) instead of '<% %>'"
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
def self.supported_properties # :nodoc:
|
|
205
|
-
return [
|
|
206
|
-
[:trim, true, "trim spaces around <% ... %>"],
|
|
207
|
-
[:pi, 'rb', "PI (Processing Instrunctions) name"],
|
|
208
|
-
[:embchar, '@', "char for embedded expression pattern('@{...}@')"],
|
|
209
|
-
[:pattern, '<% %>', "embed pattern"],
|
|
210
|
-
]
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
attr_accessor :pi, :prefix
|
|
214
|
-
|
|
215
|
-
def init_converter(properties={})
|
|
216
|
-
super(properties)
|
|
217
|
-
@trim = properties.fetch(:trim, true)
|
|
218
|
-
@pi = properties[:pi] if properties[:pi]
|
|
219
|
-
@embchar = properties[:embchar] || '@'
|
|
220
|
-
@pattern = properties[:pattern]
|
|
221
|
-
@pattern = '<% %>' if @pattern.nil? #|| @pattern == true
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
def convert(input)
|
|
225
|
-
code = super(input)
|
|
226
|
-
return @header || @footer ? "#{@header}#{code}#{@footer}" : code
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
protected
|
|
230
|
-
|
|
231
|
-
def convert_input(codebuf, input)
|
|
232
|
-
unless @regexp
|
|
233
|
-
@pi ||= 'e'
|
|
234
|
-
ch = Regexp.escape(@embchar)
|
|
235
|
-
if @pattern
|
|
236
|
-
left, right = @pattern.split(' ')
|
|
237
|
-
@regexp = /<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?|#{ch}(!*)?\{(.*?)\}#{ch}|#{left}(=+)(.*?)#{right}/m
|
|
238
|
-
else
|
|
239
|
-
@regexp = /<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?|#{ch}(!*)?\{(.*?)\}#{ch}/m
|
|
240
|
-
end
|
|
241
|
-
end
|
|
242
|
-
#
|
|
243
|
-
is_bol = true
|
|
244
|
-
pos = 0
|
|
245
|
-
input.scan(@regexp) do |pi_arg, stmt, rspace,
|
|
246
|
-
indicator1, expr1, indicator2, expr2|
|
|
247
|
-
match = Regexp.last_match
|
|
248
|
-
len = match.begin(0) - pos
|
|
249
|
-
text = input[pos, len]
|
|
250
|
-
pos = match.end(0)
|
|
251
|
-
lspace = stmt ? detect_spaces_at_bol(text, is_bol) : nil
|
|
252
|
-
is_bol = stmt && rspace ? true : false
|
|
253
|
-
add_text(codebuf, text) # unless text.empty?
|
|
254
|
-
#
|
|
255
|
-
if stmt
|
|
256
|
-
if @trim && lspace && rspace
|
|
257
|
-
add_pi_stmt(codebuf, "#{lspace}#{stmt}#{rspace}", pi_arg)
|
|
258
|
-
else
|
|
259
|
-
add_text(codebuf, lspace) if lspace
|
|
260
|
-
add_pi_stmt(codebuf, stmt, pi_arg)
|
|
261
|
-
add_text(codebuf, rspace) if rspace
|
|
262
|
-
end
|
|
263
|
-
else
|
|
264
|
-
add_pi_expr(codebuf, expr1 || expr2, indicator1 || indicator2)
|
|
265
|
-
end
|
|
153
|
+
generator.add_expr_debug(src, code)
|
|
266
154
|
end
|
|
267
|
-
#rest = $' || input # ruby1.8
|
|
268
|
-
rest = pos == 0 ? input : input[pos..-1] # ruby1.9
|
|
269
|
-
add_text(codebuf, rest)
|
|
270
155
|
end
|
|
271
|
-
|
|
272
|
-
#--
|
|
273
|
-
#def convert_input(codebuf, input)
|
|
274
|
-
# parse_stmts(codebuf, input)
|
|
275
|
-
# #parse_stmts2(codebuf, input)
|
|
276
|
-
#end
|
|
277
|
-
#
|
|
278
|
-
#def parse_stmts(codebuf, input)
|
|
279
|
-
# #regexp = pattern_regexp(@pattern)
|
|
280
|
-
# @pi ||= 'e'
|
|
281
|
-
# @stmt_pattern ||= /<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?/m
|
|
282
|
-
# is_bol = true
|
|
283
|
-
# pos = 0
|
|
284
|
-
# input.scan(@stmt_pattern) do |pi_arg, code, rspace|
|
|
285
|
-
# match = Regexp.last_match
|
|
286
|
-
# len = match.begin(0) - pos
|
|
287
|
-
# text = input[pos, len]
|
|
288
|
-
# pos = match.end(0)
|
|
289
|
-
# lspace = detect_spaces_at_bol(text, is_bol)
|
|
290
|
-
# is_bol = rspace ? true : false
|
|
291
|
-
# parse_exprs(codebuf, text) # unless text.empty?
|
|
292
|
-
# if @trim && lspace && rspace
|
|
293
|
-
# add_pi_stmt(codebuf, "#{lspace}#{code}#{rspace}", pi_arg)
|
|
294
|
-
# else
|
|
295
|
-
# add_text(codebuf, lspace)
|
|
296
|
-
# add_pi_stmt(codebuf, code, pi_arg)
|
|
297
|
-
# add_text(codebuf, rspace)
|
|
298
|
-
# end
|
|
299
|
-
# end
|
|
300
|
-
# rest = $' || input
|
|
301
|
-
# parse_exprs(codebuf, rest)
|
|
302
|
-
#end
|
|
303
|
-
#
|
|
304
|
-
#def parse_exprs(codebuf, input)
|
|
305
|
-
# unless @expr_pattern
|
|
306
|
-
# ch = Regexp.escape(@embchar)
|
|
307
|
-
# if @pattern
|
|
308
|
-
# left, right = @pattern.split(' ')
|
|
309
|
-
# @expr_pattern = /#{ch}(!*)?\{(.*?)\}#{ch}|#{left}(=+)(.*?)#{right}/
|
|
310
|
-
# else
|
|
311
|
-
# @expr_pattern = /#{ch}(!*)?\{(.*?)\}#{ch}/
|
|
312
|
-
# end
|
|
313
|
-
# end
|
|
314
|
-
# pos = 0
|
|
315
|
-
# input.scan(@expr_pattern) do |indicator1, code1, indicator2, code2|
|
|
316
|
-
# indicator = indicator1 || indicator2
|
|
317
|
-
# code = code1 || code2
|
|
318
|
-
# match = Regexp.last_match
|
|
319
|
-
# len = match.begin(0) - pos
|
|
320
|
-
# text = input[pos, len]
|
|
321
|
-
# pos = match.end(0)
|
|
322
|
-
# add_text(codebuf, text) # unless text.empty?
|
|
323
|
-
# add_pi_expr(codebuf, code, indicator)
|
|
324
|
-
# end
|
|
325
|
-
# rest = $' || input
|
|
326
|
-
# add_text(codebuf, rest)
|
|
327
|
-
#end
|
|
328
|
-
#++
|
|
329
|
-
|
|
330
|
-
def add_pi_stmt(codebuf, code, pi_arg) # :nodoc:
|
|
331
|
-
case pi_arg
|
|
332
|
-
when nil ; add_stmt(codebuf, code)
|
|
333
|
-
when 'header' ; @header = code
|
|
334
|
-
when 'footer' ; @footer = code
|
|
335
|
-
when 'comment'; add_stmt(codebuf, "\n" * code.count("\n"))
|
|
336
|
-
when 'value' ; add_expr_literal(codebuf, code)
|
|
337
|
-
else ; add_stmt(codebuf, code)
|
|
338
|
-
end
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
def add_pi_expr(codebuf, code, indicator) # :nodoc:
|
|
342
|
-
case indicator
|
|
343
|
-
when nil, '', '==' # @{...}@ or <%== ... %>
|
|
344
|
-
@escape == false ? add_expr_literal(codebuf, code) : add_expr_escaped(codebuf, code)
|
|
345
|
-
when '!', '=' # @!{...}@ or <%= ... %>
|
|
346
|
-
@escape == false ? add_expr_escaped(codebuf, code) : add_expr_literal(codebuf, code)
|
|
347
|
-
when '!!', '===' # @!!{...}@ or <%=== ... %>
|
|
348
|
-
add_expr_debug(codebuf, code)
|
|
349
|
-
else
|
|
350
|
-
# ignore
|
|
351
|
-
end
|
|
352
|
-
end
|
|
353
|
-
|
|
354
156
|
end
|
|
355
|
-
|
|
356
|
-
|
|
357
157
|
end
|