Merge branch 'master' of git.lyx.org:lyx

This commit is contained in:
Juergen Spitzmueller 2022-06-12 13:35:52 +02:00
commit c29f31e982
6 changed files with 41 additions and 92 deletions

View File

@ -100,5 +100,11 @@ ctests : export/export/lyx2lyx/revert-languages-polyglossia-primary_lyx22
Report : https://github.com/latex3/latex2e/issues/836
Fix : none yet, but confirmed as a bug.
Fix : https://github.com/latex3/latex2e/commit/878a4715df024fc3425d2bfd5d3d138b9395c178
ctests : doc/EmbeddedObjects
Report : https://github.com/gsilano/EuropeCV/issues/29
Fix : none yet
ctests : Modern_CV

View File

@ -562,7 +562,7 @@ Row::Elements Row::shortenIfNeeded(int const w, int const next_width)
Element brk = *cit_brk;
/* If the current element is an inset that allows breaking row
* after itself, and if the row is already short enough after
* this inset, then cut right after this element.
* this element, then cut right after it.
*/
if (wid_brk <= w && brk.row_flags & CanBreakAfter) {
end_ = brk.endpos;
@ -572,6 +572,16 @@ Row::Elements Row::shortenIfNeeded(int const w, int const next_width)
}
// assume now that the current element is not there
wid_brk -= brk.dim.wid;
/* If the current element is an inset that allows breaking row
* before itself, and if the row is already short enough before
* this element, then cut right before it.
*/
if (wid_brk <= w && brk.row_flags & CanBreakBefore && cit_brk != beg) {
end_ = (cit_brk -1)->endpos;
dim_.wid = wid_brk;
moveElements(elements_, cit_brk, tail);
return tail;
}
/* We have found a suitable separable element. This is the common case.
* Try to break it cleanly at a length that is both
* - less than the available space on the row

View File

@ -16,10 +16,9 @@
namespace lyx {
/* The list of possible flags, that can be combined.
* Some flags that should logically be here (e.g.,
* CanBreakBefore), do not exist. This is because the need has not
* been identitfied yet.
/* The list of possible flags, that can be combined. Some flags that
* should logically be here (e.g., AlwaysBreakBefore), do not exist.
* This is because the need has not been identitfied yet.
*
* Priorities when before/after disagree:
* AlwaysBreak* > NoBreak* > Break* or CanBreak*.
@ -30,26 +29,28 @@ enum RowFlags {
Inline = 0,
// break row before this element if the row is not empty
BreakBefore = 1 << 0,
// break row whenever needed before this element
CanBreakBefore = 1 << 1,
// Avoid breaking row before this element
NoBreakBefore = 1 << 1,
NoBreakBefore = 1 << 2,
// flush the row before this element (useful with BreakBefore)
FlushBefore = 1 << 2,
FlushBefore = 1 << 3,
// force new (maybe empty) row after this element
AlwaysBreakAfter = 1 << 3,
AlwaysBreakAfter = 1 << 4,
// break row after this element if there are more elements
BreakAfter = 1 << 4,
BreakAfter = 1 << 5,
// break row whenever needed after this element
CanBreakAfter = 1 << 5,
CanBreakAfter = 1 << 6,
// Avoid breaking row after this element
NoBreakAfter = 1 << 6,
NoBreakAfter = 1 << 7,
// The contents of the row may be broken in two (e.g. string)
CanBreakInside = 1 << 7,
CanBreakInside = 1 << 8,
// Flush the row that ends with this element
Flush = 1 << 8,
Flush = 1 << 9,
// specify an alignment (left, right) for a display element
// (default is center)
AlignLeft = 1 << 9,
AlignRight = 1 << 10,
AlignLeft = 1 << 10,
AlignRight = 1 << 11,
// A display element breaks row at both ends
Display = FlushBefore | BreakBefore | BreakAfter,
// Flags that concern breaking after element

View File

@ -43,6 +43,8 @@ public:
static std::string params2string(InsetIndexParams const &);
///
static void string2params(std::string const &, InsetIndexParams &);
///
int rowFlags() const override { return CanBreakBefore | CanBreakAfter; }
private:
///
bool hasSettings() const override;

View File

@ -29,6 +29,8 @@ public:
docstring const & counterValue() const { return counter_value_; }
///
docstring const & prettyCounter() const { return pretty_counter_; }
///
int rowFlags() const override { return CanBreakBefore | CanBreakAfter; }
/// Updates only the label string, doesn't handle undo nor references.
void updateLabel(docstring const & new_label, bool const active = true);
/// Updates the label and the references to it.

View File

@ -1111,7 +1111,7 @@ private:
** @todo Normalization should also expand macros, if the corresponding
** search option was checked.
**/
string normalize(docstring const & s, bool ignore_fomat) const;
string convertLF2Space(docstring const & s, bool ignore_fomat) const;
// normalized string to search
string par_as_string;
// regular expression to use for searching
@ -3669,7 +3669,7 @@ MatchStringAdv::MatchStringAdv(lyx::Buffer & buf, FindAndReplaceOptions & opt)
previous_single_replace = true;
}
// When using regexp, braces are hacked already by escape_for_regex()
par_as_string = normalize(ds, opt.ignoreformat);
par_as_string = convertLF2Space(ds, opt.ignoreformat);
open_braces = 0;
close_wildcards = 0;
@ -3794,7 +3794,7 @@ MatchResult MatchStringAdv::findAux(DocIterator const & cur, int len, MatchStrin
docstring docstr = stringifyFromForSearch(opt, cur, len);
string str;
str = normalize(docstr, opt.ignoreformat);
str = convertLF2Space(docstr, opt.ignoreformat);
if (!opt.ignoreformat) {
str = correctlanguagesetting(str, false, !opt.ignoreformat);
// remove closing '}' and '\n' to allow for use of '$' in regex
@ -3988,8 +3988,7 @@ static bool simple_replace(string &t, string from, string to)
}
#endif
#if 1
static string convertLF2Space(docstring const &s, bool ignore_format)
string MatchStringAdv::convertLF2Space(docstring const &s, bool ignore_format) const
{
// Using original docstring to handle '\n'
@ -4056,77 +4055,6 @@ static string convertLF2Space(docstring const &s, bool ignore_format)
return(t.str());
}
#else
static string convertLF2Space(docstring const & s, bool ignore_format)
{
// Using utf8-converted string to handle '\n'
string t;
t = lyx::to_utf8(s);
// Remove \n at begin
while (!t.empty() && t[0] == '\n')
t = t.substr(1);
// Remove \n* at end
while (!t.empty() && t[t.size() - 1] == '\n') {
t = t.substr(0, t.size() - 1);
}
size_t pos;
// Handle all other '\n'
while ((pos = t.find("\n")) != string::npos) {
if (pos > 1 && t[pos-1] == '\\' && t[pos-2] == '\\' ) {
// Handle '\\\n'
if (isPrintableNonspace(t[pos+1]) && ((pos < 3) || isPrintableNonspace(t[pos-3]))) {
t.replace(pos-2, 3, " ");
}
else {
// Already a space there
t.replace(pos-2, 3, "");
}
}
else {
if (!isAlnumASCII(t[pos+1]) || !isAlnumASCII(t[pos-1])) {
// '\n' adjacent to non-alpha-numerics, discard
t.replace(pos, 1, "");
}
else {
// Replace all other \n with spaces
t.replace(pos, 1, " ");
}
if (!ignore_format) {
size_t count = 0;
while ((pos > count + 1) && (t[pos - 1 -count] == '%')) {
count++;
}
if (count > 0) {
t.replace(pos - count, count, "");
}
}
}
}
return(t);
}
#endif
string MatchStringAdv::normalize(docstring const & s, bool ignore_format) const
{
string t = convertLF2Space(s, ignore_format);
// The following replaces are not appropriate in non-format-search mode
if (!ignore_format) {
// Remove stale empty \emph{}, \textbf{} and similar blocks from latexify
// Kornel: Added textsl, textsf, textit, texttt and noun
// + allow to seach for colored text too
LYXERR(Debug::FINDVERBOSE, "Removing stale empty macros from: " << t);
while (regex_replace(t, t, "\\\\(emph|noun|text(bf|sl|sf|it|tt)|(u|uu)line|(s|x)out|uwave)(\\{(\\{\\})?\\})+", ""))
LYXERR(Debug::FINDVERBOSE, " further removing stale empty \\emph{}, \\textbf{} macros from: " << t);
while (regex_replace(t, t, "\\\\((sub)?(((sub)?section)|paragraph)|part)\\*?(\\{(\\{\\})?\\})+", ""))
LYXERR(Debug::FINDVERBOSE, " further removing stale empty \\section{}, \\part{}, \\paragraph{} macros from: " << t);
while (regex_replace(t, t, "\\\\(foreignlanguage|textcolor|item)\\{[a-z]+\\}(\\{(\\{\\})?\\})+", ""));
}
return t;
}
docstring stringifyFromCursor(DocIterator const & cur, int len)
{
LYXERR(Debug::FINDVERBOSE, "Stringifying with len=" << len << " from cursor at pos: " << cur);