Ver código fonte

Работа над парсером и канвасом

Book Pauk 6 anos atrás
pai
commit
66278be356

+ 8 - 6
client/components/Reader/TextPage/TextPage.vue

@@ -66,13 +66,13 @@ class TextPage extends Vue {
         //canvas props
         //canvas props
         this.textColor = 'black';
         this.textColor = 'black';
         this.backgroundColor = '#478355';
         this.backgroundColor = '#478355';
-        this.fontStyle = ''; //'bold','italic'
-        this.fontSize = 20; //px
+        this.fontStyle = '';// 'bold','italic'
+        this.fontSize = 20;// px
         this.fontName = 'arial';
         this.fontName = 'arial';
-        this.lineInterval = 5; //px
+        this.lineInterval = 5;// px
 
 
         this.updateCanvasSize();
         this.updateCanvasSize();
-        this.drawPage();//пока не загрузили, очистим канвас
+        this.drawPage();// пока не загрузили, очистим канвас
 
 
         if (this.lastBook) {
         if (this.lastBook) {
             (async() => {
             (async() => {
@@ -92,9 +92,10 @@ class TextPage extends Vue {
                     this.fb2.bookTitle
                     this.fb2.bookTitle
                 ]).join(' '));
                 ]).join(' '));
 
 
+                this.updateCanvasSize();
                 const parsed = this.book.parsed;
                 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
                 parsed.measureText = (text, style) => {// eslint-disable-line no-unused-vars
                     return this.context.measureText(text).width;
                     return this.context.measureText(text).width;
                 };                
                 };                
@@ -134,6 +135,7 @@ class TextPage extends Vue {
             {
             {
                 begin: Number,
                 begin: Number,
                 end: Number,
                 end: Number,
+                para: Boolean,
                 parts: array of {
                 parts: array of {
                     style: 'bold'|'italic',
                     style: 'bold'|'italic',
                     text: String,
                     text: String,

+ 16 - 11
client/components/Reader/share/BookParser.js

@@ -252,6 +252,7 @@ export default class BookParser {
         {
         {
             begin: Number,
             begin: Number,
             end: Number,
             end: Number,
+            para: Boolean,
             parts: array of {
             parts: array of {
                 style: 'bold'|'italic',
                 style: 'bold'|'italic',
                 text: String,
                 text: String,
@@ -262,28 +263,32 @@ export default class BookParser {
 
 
         const words = text.split(' ');
         const words = text.split(' ');
         let line = {begin: para.offset, parts: []};
         let line = {begin: para.offset, parts: []};
+        let prevPart = '';
         let part = '';
         let part = '';
-        let j = 0;
         let k = 0;
         let k = 0;
-        // тут начинается самый замес, перенос и выравниване по ширине
+        // тут начинается самый замес, перенос и стилизация
         for (let i = 0; i < words.length; i++) {
         for (let i = 0; i < words.length; i++) {
             const word = words[i];
             const word = words[i];
-            if (j > 0) 
-                part += ' ';
-            j++;
             part += word;
             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);
                 lines.push(line);
 
 
                 line = {begin: line.end + 1, parts: []};
                 line = {begin: line.end + 1, parts: []};
-                part = '';
-                j = 0;
+                part = word;
                 k++;
                 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;
         parsed.lines = lines;
         para.parsed = parsed;
         para.parsed = parsed;