/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: * ******************************************************************* * Project: String Enchant * * Version: 1.02 * * Author: RabiatoR * ******************************************************************* * JavaScript "String" object functionnaly enchant library * Includes: * String String().addcslashes( String charlist ); * String String().addslashes( void ); * String String().bin2hex( [String separator = ''] ); * String String().dump( void ); * String String().ltrim( void ); * String String().rtrim( void ); * String String().trim( void ); * String String().random( [Number length = rand(1,64) [, String charlist = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"]] ); * Number String().hexToDec( [Boolean unsigned = false] ); * * Changelog: * [1.02] * ltrim, rtrim, trim - ie bug fixed. * [1.01] * Syntax reformatted. * [1.0] * First release. * * */ /**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**/ /* * Syntax: String().addcslashes( String charlist ); * Return: String; * Failur: false; *****************************************************************/ if( typeof( String.prototype.addcslashes ) == 'undefined' ){ String.prototype.addcslashes = function( charlist ){ if( typeof( charlist ) != 'string' ){ return false; } var chrs = []; var retn = ""; for( var i = 0, l = charlist.length; i < l; i++ ){ var c = charlist.charAt( i ); var n = charlist.charAt( i + 1 ); if( c === '\\' && n && (/\d/).test(n) ){ var rb = charlist.slice(i + 1).match(/^\d+/)[0], re = 0, ol = rb.length, op = i + ol + 1; if( charlist.charAt( op ) + charlist.charAt( op + 1 ) === ".." ){ var b = rb.charCodeAt(0), e = 0; if( (/\\\d/).test( charlist.charAt( op + 2 ) + charlist.charAt( op + 3 ) ) ){ re = charlist.slice( op + 3 ).match(/^\d+/)[0]; i += 1; }else if( charlist.charAt( op + 2 ) ){ re = charlist.charAt( op + 2 ); }else{ return false; } e = re.charCodeAt(0); if( e > b ){ for( j = b; j <= e; j++ ){ chrs[chrs.length] = String.fromCharCode(j); } }else{ chrs[chrs.length] = '.'; chrs[chrs.length] = rb; chrs[chrs.length] = re; } i += re.length + 2; }else{ chrs[chrs.length] = String.fromCharCode( parseInt( rb, 8 ) ); } i += ol; }else if( n + charlist.charAt( i + 2 ) === ".." ){ var rb = c, re = 0, b = rb.charCodeAt(0), e = 0; if( (/\\\d/).test( charlist.charAt( i + 3 ) + charlist.charAt( i + 4 ) ) ){ re = charlist.slice( i + 4 ).match(/^\d+/)[0]; i += 1; }else if( charlist.charAt( i + 3 ) ){ re = charlist.charAt( i + 3 ); }else{ return false; } e = re.charCodeAt(0); if( e > b ){ for( j = b; j <= e; j++ ){ chrs[chrs.length] = String.fromCharCode(j); } }else{ chrs[chrs.length] = '.'; chrs[chrs.length] = rb; chrs[chrs.length] = re; } i += re.length + 2; }else{ chrs[chrs.length] = c; } } for( var i = 0, l = this.length; i < l; i++ ){ var c = this.charAt(i); if( chrs.indexOf(c) !== -1 ){ var code = c.charCodeAt(0); retn += "\\"; if( code < 32 || code > 126 ){ switch( c ){ case '\n': retn += "n"; break; case '\t': retn += "t"; break; case '\u000D': retn += "r"; break; case '\u0007': retn += "a"; break; case '\v': retn += "v"; break; case '\b': retn += "b"; break; case '\f': retn += "f"; break; default: var e = encodeURIComponent(c), p = /%([\dA-Fa-f]+)/g, g = []; if( (g = p.exec(e) ) !== null ){ var n = parseInt( g[1], 16 ).toString(8), r = n; if( ( n = n + "" ).length < 3 ){ r = (new Array( 4 - n.length)).join("0") + n; } retn += r; } while( (g = p.exec(e) ) !== null ){ var n = parseInt( g[1], 16 ).toString(8), r = n; if( ( n = n + "" ).length < 3 ){ r = (new Array( 4 - n.length)).join("0") + n; } retn += '\\' + r; } break; } }else{ retn += c; } }else{ retn += c; } } return retn; } } /* * Syntax: String().addslashes( void ); * Return: String; *****************************************************************/ if( typeof( String.prototype.addslashes ) == 'undefined' ){ String.prototype.addslashes = function(){ return (this + "").replace( /[\\"']/g, "\\$&" ).replace( /\u0000/g, "\\0" ); } } /* * Syntax: String().bin2hex( [String separator = ''] ); * Return: String; *****************************************************************/ if( typeof( String.prototype.bin2hex ) == 'undefined' ){ String.prototype.bin2hex = function( separator ){ if( typeof( separator ) != 'string' ){ separator = ""; } var retn = []; for( var i = 0, l = this.length; i < l; i++ ){ retn[i] = this.charCodeAt(i).toString(16).replace( /^([\da-f])$/, "0$1" ); } return retn.join( separator ); } } /* * Syntax: String().dump( void ); * Return: String; *****************************************************************/ if( typeof( String.prototype.dump ) == 'undefined' ){ String.prototype.dump = function(){ return "String( "+ this.length +" ){ \""+ this +"\" }"; } } /* * Syntax: String().ltrim( void ); * Return: String; *****************************************************************/ if( typeof( String.prototype.ltrim ) == 'undefined' ){ String.prototype.ltrim = function(){ return this.replace( /^[\s\xA0]+/, "" ); } } /* * Syntax: String().rtrim( void ); * Return: String; *****************************************************************/ if( typeof( String.prototype.rtrim ) == 'undefined' ){ String.prototype.rtrim = function(){ return this.replace( /[\s\xA0]+$/, "" ); } } /* * Syntax: String().trim( void ); * Return: String; *****************************************************************/ if( typeof( String.prototype.trim ) == 'undefined' ){ String.prototype.trim = function(){ return this.replace( /^[\s\xA0]+|[\s\xA0]+$/g, "" ); } } /* * Syntax: String().random( [Number length = rand(1,64) [, String charlist = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"]] ); * Return: String; * Failur: false; *****************************************************************/ if( typeof( String.prototype.random ) == 'undefined' ){ String.prototype.random = function( length, charlist ){ if( typeof( length ) != 'number' ){ length = Math.floor( Math.random() * 64 ); } if( typeof( charlist ) != 'string' ){ charlist = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; } if( charlist.length == 0 ){ return false; } while( length <= 0 ){ length = Math.floor( Math.random() * 64 ); } var retn = ""; for( var i = 0, l = charlist.length; i < length; i++ ){ retn += charlist.charAt( Math.floor( Math.random() * l ) ); } return retn; } } /* * Syntax: String().hexToDec( [Boolean unsigned = false] ); * Return: Number; *****************************************************************/ if( typeof( String.prototype.hexToDec ) == 'undefined' ){ String.prototype.hexToDec = function( unsigned ){ var retn = parseInt( this, 16 ); var max = Math.pow( 16, this.length ); if( !unsigned && retn > max/2-1 ){ retn = retn - Math.pow( 16, this.length ) } return retn; } }