Open
Description
Something like this:
/// A section of the Table of Contents
class TocNode {
/// What level heading this node is.
///
/// This is not defined by what tag it is using, or how many `#` it has, but rather
/// how many levels of nesting have occurred in the document so far. That is to say,
///
/// ```md
/// # Level 1
/// ### Level 2
/// ##### Level 3
/// ```
int level;
/// The list of [TocNode] that are nested under this heading.
List<TocNode> children;
/// The title of the node, as a string.
String title;
/// The parent heading for this node.
TocNode? parent;
/// Renders this content to markdown
List<Node> renderToMarkdown();
}
class Document {
/// Generates a Table of Contents for this document.
List<TocNode> generateToc(); // or generateTableOfContents()
}
I may be misunderstanding Document
here -- its API does not include a List<Node>
, so given the typical approach of:
final doc = Document()
final nodes = doc.parse(markdown);
would I need to make a TocNode generataeToc(List<Node> nodes)
instead?
Code for parsing can be found at dart-lang/pub-dev#8348. See the discussion there for context, but the motivation is to eventually generate a ToC on the side of Pub package pages.