]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetInfo.cpp
Strip et al. for citation search
[lyx.git] / src / insets / InsetInfo.cpp
index 981fa536be0a6db30d0fb494571290abe199aa32..46d656c817c9ad9d78a221f321867717e368c566 100644 (file)
@@ -15,6 +15,7 @@
 #include "Buffer.h"
 #include "BufferParams.h"
 #include "BufferView.h"
+#include "Changes.h"
 #include "Cursor.h"
 #include "CutAndPaste.h"
 #include "Font.h"
@@ -37,6 +38,7 @@
 
 #include "frontends/Application.h"
 
+#include "support/Changer.h"
 #include "support/convert.h"
 #include "support/debug.h"
 #include "support/docstream.h"
@@ -157,6 +159,8 @@ set<string> getTexFileList(string const & filename)
                getVectorFromString(file.fileContents("UTF-8"), from_ascii("\n"));
 
        // Normalise paths like /foo//bar ==> /foo/bar
+       // No "auto const &" because doc is modified later
+       // coverity[auto_causes_copy]
        for (auto doc : doclist) {
                doc = subst(doc, from_ascii("\r"), docstring());
                while (contains(doc, from_ascii("//")))
@@ -233,10 +237,8 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
        case MENU_INFO:
        case ICON_INFO: {
                result.push_back(make_pair("custom", _("Custom")));
-               LyXAction::const_iterator fit = lyxaction.func_begin();
-               LyXAction::const_iterator const fen = lyxaction.func_end();
-               for (; fit != fen; ++fit) {
-                       string const lfun = fit->first;
+               for (auto const & name_code : lyxaction) {
+                       string const lfun = name_code.first;
                        if (!lfun.empty())
                                result.push_back(make_pair(lfun, from_ascii(lfun)));
                }
@@ -298,7 +300,11 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
                string const dt = split(name, '@');
                QDate date;
                if (itype == "moddate")
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       date = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).date();
+#else
                        date = QDateTime::fromTime_t(buf->fileName().lastModified()).date();
+#endif
                else if (itype == "fixdate" && !dt.empty()) {
                        QDate const gdate = QDate::fromString(toqstr(dt), Qt::ISODate);
                        date = (gdate.isValid()) ? gdate : QDate::currentDate();
@@ -324,7 +330,11 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
                string const tt = split(name, '@');
                QTime time;
                if (itype == "modtime")
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       time = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).time();
+#else
                        time = QDateTime::fromTime_t(buf->fileName().lastModified()).time();
+#endif
                else if (itype == "fixtime" && !tt.empty()) {
                        QTime const gtime = QTime::fromString(toqstr(tt), Qt::ISODate);
                        time = (gtime.isValid()) ? gtime : QTime::currentTime();
@@ -765,7 +775,22 @@ bool InsetInfo::forceLocalFontSwitch() const
 }
 
 
-void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted) {
+void InsetInfo::metrics(MetricsInfo & mi, Dimension & dim) const
+{
+       const_cast<InsetInfo *>(this)->build();
+       InsetCollapsible::metrics(mi, dim);
+}
+
+
+void InsetInfo::draw(PainterInfo & pi, int x, int y) const
+{
+       Changer chg = changeVar(lyxrc.mark_foreign_language, false);
+       InsetCollapsible::draw(pi, x, y);
+}
+
+void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted)
+
+{
        // If the Buffer is a clone, then we neither need nor want to do any
        // of what follows. We want, rather, just to inherit how things were
        // in the original Buffer. This is especially important for VCS.
@@ -773,9 +798,22 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
        // than in the Buffer we were exporting.
        if (buffer().isClone())
                return;
-
        BufferParams const & bp = buffer().params();
        params_.lang = it.paragraph().getFontSettings(bp, it.pos()).language();
+       InsetCollapsible::updateBuffer(it, utype, deleted);
+}
+
+
+void InsetInfo::build()
+{
+       // If the Buffer is a clone, then we neither need nor want to do any
+       // of what follows. We want, rather, just to inherit how things were
+       // in the original Buffer. This is especially important for VCS.
+       // Otherwise, we could in principle have different settings here
+       // than in the Buffer we were exporting.
+       if (buffer().isClone())
+               return;
+
        Language const * tryguilang = languages.getFromCode(Messages::guiLanguage());
        // Some info insets use the language of the GUI (if available)
        Language const * guilang = tryguilang ? tryguilang : params_.lang;
@@ -948,7 +986,19 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                if (initialized_)
                        break;
                // check in packages.lst
-               if (LaTeXFeatures::isAvailable(params_.name)) {
+               bool available;
+               // we also allow version check with version separated by blank
+               if (contains(params_.name, ' ')) {
+                       string name;
+                       string const version = split(params_.name, name, ' ');
+                       int const y = convert<int>(version.substr(0,4));
+                       int const m = convert<int>(version.substr(4,2));
+                       int const d = convert<int>(version.substr(6,2));
+                       available = LaTeXFeatures::isAvailableAtLeastFrom(name, y, m, d);
+               } else
+                       available = LaTeXFeatures::isAvailable(params_.name);
+
+               if (available) {
                        gui = _("yes");
                        info(from_ascii("yes"), params_.lang);
                } else {
@@ -1079,6 +1129,10 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                igp.lyxscale = percent_scale;
                igp.scale = string();
                igp.width = Length(1, Length::EM);
+               if (contains(file.absoluteFilePath(), from_ascii("math"))
+                   || contains(file.absoluteFilePath(), from_ascii("ert-insert"))
+                   || suffixIs(file.onlyPath().absoluteFilePath(), from_ascii("ipa")))
+                       igp.darkModeSensitive = true;
                inset->setParams(igp);
                clear();
                Font const f(inherit_font, params_.lang);
@@ -1095,7 +1149,7 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                else if (params_.name == "path")
                        setText(from_utf8(os::latex_path(buffer().filePath())), params_.lang);
                else if (params_.name == "class")
-                       setText(from_utf8(bp.documentClass().name()), params_.lang);
+                       setText(from_utf8(buffer().params().documentClass().name()), params_.lang);
                break;
        }
        case InsetInfoParams::VCS_INFO: {
@@ -1146,7 +1200,11 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                                ? split(params_.name, date_format, '@') : string();
                QDate date;
                if (params_.type == InsetInfoParams::MODDATE_INFO)
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       date = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).date();
+#else
                        date = QDateTime::fromTime_t(buffer().fileName().lastModified()).date();
+#endif
                else if (params_.type == InsetInfoParams::FIXDATE_INFO && !date_specifier.empty())
                        date = QDate::fromString(toqstr(date_specifier), Qt::ISODate);
                else
@@ -1163,7 +1221,11 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                                ? split(params_.name, time_format, '@') : string();
                QTime time;
                if (params_.type == InsetInfoParams::MODTIME_INFO)
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       time = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).time();
+#else
                        time = QDateTime::fromTime_t(buffer().fileName().lastModified()).time();
+#endif
                else if (params_.type == InsetInfoParams::FIXTIME_INFO && !time_specifier.empty())
                        time = QTime::fromString(toqstr(time_specifier), Qt::ISODate);
                else
@@ -1175,7 +1237,13 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
 
        // Just to do something with that string
        LYXERR(Debug::INFO, "info inset text: " << gui);
-       InsetCollapsible::updateBuffer(it, utype, deleted);
+}
+
+
+void InsetInfo::validate(LaTeXFeatures & features) const
+{
+       const_cast<InsetInfo *>(this)->build();
+       InsetCollapsible::validate(features);
 }