]> git.lyx.org Git - features.git/commitdiff
Fix a number of issues that were stopping compilation with MSVC 19.
authorRichard Kimberly Heck <rikiheck@lyx.org>
Mon, 4 May 2020 23:41:18 +0000 (19:41 -0400)
committerRichard Kimberly Heck <rikiheck@lyx.org>
Mon, 4 May 2020 23:45:58 +0000 (19:45 -0400)
Patch from Thibaut Cuvelier, modified slightly by me (mostly for style).

12 files changed:
lib/generate_contributions.py
src/BiblioInfo.cpp
src/BranchList.cpp
src/Format.cpp
src/Format.h
src/Lexer.cpp
src/TextClass.cpp
src/TextClass.h
src/frontends/qt/GuiDocument.cpp
src/frontends/tests/biblio.cpp
src/insets/InsetCommandParams.cpp
src/lyxfind.cpp

index 14b610b64b98098e192c7d60276e51ab1c3db9a2..666fb54f12e99f8321d63231eee6642f2613c318 100755 (executable)
@@ -636,6 +636,14 @@ contributors = [
                  "20 Sep 2007",
                  u"Advanced search feature"),
 
+     contributor(u"Thibaut Cuvelier",
+                 "dourouc05 () gmail ! com",
+                 "GPL",
+                 "Re: Patches to improve compatibility with modern C++ standard",
+                 "msg211215",
+                 "4 May 2020",
+                 u"Windows compatibility patches"),
+
      contributor(u"Matthias Kalle Dalheimer",
                  "kalle () kdab ! net",
                  "GPL",
index 2161bc64fc4cb7643cd0f82555ffa459129298df..bf7fb85ed6eaa71d98e7dd1a48cd3ec4a81bf34d 100644 (file)
@@ -1176,13 +1176,9 @@ docstring BibTeXInfo::getValueForKey(string const & oldkey, Buffer const & buf,
 namespace {
 
 // A functor for use with sort, leading to case insensitive sorting
-class compareNoCase: public binary_function<docstring, docstring, bool>
-{
-public:
-       bool operator()(docstring const & s1, docstring const & s2) const {
-               return compare_no_case(s1, s2) < 0;
-       }
-};
+bool compareNoCase(const docstring & a, const docstring & b) {
+       return compare_no_case(a, b) < 0;
+}
 
 } // namespace
 
@@ -1229,7 +1225,7 @@ vector<docstring> const BiblioInfo::getKeys() const
        vector<docstring> bibkeys;
        for (auto const & bi : *this)
                bibkeys.push_back(bi.first);
-       sort(bibkeys.begin(), bibkeys.end(), compareNoCase());
+       sort(bibkeys.begin(), bibkeys.end(), &compareNoCase);
        return bibkeys;
 }
 
index 9c0078b316ef52afb4ae7df2d85e73a8c0da929a..dd09f54171940e1462dff925b54c1927e21f0f01 100644 (file)
@@ -150,9 +150,7 @@ bool BranchList::add(docstring const & s)
                else
                        name = s.substr(i, j - i);
                // Is this name already in the list?
-               bool const already =
-                       find_if(list_.begin(), list_.end(),
-                                        BranchNamesEqual(name)) != list_.end();
+               bool const already = find(name) != nullptr;
                if (!already) {
                        added = true;
                        Branch br;
@@ -182,8 +180,7 @@ bool BranchList::rename(docstring const & oldname,
 {
        if (newname.empty())
                return false;
-       if (find_if(list_.begin(), list_.end(),
-                       BranchNamesEqual(newname)) != list_.end()) {
+       if (find(newname)) {
                // new name already taken
                if (merge)
                      return remove(oldname);
index d6baa83badc3defe880dd2272b15f71ae0dda2e4..0ec1de2d42074cbfd4a82f4214e91a67c7e549fe 100644 (file)
@@ -178,6 +178,19 @@ Format const * Formats::getFormat(string const & name) const
 }
 
 
+Format * Formats::getFormat(string const & name)
+{
+       FormatList::iterator it =
+               find_if(formatlist_.begin(), formatlist_.end(),
+                               [name](Format const & f) { return f.name() == name; });
+
+       if (it != formatlist_.end())
+               return &(*it);
+
+       return nullptr;
+}
+
+
 namespace {
 
 /** Guess the file format name (as in Format::name()) from contents.
@@ -596,15 +609,13 @@ void Formats::add(string const & name, string const & extensions,
                  string const & viewer, string const & editor,
                  string const & mime, int flags)
 {
-       FormatList::iterator it =
-               find_if(formatlist_.begin(), formatlist_.end(),
-                       FormatNamesEqual(name));
-       if (it == formatlist_.end())
-               formatlist_.push_back(Format(name, extensions, prettyname,
-                                           shortcut, viewer, editor, mime, flags));
+       Format * format = getFormat(name);
+       if (format)
+               *format = Format(name, extensions, prettyname, shortcut, viewer,
+                                editor, mime, flags);
        else
-               *it = Format(name, extensions, prettyname, shortcut, viewer,
-                            editor, mime, flags);
+               formatlist_.push_back(Format(name, extensions, prettyname,
+                                               shortcut, viewer, editor, mime, flags));
 }
 
 
@@ -627,22 +638,22 @@ void Formats::sort()
 void Formats::setViewer(string const & name, string const & command)
 {
        add(name);
-       FormatList::iterator it =
-               find_if(formatlist_.begin(), formatlist_.end(),
-                       FormatNamesEqual(name));
-       if (it != formatlist_.end())
-               it->setViewer(command);
+       Format * format = getFormat(name);
+       if (format)
+               format->setViewer(command);
+       else
+               LYXERR0("Unable to set viewer for non-existent format: " << name);
 }
 
 
 void Formats::setEditor(string const & name, string const & command)
 {
        add(name);
-       FormatList::iterator it =
-               find_if(formatlist_.begin(), formatlist_.end(),
-                       FormatNamesEqual(name));
-       if (it != formatlist_.end())
-               it->setEditor(command);
+       Format * format = getFormat(name);
+       if (format)
+               format->setEditor(command);
+       else
+               LYXERR0("Unable to set editor for non-existent format: " << name);
 }
 
 
index 4fcd3c955316d00b7a6c90882429cef1bfa403a3..495d9b1c8ba811df20ece3e526dd7385c787038b 100644 (file)
@@ -152,6 +152,8 @@ public:
        Format & get(FormatList::size_type i) { return formatlist_[i]; }
        /// \returns format named \p name if it exists, otherwise 0
        Format const * getFormat(std::string const & name) const;
+       /// \returns format named \p name if it exists, otherwise 0
+       Format * getFormat(std::string const & name);
        /*!
         * Get the format of \p filename from file contents or, if this
         * fails, from file extension.
index 3f0392902ce76c99ebccdf004f8db1999d515ba3..c290260144aa8b740c37de3a9dfbd0ab92d28608 100644 (file)
@@ -132,25 +132,21 @@ private:
 };
 
 
-
 namespace {
 
-class CompareTags
-       : public binary_function<LexerKeyword, LexerKeyword, bool> {
-public:
-       // used by lower_bound, sort and sorted
-       bool operator()(LexerKeyword const & a, LexerKeyword const & b) const
-       {
-               // we use the ascii version, because in turkish, 'i'
-               // is not the lowercase version of 'I', and thus
-               // turkish locale breaks parsing of tags.
-               return compare_ascii_no_case(a.tag, b.tag) < 0;
-       }
-};
+// used by lower_bound, sort and sorted
+bool compareTags(LexerKeyword const & a, LexerKeyword const & b)
+{
+       // we use the ascii version, because in turkish, 'i'
+       // is not the lowercase version of 'I', and thus
+       // turkish locale breaks parsing of tags.
+       return compare_ascii_no_case(a.tag, b.tag) < 0;
+}
 
 } // namespace
 
 
+
 Lexer::Pimpl::Pimpl(LexerKeyword * tab, int num)
        : is(&fb_), table(tab), no_items(num),
          status(0), lineno(0), commentChar('#')
@@ -196,14 +192,14 @@ void Lexer::Pimpl::verifyTable()
 {
        // Check if the table is sorted and if not, sort it.
        if (table
-           && !lyx::sorted(table, table + no_items, CompareTags())) {
+           && !lyx::sorted(table, table + no_items, &compareTags)) {
                lyxerr << "The table passed to Lexer is not sorted!\n"
                       << "Tell the developers to fix it!" << endl;
                // We sort it anyway to avoid problems.
                lyxerr << "\nUnsorted:" << endl;
                printTable(lyxerr);
 
-               sort(table, table + no_items, CompareTags());
+               sort(table, table + no_items, &compareTags);
                lyxerr << "\nSorted:" << endl;
                printTable(lyxerr);
        }
@@ -440,7 +436,7 @@ int Lexer::Pimpl::searchKeyword(char const * const tag) const
        LexerKeyword search_tag = { tag, 0 };
        LexerKeyword * res =
                lower_bound(table, table + no_items,
-                           search_tag, CompareTags());
+                           search_tag, &compareTags);
        // use the compare_ascii_no_case instead of compare_no_case,
        // because in turkish, 'i' is not the lowercase version of 'I',
        // and thus turkish locale breaks parsing of tags.
index c22e7ae1263303fe3163340ca7d006529e9a7636..91f68f729124df5327a9a7691c5c21d233d53ce6 100644 (file)
@@ -72,20 +72,6 @@ int const LYXFILE_LAYOUT_FORMAT = LAYOUT_FORMAT;
 
 namespace {
 
-class LayoutNamesEqual : public unary_function<Layout, bool> {
-public:
-       LayoutNamesEqual(docstring const & name)
-               : name_(name)
-       {}
-       bool operator()(Layout const & c) const
-       {
-               return c.name() == name_;
-       }
-private:
-       docstring name_;
-};
-
-
 bool layout2layout(FileName const & filename, FileName const & tempfile,
                    int const format = LAYOUT_FORMAT)
 {
@@ -1615,10 +1601,7 @@ string const & TextClass::prerequisites(string const & sep) const
 bool TextClass::hasLayout(docstring const & n) const
 {
        docstring const name = n.empty() ? defaultLayoutName() : n;
-
-       return find_if(layoutlist_.begin(), layoutlist_.end(),
-                      LayoutNamesEqual(name))
-               != layoutlist_.end();
+       return getLayout(name) != nullptr;
 }
 
 
@@ -1635,10 +1618,8 @@ Layout const & TextClass::operator[](docstring const & name) const
 {
        LATTEST(!name.empty());
 
-       const_iterator it =
-               find_if(begin(), end(), LayoutNamesEqual(name));
-
-       if (it == end()) {
+       Layout const * c = getLayout(name);
+       if (!c) {
                LYXERR0("We failed to find the layout '" << name
                       << "' in the layout list. You MUST investigate!");
                for (auto const & lay : *this)
@@ -1649,7 +1630,7 @@ Layout const & TextClass::operator[](docstring const & name) const
                LASSERT(false, return dummy);
        }
 
-       return *it;
+       return *c;
 }
 
 
@@ -1658,9 +1639,8 @@ Layout & TextClass::operator[](docstring const & name)
        LATTEST(!name.empty());
        // Safe to continue, given what we do below.
 
-       iterator it = find_if(begin(), end(), LayoutNamesEqual(name));
-
-       if (it == end()) {
+       Layout * c = getLayout(name);
+       if (!c) {
                LYXERR0("We failed to find the layout '" << to_utf8(name)
                       << "' in the layout list. You MUST investigate!");
                for (auto const & lay : *this)
@@ -1670,10 +1650,10 @@ Layout & TextClass::operator[](docstring const & name)
                LATTEST(false);
                // we are here only in release mode
                layoutlist_.push_back(createBasicLayout(name, true));
-               it = find_if(begin(), end(), LayoutNamesEqual(name));
+               c = getLayout(name);
        }
 
-       return *it;
+       return *c;
 }
 
 
@@ -1684,9 +1664,9 @@ bool TextClass::deleteLayout(docstring const & name)
 
        LayoutList::iterator it =
                remove_if(layoutlist_.begin(), layoutlist_.end(),
-                         LayoutNamesEqual(name));
+                       [name](const Layout &c) { return c.name() == name; });
 
-       LayoutList::iterator end = layoutlist_.end();
+       LayoutList::iterator const end = layoutlist_.end();
        bool const ret = (it != end);
        layoutlist_.erase(it, end);
        return ret;
@@ -1727,6 +1707,30 @@ bool TextClass::load(string const & path) const
 }
 
 
+Layout const * TextClass::getLayout(docstring const & name) const
+{
+       LayoutList::const_iterator cit =
+               find_if(begin(), end(),
+                       [name](const Layout &c) { return c.name() == name; });
+       if (cit == layoutlist_.end())
+               return nullptr;
+
+       return &(*cit);
+}
+
+
+Layout * TextClass::getLayout(docstring const & name)
+{
+       LayoutList::iterator it =
+               find_if(layoutlist_.begin(), layoutlist_.end(),
+                       [name](const Layout &c) { return c.name() == name; });
+       if (it == layoutlist_.end())
+               return nullptr;
+
+       return &(*it);
+}
+
+
 bool DocumentClass::addLayoutIfNeeded(docstring const & n) const
 {
        if (hasLayout(n))
index 65891397b95f6427181062b0abdf390199bb82b8..207b868a4b5379a5e2d5dd48eea288dd5b74317f 100644 (file)
@@ -211,7 +211,11 @@ public:
        bool hasOutputFormat() const { return has_output_format_; }
        /// Return the non-localised names for the toc types.
        std::map<std::string, docstring> const &
-       outlinerNames() const { return outliner_names_; }
+               outlinerNames() const { return outliner_names_; }
+       /// \returns Layout named \p name if it exists, otherwise 0
+       Layout const * getLayout(docstring const & name) const;
+       /// \returns Layout named \p name if it exists, otherwise 0
+       Layout * getLayout(docstring const & name);
 
 protected:
        /// Protect construction
index 8611c23d7c2fff68586670e0d032d8c4f8a42ee0..ff4c3fec0db4fd6950ab256b115604b4cd1db010 100644 (file)
@@ -177,7 +177,6 @@ namespace lyx {
 namespace {
 // used when sorting the textclass list.
 class less_textclass_avail_desc
-       : public binary_function<string, string, int>
 {
 public:
        bool operator()(string const & lhs, string const & rhs) const
index 530d6460b599dd757403257c4b9bd919958b0625..97ae4a9eb7ed0b1734ea67528da25096d592c748 100644 (file)
@@ -40,7 +40,7 @@ typedef map<string, string> InfoMap;
 // data entry matches the required regex_
 // This class is unfortunately copied from ../frontend_helpers.cpp, so we should
 // try to make sure to keep the two in sync.
-class RegexMatch : public unary_function<string, bool>
+class RegexMatch
 {
 public:
        // re is used to construct an instance of lyx::regex.
index 1f7d32110810fe3e18ed6aee8680e75c4dac11d0..727ab5d484d5943e8ff4ec352f56084512ea989c 100644 (file)
@@ -600,7 +600,7 @@ docstring InsetCommandParams::getFirstNonOptParam() const
 {
        ParamInfo::const_iterator it =
                find_if(info_.begin(), info_.end(),
-                       not1(mem_fun_ref(&ParamInfo::ParamData::isOptional)));
+                       [](ParamInfo::ParamData const & d) { return !d.isOptional(); });
        LASSERT(it != info_.end(), return docstring());
        return (*this)[it->name()];
 }
index 6f6d0d53c937dcaa7905623b41a9c94237ce8396..f98f525cbe7f072404e5301771b1aaeca37dcd11 100644 (file)
@@ -178,7 +178,7 @@ bool parse_bool(docstring & howto)
 }
 
 
-class MatchString : public binary_function<Paragraph, pos_type, int>
+class MatchString
 {
 public:
        MatchString(docstring const & s, bool cs, bool mw)