From: Jean-Marc Lasgouttes Date: Fri, 9 Nov 2018 05:07:17 +0000 (-0800) Subject: Change IgnoreFormats to a proper class X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=5c59d5edb001cbdeb10cc5ee1a41b3eb34f8120c;p=features.git Change IgnoreFormats to a proper class Instantiate a global variabble holding the formats and allow to modify it using the helper function setIgnoreFormat. --- diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 85e2d3b426..4fc8528b1a 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -59,6 +59,111 @@ using namespace lyx::support; namespace lyx { + +// Helper class for deciding what should be ignored +class IgnoreFormats { + public: + /// + IgnoreFormats() + : ignoreFamily_(false), ignoreSeries_(false), + ignoreShape_(false), ignoreUnderline_(false), + ignoreMarkUp_(false), ignoreStrikeOut_(false), + ignoreSectioning_(false), ignoreFrontMatter_(true), + ignoreColor_(false), ignoreLanguage_(false) {} + /// + bool getFamily() { return ignoreFamily_; }; + /// + bool getSeries() { return ignoreSeries_; }; + /// + bool getShape() { return ignoreShape_; }; + /// + bool getUnderline() { return ignoreUnderline_; }; + /// + bool getMarkUp() { return ignoreMarkUp_; }; + /// + bool getStrikeOut() { return ignoreStrikeOut_; }; + /// + bool getSectioning() { return ignoreSectioning_; }; + /// + bool getFrontMatter() { return ignoreFrontMatter_; }; + /// + bool getColor() { return ignoreColor_; }; + /// + bool getLanguage() { return ignoreLanguage_; }; + /// + void setIgnoreFormat(string type, bool value); + +private: + /// + bool ignoreFamily_; + /// + bool ignoreSeries_; + /// + bool ignoreShape_; + /// + bool ignoreUnderline_; + /// + bool ignoreMarkUp_; + /// + bool ignoreStrikeOut_; + /// + bool ignoreSectioning_; + /// + bool ignoreFrontMatter_; + /// + bool ignoreColor_; + /// + bool ignoreLanguage_; +}; + + +void IgnoreFormats::setIgnoreFormat(string type, bool value) +{ + if (type == "color") { + ignoreColor_ = value; + } + else if (type == "language") { + ignoreLanguage_ = value; + } + else if (type == "sectioning") { + ignoreSectioning_ = value; + ignoreFrontMatter_ = value; + } + else if (type == "font") { + ignoreSeries_ = value; + ignoreShape_ = value; + ignoreFamily_ = value; + } + else if (type == "series") { + ignoreSeries_ = value; + } + else if (type == "shape") { + ignoreShape_ = value; + } + else if (type == "family") { + ignoreFamily_ = value; + } + else if (type == "markup") { + ignoreMarkUp_ = value; + } + else if (type == "underline") { + ignoreUnderline_ = value; + } + else if (type == "strike") { + ignoreStrikeOut_ = value; + } +} + +// The global variable that can be changed from outside +IgnoreFormats ignoreFormats; + + +void setIgnoreFormat(string type, bool value) +{ + ignoreFormats.setIgnoreFormat(type, value); +} + + namespace { bool parse_bool(docstring & howto) @@ -1121,96 +1226,6 @@ typedef map KeysMap; typedef vector< KeyInfo> Entries; static KeysMap keys = map(); -class IgnoreFormats { - static bool ignoreFamily; - static bool ignoreSeries; - static bool ignoreShape; - static bool ignoreUnderline; - static bool ignoreMarkUp; - static bool ignoreStrikeOut; - static bool ignoreSectioning; - static bool ignoreFrontMatter; - static bool ignoreColor; - static bool ignoreLanguage; - public: - bool getFamily() { return ignoreFamily; }; - bool getSeries() { return ignoreSeries; }; - bool getShape() { return ignoreShape; }; - bool getUnderline() { return ignoreUnderline; }; - bool getMarkUp() { return ignoreMarkUp; }; - bool getStrikeOut() { return ignoreStrikeOut; }; - bool getSectioning() { return ignoreSectioning; }; - bool getFrontMatter() { return ignoreFrontMatter; }; - bool getColor() { return ignoreColor; }; - bool getLanguage() { return ignoreLanguage; }; - - void setIgnoreFormat(string type, bool value); -}; - -bool IgnoreFormats::ignoreFamily = false; -bool IgnoreFormats::ignoreSeries = false; -bool IgnoreFormats::ignoreShape = false; -bool IgnoreFormats::ignoreUnderline = false; -bool IgnoreFormats::ignoreMarkUp = false; -bool IgnoreFormats::ignoreStrikeOut = false; -bool IgnoreFormats::ignoreSectioning = false; -bool IgnoreFormats::ignoreFrontMatter= true; -bool IgnoreFormats::ignoreColor = false; -bool IgnoreFormats::ignoreLanguage = false; - -void IgnoreFormats::setIgnoreFormat(string type, bool value) -{ - if (type == "color") { - ignoreColor = value; - } - else if (type == "language") { - ignoreLanguage = value; - } - else if (type == "sectioning") { - ignoreSectioning = value; - ignoreFrontMatter = value; - } - else if (type == "font") { - ignoreSeries = value; - ignoreShape = value; - ignoreFamily = value; - } - else if (type == "series") { - ignoreSeries = value; - } - else if (type == "shape") { - ignoreShape = value; - } - else if (type == "family") { - ignoreFamily = value; - } - else if (type == "markup") { - ignoreMarkUp = value; - } - else if (type == "underline") { - ignoreUnderline = value; - } - else if (type == "strike") { - ignoreStrikeOut = value; - } -} -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpragmas" -#pragma GCC diagnostic ignored "-Wunused" -#pragma GCC diagnostic ignored "-Wunused-function" - -#ifdef __GNUC__ -#define SUPPRESS_NOT_USED_WARN __attribute__ ((unused)) -#else -#define SUPPRESS_NOT_USED_WARN -#endif - -void SUPPRESS_NOT_USED_WARN setIgnoreFormat(string type, bool value) -{ - IgnoreFormats().setIgnoreFormat(type, value); -} -#pragma GCC diagnostic pop - class LatexInfo { private: int entidx; @@ -1221,7 +1236,6 @@ class LatexInfo { void makeKey(const string &, KeyInfo, bool isPatternString); void processRegion(int start, int region_end); /* remove {} parts */ void removeHead(KeyInfo&, int count=0); - IgnoreFormats f; public: LatexInfo(string par, bool isPatternString) : interval(isPatternString) { @@ -1577,27 +1591,27 @@ void LatexInfo::buildKeys(bool isPatternString) // Know standard keys with 1 parameter. // Split is done, if not at start of region - makeKey("textsf|textss|texttt", KeyInfo(KeyInfo::isStandard, 1, f.getFamily()), isPatternString); - makeKey("textbf", KeyInfo(KeyInfo::isStandard, 1, f.getSeries()), isPatternString); - makeKey("textit|textsc|textsl", KeyInfo(KeyInfo::isStandard, 1, f.getShape()), isPatternString); - makeKey("uuline|uline|uwave", KeyInfo(KeyInfo::isStandard, 1, f.getUnderline()), isPatternString); - makeKey("emph|noun", KeyInfo(KeyInfo::isStandard, 1, f.getMarkUp()), isPatternString); - makeKey("sout|xout", KeyInfo(KeyInfo::isStandard, 1, f.getStrikeOut()), isPatternString); + makeKey("textsf|textss|texttt", KeyInfo(KeyInfo::isStandard, 1, ignoreFormats.getFamily()), isPatternString); + makeKey("textbf", KeyInfo(KeyInfo::isStandard, 1, ignoreFormats.getSeries()), isPatternString); + makeKey("textit|textsc|textsl", KeyInfo(KeyInfo::isStandard, 1, ignoreFormats.getShape()), isPatternString); + makeKey("uuline|uline|uwave", KeyInfo(KeyInfo::isStandard, 1, ignoreFormats.getUnderline()), isPatternString); + makeKey("emph|noun", KeyInfo(KeyInfo::isStandard, 1, ignoreFormats.getMarkUp()), isPatternString); + makeKey("sout|xout", KeyInfo(KeyInfo::isStandard, 1, ignoreFormats.getStrikeOut()), isPatternString); makeKey("section|subsection|subsubsection|paragraph|subparagraph|minisec", - KeyInfo(KeyInfo::isSectioning, 1, f.getSectioning()), isPatternString); + KeyInfo(KeyInfo::isSectioning, 1, ignoreFormats.getSectioning()), isPatternString); makeKey("section*|subsection*|subsubsection*|paragraph*", - KeyInfo(KeyInfo::isSectioning, 1, f.getSectioning()), isPatternString); - makeKey("part|part*|chapter|chapter*", KeyInfo(KeyInfo::isSectioning, 1, f.getSectioning()), isPatternString); - makeKey("title|subtitle|author|subject|publishers|dedication|uppertitleback|lowertitleback|extratitle|lyxaddress|lyxrightaddress", KeyInfo(KeyInfo::isSectioning, 1, f.getFrontMatter()), isPatternString); + KeyInfo(KeyInfo::isSectioning, 1, ignoreFormats.getSectioning()), isPatternString); + makeKey("part|part*|chapter|chapter*", KeyInfo(KeyInfo::isSectioning, 1, ignoreFormats.getSectioning()), isPatternString); + makeKey("title|subtitle|author|subject|publishers|dedication|uppertitleback|lowertitleback|extratitle|lyxaddress|lyxrightaddress", KeyInfo(KeyInfo::isSectioning, 1, ignoreFormats.getFrontMatter()), isPatternString); // Regex makeKey("regexp", KeyInfo(KeyInfo::isRegex, 1, false), isPatternString); // Split is done, if not at start of region - makeKey("textcolor", KeyInfo(KeyInfo::isStandard, 2, f.getColor()), isPatternString); + makeKey("textcolor", KeyInfo(KeyInfo::isStandard, 2, ignoreFormats.getColor()), isPatternString); // Split is done always. - makeKey("foreignlanguage", KeyInfo(KeyInfo::isMain, 2, f.getLanguage()), isPatternString); + makeKey("foreignlanguage", KeyInfo(KeyInfo::isMain, 2, ignoreFormats.getLanguage()), isPatternString); // Know charaters // No split diff --git a/src/lyxfind.h b/src/lyxfind.h index a761725183..896d88e5a0 100644 --- a/src/lyxfind.h +++ b/src/lyxfind.h @@ -117,6 +117,9 @@ public: SearchRestriction restr; }; +/// Set the formats that should be ignored +void setIgnoreFormat(std::string type, bool value); + /// Write a FindAdvOptions instance to a stringstream std::ostringstream & operator<<(std::ostringstream & os, lyx::FindAndReplaceOptions const & opt);