diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js
index 12955585..57f981db 100644
--- a/browser/lib/markdown.js
+++ b/browser/lib/markdown.js
@@ -4,6 +4,7 @@ import emoji from 'markdown-it-emoji'
import math from '@rokt33r/markdown-it-math'
import mdurl from 'mdurl'
import smartArrows from 'markdown-it-smartarrows'
+import markdownItTocAndAnchor from '@hikerpig/markdown-it-toc-and-anchor'
import _ from 'lodash'
import ConfigManager from 'browser/main/lib/ConfigManager'
import katex from 'katex'
@@ -127,6 +128,12 @@ class Markdown {
this.md.use(require('markdown-it-abbr'))
this.md.use(require('markdown-it-sub'))
this.md.use(require('markdown-it-sup'))
+ this.md.use(markdownItTocAndAnchor, {
+ toc: true,
+ tocPattern: /\[TOC\]/i,
+ anchorLink: false,
+ appendIdToHeading: false
+ })
this.md.use(require('./markdown-it-deflist'))
this.md.use(require('./markdown-it-frontmatter'))
diff --git a/package.json b/package.json
index c0709718..54eebe1f 100644
--- a/package.json
+++ b/package.json
@@ -50,6 +50,7 @@
"homepage": "https://boostnote.io",
"dependencies": {
"@enyaxu/markdown-it-anchor": "^5.0.2",
+ "@hikerpig/markdown-it-toc-and-anchor": "^4.5.0",
"@rokt33r/js-sequence-diagrams": "^2.0.6-2",
"@rokt33r/markdown-it-math": "^4.0.1",
"@rokt33r/season": "^5.3.0",
diff --git a/tests/fixtures/markdowns.js b/tests/fixtures/markdowns.js
index ca67c396..f2f5b493 100644
--- a/tests/fixtures/markdowns.js
+++ b/tests/fixtures/markdowns.js
@@ -109,6 +109,14 @@ const footnote = `
hello-world: https://github.com/BoostIO/Boostnote/
`
+const tocPlaceholder = `
+[TOC]
+# H1
+## H2
+### H3
+###$ H4
+`
+
const plantUmlMindMap = `
@startmindmap
* Debian
@@ -192,6 +200,7 @@ export default {
deflists,
shortcuts,
footnote,
+ tocPlaceholder,
plantUmlMindMap,
plantUmlGantt,
plantUmlWbs,
diff --git a/tests/lib/markdown-test.js b/tests/lib/markdown-test.js
index 0934c27f..9aec244d 100644
--- a/tests/lib/markdown-test.js
+++ b/tests/lib/markdown-test.js
@@ -74,6 +74,11 @@ test('Markdown.render() should render footnote correctly', t => {
t.snapshot(rendered)
})
+test('Markdown.render() should renders [TOC] placholder correctly', t => {
+ const rendered = md.render(markdownFixtures.tocPlaceholder)
+ t.snapshot(rendered)
+})
+
test('Markdown.render() should render PlantUML MindMaps correctly', t => {
const rendered = md.render(markdownFixtures.plantUmlMindMap)
t.snapshot(rendered)
diff --git a/tests/lib/snapshots/markdown-test.js.md b/tests/lib/snapshots/markdown-test.js.md
index ac97f6c8..1ebc0275 100644
--- a/tests/lib/snapshots/markdown-test.js.md
+++ b/tests/lib/snapshots/markdown-test.js.md
@@ -83,6 +83,28 @@ Generated by [AVA](https://ava.li).
`c=pmsqrta2+b2␊
`
+## Markdown.render() should renders [TOC] placholder correctly
+
+> Snapshot 1
+
+ `
␊
+ ␊
+ H1
␊
+ H2
␊
+ H3
␊
+ ###$ H4
␊
+ `
+
## Markdown.render() should renders abbrevations correctly
> Snapshot 1
@@ -204,4 +226,39 @@ Generated by [AVA](https://ava.li).
> Snapshot 2
`This is a "QUOTE".
␊
+
+
+## Markdown.render() should render PlantUML Ditaa correctly
+
+> Snapshot 1
+
+ `
␊
`
+
+## Markdown.render() should render PlantUML Gantt correctly
+
+> Snapshot 1
+
+ `
␊
+ `
+
+## Markdown.render() should render PlantUML MindMaps correctly
+
+> Snapshot 1
+
+ `
␊
+ `
+
+## Markdown.render() should render PlantUML Umls correctly
+
+> Snapshot 1
+
+ `
␊
+ `
+
+## Markdown.render() should render PlantUML WBS correctly
+
+> Snapshot 1
+
+ `
␊
+ `
\ No newline at end of file
diff --git a/tests/lib/snapshots/markdown-test.js.snap b/tests/lib/snapshots/markdown-test.js.snap
index 76bc8ccd..3e68ab1b 100644
Binary files a/tests/lib/snapshots/markdown-test.js.snap and b/tests/lib/snapshots/markdown-test.js.snap differ
diff --git a/yarn.lock b/yarn.lock
index ec82dd2a..6cac542e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -74,6 +74,14 @@
version "5.0.2"
resolved "https://registry.yarnpkg.com/@enyaxu/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz#d173f7b60b492aabc17dfba864c4d071f5595f72"
+"@hikerpig/markdown-it-toc-and-anchor@^4.5.0":
+ version "4.5.0"
+ resolved "https://registry.npmjs.org/@hikerpig/markdown-it-toc-and-anchor/-/markdown-it-toc-and-anchor-4.5.0.tgz#c1652bdebfd07d41c9738254891515d759b054f0"
+ integrity sha512-PaYl/v9/ViceXm+fC+WoQOD/8lvYf76SnA3s8b/BQ6s3NpZdk/W/aW0dg5YHquQNcdaLfz3lmQTt6iafbe5tbg==
+ dependencies:
+ clone "^2.1.0"
+ uslug "^1.0.4"
+
"@ladjs/time-require@^0.1.4":
version "0.1.4"
resolved "https://registry.yarnpkg.com/@ladjs/time-require/-/time-require-0.1.4.tgz#5c615d75fd647ddd5de9cf6922649558856b21a1"
@@ -1814,6 +1822,11 @@ clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+clone@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+ integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
+
co-with-promise@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co-with-promise/-/co-with-promise-4.6.0.tgz#413e7db6f5893a60b942cf492c4bec93db415ab7"
@@ -9557,6 +9570,11 @@ universalify@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
+"unorm@>= 1.0.0":
+ version "1.6.0"
+ resolved "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af"
+ integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==
+
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
@@ -9634,6 +9652,13 @@ user-home@^2.0.0:
dependencies:
os-homedir "^1.0.0"
+uslug@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/uslug/-/uslug-1.0.4.tgz#b9a22f0914e0a86140633dacc302e5f4fa450677"
+ integrity sha1-uaIvCRTgqGFAYz2swwLl9PpFBnc=
+ dependencies:
+ unorm ">= 1.0.0"
+
utf8-byte-length@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"