private bool TryParseItem(ref StringSegment section, ref TextPtr ptr, ref MyIniParseResult result, bool parseEndContent) { StringSegment segment; TextPtr ptr3; TextPtr ptr2 = ptr; this.ReadPrefix(ref ptr2, out segment); this.m_endComment = segment; if (ptr2.StartsWith("---")) { ptr3 = (ptr2 + 3).SkipWhitespace(false); if (ptr3.IsEndOfLine()) { this.m_endComment = segment; ptr2 = ptr3; ptr3 = new TextPtr(ptr2.Content, ptr2.Content.Length); ptr = ptr3 = ptr3; if (parseEndContent) { ptr2 = ptr2.FindEndOfLine(true); this.m_endContent = new StringSegment(ptr2.Content, ptr2.Index, ptr3.Index - ptr2.Index); } return(false); } } ptr2 = ptr2.TrimStart(); if (!ptr2.IsOutOfBounds() && (ptr2.Char != '[')) { ptr3 = ptr2.FindInLine('='); if (ptr3.IsOutOfBounds()) { if (result.IsDefined) { result = new MyIniParseResult(ptr2, "Expected key=value definition"); } return(false); } StringSegment segment2 = new StringSegment(ptr2.Content, ptr2.Index, ptr3.TrimEnd().Index - ptr2.Index); string str = MyIniKey.ValidateKey(ref segment2); if (str == null) { ptr2 = ptr3 + 1; ptr2 = ptr2.TrimStart(); ptr3 = ptr2.FindEndOfLine(false); StringSegment segment3 = new StringSegment(ptr2.Content, ptr2.Index, ptr3.TrimEnd().Index - ptr2.Index); if (segment3.Length == 0) { TextPtr ptr4 = ptr3.FindEndOfLine(true); if (ptr4.Char == '|') { TextPtr ptr5 = ptr4; do { ptr4 = ptr5.FindEndOfLine(false); ptr5 = ptr4.FindEndOfLine(true); }while (ptr5.Char == '|'); ptr3 = ptr4; } segment3 = new StringSegment(ptr2.Content, ptr2.Index, ptr3.Index - ptr2.Index); } MyIniKey key = new MyIniKey(section, segment2); if (this.m_items.ContainsKey(key)) { if (result.IsDefined) { result = new MyIniParseResult(new TextPtr(segment2.Text, segment2.Start), $"Duplicate key {key}"); } return(false); } this.m_items[key] = segment3; if (!segment.IsEmpty) { this.m_itemComments[key] = segment; this.m_endComment = new StringSegment(); } ptr = ptr3.FindEndOfLine(true); return(true); } if (result.IsDefined) { result = new MyIniParseResult(ptr2, $"Key {str}"); } } return(false); }