Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dbf3e6a8f9 | |||
| f473035f14 | |||
| f64d4ccd8a |
@@ -1,73 +0,0 @@
|
|||||||
package basic
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"io"
|
|
||||||
"io/fs"
|
|
||||||
"log"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"asciigoat.org/core/lexer"
|
|
||||||
"asciigoat.org/ini/parser"
|
|
||||||
)
|
|
||||||
|
|
||||||
type token struct {
|
|
||||||
pos lexer.Position
|
|
||||||
typ parser.TokenType
|
|
||||||
value string
|
|
||||||
}
|
|
||||||
|
|
||||||
type decoder struct {
|
|
||||||
p *parser.Parser
|
|
||||||
out *Document
|
|
||||||
|
|
||||||
queue []token
|
|
||||||
curSection *Section
|
|
||||||
curField *Field
|
|
||||||
}
|
|
||||||
|
|
||||||
func (dec *decoder) OnToken(pos lexer.Position, typ parser.TokenType, value string) error {
|
|
||||||
tok := token{pos, typ, value}
|
|
||||||
|
|
||||||
log.Printf("%s[%v]: %s %s: %q", "decoder", len(dec.queue), pos, typ, value)
|
|
||||||
|
|
||||||
dec.queue = append(dec.queue, tok)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*decoder) OnError(pos lexer.Position, hint string, err error) error {
|
|
||||||
log.Printf("%s: %s %s: %s: %v", "decoder", pos, "error", hint, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode ...
|
|
||||||
func Decode(r io.Reader) (*Document, error) {
|
|
||||||
var out Document
|
|
||||||
|
|
||||||
if r == nil {
|
|
||||||
return nil, fs.ErrNotExist
|
|
||||||
}
|
|
||||||
|
|
||||||
// parser
|
|
||||||
p := parser.NewParser(r)
|
|
||||||
// decoder
|
|
||||||
dec := decoder{p: p, out: &out}
|
|
||||||
// glue
|
|
||||||
p.OnToken = dec.OnToken
|
|
||||||
p.OnError = dec.OnError
|
|
||||||
|
|
||||||
// Go!
|
|
||||||
err := p.Run()
|
|
||||||
return &out, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// DecodeBytes ...
|
|
||||||
func DecodeBytes(b []byte) (*Document, error) {
|
|
||||||
return Decode(bytes.NewReader(b))
|
|
||||||
}
|
|
||||||
|
|
||||||
// DecodeString ...
|
|
||||||
func DecodeString(s string) (*Document, error) {
|
|
||||||
return Decode(strings.NewReader(s))
|
|
||||||
}
|
|
||||||
+2
-3
@@ -3,7 +3,6 @@ package ini
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"io"
|
"io"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"asciigoat.org/core"
|
"asciigoat.org/core"
|
||||||
"asciigoat.org/ini/parser"
|
"asciigoat.org/ini/parser"
|
||||||
@@ -40,10 +39,10 @@ func NewDecoder(r io.Reader) *Decoder {
|
|||||||
|
|
||||||
// NewDecoderBytes creates a Decoder over a provided bytes array
|
// NewDecoderBytes creates a Decoder over a provided bytes array
|
||||||
func NewDecoderBytes(b []byte) *Decoder {
|
func NewDecoderBytes(b []byte) *Decoder {
|
||||||
return NewDecoder(bytes.NewReader(b))
|
return NewDecoder(bytes.NewBuffer(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDecoderString creates a Decoder over a provided string of data
|
// NewDecoderString creates a Decoder over a provided string of data
|
||||||
func NewDecoderString(s string) *Decoder {
|
func NewDecoderString(s string) *Decoder {
|
||||||
return NewDecoder(strings.NewReader(s))
|
return NewDecoder(bytes.NewBufferString(s))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user