1 28 29 package com.caucho.xsl.java; 30 31 import com.caucho.java.JavaWriter; 32 import com.caucho.xml.QName; 33 import com.caucho.xsl.XslParseException; 34 35 38 public class XslVariable extends XslNode implements XslTopNode { 39 private String _name; 40 private String _select; 41 42 private boolean _isGlobal; 43 44 47 public String getTagName() 48 { 49 return "xsl:variable"; 50 } 51 52 55 public void setGlobal(boolean isGlobal) 56 { 57 _isGlobal = true; 58 } 59 60 63 public void addAttribute(QName name, String value) 64 throws XslParseException 65 { 66 if (name.getName().equals("name")) 67 _name = value; 68 else if (name.getName().equals("select")) 69 _select = value; 70 else 71 super.addAttribute(name, value); 72 } 73 74 77 public void endAttributes() 78 throws XslParseException 79 { 80 if (_name == null) 81 throw error(L.l("'name' is a required attribute of <xsl:variable>")); 82 } 83 84 87 public void endElement() 88 { 89 addVariableCount(); 90 } 91 92 97 public void generate(JavaWriter out) 98 throws Exception 99 { 100 if (_select != null) { 101 int index = addExpr(_select); 102 103 if (_isGlobal) { 104 out.print("env.setGlobal(\"" + _name + "\", "); 105 out.print("_exprs[" + index + "].evalObject(node, env));"); 106 } 107 else { 108 out.print("_exprs[" + index + "]"); 109 110 out.println(".addVar(env, \"" + _name + "\", node, env);"); 111 } 112 } 113 else { 114 String id = "frag" + _gen.generateId(); 115 116 out.println("XMLWriter " + id + " = out.pushFragment();"); 117 118 generateChildren(out); 119 120 if (_isGlobal) 121 out.print("env.setGlobal(\""); 122 else 123 out.print("env.addVar(\""); 124 125 out.printJavaString(_name); 126 out.println("\", out.popFragment(" + id + "));"); 127 } 128 133 134 136 140 } 141 142 protected void printPopScope(JavaWriter out) 143 throws Exception 144 { 145 } 146 } 147 | Popular Tags |