@@ -65,10 +65,10 @@ defmodule EEx.Tokenizer do
65
65
error
66
66
67
67
{ :ok , expr , new_line , new_column , rest } ->
68
- key =
68
+ { key , expr } =
69
69
case :elixir_tokenizer . tokenize ( expr , 1 , file: "eex" , check_terminators: false ) do
70
- { :ok , tokens } -> token_key ( tokens )
71
- { :error , _ , _ , _ } -> :expr
70
+ { :ok , tokens } -> token_key ( tokens , expr )
71
+ { :error , _ , _ , _ } -> { :expr , expr }
72
72
end
73
73
74
74
{ rest , new_line , new_column , buffer } =
@@ -122,38 +122,42 @@ defmodule EEx.Tokenizer do
122
122
end
123
123
124
124
# Receives tokens and check if it is a start, middle or an end token.
125
- defp token_key ( tokens ) do
125
+ defp token_key ( tokens , expr ) do
126
126
case { tokens , Enum . reverse ( tokens ) } do
127
127
{ [ { :end , _ } | _ ] , [ { :do , _ } | _ ] } ->
128
- :middle_expr
128
+ { :middle_expr , expr }
129
129
130
130
{ _ , [ { :do , _ } | _ ] } ->
131
- :start_expr
131
+ { :start_expr , maybe_append_space ( expr ) }
132
132
133
133
{ _ , [ { :block_identifier , _ , _ } | _ ] } ->
134
- :middle_expr
134
+ { :middle_expr , maybe_append_space ( expr ) }
135
135
136
136
{ [ { :end , _ } | _ ] , [ { :stab_op , _ , _ } | _ ] } ->
137
- :middle_expr
137
+ { :middle_expr , expr }
138
138
139
139
{ _ , [ { :stab_op , _ , _ } | reverse_tokens ] } ->
140
140
fn_index = Enum . find_index ( reverse_tokens , & match? ( { :fn , _ } , & 1 ) ) || :infinity
141
141
end_index = Enum . find_index ( reverse_tokens , & match? ( { :end , _ } , & 1 ) ) || :infinity
142
142
143
143
if end_index > fn_index do
144
- :start_expr
144
+ { :start_expr , expr }
145
145
else
146
- :middle_expr
146
+ { :middle_expr , expr }
147
147
end
148
148
149
149
{ tokens , _ } ->
150
150
case Enum . drop_while ( tokens , & closing_bracket? / 1 ) do
151
- [ { :end , _ } | _ ] -> :end_expr
152
- _ -> :expr
151
+ [ { :end , _ } | _ ] -> { :end_expr , expr }
152
+ _ -> { :expr , expr }
153
153
end
154
154
end
155
155
end
156
156
157
+ defp maybe_append_space ( [ ?\s ] ) , do: [ ?\s ]
158
+ defp maybe_append_space ( [ h ] ) , do: [ h , ?\s ]
159
+ defp maybe_append_space ( [ h | t ] ) , do: [ h | maybe_append_space ( t ) ]
160
+
157
161
defp closing_bracket? ( { closing , _ } ) when closing in ~w" ( [ {" a , do: true
158
162
defp closing_bracket? ( _ ) , do: false
159
163
0 commit comments