12 Commits

Author SHA1 Message Date
amery 641e24896b build-sys: use local darvaza.org/core [DO-NOT-MERGE]
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 17:39:41 +00:00
amery 88137410ee build-sys: use local asciigoat.org/core [DO-NOT-MERGE]
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 17:39:41 +00:00
amery cd64435c8e vscode: add Subname to the dictionary
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 17:39:41 +00:00
amery 9896bef7d9 vscode: add unescapes to the dictionary
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 17:39:41 +00:00
amery 7e5601d5b5 vscode: add asciigoat to the dictionary
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 17:39:41 +00:00
amery fa9a7b4735 basic: rename and document queue related methods
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 17:37:09 +00:00
amery cfd4a94559 basic: call executeFinal() when OnToken() fails
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 17:37:09 +00:00
amery d8af7821e4 Merge pull request 'parser: introduce NewError() and ErrPlusPosition()' (#8)
Reviewed-on: #8
2023-09-04 19:33:24 +02:00
amery 8f3e59ec36 parser: introduce ErrPlusPosition to apply a position offset to a lexer.Error
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 15:25:20 +00:00
amery d316031c44 basic: cleanup using parser.NewError()
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 15:25:20 +00:00
amery c3883cbb0d parser: introduce NewError() to create lexer.Error using lexer.Position
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-09-04 15:16:43 +00:00
amery 314c004efd Merge pull request 'parser: introduce TextParser and refactor Parser' (#7)
Reviewed-on: #7
2023-09-04 16:17:04 +02:00
6 changed files with 31 additions and 101 deletions
+3 -12
View File
@@ -4,28 +4,19 @@ import (
"errors" "errors"
"asciigoat.org/core/lexer" "asciigoat.org/core/lexer"
"asciigoat.org/ini/parser"
) )
var ( var (
errInvalidToken = errors.New("invalid token") errInvalidToken = errors.New("invalid token")
) )
func newError(pos lexer.Position, content, hint string, err error) *lexer.Error {
return &lexer.Error{
Line: pos.Line,
Column: pos.Column,
Content: content,
Hint: hint,
Err: err,
}
}
func newErrInvalidToken(t *token) *lexer.Error { func newErrInvalidToken(t *token) *lexer.Error {
return newError(t.pos, t.value, "", errInvalidToken) return parser.NewError(t.pos, t.value, "", errInvalidToken)
} }
func (dec *decoder) OnError(pos lexer.Position, content string, err error) error { func (dec *decoder) OnError(pos lexer.Position, content string, err error) error {
err = newError(pos, content, "", err) err = parser.NewError(pos, content, "", err)
dec.executeFinal() dec.executeFinal()
return err return err
} }
-18
View File
@@ -53,12 +53,6 @@ func (field Field) String() string {
return buf.String() return buf.String()
} }
// GoString generates a string output for "%#v"
func (*Field) GoString() string {
var buf bytes.Buffer
return buf.String()
}
func writeSectionToBuffer(w *bytes.Buffer, sec *Section, nl string) int { func writeSectionToBuffer(w *bytes.Buffer, sec *Section, nl string) int {
var written, n int var written, n int
@@ -96,12 +90,6 @@ func (sec *Section) String() string {
return buf.String() return buf.String()
} }
// GoString generates a string output for "%#v"
func (*Section) GoString() string {
var buf bytes.Buffer
return buf.String()
}
// WriteTo writes a INI representation of the document // WriteTo writes a INI representation of the document
// onto the provided writer. // onto the provided writer.
func (doc *Document) WriteTo(w io.Writer) (int64, error) { func (doc *Document) WriteTo(w io.Writer) (int64, error) {
@@ -114,9 +102,3 @@ func (doc *Document) String() string {
buf := doc.AsBuffer(WriteNewLine) buf := doc.AsBuffer(WriteNewLine)
return buf.String() return buf.String()
} }
// GoString generates a string output for "%#v"
func (Document) GoString() string {
var buf bytes.Buffer
return buf.String()
}
-49
View File
@@ -1,49 +0,0 @@
package ini
import (
"bytes"
"io"
"strings"
"asciigoat.org/core"
"asciigoat.org/ini/parser"
)
// Decoder ...
type Decoder struct {
io.Closer
p *parser.Parser
}
// Decode ...
func (dec *Decoder) Decode() error {
defer dec.Close()
return dec.p.Run()
}
// NewDecoder creates a Decoder over the provided [io.Reader]
func NewDecoder(r io.Reader) *Decoder {
rc := core.NewReadCloser(r)
switch {
case rc == nil:
return nil
default:
dec := &Decoder{
p: parser.NewParser(rc),
Closer: rc,
}
return dec
}
}
// NewDecoderBytes creates a Decoder over a provided bytes array
func NewDecoderBytes(b []byte) *Decoder {
return NewDecoder(bytes.NewReader(b))
}
// NewDecoderString creates a Decoder over a provided string of data
func NewDecoderString(s string) *Decoder {
return NewDecoder(strings.NewReader(s))
}
+27
View File
@@ -0,0 +1,27 @@
package parser
import (
"asciigoat.org/core/lexer"
)
// NewError creates a lexer.Error using a lexer.Position
func NewError(pos lexer.Position, content, hint string, err error) *lexer.Error {
return &lexer.Error{
Line: pos.Line,
Column: pos.Column,
Content: content,
Hint: hint,
Err: err,
}
}
// ErrPlusPosition returns a copy of the given [lexer.Error]
// offsetting the Line/Column information.
func ErrPlusPosition(pos lexer.Position, e *lexer.Error) *lexer.Error {
pos.Add(lexer.Position{
Line: e.Line,
Column: e.Column,
})
return NewError(pos, e.Content, e.Hint, e.Err)
}
+1 -7
View File
@@ -31,13 +31,7 @@ func defaultOnToken(pos lexer.Position, typ TokenType, value string) error {
func defaultOnError(pos lexer.Position, content string, err error) error { func defaultOnError(pos lexer.Position, content string, err error) error {
log.Printf("%s:%v:%v: %q: %s", "error", pos.Line, pos.Column, content, err) log.Printf("%s:%v:%v: %q: %s", "error", pos.Line, pos.Column, content, err)
return lexer.Error{ return NewError(pos, content, "", err)
Line: pos.Line,
Column: pos.Column,
Content: content,
Err: err,
}
} }
func (p *Parser) setDefaults() { func (p *Parser) setDefaults() {
-15
View File
@@ -1,15 +0,0 @@
package ini
import "io"
// ReadInto ...
func ReadInto(v any, r io.Reader) error {
dec := NewDecoder(r)
return dec.Unmarshal(v)
}
// Unmarshal ...
func (dec *Decoder) Unmarshal(any) error {
return dec.p.Run()
}