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 }