github.com/kata-containers/tests@v0.0.0-20240307153542-772105b56064/cmd/check-markdown/display.go (about) 1 // 2 // Copyright (c) 2019 Intel Corporation 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 // 6 7 package main 8 9 import ( 10 "fmt" 11 "os" 12 "sort" 13 14 "github.com/sirupsen/logrus" 15 ) 16 17 var outputFile = os.Stdout 18 19 // displayHandler is an interface that all output display handlers 20 // (formatters) must implement. 21 type DisplayHandler interface { 22 DisplayHeadings(d *Doc) error 23 DisplayLinks(d *Doc) error 24 } 25 26 // DisplayHandlers encapsulates the list of available display handlers. 27 type DisplayHandlers struct { 28 handlers map[string]DisplayHandler 29 } 30 31 // handlers is a map of the available output format display handling 32 // implementations. 33 var handlers map[string]DisplayHandler 34 35 // NewDisplayHandlers create a new DisplayHandler. 36 func NewDisplayHandlers(tsvSeparator string, disableHeader bool) *DisplayHandlers { 37 separator := rune('\t') 38 39 if tsvSeparator != "" { 40 separator = rune(tsvSeparator[0]) 41 } 42 43 if handlers == nil { 44 handlers = make(map[string]DisplayHandler) 45 46 handlers[textFormat] = NewDisplayText(outputFile) 47 handlers[tsvFormat] = NewDisplayTSV(outputFile, separator, disableHeader) 48 } 49 50 h := &DisplayHandlers{ 51 handlers: handlers, 52 } 53 54 return h 55 } 56 57 // find looks for a display handler corresponding to the specified format 58 func (d *DisplayHandlers) find(format string) DisplayHandler { 59 for f, handler := range d.handlers { 60 if f == format { 61 return handler 62 } 63 } 64 65 return nil 66 } 67 68 // Get returns a list of the available formatters (display handler names). 69 func (d *DisplayHandlers) Get() []string { 70 var formats []string 71 72 for f := range d.handlers { 73 formats = append(formats, f) 74 } 75 76 sort.Strings(formats) 77 78 return formats 79 } 80 81 func show(inputFilename string, logger *logrus.Entry, handler DisplayHandler, what DataToShow) error { 82 var fn func(*Doc) error 83 84 switch what { 85 case showHeadings: 86 fn = handler.DisplayHeadings 87 case showLinks: 88 fn = handler.DisplayLinks 89 default: 90 return fmt.Errorf("unknown show option: %v", what) 91 } 92 93 doc := newDoc(inputFilename, logger) 94 doc.ListMode = true 95 96 err := doc.parse() 97 if err != nil { 98 return err 99 } 100 101 return fn(doc) 102 }