public static CellFormat fromPatternString( String pattern )
	{
		if( (null == pattern) || "".equals( pattern ) || "General".equalsIgnoreCase( pattern ) )
		{
			return new GeneralCellFormat();
		}

		String[] pats = pattern.split( ";" );

		String tester = StringTool.convertPatternExtractBracketedExpression( pats[0] );
		if( tester.matches( ".*(((y{1,4}|m{1,5}|d{1,4}|h{1,2}|s{1,2}).*)+).*" ) )
		{
			String string;
			if( pats.length > 3 )
			{
				string = StringTool.convertPatternFromExcelToStringFormatter( pats[3], false );
			}
			else
			{
				string = "%s";
			}

			return new DateCellFormat( StringTool.convertDatePatternFromExcelToStringFormatter( tester ), string );
		}

		String positive;
		String negative;
		String zero;
		String string;
		positive = StringTool.convertPatternFromExcelToStringFormatter( pats[0], false );

		negative = StringTool.convertPatternFromExcelToStringFormatter( pats[((pats.length > 1) ? 1 : 0)], true );

		if( pats.length > 2 )
		{
			zero = StringTool.convertPatternFromExcelToStringFormatter( pats[2], false );
		}
		else
		{
			zero = positive;
		}

		if( pats.length > 3 )
		{
			string = StringTool.convertPatternFromExcelToStringFormatter( pats[3], false );
		}
		else
		{
			string = "%s";
		}

		return new NumberCellFormat( positive, negative, zero, string );
	}