package main import ( "bytes" "fmt" "slices" ) type SvgWriter struct { ypos float64 header []byte out bytes.Buffer } func NewSvg() *SvgWriter { svg := &SvgWriter{} svg.header = []byte(``) svg.out.WriteString(` succeeded failed blocked broken building unresolvable scheduled disabled excluded unknown `) return svg } func (svg *SvgWriter) WriteTitle(title string) { svg.out.WriteString(`` + title + "") svg.ypos += 2.5 } func (svg *SvgWriter) WriteSubtitle(subtitle string) { svg.out.WriteString(``) svg.out.WriteString(`` + subtitle + ``) svg.ypos += 2 } func (svg *SvgWriter) WritePackageStatus(loglink, arch, status, detail string) { StatusToSVG := func(S string) string { switch S { case "succeeded": return "s" case "failed": return "f" case "broken", "scheduled": return S case "blocked": return "b" case "building": return "build" case "unresolvable": return "u" case "disabled": return "d" case "excluded": return "e" } return "un" } svg.out.WriteString(`` + arch + ``) svg.out.WriteString(``) if len(loglink) > 0 { svg.out.WriteString(``) } svg.out.WriteString(``) if len(loglink) > 0 { svg.out.WriteString(``) } if len(detail) > 0 { svg.out.WriteString(`` + fmt.Sprint(detail) + "") } svg.out.WriteString("\n") svg.ypos += 2 } func (svg *SvgWriter) GenerateSvg() []byte { return slices.Concat(svg.header, []byte(fmt.Sprint(svg.ypos)), svg.out.Bytes(), []byte("")) }