/// <inheritdoc /> public IEnumerable <IModListingGetter> Parse(Stream stream) { using var streamReader = new StreamReader(stream); while (!streamReader.EndOfStream) { var str = streamReader.ReadLine().AsSpan(); var commentIndex = str.IndexOf('#'); if (commentIndex != -1) { str = str.Slice(0, commentIndex); } if (MemoryExtensions.IsWhiteSpace(str) || str.Length == 0) { continue; } yield return(_listingParser.FromString(str)); } }
private static void BuildPart(string input, Span <char> output, ref int currentPosition) { var productLength = input?.Length ?? 0; // check if empty string, if so, unknown if (productLength == 0 || MemoryExtensions.IsWhiteSpace(input)) { UnknownPart.CopyTo(output.Slice(currentPosition)); currentPosition += UnknownPart.Length; } else { // check valid var isValid = true; foreach (var c in input) { if (!char.IsLetterOrDigit(c) && c != ' ') { isValid = false; break; } } if (!isValid) // not valid { InvalidPart.CopyTo(output.Slice(currentPosition)); currentPosition += InvalidPart.Length; } else { // if valid, lowercase MemoryExtensions.ToLowerInvariant(input, output.Slice(currentPosition)); currentPosition += productLength; } } output[currentPosition++] = JoinChar; }