////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package mx.utils
{
/**
* The RPCStringUtil class is a subset of StringUtil, removing methods
* that create dependency issues when RPC messages are in a bootstrap loader.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public class RPCStringUtil
{
include "../core/Version.as";
//--------------------------------------------------------------------------
//
// Class methods
//
//--------------------------------------------------------------------------
/**
* Removes all whitespace characters from the beginning and end
* of the specified string.
*
* @param str The String whose whitespace should be trimmed.
*
* @return Updated String where whitespace was removed from the
* beginning and end.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function trim(str:String):String
{
if (str == null) return '';
var startIndex:int = 0;
while (isWhitespace(str.charAt(startIndex)))
++startIndex;
var endIndex:int = str.length - 1;
while (isWhitespace(str.charAt(endIndex)))
--endIndex;
if (endIndex >= startIndex)
return str.slice(startIndex, endIndex + 1);
else
return "";
}
/**
* Removes all whitespace characters from the beginning and end
* of each element in an Array, where the Array is stored as a String.
*
* @param value The String whose whitespace should be trimmed.
*
* @param separator The String that delimits each Array element in the string.
*
* @return Updated String where whitespace was removed from the
* beginning and end of each element.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function trimArrayElements(value:String, delimiter:String):String
{
if (value != "" && value != null)
{
var items:Array = value.split(delimiter);
var len:int = items.length;
for (var i:int = 0; i < len; i++)
{
items[i] = trim(items[i]);
}
if (len > 0)
{
value = items.join(delimiter);
}
}
return value;
}
/**
* Returns true
if the specified string is
* a single space, tab, carriage return, newline, or formfeed character.
*
* @param str The String that is is being queried.
*
* @return true
if the specified string is
* a single space, tab, carriage return, newline, or formfeed character.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function isWhitespace(character:String):Boolean
{
switch (character)
{
case " ":
case "\t":
case "\r":
case "\n":
case "\f":
return true;
default:
return false;
}
}
/**
* Substitutes "{n}" tokens within the specified string
* with the respective arguments passed in.
*
* @param str The string to make substitutions in.
* This string can contain special tokens of the form
* {n}
, where n
is a zero based index,
* that will be replaced with the additional parameters
* found at that index if specified.
*
* @param rest Additional parameters that can be substituted
* in the str
parameter at each {n}
* location, where n
is an integer (zero based)
* index value into the array of values specified.
* If the first parameter is an array this array will be used as
* a parameter list.
* This allows reuse of this routine in other methods that want to
* use the ... rest signature.
* For example
* public function myTracer(str:String, ... rest):void * { * label.text += StringUtil.substitute(str, rest) + "\n"; * }* * @return New string with all of the
{n}
tokens
* replaced with the respective arguments specified.
*
* @example
*
* var str:String = "here is some info '{0}' and {1}";
* trace(StringUtil.substitute(str, 15.4, true));
*
* // this will output the following string:
* // "here is some info '15.4' and true"
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function substitute(str:String, ... rest):String
{
if (str == null) return '';
// Replace all of the parameters in the msg string.
var len:uint = rest.length;
var args:Array;
if (len == 1 && rest[0] is Array)
{
args = rest[0] as Array;
len = args.length;
}
else
{
args = rest;
}
for (var i:int = 0; i < len; i++)
{
str = str.replace(new RegExp("\\{"+i+"\\}", "g"), args[i]);
}
return str;
}
}
}