dbertoni 2003/07/07 16:53:43
Modified: c/src/xalanc/XSLT ElemElement.cpp ElemElement.hpp
Log:
Fixes for bug 21385.
Revision Changes Path
1.3 +65 -78 xml-xalan/c/src/xalanc/XSLT/ElemElement.cpp
Index: ElemElement.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/ElemElement.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ElemElement.cpp 30 Jun 2003 23:38:30 -0000 1.2
+++ ElemElement.cpp 7 Jul 2003 23:53:43 -0000 1.3
@@ -183,8 +183,6 @@
XalanDOMString::size_type namespaceLen =
length(elemNameSpace);
- bool hasUnresolvedPrefix = false;
-
bool foundResultNamespaceForPrefix = false;
XalanDOMString::size_type len =
length(elemName);
@@ -222,8 +220,6 @@
if (m_namespaceAVT != 0)
{
- hasUnresolvedPrefix = true;
-
elemName.erase(0, indexOfNSSep
+ 1);
}
else
@@ -252,80 +248,62 @@
if(0 == m_namespaceAVT &&
(havePrefix == false ||
foundResultNamespaceForPrefix == true))
{
- outputResultNamespaces(executionContext,
hasUnresolvedPrefix);
+ if (havePrefix == false)
+ {
+ fixupDefaultNamespace(executionContext);
+ }
}
else
{
- if(namespaceLen == 0 && hasUnresolvedPrefix ==
true)
- {
- outputResultNamespaces(
- executionContext,
- hasUnresolvedPrefix,
-
length(getParentDefaultNamespace()) == 0 ? true : false);
- }
- else
+ if(havePrefix == false)
{
- if(havePrefix == false)
+ if (namespaceLen > 0)
{
- if (namespaceLen > 0)
- {
-
outputResultNamespaces(executionContext, hasUnresolvedPrefix, true);
-
- const XalanDOMString*
const theDefaultNamespace =
+ const XalanDOMString* const
theDefaultNamespace =
executionContext.getResultNamespaceForPrefix(s_emptyString);
- if (theDefaultNamespace
== 0 ||
-
equals(*theDefaultNamespace, elemNameSpace) == false)
- {
-
executionContext.addResultAttribute(
+ if (theDefaultNamespace == 0 ||
+
equals(*theDefaultNamespace, elemNameSpace) == false)
+ {
+
executionContext.addResultAttribute(
DOMServices::s_XMLNamespace,
elemNameSpace);
- }
}
- else
- {
- // OK, the namespace
we're generating is the default namespace,
- // so let's make sure
that we really need it. If we don't,
- // we end up with
another xmlns="" on the element we're
- // generating.
Although this isn't really an error, it's
- // a bit unsightly, so
let's suppress it...
- const XalanDOMString&
theParentDefaultNamespace =
+ }
+ else
+ {
+ // OK, the namespace we're
generating is the default namespace,
+ // so let's make sure that we
really need it. If we don't,
+ // we end up with another
xmlns="" on the element we're
+ // generating. Although this
isn't really an error, it's
+ // a bit unsightly, so let's
suppress it...
+ const XalanDOMString&
theParentDefaultNamespace =
getParentDefaultNamespace();
- if
(length(theParentDefaultNamespace) == 0)
- {
- // There's not
default namespace in effect, so suppress any
- // default
namespace in the statically-generated namespaces,
- // and don't
put out the one we've dynamically generated...
-
outputResultNamespaces(executionContext, hasUnresolvedPrefix, true);
-
- if
(executionContext.getResultNamespaceForPrefix(s_emptyString) != 0)
- {
-
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, elemNameSpace);
- }
- }
- else
+ if
(length(theParentDefaultNamespace) == 0)
+ {
+ if
(executionContext.getResultNamespaceForPrefix(s_emptyString) != 0)
{
-
outputResultNamespaces(executionContext, hasUnresolvedPrefix, false);
-
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, elemNameSpace);
}
}
+ else
+ {
+
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, elemNameSpace);
+ }
}
- else
- {
-
outputResultNamespaces(executionContext, hasUnresolvedPrefix);
-
- const XalanDOMString* const
theNamespace =
+ }
+ else
+ {
+ const XalanDOMString* const
theNamespace =
executionContext.getResultNamespaceForPrefix(prefix);
- if (theNamespace == 0 ||
- equals(*theNamespace,
elemNameSpace) == false)
- {
- insert(prefix, 0,
DOMServices::s_XMLNamespaceWithSeparator);
+ if (theNamespace == 0 ||
+ equals(*theNamespace,
elemNameSpace) == false)
+ {
+ insert(prefix, 0,
DOMServices::s_XMLNamespaceWithSeparator);
-
executionContext.addResultAttribute(prefix, elemNameSpace);
- }
+
executionContext.addResultAttribute(prefix, elemNameSpace);
}
}
}
@@ -393,31 +371,40 @@
void
-ElemElement::outputResultNamespaces(
- StylesheetExecutionContext&
executionContext,
- bool
hasUnresolvedPrefix,
- bool
supressDefault) const
+ElemElement::fixupDefaultNamespace(StylesheetExecutionContext&
executionContext) const
{
- getNamespacesHandler().outputResultNamespaces(executionContext,
supressDefault);
+ // OK, now let's check to make sure we don't have to change the default
namespace...
+ const XalanDOMString* const theCurrentDefaultNamespace =
+
executionContext.getResultNamespaceForPrefix(s_emptyString);
- if (supressDefault == false)
- {
- // OK, now let's check to make sure we don't have to change the
default namespace...
- const XalanDOMString* const
theCurrentDefaultNamespace =
-
executionContext.getResultNamespaceForPrefix(s_emptyString);
+ const XalanDOMString* const theElementDefaultNamespace =
+
getNamespacesHandler().getNamespace(s_emptyString);
- if (theCurrentDefaultNamespace != 0)
+ if (theCurrentDefaultNamespace != 0)
+ {
+ if (theElementDefaultNamespace == 0)
+ {
+ // There was no default namespace, so we have to turn
the
+ // current one off.
+
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, s_emptyString);
+ }
+ else if (equals(*theCurrentDefaultNamespace,
*theElementDefaultNamespace) == false)
{
- const XalanDOMString* const
theElementDefaultNamespace =
-
getNamespacesHandler().getNamespace(s_emptyString);
+ // There is a default namespace, but it's different
from the current one,
+ // so we have to change it.
+
executionContext.addResultAttribute(DOMServices::s_XMLNamespace,
*theElementDefaultNamespace);
+ }
+ }
+ else
+ {
+ // There's no current default namespace in the result tree, but
there may be
+ // on for this xsl:element instance, so we have to add it, if
so.
+ const XalanDOMString& theParentDefaultNamespace =
+ getParentDefaultNamespace();
- if (hasUnresolvedPrefix == true ||
theElementDefaultNamespace == 0)
- {
- // There was no default namespace, so we have
to turn the
- // current one off.
-
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, s_emptyString);
- }
- else if (equals(*theCurrentDefaultNamespace,
*theElementDefaultNamespace) == false)
+ if (theElementDefaultNamespace != 0)
+ {
+ if (length(theParentDefaultNamespace) == 0 ||
theParentDefaultNamespace != *theElementDefaultNamespace)
{
executionContext.addResultAttribute(DOMServices::s_XMLNamespace,
*theElementDefaultNamespace);
}
1.2 +3 -8 xml-xalan/c/src/xalanc/XSLT/ElemElement.hpp
Index: ElemElement.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/XSLT/ElemElement.hpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ElemElement.hpp 29 Jun 2003 03:58:07 -0000 1.1
+++ ElemElement.hpp 7 Jul 2003 23:53:43 -0000 1.2
@@ -137,17 +137,12 @@
private:
/**
- * Output the static namespace definitions.
+ * Do any necessary fixup for the default namespace
*
* @param executionContext The current execution context
- * @param true if the element being generated has an unresolved prefix.
- * @param supressDefault If true, any default namespace declaration
will not be output.
*/
void
- outputResultNamespaces(
- StylesheetExecutionContext&
executionContext,
- bool
hasUnresolvedPrefix,
- bool
supressDefault = false) const;
+ fixupDefaultNamespace(StylesheetExecutionContext&
executionContext) const;
/**
* Get the default namespace from the parent of this element. Returns
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]