Example #1
0
        /// <summary>
        /// Initializes a new instance of <see cref="GreenPgnPlySyntax"/>.
        /// </summary>
        /// <param name="moveNumber">
        /// The move number. This is an optional parameter.
        /// </param>
        /// <param name="move">
        /// The move. This is an optional parameter.
        /// </param>
        /// <param name="nags">
        /// The NAG (Numeric Annotation Glyph) nodes.
        /// </param>
        /// <param name="variations">
        /// The variation nodes.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="nags"/> and/or <paramref name="variations"/> is null.
        /// </exception>
        /// <exception cref="ArgumentException">
        /// <paramref name="moveNumber"/> is null, <paramref name="move"/> is null, and both <paramref name="nags"/> and <paramref name="variations"/> are empty.
        /// </exception>
        public GreenPgnPlySyntax(
            GreenWithPlyFloatItemsSyntax <GreenWithTriviaSyntax> moveNumber,
            GreenWithPlyFloatItemsSyntax <GreenWithTriviaSyntax> move,
            IEnumerable <GreenWithPlyFloatItemsSyntax <GreenWithTriviaSyntax> > nags,
            IEnumerable <GreenWithPlyFloatItemsSyntax <GreenPgnVariationSyntax> > variations)
        {
            if (nags == null)
            {
                throw new ArgumentNullException(nameof(nags));
            }
            if (variations == null)
            {
                throw new ArgumentNullException(nameof(variations));
            }

            MoveNumber = moveNumber;
            Move       = move;
            Nags       = ReadOnlySpanList <GreenWithPlyFloatItemsSyntax <GreenWithTriviaSyntax> > .Create(nags);

            Variations = ReadOnlySpanList <GreenWithPlyFloatItemsSyntax <GreenPgnVariationSyntax> > .Create(variations);

            int length = Nags.Length + Variations.Length;

            if (moveNumber != null)
            {
                length += moveNumber.Length;
            }
            if (move != null)
            {
                length += move.Length;
            }

            if (length == 0)
            {
                throw new ArgumentException($"{nameof(GreenPgnPlySyntax)} cannot be empty.");
            }

            Length = length;
        }
Example #2
0
 internal PgnVariationWithFloatItemsSyntax(PgnPlySyntax parent, int parentIndex, GreenWithPlyFloatItemsSyntax <GreenPgnVariationSyntax> green)
     : base(parent, green)
 {
     ParentIndex = parentIndex;
 }
Example #3
0
 internal PgnNagWithFloatItemsSyntax(PgnPlySyntax parent, int parentIndex, GreenWithPlyFloatItemsSyntax <GreenWithTriviaSyntax> green)
     : base(parent, green)
 {
     ParentIndex = parentIndex;
 }
Example #4
0
 internal PgnMoveWithFloatItemsSyntax(PgnPlySyntax parent, GreenWithPlyFloatItemsSyntax <GreenWithTriviaSyntax> green)
     : base(parent, green)
 {
 }