4 Commits

Author SHA1 Message Date
amery d9f98e9cb7 Unmarshal: WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-29 02:45:10 +00:00
amery f4dc0a0270 Decoder: WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-29 02:45:10 +00:00
amery 3c94d7fc7c basic: WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-29 02:45:10 +00:00
amery c43cc7d0dd parser: WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-29 02:45:10 +00:00
+38 -6
View File
@@ -9,16 +9,48 @@ import (
// Parser parses a dosini-style document
type Parser struct {
src *lexer.Lexer
src *lexer.Reader
OnSection func(pos lexer.Position, name, subname string, hasSubname bool) error
OnField func(pos lexer.Position, key, value string) error
OnComment func(pos lexer.Position, comment string) error
OnError func(pos lexer.Position, content string, err error) error
}
func (*Parser) init() error { return nil }
func defaultOnSection(_ lexer.Position, _, _ string, _ bool) error { return nil }
func defaultOnField(_ lexer.Position, _, _ string) error { return nil }
func defaultOnComment(_ lexer.Position, _ string) error { return nil }
func defaultOnError(pos lexer.Position, content string, err error) error {
return &lexer.Error{
Line: pos.Line,
Column: pos.Column,
Content: content,
Err: err,
}
}
func (p *Parser) setDefaults() {
if p.OnSection == nil {
p.OnSection = defaultOnSection
}
if p.OnField == nil {
p.OnField = defaultOnField
}
if p.OnComment == nil {
p.OnComment = defaultOnComment
}
if p.OnError == nil {
p.OnError = defaultOnError
}
}
// Run parses the source
func (p *Parser) Run() error {
if err := p.init(); err != nil {
return err
}
p.setDefaults()
return lexer.Run(p.initialState)
}
@@ -31,6 +63,6 @@ func NewParser(r io.Reader) *Parser {
}
return &Parser{
src: lexer.NewLexerReader(r),
src: lexer.NewReader(r),
}
}