Bläddra i källkod

Правка багов в парсере samlib

Book Pauk 6 år sedan
förälder
incheckning
132956eabd
1 ändrade filer med 43 tillägg och 21 borttagningar
  1. 43 21
      server/core/BookConverter/index.js

+ 43 - 21
server/core/BookConverter/index.js

@@ -227,24 +227,44 @@ class BookConverter {
 
 
         let inText = false;
         let inText = false;
         let center = false;
         let center = false;
+        //let italic = false;
+        //let bold = false;
+        let node = {};
 
 
         const newParagraph = () => {
         const newParagraph = () => {
-            pars.push({_n: 'p', _t: ''});
+            node = {_n: 'p', _t: ''};
+            pars.push(node);
         };
         };
 
 
         const newSubTitle = () => {
         const newSubTitle = () => {
-            pars.push({_n: 'subtitle', _t: ''});
+            node = {_n: 'subtitle', _t: ''};
+            pars.push(node);
+        };
+
+        const newItalic = () => {
+            let n = {_n: 'emphasis', _t: ''};
+            if (!node._a)
+                node._a = [];
+            node._a.push(n);
+            node = n;
+        };
+
+        const newBold = () => {
+            let n = {_n: 'strong', _t: ''};
+            if (!node._a)
+                node._a = [];
+            node._a.push(n);
+            node = n;
         };
         };
 
 
         const growParagraph = (text) => {
         const growParagraph = (text) => {
-            const l = pars.length;
-            if (l) {
-                if (pars[l - 1]._t == '')
-                    text = text.trimLeft();
-                pars[l - 1]._t += text;
-            }
+            if (node._t == '')
+                text = text.trimLeft();
+            node._t += text;
         };
         };
 
 
+        newParagraph();
+
         const parser = new EasySAXParser();
         const parser = new EasySAXParser();
 
 
         parser.on('error', (msgError) => {// eslint-disable-line no-unused-vars
         parser.on('error', (msgError) => {// eslint-disable-line no-unused-vars
@@ -261,16 +281,18 @@ class BookConverter {
 
 
                 switch (elemName) {
                 switch (elemName) {
                     case 'i':
                     case 'i':
-                        growParagraph('<emphasis>');
+                        newItalic();
+                        //italic = true;
                         break;
                         break;
                     case 'b':
                     case 'b':
-                        growParagraph('<strong>');
+                        newBold();
+                        //bold = true;
                         break;
                         break;
                     case 'div':
                     case 'div':
                         var a = getAttr();
                         var a = getAttr();
                         if (a && a.align == 'center') {
                         if (a && a.align == 'center') {
-                            center = true;
                             newSubTitle();
                             newSubTitle();
+                            center = true;
                         }
                         }
                         break;
                         break;
                 }
                 }
@@ -297,10 +319,10 @@ class BookConverter {
             } else {
             } else {
                 switch (elemName) {
                 switch (elemName) {
                     case 'i':
                     case 'i':
-                        growParagraph('</emphasis>');
+                        //italic = false;
                         break;
                         break;
                     case 'b':
                     case 'b':
-                        growParagraph('</strong>');
+                        //bold = false;
                         break;
                         break;
                     case 'div':
                     case 'div':
                         center = false;
                         center = false;
@@ -397,17 +419,17 @@ class BookConverter {
                 throw new Error(`malformed fb2 object`);
                 throw new Error(`malformed fb2 object`);
 
 
             out += `<${name}>`;
             out += `<${name}>`;
-            if (node.hasOwnProperty('_t')) {
+            if (node.hasOwnProperty('_t'))
                 out += node._t;
                 out += node._t;
-            } else {
-                for (let nodeName in node) {
-                    if (nodeName == '_n')
-                        continue;
 
 
-                    const n = node[nodeName];
-                    out += this.formatFb2Node(n, nodeName);
-                }
+            for (let nodeName in node) {
+                if (nodeName == '_n' || nodeName == '_t')
+                    continue;
+
+                const n = node[nodeName];
+                out += this.formatFb2Node(n, nodeName);
             }
             }
+            
             out += `</${name}>`;
             out += `</${name}>`;
         }
         }
         return out;
         return out;