Просмотр исходного кода

Улчшение парсинга samlib

Book Pauk 6 лет назад
Родитель
Сommit
55ad2d664d
1 измененных файлов с 16 добавлено и 2 удалено
  1. 16 2
      server/core/BookConverter/index.js

+ 16 - 2
server/core/BookConverter/index.js

@@ -237,6 +237,8 @@ class BookConverter {
         let node = {_a: pars};
         let node = {_a: pars};
 
 
         let inPara = false;
         let inPara = false;
+        let italic = false;
+        let bold = false;
 
 
         const openTag = (name) => {
         const openTag = (name) => {
             if (name == 'p')
             if (name == 'p')
@@ -249,8 +251,11 @@ class BookConverter {
         const closeTag = (name) => {
         const closeTag = (name) => {
             if (name == 'p')
             if (name == 'p')
                 inPara = false;
                 inPara = false;
-            if (node._n == name && node._p) {
+            if (node._p) {
+                const exact = (node._n == name);
                 node = node._p;
                 node = node._p;
+                if (!exact)
+                    closeTag(name);
             }
             }
         };
         };
 
 
@@ -283,9 +288,11 @@ class BookConverter {
                         break;
                         break;
                     case 'i':
                     case 'i':
                         openTag('emphasis');
                         openTag('emphasis');
+                        italic = true;
                         break;
                         break;
                     case 'b':
                     case 'b':
                         openTag('strong');
                         openTag('strong');
+                        bold = true;
                         break;
                         break;
                     case 'div':
                     case 'div':
                         if (tail.indexOf('align="center"') >= 0) {
                         if (tail.indexOf('align="center"') >= 0) {
@@ -331,9 +338,11 @@ class BookConverter {
                         break;
                         break;
                     case 'i':
                     case 'i':
                         closeTag('emphasis');
                         closeTag('emphasis');
+                        italic = false;
                         break;
                         break;
                     case 'b':
                     case 'b':
                         closeTag('strong');
                         closeTag('strong');
+                        bold = false;
                         break;
                         break;
                     case 'div':
                     case 'div':
                         if (inSubtitle) {
                         if (inSubtitle) {
@@ -381,8 +390,13 @@ class BookConverter {
                     return;
                     return;
             }
             }
 
 
+            let tOpen = (bold ? '<strong>' : '');
+            tOpen += (italic ? '<emphasis>' : '');
+            let tClose = (italic ? '</emphasis>' : '');
+            tClose += (bold ? '</strong>' : '');
+
             if (inText)
             if (inText)
-                growParagraph(text);
+                growParagraph(`${tOpen}${text}${tClose}`);
         };
         };
 
 
         sax.parseSync(repSpaces(this.decode(data).toString()), {
         sax.parseSync(repSpaces(this.decode(data).toString()), {