예제 #1
0
bool EmacsBuffers::setSearchString(const MintString& str, bool fold_case) {
    regbase::flag_type flags = regbase::literal | (fold_case ? regbase::icase : 0);
    _regex_empty = str.empty();
    if (!_regex_empty) {
        std::string s;
        std::copy(str.begin(), str.end(), std::back_inserter(s));
        _regex.assign(s.c_str(), flags);
    } // if
    return true;
} // setSearchString
예제 #2
0
bool EmacsBuffers::setSearchRegex(const MintString& exp, bool fold_case) {
#if 1
    regbase::flag_type flags = boost::regex::basic | boost::regex::bk_vbar;
#else
    regbase::flag_type flags = boost::regex::normal | boost::regex::bk_braces
                               | boost::regex::bk_parens | boost::regex::bk_vbar;
#endif
    if (fold_case)
        flags |= regbase::icase;
    _regex_empty = exp.empty();
    if (!_regex_empty) {
        std::string s;
        std::copy(exp.begin(), exp.end(), std::back_inserter(s));
        _regex.assign(s.c_str(), flags);
    } // if
    return true;
} // setSearchRegex
예제 #3
0
bool EmacsBuffer::insertString(const MintString& str) {
    if (!str.empty()) {
        _modified = true;
#if defined(USE_BUFFER_ROPE) && !defined(USE_MINTSTRING_ROPE)
        _text.insert(_point, str.data(), str.size());
#else
        _text.insert(_point, str);
#endif
        mintcount_t extra_chars = str.size();
        mintcount_t extra_newlines = countNewlines(_point, _point + extra_chars);
        _countNewlines += extra_newlines;
        _pointLine += extra_newlines;
        if (_topline > _point) {
            // topline moves if it is after point
            _topline += extra_chars;
            _toplineLine += extra_newlines;
        } // if
        adjustMarksIns(extra_chars);
        _point += extra_chars;
    } // if
    return true;
} // EmacsBuffer::insertString