]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfind.cpp
lyx-build: check sig in case one really uses download instead of local tarball.
[lyx.git] / src / lyxfind.cpp
index 363172a4c078602f91c149ff87b4e4f6e5c601ad..398f11072bf92e28893c5858e31c5ea149c80c4b 100644 (file)
@@ -303,7 +303,7 @@ pair<bool, int> replaceOne(BufferView * bv, docstring searchstr,
        return make_pair(true, 1);
 }
 
-} // namespace anon
+} // namespace
 
 
 docstring const find2string(docstring const & search,
@@ -517,7 +517,7 @@ bool findChange(BufferView * bv, bool forward)
        return selectChange(cur, forward);
 }
 
-}
+} // namespace
 
 bool findNextChange(BufferView * bv)
 {
@@ -556,7 +556,7 @@ Escapes const & get_regexp_escapes()
                escape_map.push_back(P(".", "_x_."));
                escape_map.push_back(P("\\", "(?:\\\\|\\\\backslash)"));
                escape_map.push_back(P("~", "(?:\\\\textasciitilde|\\\\sim)"));
-               escape_map.push_back(P("^", "(?:\\^|\\\\textasciicircum\\{\\}|\\\\mathcircumflex)"));
+               escape_map.push_back(P("^", "(?:\\^|\\\\textasciicircum\\{\\}|\\\\textasciicircum|\\\\mathcircumflex)"));
                escape_map.push_back(P("_x_", "\\"));
        }
        return escape_map;
@@ -589,12 +589,12 @@ Escapes const & get_regexp_latex_escapes()
 
        static Escapes escape_map;
        if (escape_map.empty()) {
-               escape_map.push_back(P("\\\\", "(?:\\\\\\\\|\\\\backslash|\\\\textbackslash\\{\\})"));
+               escape_map.push_back(P("\\\\", "(?:\\\\\\\\|\\\\backslash|\\\\textbackslash\\{\\}|\\\\textbackslash)"));
                escape_map.push_back(P("(<?!\\\\\\\\textbackslash)\\{", "\\\\\\{"));
                escape_map.push_back(P("(<?!\\\\\\\\textbackslash\\\\\\{)\\}", "\\\\\\}"));
                escape_map.push_back(P("\\[", "\\{\\[\\}"));
                escape_map.push_back(P("\\]", "\\{\\]\\}"));
-               escape_map.push_back(P("\\^", "(?:\\^|\\\\textasciicircum\\{\\}|\\\\mathcircumflex)"));
+               escape_map.push_back(P("\\^", "(?:\\^|\\\\textasciicircum\\{\\}|\\\\textasciicircum|\\\\mathcircumflex)"));
                escape_map.push_back(P("%", "\\\\\\%"));
        }
        return escape_map;
@@ -672,23 +672,13 @@ string escape_for_regex(string s, bool match_latex)
 bool regex_replace(string const & s, string & t, string const & searchstr,
                   string const & replacestr)
 {
-       LYXERR(Debug::FIND, "regex_replace() - s='" << s
-              << "', searchstr='" << searchstr
-              << "', replacestr='" << replacestr);
-#if LYX_USE_STD_REGEX
-       // this is the default anyway
-       lyx::regex e(searchstr, regex_constants::ECMAScript);
-#else
-       // TBD: check
        lyx::regex e(searchstr, regex_constants::ECMAScript);
-#endif
        ostringstream oss;
        ostream_iterator<char, char> it(oss);
        lyx::regex_replace(it, s.begin(), s.end(), e, replacestr);
        // tolerate t and s be references to the same variable
        bool rv = (s != oss.str());
        t = oss.str();
-       LYXERR(Debug::FIND, "regex_replace() - t='" << t << "', rv=" << rv);
        return rv;
 }
 
@@ -988,13 +978,13 @@ int MatchStringAdv::findAux(DocIterator const & cur, int len, bool at_begin) con
                // plus the last subexpression, if a (.*?) was inserted in the constructor.
                if (!braces_match(m[0].first, m[0].second, open_braces))
                        return 0;
-       
+
                // Check braces on segments that matched all (.*?) subexpressions,
                // except the last "padding" one inserted by lyx.
                for (size_t i = 1; i < m.size() - 1; ++i)
                        if (!braces_match(m[i].first, m[i].second))
                                return false;
-       
+
                // Exclude from the returned match length any length
                // due to close wildcards added at end of regexp
                if (close_wildcards == 0)
@@ -1179,8 +1169,8 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
                // Retrieve the math environment type, and add '$' or '$]'
                // or others (\end{equation}) accordingly
                for (int s = cur.depth() - 1; s >= 0; --s) {
-                       CursorSlice const & cs = cur[s];
-                       InsetMath * inset = cs.asInsetMath();
+                       CursorSlice const & cs2 = cur[s];
+                       InsetMath * inset = cs2.asInsetMath();
                        if (inset && inset->asHullInset()) {
                                WriteStream ws(os);
                                inset->asHullInset()->footer_write(ws);
@@ -1249,9 +1239,9 @@ int findForwardAdv(DocIterator & cur, MatchStringAdv & match)
                if (match_len) {
                        for (; !theApp()->longOperationCancelled() && cur; cur.forwardPos()) {
                                LYXERR(Debug::FIND, "Advancing cur: " << cur);
-                               int match_len = match(cur);
-                               LYXERR(Debug::FIND, "match_len: " << match_len);
-                               if (match_len) {
+                               int match_len2 = match(cur);
+                               LYXERR(Debug::FIND, "match_len: " << match_len2);
+                               if (match_len2) {
                                        // Sometimes in finalize we understand it wasn't a match
                                        // and we need to continue the outest loop
                                        int len = findAdvFinalize(cur, match);
@@ -1348,7 +1338,7 @@ int findBackwardsAdv(DocIterator & cur, MatchStringAdv & match)
 }
 
 
-} // anonym namespace
+} // namespace
 
 
 docstring stringifyFromForSearch(FindAndReplaceOptions const & opt,
@@ -1429,13 +1419,15 @@ static void changeFirstCase(Buffer & buffer, TextCase first_case, TextCase other
        pit->changeCase(buffer.params(), pos_type(1), right, others_case);
 }
 
-} // anon namespace
+} // namespace
 
 ///
 static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, MatchStringAdv & matchAdv)
 {
        Cursor & cur = bv->cursor();
-       if (opt.repl_buf_name == docstring())
+       if (opt.repl_buf_name == docstring()
+           || theBufferList().getBuffer(FileName(to_utf8(opt.repl_buf_name)), true) == 0
+           || theBufferList().getBuffer(FileName(to_utf8(opt.find_buf_name)), true) == 0)
                return;
 
        DocIterator sel_beg = cur.selectionBegin();
@@ -1522,6 +1514,11 @@ bool findAdv(BufferView * bv, FindAndReplaceOptions const & opt)
        DocIterator cur;
        int match_len = 0;
 
+       // e.g., when invoking word-findadv from mini-buffer wither with
+       //       wrong options syntax or before ever opening advanced F&R pane
+       if (theBufferList().getBuffer(FileName(to_utf8(opt.find_buf_name)), true) == 0)
+               return false;
+
        try {
                MatchStringAdv matchAdv(bv->buffer(), opt);
                int length = bv->cursor().selectionEnd().pos() - bv->cursor().selectionBegin().pos();
@@ -1615,4 +1612,4 @@ istringstream & operator>>(istringstream & is, FindAndReplaceOptions & opt)
        return is;
 }
 
-} // lyx namespace
+} // namespace lyx