Browse Source

Slight improvement to closing html element insertion

pipelines/280567345
eidheim 5 years ago
parent
commit
3d2f0810e1
  1. 5
      src/source.cpp
  2. 40
      tests/source_key_test.cpp

5
src/source.cpp

@ -2424,8 +2424,9 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *event) {
forward_to_code(close_element_iter);
auto close_element_tabs_size = static_cast<size_t>(get_tabs_end_iter(close_element_iter).get_line_offset());
if(!close_element_iter || close_element_tabs_size < tabs.size() ||
(close_element_tabs_size == tabs.size() && *close_element_iter == '<' && close_element_iter.forward_char() && forward_to_code(close_element_iter) &&
!(*close_element_iter == '/' && close_element_iter.forward_char() && forward_to_code(close_element_iter) && get_element(close_element_iter) == open_element_token))) {
(close_element_tabs_size == tabs.size() && (*close_element_iter == '{' ||
(*close_element_iter == '<' && close_element_iter.forward_char() && forward_to_code(close_element_iter) &&
!(*close_element_iter == '/' && close_element_iter.forward_char() && forward_to_code(close_element_iter) && get_element(close_element_iter) == open_element_token))))) {
get_buffer()->insert_at_cursor('\n' + tabs + tab + '\n' + tabs + "</" + open_element_token + '>');
auto insert_it = get_buffer()->get_insert()->get_iter();
if(insert_it.backward_chars(tabs.size() + 1 + open_element_token.size() + 3)) {

40
tests/source_key_test.cpp

@ -2483,6 +2483,46 @@ int main() {
iter.backward_chars(12);
g_assert(buffer->get_insert()->get_iter() == iter);
}
{
buffer->set_text(" test(\n"
" <div>\n"
" <div>\n"
" </div>\n");
auto iter = buffer->get_iter_at_line(3);
iter.backward_char();
buffer->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(buffer->get_text() == " test(\n"
" <div>\n"
" <div>\n"
" \n"
" </div>\n"
" </div>\n");
iter = buffer->get_iter_at_line(4);
iter.backward_char();
g_assert(buffer->get_insert()->get_iter() == iter);
}
{
buffer->set_text(" test(\n"
" <div>\n"
" <div>\n"
" {'hello'}\n"
" </div>\n");
auto iter = buffer->get_iter_at_line(3);
iter.backward_char();
buffer->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(buffer->get_text() == " test(\n"
" <div>\n"
" <div>\n"
" \n"
" </div>\n"
" {'hello'}\n"
" </div>\n");
iter = buffer->get_iter_at_line(4);
iter.backward_char();
g_assert(buffer->get_insert()->get_iter() == iter);
}
{
buffer->set_text(" test(\n"
" <div onClick={() => {}}>");

Loading…
Cancel
Save