@@ -372,36 +372,65 @@ function! elixir#indent#handle_inside_embedded_view(context)
372
372
return -1
373
373
endif
374
374
375
- let pair_lnum = searchpair (' <[^\/%].*\%\(\/>\)\@<!$' , ' ' , ' <\/.*[^%\/]>$' , ' bw' , " line('.') == " .a: context .lnum." || s:is_string_or_comment(line('.'), col('.'))" , max ([0 , a: context .lnum - g: elixir_indent_max_lookbehind ]))
375
+ " Multi-line Surface data delimiters
376
+ let pair_lnum = searchpair (' {{' , ' ' , ' }}' , ' bW' , " line('.') == " .a: context .lnum." || s:is_string_or_comment(line('.'), col('.'))" , max ([0 , a: context .lnum - g: elixir_indent_max_lookbehind ]))
376
377
if pair_lnum
377
- if a: context .text = ~ ' <[^\/%].*>.*<\/.*[^\/%]>$'
378
- call s: debug (" open and close tags are on the same line" )
379
- return indent (pair_lnum)
380
- elseif a: context .text = ~ ' <\/.*[^%\/]>'
381
- call s: debug (" a close tag" )
382
- return indent (pair_lnum)
383
- elseif a: context .text = ~ ' ^\s\+\/\?>$'
384
- call s: debug (" a lone >" )
385
- return indent (pair_lnum)
386
- elseif a: context .prev_nb_text = ~ ' \s\+<[^%\/].*>$'
387
- call s: debug (" single open tag" )
388
- return indent (pair_lnum) + s: sw ()
389
- elseif a: context .prev_nb_text = ~ ' \s\+<[^%\/].*[^>]$'
390
- call s: debug (" multiline opening tag" )
378
+ if a: context .text = ~ ' }}$'
379
+ return -1
380
+ else
391
381
return indent (pair_lnum) + s: sw ()
392
- elseif s: prev_ends_with (a: context , ' ,' )
393
- call s: debug (" multiline opening eex" )
382
+ endif
383
+ endif
384
+
385
+ " Multi-line opening tag -- >, />, or %> are on a different line that their opening <
386
+ let pair_lnum = searchpair (' ^\s\+<.*[^>]$' , ' ' , ' ^[^<]*[/%}]\?>$' , ' bW' , " line('.') == " .a: context .lnum." || s:is_string_or_comment(line('.'), col('.'))" , max ([0 , a: context .lnum - g: elixir_indent_max_lookbehind ]))
387
+ if pair_lnum
388
+ if a: context .text = ~ ' ^\s\+\%\(>\|\/>\|%>\|}}>\)$'
389
+ call s: debug (" current line is alone >, />, or %>" )
394
390
return indent (pair_lnum)
395
- elseif a: context .text = ~ ' <\/.\+ \/>'
396
- call s: debug (" self-closing tag" )
391
+ elseif a: context .text = ~ ' \%\(>\|\/>\|%>\|}}>\)$'
392
+ call s: debug (" current line ends in >, />, or %>" )
393
+ return -1
394
+ else
395
+ call s: debug (" in the body of a multi-line opening tag" )
396
+ return indent (pair_lnum) + s: sw ()
397
+ endif
398
+ endif
399
+
400
+ " Special cases
401
+ if a: context .prev_nb_text = ~ ' ^\s\+<[^%\/]*[^/]>.*<\/[a-zA-Z0-9\.\-_]\+>$'
402
+ call s: debug (" opening and closing tags are on the same line" )
403
+ return indent (a: context .prev_nb_lnum)
404
+ elseif s: prev_ends_with (a: context , ' ^\s\+\/>' )
405
+ call s: debug (" prev line is a single \> " )
406
+ return indent (a: context .prev_nb_lnum)
407
+ elseif s: prev_ends_with (a: context , ' ^[^<]*\/>' )
408
+ call s: debug (" prev line is closing a multi-line self-closing tag" )
409
+ return indent (a: context .prev_nb_lnum) - s: sw ()
410
+ elseif a: context .prev_nb_text = ~ ' ^\s\+>$'
411
+ call s: debug (" prev line is a single >" )
412
+ return indent (a: context .prev_nb_lnum) + s: sw ()
413
+ elseif a: context .text = ~ ' ^\s\+<\/[a-zA-Z0-9\.\-_]\+>'
414
+ call s: debug (" a single closing tag" )
415
+ if a: context .prev_nb_text = ~ ' ^\s\+<[^%\/]*[^/]>\|\s\+>'
416
+ return indent (a: context .prev_nb_lnum)
417
+ else
418
+ return indent (a: context .prev_nb_lnum) - s: sw ()
419
+ endif
420
+ endif
421
+
422
+ " Regular old HTML
423
+ let pair_lnum = searchpair (' ^\s\+<[^%\/]*[^\/>]>$' , ' *?' , ' ^\s\+<\/\w\+>$' , ' bW' , " line('.') == " .a: context .lnum." || s:is_string_or_comment(line('.'), col('.'))" , max ([0 , a: context .lnum - g: elixir_indent_max_lookbehind ]))
424
+ if pair_lnum
425
+ call s: debug (" regular old html" )
426
+ if a: context .text = ~ ' ^\s\+<\/\w\+>$'
397
427
return indent (pair_lnum)
398
428
else
399
- call debug (" normal" )
400
- return -2
429
+ return indent (pair_lnum) + s: sw ()
401
430
endif
402
- else
403
- return -1
404
431
endif
432
+
433
+ return -1
405
434
endfunction
406
435
407
436
function ! elixir#indent#handle_inside_generic_block (context)
0 commit comments