// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3) fieldsfirst lnc
// Source File Name: Translate.java
package com.icl.saxon.functions;
import com.icl.saxon.Context;
import com.icl.saxon.expr.*;
public class Translate extends Function
{
public Translate()
{
}
public String getName()
{
/* 14*/ return "translate";
}
public int getDataType()
{
/* 23*/ return 3;
}
public Expression simplify()
throws XPathException
{
/* 31*/ int i = checkArgumentCount(3, 3);
/* 32*/ super.argument[0] = super.argument[0].simplify();
/* 33*/ super.argument[1] = super.argument[1].simplify();
/* 34*/ super.argument[2] = super.argument[2].simplify();
/* 36*/ boolean flag = (super.argument[0] instanceof Value) && (super.argument[1] instanceof Value) && (super.argument[2] instanceof Value);
/* 40*/ if(flag)
/* 41*/ return evaluate(null);
/* 43*/ else
/* 43*/ return this;
}
public String evaluateAsString(Context context)
throws XPathException
{
/* 52*/ String s = super.argument[0].evaluateAsString(context);
/* 53*/ String s1 = super.argument[1].evaluateAsString(context);
/* 54*/ String s2 = super.argument[2].evaluateAsString(context);
/* 56*/ return translate(s, s1, s2);
}
public Value evaluate(Context context)
throws XPathException
{
/* 64*/ return new StringValue(evaluateAsString(context));
}
public int getDependencies()
{
/* 72*/ return super.argument[0].getDependencies() | super.argument[1].getDependencies() | super.argument[2].getDependencies();
}
public Expression reduce(int i, Context context)
throws XPathException
{
/* 82*/ Translate translate1 = new Translate();
/* 83*/ translate1.addArgument(super.argument[0].reduce(i, context));
/* 84*/ translate1.addArgument(super.argument[1].reduce(i, context));
/* 85*/ translate1.addArgument(super.argument[2].reduce(i, context));
/* 86*/ translate1.setStaticContext(getStaticContext());
/* 87*/ return translate1.simplify();
}
private static String translate(String s, String s1, String s2)
{
/* 97*/ int i = StringValue.getLength(s);
/* 98*/ int j = StringValue.getLength(s1);
/* 99*/ int k = StringValue.getLength(s2);
/* 100*/ if(s.length() != i || s1.length() != j || s2.length() != k)
/* 103*/ return slowTranslate(s, s1, s2);
/* 106*/ StringBuffer stringbuffer = new StringBuffer();
/* 107*/ int l = s2.length();
/* 108*/ for(int i1 = 0; i1 < s.length(); i1++)
{
/* 109*/ char c = s.charAt(i1);
/* 110*/ int j1 = s1.indexOf(c);
/* 111*/ if(j1 < l)
/* 112*/ stringbuffer.append(j1 >= 0 ? s2.charAt(j1) : c);
}
/* 115*/ return stringbuffer.toString();
}
private static String slowTranslate(String s, String s1, String s2)
{
/* 123*/ int ai[] = StringValue.expand(s);
/* 124*/ int ai1[] = StringValue.expand(s1);
/* 125*/ int ai2[] = StringValue.expand(s2);
/* 126*/ StringBuffer stringbuffer = new StringBuffer();
/* 127*/ for(int i = 0; i < ai.length; i++)
{
/* 128*/ int j = ai[i];
/* 129*/ int k = -1;
/* 130*/ for(int l = 0; l < ai1.length; l++)
{
/* 131*/ if(ai1[l] != j)
/* 132*/ continue;
/* 132*/ k = l;
/* 133*/ break;
}
/* 136*/ int i1 = -1;
/* 137*/ if(k < 0)
/* 138*/ i1 = ai[i];
/* 139*/ else
/* 139*/ if(k < ai2.length)
/* 140*/ i1 = ai2[k];
/* 145*/ if(i1 >= 0)
/* 146*/ if(i1 < 0x10000)
{
/* 147*/ stringbuffer.append((char)i1);
} else
{
/* 153*/ i1 -= 0x10000;
/* 154*/ stringbuffer.append((char)(i1 / 1024 + 55296));
/* 155*/ stringbuffer.append((char)(i1 % 1024 + 56320));
}
}
/* 159*/ return stringbuffer.toString();
}
}