|
|
|
@ -703,7 +703,7 @@ bool Source::View::on_button_press_event(GdkEventButton *event) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
std::pair<char, unsigned> Source::View::find_tab_char_and_size() { |
|
|
|
std::pair<char, unsigned> Source::View::find_tab_char_and_size() { |
|
|
|
const std::regex indent_regex("^([ \t]+).*$"); |
|
|
|
const std::regex indent_regex("^([ \t]+)(.*)$"); |
|
|
|
auto size=get_buffer()->get_line_count(); |
|
|
|
auto size=get_buffer()->get_line_count(); |
|
|
|
std::unordered_map<char, size_t> tab_chars; |
|
|
|
std::unordered_map<char, size_t> tab_chars; |
|
|
|
std::unordered_map<unsigned, size_t> tab_sizes; |
|
|
|
std::unordered_map<unsigned, size_t> tab_sizes; |
|
|
|
@ -711,8 +711,17 @@ std::pair<char, unsigned> Source::View::find_tab_char_and_size() { |
|
|
|
for(int c=0;c<size;c++) { |
|
|
|
for(int c=0;c<size;c++) { |
|
|
|
auto line=get_line(c); |
|
|
|
auto line=get_line(c); |
|
|
|
std::smatch sm; |
|
|
|
std::smatch sm; |
|
|
|
|
|
|
|
std::string str; |
|
|
|
if(std::regex_match(line, sm, indent_regex)) { |
|
|
|
if(std::regex_match(line, sm, indent_regex)) { |
|
|
|
auto str=sm[1].str(); |
|
|
|
if(sm[2].str().size()==0) |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
str=sm[1].str(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
str=""; |
|
|
|
|
|
|
|
if(line.size()==0) |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
long tab_diff=abs(static_cast<long>(str.size()-last_tab_size)); |
|
|
|
long tab_diff=abs(static_cast<long>(str.size()-last_tab_size)); |
|
|
|
if(tab_diff>0) { |
|
|
|
if(tab_diff>0) { |
|
|
|
@ -734,7 +743,6 @@ std::pair<char, unsigned> Source::View::find_tab_char_and_size() { |
|
|
|
tab_chars[str[0]]=1; |
|
|
|
tab_chars[str[0]]=1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
char found_tab_char=0; |
|
|
|
char found_tab_char=0; |
|
|
|
size_t occurences=0; |
|
|
|
size_t occurences=0; |
|
|
|
for(auto &tab_char: tab_chars) { |
|
|
|
for(auto &tab_char: tab_chars) { |
|
|
|
|