Работа над стилизацией текста

This commit is contained in:
Book Pauk
2019-01-17 08:31:28 +07:00
parent 728403338c
commit 4608182a52
2 changed files with 47 additions and 35 deletions

View File

@@ -155,6 +155,7 @@ class TextPage extends Vue {
let y = 0; let y = 0;
for (let i = 0; i < len; i++) { for (let i = 0; i < len; i++) {
const line = lines[i]; const line = lines[i];
console.log(line.parts);
/* line: /* line:
{ {
begin: Number, begin: Number,
@@ -167,15 +168,10 @@ class TextPage extends Vue {
} }
}*/ }*/
let text = '';
for (const part of line.parts) {
text += part.text;
}
let indent = this.indent + (line.first ? this.p : 0); let indent = this.indent + (line.first ? this.p : 0);
y += this.lineHeight; y += this.lineHeight;
let filled = false; /*let filled = false;
if (this.textAlignJustify && !line.last) { if (this.textAlignJustify && !line.last) {
const words = text.split(' '); const words = text.split(' ');
if (words.length > 1) { if (words.length > 1) {
@@ -193,6 +189,20 @@ class TextPage extends Vue {
if (!filled) if (!filled)
context.fillText(text, indent, y); 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);
}
} }
this.linesUp = this.parsed.getLines(this.bookPos, -(this.pageLineCount + 1)); this.linesUp = this.parsed.getLines(this.bookPos, -(this.pageLineCount + 1));

View File

@@ -333,46 +333,46 @@ export default class BookParser {
let parts = this.splitToStyle(para.text); let parts = this.splitToStyle(para.text);
let line = {begin: para.offset, parts: []}; let line = {begin: para.offset, parts: []};
let partText = '';//накапливаемый кусок со стилем
let str = '';//измеряемая строка
let prevStr = ''; let prevStr = '';
let str = '';
let prevW = 0; let prevW = 0;
let j = 0;//номер строки let j = 0;//номер строки
let ofs = -1; let ofs = -1;
let word = ''; let word = '';
let isNewPara = true; let sp1 = '';
// тут начинается самый замес, перенос по слогам и стилизация
let text = ''; let text = '';
let style = {}; let style = {};
// тут начинается самый замес, перенос по слогам и стилизация
for (let part of parts) { for (let part of parts) {
text = part.text; text = part.text + ' ';
style = part.style; style = part.style;
let sp2 = '';
for (let i = 0; i < text.length; i++) { for (let i = 0; i < text.length; i++) {
if (i < text.length - 1)
ofs++; ofs++;
if (i < text.length - 1) {
if (text[i] != ' ') { if (text[i] != ' ') {
word += text[i]; word += text[i];
continue; continue;
} }
} else { str += sp1 + word;
if (text[i] != ' ') { sp1 = ' ';
word += text[i];
}
}
str += (isNewPara ? '' : ' ') + word;
isNewPara = false;
let p = (j == 0 ? parsed.p : 0); let p = (j == 0 ? parsed.p : 0);
let w = this.measureText(str) + p; let w = this.measureText(str) + p;
let wordTail = word;
if (w > parsed.w) { if (w > parsed.w) {
let wordTail;
if (parsed.wordWrap) { if (parsed.wordWrap) {
let slogi = this.splitToSlogi(word); let slogi = this.splitToSlogi(word);
if (slogi.length > 1) { if (slogi.length > 1) {
let s = prevStr + ' '; let s = prevStr + ' ';
let ss = ' ';
let pw; let pw;
const slogiLen = slogi.length; const slogiLen = slogi.length;
@@ -381,6 +381,7 @@ export default class BookParser {
let ww = this.measureText(s + slog + (slog[slog.length - 1] == '-' ? '' : '-')) + p; let ww = this.measureText(s + slog + (slog[slog.length - 1] == '-' ? '' : '-')) + p;
if (ww <= parsed.w) { if (ww <= parsed.w) {
s += slog; s += slog;
ss += slog;
} else } else
break; break;
pw = ww; pw = ww;
@@ -389,19 +390,13 @@ export default class BookParser {
if (pw) { if (pw) {
prevW = pw; prevW = pw;
prevStr = s + (s[s.length - 1] == '-' ? '' : '-'); partText += ss + (ss[ss.length - 1] == '-' ? '' : '-');
wordTail = slogi.join(''); wordTail = slogi.join('');
} else {
wordTail = word;
} }
} else {
wordTail = word;
} }
} else {
wordTail = word;
} }
line.parts.push({style, text: prevStr}); line.parts.push({style, text: partText});
line.end = para.offset + ofs; line.end = para.offset + ofs;
line.width = prevW; line.width = prevW;
line.first = (j == 0); line.first = (j == 0);
@@ -409,16 +404,23 @@ export default class BookParser {
lines.push(line); lines.push(line);
line = {begin: para.offset + ofs + 1, parts: []}; line = {begin: para.offset + ofs + 1, parts: []};
partText = '';
sp2 = '';
str = wordTail; str = wordTail;
j++; j++;
} }
prevW = w;
prevStr = str; prevStr = str;
partText += sp2 + wordTail;
sp2 = ' ';
word = ''; word = '';
} prevW = w;
}
line.parts.push({style, text: partText});
partText = '';
} }
line.parts.push({style, text: prevStr});
line.end = para.offset + para.length - 1; line.end = para.offset + para.length - 1;
line.width = prevW; line.width = prevW;
line.first = (j == 0); line.first = (j == 0);