From ae0130aa26eba0e90a867ead2570e838023053c9 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Mon, 7 Nov 2016 22:12:16 +0800 Subject: [PATCH] fix html toc parsing Handle wrong notation such as header 3 under header 1 directly. Signed-off-by: Le Tan --- src/vedittab.cpp | 11 ++++++----- src/vtoc.h | 3 +++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/vedittab.cpp b/src/vedittab.cpp index 5bc1cb77..4d70e57f 100644 --- a/src/vedittab.cpp +++ b/src/vedittab.cpp @@ -298,16 +298,17 @@ void VEditTab::parseTocLi(QXmlStreamReader &xml, QVector &headers, int qWarning() << "error: TOC HTML should be ended by " << 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
  • should contain or
      " << xml.name(); return; diff --git a/src/vtoc.h b/src/vtoc.h index b78a5c9d..daba74cf 100644 --- a/src/vtoc.h +++ b/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;