kata-containers/tests/cmd/check-markdown/extract.go
Aurélien Bombo e9f88757ba tests: Remove replace directives in go.mod
Same rationale as for runtime. With tests, the blackfriday replacement was
actually meaningful, so I refactored some imports.

Signed-off-by: Aurélien Bombo <abombo@microsoft.com>
2025-03-14 18:00:36 +00:00

94 lines
1.8 KiB
Go

//
// Copyright (c) 2019 Intel Corporation
//
// SPDX-License-Identifier: Apache-2.0
//
package main
import (
"fmt"
bf "github.com/russross/blackfriday/v2"
)
// linkDescription extracts the description from the specified link node.
func linkDescription(l *bf.Node) (string, error) {
if err := checkNode(l, bf.Link); err != nil {
return "", err
}
// A link description can be comprised of various elements so scan
// through them to build up the final value.
text := ""
node := l.FirstChild
for node != nil {
switch node.Type {
case bf.Code:
text += string(node.Literal)
case bf.Text:
text += string(node.Literal)
default:
logger.WithField("node", node).Debug("ignoring node")
}
if node == l.LastChild {
break
}
node = node.Next
}
return text, nil
}
// headingName extracts the heading name from the specified Heading node in
// plain text, and markdown. The latter is used for creating TOC's which need
// to include the original markdown value.
func headingName(h *bf.Node) (name, mdName string, err error) {
if err = checkNode(h, bf.Heading); err != nil {
return "", "", err
}
// A heading can be comprised of various elements so scan
// through them to build up the final value.
node := h.FirstChild
for node != nil {
switch node.Type {
case bf.Code:
value := string(node.Literal)
name += value
mdName += fmt.Sprintf("`%s`", value)
case bf.Text:
value := string(node.Literal)
name += value
mdName += value
case bf.Link:
// yep, people do crazy things like adding links into titles!
descr, err := linkDescription(node)
if err != nil {
return "", "", err
}
name += descr
mdName += descr
default:
logger.WithField("node", node).Debug("ignoring node")
}
if node == h.LastChild {
break
}
node = node.Next
}
return name, mdName, nil
}