diff options
| author | 2026-03-06 10:52:02 +0800 | |
|---|---|---|
| committer | 2026-03-06 10:53:37 +0800 | |
| commit | f36918966727be99bfe9d461059269f36f92058a (patch) | |
| tree | ff2c6545d369a74c210574f821298181307c701a /config/char.go | |
| parent | objecttype: Split files (diff) | |
| signature | No signature | |
config: Split files
Diffstat (limited to 'config/char.go')
| -rw-r--r-- | config/char.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/config/char.go b/config/char.go new file mode 100644 index 00000000..da52013c --- /dev/null +++ b/config/char.go @@ -0,0 +1,52 @@ +package config + +func (p *configParser) nextChar() (byte, error) { + if p.hasPeeked { + p.hasPeeked = false + + return p.peeked, nil + } + + ch, err := p.reader.ReadByte() + if err != nil { + return 0, err + } + + if ch == '\r' { + next, err := p.reader.ReadByte() + if err == nil && next == '\n' { + ch = '\n' + } else if err == nil { + // Weird but ok + _ = p.reader.UnreadByte() + } + } + + if ch == '\n' { + p.lineNum++ + } + + return ch, nil +} + +func (p *configParser) unreadChar(ch byte) { + p.peeked = ch + + p.hasPeeked = true + if ch == '\n' && p.lineNum > 1 { + p.lineNum-- + } +} + +func (p *configParser) skipToEOL() error { + for { + ch, err := p.nextChar() + if err != nil { + return err + } + + if ch == '\n' { + return nil + } + } +} |
