/// <summary> /// Parse ini data into data structure /// </summary> /// <param name="lines">array of text lines</param> /// <param name="path">path from where lines came</param> /// <returns></returns> public static IniData ReadFromStringArray(string[] lines, string path) { // Create a dictionary for the first section Dictionary <string, string> entryData = new Dictionary <string, string>(); // Name for the current section string entryName = ""; // Create object to hold output IniData output = new IniData(); // Section headers have these chars removed char[] charsToTrim = { '[', ']' }; // Parse all lines foreach (string l in lines) { // ignore comments if (l.Length > 0 && l.Trim()[0] == '#') { continue; } // Start of new section if (l.Length > 0 && l.Trim()[0] == '[') { // If not first section, add the last section of data if (entryName != "") { if (!output.Add(entryName, entryData)) { ValkyrieDebug.Log("Warning: duplicate section \"" + entryName + "\" in " + path + " will be ignored."); } } // create new data for new section entryData = new Dictionary <string, string>(); // Get name of new section entryName = l.Trim().Trim(charsToTrim); // Blank section names not allowed, but not fatal if (entryName.Equals("")) { ValkyrieDebug.Log("Warning: empty section in " + path + " will be ignored."); } } // If the line is not a comment (starts with ;) else if (l.Length > 0 && l.Trim()[0] != ';') { int equalsLocation = l.IndexOf('='); // Add data as entry with no value if (equalsLocation == -1) { if (entryData.ContainsKey(l.Trim())) { ValkyrieDebug.Log("Warning: duplicate \"" + l.Trim() + "\" data in section \"" + entryName + "\" in " + path + " will be ignored."); } else { entryData.Add(l.Trim(), ""); } } // If there is an = add data as key and value else { string key = l.Substring(0, equalsLocation).Trim(); if (entryData.ContainsKey(key)) { ValkyrieDebug.Log("Warning: duplicate \"" + key + "\" data in section \"" + entryName + "\" in " + path + " will be ignored."); } else { string value = l.Substring(equalsLocation + 1).Trim().Trim('\"'); //string translatedValue = LocalizationRead.FFGLookup(value); entryData.Add(key, value); } } // This won't go anywhere if we don't have a section if (entryName.Equals("")) { ValkyrieDebug.Log("Warning: data " + l + " without section in " + path + " will be ignored."); } } } // Add the last section if (entryName != "") { if (!output.Add(entryName, entryData)) { ValkyrieDebug.Log("Warning: duplicate section \"" + entryName + "\" in " + path + " will be ignored."); } } return(output); }