Пример #1
0
 /// <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));
     }
 }
Пример #2
0
        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;
        }