internal JsonValueWithBackgroundSyntax(JsonMultiValueSyntax parent, int parentValueNodeIndex)
        {
            Parent = parent;
            ParentValueNodeIndex = parentValueNodeIndex;
            Green = parent.Green.ValueNodes[parentValueNodeIndex];

            backgroundBefore = new SafeLazyObject<JsonBackgroundListSyntax>(() => new JsonBackgroundListSyntax(this));
            contentNode = new SafeLazyObject<JsonValueSyntax>(() => JsonValueSyntaxCreator.Instance.Visit(Green.ContentNode, this));
        }
예제 #2
0
        internal PgnGameListSyntax(GreenPgnGameListSyntax green)
        {
            Green = green;

            Games = new SafeLazyObjectCollection <PgnGameSyntax>(
                green.Games.Count,
                index => new PgnGameSyntax(this, index, Green.Games[index]));

            trailingTrivia = new SafeLazyObject <PgnTriviaSyntax>(() => new PgnTriviaSyntax(this, Green.TrailingTrivia));
        }
        internal PgnTriviaElementSyntax(PgnTriviaSyntax parent, int commentNodeIndex, GreenPgnTriviaElementSyntax green)
        {
            Parent           = parent;
            CommentNodeIndex = commentNodeIndex;
            Green            = green;

            backgroundBefore = new SafeLazyObject <PgnBackgroundListSyntax>(() => new PgnBackgroundListSyntax(this, Green.BackgroundBefore));

            commentNode = new SafeLazyObject <PgnCommentSyntax>(() => new PgnCommentSyntax(this, Green.CommentNode));
        }
예제 #4
0
        internal PgnTriviaSyntax(Union <WithTriviaSyntax, PgnGameListSyntax> parent, GreenPgnTriviaSyntax green)
        {
            Parent = parent;
            Green  = green;

            CommentNodes = new SafeLazyObjectCollection <PgnTriviaElementSyntax>(
                green.CommentNodes.Count,
                index => new PgnTriviaElementSyntax(this, index, Green.CommentNodes[index]));

            backgroundAfter = new SafeLazyObject <PgnBackgroundListSyntax>(() => new PgnBackgroundListSyntax(this, Green.BackgroundAfter));
        }
예제 #5
0
        internal PgnPlyListSyntax(Union <PgnGameSyntax, PgnVariationSyntax> parent, GreenPgnPlyListSyntax green)
        {
            Parent = parent;
            Green  = green;

            Plies = new SafeLazyObjectCollection <PgnPlySyntax>(
                green.Plies.Count,
                index => new PgnPlySyntax(this, index, Green.Plies[index]));

            trailingFloatItems = new SafeLazyObject <PgnPlyFloatItemListSyntax>(() => new PgnPlyFloatItemListSyntax(this, Green.TrailingFloatItems));
        }
예제 #6
0
        private JsonMultiValueSyntax(Union <_void, JsonListSyntax, JsonKeyValueSyntax> parent, GreenJsonMultiValueSyntax green)
        {
            Parent = parent;
            Green  = green;

            ValueNodes = new SafeLazyObjectCollection <JsonValueWithBackgroundSyntax>(
                green.ValueNodes.Count,
                index => new JsonValueWithBackgroundSyntax(this, index));

            backgroundAfter = new SafeLazyObject <JsonBackgroundListSyntax>(() => new JsonBackgroundListSyntax(this));
        }
예제 #7
0
        internal PgnGameSyntax(PgnGameListSyntax parent, int parentIndex, GreenPgnGameSyntax green)
        {
            Parent      = parent;
            ParentIndex = parentIndex;
            Green       = green;

            tagSection = new SafeLazyObject <PgnTagSectionSyntax>(() => new PgnTagSectionSyntax(this, green.TagSection));
            plyList    = new SafeLazyObject <PgnPlyListSyntax>(() => new PgnPlyListSyntax(this, green.PlyList));

            if (green.GameResult != null)
            {
                lazyGameResultOrEmpty = new SafeLazyChildSyntaxOrEmpty <PgnGameResultWithTriviaSyntax>(
                    () => new PgnGameResultWithTriviaSyntax(this, Green.GameResult));
            }
            else
            {
                lazyGameResultOrEmpty = new SafeLazyChildSyntaxOrEmpty <PgnGameResultWithTriviaSyntax>(
                    this, green.TagSection.Length + green.PlyList.Length);
            }
        }
예제 #8
0
        internal PgnVariationSyntax(PgnVariationWithFloatItemsSyntax parent, GreenPgnVariationSyntax green)
        {
            Parent = parent;
            Green  = green;

            parenthesisOpen = new SafeLazyObject <PgnParenthesisOpenWithTriviaSyntax>(
                () => new PgnParenthesisOpenWithTriviaSyntax(this, Green.ParenthesisOpen));

            pliesWithFloatItems = new SafeLazyObject <PgnPlyListSyntax>(
                () => new PgnPlyListSyntax(this, Green.PliesWithFloatItems));

            if (green.ParenthesisClose != null)
            {
                lazyParenthesisCloseOrEmpty = new SafeLazyChildSyntaxOrEmpty <PgnParenthesisCloseWithTriviaSyntax>(
                    () => new PgnParenthesisCloseWithTriviaSyntax(this, Green.ParenthesisClose));
            }
            else
            {
                lazyParenthesisCloseOrEmpty = new SafeLazyChildSyntaxOrEmpty <PgnParenthesisCloseWithTriviaSyntax>(
                    this, green.ParenthesisOpen.Length + green.PliesWithFloatItems.Length);
            }
        }
예제 #9
0
 /// <summary>
 /// Initializes as empty.
 /// </summary>
 public SafeLazyChildSyntaxOrEmpty(PgnSyntax parent, int start)
 {
     lazyNodeIfNonEmpty = default;
     nodeIfEmpty        = new PgnEmptySyntax(parent, start);
 }
예제 #10
0
 /// <summary>
 /// Initializes as lazy child node.
 /// </summary>
 public SafeLazyChildSyntaxOrEmpty(Func <TChildSyntax> childConstructor)
 {
     lazyNodeIfNonEmpty = new SafeLazyObject <TChildSyntax>(childConstructor);
     nodeIfEmpty        = null;
 }
 internal WithPlyFloatItemsSyntax(ReadOnlySpanList <GreenWithTriviaSyntax> greenLeadingFloatItems)
 {
     leadingFloatItems = new SafeLazyObject <PgnPlyFloatItemListSyntax>(() => new PgnPlyFloatItemListSyntax(this, greenLeadingFloatItems));
 }
예제 #12
0
 internal WithTriviaSyntax(GreenPgnTriviaSyntax greenLeadingTrivia)
 {
     leadingTrivia = new SafeLazyObject <PgnTriviaSyntax>(() => new PgnTriviaSyntax(this, greenLeadingTrivia));
 }