KNFoundation.KNBundle.AttemptToParseStringsFile C# (CSharp) Method

AttemptToParseStringsFile() private method

private AttemptToParseStringsFile ( string path ) : string>.Dictionary
path string
return string>.Dictionary
        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;
        }