Browse Source

Fixed a bug in find_tab_char_and_size().

merge-requests/365/head
eidheim 10 years ago
parent
commit
756bd0a69c
  1. 14
      src/source.cc

14
src/source.cc

@ -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) {

Loading…
Cancel
Save