abc [WERBEH|] def" abc [ WERBEH]|def" abc|[WERBEH ]def" abc[|WERBEH] def"
All 4 should be possible, i.e. a space should be inserted. The last two don't fulfill the condition that the previous character is a space, so they are accepted anyway. The first two have the property that we are on a bidi boundary and the cursor boundary flag is false. So the following patch is implementing that.
Stefan
Index: src/Text.cpp
===================================================================
--- src/Text.cpp (Revision 18626)
+++ src/Text.cpp (Arbeitskopie)
@@ -731,8 +732,13 @@
return;
}
BOOST_ASSERT(cur.pos() > 0);
+ // no space if previous was space (or newline),
+ // but allow spaces on both sides of RTL boundaries
(bidi.isBoundary && !boundary),
+ // i.e. "abc [WERBEH|] def" + // and "abc [ WERBEH]|def"if ((par.isLineSeparator(cur.pos() - 1) || par.isNewline(cur.pos() - 1))
- && !par.isDeleted(cur.pos() - 1)) {
+ && !par.isDeleted(cur.pos() - 1)
+ && !(bidi.isBoundary(cur.buffer(), par, cur.pos()) && !
cur.boundary())) {
static bool sent_space_message = false;
if (!sent_space_message) {
cur.message(_("You cannot type two spaces this way.
"
Index: src/Text2.cpp
===================================================================
--- src/Text2.cpp (Revision 18626)
+++ src/Text2.cpp (Arbeitskopie)
@@ -1154,7 +1160,8 @@
&& old.pos() < oldpar.size()
&& oldpar.isLineSeparator(old.pos())
&& oldpar.isLineSeparator(old.pos() - 1)
- && !oldpar.isDeleted(old.pos() - 1)) {
+ && !oldpar.isDeleted(old.pos() - 1)
+ && !old.text()->bidi.isBoundary(old.buffer(),
oldpar, old.pos())) {
oldpar.eraseChar(old.pos() - 1,
cur.buffer().params().trackChanges);
#ifdef WITH_WARNINGS
#warning This will not work anymore when we have multiple views of
the same buffer
rtlepm.patch
Description: Binary data
PGP.sig
Description: Signierter Teil der Nachricht
