Пример #1
0
 public void Dispose()
 {
     if (initialized)
     {
         Debug.Assert(inner != null, "inner != null");
         inner.Dispose();
         scanner.StopRecording();
     }
 }
Пример #2
0
        public static TElement Read <TElement>([NotNull] this ILexer <TElement> instance, [NotNull] ITextScanner scanner) where TElement : Element
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }
            if (scanner == null)
            {
                throw new ArgumentNullException(nameof(scanner));
            }
            var offset = scanner.Offset;

            scanner.StartRecording();
            TElement candidate = null;

            try
            {
                var context = scanner.GetContext();
                foreach (var element in instance.Read(scanner, context))
                {
                    if (candidate == null)
                    {
                        candidate = element;
                    }
                    else if (element.Text.Length > candidate.Text.Length)
                    {
                        candidate = element;
                    }
                }
                if (candidate == null)
                {
                    return(null);
                }
                scanner.Seek(offset + candidate.Text.Length);
            }
            finally
            {
                scanner.StopRecording();
            }
            return(candidate);
        }