From 46f56a5a84e11cfe9c5b045adfdee71ff17340a0 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 17 Jan 2019 09:16:29 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20=D1=81=D1=82=D0=B8=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B5=D0=B9=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Reader/TextPage/TextPage.vue | 51 +++++++++++-------- client/components/Reader/share/BookParser.js | 8 +-- 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/client/components/Reader/TextPage/TextPage.vue b/client/components/Reader/TextPage/TextPage.vue index c6be7dfc..42116aba 100644 --- a/client/components/Reader/TextPage/TextPage.vue +++ b/client/components/Reader/TextPage/TextPage.vue @@ -63,6 +63,7 @@ class TextPage extends Vue { this.parsed.font = this.font; this.parsed.wordWrap = this.wordWrap; this.measureText = (text, style) => {// eslint-disable-line no-unused-vars + this.context.font = this.fontByStyle(style); return this.context.measureText(text).width; }; this.parsed.measureText = this.measureText; @@ -130,6 +131,10 @@ class TextPage extends Vue { return `${this.fontStyle} ${this.fontSize}px ${this.fontName}`; } + fontByStyle(style) { + return `${style.italic ? 'italic' : ''} ${style.bold ? 'bold' : ''} ${this.fontSize}px ${this.fontName}`; + } + drawPage() { if (!this.lastBook) return; @@ -155,7 +160,6 @@ class TextPage extends Vue { let y = 0; for (let i = 0; i < len; i++) { const line = lines[i]; -console.log(line.parts); /* line: { begin: Number, @@ -171,37 +175,42 @@ console.log(line.parts); let indent = this.indent + (line.first ? this.p : 0); y += this.lineHeight; - /*let filled = false; + let filled = false; if (this.textAlignJustify && !line.last) { - const words = text.split(' '); + let lineText = ''; + for (const part of line.parts) { + lineText += part.text; + } + const words = lineText.split(' '); + if (words.length > 1) { const spaceCount = words.length - 1; + const space = (this.w - line.width + spaceWidth*spaceCount)/spaceCount; let x = indent; - for (const word of words) { - context.fillText(word, x, y); - x += this.measureText(word) + space; + for (const part of line.parts) { + context.font = this.fontByStyle(part.style); + let partWords = part.text.split(' '); + + for (let i = 0; i < partWords.length; i++) { + let word = partWords[i]; + context.fillText(word, x, y); + x += this.measureText(word, part.style) + (i < partWords.length - 1 ? space : 0); + } } filled = true; } } - if (!filled) - context.fillText(text, indent, y); - */ - /*let text = ''; - for (const part of line.parts) { - text += part.text; - } - context.fillText(text, indent, y); - */ - let x = indent; - for (const part of line.parts) { - let text = part.text; - context.font = `${part.style.italic ? 'italic' : ''} ${part.style.bold ? 'bold' : ''} ${this.fontSize}px ${this.fontName}`; - context.fillText(text, x, y); - x += this.measureText(text); + if (!filled) { + let x = indent; + for (const part of line.parts) { + let text = part.text; + context.font = this.fontByStyle(part.style); + context.fillText(text, x, y); + x += this.measureText(text, part.style); + } } } diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 244916b4..1d6f7149 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -341,7 +341,6 @@ export default class BookParser { let j = 0;//номер строки let ofs = -1; let word = ''; - let sp1 = ''; let text = ''; let style = {}; @@ -351,6 +350,7 @@ export default class BookParser { text = part.text + ' '; style = part.style; + let sp1 = ''; let sp2 = ''; for (let i = 0; i < text.length; i++) { if (i < text.length - 1) @@ -364,10 +364,10 @@ export default class BookParser { sp1 = ' '; let p = (j == 0 ? parsed.p : 0); - let w = this.measureText(str) + p; + let w = this.measureText(str, style) + p; let wordTail = word; if (w > parsed.w) { - if (parsed.wordWrap) { + if (parsed.wordWrap) {//по слогам let slogi = this.splitToSlogi(word); if (slogi.length > 1) { @@ -378,7 +378,7 @@ export default class BookParser { const slogiLen = slogi.length; for (let k = 0; k < slogiLen - 1; k++) { let slog = slogi[0]; - let ww = this.measureText(s + slog + (slog[slog.length - 1] == '-' ? '' : '-')) + p; + let ww = this.measureText(s + slog + (slog[slog.length - 1] == '-' ? '' : '-'), style) + p; if (ww <= parsed.w) { s += slog; ss += slog;