private void ReadPrefix(ref TextPtr ptr, out StringSegment prefix) { bool flag = false; TextPtr ptr2 = ptr; while (!ptr.IsOutOfBounds()) { if (ptr.IsStartOfLine() && (ptr.Char == ';')) { if (!flag) { flag = true; ptr2 = ptr; } ptr = ptr.FindEndOfLine(false); } TextPtr ptr3 = ptr.SkipWhitespace(false); if (!ptr3.IsNewLine()) { break; } if (ptr3.Char == '\r') { ptr = ptr3 + 2; } else { ptr = ptr3 + 1; } } if (flag) { TextPtr ptr4 = ptr; while (char.IsWhiteSpace(ptr4.Char) && (ptr4 > ptr2)) { ptr4 = TextPtr.op_Decrement(ptr4); } int length = ptr4.Index - ptr2.Index; if (length > 0) { prefix = new StringSegment(ptr.Content, ptr2.Index, length); return; } } prefix = new StringSegment(); }
private bool TryParseSection(ref TextPtr ptr, ref MyIniParseResult result, bool parseEndContent) { StringSegment segment; TextPtr ptr2 = ptr; this.ReadPrefix(ref ptr2, out segment); this.m_endComment = segment; if (ptr2.Char != '[') { if (result.IsDefined) { result = new MyIniParseResult(ptr, "Expected [section] definition"); } return(false); } TextPtr ptr3 = ptr2.FindEndOfLine(false); while ((ptr3.Index > ptr2.Index) && (ptr3.Char != ']')) { ptr3 = TextPtr.op_Decrement(ptr3); } if (ptr3.Char != ']') { if (result.IsDefined) { result = new MyIniParseResult(ptr, "Expected [section] definition"); } return(false); } ptr2 = TextPtr.op_Increment(ptr2); StringSegment segment2 = new StringSegment(ptr2.Content, ptr2.Index, ptr3.Index - ptr2.Index); string str = MyIniKey.ValidateSection(ref segment2); if (str == null) { ptr2 = (ptr3 + 1).SkipWhitespace(false); if (!ptr2.IsEndOfLine()) { if (result.IsDefined) { result = new MyIniParseResult(ptr2, "Expected newline"); } return(false); } ptr2 = ptr2.FindEndOfLine(true); this.AddSection(ref segment2); if (!segment.IsEmpty) { this.m_sectionComments[segment2] = segment; this.m_endComment = new StringSegment(); } while (this.TryParseItem(ref segment2, ref ptr2, ref result, parseEndContent)) { } if (result.IsDefined && !result.Success) { return(false); } ptr = ptr2; return(true); } if (result.IsDefined) { result = new MyIniParseResult(ptr2, $"Section {str}"); } return(false); }