Работа над стилизацией текста
This commit is contained in:
@@ -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));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user