57 lines
923 B
Go
57 lines
923 B
Go
package element
|
|
|
|
import (
|
|
"ewintr.nl/adoc/token"
|
|
)
|
|
|
|
type List []ListItem
|
|
|
|
func (l List) Text() string {
|
|
txt := ""
|
|
for _, li := range l {
|
|
txt += li.Text()
|
|
}
|
|
|
|
return txt
|
|
}
|
|
|
|
func (l List) Append(els []Element) Element {
|
|
for _, el := range els {
|
|
if val, ok := el.(ListItem); ok {
|
|
l = append(l, val)
|
|
}
|
|
}
|
|
return l
|
|
}
|
|
|
|
func NewListFromTokens(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
|
|
}
|
|
|
|
tr.Unread(2)
|
|
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_DOUBLE_NEWLINE, token.TOKEN_EOF) {
|
|
break
|
|
}
|
|
toks = append(toks, tok)
|
|
}
|
|
|
|
return ParseResult{
|
|
Element: List{},
|
|
Inner: toks,
|
|
}, true
|
|
}
|