adoc/element/listitem.go

55 lines
884 B
Go

package element
import (
"ewintr.nl/adoc/token"
)
type ListItem []Element
func (li ListItem) Text() string {
txt := ""
for _, e := range li {
txt += e.Text()
}
return txt
}
func (li ListItem) Append(els []Element) Element {
for _, el := range els {
li = append(li, el)
}
return li
}
func NewListItemFromTokens(tr ReadUnreader) (ParseResult, bool) {
toks, ok := tr.Read(2)
if !ok {
return ParseResult{}, false
}
if !toks[0].Equal(token.TOKEN_ASTERISK) || toks[1].Type != token.TYPE_WHITESPACE {
tr.Unread(2)
return ParseResult{}, false
}
toks = []token.Token{}
for {
ntoks, ok := tr.Read(1)
if !ok {
tr.Unread(len(toks))
return ParseResult{}, false
}
tok := ntoks[0]
if tok.Equal(token.TOKEN_NEWLINE, token.TOKEN_EOS) {
break
}
toks = append(toks, tok)
}
return ParseResult{
Element: ListItem{},
Inner: toks,
}, true
}