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, Name: list.Name,
Inclusion: make(map[string]bool), Inclusion: make(map[string]bool),
} }
for _, entry := range list.Entry { entryList := list.Entry
if entry.Type == "include" { for {
if pl.Inclusion[entry.Value] { newEntryList := make([]Entry, 0, len(entryList))
continue 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 entryList = newEntryList
r := ref[refName] if !hasInclude {
if r == nil { break
return nil, errors.New(entry.Value + " not found.")
}
pl.Entry = append(pl.Entry, r.Entry...)
} else {
pl.Entry = append(pl.Entry, entry)
} }
} }
pl.Entry = entryList
return pl, nil return pl, nil
} }