⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xquery.java

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    Consumer save = ctx.consumer;    try      {	ctx.consumer = out;	applyWithFocus$X(proc, values, ctx);      }    finally      {	ctx.consumer = save;      }  }  /** Call a procedure with each item in a sequence as the context item.   * @param proc a 3-operand <code>Procedure</code> as returned by   *   <code>evalToFocusProc</code>   * @param values a sequence.  The <code>proc</code> is called once for each   *   item, with the item as the first argument, a 1-based index as the   *   second argument, and the sequence size as the third argument.   * @return the result of applying <code>proc</code>   */  public Object applyWithFocus (Procedure proc, Object values)    throws Throwable  {    CallContext ctx = CallContext.getInstance();    int oldIndex = ctx.startFromContext();    try      {	applyWithFocus$X(proc, values, ctx);	return ctx.getFromContext(oldIndex);      }    catch (Throwable ex)      { 	ctx.cleanupFromContext(oldIndex);	throw ex;      }  }  /** Call a procedure with each item in a sequence as the context item.   * @param proc a 3-operand <code>Procedure</code> as returned by   *   <code>evalToFocusProc</code>   * @param values a sequence.  The <code>proc</code> is called once for each   *   item, with the item as the first argument, a 1-based index as the   *   second argument, and the sequence size as the third argument.   * @param ctx the <code>CallContext</code>.  The <code>$X</code> in the   *   method name tells Kawa that this argument is implicit when invoked   *   from XQuery.   */  public void applyWithFocus$X (Procedure proc, Object values, CallContext ctx)    throws Throwable  {    if (values instanceof Values)      {	Values v = (Values) values;	int count = v.size();	if (count == 0)	  return;	int ipos = 0;	IntNum size = IntNum.make(count);	for (int i = 1;  ;  i++)	  {	    proc.check3(v.getPosNext(ipos), IntNum.make(i), size, ctx);	    ctx.runUntilDone();	    if (i == count)	      break;            ipos = v.nextPos(ipos);	  }      }    else      {	IntNum one = IntNum.one();	proc.check3(values, one, one, ctx);	ctx.runUntilDone();      }  }  /** Parse an XQuery expression that is the body of a procedure.   * Helper method used by <code>evalWithFocus</code> methods.   * @param expr an XQuery expression (query) to evaluate   * @return a 3-operand Procedure whose arguments become   * the context item, position, and size.   */  public Procedure evalToFocusProc (String expr)    throws Throwable  {    SourceMessages messages = new SourceMessages();    Procedure proc = evalToFocusProc(new CharArrayInPort(expr), messages);    if (messages.seenErrors())      throw new RuntimeException("invalid syntax in eval form:\n"				 + messages.toString(20));    return proc;  }  /** Parse an XQuery expression from a <code>Reader</code> that is the body of a procedure.   * Helper method used by <code>evalWithFocus</code> methods.   * @param in where we read the expression from   * @param messages where to write syntax errors   * @return a 3-operand Procedure whose arguments become   * the context item, position, and size.   */  public Procedure evalToFocusProc (Reader in, SourceMessages messages)    throws Throwable  {    InPort port = in instanceof InPort ? (InPort) in : new InPort(in);    Compilation comp = parse(port, messages, PARSE_WITH_FOCUS|PARSE_IMMEDIATE);    CallContext ctx = CallContext.getInstance();    int oldIndex = ctx.startFromContext();    try      {	ModuleExp.evalModule(Environment.getCurrent(), ctx, comp, null, null);	return (Procedure) ctx.getFromContext(oldIndex);      }    catch (Throwable ex)      { 	ctx.cleanupFromContext(oldIndex);	throw ex;      }  }  /** Evaluate an expression with each item in a sequence as the context item.   * @param in where we read the expression from   * @param messages where to write syntax errors   * @param values becomes the context sequence while   *   evaluating <code>expr</code>.   * @param out where to send the result of the expression   */  public void evalWithFocus (Reader in, SourceMessages messages,			     Object values, Consumer out)    throws Throwable  {    applyWithFocus(evalToFocusProc(in, messages), values, out);  }  /** Evaluate an expression with each item in a sequence as the context item.   * @param expr an XQuery expression (query) to evaluate   * @param values becomes the context sequence while   *   evaluating the expression   * @return the result of evaluating the expression   */  public Object evalWithFocus (String expr, Object values)    throws Throwable  {    return applyWithFocus(evalToFocusProc(expr), values);  }  /** Evaluate an expression with a given focus (context).   * @param expr an XQuery expression (query) to evaluate   * @param item becomes the context item while evaluating <code>expr</code>.   * @param position becomes the context position    * @param size becomes the context size   * @return the result of evaluating <code>expr</code>   */  public Object evalWithFocus (String expr,			       Object item, int position, int size)    throws Throwable  {    return applyWithFocus(evalToFocusProc(expr), item, position, size);  }  /** Evaluate an expression with a given focus (context).   * @param in where we read the expression from   * @param messages where to write syntax errors   * @param item becomes the context item while evaluating the expression   * @param position becomes the context position    * @param size becomes the context size   * @param out where to send the result of the expression   */  public void evalWithFocus (Reader in, SourceMessages messages,			     Object item, int position, int size,			     Consumer out)    throws Throwable  {    applyWithFocus(evalToFocusProc(in, messages), item, position, size, out);  }  /** Evaluate an expression with a given focus (context).   * Similar to <code>evalWithFocus(String, Object, Consumer)</code>.   * The "$X" in the method name tells the Kawa compiler that the CallContext   * argument is implicit, so it can be invoked from XQuery code thus:   * <code>XQuery:eval-with-focus($xquery, "expr", $sequence)</code>   */  public void eval_with_focus$X (String expr,				 Object values,				 CallContext ctx)    throws Throwable  {    applyWithFocus$X(evalToFocusProc(expr), values, ctx);  }  /** Evaluate an expression with a given focus (context).   * Similar to <code>evalWithFocus(String, Object, int, int, Consumer)</code>.   * The "$X" in the method name tells the Kawa compiler that the CallContext   * argument is implicit, so it can be invoked from XQuery code thus:   * <code>XQuery:eval-with-focus($xquery, "expr", $item, $pos, $size)</code>   */  public void eval_with_focus$X (String expr,			       Object item, int position, int size,			       CallContext ctx)    throws Throwable  {    Procedure proc = evalToFocusProc(expr);    proc.check3(item, IntNum.make(position), IntNum.make(size), ctx);  }  public static final Environment xqEnvironment    = Environment.make(XQUERY_FUNCTION_NAMESPACE);  // This field need to be public so that the findLiteral method in  // gnu.expr.LitTable can find it.  public static final XQuery instance = new XQuery();  static { instance.initXQuery(); }  public XQuery()  {    environ = xqEnvironment;    defaultNamespace = xqueryFunctionNamespace;  }  private void initXQuery ()  {    ModuleBody.setMainPrintValues(true);    defProcStFld("unescaped-data", "gnu.kawa.xml.MakeUnescapedData", "unescapedData");    defProcStFld("item-at", "gnu.xquery.util.ItemAt", "itemAt");    defProcStFld("count", "gnu.kawa.functions.CountValues", "countValues");    define_method("sum", "gnu.xquery.util.Reduce", "sum"); // Overloaded    defProcStFld("avg", "gnu.xquery.util.Average", "avg");    defProcStFld("sublist", "gnu.xquery.util.SubList", "subList"); // deprecated    defProcStFld("subsequence", "gnu.xquery.util.SubList", "subList");    define_method("empty", "gnu.xquery.util.SequenceUtils",		  "isEmptySequence");    define_method("exists", "gnu.xquery.util.SequenceUtils",		  "exists");    define_method("insert-before", "gnu.xquery.util.SequenceUtils",		  "insertBefore$X");    define_method("remove", "gnu.xquery.util.SequenceUtils",		  "remove$X");    define_method("reverse", "gnu.xquery.util.SequenceUtils",		  "reverse$X");    defProcStFld("false", "gnu.xquery.lang.XQuery", "falseFunction");    defProcStFld("true", "gnu.xquery.lang.XQuery", "trueFunction");    defProcStFld("boolean", "gnu.xquery.util.BooleanValue", "booleanValue");    define_method("trace", "gnu.xquery.util.Debug", "trace");    define_method("error", "gnu.xquery.util.XQException",                  "error"); // overloaded    defProcStFld("write-to", "gnu.kawa.xml.WriteTo", "writeTo");    defProcStFld("write-to-if-changed", "gnu.kawa.xml.WriteTo",                 "writeToIfChanged");    defProcStFld("iterator-items",		 "gnu.kawa.xml.IteratorItems", "iteratorItems");    defProcStFld("list-items", "gnu.kawa.xml.ListItems", "listItems");    define_method("node-name", "gnu.xquery.util.NodeUtils", "nodeName");    define_method("nilled", "gnu.xquery.util.NodeUtils", "nilled");    define_method("data", "gnu.xquery.util.NodeUtils", "data$X");    define_method("lower-case", "gnu.xquery.util.StringUtils", "lowerCase");    define_method("upper-case", "gnu.xquery.util.StringUtils", "upperCase");    define_method("substring", "gnu.xquery.util.StringUtils", "substring");    define_method("string-length",		  "gnu.xquery.util.StringUtils", "stringLength");    define_method("substring-before",		  "gnu.xquery.util.StringUtils", "substringBefore");    define_method("substring-after",		  "gnu.xquery.util.StringUtils", "substringAfter");    define_method("translate", "gnu.xquery.util.StringUtils", "translate");    define_method("encode-for-uri", "gnu.xquery.util.StringUtils",                  "encodeForUri");    define_method("iri-to-uri", "gnu.xquery.util.StringUtils", "iriToUri");    define_method("escape-html-uri", "gnu.xquery.util.StringUtils",                  "escapeHtmlUri");    // Non-standard (in F&O example appendix).  Put in qexo namespace?    // define_method("string-pad", "gnu.xquery.util.StringUtils", "stringPad");    define_method("contains", "gnu.xquery.util.StringUtils", "contains");    define_method("starts-with", "gnu.xquery.util.StringUtils", "startsWith");    define_method("ends-with","gnu.xquery.util.StringUtils", "endsWith");    define_method("codepoint-equal", "gnu.xquery.util.StringUtils",                  "codepointEqual");    define_method("normalize-unicode", "gnu.xquery.util.StringUtils",                  "normalizeUnicode");    define_method("string-join", "gnu.xquery.util.StringUtils", "stringJoin");    define_method("concat", "gnu.xquery.util.StringUtils", "concat$V");    define_method("matches", "gnu.xquery.util.StringUtils", "matches");    define_method("replace", "gnu.xquery.util.StringUtils", "replace");    define_method("tokenize", "gnu.xquery.util.StringUtils", "tokenize$X");    define_method("string-to-codepoints", "gnu.xquery.util.StringUtils",		  "stringToCodepoints$X");    define_method("codepoints-to-string", "gnu.xquery.util.StringUtils",		  "codepointsToString");    define_method("abs", "gnu.xquery.util.NumberValue", "abs");    define_method("floor", "gnu.xquery.util.NumberValue", "floor");    define_method("ceiling", "gnu.xquery.util.NumberValue", "ceiling");    define_method("round", "gnu.xquery.util.NumberValue", "round");    define_method("round-half-to-even", "gnu.xquery.util.NumberValue",                  "roundHalfToEven");    define_method("QName", "gnu.xquery.util.QNameUtils", "makeQName");    define_method("resolve-QName", "gnu.xquery.util.QNameUtils",                  "resolveQNameUsingElement");    define_method("prefix-from-QName", "gnu.xquery.util.QNameUtils",		  "prefixFromQName");    define_method("local-name-from-QName", "gnu.xquery.util.QNameUtils",		  "localNameFromQName");    define_method("namespace-uri-from-QName", "gnu.xquery.util.QNameUtils",		  "namespaceURIFromQName");    define_method("namespace-uri-for-prefix", "gnu.xquery.util.QNameUtils",		  "namespaceURIForPrefix");    define_method("in-scope-prefixes", "gnu.xquery.util.NodeUtils",                  "inScopePrefixes$X");    define_method("document-uri", "gnu.xquery.util.NodeUtils", "documentUri");    define_method("years-from-duration", "gnu.xquery.util.TimeUtils",                  "yearsFromDuration");    define_method("months-from-duration", "gnu.xquery.util.TimeUtils",                  "monthsFromDuration");    define_method("days-from-duration", "gnu.xquery.util.TimeUtils",                  "daysFromDuration");    define_method("hours-from-duration", "gnu.xquery.util.TimeUtils",                  "hoursFromDuration");    define_method("minutes-from-duration", "gnu.xquery.util.TimeUtils",                  "minutesFromDuration");    define_method("seconds-from-duration", "gnu.xquery.util.TimeUtils",                  "secondsFromDuration");    define_method("year-from-dateTime", "gnu.xquery.util.TimeUtils",                  "yearFromDateTime");    define_method("month-from-dateTime", "gnu.xquery.util.TimeUtils",                  "monthFromDateTime");    define_method("day-from-dateTime", "gnu.xquery.util.TimeUtils",                  "dayFromDateTime");    define_method("hours-from-dateTime", "gnu.xquery.util.TimeUtils",                  "hoursFromDateTime");    define_method("minutes-from-dateTime", "gnu.xquery.util.TimeUtils",                  "minutesFromDateTime");    define_method("seconds-from-dateTime", "gnu.xquery.util.TimeUtils",                  "secondsFromDateTime");    define_method("timezone-from-dateTime", "gnu.xquery.util.TimeUtils",                  "timezoneFromDateTime");    define_method("year-from-date", "gnu.xquery.util.TimeUtils",                  "yearFromDate");    define_method("month-from-date", "gnu.xquery.util.TimeUtils",                  "monthFromDate");    define_method("day-from-date", "gnu.xquery.util.TimeUtils",                  "dayFromDate");    define_method("timezone-from-date", "gnu.xquery.util.TimeUtils",                  "timezoneFromDate");    define_method("hours-from-time", "gnu.xquery.util.TimeUtils",                  "hoursFromTime");    define_method("minutes-from-time", "gnu.xquery.util.TimeUtils",                  "minutesFromTime");    define_method("seconds-from-time", "gnu.xquery.util.TimeUtils",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -