From ab91f755c023807fc7eb4960b82f1210abe3b173 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Mon, 7 Nov 2016 21:53:33 +0800 Subject: [PATCH] add dock widget to display outline 1. Support displaying outline of Markdown in read mode; 2. Support navigating by outline using Marked; Signed-off-by: Le Tan --- src/resources/icons/corner_tablist.svg | 2 +- src/resources/icons/outline.svg | 23 +++++ src/resources/template.html | 40 ++++++--- src/src.pro | 8 +- src/vdocument.cpp | 24 +++++- src/vdocument.h | 11 +++ src/veditarea.cpp | 17 ++++ src/veditarea.h | 4 + src/vedittab.cpp | 112 +++++++++++++++++++++++++ src/vedittab.h | 9 ++ src/veditwindow.cpp | 40 +++++++++ src/veditwindow.h | 5 ++ src/vmainwindow.cpp | 20 ++++- src/vmainwindow.h | 8 ++ src/vnote.cpp | 20 +++++ src/vnote.h | 4 + src/vnote.qrc | 1 + src/voutline.cpp | 79 +++++++++++++++++ src/voutline.h | 31 +++++++ src/vtoc.cpp | 6 ++ src/vtoc.h | 42 ++++++++++ 21 files changed, 488 insertions(+), 18 deletions(-) create mode 100644 src/resources/icons/outline.svg create mode 100644 src/voutline.cpp create mode 100644 src/voutline.h create mode 100644 src/vtoc.cpp create mode 100644 src/vtoc.h diff --git a/src/resources/icons/corner_tablist.svg b/src/resources/icons/corner_tablist.svg index d001b26e..1b9291d3 100644 --- a/src/resources/icons/corner_tablist.svg +++ b/src/resources/icons/corner_tablist.svg @@ -4,7 +4,7 @@ - + diff --git a/src/resources/icons/outline.svg b/src/resources/icons/outline.svg new file mode 100644 index 00000000..3d3693bd --- /dev/null +++ b/src/resources/icons/outline.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/resources/template.html b/src/resources/template.html index 195f0a08..505b513c 100644 --- a/src/resources/template.html +++ b/src/resources/template.html @@ -19,9 +19,12 @@ var placeholder = document.getElementById('placeholder'); var renderer = new marked.Renderer(); var toc = []; // Table of contents as a list + var content; // Channel variable with content + var nameCounter = 0; renderer.heading = function (text, level) { - var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); + // Use number to avoid issues with Chinese + var escapedText = 'toc_' + nameCounter++; toc.push({ level: level, anchor: escapedText, @@ -44,11 +47,12 @@ var markdownToHtml = function (markdown, needToc) { toc = []; + var html = marked(markdown, { renderer: renderer }); + nameCounter = 0; if (needToc) { - var html = marked(markdown, { renderer: renderer }); return html.replace(/

\[TOC\]<\/p>/ig, '

'); } else { - return marked(markdown); + return html; } }; @@ -74,7 +78,7 @@ }; var itemToHtml = function (item) { - return '' + item.title + ''; + return '' + item.title + ''; }; // Turn a perfect toc to a tree using