#include "editor.h"

#include <string>

using std::string;

using size_type = Editor::size_type;

size_type Editor::get_size() const { return text.size(); }

Editor::size_type Editor::find_left_par(size_type pos) const {
    char right_par = text[pos];
    char left_par;

    // Determine the matching left parenthesis for the given right parenthesis
    switch (right_par) {
        case ')': left_par = '('; break;
        case ']': left_par = '['; break;
        case '}': left_par = '{'; break;
        default: return string::npos; // Not a valid right parenthesis
    }

    int balance = 1; // Start with the right parenthesis at text[pos]
    for (size_type i = pos; i-- > 0;) {
        if (text[i] == left_par) {
            balance--;
            if (balance == 0) return i; // Found the matching left parenthesis
        } else if (text[i] == right_par) {
            balance++;
        }
    }

    return string::npos; // No matching left parenthesis found
}