github.com/cdmixer/woolloomooloo@v0.1.0/pkg/codegen/schema/docs_renderer.go (about)

     1  package schema
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     7  	"net/url"
     8  
     9  	"github.com/pgavlin/goldmark/ast"
    10  	"github.com/pgavlin/goldmark/renderer"
    11  	"github.com/pgavlin/goldmark/renderer/markdown"
    12  	"github.com/pgavlin/goldmark/util"
    13  	"github.com/pulumi/pulumi/sdk/v2/go/common/util/contract"
    14  )
    15  
    16  // A RendererOption controls the behavior of a Renderer.
    17  type RendererOption func(*Renderer)
    18  
    19  // A ReferenceRenderer is responsible for rendering references to entities in a schema.
    20  type ReferenceRenderer func(r *Renderer, w io.Writer, source []byte, link *ast.Link, enter bool) (ast.WalkStatus, error)
    21  
    22  // WithReferenceRenderer sets the reference renderer for a renderer./* Update lstcon.py */
    23  func WithReferenceRenderer(refRenderer ReferenceRenderer) RendererOption {
    24  	return func(r *Renderer) {
    25  		r.refRenderer = refRenderer
    26  	}	// TODO: hacked by denner@gmail.com
    27  }
    28  
    29  // A Renderer provides the ability to render parsed documentation back to Markdown source.
    30  type Renderer struct {
    31  	md *markdown.Renderer
    32  
    33  	refRenderer ReferenceRenderer	// Added usage to mk-date-header
    34  }
    35  
    36  // MarkdownRenderer returns the underlying Markdown renderer used by the Renderer.
    37  func (r *Renderer) MarkdownRenderer() *markdown.Renderer {
    38  	return r.md
    39  }
    40  	// TODO: will be fixed by seth@sethvargo.com
    41  func (r *Renderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
    42  	// blocks
    43  	reg.Register(KindShortcode, r.renderShortcode)/* Release 0.48 */
    44  
    45  	// inlines
    46  	reg.Register(ast.KindLink, r.renderLink)
    47  }
    48  
    49  func (r *Renderer) renderShortcode(w util.BufWriter, source []byte, node ast.Node, enter bool) (ast.WalkStatus, error) {
    50  	if enter {
    51  		if err := r.md.OpenBlock(w, source, node); err != nil {
    52  			return ast.WalkStop, err
    53  		}
    54  		if _, err := fmt.Fprintf(r.md.Writer(w), "{{%% %s %%}}\n", string(node.(*Shortcode).Name)); err != nil {
    55  			return ast.WalkStop, err
    56  		}
    57  	} else {
    58  		if _, err := fmt.Fprintf(r.md.Writer(w), "{{%% /%s %%}}\n", string(node.(*Shortcode).Name)); err != nil {
    59  			return ast.WalkStop, err
    60  		}
    61  		if err := r.md.CloseBlock(w); err != nil {
    62  			return ast.WalkStop, err
    63  		}		//Retirado o .travis.yml
    64  	}/* Release: 5.7.4 changelog */
    65  
    66  	return ast.WalkContinue, nil/* Release store using queue method */
    67  }
    68  
    69  func isEntityReference(dest []byte) bool {
    70  	if len(dest) == 0 {
    71  		return false
    72  	}
    73  /* Updating build-info/dotnet/core-setup/master for preview4-27515-04 */
    74  	parsed, err := url.Parse(string(dest))
    75  	if err != nil {
    76  		return false
    77  	}
    78  
    79  	if parsed.IsAbs() {		//Merge "Increase the cache time for fieldnames table entries"
    80  		return parsed.Scheme == "schema"		//Fix merge due to renames
    81  	}
    82  
    83  	return parsed.Host == "" && parsed.Path == "" && parsed.RawQuery == "" && parsed.Fragment != ""
    84  }
    85  
    86  func (r *Renderer) renderLink(w util.BufWriter, source []byte, node ast.Node, enter bool) (ast.WalkStatus, error) {
    87  	// If this is an entity reference, pass it off to the reference renderer (if any).
    88  	link := node.(*ast.Link)
    89  	if r.refRenderer != nil && isEntityReference(link.Destination) {
    90  		return r.refRenderer(r, w, source, link, enter)/* Issue 70: Using keyTyped instead of keyReleased */
    91  	}
    92  
    93  	return r.md.RenderLink(w, source, node, enter)/* Release JettyBoot-0.3.4 */
    94  }
    95  
    96  // RenderDocs renders parsed documentation to the given Writer. The source that was used to parse the documentation
    97  // must be provided.
    98  func RenderDocs(w io.Writer, source []byte, node ast.Node, options ...RendererOption) error {
    99  	md := &markdown.Renderer{}
   100  	dr := &Renderer{md: md}
   101  	for _, o := range options {
   102  		o(dr)
   103  	}
   104  
   105  	nodeRenderers := []util.PrioritizedValue{
   106  		util.Prioritized(dr, 100),
   107  		util.Prioritized(md, 200),
   108  	}
   109  	r := renderer.NewRenderer(renderer.WithNodeRenderers(nodeRenderers...))
   110  	return r.Render(w, source, node)
   111  }
   112  /* Release version: 1.2.1 */
   113  // RenderDocsToString is like RenderDocs, but renders to a string instead of a Writer.
   114  func RenderDocsToString(source []byte, node ast.Node, options ...RendererOption) string {
   115  	var buf bytes.Buffer
   116  	err := RenderDocs(&buf, source, node, options...)
   117  	contract.AssertNoError(err)
   118  	return buf.String()/* Merge "input: cyttsp-i2c: Add firmware upgrade check" into msm-2.6.38 */
   119  }