private Dictionary<string, string> AttemptToParseStringsFile(string path)
{
Dictionary<string, string> stringsTable = new Dictionary<string, string>();
char quoteDelemiter = '"';
char delemiterEscape = '\\';
try {
StreamReader reader = File.OpenText(path);
string line;
while ((line = reader.ReadLine()) != null) {
// A line is "key" = "value";
// Ignore \" as that should be included as a quote.
//TODO: This should be better!
if (line.Trim().Length > 0) {
try {
string key, value;
int openingKeyDelimiter = line.IndexOf(quoteDelemiter, 0);
while (line.CharacterAtIndexIsEscapedWithCharacter(openingKeyDelimiter, delemiterEscape)) {
openingKeyDelimiter = line.IndexOf(quoteDelemiter, openingKeyDelimiter + 1);
}
int closingKeyDelimiter = line.IndexOf(quoteDelemiter, openingKeyDelimiter + 1);
while (line.CharacterAtIndexIsEscapedWithCharacter(closingKeyDelimiter, delemiterEscape)) {
closingKeyDelimiter = line.IndexOf(quoteDelemiter, closingKeyDelimiter + 1);
}
key = line.Substring(openingKeyDelimiter + 1, closingKeyDelimiter - openingKeyDelimiter - 1);
int openingValueDelimiter = line.IndexOf(quoteDelemiter, closingKeyDelimiter + 1);
while (line.CharacterAtIndexIsEscapedWithCharacter(openingValueDelimiter, delemiterEscape)) {
openingValueDelimiter = line.IndexOf(quoteDelemiter, openingValueDelimiter + 1);
}
int closingValueDelimiter = line.IndexOf(quoteDelemiter, openingValueDelimiter + 1);
while (line.CharacterAtIndexIsEscapedWithCharacter(closingValueDelimiter, delemiterEscape)) {
closingValueDelimiter = line.IndexOf(quoteDelemiter, closingValueDelimiter + 1);
}
value = line.Substring(openingValueDelimiter + 1, closingValueDelimiter - openingValueDelimiter - 1);
if (!String.IsNullOrEmpty(key) && !String.IsNullOrEmpty(value)) {
stringsTable.Add(key.DeEscapedString(), value.DeEscapedString());
}
} catch {
// Don't care. Hooray!
}
}
}
reader.Close();
reader.Dispose();
} catch {
// Do nothing!
}
return stringsTable;
}