dbertoni 02/04/01 22:12:50
Modified: c/src/XSLT ElemAttribute.cpp ElemElement.cpp
Log:
Fixed bug with checking for valid name.
Revision Changes Path
1.36 +16 -3 xml-xalan/c/src/XSLT/ElemAttribute.cpp
Index: ElemAttribute.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemAttribute.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- ElemAttribute.cpp 23 Feb 2002 04:23:16 -0000 1.35
+++ ElemAttribute.cpp 2 Apr 2002 06:12:50 -0000 1.36
@@ -174,7 +174,14 @@
m_pNameAVT->evaluate(attrName, sourceNode, *this, executionContext);
- if(!isEmpty(attrName))
+ if(XalanQName::isValidQName(attrName) == false)
+ {
+ executionContext.warn(
+ "The attribute name is invalid",
+ sourceNode,
+ getLocator());
+ }
+ else
{
// save original attribute name
StylesheetExecutionContext::GetAndReleaseCachedString
origAttrNameGuard(executionContext);
@@ -353,7 +360,10 @@
if (isEmpty(attrNameSpace))
{
// Could not resolve prefix
- executionContext.warn("Warning: Could
not resolve prefix " + nsprefix, sourceNode, this);
+ executionContext.warn(
+ "Warning: Could not resolve
prefix",
+ sourceNode,
+ getLocator());
}
else
{
@@ -383,7 +393,10 @@
}
else
{
- executionContext.warn("Warning: Trying to add attribute after
element child has been added, ignoring...", sourceNode, this);
+ executionContext.warn(
+ "Attributes cannot be added after a child has been
added. The attribute(s) will not be added",
+ sourceNode,
+ getLocator());
}
// If there was no namespace, or the namespace was resolved, process
1.36 +123 -114 xml-xalan/c/src/XSLT/ElemElement.cpp
Index: ElemElement.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemElement.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- ElemElement.cpp 23 Feb 2002 04:23:16 -0000 1.35
+++ ElemElement.cpp 2 Apr 2002 06:12:50 -0000 1.36
@@ -2,7 +2,7 @@
* The Apache Software License, Version 1.1
*
*
- * Copyright (c) 1999 The Apache Software Foundation. All rights
+ * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -165,171 +165,180 @@
m_nameAVT->evaluate(elemName, sourceNode, *this, executionContext);
- StylesheetExecutionContext::GetAndReleaseCachedString
elemNameSpaceGuard(executionContext);
+ bool isIllegalElement = !XalanQName::isValidQName(elemName);
- XalanDOMString& elemNameSpace = elemNameSpaceGuard.get();
-
- if (m_namespaceAVT != 0)
+ if (isIllegalElement == true)
{
- m_namespaceAVT->evaluate(elemNameSpace, sourceNode, *this,
executionContext);
- }
+ executionContext.warn(
+ "Illegal element name",
+ sourceNode,
+ getLocator());
- XalanDOMString::size_type namespaceLen = length(elemNameSpace);
+ ElemUse::doExecute(executionContext, false);
- bool isIllegalElement = false;
-
- bool hasUnresolvedPrefix = false;
+ doExecuteChildren(executionContext, true);
+ }
+ else
+ {
+ StylesheetExecutionContext::GetAndReleaseCachedString
elemNameSpaceGuard(executionContext);
- bool foundResultNamespaceForPrefix = false;
+ XalanDOMString& elemNameSpace = elemNameSpaceGuard.get();
- XalanDOMString::size_type len = length(elemName);
+ if (m_namespaceAVT != 0)
+ {
+ m_namespaceAVT->evaluate(elemNameSpace, sourceNode, *this,
executionContext);
+ }
- const XalanDOMString::size_type indexOfNSSep = indexOf(elemName,
XalanUnicode::charColon);
+ XalanDOMString::size_type namespaceLen = length(elemNameSpace);
- const bool haveNamespace = indexOfNSSep == len ? false : true;
+ bool hasUnresolvedPrefix = false;
- StylesheetExecutionContext::GetAndReleaseCachedString
prefixGuard(executionContext);
+ bool foundResultNamespaceForPrefix = false;
- XalanDOMString& prefix = prefixGuard.get();
+ XalanDOMString::size_type len = length(elemName);
- if(haveNamespace == true)
- {
- if (indexOfNSSep + 1 == len ||
- isValidNCName(substring(elemName, indexOfNSSep + 1)) == false)
- {
- isIllegalElement = true;
- }
- }
- else if(len == 0 || isValidNCName(elemName) == false)
- {
- isIllegalElement = true;
- }
+ const XalanDOMString::size_type indexOfNSSep =
indexOf(elemName, XalanUnicode::charColon);
- if (isIllegalElement == true)
- {
- executionContext.warn("Illegal element name: \"" + elemName + "\"",
this, sourceNode);
+ const bool haveNamespace = indexOfNSSep == len ? false : true;
- clear(elemName);
- }
- else if (haveNamespace == true)
- {
- prefix = substring(elemName, 0, indexOfNSSep);
+ StylesheetExecutionContext::GetAndReleaseCachedString
prefixGuard(executionContext);
- const XalanDOMString* const theNamespace =
- executionContext.getResultNamespaceForPrefix(prefix);
+ XalanDOMString& prefix = prefixGuard.get();
- if (theNamespace != 0)
- {
- foundResultNamespaceForPrefix = true;
- }
- else
+ if (haveNamespace == true)
{
+ prefix = substring(elemName, 0, indexOfNSSep);
+
const XalanDOMString* const theNamespace =
- m_namespacesHandler.getNamespace(prefix);
+ executionContext.getResultNamespaceForPrefix(prefix);
- if(theNamespace == 0 && namespaceLen == 0)
+ if (theNamespace != 0)
{
- executionContext.warn("Could not resolve prefix: " +
prefix, this, sourceNode);
+ foundResultNamespaceForPrefix = true;
+ }
+ else
+ {
+ const XalanDOMString* const theNamespace =
+ m_namespacesHandler.getNamespace(prefix);
- if (m_namespaceAVT != 0)
+ if(theNamespace == 0 && namespaceLen == 0)
{
- hasUnresolvedPrefix = true;
+ executionContext.warn(
+ "Could not resolve prefix",
+ sourceNode,
+ getLocator());
+
+ if (m_namespaceAVT != 0)
+ {
+ hasUnresolvedPrefix = true;
- elemName = substring(elemName, indexOfNSSep +
1);
+ elemName = substring(elemName,
indexOfNSSep + 1);
+ }
+ else
+ {
+ isIllegalElement = true;
+
+ executionContext.warn(
+ "Illegal element name",
+ sourceNode,
+ getLocator());
+ }
}
- else
+ else if (theNamespace != 0 &&
+ namespaceLen == 0 &&
+ equals(prefix,
DOMServices::s_XMLNamespace) == false)
{
- isIllegalElement = true;
+ elemNameSpace = *theNamespace;
}
}
- else if (theNamespace != 0 &&
- namespaceLen == 0 &&
- equals(prefix, DOMServices::s_XMLNamespace)
== false)
- {
- elemNameSpace = *theNamespace;
- }
}
- }
- if (isIllegalElement == false)
- {
- executionContext.startElement(c_wstr(elemName));
-
- if(0 == m_namespaceAVT &&
- (haveNamespace == false || foundResultNamespaceForPrefix == true))
- {
- outputResultNamespaces(executionContext, hasUnresolvedPrefix);
- }
- else
+ if (isIllegalElement == false)
{
- if(namespaceLen == 0 && hasUnresolvedPrefix == true)
+ executionContext.startElement(c_wstr(elemName));
+
+ if(0 == m_namespaceAVT &&
+ (haveNamespace == false || foundResultNamespaceForPrefix ==
true))
{
- outputResultNamespaces(
- executionContext,
- hasUnresolvedPrefix,
- length(getParentDefaultNamespace()) == 0 ?
true : false);
+ outputResultNamespaces(executionContext,
hasUnresolvedPrefix);
}
else
{
- if(haveNamespace == false)
+ if(namespaceLen == 0 && hasUnresolvedPrefix == true)
{
- if (namespaceLen > 0)
- {
-
outputResultNamespaces(executionContext, hasUnresolvedPrefix);
-
-
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, elemNameSpace);
- }
- else
+ outputResultNamespaces(
+ executionContext,
+ hasUnresolvedPrefix,
+ length(getParentDefaultNamespace()) ==
0 ? true : false);
+ }
+ else
+ {
+ if(haveNamespace == false)
{
- // 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)
+ if (namespaceLen > 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);
+
outputResultNamespaces(executionContext, hasUnresolvedPrefix);
+
+
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, elemNameSpace);
}
else
{
-
outputResultNamespaces(executionContext, hasUnresolvedPrefix, false);
+ // 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);
+ }
+ else
+ {
+
outputResultNamespaces(executionContext, hasUnresolvedPrefix, false);
-
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, elemNameSpace);
+
executionContext.addResultAttribute(DOMServices::s_XMLNamespace, elemNameSpace);
+ }
}
}
- }
- else
- {
- outputResultNamespaces(executionContext,
hasUnresolvedPrefix);
+ else
+ {
+
outputResultNamespaces(executionContext, hasUnresolvedPrefix);
- const XalanDOMString* const
theNamespace =
-
executionContext.getResultNamespaceForPrefix(prefix);
+ 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);
+ }
}
}
}
}
- }
- ElemUse::execute(executionContext);
+ if (isIllegalElement == true)
+ {
+ ElemUse::doExecute(executionContext, false);
+
+ doExecuteChildren(executionContext, true);
+ }
+ else
+ {
+ ElemUse::doExecute(executionContext, true);
- doExecuteChildren(executionContext, isIllegalElement);
+ doExecuteChildren(executionContext, false);
- if (isIllegalElement == false)
- {
- executionContext.endElement(c_wstr(elemName));
+ executionContext.endElement(c_wstr(elemName));
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]