Editor/ink-compiler/ParsedHierarchy/List.cs
using System.Collections.Generic;
namespace Ink.Parsed
{
public class List : Parsed.Expression
{
public List<Identifier> itemIdentifierList;
public List (List<Identifier> itemIdentifierList)
{
this.itemIdentifierList = itemIdentifierList;
}
public override void GenerateIntoContainer (Runtime.Container container)
{
var runtimeRawList = new Runtime.InkList ();
if (itemIdentifierList != null) {
foreach (var itemIdentifier in itemIdentifierList) {
var nameParts = itemIdentifier?.name.Split ('.');
string listName = null;
string listItemName = null;
if (nameParts.Length > 1) {
listName = nameParts [0];
listItemName = nameParts [1];
} else {
listItemName = nameParts [0];
}
var listItem = story.ResolveListItem (listName, listItemName, this);
if (listItem == null) {
if (listName == null)
Error ("Could not find list definition that contains item '" + itemIdentifier + "'");
else
Error ("Could not find list item " + itemIdentifier);
} else {
if (listName == null)
listName = ((ListDefinition)listItem.parent).identifier?.name;
var item = new Runtime.InkListItem (listName, listItem.name);
if (runtimeRawList.ContainsKey (item))
Warning ("Duplicate of item '"+itemIdentifier+"' in list.");
else
runtimeRawList [item] = listItem.seriesValue;
}
}
}
container.AddContent(new Runtime.ListValue (runtimeRawList));
}
}
}