Browse Source

fix html toc parsing

Handle wrong notation such as header 3 under header 1 directly.

Signed-off-by: Le Tan <[email protected]>
Le Tan 9 years ago
parent
commit
ae0130aa26
2 changed files with 9 additions and 5 deletions
  1. 6 5
      src/vedittab.cpp
  2. 3 0
      src/vtoc.h

+ 6 - 5
src/vedittab.cpp

@@ -298,16 +298,17 @@ void VEditTab::parseTocLi(QXmlStreamReader &xml, QVector<VHeader> &headers, int
                     qWarning() << "error: TOC HTML <a> should be ended by </a>" << xml.name();
                     return;
                 }
-                VHeader header;
-                header.level = level;
-                header.name = name;
-                header.anchor = anchor;
-                header.lineNumber = -1;
+                VHeader header(level, name, anchor, -1);
                 headers.append(header);
             } else {
                 // Error
                 return;
             }
+        } else if (xml.name() == "ul") {
+            // Such as header 3 under header 1 directly
+            VHeader header(level, "[Empty]", "#", -1);
+            headers.append(header);
+            parseTocUl(xml, headers, level + 1);
         } else {
             qWarning() << "error: TOC HTML <li> should contain <a> or <ul>" << xml.name();
             return;

+ 3 - 0
src/vtoc.h

@@ -12,6 +12,9 @@ enum VHeaderType
 
 struct VHeader
 {
+    VHeader() : level(1), lineNumber(-1) {}
+    VHeader(int level, const QString &name, const QString &anchor, int lineNumber)
+        : level(level), name(name), anchor(anchor), lineNumber(lineNumber) {}
     int level;
     QString name;
     QString anchor;