support recursive inclusion

This commit is contained in:
Darien Raymond 2018-08-22 21:34:50 +02:00
parent eb9152dbe4
commit 1dc2cd7e04
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169

37
main.go
View File

@ -119,22 +119,33 @@ func ParseList(list *List, ref map[string]*List) (*ParsedList, error) {
Name: list.Name,
Inclusion: make(map[string]bool),
}
for _, entry := range list.Entry {
if entry.Type == "include" {
if pl.Inclusion[entry.Value] {
continue
entryList := list.Entry
for {
newEntryList := make([]Entry, 0, len(entryList))
hasInclude := false
for _, entry := range entryList {
if entry.Type == "include" {
if pl.Inclusion[entry.Value] {
continue
}
refName := strings.ToUpper(entry.Value)
pl.Inclusion[refName] = true
r := ref[refName]
if r == nil {
return nil, errors.New(entry.Value + " not found.")
}
newEntryList = append(newEntryList, r.Entry...)
hasInclude = true
} else {
newEntryList = append(newEntryList, entry)
}
refName := strings.ToUpper(entry.Value)
pl.Inclusion[refName] = true
r := ref[refName]
if r == nil {
return nil, errors.New(entry.Value + " not found.")
}
pl.Entry = append(pl.Entry, r.Entry...)
} else {
pl.Entry = append(pl.Entry, entry)
}
entryList = newEntryList
if !hasInclude {
break
}
}
pl.Entry = entryList
return pl, nil
}