コード例 #1
0
        /// <summary>
        ///     Exit a parse tree produced by <see cref="LuaParser.field" />.
        ///     <para>The default implementation does nothing.</para>
        /// </summary>
        /// <param name="context">The parse tree.</param>
        public override void ExitField(LuaParser.FieldContext context)
        {
            switch (_currentScope)
            {
            case MMSavedVariableScope.EsoItem:
                if (CurrentItem != null)
                {
                    LuaTableField itemField = GetField(context);
                    if (itemField != null)
                    {
                        CurrentItem.Set(itemField);
                    }
                }
                break;

            case MMSavedVariableScope.EsoGuildStoreSale:
                if (CurrentSale != null)
                {
                    LuaTableField saleField = GetField(context);
                    if (saleField != null)
                    {
                        CurrentSale.Set(saleField);
                    }
                }
                break;
            }
        }
コード例 #2
0
        /// <summary>
        ///     Gets a name/value pair representing a given Lua table field and whether the value is a nested table or not.
        /// </summary>
        /// <param name="context">The parse tree node for the field.</param>
        /// <param name="valueChild">
        ///     (optional) The parse tree node for the value, if known; if not known, it is assumed to be the
        ///     fifth child of the field node.
        /// </param>
        /// <returns></returns>
        protected LuaTableField GetField(LuaParser.FieldContext context, LuaParser.ExpContext valueChild = null)
        {
            // Fields are expected to have 5 children: <left bracket> <name> <right bracket> <equal> <value>
            // When called from the table constructor enter method, the <value> child is not yet populated, so we pass it explicitly.
            int expectedChildCount = valueChild == null ? 5 : 4;

            // Validate field count
            if (context.ChildCount < expectedChildCount)
            {
                return(null);
            }

            // Value child not specified, so get it from the fifth child.
            if (valueChild == null)
            {
                valueChild = context.GetChild(4) as LuaParser.ExpContext;
            }

            // Value isn't an expression? Malformed Lua table.
            if (valueChild == null)
            {
                return(null);
            }

            // Second child is the <name> node.
            var keyChild = context.GetChild(1) as LuaParser.ExpContext;

            // Name wasn't an expression? Malformed Lua table.
            if (keyChild == null)
            {
                return(null);
            }

            // Create key/value instance and return
            var field = new LuaTableField
            {
                Name    = GetString(keyChild),
                IsTable = valueChild.Start.Type == LuaParser.T__48 // left curly brace token indicates a nested table
            };

            if (!field.IsTable)
            {
                field.Value = GetString(valueChild);
            }
            return(field);
        }
コード例 #3
0
 public void EnterField([NotNull] LuaParser.FieldContext context)
 {
     throw new NotImplementedException();
 }
コード例 #4
0
ファイル: LuaBaseListener.cs プロジェクト: ivan-ristovic/LICC
 public virtual void ExitField([NotNull] LuaParser.FieldContext context)
 {
 }
コード例 #5
0
ファイル: LuaBaseVisitor.cs プロジェクト: LINVAST/LINVAST
 public virtual Result VisitField([NotNull] LuaParser.FieldContext context)
 {
     return(VisitChildren(context));
 }
コード例 #6
0
 public void EnterField([NotNull] LuaParser.FieldContext context) => DefaultEnter(context);
コード例 #7
0
 public void ExitField([NotNull] LuaParser.FieldContext context) => DefaultExit(context);