X-Git-Url: http://www.git.cypherpunks.ru/?p=gorecfile.git;a=blobdiff_plain;f=w.go;fp=w.go;h=fd71e189b2db45da2a5b950dcc5524b6ffcbdca6;hp=0000000000000000000000000000000000000000;hb=29baa531948de1a2478a47d04bbab14012dc4c15;hpb=e3bf526c33e545694fafdf4e67ad7a92183d52c3 diff --git a/w.go b/w.go new file mode 100644 index 0000000..fd71e18 --- /dev/null +++ b/w.go @@ -0,0 +1,65 @@ +/* +recfile -- GNU recutils'es recfiles parser on pure Go +Copyright (C) 2020 Sergey Matveev + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// GNU recutils'es recfiles parser on pure Go +package recfile + +import ( + "io" + "strings" +) + +type Writer struct { + w io.StringWriter +} + +func NewWriter(w io.StringWriter) *Writer { + return &Writer{w} +} + +func (w *Writer) RecordStart(fs ...Field) (written int, err error) { + return w.w.WriteString("\n") +} + +func (w *Writer) WriteFields(fs ...Field) (written int, err error) { + var n int + for _, f := range fs { + n, err = w.w.WriteString(f.Name + ": " + strings.TrimLeft(f.Value, " ") + "\n") + written += n + if err != nil { + return + } + } + return +} + +func (w *Writer) WriteFieldMultiline(name string, lines []string) (written int, err error) { + var n int + n, err = w.w.WriteString(name + ": " + strings.TrimLeft(lines[0], " ") + "\n") + written += n + if err != nil { + return + } + for _, l := range lines[1:] { + n, err = w.w.WriteString("+ " + l + "\n") + written += n + if err != nil { + return + } + } + return +}