diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js
index a18e4507..9b4565d9 100644
--- a/client/components/Reader/share/BookParser.js
+++ b/client/components/Reader/share/BookParser.js
@@ -152,14 +152,59 @@ export default class BookParser {
})().catch(reject); });
};
- const newParagraph = (text, len, addIndex) => {
+ const correctCurrentPara = () => {
+ //коррекция текущего параграфа
+ if (paraIndex >= 0) {
+ const prevParaIndex = paraIndex;
+ let p = para[paraIndex];
+ paraOffset -= p.length;
+ //добавление пустых (addEmptyParagraphs) параграфов перед текущим непустым
+ if (p.text.trim() != '') {
+ for (let i = 0; i < 2; i++) {
+ para[paraIndex] = {
+ index: paraIndex,
+ offset: paraOffset,
+ length: 1,
+ text: ' ',
+ addIndex: i + 1,
+ };
+ paraIndex++;
+ paraOffset++;
+ }
+
+ if (curTitle.paraIndex == prevParaIndex)
+ curTitle.paraIndex = paraIndex;
+ if (curSubtitle.paraIndex == prevParaIndex)
+ 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.offset = paraOffset;
+ para[paraIndex] = p;
+ paraOffset += p.length;
+ }
+ };
+
+ const newParagraph = (text = '', len = 0) => {
+ correctCurrentPara();
+
+ //новый параграф
paraIndex++;
let p = {
index: paraIndex,
offset: paraOffset,
length: len,
text: text,
- addIndex: (addIndex ? addIndex : 0),
+ addIndex: 0,
};
if (inSubtitle) {
@@ -169,53 +214,26 @@ export default class BookParser {
}
para[paraIndex] = p;
- paraOffset += p.length;
+ paraOffset += len;
};
const growParagraph = (text, len) => {
if (paraIndex < 0) {
- newParagraph(' ', 1);
+ newParagraph();
growParagraph(text, len);
return;
}
- const prevParaIndex = paraIndex;
- let p = para[paraIndex];
- paraOffset -= p.length;
- //добавление пустых (addEmptyParagraphs) параграфов перед текущим
- if (p.length == 1 && p.text[0] == ' ' && len > 0) {
- paraIndex--;
- for (let i = 0; i < 2; i++) {
- newParagraph(' ', 1, i + 1);
- }
-
- paraIndex++;
- p.index = paraIndex;
- p.offset = paraOffset;
- para[paraIndex] = p;
-
- if (curTitle.paraIndex == prevParaIndex)
- curTitle.paraIndex = paraIndex;
- if (curSubtitle.paraIndex == prevParaIndex)
- curSubtitle.paraIndex = paraIndex;
-
- //уберем начальный пробел
- p.length = 0;
- p.text = p.text.substr(1);
- }
-
- p.length += len;
- p.text += text;
-
-
if (inSubtitle) {
curSubtitle.title += text;
} else if (inTitle) {
curTitle.title += text;
}
- para[paraIndex] = p;
- paraOffset += p.length;
+ const p = para[paraIndex];
+ p.length += len;
+ p.text += text;
+ paraOffset += len;
};
const onStartNode = (elemName, tail) => {// eslint-disable-line no-unused-vars
@@ -250,7 +268,7 @@ export default class BookParser {
this.images.push({paraIndex, num: imageNum, id, local, alt});
if (inPara && this.sets.showInlineImagesInCenter)
- newParagraph(' ', 1);
+ newParagraph();
} else {//external
imageNum++;
@@ -300,25 +318,25 @@ export default class BookParser {
newParagraph(`