Alsing.SourceCode.SyntaxDocumentParsers.DefaultParser.GetNextChildSegment C# (CSharp) Метод

GetNextChildSegment() приватный Метод

private GetNextChildSegment ( Row Row, Span currentSpan, int StartPos ) : ScanResultSegment
Row Row
currentSpan Span
StartPos int
Результат ScanResultSegment
        private ScanResultSegment GetNextChildSegment(Row Row, Span
                                                                   currentSpan, int StartPos)
        {
            //this row has no text , just bail out...
            if (StartPos >= Row.Text.Length)
                return new ScanResultSegment();


            var Result = new ScanResultSegment {HasContent = false, IsEndSegment = false};


            foreach (SpanDefinition ChildBlock in currentSpan.spanDefinition.childSpanDefinitions)
            {
                //scan each scope in each childblock
                foreach (Scope Scope in ChildBlock.ScopePatterns)
                {
                    PatternScanResult psr = Scope.Start.IndexIn(Row.Text, StartPos,
                                                                Scope.CaseSensitive, Separators);
                    int CurrentPosition = psr.Index;
                    if ((!Result.HasContent || CurrentPosition < Result.Position) &&
                        psr.Token != "")
                    {
                        //we found a better match
                        //store this new match
                        Result.Pattern = Scope.Start;
                        Result.Position = CurrentPosition;
                        Result.Token = psr.Token;
                        Result.HasContent = true;
                        Result.spanDefinition = ChildBlock;
                        Result.Scope = Scope;

                        if (Scope.NormalizeCase)
                            if (!Scope.Start.IsComplex)
                                Result.Token = Scope.Start.StringPattern;
                    }
                }
            }


            //no result ,  new ScanResultSegment();
            if (!Result.HasContent)
                return new ScanResultSegment();

            return Result;
        }
    }