// 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: Extensions.java package com.icl.saxon.functions; import com.icl.saxon.Context; import com.icl.saxon.Controller; import com.icl.saxon.expr.*; import com.icl.saxon.exslt.Math; import com.icl.saxon.om.*; import com.icl.saxon.output.Emitter; import com.icl.saxon.pattern.AnyNodeTest; import com.icl.saxon.tinytree.TinyBuilder; import com.icl.saxon.tree.AttributeCollection; import java.io.PrintStream; import java.util.StringTokenizer; import java.util.Vector; import javax.xml.transform.TransformerException; // Referenced classes of package com.icl.saxon.functions: // Not, Round public class Extensions { private static final String NODE_TYPE_NAMES[] = { /* 618*/ "Node", "Element", "Attribute", "Text", "?", "?", "?", "Processing Instruction", "Comment", "Root", /* 618*/ "?", "?", "?", "Namespace" }; public Extensions() { } public static void pauseTracing(Context context) { /* 30*/ context.getController().pauseTracing(true); } public static void resumeTracing(Context context) { /* 33*/ context.getController().pauseTracing(false); } public static NodeSetValue nodeSet(Context context, Value value) throws XPathException { /* 42*/ if(value instanceof SingletonNodeSet) /* 43*/ ((SingletonNodeSet)value).allowGeneralUse(); /* 45*/ if(value instanceof NodeSetValue) { /* 46*/ return (NodeSetValue)value; } else { /* 48*/ TextFragmentValue textfragmentvalue = new TextFragmentValue(value.asString(), "", context.getController()); /* 50*/ textfragmentvalue.allowGeneralUse(); /* 51*/ return textfragmentvalue; } } public static NodeSetValue nodeset(Context context, Value value) throws XPathException { /* 60*/ return nodeSet(context, value); } public static String systemId(Context context) throws XPathException { /* 68*/ return context.getContextNodeInfo().getSystemId(); } public static double lineNumber(Context context) throws XPathException { /* 77*/ return (double)context.getContextNodeInfo().getLineNumber(); } public static String baseUri(Context context) throws XPathException { /* 85*/ return context.getContextNodeInfo().getBaseURI(); } public static NodeEnumeration intersection(Context context, NodeEnumeration nodeenumeration, NodeEnumeration nodeenumeration1) throws XPathException { /* 96*/ return new IntersectionEnumeration(nodeenumeration, nodeenumeration1, context.getController()); } public static NodeEnumeration difference(Context context, NodeEnumeration nodeenumeration, NodeEnumeration nodeenumeration1) throws XPathException { /* 107*/ return new DifferenceEnumeration(nodeenumeration, nodeenumeration1, context.getController()); } public static boolean hasSameNodes(Context context, NodeEnumeration nodeenumeration, NodeEnumeration nodeenumeration1) throws XPathException { /* 118*/ NodeEnumeration nodeenumeration2 = nodeenumeration; /* 119*/ NodeEnumeration nodeenumeration3 = nodeenumeration1; /* 120*/ Controller controller = context.getController(); /* 121*/ if(!nodeenumeration2.isSorted()) /* 122*/ nodeenumeration2 = (new NodeSetExtent(nodeenumeration2, controller)).sort().enumerate(); /* 124*/ if(!nodeenumeration3.isSorted()) /* 125*/ nodeenumeration3 = (new NodeSetExtent(nodeenumeration3, controller)).sort().enumerate(); /* 128*/ while(nodeenumeration2.hasMoreElements()) { /* 128*/ if(!nodeenumeration3.hasMoreElements()) /* 129*/ return false; /* 131*/ if(!nodeenumeration2.nextElement().isSameNodeInfo(nodeenumeration3.nextElement())) /* 132*/ return false; } /* 135*/ return !nodeenumeration3.hasMoreElements(); } public static Value IF(Value value, Value value1, Value value2) throws XPathException { /* 152*/ return value.asBoolean() ? value1 : value2; } public static Value evaluate(Context context, String s) throws XPathException { /* 160*/ StaticContext staticcontext = context.getStaticContext().makeRuntimeContext(context.getController().getNamePool()); /* 162*/ Expression expression1 = Expression.make(s, staticcontext); /* 163*/ return expression1.evaluate(context); } public static Value eval(Context context, Expression expression1) throws XPathException { /* 171*/ return expression1.evaluate(context); } public static Value expression(Context context, String s) throws XPathException { /* 180*/ StaticContext staticcontext = context.getStaticContext().makeRuntimeContext(context.getController().getNamePool()); /* 182*/ Expression expression1 = Expression.make(s, staticcontext); /* 184*/ Expression expression2 = expression1.reduce(1, context).simplify(); /* 185*/ return new ObjectValue(expression2); } public static double sum(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 195*/ double d = 0.0D; /* 196*/ Context context1 = context.newContext(); Object obj; /* 198*/ if(nodeenumeration instanceof LastPositionFinder) /* 199*/ obj = nodeenumeration; /* 201*/ else /* 201*/ obj = new LookaheadEnumerator(nodeenumeration); /* 203*/ context1.setLastPositionFinder((LastPositionFinder)obj); /* 204*/ int i = 1; /* 206*/ while(((NodeEnumeration) (obj)).hasMoreElements()) { /* 206*/ context1.setContextNode(((NodeEnumeration) (obj)).nextElement()); /* 207*/ context1.setPosition(i++); /* 208*/ double d1 = expression1.evaluateAsNumber(context1); /* 209*/ d += d1; } /* 211*/ return d; } public static double max(NodeEnumeration nodeenumeration) throws XPathException { /* 219*/ return Math.max(nodeenumeration); } public static double max(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 230*/ double d = (-1.0D / 0.0D); /* 231*/ Context context1 = context.newContext(); Object obj; /* 233*/ if(nodeenumeration instanceof LastPositionFinder) /* 234*/ obj = nodeenumeration; /* 236*/ else /* 236*/ obj = new LookaheadEnumerator(nodeenumeration); /* 238*/ context1.setLastPositionFinder((LastPositionFinder)obj); /* 239*/ int i = 1; /* 241*/ while(((NodeEnumeration) (obj)).hasMoreElements()) { /* 241*/ context1.setContextNode(((NodeEnumeration) (obj)).nextElement()); /* 242*/ context1.setPosition(i++); /* 243*/ double d1 = expression1.evaluateAsNumber(context1); /* 244*/ if(d1 > d) /* 244*/ d = d1; } /* 246*/ return d; } public static double min(NodeEnumeration nodeenumeration) throws XPathException { /* 254*/ return Math.min(nodeenumeration); } public static double min(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 264*/ double d = (1.0D / 0.0D); /* 265*/ Context context1 = context.newContext(); Object obj; /* 267*/ if(nodeenumeration instanceof LastPositionFinder) /* 268*/ obj = nodeenumeration; /* 270*/ else /* 270*/ obj = new LookaheadEnumerator(nodeenumeration); /* 272*/ context1.setLastPositionFinder((LastPositionFinder)obj); /* 273*/ int i = 1; /* 275*/ while(((NodeEnumeration) (obj)).hasMoreElements()) { /* 275*/ context1.setContextNode(((NodeEnumeration) (obj)).nextElement()); /* 276*/ context1.setPosition(i++); /* 277*/ double d1 = expression1.evaluateAsNumber(context1); /* 278*/ if(d1 < d) /* 278*/ d = d1; } /* 280*/ return d; } public static NodeSetValue highest(Context context, NodeEnumeration nodeenumeration) throws XPathException { /* 288*/ return Math.highest(context, nodeenumeration); } public static NodeEnumeration highest(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 299*/ double d = (-1.0D / 0.0D); /* 300*/ Context context1 = context.newContext(); /* 301*/ NodeInfo nodeinfo = null; Object obj; /* 303*/ if(nodeenumeration instanceof LastPositionFinder) /* 304*/ obj = nodeenumeration; /* 306*/ else /* 306*/ obj = new LookaheadEnumerator(nodeenumeration); /* 308*/ context1.setLastPositionFinder((LastPositionFinder)obj); /* 309*/ int i = 1; /* 311*/ while(((NodeEnumeration) (obj)).hasMoreElements()) { /* 311*/ context1.setContextNode(((NodeEnumeration) (obj)).nextElement()); /* 312*/ context1.setPosition(i++); /* 313*/ double d1 = expression1.evaluateAsNumber(context1); /* 314*/ if(d1 > d) { /* 315*/ d = d1; /* 316*/ nodeinfo = context1.getContextNodeInfo(); } } /* 319*/ return new SingletonEnumeration(nodeinfo); } public static NodeSetValue lowest(Context context, NodeEnumeration nodeenumeration) throws XPathException { /* 327*/ return Math.lowest(context, nodeenumeration); } public static NodeEnumeration lowest(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 337*/ double d = (1.0D / 0.0D); /* 338*/ Context context1 = context.newContext(); /* 339*/ NodeInfo nodeinfo = null; Object obj; /* 341*/ if(nodeenumeration instanceof LastPositionFinder) /* 342*/ obj = nodeenumeration; /* 344*/ else /* 344*/ obj = new LookaheadEnumerator(nodeenumeration); /* 346*/ context1.setLastPositionFinder((LastPositionFinder)obj); /* 347*/ int i = 1; /* 349*/ while(((NodeEnumeration) (obj)).hasMoreElements()) { /* 349*/ context1.setContextNode(((NodeEnumeration) (obj)).nextElement()); /* 350*/ context1.setPosition(i++); /* 351*/ double d1 = expression1.evaluateAsNumber(context1); /* 352*/ if(d1 < d) { /* 353*/ d = d1; /* 354*/ nodeinfo = context1.getContextNodeInfo(); } } /* 357*/ return new SingletonEnumeration(nodeinfo); } public static NodeEnumeration distinct(Context context, NodeEnumeration nodeenumeration) throws XPathException { /* 365*/ return new DistinctEnumeration(nodeenumeration, context.getController()); } public static NodeEnumeration distinct(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 376*/ return new DistinctEnumeration(context, nodeenumeration, expression1); } public static NodeEnumeration closure(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 386*/ Object obj = EmptyEnumeration.getInstance(); /* 387*/ Controller controller = context.getController(); /* 389*/ while(nodeenumeration.hasMoreElements()) { /* 389*/ NodeInfo nodeinfo = nodeenumeration.nextElement(); /* 390*/ Context context1 = context.newContext(); /* 391*/ context1.setContextNode(nodeinfo); /* 392*/ context1.setCurrentNode(nodeinfo); /* 393*/ context1.setPosition(1); /* 394*/ context1.setLast(1); /* 395*/ UnionEnumeration unionenumeration = new UnionEnumeration(new SingletonEnumeration(nodeinfo), closure(context1, expression1.enumerate(context1, false), expression1), controller); /* 400*/ obj = new UnionEnumeration(((NodeEnumeration) (obj)), unionenumeration, controller); } /* 402*/ return ((NodeEnumeration) (obj)); } public static NodeEnumeration leading(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 412*/ return new FilterEnumerator(nodeenumeration, expression1, context.newContext(), true); } public static NodeSetValue before(Context context, NodeSetValue nodesetvalue, NodeSetValue nodesetvalue1) throws XPathException { /* 425*/ NodeInfo nodeinfo = null; /* 426*/ for(NodeEnumeration nodeenumeration = nodesetvalue1.enumerate(); nodeenumeration.hasMoreElements();) /* 428*/ nodeinfo = nodeenumeration.nextElement(); /* 430*/ if(nodeinfo == null) /* 431*/ return new EmptyNodeSet(); /* 433*/ Controller controller = context.getController(); /* 435*/ Vector vector = new Vector(); NodeInfo nodeinfo1; /* 436*/ for(NodeEnumeration nodeenumeration1 = nodesetvalue.enumerate(); nodeenumeration1.hasMoreElements(); vector.addElement(nodeinfo1)) { /* 438*/ nodeinfo1 = nodeenumeration1.nextElement(); /* 439*/ if(controller.compare(nodeinfo1, nodeinfo) >= 0) /* 440*/ break; } /* 445*/ return new NodeSetExtent(vector, controller); } public static NodeSetValue after(Context context, NodeSetValue nodesetvalue, NodeSetValue nodesetvalue1) throws XPathException { /* 458*/ NodeInfo nodeinfo = nodesetvalue1.getFirst(); /* 459*/ if(nodeinfo == null) /* 460*/ return new EmptyNodeSet(); /* 462*/ Controller controller = context.getController(); /* 464*/ Vector vector = new Vector(); /* 465*/ NodeEnumeration nodeenumeration = nodesetvalue.enumerate(); /* 466*/ boolean flag = false; /* 468*/ while(nodeenumeration.hasMoreElements()) { /* 468*/ NodeInfo nodeinfo1 = nodeenumeration.nextElement(); /* 469*/ if(flag) /* 470*/ vector.addElement(nodeinfo1); /* 471*/ else /* 471*/ if(controller.compare(nodeinfo1, nodeinfo) > 0) { /* 472*/ flag = true; /* 473*/ vector.addElement(nodeinfo1); } } /* 476*/ return new NodeSetExtent(vector, controller); } public static boolean exists(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 487*/ return (new FilterEnumerator(nodeenumeration, expression1, context.newContext(), false)).hasMoreElements(); } public static boolean forAll(Context context, NodeEnumeration nodeenumeration, Expression expression1) throws XPathException { /* 498*/ Not not = new Not(); /* 499*/ not.addArgument(expression1); /* 500*/ return !(new FilterEnumerator(nodeenumeration, not, context.newContext(), false)).hasMoreElements(); } public static NodeEnumeration range(Context context, double d, double d1) throws XPathException { /* 510*/ int i = (int)Round.round(d); /* 511*/ int j = (int)Round.round(d1); /* 514*/ try { /* 514*/ TinyBuilder tinybuilder = new TinyBuilder(); /* 515*/ NamePool namepool = context.getController().getNamePool(); /* 516*/ int ai[] = new int[1]; /* 517*/ ai[0] = namepool.getNamespaceCode("saxon", "http://icl.com/saxon"); /* 518*/ int k = namepool.allocate("saxon", "http://icl.com/saxon", "range"); /* 519*/ tinybuilder.setNamePool(namepool); /* 520*/ tinybuilder.startDocument(); /* 521*/ AttributeCollection attributecollection = new AttributeCollection(namepool); /* 523*/ for(int l = i; l <= j; l++) { /* 524*/ tinybuilder.startElement(k, attributecollection, ai, 1); /* 525*/ String s = l + ""; /* 526*/ tinybuilder.characters(s.toCharArray(), 0, s.length()); /* 527*/ tinybuilder.endElement(k); } /* 530*/ tinybuilder.endDocument(); /* 531*/ com.icl.saxon.om.DocumentInfo documentinfo = tinybuilder.getCurrentDocument(); /* 532*/ return documentinfo.getEnumeration((byte)3, AnyNodeTest.getInstance()); } /* 535*/ catch(TransformerException transformerexception) { /* 535*/ throw new XPathException(transformerexception); } } public static NodeEnumeration tokenize(Context context, String s) throws XPathException { /* 548*/ try { /* 548*/ Builder builder = context.getController().makeBuilder(); /* 549*/ NamePool namepool = context.getController().getNamePool(); /* 550*/ builder.startDocument(); /* 551*/ int ai[] = new int[1]; /* 552*/ ai[0] = namepool.getNamespaceCode("saxon", "http://icl.com/saxon"); /* 553*/ int i = namepool.allocate("saxon", "http://icl.com/saxon", "token"); /* 554*/ AttributeCollection attributecollection = new AttributeCollection(namepool); /* 556*/ for(StringTokenizer stringtokenizer = new StringTokenizer(s); stringtokenizer.hasMoreTokens(); builder.endElement(i)) { /* 558*/ builder.startElement(i, attributecollection, ai, 1); /* 559*/ String s1 = stringtokenizer.nextToken(); /* 560*/ builder.characters(s1.toCharArray(), 0, s1.length()); } /* 564*/ builder.endDocument(); /* 565*/ com.icl.saxon.om.DocumentInfo documentinfo = builder.getCurrentDocument(); /* 566*/ return documentinfo.getEnumeration((byte)3, AnyNodeTest.getInstance()); } /* 568*/ catch(TransformerException transformerexception) { /* 568*/ throw new XPathException(transformerexception); } } public static NodeEnumeration tokenize(Context context, String s, String s1) throws XPathException { /* 580*/ try { /* 580*/ Builder builder = context.getController().makeBuilder(); /* 581*/ NamePool namepool = context.getController().getNamePool(); /* 582*/ builder.setNamePool(namepool); /* 583*/ builder.startDocument(); /* 584*/ int ai[] = new int[1]; /* 585*/ ai[0] = namepool.getNamespaceCode("saxon", "http://icl.com/saxon"); /* 586*/ int i = namepool.allocate("saxon", "http://icl.com/saxon", "token"); /* 587*/ AttributeCollection attributecollection = new AttributeCollection(namepool); /* 589*/ for(StringTokenizer stringtokenizer = new StringTokenizer(s, s1); stringtokenizer.hasMoreTokens(); builder.endElement(i)) { /* 591*/ builder.startElement(i, attributecollection, ai, 1); /* 592*/ String s2 = stringtokenizer.nextToken(); /* 593*/ builder.characters(s2.toCharArray(), 0, s2.length()); } /* 597*/ builder.endDocument(); /* 598*/ com.icl.saxon.om.DocumentInfo documentinfo = builder.getCurrentDocument(); /* 599*/ return documentinfo.getEnumeration((byte)3, AnyNodeTest.getInstance()); } /* 601*/ catch(TransformerException transformerexception) { /* 601*/ throw new XPathException(transformerexception); } } public static String path(Context context) throws XPathException { /* 611*/ return Navigator.getPath(context.getContextNodeInfo()); } public static String showNodeset(Context context, NodeSetValue nodesetvalue) throws XPathException { /* 627*/ System.err.println("Node-set contents at line " + context.getStaticContext().getLineNumber() + " ["); /* 628*/ NodeEnumeration nodeenumeration = nodesetvalue.enumerate(context, true); /* 629*/ int i = 0; NodeInfo nodeinfo; String s; /* 631*/ for(; nodeenumeration.hasMoreElements(); System.err.println(" " + s + " " + nodeinfo.getDisplayName() + " " + Navigator.getPath(nodeinfo) + " " + nodeinfo.generateId())) { /* 631*/ i++; /* 632*/ nodeinfo = nodeenumeration.nextElement(); /* 633*/ s = NODE_TYPE_NAMES[nodeinfo.getNodeType()]; } /* 639*/ System.err.println("] (Total number of nodes: " + i + ")"); /* 640*/ return ""; } public static boolean isNull(Object obj) throws XPathException { /* 649*/ return obj == null; } public static void setUserData(Context context, String s, Value value) throws XPathException { /* 659*/ context.getController().setUserData(context.getContextNodeInfo(), s, value); } public static Value getUserData(Context context, String s) throws XPathException { /* 668*/ Object obj = context.getController().getUserData(context.getContextNodeInfo(), s); /* 671*/ if(obj == null) /* 671*/ return new StringValue(""); /* 672*/ if(obj instanceof Value) /* 672*/ return (Value)obj; /* 673*/ else /* 673*/ return new ObjectValue(obj); } public static Context getContext(Context context) { /* 681*/ return context; } public static String getPseudoAttribute(Context context, String s) { /* 691*/ NodeInfo nodeinfo = context.getContextNodeInfo(); /* 692*/ if(nodeinfo.getNodeType() != 7) /* 692*/ return ""; /* 693*/ String s1 = ProcInstParser.getPseudoAttribute(nodeinfo.getStringValue(), s); /* 694*/ if(s1 == null) /* 694*/ return ""; /* 695*/ else /* 695*/ return s1; } }