[Libreoffice-commits] core.git: Branch 'distro/lhm/libreoffice-6-1+backports' - basegfx/source vcl/qa vcl/source

2020-10-17 Thread Armin.Le.Grand (CIB) (via logerrit)
 basegfx/source/polygon/b2dpolygontools.cxx  |   15 +++---
 basegfx/source/polygon/b2dpolypolygoncutter.cxx |   36 +++
 vcl/qa/cppunit/pdfexport/pdfexport.cxx  |   28 ++--
 vcl/source/gdi/pdfwriter_impl.cxx   |   56 ++--
 4 files changed, 102 insertions(+), 33 deletions(-)

New commits:
commit e48467e85a2f5cb06eb1156f1aa539b5a66b5290
Author: Armin.Le.Grand (CIB) 
AuthorDate: Tue Mar 3 11:34:45 2020 +0100
Commit: Thorsten Behrens 
CommitDate: Sat Oct 17 10:54:49 2020 +0200

tdf#130150 Improve clipping in PDF export

For more info and discusson please have a look
at the task. It reverts the change from tdf#99680
which did a wrong paradigm change in how clip in
Region(s) is defined and tries to fix the
underlying error in a more correct way.
This includes problems noted in tdf#44388 and
tdf#113449.
This is a decent improvement, but - due to dealing
with numerical problems - not yet the whole healing.
Still thinking about how to solve this for good.
Adapted PdfExportTest::testTdf99680() and
PdfExportTest::testTdf99680_2() as needed, empty
clip regions are allowed again. Added comments, too.
Had to change solvePolygonOperationAnd to work
on ranges if both inputs *are* ranges. The AND-case
is then completely solvable. Also increased geometry
for transformations of clip geometries - may help
later.

Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens 

Conflicts:
vcl/source/gdi/pdfwriter_impl.cxx

Change-Id: I2370447597faa6efb81d58ee31c63654e304262e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104207
Tested-by: Thorsten Behrens 
Reviewed-by: Thorsten Behrens 

diff --git a/basegfx/source/polygon/b2dpolygontools.cxx 
b/basegfx/source/polygon/b2dpolygontools.cxx
index 9b2406074a71..4e40ddc74860 100644
--- a/basegfx/source/polygon/b2dpolygontools.cxx
+++ b/basegfx/source/polygon/b2dpolygontools.cxx
@@ -343,15 +343,15 @@ namespace basegfx
 const B2DPoint aPreviousPoint(aCurrentPoint);
 aCurrentPoint = aCandidate.getB2DPoint(a);
 
