File: converter.go

package info (click to toggle)
golang-github-johanneskaufmann-html-to-markdown 2.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,080 kB
  • sloc: makefile: 3
file content (72 lines) | stat: -rw-r--r-- 1,636 bytes parent folder | download
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package converter

import "sync"

type Converter struct {
	m sync.RWMutex

	err error

	registeredPlugins []string

	preRenderHandlers  prioritizedSlice[HandlePreRenderFunc]
	renderHandlers     prioritizedSlice[HandleRenderFunc]
	postRenderHandlers prioritizedSlice[HandlePostRenderFunc]

	textTransformHandlers prioritizedSlice[HandleTextTransformFunc]

	markdownChars    map[rune]interface{}
	unEscapeHandlers prioritizedSlice[HandleUnEscapeFunc]

	tagTypes map[string]prioritizedSlice[tagType]

	escapeMode escapeMode

	Register register
}

type converterOption = func(c *Converter) error

func NewConverter(opts ...converterOption) *Converter {
	conv := &Converter{
		markdownChars: make(map[rune]interface{}),
		tagTypes:      make(map[string]prioritizedSlice[tagType]),
	}
	conv.Register = register{conv}

	for _, opt := range opts {
		err := opt(conv)
		if err != nil {
			conv.setError(err)
			break
		}
	}

	return conv
}

type escapeMode string

const (
	EscapeModeDisabled escapeMode = "disabled"
	EscapeModeSmart    escapeMode = "smart"
)

// WithEscapeMode changes the strictness of the "escaping".
//
// Some characters have a special meaning in markdown.
// For example, the character "*" can be used for lists, emphasis and dividers.
// By placing a backlash before that character (e.g. "\*") you can "escape" it.
// Then the character will render as a raw "*" without the "markdown meaning" applied.
//
// Learn more in the documentation
//
//	"disabled" or "smart"
//
//	default: "smart"
func WithEscapeMode(mode escapeMode) converterOption {
	return func(c *Converter) error {
		c.escapeMode = mode
		return nil
	}
}