package org.itsnat.droid.impl.util;
import org.itsnat.droid.ItsNatDroidException;
import java.io.UnsupportedEncodingException;
/**
* Created by jmarranz on 20/02/2016.
*/
public class StringUtil
{
public static boolean isEmpty(String str)
{
return str == null || str.isEmpty();
}
public static String toString(byte[] data,String encoding)
{
try { return new String(data,encoding); }
catch (UnsupportedEncodingException ex) { throw new ItsNatDroidException(ex); }
}
public static boolean equalsEmptyAllowed(String value1, String value2)
{
if (isEmpty(value1)) // null y "" son iguales en este caso
return isEmpty(value2);
else
return value1.equals(value2);
}
public static boolean isTag(String tag)
{
// Debe estar tag trimed antes de llamar, no se consideran los espacios
boolean isTag = true;
for (int i = 0; i < tag.length(); i++)
{
char c = tag.charAt(i);
if (i == 0 && Character.toLowerCase(c) == 'h' && tag.length() == 2)
{
char c2 = tag.charAt(1);
if (c2 >= '1' && c2 <= '6')
return true;
}
if (!Character.isLetter(c))
{
isTag = false;
break;
}
}
return isTag;
}
public static String convertEscapedStringLiteralToNormalString(String code)
{
// Hemos extraido la cadena del código fuente beanshell (formada con "" esto no es JavaScript), para poder poner una cadena literal necesitamos poner
// los LF como \n y las " como \", tenemos que deshacer eso o de otra manera NO tenemos el texto original de verdad.
// En el caso de los nombres de las variables, namespaces etc con extractStringLiteralContent es suficiente
// Ver código de ItsNat Server: JSAndBSRenderImpl::toTransportableStringLiteral(String text,boolean addQuotation,Browser browser)
// '\r' '\n' '"' '\'' '\\' '\t' '\f' '\b'
// El caracter '"' está presente como \" en una string delimitada con "
// El caracter '\'' está presente como ' en una string delimitada con "
// Se usa también en XMLInflaterRegistry.getString() y getText() porque en XML se pueden poner \n, \t etc y el compilador de Android los procesa y los deja como caracteres normales
StringBuilder codeRes = new StringBuilder();
int start = 0;
while(true)
{
int pos = code.indexOf('\\', start);
if (pos != -1)
{
String frag = code.substring(start,pos);
codeRes.append(frag);
char c = code.charAt(pos); // '\\' si o si
pos++;
if (pos == code.length()) break; // No hay un siguiente caracter
char c2 = code.charAt(pos);
switch (c2)
{
case 'r':
codeRes.append('\r');
break;
case 'n':
codeRes.append('\n');
break;
case '"':
codeRes.append('\"');
break;
// No hacemos nada con '\'' pues no se necesita (el servidor cuando se pone entre "" no hace nada con este caracter
case '\\':
codeRes.append('\\');
break;
case 't':
codeRes.append('\t');
break;
case 'f':
codeRes.append('\f');
break;
case 'b':
codeRes.append('\b');
break;
default:
codeRes.append(c);
codeRes.append(c2);
}
pos++;
start = pos;
}
else
{
String frag = code.substring(start);
codeRes.append(frag);
break;
}
}
return codeRes.toString();
}
}