javagenerator.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 2,601 行 · 第 1/5 页

JAVA
2,601
字号
      String ptr = printSelectBegin(selectPattern, true, null);      pushLoop();      println("Node " + getElement() + " = node;");      println("node = " + ptr + ";");    }    else {      print("NodeIterator " + iter + " = " + sel);      println(".select(node, " + getEnv() + ");");      println("ExprEnvironment " + oldEnv + " = env.setExprEnv(" + iter + ");");      println("while (" + iter + ".hasNext()) {");      pushDepth();      _selectDepth++;            pushLoop();            println("Node " + getElement() + " = node;");      println("node = " + iter + ".nextNode();");          }    println("env.setCurrentNode(node);");        // println(pos + "++;");    // String oldPos = currentPos;    // currentPos = pos;    AbstractPattern oldNodeListContext = _nodeListContext;    _nodeListContext = parseMatch(select);    generateChildren(element);    _nodeListContext = oldNodeListContext;        // currentPos = oldPos;        println("node = " + getElement() + ";");    println("env.setCurrentNode(" + oldCur + ");");        for (; _selectDepth > oldSelectDepth; _selectDepth--) {      popDepth();      println("}");    }        println("env.setExprEnv(" + oldEnv + ");");        if (! hasExprEnv) {      println("env.setSelect(" + oldCxt + ", " + oldSel + ");");    //println("env.setCurrentNode(node);");    }        popDepth();    println("}");    popLoop();  }  /**   * Prints code for xsl:for-each when the for-each has any xsl:sort.   */  protected void printForEach(Element element, String select, Sort []sort)    throws Exception  {    println("{");    pushDepth();    println("env.setCurrentNode(node);");    String pos = "_xsl_pos" + _unique++;    String list = "_xsl_list" + _unique++;        println("ArrayList " + list +	    " = xslSort(node, env" +	    ", _select_patterns[" + addSelect(select) + "]" + 	    ", _xsl_sorts[" + _sorts.size() + "]);");    println("env.setContextSize(" + list + ".size());");    println("for (int " + pos + " = 1; " + pos +	    " <= " + list + ".size(); " + pos + "++) {");    pushLoop();    pushDepth();    println("Node " + getElement() + " = node;");    println("node = (Node) " + list + ".get(" + pos + " - 1);");    String oldPos = _currentPos;    _currentPos = pos;        println("env.setPosition(" + _currentPos + ");");        _sorts.add(sort);        AbstractPattern oldNodeListContext = _nodeListContext;    _nodeListContext = parseMatch(select);    generateChildren(element);    _currentPos = oldPos;    _nodeListContext = oldNodeListContext;        println("node = " + getElement() + ";");        popDepth();    println("}");    popLoop();    popDepth();    println("}");  }  public String getCurrentPosition()  {    return _currentPos;  }  public void setCurrentPosition(String pos)  {    _currentPos = pos;  }  public AbstractPattern getNodeListContext()  {    return _nodeListContext;  }  public void setNodeListContext(AbstractPattern context)  {    _nodeListContext = context;  }  protected void printIf(Element element, Expr test)    throws Exception  {    print("if (");    printExprTest(test, "node");    println(") {");    pushDepth();    generateChildren(element);    popDepth();    println("}");  }  protected void printChoose(Element element, Expr expr, boolean first)    throws Exception  {    if (! first)      print("else if (");    else      print("if (");    printExprTest(expr, "node");    println(") {");    pushDepth();    generateChildren(element);    popDepth();    println("}");  }  protected void printOtherwise(Element element, boolean first)    throws Exception  {    if (! first)      print("else ");    println("{");    pushDepth();    generateChildren(element);    popDepth();    println("}");  }  void printNumber(Expr expr, XslNumberFormat format)    throws Exception  {    print("exprNumber(out, node, env, _exprs[" + addExpr(expr) + "]");    print(", _xsl_formats[" + _formats.size() + "]");    println(");");    _formats.add(format);  }  void printNumber(String level,                   AbstractPattern countPattern,                   AbstractPattern fromPattern,		   XslNumberFormat format)    throws Exception  {    if (level.equals("single"))      print("singleNumber(out, ");    else if (level.equals("multiple"))      print("multiNumber(out, ");    else if (level.equals("any"))      print("anyNumber(out, ");    else      throw error("xsl:number cannot understand level=`" + level + "'");    print("node, env, ");    printPattern(countPattern);    print(", ");    printPattern(fromPattern);    print(", _xsl_formats[" + _formats.size() + "]");    println(");");    _formats.add(format);  }  public int addFormat(XslNumberFormat format)  {    int index = _formats.size();    _formats.add(format);    return index;  }  protected void printCopy(Element element)    throws Exception  {    println("out.pushCopy(node);");    printUseAttributeSet(element, true);    generateChildren(element);          println("out.popCopy(node);");  }  protected void printResultDocument(Element element, String href, String format)    throws Exception  {    println("XslWriter oldOut = out;");    println("OutputStream os = null;");    println("try {");    pushDepth();    print("os = out.openWrite(env, ");    generateString(href, '+', element);    println(");");    println("out = out.openResultDocument(os);");    generateChildren(element);    println("out.close();");    popDepth();    println("} finally {");    println("  if (os != null)");    println("    os.close();");    println("  out = oldOut;");    println("}");  }  protected void printElement(Element element, String name)    throws Exception  {    print("out.pushElement(");    generateString(name, '+', element);    if (_namespace != null) {      print(", ");      printNamespace(_namespace);    }    println(");");    printUseAttributeSet(element, true);    generateChildren(element);          println("out.popElement();");  }  protected void printElement(Element element, String name, String namespace)    throws Exception  {    print("out.pushElementNs(");    generateString(name, '+', element);    print(", ");    generateString(namespace, '+', element);    println(");");    printUseAttributeSet(element, true);    generateChildren(element);          print("out.popElement();");  }  /**   * Prints the attributes in a use-attribute-set.   */  private void printUseAttributeSet(Element element, boolean isXSL)    throws Exception  {    Attr attr = (Attr) ((QElement) element).getFirstAttribute();    for (; attr != null; attr = (Attr) attr.getNextSibling()) {      if (isXSL && attr.getNodeName().equals("use-attribute-sets") ||          ! isXSL && attr.getNodeName().equals("xsl:use-attribute-sets")) {	HashMap set = getAttributeSet(attr.getNodeValue());	if (set == null)	  continue;	Iterator iter = set.keySet().iterator();	while (iter.hasNext()) {	  String key = (String) iter.next();	  String value = (String) set.get(key);                    printAttributeValue(key, value, element);	}      }    }  }  /**   * Returns the named attribute set.   */  public HashMap<String,String> getAttributeSet(String name)  {    CharBuffer cb = CharBuffer.allocate();    int i = 0;    int len = name.length();    HashMap<String,String> map = new HashMap<String,String>();        while (i < len) {      for (; i < len && name.charAt(i) == ' '; i++) {      }      cb.clear();      for (; i < len && name.charAt(i) != ' '; i++)        cb.append(name.charAt(i));      if (cb.length() > 0) {        XslAttributeSet newSet = _attributeSets.get(cb.toString());        if (newSet != null) {	  ArrayList<XslAttribute> attrList = newSet.getAttributes();	  for (int j = 0; j < attrList.size(); j++) {	    XslAttribute attr = attrList.get(j);	    map.put(attr.getName(), attr.getValue());          }        }      }    }    return map;  }  /**   * Returns the named attribute set.   */  public ArrayList<XslAttribute> getAttributeSetList(String name)  {    CharBuffer cb = CharBuffer.allocate();    int i = 0;    int len = name.length();    ArrayList<XslAttribute> set = new ArrayList<XslAttribute>();        while (i < len) {      for (; i < len && name.charAt(i) == ' '; i++) {      }      cb.clear();      for (; i < len && name.charAt(i) != ' '; i++)        cb.append(name.charAt(i));      if (cb.length() > 0) {        XslAttributeSet newSet = _attributeSets.get(cb.toString());        if (newSet != null) {	  set.addAll(newSet.getAttributes());        }      }    }    return set;  }  /**   * Prints an xsl:attribute   */  protected void printAttribute(Element element, String name)    throws Exception  {    print("out.pushAttribute(");    generateString(name, '+', element);        if (_namespace != null) {      print(", ");      printNamespace(_namespace);    }        println(");");          generateChildren(element);          println("out.popAttribute();");  }  /**   * Prints a single attribute value.   */  private void printAttributeValue(String key, String value, Element elt)    throws Exception  {    if (_namespace == null && ! attributeHasSpecial(key) &&        ! attributeHasSpecial(value)) {      print("out.setAttribute(");      generateString(key, '+', elt);      print(", ");      generateString(value, '+', elt);      println(");");    }    else {      print("out.pushAttribute(");      generateString(key, '+', elt);      if (_namespace != null) {        print(", ");        printNamespace(_namespace);      }      println(");");      generateString(value, ',', elt);      println("out.popAttribute();");    }  }  public void printNamespace(NamespaceContext namespace)    throws Exception  {    for (int i = 0; i < _namespaces.size(); i++) {      if (_namespaces.get(i).equals(namespace)) {        print("_namespaces[" + i + "]");        return;      }    }        print("_namespaces[" + _namespaces.size() + "]");    _namespaces.add(namespace);  }  public int addNamespace(NamespaceContext namespace)    throws Exception  {    for (int i = 0; i < _namespaces.size(); i++) {      if (_namespaces.get(i).equals(namespace)) {	return i;      }    }        _namespaces.add(namespace);    return _namespaces.size() - 1;  }  protected void printAttribute(Element element, String name, String namespace)    throws Exception  {    print("out.pushAttributeNs(");    generateString(name, '+', element);    print(", ");    generateString(namespace, '+', element);    println(");");    generateChildren(element);          println("out.popAttribute();");  }  protected void printPi(Element element)    throws Exception  {    String name = element.getAttribute("name");    if (name.equals(""))      throw error("xsl:pi expected `name' attribute.");    print("out.pushPi();");        generateChildren(element);    println("out.popPi(");    generateString(name, '+', element);    println(");");  }  protected void printComment(Element element)    throws Exception  {    println("out.pushComment();");    generateChildren(element);    println("out.popComment();");  }  protected void printError(String msg)    throws Exception  {    println("if (true) throw new javax.xml.transform.TransformerException(\"" + msg + "\");");  }  protected void printMessage(Element msg)    throws Exception  {    int unique = _unique++;        println("XMLWriter frag" + unique + " = out.pushFragment();");    generateChildren(msg);    String terminate = msg.getAttribute("terminate");    if (terminate.equals("yes"))      println("if (true) throw new javax.xml.transform.TransformerException(((QAbstractNode) out.popFragment(frag" + unique + ")).getTextValue());");    else      println("System.err.println(((QAbstractNode) out.popFragment(frag" + unique + ")).getTextValue());");  }  /**   * Prints code to implement the xtp:expression tag, i.e. print   * the value of the Java expression.   */  protected void printExpression(Element element)    throws Exception  {    String expr = element.getAttribute("expr");    if (! expr.equals("")) {      print("out.print(");      print(expr);      println(");");    }    else {      print("out.print(");      print(((QAbstractNode) element).getTextValue());      println(");");    }  }  protected void printScriptlet(Element element)    throws Exception  {    println(((QAbstractNode) element).getTextValue());  }  protected void printWhile(Element element, Expr test)    throws Exception  {    print("while (");

⌨️ 快捷键说明

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