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

Исправление парсинга примечаний

Book Pauk 11 месяцев назад
Родитель
Сommit
897cdc8ac7

+ 15 - 2
client/components/Reader/TextPage/TextPage.vue

@@ -1271,8 +1271,14 @@ class TextPage {
         if (note) {
             if (orig) {//show dialog
                 this.noteId = noteId;
-                const pad = (note.para.length > 1 ? 20 : 0);
-                this.noteHtml = note.para.map(p => `<p style="margin: 0; padding-left: ${pad}px">${p}</p>`).join('');
+                this.noteHtml = note.xml
+                    .replace(/<p>/g, '<p class="note-para">')
+                    .replace(/<stanza>/g, '<br>').replace(/<\/stanza>/g, '')
+                    .replace(/<v>/g, '<p class="note-para">').replace(/<\/v>/g, '</p>')
+                    .replace(/<emphasis>/g, '<em>').replace(/<\/emphasis>/g, '</em>')
+                    .replace(/<text-author>/g, '<br>').replace(/<\/text-author>/g, '')
+                ;
+
                 this.noteDialogVisible = true;
             } else {//go to orig
                 this.goToOrigNote(noteId);
@@ -1335,3 +1341,10 @@ export default vueComponent(TextPage);
 }
 
 </style>
+<style>
+.note-para {
+    margin: 0;
+    padding: 0;
+    text-indent: 20px;
+}
+</style>

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

@@ -94,6 +94,7 @@ export default class BookParser {
         let inNote = false;
         let noteId = '';
         let inNotesBody = false;
+        const noteTags = new Set(['p', 'poem', 'stanza', 'v', 'text-author', 'emphasis']);
 
         //оглавление
         this.contents = [];
@@ -429,7 +430,7 @@ export default class BookParser {
                             }
 
                             note.noteParaIndex = paraIndex;
-                            note.para = [];
+                            note.xml = '';
                             noteId = id;
                         }
 
@@ -447,12 +448,8 @@ export default class BookParser {
                         inPara = true;
                         isFirstTitlePara = false;
 
-                        if (inNotesBody && noteId) {
-                            if (!inTitle) {
-                                this.notes[noteId].para.push('');
-                            } else {
-                                growParagraph(`<note href="${noteId}">`, 0);
-                            }
+                        if (inTitle && inNotesBody && noteId) {
+                            growParagraph(`<note href="${noteId}">`, 0);
                         }
                     }
                 }
@@ -487,6 +484,10 @@ export default class BookParser {
                     bold = true;
                     space += 1;
                 }
+
+                if (!inTitle && inNotesBody && noteId && noteTags.has(tag)) {
+                    this.notes[noteId].xml += `<${tag}>`;
+                }
             }
         };
 
@@ -551,6 +552,10 @@ export default class BookParser {
                     bold = false;
                     space -= 1;
                 }
+
+                if (!inTitle && inNotesBody && noteId && noteTags.has(tag)) {
+                    this.notes[noteId].xml += `</${tag}>`;
+                }
             }
 
             let i = path.lastIndexOf(tag);
@@ -637,10 +642,8 @@ export default class BookParser {
                 else
                     growParagraph(' ', 1);
 
-                if (!inTitle && inPara && inNotesBody && noteId) {
-                    const p = this.notes[noteId].para;
-                    if (p.length)
-                        p[p.length - 1] = p[p.length - 1] + text;
+                if (!inTitle && inNotesBody && noteId) {
+                    this.notes[noteId].xml += text;
                 }
             }
         };