@@ -65,10 +65,10 @@ defmodule EEx.Tokenizer do
6565 error
6666
6767 { :ok , expr , new_line , new_column , rest } ->
68- key =
68+ { key , expr } =
6969 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 }
7272 end
7373
7474 { rest , new_line , new_column , buffer } =
@@ -122,38 +122,42 @@ defmodule EEx.Tokenizer do
122122 end
123123
124124 # 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
126126 case { tokens , Enum . reverse ( tokens ) } do
127127 { [ { :end , _ } | _ ] , [ { :do , _ } | _ ] } ->
128- :middle_expr
128+ { :middle_expr , expr }
129129
130130 { _ , [ { :do , _ } | _ ] } ->
131- :start_expr
131+ { :start_expr , maybe_append_space ( expr ) }
132132
133133 { _ , [ { :block_identifier , _ , _ } | _ ] } ->
134- :middle_expr
134+ { :middle_expr , maybe_append_space ( expr ) }
135135
136136 { [ { :end , _ } | _ ] , [ { :stab_op , _ , _ } | _ ] } ->
137- :middle_expr
137+ { :middle_expr , expr }
138138
139139 { _ , [ { :stab_op , _ , _ } | reverse_tokens ] } ->
140140 fn_index = Enum . find_index ( reverse_tokens , & match? ( { :fn , _ } , & 1 ) ) || :infinity
141141 end_index = Enum . find_index ( reverse_tokens , & match? ( { :end , _ } , & 1 ) ) || :infinity
142142
143143 if end_index > fn_index do
144- :start_expr
144+ { :start_expr , expr }
145145 else
146- :middle_expr
146+ { :middle_expr , expr }
147147 end
148148
149149 { tokens , _ } ->
150150 case Enum . drop_while ( tokens , & closing_bracket? / 1 ) do
151- [ { :end , _ } | _ ] -> :end_expr
152- _ -> :expr
151+ [ { :end , _ } | _ ] -> { :end_expr , expr }
152+ _ -> { :expr , expr }
153153 end
154154 end
155155 end
156156
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+
157161 defp closing_bracket? ( { closing , _ } ) when closing in ~w" ( [ {" a , do: true
158162 defp closing_bracket? ( _ ) , do: false
159163
0 commit comments