diff --git a/client/components/Reader/TextPage/TextPage.vue b/client/components/Reader/TextPage/TextPage.vue index 94b8347b..e18bfc3e 100644 --- a/client/components/Reader/TextPage/TextPage.vue +++ b/client/components/Reader/TextPage/TextPage.vue @@ -66,13 +66,13 @@ class TextPage extends Vue { //canvas props this.textColor = 'black'; this.backgroundColor = '#478355'; - this.fontStyle = ''; //'bold','italic' - this.fontSize = 20; //px + this.fontStyle = '';// 'bold','italic' + this.fontSize = 20;// px this.fontName = 'arial'; - this.lineInterval = 5; //px + this.lineInterval = 5;// px this.updateCanvasSize(); - this.drawPage();//пока не загрузили, очистим канвас + this.drawPage();// пока не загрузили, очистим канвас if (this.lastBook) { (async() => { @@ -92,9 +92,10 @@ class TextPage extends Vue { this.fb2.bookTitle ]).join(' ')); + this.updateCanvasSize(); const parsed = this.book.parsed; - parsed.p = 30;//px, отступ параграфа - parsed.w = 300;//px, ширина страницы + parsed.p = 30;// px, отступ параграфа + parsed.w = this.canvas.width;// px, ширина страницы parsed.measureText = (text, style) => {// eslint-disable-line no-unused-vars return this.context.measureText(text).width; }; @@ -134,6 +135,7 @@ class TextPage extends Vue { { begin: Number, end: Number, + para: Boolean, parts: array of { style: 'bold'|'italic', text: String, diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 8d08062f..9a8269ef 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -252,6 +252,7 @@ export default class BookParser { { begin: Number, end: Number, + para: Boolean, parts: array of { style: 'bold'|'italic', text: String, @@ -262,28 +263,32 @@ export default class BookParser { const words = text.split(' '); let line = {begin: para.offset, parts: []}; + let prevPart = ''; let part = ''; - let j = 0; let k = 0; - // тут начинается самый замес, перенос и выравниване по ширине + // тут начинается самый замес, перенос и стилизация for (let i = 0; i < words.length; i++) { const word = words[i]; - if (j > 0) - part += ' '; - j++; part += word; - if (this.measureText(part) >= parsed.w || i == words.length - 1) { - line.parts.push({style: '', text: (k == 0 ? ' ' : '') + part}); - line.end = line.begin + part.length - 1; + if (this.measureText(part) > parsed.w) { + line.parts.push({style: '', text: prevPart}); + line.end = line.begin + prevPart.length;//нет -1 !!! + line.para = (k == 0); lines.push(line); line = {begin: line.end + 1, parts: []}; - part = ''; - j = 0; + part = word; k++; } - } + prevPart = part; + part += ' '; + } + + line.parts.push({style: '', text: prevPart}); + line.end = line.begin + prevPart.length - 1; + line.para = (k == 0); + lines.push(line); parsed.lines = lines; para.parsed = parsed;