diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-05-08 12:20:37 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-05-08 12:20:37 +0200 |
commit | eb6d6ab29f2ee2a86d76d1f6926ea1fa58ed0180 (patch) | |
tree | 1ce88444bbef152aee6b447ea69b7b28b7bc33e4 | |
parent | e85f6871ba9bf8993399136efbad5617dba11b0a (diff) | |
parent | 0b3fba45c6e8d2e65904804cfd4c9a219ea31d2a (diff) | |
download | redot-engine-eb6d6ab29f2ee2a86d76d1f6926ea1fa58ed0180.tar.gz |
Merge pull request #76658 from Paulb23/convert-indent-code-edit
Move convert_indent into CodeEdit
-rw-r--r-- | doc/classes/CodeEdit.xml | 9 | ||||
-rw-r--r-- | editor/code_editor.cpp | 108 | ||||
-rw-r--r-- | editor/code_editor.h | 3 | ||||
-rw-r--r-- | editor/plugins/script_editor_plugin.cpp | 26 | ||||
-rw-r--r-- | editor/plugins/script_editor_plugin.h | 4 | ||||
-rw-r--r-- | editor/plugins/script_text_editor.cpp | 14 | ||||
-rw-r--r-- | editor/plugins/script_text_editor.h | 3 | ||||
-rw-r--r-- | editor/plugins/text_editor.cpp | 14 | ||||
-rw-r--r-- | editor/plugins/text_editor.h | 3 | ||||
-rw-r--r-- | scene/gui/code_edit.cpp | 112 | ||||
-rw-r--r-- | scene/gui/code_edit.h | 2 | ||||
-rw-r--r-- | tests/scene/test_code_edit.h | 137 |
12 files changed, 282 insertions, 153 deletions
diff --git a/doc/classes/CodeEdit.xml b/doc/classes/CodeEdit.xml index b8b9b5fe5e..84e1c80900 100644 --- a/doc/classes/CodeEdit.xml +++ b/doc/classes/CodeEdit.xml @@ -126,6 +126,15 @@ Inserts the selected entry into the text. If [param replace] is true, any existing text is replaced rather then merged. </description> </method> + <method name="convert_indent"> + <return type="void" /> + <param index="0" name="from_line" type="int" default="-1" /> + <param index="1" name="to_line" type="int" default="-1" /> + <description> + Converts the indents of lines between [param from_line] and [param to_line] to tabs or spaces as set by [member indent_use_spaces]. + Values of [code]-1[/code] convert the entire text. + </description> + </method> <method name="do_indent"> <return type="void" /> <description> diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 91ccede26d..b188e1faca 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -902,6 +902,9 @@ void CodeTextEditor::_line_col_changed() { sb.append(" : "); sb.append(itos(positional_column + 1).lpad(3)); + sb.append(" | "); + sb.append(text_editor->is_indent_using_spaces() ? "Spaces" : "Tabs"); + line_and_col_txt->set_text(sb.as_string()); if (find_replace_bar) { @@ -1142,111 +1145,6 @@ void CodeTextEditor::insert_final_newline() { } } -void CodeTextEditor::convert_indent_to_spaces() { - int indent_size = EDITOR_GET("text_editor/behavior/indent/size"); - String indent = String(" ").repeat(indent_size); - - Vector<int> cursor_columns; - cursor_columns.resize(text_editor->get_caret_count()); - for (int c = 0; c < text_editor->get_caret_count(); c++) { - cursor_columns.write[c] = text_editor->get_caret_column(c); - } - - bool changed_indentation = false; - for (int i = 0; i < text_editor->get_line_count(); i++) { - String line = text_editor->get_line(i); - - if (line.length() <= 0) { - continue; - } - - int j = 0; - while (j < line.length() && (line[j] == ' ' || line[j] == '\t')) { - if (line[j] == '\t') { - if (!changed_indentation) { - text_editor->begin_complex_operation(); - changed_indentation = true; - } - for (int c = 0; c < text_editor->get_caret_count(); c++) { - if (text_editor->get_caret_line(c) == i && text_editor->get_caret_column(c) > j) { - cursor_columns.write[c] += indent_size - 1; - } - } - line = line.left(j) + indent + line.substr(j + 1); - } - j++; - } - if (changed_indentation) { - text_editor->set_line(i, line); - } - } - if (changed_indentation) { - for (int c = 0; c < text_editor->get_caret_count(); c++) { - text_editor->set_caret_column(cursor_columns[c], c == 0, c); - } - text_editor->merge_overlapping_carets(); - text_editor->end_complex_operation(); - text_editor->queue_redraw(); - } -} - -void CodeTextEditor::convert_indent_to_tabs() { - int indent_size = EDITOR_GET("text_editor/behavior/indent/size"); - indent_size -= 1; - - Vector<int> cursor_columns; - cursor_columns.resize(text_editor->get_caret_count()); - for (int c = 0; c < text_editor->get_caret_count(); c++) { - cursor_columns.write[c] = text_editor->get_caret_column(c); - } - - bool changed_indentation = false; - for (int i = 0; i < text_editor->get_line_count(); i++) { - String line = text_editor->get_line(i); - - if (line.length() <= 0) { - continue; - } - - int j = 0; - int space_count = -1; - while (j < line.length() && (line[j] == ' ' || line[j] == '\t')) { - if (line[j] != '\t') { - space_count++; - - if (space_count == indent_size) { - if (!changed_indentation) { - text_editor->begin_complex_operation(); - changed_indentation = true; - } - for (int c = 0; c < text_editor->get_caret_count(); c++) { - if (text_editor->get_caret_line(c) == i && text_editor->get_caret_column(c) > j) { - cursor_columns.write[c] -= indent_size; - } - } - line = line.left(j - indent_size) + "\t" + line.substr(j + 1); - j = 0; - space_count = -1; - } - } else { - space_count = -1; - } - j++; - } - if (changed_indentation) { - text_editor->set_line(i, line); - } - } - if (changed_indentation) { - for (int c = 0; c < text_editor->get_caret_count(); c++) { - text_editor->set_caret_column(cursor_columns[c], c == 0, c); - } - text_editor->merge_overlapping_carets(); - text_editor->end_complex_operation(); - text_editor->queue_redraw(); - } -} - void CodeTextEditor::convert_case(CaseStyle p_case) { if (!text_editor->has_selection()) { return; diff --git a/editor/code_editor.h b/editor/code_editor.h index 343720637b..a83bb96771 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -222,9 +222,6 @@ public: void trim_trailing_whitespace(); void insert_final_newline(); - void convert_indent_to_spaces(); - void convert_indent_to_tabs(); - enum CaseStyle { UPPER, LOWER, diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 0e01b11028..c605844728 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -944,11 +944,7 @@ void ScriptEditor::_resave_scripts(const String &p_str) { se->insert_final_newline(); if (convert_indent_on_save) { - if (use_space_indentation) { - se->convert_indent_to_spaces(); - } else { - se->convert_indent_to_tabs(); - } + se->convert_indent(); } Ref<TextFile> text_file = scr; @@ -1299,11 +1295,7 @@ void ScriptEditor::_menu_option(int p_option) { current->insert_final_newline(); if (convert_indent_on_save) { - if (use_space_indentation) { - current->convert_indent_to_spaces(); - } else { - current->convert_indent_to_tabs(); - } + current->convert_indent(); } Ref<Resource> resource = current->get_edited_resource(); @@ -2451,11 +2443,7 @@ void ScriptEditor::save_current_script() { current->insert_final_newline(); if (convert_indent_on_save) { - if (use_space_indentation) { - current->convert_indent_to_spaces(); - } else { - current->convert_indent_to_tabs(); - } + current->convert_indent(); } Ref<Resource> resource = current->get_edited_resource(); @@ -2499,11 +2487,7 @@ void ScriptEditor::save_all_scripts() { } if (convert_indent_on_save) { - if (use_space_indentation) { - se->convert_indent_to_spaces(); - } else { - se->convert_indent_to_tabs(); - } + se->convert_indent(); } if (trim_trailing_whitespace_on_save) { @@ -2730,7 +2714,6 @@ void ScriptEditor::_editor_settings_changed() { trim_trailing_whitespace_on_save = EDITOR_GET("text_editor/behavior/files/trim_trailing_whitespace_on_save"); convert_indent_on_save = EDITOR_GET("text_editor/behavior/files/convert_indent_on_save"); - use_space_indentation = EDITOR_GET("text_editor/behavior/indent/type"); members_overview_enabled = EDITOR_GET("text_editor/script_list/show_members_overview"); help_overview_enabled = EDITOR_GET("text_editor/help/show_help_index"); @@ -4081,7 +4064,6 @@ ScriptEditor::ScriptEditor() { edit_pass = 0; trim_trailing_whitespace_on_save = EDITOR_GET("text_editor/behavior/files/trim_trailing_whitespace_on_save"); convert_indent_on_save = EDITOR_GET("text_editor/behavior/files/convert_indent_on_save"); - use_space_indentation = EDITOR_GET("text_editor/behavior/indent/type"); ScriptServer::edit_request_func = _open_script_request; diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index 10dfe0f199..5cbe56b68b 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -169,8 +169,7 @@ public: virtual void clear_executing_line() = 0; virtual void trim_trailing_whitespace() = 0; virtual void insert_final_newline() = 0; - virtual void convert_indent_to_spaces() = 0; - virtual void convert_indent_to_tabs() = 0; + virtual void convert_indent() = 0; virtual void ensure_focus() = 0; virtual void tag_saved_version() = 0; virtual void reload(bool p_soft) {} @@ -390,7 +389,6 @@ class ScriptEditor : public PanelContainer { bool open_textfile_after_create = true; bool trim_trailing_whitespace_on_save; - bool use_space_indentation; bool convert_indent_on_save; void _goto_script_line2(int p_line); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 9e10eddd5b..978f1f56a5 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -378,12 +378,8 @@ void ScriptTextEditor::insert_final_newline() { code_editor->insert_final_newline(); } -void ScriptTextEditor::convert_indent_to_spaces() { - code_editor->convert_indent_to_spaces(); -} - -void ScriptTextEditor::convert_indent_to_tabs() { - code_editor->convert_indent_to_tabs(); +void ScriptTextEditor::convert_indent() { + code_editor->get_text_editor()->convert_indent(); } void ScriptTextEditor::tag_saved_version() { @@ -1282,10 +1278,12 @@ void ScriptTextEditor::_edit_option(int p_op) { trim_trailing_whitespace(); } break; case EDIT_CONVERT_INDENT_TO_SPACES: { - convert_indent_to_spaces(); + tx->set_indent_using_spaces(true); + convert_indent(); } break; case EDIT_CONVERT_INDENT_TO_TABS: { - convert_indent_to_tabs(); + tx->set_indent_using_spaces(false); + convert_indent(); } break; case EDIT_PICK_COLOR: { color_panel->popup(); diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 1b986401c2..5e167af51a 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -222,8 +222,7 @@ public: virtual void ensure_focus() override; virtual void trim_trailing_whitespace() override; virtual void insert_final_newline() override; - virtual void convert_indent_to_spaces() override; - virtual void convert_indent_to_tabs() override; + virtual void convert_indent() override; virtual void tag_saved_version() override; virtual void goto_line(int p_line, bool p_with_error = false) override; diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index 174588b92e..7a76e4f989 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -288,12 +288,8 @@ void TextEditor::insert_final_newline() { code_editor->insert_final_newline(); } -void TextEditor::convert_indent_to_spaces() { - code_editor->convert_indent_to_spaces(); -} - -void TextEditor::convert_indent_to_tabs() { - code_editor->convert_indent_to_tabs(); +void TextEditor::convert_indent() { + code_editor->get_text_editor()->convert_indent(); } void TextEditor::tag_saved_version() { @@ -419,10 +415,12 @@ void TextEditor::_edit_option(int p_op) { trim_trailing_whitespace(); } break; case EDIT_CONVERT_INDENT_TO_SPACES: { - convert_indent_to_spaces(); + tx->set_indent_using_spaces(true); + convert_indent(); } break; case EDIT_CONVERT_INDENT_TO_TABS: { - convert_indent_to_tabs(); + tx->set_indent_using_spaces(false); + convert_indent(); } break; case EDIT_TO_UPPERCASE: { _convert_case(CodeTextEditor::UPPER); diff --git a/editor/plugins/text_editor.h b/editor/plugins/text_editor.h index d9f5222e90..0c218e9e0c 100644 --- a/editor/plugins/text_editor.h +++ b/editor/plugins/text_editor.h @@ -131,8 +131,7 @@ public: virtual void clear_executing_line() override; virtual void trim_trailing_whitespace() override; virtual void insert_final_newline() override; - virtual void convert_indent_to_spaces() override; - virtual void convert_indent_to_tabs() override; + virtual void convert_indent() override; virtual void ensure_focus() override; virtual void tag_saved_version() override; virtual void update_settings() override; diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index 92407e75df..d83182c775 100644 --- a/scene/gui/code_edit.cpp +++ b/scene/gui/code_edit.cpp @@ -1007,6 +1007,116 @@ void CodeEdit::unindent_lines() { queue_redraw(); } +void CodeEdit::convert_indent(int p_from_line, int p_to_line) { + if (!is_editable()) { + return; + } + + // Check line range. + p_from_line = (p_from_line < 0) ? 0 : p_from_line; + p_to_line = (p_to_line < 0) ? get_line_count() - 1 : p_to_line; + + ERR_FAIL_COND(p_from_line >= get_line_count()); + ERR_FAIL_COND(p_to_line >= get_line_count()); + ERR_FAIL_COND(p_to_line < p_from_line); + + // Store caret states. + Vector<int> caret_columns; + Vector<Pair<int, int>> from_selections; + Vector<Pair<int, int>> to_selections; + caret_columns.resize(get_caret_count()); + from_selections.resize(get_caret_count()); + to_selections.resize(get_caret_count()); + for (int c = 0; c < get_caret_count(); c++) { + caret_columns.write[c] = get_caret_column(c); + + // Set "selection_from_line" to -1 to allow checking if there was a selection later. + if (!has_selection(c)) { + from_selections.write[c].first = -1; + continue; + } + from_selections.write[c].first = get_selection_from_line(c); + from_selections.write[c].second = get_selection_from_column(c); + to_selections.write[c].first = get_selection_to_line(c); + to_selections.write[c].second = get_selection_to_column(c); + } + + // Check lines within range. + const char32_t from_indent_char = indent_using_spaces ? '\t' : ' '; + int size_diff = indent_using_spaces ? indent_size - 1 : -(indent_size - 1); + bool changed_indentation = false; + for (int i = p_from_line; i <= p_to_line; i++) { + String line = get_line(i); + + if (line.length() <= 0) { + continue; + } + + // Check chars in the line. + int j = 0; + int space_count = 0; + bool line_changed = false; + while (j < line.length() && (line[j] == ' ' || line[j] == '\t')) { + if (line[j] != from_indent_char) { + space_count = 0; + j++; + continue; + } + space_count++; + + if (!indent_using_spaces && space_count != indent_size) { + j++; + continue; + } + + line_changed = true; + if (!changed_indentation) { + begin_complex_operation(); + changed_indentation = true; + } + + // Calculate new caret state. + for (int c = 0; c < get_caret_count(); c++) { + if (get_caret_line(c) != i || caret_columns[c] <= j) { + continue; + } + caret_columns.write[c] += size_diff; + + if (from_selections.write[c].first == -1) { + continue; + } + from_selections.write[c].second = from_selections[c].first == i ? from_selections[c].second + size_diff : from_selections[c].second; + to_selections.write[c].second = to_selections[c].first == i ? to_selections[c].second + size_diff : to_selections[c].second; + } + + // Calculate new line. + line = line.left(j + ((size_diff < 0) ? size_diff : 0)) + indent_text + line.substr(j + 1); + + space_count = 0; + j += size_diff; + } + + if (line_changed) { + set_line(i, line); + } + } + + if (!changed_indentation) { + return; + } + + // Restore caret states. + for (int c = 0; c < get_caret_count(); c++) { + set_caret_column(caret_columns[c], c == 0, c); + if (from_selections.write[c].first != -1) { + select(from_selections.write[c].first, from_selections.write[c].second, to_selections.write[c].first, to_selections.write[c].second, c); + } + } + merge_overlapping_carets(); + end_complex_operation(); + queue_redraw(); +} + int CodeEdit::_calculate_spaces_till_next_left_indent(int p_column) const { int spaces_till_indent = p_column % indent_size; if (spaces_till_indent == 0) { @@ -2197,6 +2307,8 @@ void CodeEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("indent_lines"), &CodeEdit::indent_lines); ClassDB::bind_method(D_METHOD("unindent_lines"), &CodeEdit::unindent_lines); + ClassDB::bind_method(D_METHOD("convert_indent", "from_line", "to_line"), &CodeEdit::convert_indent, DEFVAL(-1), DEFVAL(-1)); + /* Auto brace completion */ ClassDB::bind_method(D_METHOD("set_auto_brace_completion_enabled", "enable"), &CodeEdit::set_auto_brace_completion_enabled); ClassDB::bind_method(D_METHOD("is_auto_brace_completion_enabled"), &CodeEdit::is_auto_brace_completion_enabled); diff --git a/scene/gui/code_edit.h b/scene/gui/code_edit.h index ee73758bef..a086707745 100644 --- a/scene/gui/code_edit.h +++ b/scene/gui/code_edit.h @@ -314,6 +314,8 @@ public: void indent_lines(); void unindent_lines(); + void convert_indent(int p_from_line = -1, int p_to_line = -1); + /* Auto brace completion */ void set_auto_brace_completion_enabled(bool p_enabled); bool is_auto_brace_completion_enabled() const; diff --git a/tests/scene/test_code_edit.h b/tests/scene/test_code_edit.h index c5407d4bcd..9b8ad32e32 100644 --- a/tests/scene/test_code_edit.h +++ b/tests/scene/test_code_edit.h @@ -2314,6 +2314,143 @@ TEST_CASE("[SceneTree][CodeEdit] indent") { } } + SUBCASE("[CodeEdit] convert indent to tabs") { + code_edit->set_indent_size(4); + code_edit->set_indent_using_spaces(false); + + // Only line. + code_edit->insert_text_at_caret(" test"); + code_edit->set_caret_line(0); + code_edit->set_caret_column(8); + code_edit->select(0, 8, 0, 9); + code_edit->convert_indent(); + CHECK(code_edit->get_line(0) == "\t\ttest"); + CHECK(code_edit->get_caret_column() == 2); + CHECK(code_edit->get_selection_from_column() == 2); + CHECK(code_edit->get_selection_to_column() == 3); + + // First line. + code_edit->set_text(""); + code_edit->insert_text_at_caret(" test\n"); + code_edit->set_caret_line(0); + code_edit->set_caret_column(8); + code_edit->select(0, 8, 0, 9); + code_edit->convert_indent(); + CHECK(code_edit->get_line(0) == "\t\ttest"); + CHECK(code_edit->get_caret_column() == 2); + CHECK(code_edit->get_selection_from_column() == 2); + CHECK(code_edit->get_selection_to_column() == 3); + + // Middle line. + code_edit->set_text(""); + code_edit->insert_text_at_caret("\n test\n"); + code_edit->set_caret_line(1); + code_edit->set_caret_column(8); + code_edit->select(1, 8, 1, 9); + code_edit->convert_indent(); + CHECK(code_edit->get_line(1) == "\t\ttest"); + CHECK(code_edit->get_caret_column() == 2); + CHECK(code_edit->get_selection_from_column() == 2); + CHECK(code_edit->get_selection_to_column() == 3); + + // End line. + code_edit->set_text(""); + code_edit->insert_text_at_caret("\n test"); + code_edit->set_caret_line(1); + code_edit->set_caret_column(8); + code_edit->select(1, 8, 1, 9); + code_edit->convert_indent(); + CHECK(code_edit->get_line(1) == "\t\ttest"); + CHECK(code_edit->get_caret_column() == 2); + CHECK(code_edit->get_selection_from_column() == 2); + CHECK(code_edit->get_selection_to_column() == 3); + + // Within provided range. + code_edit->set_text(""); + code_edit->insert_text_at_caret(" test\n test\n"); + code_edit->set_caret_line(1); + code_edit->set_caret_column(8); + code_edit->select(1, 8, 1, 9); + code_edit->convert_indent(1, 1); + CHECK(code_edit->get_line(0) == " test"); + CHECK(code_edit->get_line(1) == "\t\ttest"); + CHECK(code_edit->get_caret_column() == 2); + CHECK(code_edit->get_selection_from_column() == 2); + CHECK(code_edit->get_selection_to_column() == 3); + } + + SUBCASE("[CodeEdit] convert indent to spaces") { + code_edit->set_indent_size(4); + code_edit->set_indent_using_spaces(true); + + // Only line. + code_edit->insert_text_at_caret("\t\ttest"); + code_edit->set_caret_line(0); + code_edit->set_caret_column(2); + code_edit->select(0, 2, 0, 3); + code_edit->convert_indent(); + CHECK(code_edit->get_line(0) == " test"); + CHECK(code_edit->get_caret_column() == 8); + CHECK(code_edit->get_selection_from_column() == 8); + CHECK(code_edit->get_selection_to_column() == 9); + + // First line. + code_edit->set_text(""); + code_edit->insert_text_at_caret("\t\ttest\n"); + code_edit->set_caret_line(0); + code_edit->set_caret_column(2); + code_edit->select(0, 2, 0, 3); + code_edit->convert_indent(); + CHECK(code_edit->get_line(0) == " test"); + CHECK(code_edit->get_caret_column() == 8); + CHECK(code_edit->get_selection_from_column() == 8); + CHECK(code_edit->get_selection_to_column() == 9); + + // Middle line. + code_edit->set_text(""); + code_edit->insert_text_at_caret("\n\t\ttest\n"); + code_edit->set_caret_line(1); + code_edit->set_caret_column(2); + code_edit->select(1, 2, 1, 3); + code_edit->convert_indent(); + CHECK(code_edit->get_line(1) == " test"); + CHECK(code_edit->get_caret_column() == 8); + CHECK(code_edit->get_selection_from_column() == 8); + CHECK(code_edit->get_selection_to_column() == 9); + + // End line. + code_edit->set_text(""); + code_edit->insert_text_at_caret("\n\t\ttest"); + code_edit->set_caret_line(1); + code_edit->set_caret_column(2); + code_edit->select(1, 2, 1, 3); + code_edit->convert_indent(); + CHECK(code_edit->get_line(1) == " test"); + CHECK(code_edit->get_caret_column() == 8); + CHECK(code_edit->get_selection_from_column() == 8); + CHECK(code_edit->get_selection_to_column() == 9); + + // Within provided range. + code_edit->set_text(""); + code_edit->insert_text_at_caret("\ttest\n\t\ttest\n"); + code_edit->set_caret_line(1); + code_edit->set_caret_column(2); + code_edit->select(1, 2, 1, 3); + code_edit->convert_indent(1, 1); + CHECK(code_edit->get_line(0) == "\ttest"); + CHECK(code_edit->get_line(1) == " test"); + CHECK(code_edit->get_caret_column() == 8); + CHECK(code_edit->get_selection_from_column() == 8); + CHECK(code_edit->get_selection_to_column() == 9); + + // Outside of range. + ERR_PRINT_OFF; + code_edit->convert_indent(0, 4); + code_edit->convert_indent(4, 5); + code_edit->convert_indent(4, 1); + ERR_PRINT_ON; + } + memdelete(code_edit); } |