mmidy 00/08/04 15:26:30
Modified: java/src/org/apache/xalan/dtm DTMLiaison.java
java/src/org/apache/xalan/stree DocumentImpl.java
ElementImpl.java SourceTreeHandler.java
java/src/org/apache/xalan/templates FuncKey.java
StylesheetComposed.java
java/src/org/apache/xalan/transformer KeyIterator.java
KeyManager.java KeyTable.java TransformerImpl.java
java/src/org/apache/xalan/utils DOMBuilder.java
Added: java/src/org/apache/xalan/stree StreeDOMBuilder.java
Log:
Miscellaneous fixes for ID and key.
Revision Changes Path
1.4 +8 -0 xml-xalan/java/src/org/apache/xalan/dtm/DTMLiaison.java
Index: DTMLiaison.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/dtm/DTMLiaison.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DTMLiaison.java 2000/08/01 18:22:52 1.3
+++ DTMLiaison.java 2000/08/04 22:26:24 1.4
@@ -288,6 +288,14 @@
{
return ((DTMProxy)doc).getDTM().getIdentifier(id);
}
+
+ public void setIDAttribute(String namespaceURI,
+ String qualifiedName,
+ String value,
+ Element elem)
+ {
+
((org.apache.xalan.stree.DocumentImpl)this.getDocument()).setIDAttribute(namespaceURI,
qualifiedName, value, elem);
+ }
/**
* The getUnparsedEntityURI function returns the URI of the unparsed
1.2 +26 -0
xml-xalan/java/src/org/apache/xalan/stree/DocumentImpl.java
Index: DocumentImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/stree/DocumentImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DocumentImpl.java 2000/06/19 16:52:35 1.1
+++ DocumentImpl.java 2000/08/04 22:26:25 1.2
@@ -12,6 +12,9 @@
import org.w3c.dom.DocumentType;
import org.w3c.dom.DOMException;
+import java.util.Hashtable;
+
+
public class DocumentImpl extends Parent
{
DocumentImpl()
@@ -98,6 +101,21 @@
return m_docElement;
}
+ Hashtable m_idAttributes = new Hashtable();
+
+ public Hashtable getIDAttributes()
+ {
+ return m_idAttributes;
+ }
+
+ public void setIDAttribute(String namespaceURI,
+ String qualifiedName,
+ String value,
+ Element elem)
+ {
+ m_idAttributes.put(value, elem);
+ }
+
/**
* Append a child to the child list.
* @param newChild Must be a org.apache.xalan.stree.Child.
@@ -206,6 +224,14 @@
throws DOMException
{
return super.createAttributeNS(namespaceURI, qualifiedName);
+ }
+
+ /**
+ * Given an ID, return the element.
+ */
+ public Element getElementById(String elementId)
+ {
+ return (Element)m_idAttributes.get(elementId);
}
1.8 +7 -0
xml-xalan/java/src/org/apache/xalan/stree/ElementImpl.java
Index: ElementImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/stree/ElementImpl.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ElementImpl.java 2000/07/31 19:18:58 1.7
+++ ElementImpl.java 2000/08/04 22:26:25 1.8
@@ -189,6 +189,13 @@
}
}
+ public void setIDAttribute(String namespaceURI,
+ String qualifiedName,
+ String value)
+ {
+ getDocumentImpl().setIDAttribute(namespaceURI, qualifiedName, value,
this);
+ }
+
/**
* Create an attribute node.
*/
1.5 +1 -1
xml-xalan/java/src/org/apache/xalan/stree/SourceTreeHandler.java
Index: SourceTreeHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/stree/SourceTreeHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SourceTreeHandler.java 2000/08/04 19:36:41 1.4
+++ SourceTreeHandler.java 2000/08/04 22:26:25 1.5
@@ -106,7 +106,7 @@
((DocumentImpl)m_root).setSourceTreeHandler(this);
((DocumentImpl)m_root).setUid(1);
((DocumentImpl)m_root).setLevel(new Integer(1).shortValue());
- m_sourceTreeHandler = new DOMBuilder(m_root);
+ m_sourceTreeHandler = new StreeDOMBuilder(m_root);
setShouldStripWhitespace(false);
if(m_useMultiThreading && (null != m_transformer))
1.1
xml-xalan/java/src/org/apache/xalan/stree/StreeDOMBuilder.java
Index: StreeDOMBuilder.java
===================================================================
package org.apache.xalan.stree;
import org.apache.xalan.utils.DOMBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class StreeDOMBuilder extends DOMBuilder
{
/**
* StreeDOMBuilder instance constructor... it will add the DOM nodes
* to the document fragment.
*/
public StreeDOMBuilder(Document doc, Node node)
{
super(doc, node);
}
/**
* StreeDOMBuilder instance constructor... it will add the DOM nodes
* to the document fragment.
*/
public StreeDOMBuilder(Document doc, DocumentFragment docFrag)
{
super( doc, docFrag);
}
/**
* StreeDOMBuilder instance constructor... it will add the DOM nodes
* to the document.
*/
public StreeDOMBuilder(Document doc)
{
super(doc);
}
public void setIDAttribute(String namespaceURI,
String qualifiedName,
String value,
Element elem)
{
((DocumentImpl)this.getRootNode()).setIDAttribute(namespaceURI,
qualifiedName,
value, elem);
}
}
1.3 +1 -0
xml-xalan/java/src/org/apache/xalan/templates/FuncKey.java
Index: FuncKey.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/FuncKey.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FuncKey.java 2000/07/05 14:40:25 1.2
+++ FuncKey.java 2000/08/04 22:26:26 1.3
@@ -144,6 +144,7 @@
upi.addIterator(nl);
//mnodeset.addNodesInDocOrder(nl, xctxt); needed??
}
+ upi.initContext(xctxt);
nodes = new XNodeSet(upi);
}
else
1.4 +2 -2
xml-xalan/java/src/org/apache/xalan/templates/StylesheetComposed.java
Index: StylesheetComposed.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/templates/StylesheetComposed.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- StylesheetComposed.java 2000/07/05 14:40:30 1.3
+++ StylesheetComposed.java 2000/08/04 22:26:28 1.4
@@ -334,7 +334,7 @@
int nImports = getImportCountComposed();
for(int i = -1; i < nImports; i++)
{
- StylesheetComposed stylesheet = (i == i) ? this : getImportComposed(i);
+ StylesheetComposed stylesheet = (i < 0) ? this : getImportComposed(i);
// Does this stylesheet contain it?
int nKeys = stylesheet.getKeyCount();
for(int keyIndex = 0; keyIndex < nKeys; keyIndex++)
@@ -348,7 +348,7 @@
for(int k = 0; k < nIncludes; k++)
{
Stylesheet included = stylesheet.getIncludeComposed(k);
- nKeys = included.getDecimalFormatCount();
+ nKeys = included.getKeyCount();
for(int keyIndex = 0; keyIndex < nKeys; keyIndex++)
{
KeyDeclaration keyDecl = included.getKey(keyIndex);
1.3 +2 -1
xml-xalan/java/src/org/apache/xalan/transformer/KeyIterator.java
Index: KeyIterator.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/KeyIterator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- KeyIterator.java 2000/07/05 14:42:51 1.2
+++ KeyIterator.java 2000/08/04 22:26:29 1.3
@@ -58,7 +58,8 @@
{
// System.out.println("setLookupKey - lookupKey: "+lookupKey);
((KeyWalker)m_firstWalker).m_lookupKey = lookupKey;
- m_firstWalker.setRoot(getContext());
+ m_firstWalker.setRoot((this.getContext().getNodeType()==
Node.DOCUMENT_NODE) ?
+ this.getContext() :
this.getContext().getOwnerDocument());
this.setLastUsedWalker(m_firstWalker);
this.setNextPosition(0);
}
1.3 +1 -1
xml-xalan/java/src/org/apache/xalan/transformer/KeyManager.java
Index: KeyManager.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/KeyManager.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- KeyManager.java 2000/07/05 14:42:52 1.2
+++ KeyManager.java 2000/08/04 22:26:29 1.3
@@ -100,7 +100,7 @@
for(int i = 0; i < nKeyTables; i++)
{
KeyTable kt = (KeyTable)m_key_tables.elementAt(i);
- if(doc == kt.getDocKey())
+ if(kt.getKeyTableName().equals(name) && doc == kt.getDocKey())
{
nl = kt.getNodeSetByKey(name, ref);
if (nl != null)
1.3 +5 -0
xml-xalan/java/src/org/apache/xalan/transformer/KeyTable.java
Index: KeyTable.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/KeyTable.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- KeyTable.java 2000/07/05 14:42:52 1.2
+++ KeyTable.java 2000/08/04 22:26:29 1.3
@@ -147,6 +147,11 @@
return ki;
}
+
+ public QName getKeyTableName()
+ {
+ return m_keyIter.getName();
+ }
}
1.12 +16 -4
xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java
Index: TransformerImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- TransformerImpl.java 2000/08/02 19:33:26 1.11
+++ TransformerImpl.java 2000/08/04 22:26:29 1.12
@@ -89,6 +89,7 @@
import org.apache.xalan.utils.NodeVector;
import org.apache.xalan.utils.BoolStack;
import org.apache.xalan.utils.QName;
+import org.apache.xalan.utils.PrefixResolver;
import org.apache.xpath.XPathContext;
import org.apache.xpath.NodeSet;
@@ -179,6 +180,7 @@
{
setStylesheet(stylesheet);
setXPathContext(new XPathContext(this));
+ getXPathContext().setNamespaceContext(stylesheet);
}
/**
@@ -291,7 +293,7 @@
}
// Get the input content handler, which will handle the
- // parse events and create the source tree.
+ // parse events and create the source tree.
ContentHandler inputHandler = getInputContentHandler();
reader.setContentHandler( inputHandler );
reader.setProperty("http://xml.org/sax/properties/lexical-handler",
inputHandler);
@@ -1030,9 +1032,19 @@
{
// Find the XSL template that is the best match for the
// element.
- template = stylesheetTree.getTemplateComposed(xctxt,
- child, mode,
-
getQuietConflictWarnings());
+ PrefixResolver savedPrefixResolver = xctxt.getNamespaceContext();
+ try
+ {
+ xctxt.setNamespaceContext(xslInstruction);
+
+ template = stylesheetTree.getTemplateComposed(xctxt,
+ child, mode,
+
getQuietConflictWarnings());
+ }
+ finally
+ {
+ xctxt.setNamespaceContext(savedPrefixResolver);
+ }
// If that didn't locate a node, fall back to a default template rule.
// See http://www.w3.org/TR/xslt#built-in-rule.
1.5 +13 -0 xml-xalan/java/src/org/apache/xalan/utils/DOMBuilder.java
Index: DOMBuilder.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/utils/DOMBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DOMBuilder.java 2000/08/01 04:41:57 1.4
+++ DOMBuilder.java 2000/08/04 22:26:30 1.5
@@ -277,6 +277,11 @@
int nAtts = atts.getLength();
for(int i = 0; i < nAtts; i++)
{
+ //System.out.println("type " + atts.getType(i) + " name " +
atts.getLocalName(i) );
+ // First handle a possible ID attribute
+ if (atts.getType(i).equalsIgnoreCase("ID"))
+ setIDAttribute(atts.getURI(i), atts.getLocalName(i),
atts.getValue(i), elem);
+
String attrNS = atts.getURI(i);
// System.out.println("attrNS: "+attrNS+", localName:
"+atts.getQName(i)
// +", qname: "+atts.getQName(i)+", value:
"+atts.getValue(i));
@@ -321,6 +326,14 @@
{
m_currentNode = null;
}
+ }
+
+ public void setIDAttribute(String namespaceURI,
+ String qualifiedName,
+ String value,
+ Element elem)
+ {
+ // Do nothing. This method is meant to be overiden.
}
/**