1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage saver2v2 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "fmt" 7*ba677afaSXin Li "io" 8*ba677afaSXin Li "sort" 9*ba677afaSXin Li 10*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 11*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_2" 12*ba677afaSXin Li) 13*ba677afaSXin Li 14*ba677afaSXin Lifunc renderFile2_2(f *v2_2.File, w io.Writer) error { 15*ba677afaSXin Li if f.FileName != "" { 16*ba677afaSXin Li fmt.Fprintf(w, "FileName: %s\n", f.FileName) 17*ba677afaSXin Li } 18*ba677afaSXin Li if f.FileSPDXIdentifier != "" { 19*ba677afaSXin Li fmt.Fprintf(w, "SPDXID: %s\n", common.RenderElementID(f.FileSPDXIdentifier)) 20*ba677afaSXin Li } 21*ba677afaSXin Li for _, s := range f.FileTypes { 22*ba677afaSXin Li fmt.Fprintf(w, "FileType: %s\n", s) 23*ba677afaSXin Li } 24*ba677afaSXin Li 25*ba677afaSXin Li for _, checksum := range f.Checksums { 26*ba677afaSXin Li fmt.Fprintf(w, "FileChecksum: %s: %s\n", checksum.Algorithm, checksum.Value) 27*ba677afaSXin Li } 28*ba677afaSXin Li 29*ba677afaSXin Li if f.LicenseConcluded != "" { 30*ba677afaSXin Li fmt.Fprintf(w, "LicenseConcluded: %s\n", f.LicenseConcluded) 31*ba677afaSXin Li } 32*ba677afaSXin Li for _, s := range f.LicenseInfoInFiles { 33*ba677afaSXin Li fmt.Fprintf(w, "LicenseInfoInFile: %s\n", s) 34*ba677afaSXin Li } 35*ba677afaSXin Li if f.LicenseComments != "" { 36*ba677afaSXin Li fmt.Fprintf(w, "LicenseComments: %s\n", textify(f.LicenseComments)) 37*ba677afaSXin Li } 38*ba677afaSXin Li if f.FileCopyrightText != "" { 39*ba677afaSXin Li fmt.Fprintf(w, "FileCopyrightText: %s\n", textify(f.FileCopyrightText)) 40*ba677afaSXin Li } 41*ba677afaSXin Li for _, aop := range f.ArtifactOfProjects { 42*ba677afaSXin Li fmt.Fprintf(w, "ArtifactOfProjectName: %s\n", aop.Name) 43*ba677afaSXin Li if aop.HomePage != "" { 44*ba677afaSXin Li fmt.Fprintf(w, "ArtifactOfProjectHomePage: %s\n", aop.HomePage) 45*ba677afaSXin Li } 46*ba677afaSXin Li if aop.URI != "" { 47*ba677afaSXin Li fmt.Fprintf(w, "ArtifactOfProjectURI: %s\n", aop.URI) 48*ba677afaSXin Li } 49*ba677afaSXin Li } 50*ba677afaSXin Li if f.FileComment != "" { 51*ba677afaSXin Li fmt.Fprintf(w, "FileComment: %s\n", textify(f.FileComment)) 52*ba677afaSXin Li } 53*ba677afaSXin Li if f.FileNotice != "" { 54*ba677afaSXin Li fmt.Fprintf(w, "FileNotice: %s\n", textify(f.FileNotice)) 55*ba677afaSXin Li } 56*ba677afaSXin Li for _, s := range f.FileContributors { 57*ba677afaSXin Li fmt.Fprintf(w, "FileContributor: %s\n", s) 58*ba677afaSXin Li } 59*ba677afaSXin Li for _, s := range f.FileAttributionTexts { 60*ba677afaSXin Li fmt.Fprintf(w, "FileAttributionText: %s\n", textify(s)) 61*ba677afaSXin Li } 62*ba677afaSXin Li for _, s := range f.FileDependencies { 63*ba677afaSXin Li fmt.Fprintf(w, "FileDependency: %s\n", s) 64*ba677afaSXin Li } 65*ba677afaSXin Li 66*ba677afaSXin Li fmt.Fprintf(w, "\n") 67*ba677afaSXin Li 68*ba677afaSXin Li // also render any snippets for this file 69*ba677afaSXin Li // get slice of Snippet identifiers so we can sort them 70*ba677afaSXin Li snippetKeys := []string{} 71*ba677afaSXin Li for k := range f.Snippets { 72*ba677afaSXin Li snippetKeys = append(snippetKeys, string(k)) 73*ba677afaSXin Li } 74*ba677afaSXin Li sort.Strings(snippetKeys) 75*ba677afaSXin Li for _, sID := range snippetKeys { 76*ba677afaSXin Li s := f.Snippets[common.ElementID(sID)] 77*ba677afaSXin Li renderSnippet2_2(s, w) 78*ba677afaSXin Li } 79*ba677afaSXin Li 80*ba677afaSXin Li return nil 81*ba677afaSXin Li} 82