This is a try to allow specific searches for some of our different spaces also in regular expressions. OTOH, as of now '\s' in regex is not yet implemented for spaces like \thinspace etc. (One would need to rewrite the regex to include the utf8-codes, but that is too much struggle)
Kornel
diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp index 1b1193d63b..2deea3097e 100644 --- a/src/insets/InsetSpace.cpp +++ b/src/insets/InsetSpace.cpp @@ -577,82 +577,89 @@ void InsetSpace::read(Lexer & lex) void InsetSpace::latex(otexstream & os, OutputParams const & runparams) const { switch (params_.kind) { case InsetSpaceParams::NORMAL: - os << (runparams.free_spacing ? " " : "\\ "); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\ "); break; case InsetSpaceParams::PROTECTED: if (runparams.local_font && runparams.local_font->language()->lang() == "polutonikogreek") // in babel's polutonikogreek, ~ is active - os << (runparams.free_spacing ? " " : "\\nobreakspace{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\nobreakspace{}"); else - os << (runparams.free_spacing ? ' ' : '~'); + os << (runparams.free_spacing && !runparams.for_search ? ' ' : '~'); break; case InsetSpaceParams::VISIBLE: - os << (runparams.free_spacing ? " " : "\\textvisiblespace{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\textvisiblespace{}"); break; case InsetSpaceParams::THIN: - os << (runparams.free_spacing ? " " : "\\,"); + if (runparams.for_search) + os << "\\thinspace{}"; + else + os << (runparams.free_spacing ? " " : "\\,"); break; case InsetSpaceParams::MEDIUM: - if (params_.math) + if (runparams.for_search) + os << "\\medspace{}"; + else if (params_.math) os << (runparams.free_spacing ? " " : "\\:"); else os << (runparams.free_spacing ? " " : "\\medspace{}"); break; case InsetSpaceParams::THICK: - if (params_.math) + if (runparams.for_search) + os << "\\thickspace{}"; + else if (params_.math) os << (runparams.free_spacing ? " " : "\\;"); else os << (runparams.free_spacing ? " " : "\\thickspace{}"); break; case InsetSpaceParams::QUAD: - os << (runparams.free_spacing ? " " : "\\quad{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\quad{}"); break; case InsetSpaceParams::QQUAD: - os << (runparams.free_spacing ? " " : "\\qquad{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\qquad{}"); break; case InsetSpaceParams::ENSPACE: - os << (runparams.free_spacing ? " " : "\\enspace{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\enspace{}"); break; case InsetSpaceParams::ENSKIP: - os << (runparams.free_spacing ? " " : "\\enskip{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\enskip{}"); break; case InsetSpaceParams::NEGTHIN: - os << (runparams.free_spacing ? " " : "\\negthinspace{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\negthinspace{}"); break; case InsetSpaceParams::NEGMEDIUM: - os << (runparams.free_spacing ? " " : "\\negmedspace{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\negmedspace{}"); break; case InsetSpaceParams::NEGTHICK: - os << (runparams.free_spacing ? " " : "\\negthickspace{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\negthickspace{}"); break; case InsetSpaceParams::HFILL: - os << (runparams.free_spacing ? " " : "\\hfill{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\hfill{}"); break; case InsetSpaceParams::HFILL_PROTECTED: - os << (runparams.free_spacing ? " " : "\\hspace*{\\fill}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\hspace*{\\fill}"); break; case InsetSpaceParams::DOTFILL: - os << (runparams.free_spacing ? " " : "\\dotfill{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\dotfill{}"); break; case InsetSpaceParams::HRULEFILL: - os << (runparams.free_spacing ? " " : "\\hrulefill{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\hrulefill{}"); break; case InsetSpaceParams::LEFTARROWFILL: - os << (runparams.free_spacing ? " " : "\\leftarrowfill{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\leftarrowfill{}"); break; case InsetSpaceParams::RIGHTARROWFILL: - os << (runparams.free_spacing ? " " : "\\rightarrowfill{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\rightarrowfill{}"); break; case InsetSpaceParams::UPBRACEFILL: - os << (runparams.free_spacing ? " " : "\\upbracefill{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\upbracefill{}"); break; case InsetSpaceParams::DOWNBRACEFILL: - os << (runparams.free_spacing ? " " : "\\downbracefill{}"); + os << (runparams.free_spacing && !runparams.for_search ? " " : "\\downbracefill{}"); break; case InsetSpaceParams::CUSTOM: if (runparams.free_spacing) os << " "; else diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 1bd9497488..ed2256b6f7 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -1294,10 +1294,17 @@ static void buildAccentsMap() { accents["imath"] = "ı"; accents["i"] = "ı"; accents["jmath"] = "È·"; accents["cdot"] = "·"; + accents["thickspace"] = u8"\u2004"; + accents["negthickspace"] = u8"\u2004"; + accents["medspace"] = u8"\u2005"; + accents["negmedspace"] = u8"\u2005"; + accents["thinspace"] = u8"\u2009"; + accents["negthinspace"] = u8"\u2009"; + accents["hairspace"] = u8"\u200a"; accents["lyxmathsym{Ã}"] = "Ã"; accents["text{Ã}"] = "Ã"; accents["ddot{\\imath}"] = "ï"; buildaccent("ddot", "aAeEhHiIioOtuUwWxXyY", "äÃëÃḧḦïÃïöÃáºÃ¼ÃẠáºáºáºÃ¿Å¸"); // umlaut @@ -1359,11 +1366,11 @@ static void buildAccentsMap() */ void Intervall::removeAccents() { if (accents.empty()) buildAccentsMap(); - static regex const accre("\\\\(([\\S]|grave|breve|lyxmathsym|text|ddot|dot|acute|dacute|mathring|check|hat|bar|tilde|subdot|ogonek|cedilla|subring|textsubring|subhat|textsubcircum|subtilde|textsubtilde|dgrave|textdoublegrave|rcap|textroundcap|slashed)\\{[^\\{\\}]+\\}|(i|imath|jmath|cdot)(?![a-zA-Z]))"); + static regex const accre("\\\\(([\\S]|grave|breve|lyxmathsym|text|ddot|dot|acute|dacute|mathring|check|hat|bar|tilde|subdot|ogonek|cedilla|subring|textsubring|subhat|textsubcircum|subtilde|textsubtilde|dgrave|textdoublegrave|rcap|textroundcap|slashed)\\{[^\\{\\}]+\\}|(i|imath|jmath|cdot|[a-z]+space)(?![a-zA-Z]))"); smatch sub; for (sregex_iterator itacc(par.begin(), par.end(), accre), end; itacc != end; ++itacc) { sub = *itacc; string key = sub.str(1); if (accents.find(key) != accents.end()) { @@ -2005,10 +2012,11 @@ void LatexInfo::buildKeys(bool isPatternString) makeKey("dots|ldots", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); // Spaces makeKey("quad|qquad|hfill|dotfill", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); makeKey("textvisiblespace|nobreakspace", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); makeKey("negthickspace|negmedspace|negthinspace", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); + makeKey("thickspace|medspace|thinspace", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); // Skip // makeKey("enskip|smallskip|medskip|bigskip|vfill", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); // Custom space/skip, remove the content (== length value) makeKey("vspace|vspace*|hspace|hspace*|mspace", KeyInfo(KeyInfo::noContent, 1, false), isPatternString); // Found in fr/UserGuide.lyx
pgpXJaKqF5wFc.pgp
Description: Digitale Signatur von OpenPGP
-- lyx-devel mailing list lyx-devel@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-devel