Пример #1
0
        /* Attribútum mixin-t nézünk meg.
         *
         * Végigmegyünk az összes benne foglalt attribútumon, és ami helyes azt hozzáadjuk az AttributeBlock listájához.
         * Ami nem volt helyes, arre a VisitAttr dob majd egy warning-ot és szimplán nem vesszük figyelembe.
         * A duplikátumokat a listába adás visszatérési értékével szűrjük, a false jelentése, hogy duplikátum keletkezett
         * és a régebbi attribútum eltávolításra került.
         * Mindig a forráskódban lentebb lévő attribútum fogja hordozni a valódi értéket.
         *
         * Kivétel a rotation-axis és rotation-angle, mert könnyen lehet, hogy a felhasználó forgatások sorozatát akarja alkalmazni.
         */
        public override object VisitAttr_group([NotNull] DDD_layout_scriptParser.Attr_groupContext context)
        {
            AttributeBlock attributeBlock = new AttributeBlock(context.STRING().GetText());

            foreach (var attr in context.attr())
            {
                dynamic attrToAdd = VisitAttr(attr);
                if (attrToAdd == null)
                {
                    continue;
                }

                attrToAdd = (Attribute)attrToAdd;
                if (attributeBlock.Add(attrToAdd) == false)
                {
                    alerts.Add(new warning(attr.Start.Line, $"Attribute value '{attrToAdd.Name}' is set twice or more. Only the last defined will be valid"));
                }
            }

            foreach (var attrBlock in attributeBlocks)
            {
                if (attrBlock.Name == attributeBlock.Name)
                {
                    alerts.Add(new error(context.Start.Line, $"There is another attr-block defined with the name '{attributeBlock.Name}'. This one is ignored"));
                    return(null);
                }
            }

            attributeBlocks.Add(attributeBlock);
            return(null);
        }
 /// <summary>
 /// Exit a parse tree produced by <see cref="DDD_layout_scriptParser.attr_group"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitAttr_group([NotNull] DDD_layout_scriptParser.Attr_groupContext context)
 {
 }
Пример #3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="DDD_layout_scriptParser.attr_group"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitAttr_group([NotNull] DDD_layout_scriptParser.Attr_groupContext context)
 {
     return(VisitChildren(context));
 }