瀏覽代碼

Промежуточный коммит, парсинг изображений

Book Pauk 6 年之前
父節點
當前提交
d59d0a6a42
共有 1 個文件被更改,包括 26 次插入4 次删除
  1. 26 4
      client/components/Reader/share/BookParser.js

+ 26 - 4
client/components/Reader/share/BookParser.js

@@ -2,6 +2,8 @@ import he from 'he';
 import sax from '../../../../server/core/BookConverter/sax';
 import {sleep} from '../../../share/utils';
 
+const maxImageLineCount = 100;
+
 export default class BookParser {
     constructor() {
         // defaults
@@ -143,6 +145,12 @@ export default class BookParser {
                     binaryId = (attrs.id.value ? attrs.id.value : '');
             }
 
+            if (tag == 'image') {
+                let attrs = sax.getAttrsSync(tail);
+                if (attrs.href.value)
+                    newParagraph(`<image href="${attrs.href.value}">${' '.repeat(maxImageLineCount)}</image>`, maxImageLineCount);
+            }
+
             if (path.indexOf('/fictionbook/body') == 0) {
                 if (tag == 'title') {
                     newParagraph(' ', 1);
@@ -301,6 +309,7 @@ export default class BookParser {
             try {
                 await Promise.all(dimPromises);
             } catch (e) {
+                //
             }
         }
 
@@ -340,18 +349,26 @@ export default class BookParser {
     splitToStyle(s) {
         let result = [];/*array of {
             style: {bold: Boolean, italic: Boolean, center: Boolean},
+            image: Boolean,
+            imageId: String,
             text: String,
         }*/
         let style = {};
+        let image = {};
 
+                /*let attrs = sax.getAttrsSync(tail);
+                if (attrs.href.value)
+                    newParagraph(' '.repeat(maxImageLineCount) + `<image href="${attrs.href.value}" />`, maxImageLineCount);
+*/
         const onTextNode = async(text) => {// eslint-disable-line no-unused-vars
             result.push({
                 style: Object.assign({}, style),
-                text: text
+                image,
+                text
             });
         };
 
-        const onStartNode = async(elemName) => {// eslint-disable-line no-unused-vars
+        const onStartNode = async(elemName, tail) => {// eslint-disable-line no-unused-vars
             switch (elemName) {
                 case 'strong':
                     style.bold = true;
@@ -362,6 +379,9 @@ export default class BookParser {
                 case 'center':
                     style.center = true;
                     break;
+                case 'image':
+                    image = {};
+                    break;
             }
         };
 
@@ -376,6 +396,9 @@ export default class BookParser {
                 case 'center':
                     style.center = false;
                     break;
+                case 'image':
+                    image = {};
+                    break;
             }
         };
 
@@ -383,7 +406,6 @@ export default class BookParser {
             onStartNode, onEndNode, onTextNode
         });
 
-
         //длинные слова (или белиберду без пробелов) тоже разобьем
         const maxWordLength = this.maxWordLength;
         const parts = result;
@@ -398,7 +420,7 @@ export default class BookParser {
 
                 if (i - spaceIndex >= maxWordLength && i < p.text.length - 1 && 
                     this.measureText(p.text.substr(spaceIndex + 1, i - spaceIndex), p.style) >= this.w - this.p) {
-                    result.push({style: p.style, text: p.text.substr(0, i + 1)});
+                    result.push({style: p.style, image: p.image, text: p.text.substr(0, i + 1)});
                     p = {style: p.style, text: p.text.substr(i + 1)};
                     spaceIndex = -1;
                     i = -1;