-// cross-over in Y?
-const bool bCompYA(fTools::more(aPreviousPoint.getY(), 
rPoint.getY()));
-const bool bCompYB(fTools::more(aCurrentPoint.getY(), 
rPoint.getY()));
+// cross-over in Y? tdf#130150 use full precision, no 
need for epsilon
+const bool bCompYA(aPreviousPoint.getY() > 
rPoint.getY());
+const bool bCompYB(aCurrentPoint.getY() > 
rPoint.getY());
 
 if(bCompYA != bCompYB)
 {
-// cross-over in X?
-const bool 
bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
-const bool 
bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+// cross-over in X? tdf#130150 use full precision, 
no need for epsilon
+const bool bCompXA(aPreviousPoint.getX() > 
rPoint.getX());
+const bool bCompXB(aCurrentPoint.getX() > 
rPoint.getX());
 
 if(bCompXA == bCompXB)
 {
@@ -367,7 +367,8 @@ namespace basegfx
 (aPreviousPoint.getX() - 
aCurrentPoint.getX()) /
 (aPreviousPoint.getY() - 
aCurrentPoint.getY()));
 
-if(fTools::more(fCompare, rPoint.getX()))
+// tdf#130150 use full precision, no need for 
epsilon
+if(fCompare > rPoint.getX())
 {
 bRetval = !bRetval;
 }
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx 
b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
index 4fd7bf369d85..1d2b3efb7363 100644
--- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -986,6 +986,42 @@ namespace basegfx
 }
 else
 {
+// tdf#130150 shortcut & precision: If both are simple ranges,
+// solve based on ranges
+if(basegfx::utils::isRectangle(rCandidateA) && 
basegfx::utils::isRectangle(rCandidateB))
+{
+// *if* both are ranges, AND always can be solved
+const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange());
+const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange());
+
+if(aRangeA.isInside(aRangeB))
+{
+// 2nd completely inside 1st -> 

[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - basegfx/source vcl/qa vcl/source

2020-03-17 Thread Armin.Le.Grand (CIB) (via logerrit)
 basegfx/source/polygon/b2dpolygontools.cxx  |   15 +++---
 basegfx/source/polygon/b2dpolypolygoncutter.cxx |   36 
 vcl/qa/cppunit/pdfexport/pdfexport.cxx  |   28 +++-
 vcl/source/gdi/pdfwriter_impl.cxx   |   54 +---
 4 files changed, 100 insertions(+), 33 deletions(-)

New commits:
commit 3bd5de707a361fc23d53dd5ad76c147722dfa2e9
Author: Armin.Le.Grand (CIB) 
AuthorDate: Tue Mar 3 11:34:45 2020 +0100
Commit: Miklos Vajna 
CommitDate: Tue Mar 17 11:20:48 2020 +0100

tdf#130150 Improve clipping in PDF export

For more info and discusson please have a look
at the task. It reverts the change from tdf#99680
which did a wrong paradigm change in how clip in
Region(s) is defined and tries to fix the
underlying error in a more correct way.
This includes problems noted in tdf#44388 and
tdf#113449.
This is a decent improvement, but - due to dealing
with numerical problems - not yet the whole healing.
Still thinking about how to solve this for good.
Adapted PdfExportTest::testTdf99680() and
PdfExportTest::testTdf99680_2() as needed, empty
clip regions are allowed again. Added comments, too.
Had to change solvePolygonOperationAnd to work
on ranges if both inputs *are* ranges. The AND-case
is then completely solvable. Also increased geometry
for transformations of clip geometries - may help
later.

Change-Id: I2370447597faa6efb81d58ee31c63654e304262e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens 
(cherry picked from commit 6dff631f8f4b964b48aadde52a1e1b8b04b9ba53)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89923
Reviewed-by: Miklos Vajna 

diff --git a/basegfx/source/polygon/b2dpolygontools.cxx 
b/basegfx/source/polygon/b2dpolygontools.cxx
index 4ac68958eaa2..cbc18ee74203 100644
--- a/basegfx/source/polygon/b2dpolygontools.cxx
+++ b/basegfx/source/polygon/b2dpolygontools.cxx
@@ -333,15 +333,15 @@ namespace basegfx
 const B2DPoint aPreviousPoint(aCurrentPoint);
 aCurrentPoint = aCandidate.getB2DPoint(a);
 
-// cross-over in Y?
-const bool bCompYA(fTools::more(aPreviousPoint.getY(), 
rPoint.getY()));
-const bool bCompYB(fTools::more(aCurrentPoint.getY(), 
rPoint.getY()));
+// cross-over in Y? tdf#130150 use full precision, no 
need for epsilon
+const bool bCompYA(aPreviousPoint.getY() > 
rPoint.getY());
+const bool bCompYB(aCurrentPoint.getY() > 
rPoint.getY());
 
 if(bCompYA != bCompYB)
 {
-// cross-over in X?
-const bool 
bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
-const bool 
bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+// cross-over in X? tdf#130150 use full precision, 
no need for epsilon
+const bool bCompXA(aPreviousPoint.getX() > 
rPoint.getX());
+const bool bCompXB(aCurrentPoint.getX() > 
rPoint.getX());
 
 if(bCompXA == bCompXB)
 {
@@ -357,7 +357,8 @@ namespace basegfx
 (aPreviousPoint.getX() - 
aCurrentPoint.getX()) /
 (aPreviousPoint.getY() - 
aCurrentPoint.getY()));
 
-if(fTools::more(fCompare, rPoint.getX()))
+// tdf#130150 use full precision, no need for 
epsilon
+if(fCompare > rPoint.getX())
 {
 bRetval = !bRetval;
 }
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx 
b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
index 0ea1e8b9b863..9d2e574c1b2d 100644
--- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -986,6 +986,42 @@ namespace basegfx
 }
 else
 {
+// tdf#130150 shortcut & precision: If both are simple ranges,
+// solve based on ranges
+if(basegfx::utils::isRectangle(rCandidateA) && 
basegfx::utils::isRectangle(rCandidateB))
+{
+// *if* both are ranges, AND always can be solved
+const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange());
+const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange());
+
+if(aRangeA.isInside(aRangeB))
+{
+// 2nd completely inside 1st -> 2nd is result of AND
+  

[Libreoffice-commits] core.git: Branch 'feature/cib_contract57d' - basegfx/source vcl/qa vcl/source

2020-03-05 Thread Armin.Le.Grand (CIB) (via logerrit)
 basegfx/source/polygon/b2dpolygontools.cxx  |   15 +++---
 basegfx/source/polygon/b2dpolypolygoncutter.cxx |   36 
 vcl/qa/cppunit/pdfexport/pdfexport.cxx  |   28 +++-
 vcl/source/gdi/pdfwriter_impl.cxx   |   54 +---
 4 files changed, 100 insertions(+), 33 deletions(-)

New commits:
commit 663a800ed3d9e31ccc298cbb16f5b8489af16be5
Author: Armin.Le.Grand (CIB) 
AuthorDate: Tue Mar 3 11:34:45 2020 +0100
Commit: Thorsten Behrens 
CommitDate: Thu Mar 5 10:13:53 2020 +0100

tdf#130150 Improve clipping in PDF export

For more info and discusson please have a look
at the task. It reverts the change from tdf#99680
which did a wrong paradigm change in how clip in
Region(s) is defined and tries to fix the
underlying error in a more correct way.
This includes problems noted in tdf#44388 and
tdf#113449.
This is a decent improvement, but - due to dealing
with numerical problems - not yet the whole healing.
Still thinking about how to solve this for good.
Adapted PdfExportTest::testTdf99680() and
PdfExportTest::testTdf99680_2() as needed, empty
clip regions are allowed again. Added comments, too.
Had to change solvePolygonOperationAnd to work
on ranges if both inputs *are* ranges. The AND-case
is then completely solvable. Also increased geometry
for transformations of clip geometries - may help
later.

Change-Id: I2370447597faa6efb81d58ee31c63654e304262e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens 

diff --git a/basegfx/source/polygon/b2dpolygontools.cxx 
b/basegfx/source/polygon/b2dpolygontools.cxx
index 4ac68958eaa2..cbc18ee74203 100644
--- a/basegfx/source/polygon/b2dpolygontools.cxx
+++ b/basegfx/source/polygon/b2dpolygontools.cxx
@@ -333,15 +333,15 @@ namespace basegfx
 const B2DPoint aPreviousPoint(aCurrentPoint);
 aCurrentPoint = aCandidate.getB2DPoint(a);
 
-// cross-over in Y?
-const bool bCompYA(fTools::more(aPreviousPoint.getY(), 
rPoint.getY()));
-const bool bCompYB(fTools::more(aCurrentPoint.getY(), 
rPoint.getY()));
+// cross-over in Y? tdf#130150 use full precision, no 
need for epsilon
+const bool bCompYA(aPreviousPoint.getY() > 
rPoint.getY());
+const bool bCompYB(aCurrentPoint.getY() > 
rPoint.getY());
 
 if(bCompYA != bCompYB)
 {
-// cross-over in X?
-const bool 
bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
-const bool 
bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+// cross-over in X? tdf#130150 use full precision, 
no need for epsilon
+const bool bCompXA(aPreviousPoint.getX() > 
rPoint.getX());
+const bool bCompXB(aCurrentPoint.getX() > 
rPoint.getX());
 
 if(bCompXA == bCompXB)
 {
@@ -357,7 +357,8 @@ namespace basegfx
 (aPreviousPoint.getX() - 
aCurrentPoint.getX()) /
 (aPreviousPoint.getY() - 
aCurrentPoint.getY()));
 
-if(fTools::more(fCompare, rPoint.getX()))
+// tdf#130150 use full precision, no need for 
epsilon
+if(fCompare > rPoint.getX())
 {
 bRetval = !bRetval;
 }
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx 
b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
index beb0136912fd..74d25d18ed25 100644
--- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -986,6 +986,42 @@ namespace basegfx
 }
 else
 {
+// tdf#130150 shortcut & precision: If both are simple ranges,
+// solve based on ranges
+if(basegfx::utils::isRectangle(rCandidateA) && 
basegfx::utils::isRectangle(rCandidateB))
+{
+// *if* both are ranges, AND always can be solved
+const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange());
+const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange());
+
+if(aRangeA.isInside(aRangeB))
+{
+// 2nd completely inside 1st -> 2nd is result of AND
+return rCandidateB;
+}
+
+if(aRangeB.isInside(aRangeA))
+{
+// 2nd 

[Libreoffice-commits] core.git: Branch 'feature/cib_contract57c' - 2 commits - basegfx/source sw/qa sw/source vcl/qa vcl/source

2020-03-03 Thread Armin.Le.Grand (CIB) (via logerrit)
Rebased ref, commits from common ancestor:
commit 6608f1f6a24c02b61fa22e419241a8501f2d4ef6
Author: Armin.Le.Grand (CIB) 
AuthorDate: Tue Mar 3 11:34:45 2020 +0100
Commit: Thorsten Behrens 
CommitDate: Wed Mar 4 02:02:19 2020 +0100

tdf#130150 Improve clipping in PDF export

For more info and discusson please have a look
at the task. It reverts the change from tdf#99680
which did a wrong paradigm change in how clip in
Region(s) is defined and tries to fix the
underlying error in a more correct way.
This includes problems noted in tdf#44388 and
tdf#113449.
This is a decent improvement, but - due to dealing
with numerical problems - not yet the whole healing.
Still thinking about how to solve this for good.
Adapted PdfExportTest::testTdf99680() and
PdfExportTest::testTdf99680_2() as needed, empty
clip regions are allowed again. Added comments, too.
Had to change solvePolygonOperationAnd to work
on ranges if both inputs *are* ranges. The AND-case
is then completely solvable. Also increased geometry
for transformations of clip geometries - may help
later.

Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens 

Conflicts:
vcl/source/gdi/pdfwriter_impl.cxx

Change-Id: I2370447597faa6efb81d58ee31c63654e304262e

diff --git a/basegfx/source/polygon/b2dpolygontools.cxx 
b/basegfx/source/polygon/b2dpolygontools.cxx
index db3365eee313..766a7cd4d361 100644
--- a/basegfx/source/polygon/b2dpolygontools.cxx
+++ b/basegfx/source/polygon/b2dpolygontools.cxx
@@ -343,15 +343,15 @@ namespace basegfx
 const B2DPoint aPreviousPoint(aCurrentPoint);
 aCurrentPoint = aCandidate.getB2DPoint(a);
 
-// cross-over in Y?
-const bool bCompYA(fTools::more(aPreviousPoint.getY(), 
rPoint.getY()));
-const bool bCompYB(fTools::more(aCurrentPoint.getY(), 
rPoint.getY()));
+// cross-over in Y? tdf#130150 use full precision, no 
need for epsilon
+const bool bCompYA(aPreviousPoint.getY() > 
rPoint.getY());
+const bool bCompYB(aCurrentPoint.getY() > 
rPoint.getY());
 
 if(bCompYA != bCompYB)
 {
-// cross-over in X?
-const bool 
bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
-const bool 
bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+// cross-over in X? tdf#130150 use full precision, 
no need for epsilon
+const bool bCompXA(aPreviousPoint.getX() > 
rPoint.getX());
+const bool bCompXB(aCurrentPoint.getX() > 
rPoint.getX());
 
 if(bCompXA == bCompXB)
 {
@@ -367,7 +367,8 @@ namespace basegfx
 (aPreviousPoint.getX() - 
aCurrentPoint.getX()) /
 (aPreviousPoint.getY() - 
aCurrentPoint.getY()));
 
-if(fTools::more(fCompare, rPoint.getX()))
+// tdf#130150 use full precision, no need for 
epsilon
+if(fCompare > rPoint.getX())
 {
 bRetval = !bRetval;
 }
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx 
b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
index 4fd7bf369d85..1d2b3efb7363 100644
--- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -986,6 +986,42 @@ namespace basegfx
 }
 else
 {
+// tdf#130150 shortcut & precision: If both are simple ranges,
+// solve based on ranges
+if(basegfx::utils::isRectangle(rCandidateA) && 
basegfx::utils::isRectangle(rCandidateB))
+{
+// *if* both are ranges, AND always can be solved
+const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange());
+const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange());
+
+if(aRangeA.isInside(aRangeB))
+{
+// 2nd completely inside 1st -> 2nd is result of AND
+return rCandidateB;
+}
+
+if(aRangeB.isInside(aRangeA))
+{
+// 2nd completely inside 1st -> 2nd is result of AND
+return rCandidateA;
+}
+
+// solve by intersection
+basegfx::B2DRange aIntersect(aRangeA);
+

[Libreoffice-commits] core.git: basegfx/source vcl/qa vcl/source

2020-03-03 Thread Armin.Le.Grand (CIB) (via logerrit)
 basegfx/source/polygon/b2dpolygontools.cxx  |   15 +++---
 basegfx/source/polygon/b2dpolypolygoncutter.cxx |   36 
 vcl/qa/cppunit/pdfexport/pdfexport.cxx  |   28 +++-
 vcl/source/gdi/pdfwriter_impl.cxx   |   54 +---
 4 files changed, 100 insertions(+), 33 deletions(-)

New commits:
commit 6dff631f8f4b964b48aadde52a1e1b8b04b9ba53
Author: Armin.Le.Grand (CIB) 
AuthorDate: Tue Mar 3 11:34:45 2020 +0100
Commit: Thorsten Behrens 
CommitDate: Wed Mar 4 01:28:03 2020 +0100

tdf#130150 Improve clipping in PDF export

For more info and discusson please have a look
at the task. It reverts the change from tdf#99680
which did a wrong paradigm change in how clip in
Region(s) is defined and tries to fix the
underlying error in a more correct way.
This includes problems noted in tdf#44388 and
tdf#113449.
This is a decent improvement, but - due to dealing
with numerical problems - not yet the whole healing.
Still thinking about how to solve this for good.
Adapted PdfExportTest::testTdf99680() and
PdfExportTest::testTdf99680_2() as needed, empty
clip regions are allowed again. Added comments, too.
Had to change solvePolygonOperationAnd to work
on ranges if both inputs *are* ranges. The AND-case
is then completely solvable. Also increased geometry
for transformations of clip geometries - may help
later.

Change-Id: I2370447597faa6efb81d58ee31c63654e304262e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens 

diff --git a/basegfx/source/polygon/b2dpolygontools.cxx 
b/basegfx/source/polygon/b2dpolygontools.cxx
index c194a38dc9d2..1cb61585e2b4 100644
--- a/basegfx/source/polygon/b2dpolygontools.cxx
+++ b/basegfx/source/polygon/b2dpolygontools.cxx
@@ -331,15 +331,15 @@ namespace basegfx::utils
 const B2DPoint aPreviousPoint(aCurrentPoint);
 aCurrentPoint = aCandidate.getB2DPoint(a);
 
-// cross-over in Y?
-const bool bCompYA(fTools::more(aPreviousPoint.getY(), 
rPoint.getY()));
-const bool bCompYB(fTools::more(aCurrentPoint.getY(), 
rPoint.getY()));
+// cross-over in Y? tdf#130150 use full precision, no 
need for epsilon
+const bool bCompYA(aPreviousPoint.getY() > 
rPoint.getY());
+const bool bCompYB(aCurrentPoint.getY() > 
rPoint.getY());
 
 if(bCompYA != bCompYB)
 {
-// cross-over in X?
-const bool 
bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX()));
-const bool 
bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX()));
+// cross-over in X? tdf#130150 use full precision, 
no need for epsilon
+const bool bCompXA(aPreviousPoint.getX() > 
rPoint.getX());
+const bool bCompXB(aCurrentPoint.getX() > 
rPoint.getX());
 
 if(bCompXA == bCompXB)
 {
@@ -355,7 +355,8 @@ namespace basegfx::utils
 (aPreviousPoint.getX() - 
aCurrentPoint.getX()) /
 (aPreviousPoint.getY() - 
aCurrentPoint.getY()));
 
-if(fTools::more(fCompare, rPoint.getX()))
+// tdf#130150 use full precision, no need for 
epsilon
+if(fCompare > rPoint.getX())
 {
 bRetval = !bRetval;
 }
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx 
b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
index ad185f47f336..6263c78a1ef5 100644
--- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -984,6 +984,42 @@ namespace basegfx::utils
 }
 else
 {
+// tdf#130150 shortcut & precision: If both are simple ranges,
+// solve based on ranges
+if(basegfx::utils::isRectangle(rCandidateA) && 
basegfx::utils::isRectangle(rCandidateB))
+{
+// *if* both are ranges, AND always can be solved
+const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange());
+const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange());
+
+if(aRangeA.isInside(aRangeB))
+{
+// 2nd completely inside 1st -> 2nd is result of AND
+return rCandidateB;
+}
+
+if(aRangeB.isInside(aRangeA))
+{
+