summaryrefslogtreecommitdiffstats
path: root/markup/converter/converter.go
diff options
context:
space:
mode:
Diffstat (limited to 'markup/converter/converter.go')
-rw-r--r--markup/converter/converter.go22
1 files changed, 18 insertions, 4 deletions
diff --git a/markup/converter/converter.go b/markup/converter/converter.go
index 7e5b56b07..e5a07f1a1 100644
--- a/markup/converter/converter.go
+++ b/markup/converter/converter.go
@@ -74,7 +74,7 @@ var NopConverter = new(nopConverter)
type nopConverter int
-func (nopConverter) Convert(ctx RenderContext) (Result, error) {
+func (nopConverter) Convert(ctx RenderContext) (ResultRender, error) {
return &bytes.Buffer{}, nil
}
@@ -85,15 +85,29 @@ func (nopConverter) Supports(feature identity.Identity) bool {
// Converter wraps the Convert method that converts some markup into
// another format, e.g. Markdown to HTML.
type Converter interface {
- Convert(ctx RenderContext) (Result, error)
+ Convert(ctx RenderContext) (ResultRender, error)
Supports(feature identity.Identity) bool
}
-// Result represents the minimum returned from Convert.
-type Result interface {
+// ParseRenderer is an optional interface.
+// The Goldmark converter implements this, and this allows us
+// to extract the ToC without having to render the content.
+type ParseRenderer interface {
+ Parse(RenderContext) (ResultParse, error)
+ Render(RenderContext, any) (ResultRender, error)
+}
+
+// ResultRender represents the minimum returned from Convert and Render.
+type ResultRender interface {
Bytes() []byte
}
+// ResultParse represents the minimum returned from Parse.
+type ResultParse interface {
+ Doc() any
+ TableOfContents() *tableofcontents.Fragments
+}
+
// DocumentInfo holds additional information provided by some converters.
type DocumentInfo interface {
AnchorSuffix() string