update cnf/parser/nginx encoder+decoder to read the last line even if no newline '\n' char
This commit is contained in:
parent
78d8d9a7a2
commit
c27ab45bc2
|
@ -32,23 +32,31 @@ func (d *decoder) Decode(v interface{}) error {
|
|||
|
||||
// actual section stack
|
||||
stack := make([]*Line, 0)
|
||||
eof := false
|
||||
|
||||
for {
|
||||
n++
|
||||
if eof {
|
||||
break
|
||||
}
|
||||
|
||||
l := &Line{Type: NONE}
|
||||
|
||||
// 1. read line
|
||||
notrim, err := r.ReadString('\n')
|
||||
if err == io.EOF {
|
||||
if len(notrim) > 0 {
|
||||
eof = true
|
||||
} else {
|
||||
break
|
||||
}
|
||||
} else if err != nil {
|
||||
return &LineError{n, err}
|
||||
}
|
||||
notrim = strings.Trim(notrim, "\r\n")
|
||||
|
||||
// 2. ignore empty
|
||||
line := strings.Trim(notrim, " \t")
|
||||
line := strings.Trim(notrim, " \t\r\n")
|
||||
if len(line) < 1 {
|
||||
continue
|
||||
}
|
||||
|
|
|
@ -7,22 +7,31 @@ import (
|
|||
|
||||
var (
|
||||
defaultPrefix = ""
|
||||
defaultIndent = " "
|
||||
defaultIndent = "\t"
|
||||
)
|
||||
|
||||
// encoder implements parser.Encoder
|
||||
type encoder struct {
|
||||
writer io.Writer
|
||||
prefix string
|
||||
indent string
|
||||
prefix []byte
|
||||
indent []byte
|
||||
}
|
||||
|
||||
func (e *encoder) SetIndent(prefix, indent string) {
|
||||
e.prefix = prefix
|
||||
e.indent = indent
|
||||
e.prefix = make([]byte, 0)
|
||||
e.prefix = append(e.prefix, []byte(prefix)...)
|
||||
|
||||
e.indent = make([]byte, 0)
|
||||
e.indent = append(e.indent, []byte(indent)...)
|
||||
}
|
||||
|
||||
func (e *encoder) Encode(v interface{}) error {
|
||||
|
||||
// default indentation
|
||||
if e.prefix == nil || e.indent == nil {
|
||||
e.SetIndent(defaultPrefix, defaultIndent)
|
||||
}
|
||||
|
||||
// check 'v'
|
||||
vcast, ok := v.(*Line)
|
||||
if !ok {
|
||||
|
@ -78,7 +87,7 @@ func (e *encoder) Encode(v interface{}) error {
|
|||
|
||||
// 4.assignments
|
||||
} else if line.Type == ASSIGNMENT {
|
||||
repr = append(repr, []byte(fmt.Sprintf("%s %s;\n", line.Components[0], line.Components[1]))...)
|
||||
repr = append(repr, []byte(fmt.Sprintf("%s\t\t%s;\n", line.Components[0], line.Components[1]))...)
|
||||
|
||||
// 5. include
|
||||
} else if line.Type == INCLUDE {
|
||||
|
|
Loading…
Reference in New Issue