Работа над стилизацией, промежуточный коммит
This commit is contained in:
@@ -162,7 +162,7 @@ class TextPage extends Vue {
|
|||||||
first: Boolean,
|
first: Boolean,
|
||||||
last: Boolean,
|
last: Boolean,
|
||||||
parts: array of {
|
parts: array of {
|
||||||
style: 'bold'|'italic',
|
style: {bold: Boolean, italic: Boolean}
|
||||||
text: String,
|
text: String,
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|||||||
@@ -214,13 +214,34 @@ export default class BookParser {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
removeTags(s) {
|
splitToStyle(s) {
|
||||||
let result = '';
|
let result = [];/*array of {
|
||||||
|
style: {bold: Boolean, italic: Boolean},
|
||||||
|
text: String,
|
||||||
|
}*/
|
||||||
|
|
||||||
const parser = new EasySAXParser();
|
const parser = new EasySAXParser();
|
||||||
|
let style = {};
|
||||||
|
|
||||||
parser.on('textNode', (text) => {
|
parser.on('textNode', (text) => {
|
||||||
result += text;
|
result.push({
|
||||||
|
style: Object.assign({}, style),
|
||||||
|
text: text
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('startNode', (elemName, getAttr, isTagEnd, getStrNode) => {// eslint-disable-line no-unused-vars
|
||||||
|
if (elemName == 'strong')
|
||||||
|
style.bold = true;
|
||||||
|
else if (elemName == 'emphasis')
|
||||||
|
style.italic = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('endNode', (elemName, isTagStart, getStrNode) => {// eslint-disable-line no-unused-vars
|
||||||
|
if (elemName == 'strong')
|
||||||
|
style.bold = false;
|
||||||
|
else if (elemName == 'emphasis')
|
||||||
|
style.italic = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
parser.parse(`<p>${s}</p>`);
|
parser.parse(`<p>${s}</p>`);
|
||||||
@@ -304,42 +325,56 @@ export default class BookParser {
|
|||||||
first: Boolean,
|
first: Boolean,
|
||||||
last: Boolean,
|
last: Boolean,
|
||||||
parts: array of {
|
parts: array of {
|
||||||
style: 'bold'|'italic',
|
style: {bold: Boolean, italic: Boolean},
|
||||||
text: String,
|
text: String,
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
let text = this.removeTags(para.text);
|
let parts = this.splitToStyle(para.text);
|
||||||
|
|
||||||
let line = {begin: para.offset, parts: []};
|
let line = {begin: para.offset, parts: []};
|
||||||
let prevPart = '';
|
let prevStr = '';
|
||||||
let part = '';
|
let str = '';
|
||||||
let prevW = 0;
|
let prevW = 0;
|
||||||
let j = 0;
|
let j = 0;//номер строки
|
||||||
|
let ofs = -1;
|
||||||
let word = '';
|
let word = '';
|
||||||
let newPara = true;
|
let isNewPara = true;
|
||||||
text += ' ';
|
// тут начинается самый замес, перенос по слогам и стилизация
|
||||||
// тут начинается самый замес, перенос и стилизация
|
let text = '';
|
||||||
|
let style = {};
|
||||||
|
for (let part of parts) {
|
||||||
|
text = part.text;
|
||||||
|
style = part.style;
|
||||||
|
|
||||||
for (let i = 0; i < text.length; i++) {
|
for (let i = 0; i < text.length; i++) {
|
||||||
|
ofs++;
|
||||||
|
|
||||||
|
if (i < text.length - 1) {
|
||||||
if (text[i] != ' ') {
|
if (text[i] != ' ') {
|
||||||
word += text[i];
|
word += text[i];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
part += (newPara ? '' : ' ') + word;
|
} else {
|
||||||
newPara = false;
|
if (text[i] != ' ') {
|
||||||
|
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(part) + p;
|
let w = this.measureText(str) + p;
|
||||||
if (w > parsed.w) {
|
if (w > parsed.w) {
|
||||||
let wordTail;
|
let wordTail;
|
||||||
|
|
||||||
let pw;
|
|
||||||
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 = prevPart + ' ';
|
let s = prevStr + ' ';
|
||||||
|
|
||||||
|
let pw;
|
||||||
const slogiLen = slogi.length;
|
const slogiLen = slogi.length;
|
||||||
for (let k = 0; k < slogiLen - 1; k++) {
|
for (let k = 0; k < slogiLen - 1; k++) {
|
||||||
let slog = slogi[0];
|
let slog = slogi[0];
|
||||||
@@ -356,7 +391,7 @@ export default class BookParser {
|
|||||||
|
|
||||||
if (pw) {
|
if (pw) {
|
||||||
prevW = pw;
|
prevW = pw;
|
||||||
prevPart = s + '-';
|
prevStr = s + '-';
|
||||||
wordTail = slogi.join('');
|
wordTail = slogi.join('');
|
||||||
} else {
|
} else {
|
||||||
wordTail = word;
|
wordTail = word;
|
||||||
@@ -368,23 +403,24 @@ export default class BookParser {
|
|||||||
wordTail = word;
|
wordTail = word;
|
||||||
}
|
}
|
||||||
|
|
||||||
line.parts.push({style: '', text: prevPart});
|
line.parts.push({style, text: prevStr});
|
||||||
line.end = para.offset + i;
|
line.end = para.offset + ofs;
|
||||||
line.width = prevW;
|
line.width = prevW;
|
||||||
line.first = (j == 0);
|
line.first = (j == 0);
|
||||||
line.last = false;
|
line.last = false;
|
||||||
lines.push(line);
|
lines.push(line);
|
||||||
|
|
||||||
line = {begin: line.end + 1, parts: []};
|
line = {begin: para.offset + ofs + 1, parts: []};
|
||||||
part = wordTail;
|
str = wordTail;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
prevW = w;
|
prevW = w;
|
||||||
prevPart = part;
|
prevStr = str;
|
||||||
word = '';
|
word = '';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
line.parts.push({style: '', text: prevPart});
|
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