From 7d7ff165ced305bc269b24aa0ce8664272d86fa6 Mon Sep 17 00:00:00 2001
From: siikamiika <siikamiika@users.noreply.github.com>
Date: Tue, 5 May 2020 00:13:43 +0300
Subject: Extract textSource text inside TextScanner (#500)

* extract text inside TextScanner

* clone textSource before text extraction
---
 ext/mixed/js/text-scanner.js | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

(limited to 'ext/mixed')

diff --git a/ext/mixed/js/text-scanner.js b/ext/mixed/js/text-scanner.js
index d74a04f8..9dcf6009 100644
--- a/ext/mixed/js/text-scanner.js
+++ b/ext/mixed/js/text-scanner.js
@@ -318,21 +318,24 @@ class TextScanner extends EventDispatcher {
         }
     }
 
-    setTextSourceScanLength(textSource, length) {
-        textSource.setEndOffset(length);
-        if (this.ignoreNodes === null || !textSource.range) {
-            return;
-        }
+    getTextSourceContent(textSource, length) {
+        const clonedTextSource = textSource.clone();
+
+        clonedTextSource.setEndOffset(length);
 
-        length = textSource.text().length;
-        while (textSource.range && length > 0) {
-            const nodes = TextSourceRange.getNodesInRange(textSource.range);
-            if (!TextSourceRange.anyNodeMatchesSelector(nodes, this.ignoreNodes)) {
-                break;
+        if (this.ignoreNodes !== null && clonedTextSource.range) {
+            length = clonedTextSource.text().length;
+            while (clonedTextSource.range && length > 0) {
+                const nodes = TextSourceRange.getNodesInRange(clonedTextSource.range);
+                if (!TextSourceRange.anyNodeMatchesSelector(nodes, this.ignoreNodes)) {
+                    break;
+                }
+                --length;
+                clonedTextSource.setEndOffset(length);
             }
-            --length;
-            textSource.setEndOffset(length);
         }
+
+        return clonedTextSource.text();
     }
 
     clearSelection(passive) {
-- 
cgit v1.2.3