diff --git a/doc/api_assets/style.css b/doc/api_assets/style.css
index 7f471a8c08a499..e7ecfd264ad542 100644
--- a/doc/api_assets/style.css
+++ b/doc/api_assets/style.css
@@ -472,8 +472,8 @@ hr {
margin: 0 0 1rem;
}
-#toc h2 {
- margin: 1.5rem 0;
+#toc > ul {
+ margin-top: 1.5rem;
}
#toc p {
diff --git a/doc/template.html b/doc/template.html
index d7cc96062eaf6a..675a761bd80f88 100644
--- a/doc/template.html
+++ b/doc/template.html
@@ -55,10 +55,10 @@
__CONTENT__
diff --git a/tools/doc/allhtml.js b/tools/doc/allhtml.js
index c038b1f57a9bb8..5a24cee4292656 100644
--- a/tools/doc/allhtml.js
+++ b/tools/doc/allhtml.js
@@ -31,10 +31,10 @@ for (const link of toc.match(/
/g)) {
const data = fs.readFileSync(source + '/' + href, 'utf8');
// Split the doc.
- const match = /(<\/ul>\s*)?<\/div>\s*/.exec(data);
+ const match = /(<\/ul>\s*)?<\/\w+>\s*<\w+ id="apicontent">/.exec(data);
contents += data.slice(0, match.index)
- .replace(/[\s\S]*?
\s*
.*?<\/h2>\s*(\s*)?/, '');
+ .replace(/[\s\S]*?id="toc"[^>]*>\s*<\w+>.*?<\/\w+>\s*(\s*)?/, '');
apicontent += data.slice(match.index + match[0].length)
.replace(/[\s\S]*/, '')
@@ -59,13 +59,13 @@ let all = toc.replace(/index\.html/g, 'all.html')
all = all.replace(/.*?\| /, '');
// Insert the combined table of contents.
-const tocStart = /\s*
.*?<\/h2>\s*/.exec(all);
+const tocStart = /<\w+ id="toc"[^>]*>\s*<\w+>.*?<\/\w+>\s*/.exec(all);
all = all.slice(0, tocStart.index + tocStart[0].length) +
'\n' +
all.slice(tocStart.index + tocStart[0].length);
// Replace apicontent with the concatenated set of apicontents from each source.
-const apiStart = /
\s*/.exec(all);
+const apiStart = /<\w+ id="apicontent">\s*/.exec(all);
const apiEnd = all.lastIndexOf('');
all = all.slice(0, apiStart.index + apiStart[0].length) +
apicontent +