This is an outdated guide, for vpub-plus version prior to 1.14. See Adding new render engine: how-to guide for up to date information.
Follow these steps to implement a custom renderer! Due to some design limitations, we need to use Go’s build tags to replace render function.
1. Create convert_blackfriday.go
Create convert_blackfriday.go in the /syntax folder.
2. Set Up Build Constraints
In convert_blackfriday.go
Add the build tags at the top:
//go:build blackfriday
// +build blackfriday
In convert_vanilla.go
Ensure it’s used when blackfriday is not set:
//go:build !blackfriday
// +build !blackfriday
This way if we provide -tags blackfriday we will use convert_blackfriday.go and if not, then convert_vanilla.go.
3. Implement the Convert Function
Add the following to convert_blackfriday.go:
package syntax
import (
	"strings"
	"github.com/microcosm-cc/bluemonday"
	"github.com/russross/blackfriday/v2"
)
func Convert(gmi string, wrap bool) string {
	clearedString := strings.ReplaceAll(gmi, "\r\n", "\n")
	unsafeHTML := blackfriday.Run([]byte(clearedString), blackfriday.WithExtensions(blackfriday.CommonExtensions))
	safeHTML := bluemonday.UGCPolicy().SanitizeBytes(unsafeHTML)
	return string(safeHTML)
}
4. Build with the blackfriday Flag
Compile vpub-plus using the build tag:
go build -tags blackfriday .
This will use convert_blackfriday.go instead of convert_vanilla.go.