示例#1
0
        private CodeStruct Text_Join(Block block)
        {
            ItemListMutator mutator = block.Mutator as ItemListMutator;

            if (mutator == null)
            {
                throw new Exception("Block \"text_join\" must have a mutater \"text_join_mutator\"");
            }

            // Create a string made up of any number of elements of any type.
            if (mutator.ItemCount == 0)
            {
                return(new CodeStruct("\'\'", Lua.ORDER_ATOMIC));
            }
            else if (mutator.ItemCount == 1)
            {
                string element = Lua.Generator.ValueToCode(block, "ADD0", Lua.ORDER_NONE);
                if (string.IsNullOrEmpty(element))
                {
                    element = "\'\'";
                }
                string code = "tostring(" + element + ")";
                return(new CodeStruct(code, Lua.ORDER_HIGH));
            }
            else if (mutator.ItemCount == 2)
            {
                string element0 = Lua.Generator.ValueToCode(block, "ADD0", Lua.ORDER_CONCATENATION);
                if (string.IsNullOrEmpty(element0))
                {
                    element0 = "\'\'";
                }
                string element1 = Lua.Generator.ValueToCode(block, "ADD1", Lua.ORDER_CONCATENATION);
                if (string.IsNullOrEmpty(element1))
                {
                    element1 = "\'\'";
                }
                string code = element0 + " .. " + element1;
                return(new CodeStruct(code, Lua.ORDER_CONCATENATION));
            }
            else
            {
                string[] elements = new string[mutator.ItemCount];
                for (int i = 0; i < mutator.ItemCount; i++)
                {
                    elements[i] = Lua.Generator.ValueToCode(block, "ADD" + i, Lua.ORDER_NONE);
                    if (string.IsNullOrEmpty(elements[i]))
                    {
                        elements[i] = "\'\'";
                    }
                }
                string code = "table.concat({" + string.Join(", ", elements) + "})";
                return(new CodeStruct(code, Lua.ORDER_HIGH));
            }
        }
示例#2
0
        protected override DataStruct Execute(Block block)
        {
            ItemListMutator mutator = block.Mutator as ItemListMutator;

            if (mutator == null)
            {
                throw new Exception("Block \"lists_create_with\" must have a mutator \"lists_create_with_item_mutator\"");
            }

            ArrayList resultList = new ArrayList();

            for (int i = 0; i < mutator.ItemCount; i++)
            {
                resultList.Add(CSharp.Interpreter.ValueReturn(block, "ADD" + i, new DataStruct(0)));
            }
            return(new DataStruct(resultList));
        }
示例#3
0
        private CodeStruct List_CreateWith(Block block)
        {
            ItemListMutator mutator = block.Mutator as ItemListMutator;

            if (mutator == null)
            {
                throw new Exception("Block \"lists_create_with\" must have a mutator \"lists_create_with_item_mutator\"");
            }

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < mutator.ItemCount; i++)
            {
                sb.Append(Lua.Generator.ValueToCode(block, "ADD" + i, Lua.ORDER_NONE, "None"));
                if (i < mutator.ItemCount - 1)
                {
                    sb.Append(", ");
                }
            }
            string code = "{" + sb.ToString() + "}";

            return(new CodeStruct(code, Lua.ORDER_ATOMIC));
        }
示例#4
0
        protected override IEnumerator Execute(Block block)
        {
            ItemListMutator mutator = block.Mutator as ItemListMutator;

            if (mutator == null)
            {
                throw new Exception("Block \"text_join\" must have a mutater \"text_join_mutator\"");
            }
            string result = String.Empty;

            if (mutator.ItemCount > 0)
            {
                string[] elements = new string[mutator.ItemCount];
                for (int i = 0; i < mutator.ItemCount; i++)
                {
                    CustomEnumerator ctor = CSharp.Interpreter.ValueReturn(block, "ADD" + i, new DataStruct(""));
                    yield return(ctor);

                    elements[i] = ctor.Data.StringValue;
                }
                result = string.Join("", elements);
            }
            ReturnData(new DataStruct(result));
        }