hotcell 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,11 +4,14 @@
4
4
  #define emit_operator rb_funcall(self, rb_intern("emit_operator"), 0)
5
5
  #define emit_numeric rb_funcall(self, rb_intern("emit_numeric"), 0)
6
6
  #define emit_identifer rb_funcall(self, rb_intern("emit_identifer"), 0)
7
- #define emit_sstring rb_funcall(self, rb_intern("emit_sstring"), 0)
7
+ #define emit_string rb_funcall(self, rb_intern("emit_string"), 0)
8
8
  #define emit_dstring rb_funcall(self, rb_intern("emit_dstring"), 0)
9
+ #define emit_dstring_open rb_funcall(self, rb_intern("emit_dstring_open"), 0)
10
+ #define emit_dstring_close rb_funcall(self, rb_intern("emit_dstring_close"), 0)
9
11
  #define emit_regexp rb_funcall(self, rb_intern("emit_regexp"), 0)
10
12
  #define emit_comment rb_funcall(self, rb_intern("emit_comment"), 0)
11
13
  #define emit_template rb_funcall(self, rb_intern("emit_template"), 0)
14
+ #define emit_interpolation rb_funcall(self, rb_intern("emit_interpolation"), 0)
12
15
 
13
16
  #define raise_unterminated_string rb_funcall(self, rb_intern("raise_unterminated_string"), 0)
14
17
  #define raise_unterminated_regexp rb_funcall(self, rb_intern("raise_unterminated_regexp"), 0)
@@ -1,5 +1,5 @@
1
1
  %%{
2
- machine puffer_lexer;
2
+ machine hotcell_lexer;
3
3
 
4
4
  action RegexpCheck {
5
5
  if (regexp_possible == Qfalse) {
@@ -8,6 +8,33 @@
8
8
  }
9
9
  }
10
10
 
11
+ action Interpolate {
12
+ braces_count = 0;
13
+ emit_interpolation;
14
+ fcall interpolation;
15
+ }
16
+
17
+ action OpenBrace {
18
+ emit_operator;
19
+ braces_count++;
20
+ }
21
+
22
+ action CloseBrace {
23
+ if (braces_count < 1) {
24
+ emit_interpolation;
25
+ fret;
26
+ } else {
27
+ emit_operator;
28
+ braces_count--;
29
+ }
30
+ }
31
+
32
+ action ParseDstring {
33
+ dstring_start = ts - data;
34
+ emit_dstring_open;
35
+ fcall dstring;
36
+ }
37
+
11
38
  include "lexer.rl";
12
39
  }%%
13
40
 
@@ -25,6 +52,8 @@ static char *ts;
25
52
  static char *te;
26
53
  static char *data;
27
54
  static VALUE encoding;
55
+ static int braces_count;
56
+ static long dstring_start;
28
57
 
29
58
  static VALUE tokenize(VALUE self) {
30
59
  VALUE source = rb_iv_get(self, "@source");
@@ -51,6 +80,11 @@ static VALUE tokenize(VALUE self) {
51
80
  raise_unexpected_symbol;
52
81
  }
53
82
 
83
+ if (cs == hotcell_lexer_en_dstring) {
84
+ ts = data + dstring_start;
85
+ raise_unterminated_string;
86
+ }
87
+
54
88
  return rb_iv_get(self, "@token_array");
55
89
  }
56
90
 
@@ -11,7 +11,7 @@ module Hotcell
11
11
  :resolver, :resolver=, :escape_tags, :escape_tags=, to: :config
12
12
  end
13
13
 
14
- require 'hotcell/manipulator'
14
+ require 'hotcell/tong'
15
15
  require 'hotcell/extensions'
16
16
  require 'hotcell/source'
17
17
  require 'hotcell/lexer'
@@ -33,7 +33,7 @@ module Hotcell
33
33
  end.join
34
34
  end
35
35
 
36
- class Forloop < Hotcell::Manipulator
36
+ class Forloop < Hotcell::Tong
37
37
  attr_reader :index
38
38
 
39
39
  def initialize object, index
@@ -46,11 +46,11 @@ module Hotcell
46
46
  raise e if e && options[:reraise]
47
47
  end
48
48
 
49
- def manipulator_invoke method, *arguments
49
+ def tong_invoke method, *arguments
50
50
  if arguments.any?
51
- helpers.manipulator_invoke(method, *arguments)
51
+ helpers.tong_invoke(method, *arguments)
52
52
  else
53
- scope.key?(method) ? scope[method] : helpers.manipulator_invoke(method)
53
+ scope.key?(method) ? scope[method] : helpers.tong_invoke(method)
54
54
  end
55
55
  end
56
56
 
@@ -61,7 +61,7 @@ module Hotcell
61
61
  end
62
62
 
63
63
  def helpers_class
64
- @helpers_class ||= Class.new(Hotcell::Manipulator).tap do |klass|
64
+ @helpers_class ||= Class.new(Hotcell::Tong).tap do |klass|
65
65
  options[:helpers].each { |helper| klass.send(:include, helper) }
66
66
  end
67
67
  end
@@ -1,52 +1,52 @@
1
1
  NilClass.class_eval do
2
- include Hotcell::Manipulator::Mixin
2
+ include Hotcell::Tong::Mixin
3
3
  end
4
4
 
5
5
  TrueClass.class_eval do
6
- include Hotcell::Manipulator::Mixin
6
+ include Hotcell::Tong::Mixin
7
7
  end
8
8
 
9
9
  FalseClass.class_eval do
10
- include Hotcell::Manipulator::Mixin
10
+ include Hotcell::Tong::Mixin
11
11
  end
12
12
 
13
13
  Numeric.class_eval do
14
- include Hotcell::Manipulator::Mixin
14
+ include Hotcell::Tong::Mixin
15
15
  end
16
16
 
17
17
  String.class_eval do
18
- include Hotcell::Manipulator::Mixin
18
+ include Hotcell::Tong::Mixin
19
19
 
20
20
  manipulate :size, :length
21
21
  end
22
22
 
23
23
  Regexp.class_eval do
24
- include Hotcell::Manipulator::Mixin
24
+ include Hotcell::Tong::Mixin
25
25
  end
26
26
 
27
27
  Time.class_eval do
28
- include Hotcell::Manipulator::Mixin
28
+ include Hotcell::Tong::Mixin
29
29
  end
30
30
 
31
31
  Date.class_eval do
32
- include Hotcell::Manipulator::Mixin
32
+ include Hotcell::Tong::Mixin
33
33
  end
34
34
 
35
35
  Array.class_eval do
36
- include Hotcell::Manipulator::Mixin
36
+ include Hotcell::Tong::Mixin
37
37
 
38
38
  manipulate :first, :last, :count, :size, :length
39
39
  end
40
40
 
41
41
  Hash.class_eval do
42
- include Hotcell::Manipulator::Mixin
42
+ include Hotcell::Tong::Mixin
43
43
 
44
44
  manipulate :keys, :values, :count, :size, :length
45
45
 
46
- def manipulator_invoke method, *arguments
46
+ def tong_invoke method, *arguments
47
47
  if method == '[]'
48
- manipulator_invoke_brackets *arguments
49
- elsif manipulator_invokable? method
48
+ tong_invoke_brackets *arguments
49
+ elsif tong_invokable? method
50
50
  send(method, *arguments)
51
51
  elsif arguments.count == 0
52
52
  self[method]
@@ -67,14 +67,28 @@ module Hotcell
67
67
  end
68
68
  end
69
69
 
70
- def emit_sstring
70
+ def emit_string
71
71
  emit :STRING, current_value[1..-2].gsub(SSTRING_ESCAPE_REGEXP) { |match|
72
72
  SSTRING_ESCAPE_MAP[match] }
73
73
  end
74
74
 
75
75
  def emit_dstring
