// 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: Substring.java package com.icl.saxon.functions; import com.icl.saxon.Context; import com.icl.saxon.expr.*; // Referenced classes of package com.icl.saxon.functions: // Round public class Substring extends Function { public Substring() { } public String getName() { /* 11*/ return "substring"; } public int getDataType() { /* 20*/ return 3; } public Expression simplify() throws XPathException { /* 28*/ int i = checkArgumentCount(2, 3); /* 29*/ super.argument[0] = super.argument[0].simplify(); /* 30*/ super.argument[1] = super.argument[1].simplify(); /* 31*/ boolean flag = (super.argument[0] instanceof Value) && (super.argument[1] instanceof Value); /* 32*/ if(i == 3) { /* 33*/ super.argument[2] = super.argument[2].simplify(); /* 34*/ flag = flag && (super.argument[2] instanceof Value); } /* 36*/ if(flag) /* 37*/ return evaluate(null); /* 39*/ else /* 39*/ return this; } public String evaluateAsString(Context context) throws XPathException { /* 48*/ String s = super.argument[0].evaluateAsString(context); /* 49*/ double d = super.argument[1].evaluateAsNumber(context); /* 51*/ if(getNumberOfArguments() == 2) { /* 52*/ return substring(s, d); } else { /* 54*/ double d1 = super.argument[2].evaluateAsNumber(context); /* 55*/ return substring(s, d, d1); } } public Value evaluate(Context context) throws XPathException { /* 64*/ return new StringValue(evaluateAsString(context)); } private static String substring(String s, double d) { /* 72*/ int i = s.length(); /* 73*/ int j = (i - (int)d) + 1; /* 74*/ if(j < 0) /* 74*/ j = 1; /* 75*/ if(j > i) /* 75*/ j = i; /* 76*/ StringBuffer stringbuffer = new StringBuffer(j); /* 77*/ int k = 1; /* 78*/ int l = 0; /* 79*/ double d1 = Round.round(d); /* 82*/ while(l < i) { /* 82*/ if((double)k >= d1) /* 83*/ stringbuffer.append(s.charAt(l)); /* 86*/ char c = s.charAt(l++); /* 87*/ if(c < '\uD800' || c > '\uDBFF') /* 87*/ k++; } /* 89*/ return stringbuffer.toString(); } private static String substring(String s, double d, double d1) { /* 98*/ int i = s.length(); /* 99*/ int j = (int)d1; /* 100*/ if(j < 0) /* 100*/ j = 1; /* 101*/ if(j > i) /* 101*/ j = i; /* 103*/ StringBuffer stringbuffer = new StringBuffer(j); /* 104*/ int k = 1; /* 105*/ int l = 0; /* 106*/ double d2 = Round.round(d); /* 107*/ double d3 = Round.round(d1); /* 110*/ while(l < i) { /* 110*/ if((double)k >= d2) { /* 111*/ if((double)k >= d2 + d3) /* 112*/ break; /* 112*/ stringbuffer.append(s.charAt(l)); } /* 118*/ char c = s.charAt(l++); /* 119*/ if(c < '\uD800' || c > '\uDBFF') /* 119*/ k++; } /* 122*/ return stringbuffer.toString(); } public int getDependencies() { /* 130*/ int i = super.argument[0].getDependencies() | super.argument[1].getDependencies(); /* 131*/ if(getNumberOfArguments() == 3) /* 132*/ i |= super.argument[2].getDependencies(); /* 134*/ return i; } public Expression reduce(int i, Context context) throws XPathException { /* 142*/ Substring substring1 = new Substring(); /* 143*/ substring1.addArgument(super.argument[0].reduce(i, context)); /* 144*/ substring1.addArgument(super.argument[1].reduce(i, context)); /* 145*/ if(getNumberOfArguments() == 3) /* 146*/ substring1.addArgument(super.argument[2].reduce(i, context)); /* 148*/ substring1.setStaticContext(getStaticContext()); /* 149*/ return substring1.simplify(); } }