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)); } }
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)); }
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)); }
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)); }