- 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));
- }
- }
- }