// 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: FormatNumber.java package com.icl.saxon.functions; import com.icl.saxon.*; import com.icl.saxon.expr.*; import java.text.*; public class FormatNumber extends Function { private DecimalFormat decimalFormat; private String previousFormat; private DecimalFormatSymbols previousDFS; private Controller boundController; public FormatNumber() { /* 13*/ decimalFormat = new DecimalFormat(); /* 14*/ previousFormat = "[null]"; /* 15*/ previousDFS = null; /* 16*/ boundController = null; } public String getName() { /* 19*/ return "format-number"; } public int getDataType() { /* 28*/ return 3; } public Expression simplify() throws XPathException { /* 36*/ int i = checkArgumentCount(2, 3); /* 41*/ super.argument[0] = super.argument[0].simplify(); /* 42*/ super.argument[1] = super.argument[1].simplify(); /* 43*/ if(i == 3) /* 44*/ super.argument[2] = super.argument[2].simplify(); /* 46*/ return this; } public String evaluateAsString(Context context) throws XPathException { /* 55*/ int i = getNumberOfArguments(); /* 57*/ Controller controller = boundController; /* 58*/ if(controller == null) /* 59*/ controller = context.getController(); /* 61*/ DecimalFormatManager decimalformatmanager = controller.getDecimalFormatManager(); /* 64*/ double d = super.argument[0].evaluateAsNumber(context); /* 65*/ String s = super.argument[1].evaluateAsString(context); DecimalFormatSymbols decimalformatsymbols; /* 67*/ if(i == 2) { /* 68*/ decimalformatsymbols = decimalformatmanager.getDefaultDecimalFormat(); } else { /* 70*/ String s1 = super.argument[2].evaluateAsString(context); /* 71*/ int j = getStaticContext().getFingerprint(s1, false); /* 72*/ decimalformatsymbols = decimalformatmanager.getNamedDecimalFormat(j); /* 73*/ if(decimalformatsymbols == null) /* 74*/ throw new XPathException("format-number function: decimal-format " + s1 + " not registered"); } /* 78*/ return formatNumber(d, s, decimalformatsymbols); } public Value evaluate(Context context) throws XPathException { /* 86*/ return new StringValue(evaluateAsString(context)); } public synchronized String formatNumber(double d, String s, DecimalFormatSymbols decimalformatsymbols) throws XPathException { /* 102*/ try { /* 102*/ DecimalFormat decimalformat = decimalFormat; /* 103*/ if(decimalformatsymbols != previousDFS || !s.equals(previousFormat)) { /* 104*/ decimalformat.setDecimalFormatSymbols(decimalformatsymbols); /* 105*/ decimalformat.applyLocalizedPattern(s); /* 106*/ previousDFS = decimalformatsymbols; /* 107*/ previousFormat = s; } /* 109*/ return decimalformat.format(d); } /* 111*/ catch(Exception exception) { /* 111*/ throw new XPathException("Unable to interpret format pattern " + s + " (" + exception + ")"); } } public int getDependencies() { /* 120*/ int i = 0; /* 121*/ if(boundController == null) /* 122*/ i = 64; /* 124*/ i |= super.argument[0].getDependencies(); /* 125*/ i |= super.argument[1].getDependencies(); /* 126*/ if(getNumberOfArguments() == 3) /* 127*/ i |= super.argument[2].getDependencies(); /* 129*/ return i; } public Expression reduce(int i, Context context) throws XPathException { /* 137*/ FormatNumber formatnumber = new FormatNumber(); /* 138*/ formatnumber.addArgument(super.argument[0].reduce(i, context)); /* 139*/ formatnumber.addArgument(super.argument[1].reduce(i, context)); /* 140*/ if(getNumberOfArguments() == 3) /* 141*/ formatnumber.addArgument(super.argument[2].reduce(i, context)); /* 143*/ if((i & 0x40) != 0) /* 144*/ formatnumber.boundController = context.getController(); /* 146*/ formatnumber.setStaticContext(getStaticContext()); /* 147*/ return formatnumber; } }