all repos — searchix @ 45a73d31ca17a17cebf1d2c933c6d1b88c8d9ef4

Search engine for NixOS, nix-darwin, home-manager and NUR users

internal/nixdocs/nixdocs.go (view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package nixdocs

import (
	"bytes"
	"io"

	"github.com/Southclaws/fault"
	fences "github.com/stefanfritsch/goldmark-fences"
	"github.com/yuin/goldmark"
	"github.com/yuin/goldmark/extension"

	"alin.ovh/searchix/internal/nixdocs/command"
	"alin.ovh/searchix/internal/nixdocs/envvar"
	"alin.ovh/searchix/internal/nixdocs/filepath"
	"alin.ovh/searchix/internal/nixdocs/manpage"
	"alin.ovh/searchix/internal/nixdocs/option"
	"alin.ovh/searchix/internal/nixdocs/optlink"
	"alin.ovh/searchix/internal/nixdocs/variable"
)

type Markdown string

var md = goldmark.New(
	goldmark.WithExtensions(
		extension.NewLinkify(),
		&fences.Extender{},
		optlink.New(),
		option.New(),
		command.New(),
		envvar.New(),
		variable.New(),
		filepath.New(),
		manpage.New(),
	),
)

// implements gomponent.Node
func (text Markdown) Render(w io.Writer) error {
	return fault.Wrap(md.Convert([]byte(text), w))
}

// implements io.WriterTo
func (text Markdown) WriteTo(w io.Writer) (int64, error) {
	var buf bytes.Buffer
	err := md.Convert([]byte(text), &buf)
	if err != nil {
		return 0, fault.Wrap(err)
	}

	n, err := w.Write(buf.Bytes())

	return int64(n), fault.Wrap(err)
}