76
- emit :STRING, current_value[1..-2].gsub(DSTRING_ESCAPE_REGEXP) { |match|
76
+ last = @token_array[-1]
77
+ value = current_value.gsub(DSTRING_ESCAPE_REGEXP) { |match|
77
78
  DSTRING_ESCAPE_MAP[match] || match[1] }
79
+ if last && last[0] == :STRING
80
+ last[1][0] += value
81
+ else
82
+ emit :STRING, value
83
+ end
84
+ end
85
+
86
+ def emit_dstring_open
87
+ emit :DOPEN, '"'
88
+ end
89
+
90
+ def emit_dstring_close
91
+ emit :DCLOSE, '"'
78
92
  end
79
93
 
80
94
  def regexp_ambiguity
@@ -127,6 +141,11 @@ module Hotcell
127
141
  end
128
142
  end
129
143
 
144
+ def emit_interpolation
145
+ value = current_value
146
+ emit (value == '#{' ? :IOPEN : :ICLOSE), value
147
+ end
148
+
130
149
  def raise_unexpected_symbol
131
150
  raise Hotcell::UnexpectedSymbol.new *current_error
132
151
  end
@@ -1,5 +1,5 @@
1
1
  %%{
2
- machine puffer_lexer;
2
+ machine hotcell_lexer;
3
3
 
4
4
  plus = '+';
5
5
  minus = '-';
@@ -43,11 +43,8 @@
43
43
 
44
44
  squote = "'";
45
45
  snon_quote = [^\\'];
46
- sstring = squote (snon_quote | escaped_symbol)* squote @lerr{ raise_unterminated_string; };
47
-
48
- dquote = '"';
49
- dnon_quote = [^\\"];
50
- dstring = dquote (dnon_quote | escaped_symbol)* dquote @lerr{ raise_unterminated_string; };
46
+ string_content = squote (snon_quote | escaped_symbol)* squote @lerr{ raise_unterminated_string; };
47
+ string = '""' | string_content;
51
48
 
52
49
  rquote = '/';
53
50
  rnon_quote = [^\\/];
@@ -69,14 +66,36 @@
69
66
  template_comment_close = '#}}';
70
67
  template_comment_body = [^\#]+ | '#';
71
68
 
69
+ dnon_quote = [^\\#"];
70
+ dstring_content = (dnon_quote | escaped_symbol)+ | '#';
71
+
72
+ dstring := |*
73
+ '"' => { emit_dstring_close; fret; };
74
+ '#{' => Interpolate;
75
+ dstring_content => { emit_dstring; };
76
+ *|;
77
+
78
+ interpolation_operator = operator - [{}];
79
+
80
+ interpolation := |*
81
+ interpolation_operator => { emit_operator; };
82
+ '{' => OpenBrace;
83
+ '}' => CloseBrace;
84
+ '"' => ParseDstring;
85
+ numeric => { emit_numeric; };
86
+ identifer => { emit_identifer; };
87
+ string => { emit_string; };
88
+ regexp => { emit_regexp; };
89
+ blank;
90
+ *|;
72
91
 
73
92
  expression := |*
74
93
  tag_close => { emit_tag; fret; };
94
+ '"' => ParseDstring;
75
95
  operator => { emit_operator; };
76
96
  numeric => { emit_numeric; };
77
97
  identifer => { emit_identifer; };
78
- sstring => { emit_sstring; };
79
- dstring => { emit_dstring; };
98
+ string => { emit_string; };
80
99
  regexp => { emit_regexp; };
81
100
  comment => { emit_comment; };
82
101
  blank;
@@ -1,7 +1,7 @@
1
1
 
2
2
  # line 1 "lib/hotcell/lexerr.rl"
3
3
 
4
- # line 17 "lib/hotcell/lexerr.rl"
4
+ # line 44 "lib/hotcell/lexerr.rl"
5
5
 
6
6
 
7
7
  Hotcell::Lexer.class_eval do
@@ -22,276 +22,387 @@ Hotcell::Lexer.class_eval do
22
22
 
23
23
  # line 24 "lib/hotcell/lexerr.rb"
24
24
  class << self
25
- attr_accessor :_puffer_lexer_trans_keys
26
- private :_puffer_lexer_trans_keys, :_puffer_lexer_trans_keys=
25
+ attr_accessor :_hotcell_lexer_trans_keys
26
+ private :_hotcell_lexer_trans_keys, :_hotcell_lexer_trans_keys=
27
27
  end
28
- self._puffer_lexer_trans_keys = [
29
- 0, 0, 32, 32, 34, 92,
30
- 0, 0, 125, 125, 38,
31
- 38, 39, 92, 0, 0,
32
- 48, 57, 47, 92, 0, 0,
33
- 124, 124, 125, 125, 123,
28
+ self._hotcell_lexer_trans_keys = [
29
+ 0, 0, 32, 32, 0, 0,
30
+ 38, 38, 39, 92, 0,
31
+ 0, 48, 57, 47, 92,
32
+ 0, 0, 124, 124, 125, 125,
33
+ 38, 38, 39, 92, 0,
34
+ 0, 48, 57, 47, 92,
35
+ 0, 0, 124, 124, 125, 125,
34
36
  123, 123, 123, 123, 123,
35
- 33, 126, 9, 125, 61, 61,
36
- 10, 125, 42, 42, 46,
37
- 57, 48, 57, 46, 57,
38
- 46, 46, 47, 92, 65, 122,
39
- 33, 122, 125, 125, 35,
40
- 35, 35, 35, 125, 125,
41
- 0
37
+ 123, 33, 126, 34, 92,
38
+ 34, 92, 123, 123, 9, 125,
39
+ 61, 61, 34, 34, 42,
40
+ 42, 46, 57, 48, 57,
41
+ 46, 57, 46, 46, 47, 92,
42
+ 65, 122, 33, 122, 9,
43
+ 125, 61, 61, 34, 34,
44
+ 10, 125, 42, 42, 46, 57,
45
+ 48, 57, 46, 57, 46,
46
+ 46, 47, 92, 65, 122,
47
+ 33, 122, 125, 125, 35, 35,
48
+ 35, 35, 125, 125, 0
42
49
  ]
43
50
 
44
51
  class << self
45
- attr_accessor :_puffer_lexer_key_spans
46
- private :_puffer_lexer_key_spans, :_puffer_lexer_key_spans=
52
+ attr_accessor :_hotcell_lexer_key_spans
53
+ private :_hotcell_lexer_key_spans, :_hotcell_lexer_key_spans=
47
54
  end
48
- self._puffer_lexer_key_spans = [
49
- 0, 1, 59, 0, 1, 1, 54, 0,
50
- 10, 46, 0, 1, 1, 1, 1, 1,
51
- 94, 117, 1, 116, 1, 12, 10, 12,
52
- 1, 46, 58, 90, 1, 1, 1, 1
55
+ self._hotcell_lexer_key_spans = [
56
+ 0, 1, 0, 1, 54, 0, 10, 46,
57
+ 0, 1, 1, 1, 54, 0, 10, 46,
58
+ 0, 1, 1, 1, 1, 1, 94, 59,
59
+ 59, 1, 117, 1, 1, 1, 12, 10,
60
+ 12, 1, 46, 58, 90, 117, 1, 1,
61
+ 116, 1, 12, 10, 12, 1, 46, 58,
62
+ 90, 1, 1, 1, 1
53
63
  ]
54
64
 
55
65
  class << self
56
- attr_accessor :_puffer_lexer_index_offsets
57
- private :_puffer_lexer_index_offsets, :_puffer_lexer_index_offsets=
66
+ attr_accessor :_hotcell_lexer_index_offsets
67
+ private :_hotcell_lexer_index_offsets, :_hotcell_lexer_index_offsets=
58
68
  end
59
- self._puffer_lexer_index_offsets = [
60
- 0, 0, 2, 62, 63, 65, 67, 122,
61
- 123, 134, 181, 182, 184, 186, 188, 190,
62
- 192, 287, 405, 407, 524, 526, 539, 550,
63
- 563, 565, 612, 671, 762, 764, 766, 768
69
+ self._hotcell_lexer_index_offsets = [
70
+ 0, 0, 2, 3, 5, 60, 61, 72,
71
+ 119, 120, 122, 124, 126, 181, 182, 193,
72
+ 240, 241, 243, 245, 247, 249, 251, 346,
73
+ 406, 466, 468, 586, 588, 590, 592, 605,
74
+ 616, 629, 631, 678, 737, 828, 946, 948,
75
+ 950, 1067, 1069, 1082, 1093, 1106, 1108, 1155,
76
+ 1214, 1305, 1307, 1309, 1311
64
77
  ]
65
78
 
66
79
  class << self
67
- attr_accessor :_puffer_lexer_indicies
68
- private :_puffer_lexer_indicies, :_puffer_lexer_indicies=
80
+ attr_accessor :_hotcell_lexer_indicies
81
+ private :_hotcell_lexer_indicies, :_hotcell_lexer_indicies=
69
82
  end
70
- self._puffer_lexer_indicies = [
71
- 1, 0, 3, 2, 2, 2, 2, 2,
72
- 2, 2, 2, 2, 2, 2, 2, 2,
73
- 2, 2, 2, 2, 2, 2, 2, 2,
74
- 2, 2, 2, 2, 2, 2, 2, 2,
75
- 2, 2, 2, 2, 2, 2, 2, 2,
76
- 2, 2, 2, 2, 2, 2, 2, 2,
77
- 2, 2, 2, 2, 2, 2, 2, 2,
78
- 2, 2, 2, 2, 4, 2, 2, 5,
79
- 6, 7, 8, 10, 9, 9, 9, 9,
80
- 9, 9, 9, 9, 9, 9, 9, 9,
81
- 9, 9, 9, 9, 9, 9, 9, 9,
82
- 9, 9, 9, 9, 9, 9, 9, 9,
83
- 9, 9, 9, 9, 9, 9, 9, 9,
84
- 9, 9, 9, 9, 9, 9, 9, 9,
85
- 9, 9, 9, 9, 9, 9, 9, 9,
86
- 11, 9, 9, 13, 13, 13, 13, 13,
87
- 13, 13, 13, 13, 13, 12, 16, 15,
88
- 15, 15, 15, 15, 15, 15, 15, 15,
89
- 15, 15, 15, 15, 15, 15, 15, 15,
90
- 15, 15, 15, 15, 15, 15, 15, 15,
91
- 15, 15, 15, 15, 15, 15, 15, 15,
92
- 15, 15, 15, 15, 15, 15, 15, 15,
93
- 15, 15, 15, 17, 15, 15, 7, 8,
94
- 19, 18, 21, 20, 22, 20, 23, 22,
95
- 1, 24, 25, 24, 24, 24, 24, 24,
96
- 24, 24, 24, 24, 24, 24, 24, 24,
97
- 24, 24, 24, 24, 24, 24, 24, 24,
98
- 24, 24, 24, 24, 24, 24, 24, 24,
99
- 24, 24, 24, 24, 24, 24, 24, 24,
100
- 24, 24, 24, 24, 24, 24, 24, 24,
101
- 24, 24, 24, 24, 24, 24, 24, 24,
102
- 24, 24, 24, 24, 24, 1, 24, 24,
103
- 24, 24, 24, 24, 26, 24, 24, 24,
104
- 24, 24, 24, 24, 24, 24, 24, 24,
105
- 24, 26, 24, 24, 24, 24, 24, 24,
106
- 24, 24, 24, 24, 24, 1, 24, 27,
107
- 7, 27, 27, 27, 8, 8, 8, 8,
108
- 8, 8, 8, 8, 8, 8, 8, 8,
109
- 8, 8, 8, 8, 8, 8, 27, 28,
110
- 2, 6, 8, 7, 29, 9, 7, 7,
111
- 30, 7, 7, 31, 32, 33, 34, 34,
112
- 34, 34, 34, 34, 34, 34, 34, 34,
113
- 7, 7, 28, 28, 28, 7, 8, 35,
114
- 35, 35, 35, 35, 35, 35, 35, 35,
115
- 35, 35, 35, 35, 35, 35, 35, 35,
116
- 35, 35, 35, 35, 35, 35, 35, 35,
117
- 35, 7, 8, 7, 8, 35, 8, 35,
118
- 35, 35, 35, 35, 35, 35, 35, 35,
119
- 35, 35, 35, 35, 35, 35, 35, 35,
120
- 35, 35, 35, 35, 35, 35, 35, 35,
121
- 35, 7, 36, 37, 8, 7, 38, 39,
122
- 6, 6, 6, 6, 6, 6, 6, 6,
83
+ self._hotcell_lexer_indicies = [
84
+ 1, 0, 3, 4, 5, 7, 6, 6,
123
85
  6, 6, 6, 6, 6, 6, 6, 6,
124
86
  6, 6, 6, 6, 6, 6, 6, 6,
125
87
  6, 6, 6, 6, 6, 6, 6, 6,
126
88
  6, 6, 6, 6, 6, 6, 6, 6,
127
89
  6, 6, 6, 6, 6, 6, 6, 6,
128
90
  6, 6, 6, 6, 6, 6, 6, 6,
129
- 6, 6, 6, 6, 6, 6, 6, 6,
130
- 6, 6, 6, 6, 6, 6, 6, 6,
131
- 6, 6, 6, 6, 6, 6, 6, 6,
132
- 6, 6, 6, 6, 6, 6, 6, 6,
133
- 6, 6, 6, 6, 6, 6, 6, 6,
134
- 6, 6, 6, 6, 6, 6, 6, 6,
135
- 6, 6, 6, 6, 6, 6, 6, 6,
136
- 6, 6, 40, 6, 7, 38, 41, 12,
137
- 34, 34, 34, 34, 34, 34, 34, 34,
138
- 34, 34, 12, 13, 13, 13, 13, 13,
139
- 13, 13, 13, 13, 13, 42, 43, 38,
91
+ 6, 6, 8, 6, 6, 10, 10, 10,
92
+ 10, 10, 10, 10, 10, 10, 10, 9,
93
+ 13, 12, 12, 12, 12, 12, 12, 12,
94
+ 12, 12, 12, 12, 12, 12, 12, 12,
95
+ 12, 12, 12, 12, 12, 12, 12, 12,
96
+ 12, 12, 12, 12, 12, 12, 12, 12,
97
+ 12, 12, 12, 12, 12, 12, 12, 12,
98
+ 12, 12, 12, 12, 12, 14, 12, 12,
99
+ 4, 5, 15, 16, 17, 5, 19, 18,
100
+ 18, 18, 18, 18, 18, 18, 18, 18,
101
+ 18, 18, 18, 18, 18, 18, 18, 18,
102
+ 18, 18, 18, 18, 18, 18, 18, 18,
103
+ 18, 18, 18, 18, 18, 18, 18, 18,
104
+ 18, 18, 18, 18, 18, 18, 18, 18,
105
+ 18, 18, 18, 18, 18, 18, 18, 18,
106
+ 18, 18, 18, 20, 18, 18, 22, 22,
107
+ 22, 22, 22, 22, 22, 22, 22, 22,
108
+ 21, 25, 24, 24, 24, 24, 24, 24,
109
+ 24, 24, 24, 24, 24, 24, 24, 24,
110
+ 24, 24, 24, 24, 24, 24, 24, 24,
111
+ 24, 24, 24, 24, 24, 24, 24, 24,
112
+ 24, 24, 24, 24, 24, 24, 24, 24,
113
+ 24, 24, 24, 24, 24, 24, 26, 24,
114
+ 24, 17, 5, 28, 27, 30, 29, 31,
115
+ 29, 32, 31, 1, 33, 34, 33, 33,
116
+ 33, 33, 33, 33, 33, 33, 33, 33,
117
+ 33, 33, 33, 33, 33, 33, 33, 33,
118
+ 33, 33, 33, 33, 33, 33, 33, 33,
119
+ 33, 33, 33, 33, 33, 33, 33, 33,
120
+ 33, 33, 33, 33, 33, 33, 33, 33,
121
+ 33, 33, 33, 33, 33, 33, 33, 33,
122
+ 33, 33, 33, 33, 33, 33, 33, 33,
123
+ 1, 33, 33, 33, 33, 33, 33, 35,
124
+ 33, 33, 33, 33, 33, 33, 33, 33,
125
+ 33, 33, 33, 33, 35, 33, 33, 33,
126
+ 33, 33, 33, 33, 33, 33, 33, 33,
127
+ 1, 33, 36, 37, 3, 3, 3, 3,
128
+ 3, 3, 3, 3, 3, 3, 3, 3,
129
+ 3, 3, 3, 3, 3, 3, 3, 3,
130
+ 3, 3, 3, 3, 3, 3, 3, 3,
131
+ 3, 3, 3, 3, 3, 3, 3, 3,
132
+ 3, 3, 3, 3, 3, 3, 3, 3,
133
+ 3, 3, 3, 3, 3, 3, 3, 3,
134
+ 3, 3, 3, 3, 38, 3, 39, 39,
135
+ 3, 3, 3, 3, 3, 3, 3, 3,
136
+ 3, 3, 3, 3, 3, 3, 3, 3,
137
+ 3, 3, 3, 3, 3, 3, 3, 3,
138
+ 3, 3, 3, 3, 3, 3, 3, 3,
139
+ 3, 3, 3, 3, 3, 3, 3, 3,
140
+ 3, 3, 3, 3, 3, 3, 3, 3,
141
+ 3, 3, 3, 3, 3, 3, 3, 3,
142
+ 38, 3, 40, 39, 41, 4, 41, 41,
143
+ 41, 5, 5, 5, 5, 5, 5, 5,
144
+ 5, 5, 5, 5, 5, 5, 5, 5,
145
+ 5, 5, 5, 41, 42, 43, 5, 5,
146
+ 4, 44, 6, 4, 4, 45, 4, 4,
147
+ 46, 47, 48, 49, 49, 49, 49, 49,
148
+ 49, 49, 49, 49, 49, 4, 4, 42,
149
+ 42, 42, 4, 5, 50, 50, 50, 50,
150
+ 50, 50, 50, 50, 50, 50, 50, 50,
151
+ 50, 50, 50, 50, 50, 50, 50, 50,
152
+ 50, 50, 50, 50, 50, 50, 4, 5,
153
+ 4, 5, 50, 5, 50, 50, 50, 50,
154
+ 50, 50, 50, 50, 50, 50, 50, 50,
155
+ 50, 50, 50, 50, 50, 50, 50, 50,
156
+ 50, 50, 50, 50, 50, 50, 51, 52,
157
+ 53, 5, 4, 54, 7, 55, 4, 54,
158
+ 56, 9, 49, 49, 49, 49, 49, 49,
159
+ 49, 49, 49, 49, 9, 10, 10, 10,
160
+ 10, 10, 10, 10, 10, 10, 10, 57,
161
+ 58, 54, 10, 10, 10, 10, 10, 10,
162
+ 10, 10, 10, 10, 54, 4, 54, 13,
163
+ 12, 12, 12, 12, 12, 12, 12, 12,
164
+ 12, 12, 12, 12, 12, 12, 12, 12,
165
+ 12, 12, 12, 12, 12, 12, 12, 12,
166
+ 12, 12, 12, 12, 12, 12, 12, 12,
167
+ 12, 12, 12, 12, 12, 12, 12, 12,
168
+ 12, 12, 12, 12, 14, 12, 13, 13,
169
+ 13, 13, 13, 13, 13, 13, 13, 13,
170
+ 13, 13, 13, 13, 13, 13, 13, 13,
171
+ 13, 13, 13, 13, 13, 13, 13, 13,
172
+ 59, 59, 59, 59, 59, 59, 13, 13,
173
+ 13, 13, 13, 13, 13, 13, 13, 13,
174
+ 13, 13, 13, 13, 13, 13, 13, 13,
140
175
  13, 13, 13, 13, 13, 13, 13, 13,
141
- 13, 13, 38, 7, 38, 16, 15, 15,
142
- 15, 15, 15, 15, 15, 15, 15, 15,
143
- 15, 15, 15, 15, 15, 15, 15, 15,
144
- 15, 15, 15, 15, 15, 15, 15, 15,
145
- 15, 15, 15, 15, 15, 15, 15, 15,
146
- 15, 15, 15, 15, 15, 15, 15, 15,
147
- 15, 15, 17, 15, 16, 16, 16, 16,
176
+ 59, 61, 60, 60, 60, 60, 60, 60,
177
+ 60, 60, 60, 60, 60, 60, 60, 60,
178
+ 50, 50, 50, 50, 50, 50, 50, 50,
179
+ 50, 50, 60, 60, 60, 60, 60, 61,
180
+ 60, 50, 50, 50, 50, 50, 50, 50,
181
+ 50, 50, 50, 50, 50, 50, 50, 50,
182
+ 50, 50, 50, 50, 50, 50, 50, 50,
183
+ 50, 50, 50, 60, 60, 60, 60, 50,
184
+ 60, 50, 50, 50, 50, 50, 50, 50,
185
+ 50, 50, 50, 50, 50, 50, 50, 50,
186
+ 50, 50, 50, 50, 50, 50, 50, 50,
187
+ 50, 50, 50, 60, 62, 17, 62, 62,
188
+ 62, 5, 5, 5, 5, 5, 5, 5,
189
+ 5, 5, 5, 5, 5, 5, 5, 5,
190
+ 5, 5, 5, 62, 63, 64, 16, 5,
191
+ 17, 65, 18, 17, 17, 66, 17, 17,
192
+ 67, 68, 69, 70, 70, 70, 70, 70,
193
+ 70, 70, 70, 70, 70, 17, 17, 63,
194
+ 63, 63, 17, 5, 71, 71, 71, 71,
195
+ 71, 71, 71, 71, 71, 71, 71, 71,
196
+ 71, 71, 71, 71, 71, 71, 71, 71,
197
+ 71, 71, 71, 71, 71, 71, 17, 5,
198
+ 17, 5, 71, 5, 71, 71, 71, 71,
199
+ 71, 71, 71, 71, 71, 71, 71, 71,
200
+ 71, 71, 71, 71, 71, 71, 71, 71,
201
+ 71, 71, 71, 71, 71, 71, 17, 72,
202
+ 73, 5, 17, 74, 19, 75, 76, 16,
203
+ 16, 16, 16, 16, 16, 16, 16, 16,
204
+ 16, 16, 16, 16, 16, 16, 16, 16,
205
+ 16, 16, 16, 16, 16, 16, 16, 16,
206
+ 16, 16, 16, 16, 16, 16, 16, 16,
207
+ 16, 16, 16, 16, 16, 16, 16, 16,
208
+ 16, 16, 16, 16, 16, 16, 16, 16,
209
+ 16, 16, 16, 16, 16, 16, 16, 16,
210
+ 16, 16, 16, 16, 16, 16, 16, 16,
148
211
  16, 16, 16, 16, 16, 16, 16, 16,
149
212
  16, 16, 16, 16, 16, 16, 16, 16,
150
- 16, 16, 16, 16, 16, 16, 44, 44,
151
- 44, 44, 44, 44, 16, 16, 16, 16,
152
213
  16, 16, 16, 16, 16, 16, 16, 16,
153
214
  16, 16, 16, 16, 16, 16, 16, 16,
154
- 16, 16, 16, 16, 16, 16, 44, 46,
155
- 45, 45, 45, 45, 45, 45, 45, 45,
156
- 45, 45, 45, 45, 45, 45, 35, 35,
157
- 35, 35, 35, 35, 35, 35, 35, 35,
158
- 45, 45, 45, 45, 45, 46, 45, 35,
159
- 35, 35, 35, 35, 35, 35, 35, 35,
160
- 35, 35, 35, 35, 35, 35, 35, 35,
161
- 35, 35, 35, 35, 35, 35, 35, 35,
162
- 35, 45, 45, 45, 45, 35, 45, 35,
163
- 35, 35, 35, 35, 35, 35, 35, 35,
164
- 35, 35, 35, 35, 35, 35, 35, 35,
165
- 35, 35, 35, 35, 35, 35, 35, 35,
166
- 35, 45, 47, 38, 49, 48, 50, 48,
167
- 51, 50, 0
215
+ 16, 16, 16, 16, 16, 16, 16, 16,
216
+ 16, 16, 16, 16, 16, 16, 16, 16,
217
+ 16, 77, 16, 17, 74, 78, 21, 70,
218
+ 70, 70, 70, 70, 70, 70, 70, 70,
219
+ 70, 21, 22, 22, 22, 22, 22, 22,
220
+ 22, 22, 22, 22, 79, 80, 74, 22,
221
+ 22, 22, 22, 22, 22, 22, 22, 22,
222
+ 22, 74, 17, 74, 25, 24, 24, 24,
223
+ 24, 24, 24, 24, 24, 24, 24, 24,
224
+ 24, 24, 24, 24, 24, 24, 24, 24,
225
+ 24, 24, 24, 24, 24, 24, 24, 24,
226
+ 24, 24, 24, 24, 24, 24, 24, 24,
227
+ 24, 24, 24, 24, 24, 24, 24, 24,
228
+ 24, 26, 24, 25, 25, 25, 25, 25,
229
+ 25, 25, 25, 25, 25, 25, 25, 25,
230
+ 25, 25, 25, 25, 25, 25, 25, 25,
231
+ 25, 25, 25, 25, 25, 81, 81, 81,
232
+ 81, 81, 81, 25, 25, 25, 25, 25,
233
+ 25, 25, 25, 25, 25, 25, 25, 25,
234
+ 25, 25, 25, 25, 25, 25, 25, 25,
235
+ 25, 25, 25, 25, 25, 81, 83, 82,
236
+ 82, 82, 82, 82, 82, 82, 82, 82,
237
+ 82, 82, 82, 82, 82, 71, 71, 71,
238
+ 71, 71, 71, 71, 71, 71, 71, 82,
239
+ 82, 82, 82, 82, 83, 82, 71, 71,
240
+ 71, 71, 71, 71, 71, 71, 71, 71,
241
+ 71, 71, 71, 71, 71, 71, 71, 71,
242
+ 71, 71, 71, 71, 71, 71, 71, 71,
243
+ 82, 82, 82, 82, 71, 82, 71, 71,
244
+ 71, 71, 71, 71, 71, 71, 71, 71,
245
+ 71, 71, 71, 71, 71, 71, 71, 71,
246
+ 71, 71, 71, 71, 71, 71, 71, 71,
247
+ 82, 84, 74, 86, 85, 87, 85, 88,
248
+ 87, 0
168
249
  ]
169
250
 
170
251
  class << self
171
- attr_accessor :_puffer_lexer_trans_targs
172
- private :_puffer_lexer_trans_targs, :_puffer_lexer_trans_targs=
252
+ attr_accessor :_hotcell_lexer_trans_targs
253
+ private :_hotcell_lexer_trans_targs, :_hotcell_lexer_trans_targs=
173
254
  end
174
- self._puffer_lexer_trans_targs = [
175
- 13, 13, 2, 17, 3, 17, 19, 17,
176
- 0, 6, 17, 7, 17, 22, 17, 9,
177
- 26, 10, 29, 29, 14, 15, 13, 16,
178
- 13, 13, 1, 17, 18, 5, 20, 21,
179
- 23, 25, 21, 27, 11, 28, 17, 17,
180
- 4, 8, 17, 24, 17, 17, 17, 17,
181
- 30, 31, 29, 12
255
+ self._hotcell_lexer_trans_targs = [
256
+ 19, 19, 23, 24, 26, 0, 4, 26,
257
+ 5, 26, 31, 26, 7, 35, 8, 37,
258
+ 40, 37, 12, 37, 13, 37, 43, 37,
259
+ 15, 47, 16, 50, 50, 20, 21, 19,
260
+ 22, 19, 19, 1, 23, 25, 2, 23,
261
+ 23, 26, 27, 28, 3, 29, 30, 32,
262
+ 34, 30, 36, 26, 9, 26, 26, 26,
263
+ 6, 26, 33, 26, 26, 26, 37, 38,
264
+ 39, 11, 41, 42, 44, 46, 42, 48,
265
+ 17, 49, 37, 37, 37, 10, 14, 37,
266
+ 45, 37, 37, 37, 37, 51, 52, 50,
267
+ 18
182
268
  ]
183
269
 
184
270
  class << self
185
- attr_accessor :_puffer_lexer_trans_actions
186
- private :_puffer_lexer_trans_actions, :_puffer_lexer_trans_actions=
271
+ attr_accessor :_hotcell_lexer_trans_actions
272
+ private :_hotcell_lexer_trans_actions, :_hotcell_lexer_trans_actions=
187
273
  end
188
- self._puffer_lexer_trans_actions = [
189
- 1, 2, 0, 4, 0, 5, 6, 7,
190
- 0, 0, 9, 0, 10, 0, 11, 0,
191
- 0, 0, 12, 13, 0, 0, 16, 6,
192
- 17, 18, 0, 19, 0, 0, 0, 20,
193
- 0, 21, 22, 0, 0, 0, 23, 24,
194
- 0, 0, 25, 0, 26, 27, 28, 29,
195
- 0, 6, 30, 0
274
+ self._hotcell_lexer_trans_actions = [
275
+ 1, 2, 3, 4, 5, 0, 0, 7,
276
+ 0, 8, 0, 9, 0, 0, 0, 10,
277
+ 11, 12, 0, 13, 0, 14, 0, 15,
278
+ 0, 0, 0, 16, 17, 0, 0, 20,
279
+ 11, 21, 22, 0, 24, 0, 0, 25,
280
+ 26, 27, 0, 0, 0, 0, 28, 0,
281
+ 29, 30, 0, 31, 0, 32, 33, 34,
282
+ 0, 35, 0, 36, 37, 38, 39, 0,
283
+ 0, 0, 0, 40, 0, 29, 41, 0,
284
+ 0, 0, 42, 43, 44, 0, 0, 45,
285
+ 0, 46, 47, 48, 49, 0, 11, 50,
286
+ 0
196
287
  ]
197
288
 
198
289
  class << self
199
- attr_accessor :_puffer_lexer_to_state_actions
200
- private :_puffer_lexer_to_state_actions, :_puffer_lexer_to_state_actions=
290
+ attr_accessor :_hotcell_lexer_to_state_actions
291
+ private :_hotcell_lexer_to_state_actions, :_hotcell_lexer_to_state_actions=
201
292
  end
202
- self._puffer_lexer_to_state_actions = [
293
+ self._hotcell_lexer_to_state_actions = [
203
294
  0, 0, 0, 0, 0, 0, 0, 0,
204
- 0, 0, 0, 0, 0, 14, 0, 0,
205
- 0, 14, 0, 0, 0, 0, 0, 0,
206
- 0, 0, 0, 0, 0, 14, 0, 0
295
+ 0, 0, 0, 0, 0, 0, 0, 0,
296
+ 0, 0, 0, 18, 0, 0, 0, 23,
297
+ 0, 0, 18, 0, 0, 0, 0, 0,
298
+ 0, 0, 0, 0, 0, 18, 0, 0,
299
+ 0, 0, 0, 0, 0, 0, 0, 0,
300
+ 0, 0, 18, 0, 0
207
301
  ]
208
302
 
209
303
  class << self
210
- attr_accessor :_puffer_lexer_from_state_actions
211
- private :_puffer_lexer_from_state_actions, :_puffer_lexer_from_state_actions=
304
+ attr_accessor :_hotcell_lexer_from_state_actions
305
+ private :_hotcell_lexer_from_state_actions, :_hotcell_lexer_from_state_actions=
212
306
  end
213
- self._puffer_lexer_from_state_actions = [
307
+ self._hotcell_lexer_from_state_actions = [
308
+ 0, 0, 0, 0, 0, 0, 0, 0,
309
+ 0, 0, 0, 0, 0, 0, 0, 0,
310
+ 0, 0, 0, 19, 0, 0, 0, 19,
311
+ 0, 0, 19, 0, 0, 0, 0, 0,
312
+ 0, 0, 0, 0, 0, 19, 0, 0,
214
313
  0, 0, 0, 0, 0, 0, 0, 0,
215
- 0, 0, 0, 0, 0, 15, 0, 0,
216
- 0, 15, 0, 0, 0, 0, 0, 0,
217
- 0, 0, 0, 0, 0, 15, 0, 0
314
+ 0, 0, 19, 0, 0
218
315
  ]
219
316
 
220
317
  class << self
221
- attr_accessor :_puffer_lexer_eof_actions
222
- private :_puffer_lexer_eof_actions, :_puffer_lexer_eof_actions=
318
+ attr_accessor :_hotcell_lexer_eof_actions
319
+ private :_hotcell_lexer_eof_actions, :_hotcell_lexer_eof_actions=
223
320
  end
224
- self._puffer_lexer_eof_actions = [
225
- 0, 0, 3, 0, 0, 0, 8, 0,
321
+ self._hotcell_lexer_eof_actions = [
322
+ 0, 0, 0, 0, 6, 0, 0, 0,
323
+ 0, 0, 0, 0, 6, 0, 0, 0,
226
324
  0, 0, 0, 0, 0, 0, 0, 0,
227
325
  0, 0, 0, 0, 0, 0, 0, 0,
228
- 0, 0, 0, 0, 0, 0, 0, 0
326
+ 0, 0, 0, 0, 0, 0, 0, 0,
327
+ 0, 0, 0, 0, 0, 0, 0, 0,
328
+ 0, 0, 0, 0, 0
229
329
  ]
230
330
 
231
331
  class << self
232
- attr_accessor :_puffer_lexer_eof_trans
233
- private :_puffer_lexer_eof_trans, :_puffer_lexer_eof_trans=
332
+ attr_accessor :_hotcell_lexer_eof_trans
333
+ private :_hotcell_lexer_eof_trans, :_hotcell_lexer_eof_trans=
234
334
  end
235
- self._puffer_lexer_eof_trans = [
236
- 0, 1, 0, 0, 6, 0, 0, 0,
237
- 13, 15, 15, 0, 19, 0, 23, 23,
238
- 25, 0, 39, 40, 39, 13, 43, 39,
239
- 39, 39, 45, 46, 39, 0, 51, 51
335
+ self._hotcell_lexer_eof_trans = [
336
+ 0, 1, 3, 0, 0, 0, 10, 12,
337
+ 12, 0, 16, 0, 0, 0, 22, 24,
338
+ 24, 0, 28, 0, 32, 32, 34, 0,
339
+ 40, 40, 0, 55, 56, 55, 10, 58,
340
+ 55, 55, 55, 60, 61, 0, 75, 76,
341
+ 77, 75, 22, 80, 75, 75, 75, 82,
342
+ 83, 75, 0, 88, 88
240
343
  ]
241
344
 
242
345
  class << self
243
- attr_accessor :puffer_lexer_start
346
+ attr_accessor :hotcell_lexer_start
244
347
  end
245
- self.puffer_lexer_start = 13;
348
+ self.hotcell_lexer_start = 19;
246
349
  class << self
247
- attr_accessor :puffer_lexer_first_final
350
+ attr_accessor :hotcell_lexer_first_final
248
351
  end
249
- self.puffer_lexer_first_final = 13;
352
+ self.hotcell_lexer_first_final = 19;
250
353
  class << self
251
- attr_accessor :puffer_lexer_error
354
+ attr_accessor :hotcell_lexer_error
252
355
  end
253
- self.puffer_lexer_error = 0;
356
+ self.hotcell_lexer_error = 0;
254
357
 
255
358
  class << self
256
- attr_accessor :puffer_lexer_en_expression
359
+ attr_accessor :hotcell_lexer_en_dstring
360
+ end
361
+ self.hotcell_lexer_en_dstring = 23;
362
+ class << self
363
+ attr_accessor :hotcell_lexer_en_interpolation
257
364
  end
258
- self.puffer_lexer_en_expression = 17;
365
+ self.hotcell_lexer_en_interpolation = 26;
259
366
  class << self
260
- attr_accessor :puffer_lexer_en_template_comment
367
+ attr_accessor :hotcell_lexer_en_expression
261
368
  end
262
- self.puffer_lexer_en_template_comment = 29;
369
+ self.hotcell_lexer_en_expression = 37;
263
370
  class << self
264
- attr_accessor :puffer_lexer_en_main
371
+ attr_accessor :hotcell_lexer_en_template_comment
265
372
  end
266
- self.puffer_lexer_en_main = 13;
373
+ self.hotcell_lexer_en_template_comment = 50;
374
+ class << self
375
+ attr_accessor :hotcell_lexer_en_main
376
+ end
377
+ self.hotcell_lexer_en_main = 19;
267
378
 
268
379
 
269
- # line 35 "lib/hotcell/lexerr.rl"
380
+ # line 62 "lib/hotcell/lexerr.rl"
270
381
  #%
271
382
 
272
383
  @data = @source.data
273
384
  @token_array = []
274
385
 
275
386
 
276
- # line 277 "lib/hotcell/lexerr.rb"
387
+ # line 388 "lib/hotcell/lexerr.rb"
277
388
  begin
278
389
  @p ||= 0
279
390
  pe ||= @data.length
280
- cs = puffer_lexer_start
391
+ cs = hotcell_lexer_start
281
392
  top = 0
282
393
  @ts = nil
283
394
  @te = nil
284
395
  act = 0
285
396
  end
286
397
 
287
- # line 41 "lib/hotcell/lexerr.rl"
398
+ # line 68 "lib/hotcell/lexerr.rl"
288
399
  #%
289
400
 
290
401
  eof = pe
291
402
  stack = []
292
403
 
293
404
 
294
- # line 295 "lib/hotcell/lexerr.rb"
405
+ # line 406 "lib/hotcell/lexerr.rb"
295
406
  begin
296
407
  testEof = false
297
408
  _slen, _trans, _keys, _inds, _acts, _nacts = nil
@@ -313,40 +424,40 @@ begin
313
424
  end
314
425
  end
315
426
  if _goto_level <= _resume
316
- case _puffer_lexer_from_state_actions[cs]
317
- when 15 then
427
+ case _hotcell_lexer_from_state_actions[cs]
428
+ when 19 then
318
429
  # line 1 "NONE"
319
430
  begin
320
431
  @ts = @p
321
432
  end
322
- # line 323 "lib/hotcell/lexerr.rb"
433
+ # line 434 "lib/hotcell/lexerr.rb"
323
434
  end
324
435
  _keys = cs << 1
325
- _inds = _puffer_lexer_index_offsets[cs]
326
- _slen = _puffer_lexer_key_spans[cs]
436
+ _inds = _hotcell_lexer_index_offsets[cs]
437
+ _slen = _hotcell_lexer_key_spans[cs]
327
438
  _trans = if ( _slen > 0 &&
328
- _puffer_lexer_trans_keys[_keys] <= @data[ @p].ord &&
329
- @data[ @p].ord <= _puffer_lexer_trans_keys[_keys + 1]
439
+ _hotcell_lexer_trans_keys[_keys] <= @data[ @p].ord &&
440
+ @data[ @p].ord <= _hotcell_lexer_trans_keys[_keys + 1]
330
441
  ) then
331
- _puffer_lexer_indicies[ _inds + @data[ @p].ord - _puffer_lexer_trans_keys[_keys] ]
442
+ _hotcell_lexer_indicies[ _inds + @data[ @p].ord - _hotcell_lexer_trans_keys[_keys] ]
332
443
  else
333
- _puffer_lexer_indicies[ _inds + _slen ]
444
+ _hotcell_lexer_indicies[ _inds + _slen ]
334
445
  end
335
446
  end
336
447
  if _goto_level <= _eof_trans
337
- cs = _puffer_lexer_trans_targs[_trans]
338
- if _puffer_lexer_trans_actions[_trans] != 0
339
- case _puffer_lexer_trans_actions[_trans]
340
- when 6 then
448
+ cs = _hotcell_lexer_trans_targs[_trans]
449
+ if _hotcell_lexer_trans_actions[_trans] != 0
450
+ case _hotcell_lexer_trans_actions[_trans]
451
+ when 11 then
341
452
  # line 1 "NONE"
342
453
  begin
343
454
  @te = @p+1
344
455
  end
345
- when 29 then
346
- # line 74 "lib/hotcell/lexer.rl"
456
+ when 24 then
457
+ # line 73 "lib/hotcell/lexer.rl"
347
458
  begin
348
459
  @te = @p+1
349
- begin emit_tag; begin
460
+ begin emit_dstring_close; begin
350
461
  top -= 1
351
462
  cs = stack[top]
352
463
  _goto_level = _again
@@ -354,91 +465,264 @@ begin
354
465
  end
355
466
  end
356
467
  end
357
- when 7 then
468
+ when 26 then
469
+ # line 16 "lib/hotcell/lexerr.rl"
470
+ begin
471
+ @te = @p+1
472
+ begin
473
+ @braces_count = 0;
474
+ emit_interpolation
475
+ begin
476
+ stack[top] = cs
477
+ top+= 1
478
+ cs = 26
479
+ _goto_level = _again
480
+ next
481
+ end
482
+
483
+ end
484
+ end
485
+ when 25 then
358
486
  # line 75 "lib/hotcell/lexer.rl"
359
487
  begin
488
+ @te = @p
489
+ @p = @p - 1; begin emit_dstring; end
490
+ end
491
+ when 3 then
492
+ # line 1 "NONE"
493
+ begin
494
+ case act
495
+ when 0 then
496
+ begin begin
497
+ cs = 0
498
+ _goto_level = _again
499
+ next
500
+ end
501
+ end
502
+ when 3 then
503
+ begin begin @p = (( @te))-1; end
504
+ emit_dstring; end
505
+ end
506
+ end
507
+ when 5 then
508
+ # line 81 "lib/hotcell/lexer.rl"
509
+ begin
360
510
  @te = @p+1
361
511
  begin emit_operator; end
362
512
  end
363
- when 28 then
364
- # line 77 "lib/hotcell/lexer.rl"
513
+ when 31 then
514
+ # line 22 "lib/hotcell/lexerr.rl"
515
+ begin
516
+ @te = @p+1
517
+ begin
518
+ emit_operator
519
+ @braces_count += 1
520
+ end
521
+ end
522
+ when 32 then
523
+ # line 27 "lib/hotcell/lexerr.rl"
524
+ begin
525
+ @te = @p+1
526
+ begin
527
+ if @braces_count < 1
528
+ emit_interpolation
529
+ begin
530
+ top -= 1
531
+ cs = stack[top]
532
+ _goto_level = _again
533
+ next
534
+ end
535
+
536
+ else
537
+ emit_operator
538
+ @braces_count -= 1
539
+ end
540
+ end
541
+ end
542
+ when 38 then
543
+ # line 86 "lib/hotcell/lexer.rl"
365
544
  begin
366
545
  @te = @p+1
367
546
  begin emit_identifer; end
368
547
  end
369
- when 9 then
370
- # line 78 "lib/hotcell/lexer.rl"
548
+ when 7 then
549
+ # line 87 "lib/hotcell/lexer.rl"
371
550
  begin
372
551
  @te = @p+1
373
- begin emit_sstring; end
552
+ begin emit_string; end
553
+ end
554
+ when 27 then
555
+ # line 89 "lib/hotcell/lexer.rl"
556
+ begin
557
+ @te = @p+1
558
+ end
559
+ when 33 then
560
+ # line 81 "lib/hotcell/lexer.rl"
561
+ begin
562
+ @te = @p
563
+ @p = @p - 1; begin emit_operator; end
564
+ end
565
+ when 34 then
566
+ # line 37 "lib/hotcell/lexerr.rl"
567
+ begin
568
+ @te = @p
569
+ @p = @p - 1; begin
570
+ @dstring_start = @ts
571
+ emit_dstring_open
572
+ begin
573
+ stack[top] = cs
574
+ top+= 1
575
+ cs = 23
576
+ _goto_level = _again
577
+ next
578
+ end
579
+
580
+ end
581
+ end
582
+ when 35 then
583
+ # line 85 "lib/hotcell/lexer.rl"
584
+ begin
585
+ @te = @p
586
+ @p = @p - 1; begin emit_numeric; end
587
+ end
588
+ when 37 then
589
+ # line 86 "lib/hotcell/lexer.rl"
590
+ begin
591
+ @te = @p
592
+ @p = @p - 1; begin emit_identifer; end
374
593
  end
594
+ when 36 then
595
+ # line 88 "lib/hotcell/lexer.rl"
596
+ begin
597
+ @te = @p
598
+ @p = @p - 1; begin emit_regexp; end
599
+ end
600
+ when 9 then
601
+ # line 81 "lib/hotcell/lexer.rl"
602
+ begin
603
+ begin @p = (( @te))-1; end
604
+ begin emit_operator; end
605
+ end
606
+ when 8 then
607
+ # line 1 "NONE"
608
+ begin
609
+ case act
375
610
  when 4 then
376
- # line 79 "lib/hotcell/lexer.rl"
611
+ begin begin @p = (( @te))-1; end
612
+ emit_operator; end
613
+ when 8 then
614
+ begin begin @p = (( @te))-1; end
615
+ emit_numeric; end
616
+ end
617
+ end
618
+ when 49 then
619
+ # line 93 "lib/hotcell/lexer.rl"
377
620
  begin
378
621
  @te = @p+1
379
- begin emit_dstring; end
622
+ begin emit_tag; begin
623
+ top -= 1
624
+ cs = stack[top]
625
+ _goto_level = _again
626
+ next
627
+ end
628
+ end
380
629
  end
381
- when 19 then
382
- # line 82 "lib/hotcell/lexer.rl"
630
+ when 12 then
631
+ # line 95 "lib/hotcell/lexer.rl"
383
632
  begin
384
633
  @te = @p+1
634
+ begin emit_operator; end
385
635
  end
386
- when 23 then
387
- # line 75 "lib/hotcell/lexer.rl"
636
+ when 48 then
637
+ # line 97 "lib/hotcell/lexer.rl"
638
+ begin
639
+ @te = @p+1
640
+ begin emit_identifer; end
641
+ end
642
+ when 13 then
643
+ # line 98 "lib/hotcell/lexer.rl"
644
+ begin
645
+ @te = @p+1
646
+ begin emit_string; end
647
+ end
648
+ when 39 then
649
+ # line 101 "lib/hotcell/lexer.rl"
650
+ begin
651
+ @te = @p+1
652
+ end
653
+ when 43 then
654
+ # line 37 "lib/hotcell/lexerr.rl"
655
+ begin
656
+ @te = @p
657
+ @p = @p - 1; begin
658
+ @dstring_start = @ts
659
+ emit_dstring_open
660
+ begin
661
+ stack[top] = cs
662
+ top+= 1
663
+ cs = 23
664
+ _goto_level = _again
665
+ next
666
+ end
667
+
668
+ end
669
+ end
670
+ when 42 then
671
+ # line 95 "lib/hotcell/lexer.rl"
388
672
  begin
389
673
  @te = @p
390
674
  @p = @p - 1; begin emit_operator; end
391
675
  end
392
- when 25 then
393
- # line 76 "lib/hotcell/lexer.rl"
676
+ when 45 then
677
+ # line 96 "lib/hotcell/lexer.rl"
394
678
  begin
395
679
  @te = @p
396
680
  @p = @p - 1; begin emit_numeric; end
397
681
  end
398
- when 27 then
399
- # line 77 "lib/hotcell/lexer.rl"
682
+ when 47 then
683
+ # line 97 "lib/hotcell/lexer.rl"
400
684
  begin
401
685
  @te = @p
402
686
  @p = @p - 1; begin emit_identifer; end
403
687
  end
404
- when 26 then
405
- # line 80 "lib/hotcell/lexer.rl"
688
+ when 46 then
689
+ # line 99 "lib/hotcell/lexer.rl"
406
690
  begin
407
691
  @te = @p
408
692
  @p = @p - 1; begin emit_regexp; end
409
693
  end
410
- when 24 then
411
- # line 81 "lib/hotcell/lexer.rl"
694
+ when 44 then
695
+ # line 100 "lib/hotcell/lexer.rl"
412
696
  begin
413
697
  @te = @p
414
698
  @p = @p - 1; begin emit_comment; end
415
699
  end
416
- when 11 then
417
- # line 75 "lib/hotcell/lexer.rl"
700
+ when 15 then
701
+ # line 95 "lib/hotcell/lexer.rl"
418
702
  begin
419
703
  begin @p = (( @te))-1; end
420
704
  begin emit_operator; end
421
705
  end
422
- when 5 then
423
- # line 81 "lib/hotcell/lexer.rl"
706
+ when 10 then
707
+ # line 100 "lib/hotcell/lexer.rl"
424
708
  begin
425
709
  begin @p = (( @te))-1; end
426
710
  begin emit_comment; end
427
711
  end
428
- when 10 then
712
+ when 14 then
429
713
  # line 1 "NONE"
430
714
  begin
431
715
  case act
432
- when 2 then
716
+ when 15 then
433
717
  begin begin @p = (( @te))-1; end
434
718
  emit_operator; end
435
- when 3 then
719
+ when 16 then
436
720
  begin begin @p = (( @te))-1; end
437
721
  emit_numeric; end
438
722
  end
439
723
  end
440
- when 13 then
441
- # line 86 "lib/hotcell/lexer.rl"
724
+ when 17 then
725
+ # line 105 "lib/hotcell/lexer.rl"
442
726
  begin
443
727
  @te = @p+1
444
728
  begin emit_comment; begin
@@ -449,77 +733,77 @@ end
449
733
  end
450
734
  end
451
735
  end
452
- when 30 then
453
- # line 87 "lib/hotcell/lexer.rl"
736
+ when 50 then
737
+ # line 106 "lib/hotcell/lexer.rl"
454
738
  begin
455
739
  @te = @p
456
740
  @p = @p - 1; begin emit_comment; end
457
741
  end
458
- when 12 then
459
- # line 87 "lib/hotcell/lexer.rl"
742
+ when 16 then
743
+ # line 106 "lib/hotcell/lexer.rl"
460
744
  begin
461
745
  begin @p = (( @te))-1; end
462
746
  begin emit_comment; end
463
747
  end
464
748
  when 2 then
465
- # line 91 "lib/hotcell/lexer.rl"
749
+ # line 110 "lib/hotcell/lexer.rl"
466
750
  begin
467
751
  @te = @p+1
468
752
  begin emit_tag; begin
469
753
  stack[top] = cs
470
754
  top+= 1
471
- cs = 17
755
+ cs = 37
472
756
  _goto_level = _again
473
757
  next
474
758
  end
475
759
  end
476
760
  end
477
- when 18 then
478
- # line 92 "lib/hotcell/lexer.rl"
761
+ when 22 then
762
+ # line 111 "lib/hotcell/lexer.rl"
479
763
  begin
480
764
  @te = @p+1
481
765
  begin emit_comment; begin
482
766
  stack[top] = cs
483
767
  top+= 1
484
- cs = 29
768
+ cs = 50
485
769
  _goto_level = _again
486
770
  next
487
771
  end
488
772
  end
489
773
  end
490
- when 17 then
491
- # line 91 "lib/hotcell/lexer.rl"
774
+ when 21 then
775
+ # line 110 "lib/hotcell/lexer.rl"
492
776
  begin
493
777
  @te = @p
494
778
  @p = @p - 1; begin emit_tag; begin
495
779
  stack[top] = cs
496
780
  top+= 1
497
- cs = 17
781
+ cs = 37
498
782
  _goto_level = _again
499
783
  next
500
784
  end
501
785
  end
502
786
  end
503
- when 16 then
504
- # line 93 "lib/hotcell/lexer.rl"
787
+ when 20 then
788
+ # line 112 "lib/hotcell/lexer.rl"
505
789
  begin
506
790
  @te = @p
507
791
  @p = @p - 1; begin emit_template; end
508
792
  end
509
793
  when 1 then
510
- # line 91 "lib/hotcell/lexer.rl"
794
+ # line 110 "lib/hotcell/lexer.rl"
511
795
  begin
512
796
  begin @p = (( @te))-1; end
513
797
  begin emit_tag; begin
514
798
  stack[top] = cs
515
799
  top+= 1
516
- cs = 17
800
+ cs = 37
517
801
  _goto_level = _again
518
802
  next
519
803
  end
520
804
  end
521
805
  end
522
- when 21 then
806
+ when 29 then
523
807
  # line 1 "NONE"
524
808
  begin
525
809
  @te = @p+1
@@ -530,40 +814,72 @@ end
530
814
  if (!regexp_possible)
531
815
  emit_operator;
532
816
  begin
533
- cs = 17
817
+ cs = 37
534
818
  _goto_level = _again
535
819
  next
536
820
  end
537
821
 
538
822
  end
539
823
  end
540
- when 20 then
824
+ when 4 then
541
825
  # line 1 "NONE"
542
826
  begin
543
827
  @te = @p+1
544
828
  end
545
829
  # line 75 "lib/hotcell/lexer.rl"
546
830
  begin
547
- act = 2; end
548
- when 22 then
831
+ act = 3; end
832
+ when 28 then
549
833
  # line 1 "NONE"
550
834
  begin
551
835
  @te = @p+1
552
836
  end
553
- # line 76 "lib/hotcell/lexer.rl"
837
+ # line 81 "lib/hotcell/lexer.rl"
554
838
  begin
555
- act = 3; end
556
- # line 557 "lib/hotcell/lexerr.rb"
839
+ act = 4; end
840
+ when 30 then
841
+ # line 1 "NONE"
842
+ begin
843
+ @te = @p+1
844
+ end
845
+ # line 85 "lib/hotcell/lexer.rl"
846
+ begin
847
+ act = 8; end
848
+ when 40 then
849
+ # line 1 "NONE"
850
+ begin
851
+ @te = @p+1
852
+ end
853
+ # line 95 "lib/hotcell/lexer.rl"
854
+ begin
855
+ act = 15; end
856
+ when 41 then
857
+ # line 1 "NONE"
858
+ begin
859
+ @te = @p+1
860
+ end
861
+ # line 96 "lib/hotcell/lexer.rl"
862
+ begin
863
+ act = 16; end
864
+ # line 865 "lib/hotcell/lexerr.rb"
557
865
  end
558
866
  end
559
867
  end
560
868
  if _goto_level <= _again
561
- case _puffer_lexer_to_state_actions[cs]
562
- when 14 then
869
+ case _hotcell_lexer_to_state_actions[cs]
870
+ when 18 then
871
+ # line 1 "NONE"
872
+ begin
873
+ @ts = nil; end
874
+ when 23 then
563
875
  # line 1 "NONE"
564
876
  begin
565
877
  @ts = nil; end
566
- # line 567 "lib/hotcell/lexerr.rb"
878
+ # line 1 "NONE"
879
+ begin
880
+ act = 0
881
+ end
882
+ # line 883 "lib/hotcell/lexerr.rb"
567
883
  end
568
884
 
569
885
  if cs == 0
@@ -578,21 +894,17 @@ act = 3; end
578
894
  end
579
895
  if _goto_level <= _test_eof
580
896
  if @p == eof
581
- if _puffer_lexer_eof_trans[cs] > 0
582
- _trans = _puffer_lexer_eof_trans[cs] - 1;
897
+ if _hotcell_lexer_eof_trans[cs] > 0
898
+ _trans = _hotcell_lexer_eof_trans[cs] - 1;
583
899
  _goto_level = _eof_trans
584
900
  next;
585
901
  end
586
- case _puffer_lexer_eof_actions[cs]
587
- when 8 then
902
+ case _hotcell_lexer_eof_actions[cs]
903
+ when 6 then
588
904
  # line 46 "lib/hotcell/lexer.rl"
589
905
  begin
590
906
  raise_unterminated_string; end
591
- when 3 then
592
- # line 50 "lib/hotcell/lexer.rl"
593
- begin
594
- raise_unterminated_string; end
595
- # line 596 "lib/hotcell/lexerr.rb"
907
+ # line 908 "lib/hotcell/lexerr.rb"
596
908
  end
597
909
  end
598
910
 
@@ -603,11 +915,16 @@ act = 3; end
603
915
  end
604
916
  end
605
917
 
606
- # line 47 "lib/hotcell/lexerr.rl"
918
+ # line 74 "lib/hotcell/lexerr.rl"
607
919
  #%
608
920
 
609
921
  raise_unexpected_symbol unless @ts.nil?
610
922
 
923
+ if cs == hotcell_lexer_en_dstring
924
+ @ts = @dstring_start
925
+ raise_unterminated_string
926
+ end
927
+
611
928
  @token_array
612
929
  end
613
930
  end