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>
116 lines
2.3 KiB
Go
116 lines
2.3 KiB
Go
//
|
|
// Copyright (c) 2019 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package main
|
|
|
|
import (
|
|
bf "github.com/russross/blackfriday/v2"
|
|
)
|
|
|
|
// handleNode processes the specified node.
|
|
func (d *Doc) handleNode(node *bf.Node) error {
|
|
var err error
|
|
|
|
switch node.Type {
|
|
case bf.Heading:
|
|
err = d.handleHeading(node)
|
|
case bf.Link:
|
|
err = d.handleLink(node)
|
|
case bf.Text:
|
|
// handle blackfriday deficiencies
|
|
headings, err := d.forceCreateHeadings(node)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, heading := range headings {
|
|
err := d.addHeading(heading)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
default:
|
|
return nil
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
// makeHeading creates a heading from the specified node.
|
|
func (d *Doc) makeHeading(node *bf.Node) (Heading, error) {
|
|
if err := checkNode(node, bf.Heading); err != nil {
|
|
return Heading{}, err
|
|
}
|
|
|
|
name, mdName, err := headingName(node)
|
|
if err != nil {
|
|
return Heading{}, d.Errorf("failed to get heading name: %v", err)
|
|
}
|
|
|
|
data := node.HeadingData
|
|
|
|
heading, err := newHeading(name, mdName, data.Level)
|
|
if err != nil {
|
|
return Heading{}, err
|
|
}
|
|
|
|
return heading, nil
|
|
}
|
|
|
|
// handleHeading processes the heading represented by the specified node.
|
|
func (d *Doc) handleHeading(node *bf.Node) error {
|
|
if err := checkNode(node, bf.Heading); err != nil {
|
|
return err
|
|
}
|
|
|
|
heading, err := d.makeHeading(node)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return d.addHeading(heading)
|
|
}
|
|
|
|
func (d *Doc) handleLink(node *bf.Node) error {
|
|
if err := checkNode(node, bf.Link); err != nil {
|
|
return err
|
|
}
|
|
|
|
address := string(node.Destination)
|
|
|
|
description, err := linkDescription(node)
|
|
if err != nil {
|
|
return d.Errorf("failed to get link name: %v", err)
|
|
}
|
|
|
|
link, err := newLink(d, address, description)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return d.addLink(link)
|
|
}
|
|
|
|
// handleIntraDocLinks checks the links between documents are correct.
|
|
//
|
|
// For example, if a document refers to "foo.md#section-bar", this function
|
|
// will ensure that "section-bar" exists in external file "foo.md".
|
|
func handleIntraDocLinks() error {
|
|
for _, doc := range docs {
|
|
for addr, linkList := range doc.Links {
|
|
for _, link := range linkList {
|
|
err := doc.checkLink(addr, link, true)
|
|
if err != nil {
|
|
return doc.Errorf("intra-doc link invalid: %v", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|