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 + -
显示快捷键?