func init // add using module sys.add_use('System.Collections.Generic') sys.add_use('System.IO') // initialize instance params = '' + this.props("Strings").value + '.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)' sys.add_object(this.codename, 'List', params) // makes implementation of methods as properties sys._mtd_as_prop_init('List') // initialize properties if(linked("Index") and linked("doGetIndex")) sys.add_var('idx', 1) end if(linked("Item") and linked("doGetItem")) sys.add_var('str', 2) end if(linked("doSwap")) sys.add_var('temp', 2) end end func doAdd(data) if(isdef("AddType")) blk.println(this.codename, '.Add(', d("Data"), ');') else blk.println(this.codename, '.Insert(0, ', d("Data"), ');') end event("onChange") end func doAppend(filename) this.SaveAll(filename, 1) end func doAppendText(text) blk.println(this.codename, '.AddRange((', d("text"), ').Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries));') event("onChange") end func doClear() blk.println(this.codename, '.Clear();') event("onChange") end func make_index(target) return(this.codename + '.IndexOf(' + d("target") + ')') end func doGetIndex(target) if(linked("Index")) blk.println(this.idx, ' = ', this.make_index(target), ';') event("onGetIndex", this.idx) else event("onGetIndex", this.make_index(target)) end end func make_item(indexTarget) return(this.codename + '[' + d("indexTarget") + ']') end func doGetItem(indexTarget) if(linked("Item")) blk.println(this.str, ' = ', make_item(indexTarget), ';') event("onGetItem", this.str) else event("onGetItem", make_item(indexTarget)) end end func doInsert(indexTarget, data) blk.println(this.codename, '.Insert(', d("indexTarget"), ', ', d("Data"), ');') event("onChange") end func doLoad(filename) blk.println(this.codename, ' = new List(File.ReadAllLines(', d("FileName"), isdef("Encoding") ? '' : ', ' + sys.get_undef_manager("Encoding"), '));') event("onChange") end func doLoadFromStream(stream) dt = d("stream") blk.println(dt, '.Position = 0;') .println(this.codename, '.Clear();') .println(this.codename, '.AddRange(new StreamReader(', dt, ').ReadToEnd().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries));') event("onChange") end func doRemoveAt(indexTarget) blk.println(this.codename, '.RemoveAt(', d("indexTarget"), ');') event("onChange") end func doReplace(indexTarget, data) blk.println(this.codename, '[', d("indexTarget"),'] = ', d("Data"), ';') event("onChange") end func doReverse() blk.println(this.codename, '.Reverse();') event("onChange") end func doSave(filename) this.SaveAll(filename, 0) end func doSaveToStream(stream) dt = d("stream") blk.println(dt, ' = new MemoryStream(', dt, '.Capacity);') .println('StreamWriter sw = new StreamWriter(', dt, ');') .println('sw.Write(', 'String.Join(Environment.NewLine, ', this.codename, '.ToArray())', ');') .println('sw.Flush();') .println(dt, '.Position = 0;') event("onStream", dt) end func SaveAll(filename, _append) blk.println('using (StreamWriter st = new StreamWriter(', d("FileName"), _append ? ', true' : ', false', isdef("Encoding") ? '' : ', ' + sys.get_undef_manager("Encoding"), '))') .println('{').inc() .println(this.codename, '.ForEach(delegate(String item) { st.WriteLine(item); });') .println('st.Close();') .dec().println('}') end func doSort(data) blk.println(this.codename, '.Sort();') event("onChange") end func doSwap(indexSource, indexTarget) i1 = d("indexSource") i2 = d("indexTarget") blk.println(this.temp, ' = ', this.codename, '[', i1, '];') .println(this.codename, '[', i1, '] = ', this.codename, '[', i2, '];') .println(this.codename, '[', i2, '] = ', this.temp, ';') event("onChange") end func doText(text) blk.println(this.codename, ' = new List((', d("text"), ').Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries));') event("onChange") end func Array return(this.codename + '.ToArray()') end func Count return(this.codename + '.Count') end func Index if(linked("doGetIndex")) return(this.idx) else return(this.make_index()) end end func Item if(linked("doGetItem")) return(this.str) else return(this.make_item()) end end func LastIndex return('(' + this.codename + '.Count - 1)') end func Text return('String.Join(Environment.NewLine, ' + this.codename + '.ToArray())') end