mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-12 22:14:35 +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
|
// set the paragraphs to plain layout if necessary
|
||||||
DocumentClassConstPtr newDocClass = buffer.params().documentClassPtr();
|
DocumentClassConstPtr newDocClass = buffer.params().documentClassPtr();
|
||||||
if (cur.inset().usePlainLayout()) {
|
if (cur.inset().usePlainLayout()) {
|
||||||
@ -194,6 +226,9 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
|
|||||||
// want to invalidate them.
|
// want to invalidate them.
|
||||||
insertion.swap(in.paragraphs());
|
insertion.swap(in.paragraphs());
|
||||||
cap::switchBetweenClasses(oldDocClass, newDocClass, in, errorlist);
|
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());
|
insertion.swap(in.paragraphs());
|
||||||
|
|
||||||
ParagraphList::iterator tmpbuf = insertion.begin();
|
ParagraphList::iterator tmpbuf = insertion.begin();
|
||||||
|
Loading…
Reference in New Issue
Block a user