mirror of
				https://github.com/kata-containers/kata-containers.git
				synced 2025-10-31 09:26:52 +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>
		
			
				
	
	
		
			94 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| }
 |