From e34e8eda0ad505b4fa8427c6283acc3449b5a5ea Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Sun, 3 Sep 2023 16:55:53 +0000 Subject: [PATCH] parser.TextParser: AcceptNewLine() and AcceptRune() Signed-off-by: Alejandro Mery --- parser/text.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/parser/text.go b/parser/text.go index 62d06e1..84454eb 100644 --- a/parser/text.go +++ b/parser/text.go @@ -74,3 +74,29 @@ func (p *TextParser) StepLine() { func (p *TextParser) Position() lexer.Position { return p.pos } + +// AcceptNewLine checks if next is a new line. +// It accepts "\n", "\n\r", "\r" and "\r\n". +func (p *TextParser) AcceptNewLine() bool { + r1, _, err := p.ReadRune() + switch { + case err != nil: + return false + case r1 == '\n': + p.AcceptRune('\r') + return true + case r1 == '\r': + p.AcceptRune('\n') + return true + default: + p.UnreadRune() + return false + } +} + +// AcceptRune checks if next is the specified rune +func (p *TextParser) AcceptRune(r rune) bool { + return p.Accept(func(r2 rune) bool { + return r == r2 + }) +}