adoc/element/paragraph.go

49 lines
787 B
Go
Raw Normal View History

2022-03-15 15:16:15 +01:00
package element
import (
"ewintr.nl/adoc/token"
)
type Paragraph struct {
Elements []Element
}
func (p Paragraph) Text() string {
txt := ""
for _, el := range p.Elements {
txt += el.Text()
}
return txt
}
func (p Paragraph) Append(els []Element) Element {
return Paragraph{
Elements: append(p.Elements, els...),
}
}
func NewParagraphFromTokens(tr ReadUnreader) (ParseResult, bool) {
toks := []token.Token{}
for {
tok, ok := tr.Read(1)
if !ok {
tr.Unread(len(toks))
return ParseResult{}, false
}
if tok[0].Equal(token.TOKEN_EOF, token.TOKEN_DOUBLE_NEWLINE) {
break
}
toks = append(toks, tok[0])
}
if len(toks) == 0 {
return ParseResult{}, false
}
return ParseResult{
Element: Paragraph{Elements: []Element{}},
Inner: toks,
}, true
}