Browse Source

Improved indentation on lines ending with a comment, and additional key tests

merge-requests/365/head
eidheim 8 years ago
parent
commit
4e24a97a44
  1. 164
      src/source.cc
  2. 5
      src/source.h
  3. 364
      tests/source_key_test.cc

164
src/source.cc

@ -14,6 +14,7 @@
#include <iostream> #include <iostream>
#include <numeric> #include <numeric>
#include <set> #include <set>
#include <regex>
Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path &file_path) { Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path &file_path) {
auto language_manager=Gsv::LanguageManager::get_default(); auto language_manager=Gsv::LanguageManager::get_default();
@ -75,10 +76,6 @@ std::string Source::FixIt::string(Glib::RefPtr<Gtk::TextBuffer> buffer) {
////////////// //////////////
//// View //// //// View ////
////////////// //////////////
const std::regex Source::View::bracket_regex("^.*\\{ *$", std::regex::extended);
const std::regex Source::View::no_bracket_statement_regex("^(if|for|else if|while) *\\(.*[^;}] *$", std::regex::extended);
const std::regex Source::View::no_bracket_no_para_statement_regex("^else *$");
Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::Language> language): Gsv::View(), SpellCheckView(), DiffView(file_path), language(language), status_diagnostics(0, 0, 0) { Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::Language> language): Gsv::View(), SpellCheckView(), DiffView(file_path), language(language), status_diagnostics(0, 0, 0) {
load(); load();
@ -1798,6 +1795,10 @@ bool Source::View::on_key_press_event_basic(GdkEventKey* key) {
//Bracket language indentation //Bracket language indentation
bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) { bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
const static std::regex no_bracket_statement_regex("^ *(if|for|while) *\\(.*[^;}{] *$|"
"^[}]? *else if *\\(.*[^;}{] *$|"
"^[}]? *else *$", std::regex::extended);
auto iter=get_buffer()->get_insert()->get_iter(); auto iter=get_buffer()->get_insert()->get_iter();
if(get_buffer()->get_has_selection()) if(get_buffer()->get_has_selection())
@ -1805,39 +1806,59 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
if(!is_code_iter(iter)) { if(!is_code_iter(iter)) {
// Add * at start of line in comment blocks // Add * at start of line in comment blocks
if((key->keyval==GDK_KEY_Return || key->keyval==GDK_KEY_KP_Enter) && if(key->keyval==GDK_KEY_Return || key->keyval==GDK_KEY_KP_Enter) {
!iter.starts_line() && (!string_tag || (!iter.has_tag(string_tag) && !iter.ends_tag(string_tag)))) { if(!iter.starts_line() && (!string_tag || (!iter.has_tag(string_tag) && !iter.ends_tag(string_tag)))) {
cleanup_whitespace_characters_on_return(iter); cleanup_whitespace_characters_on_return(iter);
iter=get_buffer()->get_insert()->get_iter();
iter=get_buffer()->get_insert()->get_iter();
auto start_iter=get_tabs_end_iter(iter.get_line()); auto start_iter=get_tabs_end_iter(iter.get_line());
auto end_iter=start_iter; auto end_iter=start_iter;
end_iter.forward_chars(2); end_iter.forward_chars(2);
auto start_of_sentence=get_buffer()->get_text(start_iter, end_iter); auto start_of_sentence=get_buffer()->get_text(start_iter, end_iter);
if(!start_of_sentence.empty()) { if(!start_of_sentence.empty()) {
if(start_of_sentence=="/*" || start_of_sentence[0]=='*') { if(start_of_sentence=="/*" || start_of_sentence[0]=='*') {
auto tabs=get_line_before(start_iter); auto tabs=get_line_before(start_iter);
auto insert_str="\n"+tabs; auto insert_str="\n"+tabs;
if(start_of_sentence[0]=='/') if(start_of_sentence[0]=='/')
insert_str+=' '; insert_str+=' ';
insert_str+="* "; insert_str+="* ";
get_buffer()->insert_at_cursor(insert_str); get_buffer()->insert_at_cursor(insert_str);
return true; return true;
}
} }
} }
else if(!comment_tag || !iter.ends_tag(comment_tag))
return false;
} }
return false; else
return false;
} }
// get iter for if expressions below, which is moved backwards past any comment
auto get_condition_iter=[this](const Gtk::TextIter &iter) {
auto condition_iter=iter;
condition_iter.backward_char();
if(!comment_tag)
return condition_iter;
while(!condition_iter.starts_line() && (condition_iter.has_tag(comment_tag) ||
#if GTKMM_MAJOR_VERSION>3 || (GTKMM_MAJOR_VERSION==3 && GTKMM_MINOR_VERSION>=20)
condition_iter.starts_tag(comment_tag) ||
#else
*condition_iter=='/' ||
#endif
*condition_iter==' ' || *condition_iter=='\t') &&
condition_iter.backward_char()) {}
return condition_iter;
};
//Indent depending on if/else/etc and brackets //Indent depending on if/else/etc and brackets
if((key->keyval==GDK_KEY_Return || key->keyval==GDK_KEY_KP_Enter) && !iter.starts_line()) { if((key->keyval==GDK_KEY_Return || key->keyval==GDK_KEY_KP_Enter) && !iter.starts_line()) {
cleanup_whitespace_characters_on_return(iter); cleanup_whitespace_characters_on_return(iter);
iter=get_buffer()->get_insert()->get_iter(); iter=get_buffer()->get_insert()->get_iter();
auto previous_iter=iter;
previous_iter.backward_char(); auto condition_iter=get_condition_iter(iter);
auto start_iter=previous_iter; auto start_iter=condition_iter;
if(*start_iter=='{') if(*start_iter=='{')
start_iter.backward_char(); start_iter.backward_char();
Gtk::TextIter open_non_curly_bracket_iter; Gtk::TextIter open_non_curly_bracket_iter;
@ -1853,19 +1874,22 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
/* /*
* Change tabs after ending comment block with an extra space (as in this case) * Change tabs after ending comment block with an extra space (as in this case)
*/ */
if(tabs.size()%tab_size==1) { if(tabs.size()%tab_size==1 && !start_iter.ends_line() && !is_code_iter(start_iter)) {
iter=get_buffer()->get_insert()->get_iter(); auto end_of_line_iter=start_iter;
auto tabs_end_iter=get_tabs_end_iter(iter); end_of_line_iter.forward_to_line_end();
if(!tabs_end_iter.ends_line() && !is_code_iter(tabs_end_iter)) { auto line=get_buffer()->get_text(start_iter, end_of_line_iter);
auto end_of_line_iter=tabs_end_iter; if(!line.empty() && line.compare(0, 2, "*/")==0) {
end_of_line_iter.forward_to_line_end(); tabs.pop_back();
auto line=get_buffer()->get_text(tabs_end_iter, end_of_line_iter); get_buffer()->insert_at_cursor("\n"+tabs);
if(!line.empty() && line.compare(0, 2, "*/")==0) scroll_to(get_buffer()->get_insert());
tabs.pop_back(); return true;
} }
} }
if(*previous_iter=='{') { if(!is_code_iter(condition_iter))
return false;
if(*condition_iter=='{') {
Gtk::TextIter found_iter; Gtk::TextIter found_iter;
// Check if an '}' is needed // Check if an '}' is needed
bool has_right_curly_bracket=false; bool has_right_curly_bracket=false;
@ -1906,7 +1930,7 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
add_semicolon=true; add_semicolon=true;
//Add semicolon after lambda unless it's a parameter //Add semicolon after lambda unless it's a parameter
else if(!open_non_curly_bracket_iter_found) { else if(!open_non_curly_bracket_iter_found) {
auto it=previous_iter; auto it=condition_iter;
long para_count=0; long para_count=0;
long square_count=0; long square_count=0;
bool square_outside_para_found=false; bool square_outside_para_found=false;
@ -1969,47 +1993,38 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
scroll_to(get_buffer()->get_insert()); scroll_to(get_buffer()->get_insert());
return true; return true;
} }
std::string sentence=get_buffer()->get_text(start_iter, iter); auto after_condition_iter=condition_iter;
after_condition_iter.forward_char();
std::string sentence=get_buffer()->get_text(start_iter, after_condition_iter);
std::smatch sm; std::smatch sm;
if(std::regex_match(sentence, sm, no_bracket_statement_regex)) { if(std::regex_match(sentence, sm, no_bracket_statement_regex)) {
get_buffer()->insert_at_cursor("\n"+tabs+tab); get_buffer()->insert_at_cursor("\n"+tabs+tab);
scroll_to(get_buffer()->get_insert()); scroll_to(get_buffer()->get_insert());
return true; return true;
} }
else if(std::regex_match(sentence, sm, no_bracket_no_para_statement_regex)) {
get_buffer()->insert_at_cursor("\n"+tabs+tab);
scroll_to(get_buffer()->get_insert());
return true;
}
//Indenting after for instance if(...)\n...;\n //Indenting after for instance if(...)\n...;\n
else if(iter.backward_char() && *iter==';' && iter.get_line()>0) { else if(*condition_iter==';' && condition_iter.get_line()>0) {
auto previous_end_iter=start_iter; auto previous_end_iter=start_iter;
while(previous_end_iter.backward_char() && !previous_end_iter.ends_line()) {} while(previous_end_iter.backward_char() && !previous_end_iter.ends_line()) {}
auto previous_start_iter=get_tabs_end_iter(get_buffer()->get_iter_at_line(find_start_of_sentence(previous_end_iter).get_line())); auto previous_start_iter=get_tabs_end_iter(get_buffer()->get_iter_at_line(find_start_of_sentence(previous_end_iter).get_line()));
auto previous_tabs=get_line_before(previous_start_iter); auto previous_tabs=get_line_before(previous_start_iter);
std::string previous_sentence=get_buffer()->get_text(previous_start_iter, previous_end_iter); auto after_condition_iter=get_condition_iter(previous_end_iter);
after_condition_iter.forward_char();
std::string previous_sentence=get_buffer()->get_text(previous_start_iter, after_condition_iter);
std::smatch sm2; std::smatch sm2;
if(!std::regex_match(previous_sentence, sm2, bracket_regex)) { if(std::regex_match(previous_sentence, sm2, no_bracket_statement_regex)) {
if(std::regex_match(previous_sentence, sm2, no_bracket_statement_regex)) { get_buffer()->insert_at_cursor("\n"+previous_tabs);
get_buffer()->insert_at_cursor("\n"+previous_tabs); scroll_to(get_buffer()->get_insert());
scroll_to(get_buffer()->get_insert()); return true;
return true;
}
else if(std::regex_match(previous_sentence, sm2, no_bracket_no_para_statement_regex)) {
get_buffer()->insert_at_cursor("\n"+previous_tabs);
scroll_to(get_buffer()->get_insert());
return true;
}
} }
} }
//Indenting after ':' //Indenting after ':'
else if(*iter==':') { else if(*condition_iter==':') {
bool perform_indent=true; bool perform_indent=true;
auto previous_iter=iter; auto iter=condition_iter;
previous_iter.backward_char(); while(!iter.starts_line() && *iter==' ' && iter.backward_char()) {}
while(!previous_iter.starts_line() && *previous_iter==' ' && previous_iter.backward_char()) {} if(*iter==')') {
if(*previous_iter==')') { auto token=get_token(get_tabs_end_iter(get_buffer()->get_iter_at_line(iter.get_line())));
auto token=get_token(get_tabs_end_iter(get_buffer()->get_iter_at_line(previous_iter.get_line())));
if(token!="case") if(token!="case")
perform_indent=false; perform_indent=false;
} }
@ -2068,20 +2083,19 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
auto previous_end_iter=iter; auto previous_end_iter=iter;
while(previous_end_iter.backward_char() && !previous_end_iter.ends_line()) {} while(previous_end_iter.backward_char() && !previous_end_iter.ends_line()) {}
auto previous_start_iter=get_tabs_end_iter(get_buffer()->get_iter_at_line(find_start_of_sentence(previous_end_iter).get_line())); auto previous_start_iter=get_tabs_end_iter(get_buffer()->get_iter_at_line(find_start_of_sentence(previous_end_iter).get_line()));
auto after_condition_iter=get_condition_iter(previous_end_iter);
after_condition_iter.forward_char();
auto previous_tabs=get_line_before(previous_start_iter); auto previous_tabs=get_line_before(previous_start_iter);
if((tabs.size()-tab_size)==previous_tabs.size()) { if((tabs.size()-tab_size)==previous_tabs.size()) {
std::string previous_sentence=get_buffer()->get_text(previous_start_iter, previous_end_iter); std::string previous_sentence=get_buffer()->get_text(previous_start_iter, after_condition_iter);
std::smatch sm; std::smatch sm;
if(!std::regex_match(previous_sentence, sm, bracket_regex)) { if(std::regex_match(previous_sentence, sm, no_bracket_statement_regex)) {
if(std::regex_match(previous_sentence, sm, no_bracket_statement_regex) || auto start_iter=iter;
std::regex_match(previous_sentence, sm, no_bracket_no_para_statement_regex)) { start_iter.backward_chars(tab_size);
auto start_iter=iter; get_buffer()->erase(start_iter, iter);
start_iter.backward_chars(tab_size); get_buffer()->insert_at_cursor("{");
get_buffer()->erase(start_iter, iter); scroll_to(get_buffer()->get_insert());
get_buffer()->insert_at_cursor("{"); return true;
scroll_to(get_buffer()->get_insert());
return true;
}
} }
} }
} }

5
src/source.h

@ -8,7 +8,6 @@
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <regex>
#include <tuple> #include <tuple>
namespace Source { namespace Source {
@ -141,10 +140,6 @@ namespace Source {
void cleanup_whitespace_characters_on_return(const Gtk::TextIter &iter); void cleanup_whitespace_characters_on_return(const Gtk::TextIter &iter);
const static std::regex bracket_regex;
const static std::regex no_bracket_statement_regex;
const static std::regex no_bracket_no_para_statement_regex;
bool is_bracket_language=false; bool is_bracket_language=false;
bool on_key_press_event(GdkEventKey* key) override; bool on_key_press_event(GdkEventKey* key) override;
bool on_key_press_event_basic(GdkEventKey* key); bool on_key_press_event_basic(GdkEventKey* key);

364
tests/source_key_test.cc

@ -18,10 +18,123 @@ int main() {
event.state = 0; event.state = 0;
{ {
Source::View view(source_file, language_manager->get_language("cpp")); auto language = language_manager->get_language("cpp");
Source::View view(source_file, language);
view.get_source_buffer()->set_highlight_syntax(true);
view.get_source_buffer()->set_language(language);
view.set_tab_char_and_size(' ', 2); view.set_tab_char_and_size(' ', 2);
event.keyval = GDK_KEY_Return; event.keyval = GDK_KEY_Return;
{
view.get_buffer()->set_text("{");
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == "{\n"
" \n"
"}");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 2);
}
{
view.get_buffer()->set_text("{\n"
" \n"
"}");
auto iter = view.get_buffer()->begin();
iter.forward_char();
view.get_buffer()->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == "{\n"
" \n"
" \n"
"}");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 2);
}
{
view.get_buffer()->set_text("{\n"
" \n"
"}");
auto iter = view.get_buffer()->get_iter_at_line(2);
iter.backward_char();
view.get_buffer()->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == "{\n"
" \n"
" \n"
"}");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 2);
}
{
view.get_buffer()->set_text("{\n"
" {\n"
"}");
auto iter = view.get_buffer()->get_iter_at_line(2);
iter.backward_char();
view.get_buffer()->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == "{\n"
" {\n"
" \n"
" }\n"
"}");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
}
{
view.get_buffer()->set_text("{\n"
" {\n"
" \n"
" }\n"
"}");
auto iter = view.get_buffer()->get_iter_at_line(2);
iter.backward_char();
view.get_buffer()->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == "{\n"
" {\n"
" \n"
" \n"
" }\n"
"}");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
}
{
view.get_buffer()->set_text("{\n"
"{\n"
"}");
auto iter = view.get_buffer()->get_iter_at_line(1);
iter.forward_char();
view.get_buffer()->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == "{\n"
"{\n"
" \n"
"}\n"
"}");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 2);
}
{
view.get_buffer()->set_text("{\n"
"{\n"
" \n"
"}\n"
"}");
auto iter = view.get_buffer()->get_iter_at_line(1);
iter.forward_char();
view.get_buffer()->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == "{\n"
"{\n"
" \n"
" \n"
"}\n"
"}");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 2);
}
{ {
view.get_buffer()->set_text(" int main() {"); view.get_buffer()->set_text(" int main() {");
view.on_key_press_event(&event); view.on_key_press_event(&event);
@ -31,6 +144,17 @@ int main() {
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
} }
{
view.get_buffer()->set_text(" int main() {//comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " int main() {//comment\n"
" \n"
" }");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
}
{ {
view.get_buffer()->set_text(" int main() { "); view.get_buffer()->set_text(" int main() { ");
view.on_key_press_event(&event); view.on_key_press_event(&event);
@ -53,6 +177,21 @@ int main() {
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
} }
{
view.get_buffer()->set_text(" int main() {//comment\n"
" }");
auto iter = view.get_buffer()->get_insert()->get_iter();
iter.backward_chars(4);
view.get_buffer()->place_cursor(iter);
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " int main() {//comment\n"
" \n"
" }");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
}
{ {
view.get_buffer()->set_text(" int main() {}"); view.get_buffer()->set_text(" int main() {}");
auto iter = view.get_buffer()->get_insert()->get_iter(); auto iter = view.get_buffer()->get_insert()->get_iter();
@ -105,6 +244,129 @@ int main() {
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2); g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
} }
{
view.get_buffer()->set_text(" int main()\n"
" {/*comment*/}");
auto iter = view.get_buffer()->get_insert()->get_iter();
iter.backward_chars(1);
view.get_buffer()->place_cursor(iter);
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " int main()\n"
" {/*comment*/\n"
" \n"
" }");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
}
{
view.get_buffer()->set_text(" else");
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " else\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" else // comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " else // comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" else;");
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " else;\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" else;//comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " else;//comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" else {}");
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " else {}\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" else {}//comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " else {}//comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" } else if(true)");
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " } else if(true)\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" } else if(true)//comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " } else if(true)//comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" } else if(true)\n"
" ;");
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " } else if(true)\n"
" ;\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" } else if(true)//comment\n"
" ;//comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " } else if(true)//comment\n"
" ;//comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" if(true) {\n"
" ;");
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " if(true) {\n"
" ;\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" if(true) { /*comment*/\n"
" ;");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " if(true) { /*comment*/\n"
" ;\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{ {
view.get_buffer()->set_text(" if(true &&\n" view.get_buffer()->set_text(" if(true &&\n"
@ -135,6 +397,19 @@ int main() {
" "); " ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
} }
{
view.get_buffer()->set_text(" if(true &&\n"
" false)//comment\n"
" ;//comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " if(true &&\n"
" false)//comment\n"
" ;//comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{ {
view.get_buffer()->set_text(" if(true &&\n" view.get_buffer()->set_text(" if(true &&\n"
" false)\n" " false)\n"
@ -378,6 +653,17 @@ int main() {
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
} }
{
view.get_buffer()->set_text(" auto func=[] {//comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " auto func=[] {//comment\n"
" \n"
" };");
g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1);
g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4);
}
{ {
view.get_buffer()->set_text(" void Class::Class()\n" view.get_buffer()->set_text(" void Class::Class()\n"
@ -431,6 +717,17 @@ int main() {
" "); " ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
} }
{
view.get_buffer()->set_text(" class Class : BaseClass {\n"
" public://comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " class Class : BaseClass {\n"
" public://comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{ {
view.get_buffer()->set_text(" class Class : BaseClass {\n" view.get_buffer()->set_text(" class Class : BaseClass {\n"
" int a;\n" " int a;\n"
@ -454,6 +751,47 @@ int main() {
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
} }
{
view.get_buffer()->set_text(" /*");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " /*\n"
" * ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" /*\n"
" */");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " /*\n"
" */\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" //comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " //comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" //comment\n"
" //comment");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " //comment\n"
" //comment\n"
" ");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
event.keyval = GDK_KEY_braceleft; event.keyval = GDK_KEY_braceleft;
{ {
@ -465,10 +803,20 @@ int main() {
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
} }
{ {
view.get_buffer()->set_text(" if(true)\n" view.get_buffer()->set_text(" else if(true)\n"
" "); " ");
view.on_key_press_event(&event); view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " if(true)\n" g_assert(view.get_buffer()->get_text() == " else if(true)\n"
" {");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
{
view.get_buffer()->set_text(" else if(true)//comment\n"
" ");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " else if(true)//comment\n"
" {"); " {");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
} }
@ -491,5 +839,15 @@ int main() {
" }"); " }");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
} }
{
view.get_buffer()->set_text(" int main() {//comment\n"
" ");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
view.on_key_press_event(&event);
g_assert(view.get_buffer()->get_text() == " int main() {//comment\n"
" }");
g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end());
}
} }
} }

Loading…
Cancel
Save