34 lines
735 B
C++
34 lines
735 B
C++
#include "editor.h"
|
|
|
|
#include <string>
|
|
|
|
using std::string;
|
|
|
|
using size_type = Editor::size_type;
|
|
|
|
size_type Editor::get_size() const
|
|
{
|
|
return text.size();
|
|
}
|
|
|
|
size_type Editor::find_left_par(size_type pos) const {
|
|
if (pos >= text.size() || (text[pos] != ')' && text[pos] != ']' && text[pos] != '}')) {
|
|
return std::string::npos;
|
|
}
|
|
|
|
char right_par = text[pos];
|
|
char left_par = (right_par == ')') ? '(' : (right_par == ']') ? '[' : '{';
|
|
|
|
int balance = 0;
|
|
|
|
for (int i = pos; i >= 0; --i) {
|
|
if (text[i] == right_par) {
|
|
balance++;
|
|
} else if (text[i] == left_par) {
|
|
balance--;
|
|
if (balance == 0) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
}
|