mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-27 11:31:05 +00:00
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>
98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
//
|
|
// Copyright (c) 2019 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"unicode"
|
|
|
|
bf "github.com/russross/blackfriday/v2"
|
|
)
|
|
|
|
// fileExists returns true if the specified file exists, else false.
|
|
func fileExists(path string) bool {
|
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// splitLink splits a link like "foo.md#section-name" into a filename
|
|
// ("foo.md") and a section name ("section-name").
|
|
func splitLink(linkName string) (fileName, sectionName string, err error) {
|
|
if linkName == "" {
|
|
return "", "", errors.New("need linkName")
|
|
}
|
|
|
|
if !strings.Contains(linkName, anchorPrefix) {
|
|
return linkName, "", nil
|
|
}
|
|
|
|
fields := strings.Split(linkName, anchorPrefix)
|
|
|
|
expectedFields := 2
|
|
foundFields := len(fields)
|
|
if foundFields != expectedFields {
|
|
|
|
return "", "", fmt.Errorf("invalid link %s: expected %d fields, found %d", linkName, expectedFields, foundFields)
|
|
}
|
|
|
|
fileName = fields[0]
|
|
sectionName = fields[1]
|
|
|
|
return fileName, sectionName, nil
|
|
}
|
|
|
|
// validHeadingIDChar is a strings.Map() function used to determine which characters
|
|
// can appear in a heading ID.
|
|
func validHeadingIDChar(r rune) rune {
|
|
if unicode.IsLetter(r) ||
|
|
unicode.IsNumber(r) ||
|
|
unicode.IsSpace(r) ||
|
|
r == '-' || r == '_' {
|
|
return r
|
|
}
|
|
|
|
// Remove all other chars from destination string
|
|
return -1
|
|
}
|
|
|
|
// createHeadingID creates an HTML anchor name for the specified heading
|
|
func createHeadingID(headingName string) (id string, err error) {
|
|
if headingName == "" {
|
|
return "", fmt.Errorf("need heading name")
|
|
}
|
|
|
|
// Munge the original heading into an id by:
|
|
//
|
|
// - removing invalid characters.
|
|
// - lower-casing.
|
|
// - replace spaces
|
|
id = strings.Map(validHeadingIDChar, headingName)
|
|
|
|
id = strings.ToLower(id)
|
|
id = strings.Replace(id, " ", "-", -1)
|
|
|
|
return id, nil
|
|
}
|
|
|
|
func checkNode(node *bf.Node, expectedType bf.NodeType) error {
|
|
if node == nil {
|
|
return errors.New("node cannot be nil")
|
|
}
|
|
|
|
if node.Type != expectedType {
|
|
return fmt.Errorf("expected %v node, found %v", expectedType, node.Type)
|
|
}
|
|
|
|
return nil
|
|
}
|