49 lines
787 B
Go
49 lines
787 B
Go
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
|
|
}
|