/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.provide("dojo.string.Builder"); dojo.require("dojo.string"); dojo.require("dojo.lang.common"); // NOTE: testing shows that direct "+=" concatenation is *much* faster on // Spidermoneky and Rhino, while arr.push()/arr.join() style concatenation is // significantly quicker on IE (Jscript/wsh/etc.). dojo.string.Builder = function(/* string? */str){ // summary this.arrConcat = (dojo.render.html.capable && dojo.render.html["ie"]); var a = []; var b = ""; var length = this.length = b.length; if(this.arrConcat){ if(b.length > 0){ a.push(b); } b = ""; } this.toString = this.valueOf = function(){ // summary // Concatenate internal buffer and return as a string return (this.arrConcat) ? a.join("") : b; // string }; this.append = function(){ // summary // Append all arguments to the end of the internal buffer for(var x=0; x0){ s = b.substring(0, (f-1)); } b = s + b.substring(f + l); length = this.length = b.length; if(this.arrConcat){ a.push(b); b=""; } return this; // dojo.string.Builder }; this.replace = function(/* string */o, /* string */n){ // summary // replace phrase *o* with phrase *n*. if(this.arrConcat){ b = a.join(""); } a = []; b = b.replace(o,n); length = this.length = b.length; if(this.arrConcat){ a.push(b); b=""; } return this; // dojo.string.Builder }; this.insert = function(/* integer */idx, /* string */s){ // summary // Insert string s at index idx. if(this.arrConcat){ b = a.join(""); } a=[]; if(idx == 0){ b = s + b; }else{ var t = b.split(""); t.splice(idx,0,s); b = t.join("") } length = this.length = b.length; if(this.arrConcat){ a.push(b); b=""; } return this; // dojo.string.Builder }; this.append.apply(this, arguments); };