private NPCPage ParsePage(IList<string> scriptLines, string sectionName)
{
bool nextPage = false, nextSection = false;
List<string> lines = scriptLines.Where(x => !string.IsNullOrEmpty(x)).ToList();
NPCPage Page = new NPCPage(sectionName);
//Cleans arguments out of search page name
string tempSectionName = Page.ArgumentParse(sectionName);
//parse all individual pages in a script, defined by sectionName
for (int i = 0; i < lines.Count; i++)
{
string line = lines[i];
if (line.StartsWith(";")) continue;
if (!lines[i].ToUpper().StartsWith(tempSectionName.ToUpper())) continue;
List<string> segmentLines = new List<string>();
nextPage = false;
//Found a page, now process that page and split it into segments
for (int j = i + 1; j < lines.Count; j++)
{
string nextLine = lines[j];
if (j < lines.Count - 1)
nextLine = lines[j + 1];
else
nextLine = "";
if (nextLine.StartsWith("[") && nextLine.EndsWith("]"))
{
nextPage = true;
}
else if (nextLine.StartsWith("#IF"))
{
nextSection = true;
}
if (nextSection || nextPage)
{
segmentLines.Add(lines[j]);
//end of segment, so need to parse it and put into the segment list within the page
if (segmentLines.Count > 0)
{
NPCSegment segment = ParseSegment(Page, segmentLines);
List<string> currentButtons = new List<string>();
currentButtons.AddRange(segment.Buttons);
currentButtons.AddRange(segment.ElseButtons);
currentButtons.AddRange(segment.GotoButtons);
Page.Buttons.AddRange(currentButtons);
Page.SegmentList.Add(segment);
segmentLines.Clear();
nextSection = false;
}
if (nextPage) break;
continue;
}
segmentLines.Add(lines[j]);
}
//bottom of script reached, add all lines found to new segment
if (segmentLines.Count > 0)
{
NPCSegment segment = ParseSegment(Page, segmentLines);
List<string> currentButtons = new List<string>();
currentButtons.AddRange(segment.Buttons);
currentButtons.AddRange(segment.ElseButtons);
currentButtons.AddRange(segment.GotoButtons);
Page.Buttons.AddRange(currentButtons);
Page.SegmentList.Add(segment);
segmentLines.Clear();
}
return Page;
}
return Page;
}