Browse Source

Исправлен баг парсера с пустыми параграфами (содержащими только разметку)

Book Pauk 3 years ago
parent
commit
26660461d4
1 changed files with 19 additions and 11 deletions
  1. 19 11
      client/components/Reader/share/BookParser.js

+ 19 - 11
client/components/Reader/share/BookParser.js

@@ -159,7 +159,24 @@ export default class BookParser {
                 const prevParaIndex = paraIndex;
                 const prevParaIndex = paraIndex;
                 let p = para[paraIndex];
                 let p = para[paraIndex];
                 paraOffset -= p.length;
                 paraOffset -= p.length;
-                //добавление пустых (addEmptyParagraphs) параграфов перед текущим непустым
+
+                //уберем пробелы с концов параграфа, минимум 1 пробел должен быть у пустого параграфа
+                let newParaText = p.text.trim();
+                newParaText = (newParaText.length ? newParaText : ' ');
+                const ldiff = p.text.length - newParaText.length;
+                if (ldiff != 0) {
+                    p.text = newParaText;
+                    p.length -= ldiff;
+                }
+
+                //удаление параграфов, которые содержат только разметку, такого не должно быть
+                if (!p.length) {
+                    delete para[paraIndex];
+                    paraIndex--;
+                    return;
+                }
+
+                //добавление пустых (не)видимых (addEmptyParagraphs) параграфов перед текущим непустым
                 if (p.text.trim() != '') {
                 if (p.text.trim() != '') {
                     for (let i = 0; i < 2; i++) {
                     for (let i = 0; i < 2; i++) {
                         para[paraIndex] = {
                         para[paraIndex] = {
@@ -179,15 +196,6 @@ export default class BookParser {
                         curSubtitle.paraIndex = paraIndex;
                         curSubtitle.paraIndex = paraIndex;
                 }
                 }
 
 
-                //уберем пробелы с концов параграфа, минимум 1 пробел должен быть у пустого параграфа
-                let newParaText = p.text.trim();
-                newParaText = (newParaText.length ? newParaText : ' ');
-                const ldiff = p.text.length - newParaText.length;
-                if (ldiff != 0) {
-                    p.text = newParaText;
-                    p.length -= ldiff;
-                }
-
                 p.index = paraIndex;
                 p.index = paraIndex;
                 p.offset = paraOffset;
                 p.offset = paraOffset;
                 para[paraIndex] = p;
                 para[paraIndex] = p;
@@ -203,7 +211,7 @@ export default class BookParser {
             let p = {
             let p = {
                 index: paraIndex,
                 index: paraIndex,
                 offset: paraOffset,
                 offset: paraOffset,
-                length: len,
+                length: len,//длина текста внутри параграфа без учета длины разметки
                 text: text,
                 text: text,
                 addIndex: 0,
                 addIndex: 0,
             };
             };