mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 10:58:52 +00:00
Prevent to paste uncodable characters into verbatim
Since we now have proper encoding here, we can set this restriction.
(cherry picked from commit 54846d2d93
)
This commit is contained in:
parent
74a1666531
commit
34097ce8f0
@ -159,6 +159,38 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent to paste uncodable characters in verbatim and ERT.
|
||||
// The encoding is inherited from the context here.
|
||||
docstring uncodable_content;
|
||||
if (target_inset->getLayout().isPassThru() && cur.getEncoding()) {
|
||||
odocstringstream res;
|
||||
Encoding const * e = cur.getEncoding();
|
||||
for (size_t i = 0; i != insertion.size(); ++i) {
|
||||
pos_type end = insertion[i].size();
|
||||
for (pos_type j = 0; j != end; ++j) {
|
||||
char_type const c = insertion[i].getChar(j);
|
||||
if (!e->encodable(c)) {
|
||||
// do not track deletion
|
||||
res << c;
|
||||
insertion[i].eraseChar(j, false);
|
||||
--end;
|
||||
--j;
|
||||
}
|
||||
}
|
||||
}
|
||||
docstring const uncodable = res.str();
|
||||
if (!uncodable.empty()) {
|
||||
if (uncodable.size() == 1)
|
||||
uncodable_content = bformat(_("The character \"%1$s\" is uncodable in this verbatim context "
|
||||
"and thus has not been pasted."),
|
||||
uncodable);
|
||||
else
|
||||
uncodable_content = bformat(_("The characters \"%1$s\" are uncodable in this verbatim context "
|
||||
"and thus have not been pasted."),
|
||||
uncodable);
|
||||
}
|
||||
}
|
||||
|
||||
// set the paragraphs to plain layout if necessary
|
||||
DocumentClassConstPtr newDocClass = buffer.params().documentClassPtr();
|
||||
if (cur.inset().usePlainLayout()) {
|
||||
@ -194,6 +226,9 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
|
||||
// want to invalidate them.
|
||||
insertion.swap(in.paragraphs());
|
||||
cap::switchBetweenClasses(oldDocClass, newDocClass, in, errorlist);
|
||||
// Do this here since switchBetweenClasses clears the errorlist
|
||||
if (!uncodable_content.empty())
|
||||
errorlist.push_back(ErrorItem(_("Uncodable content"), uncodable_content));
|
||||
insertion.swap(in.paragraphs());
|
||||
|
||||
ParagraphList::iterator tmpbuf = insertion.begin();
|
||||
|
Loading…
Reference in New Issue
Block a user