private string ReadSection(StreamReader reader, List<object> setting, string sectionName = "")
{
string line = reader.ReadLine();
string trimedLine = RemoveSpaces(line);
string[] splitValues;
if (trimedLine.Equals("}"))
return line;
while (line != null)
{
if (!trimedLine.Equals("-") && trimedLine.IndexOf(':') == -1)
{
// Subsection
string subSectionName = line.Replace("\t", "");
line = RemoveSpaces(reader.ReadLine());
// line is empty or is part of another setting, skip
if (line.Equals("") || line.IndexOf('=') != -1)
continue;
// line doesn't have open brace, skip
if (!line.Equals("{"))
continue;
setting.Add(subSectionName);
List<object> subSetting = new List<object>();
setting.Add(subSetting);
line = ReadSection(reader, subSetting);
trimedLine = line;
}
else
{
// Item
if (trimedLine.Equals("-"))
splitValues = new[] { "-", "-" }; // line break
else
splitValues = line.Split(new char[] { ':' }, 2);
// trim tabs from name, spaces from map name
splitValues[0] = splitValues[0].Replace("\t", "").Trim();
if (splitValues[1].IndexOf('\"') != -1 || splitValues[1].IndexOf('%') != -1)
splitValues[1] = splitValues[1].Trim(); // keep spaces if custom action
else
splitValues[1] = RemoveSpaces(splitValues[1]);
// assign Values
if (sectionName == "CUSTOMACTIONBINDINGS")
setting.Add(new { name = splitValues[0], bindings = StringToControls(splitValues[1]) });
else
setting.Add(new { name = splitValues[0], func = splitValues[1] });
// next line
line = reader.ReadLine();
trimedLine = RemoveSpaces(line);
}
// break if end brace
if (trimedLine.Equals("}"))
{
if (reader.Peek() == -1)
return line;
line = RemoveSpaces(reader.ReadLine());
break;
}
}
return line;
}