Browse Source

Поправил баг

Book Pauk 6 years ago
parent
commit
b50498fa46
1 changed files with 41 additions and 2 deletions
  1. 41 2
      server/core/BookConverter/ConvertHtml.js

+ 41 - 2
server/core/BookConverter/ConvertHtml.js

@@ -242,11 +242,50 @@ class ConvertHtml extends ConvertBase {
             body.section._a[0] = pars;
         }
 
-        //убираем лишнее
+        //убираем лишнее, делаем валидный fb2, т.к. в рез-те разбиения на параграфы бьются теги
+        bold = false;
+        italic = false;
         pars = body.section._a[0];
-        for (let i = 0; i < pars.length; i++)
+        for (let i = 0; i < pars.length; i++) {
+            if (pars[i]._n != 'p')
+                continue;
+
             pars[i]._t = this.repSpaces(pars[i]._t).trim();
 
+            if (pars[i]._t.indexOf('<') >= 0) {
+                const t = pars[i]._t;
+                let a = [];
+
+                const onTextNode = (text) => {
+                    let tOpen = (bold ? '<strong>' : '');
+                    tOpen += (italic ? '<emphasis>' : '');
+                    let tClose = (italic ? '</emphasis>' : '');
+                    tClose += (bold ? '</strong>' : '');
+
+                    a.push(`${tOpen}${text}${tClose}`);
+                }
+
+                const onStartNode = (tag) => {
+                    if (tag == 'strong')
+                        bold = true;
+                    if (tag == 'emphasis')
+                        italic = true;
+                }
+
+                const onEndNode = (tag) => {
+                    if (tag == 'strong')
+                        bold = false;
+                    if (tag == 'emphasis')
+                        italic = false;
+                }
+
+                sax.parseSync(t, { onStartNode, onEndNode, onTextNode });
+
+                pars[i]._t = '';
+                pars[i]._a = a;
+            }
+        }
+
         return this.formatFb2(fb2);
     }