Fix for bug 103235 (Implement DOM Level 3 XPath WD). r=sicking, sr=jst, a=dbaron.

git-svn-id: svn://10.0.0.236/trunk@116555 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
peterv%netscape.com
2002-03-14 15:13:03 +00:00
parent a1c97056ea
commit bbf9418488
9 changed files with 5 additions and 334 deletions

View File

@@ -1,108 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Peter Van der Beken, peterv@netscape.com
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "XPathProcessor.h"
#include "dom.h"
#include "ProcessorState.h"
#include "Expr.h"
#include "nsNodeSet.h"
#include "nsIDOMClassInfo.h"
// QueryInterface implementation for XPathProcessor
NS_IMPL_ADDREF(XPathProcessor)
NS_IMPL_RELEASE(XPathProcessor)
NS_INTERFACE_MAP_BEGIN(XPathProcessor)
NS_INTERFACE_MAP_ENTRY(nsIXPathNodeSelector)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_ENTRY_EXTERNAL_DOM_CLASSINFO(XPathProcessor)
NS_INTERFACE_MAP_END
/*
* Creates a new XPathProcessor
*/
XPathProcessor::XPathProcessor()
{
NS_INIT_ISUPPORTS();
}
/*
* Default destructor
*/
XPathProcessor::~XPathProcessor()
{
}
/* nsIDOMNodeList selectNodes (in nsIDOMNode aContextNode, in DOMString aPattern); */
NS_IMETHODIMP XPathProcessor::SelectNodes(nsIDOMNode *aContextNode,
const nsAReadableString & aPattern,
nsIDOMNodeList **_retval)
{
String pattern(PromiseFlatString(aPattern).get());
nsCOMPtr<nsIDOMDocument> aOwnerDOMDocument;
aContextNode->GetOwnerDocument(getter_AddRefs(aOwnerDOMDocument));
nsCOMPtr<nsIDocument> aOwnerDocument = do_QueryInterface(aOwnerDOMDocument);
Document* aDocument = new Document(aOwnerDOMDocument);
Node* aNode = aDocument->createWrapper(aContextNode);
ProcessorState* aProcessorState = new ProcessorState();
ExprParser aParser;
Expr* aExpression = aParser.createExpr(pattern);
ExprResult* exprResult = aExpression->evaluate(aNode, aProcessorState);
nsNodeSet* resultSet;
if (exprResult->getResultType() == ExprResult::NODESET) {
resultSet = new nsNodeSet((NodeSet*)exprResult);
}
else {
// Return an empty nodeset
resultSet = new nsNodeSet(nsnull);
}
*_retval = resultSet;
NS_ADDREF(*_retval);
delete aProcessorState;
delete exprResult;
delete aExpression;
delete aDocument;
return NS_OK;
}

View File

@@ -1,75 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Peter Van der Beken, peterv@netscape.com
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef XPathProcessor_h__
#define XPathProcessor_h__
#include "nsIXPathNodeSelector.h"
/* e4172588-1dd1-11b2-bf09-ec309437245a */
#define TRANSFORMIIX_XPATH_PROCESSOR_CID \
{ 0xe4172588, 0x1dd1, 0x11b2, {0xbf, 0x09, 0xec, 0x30, 0x94, 0x37, 0x24, 0x5a} }
#define TRANSFORMIIX_XPATH_PROCESSOR_CONTRACTID \
"@mozilla.org/xpath-nodeselector;1"
/**
* A class for processing an XPath query
**/
class XPathProcessor : public nsIXPathNodeSelector
{
public:
/**
* Creates a new XPathProcessor
**/
XPathProcessor();
/**
* Default destructor for XPathProcessor
**/
virtual ~XPathProcessor();
// nsISupports interface
NS_DECL_ISUPPORTS
// nsIXPathNodeSelector interface
NS_DECL_NSIXPATHNODESELECTOR
};
#endif

View File

@@ -1,80 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Peter Van der Beken, peterv@netscape.com
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsNodeSet.h"
#include "nsIDOMClassInfo.h"
// QueryInterface implementation for nsNodeSet
NS_IMPL_ADDREF(nsNodeSet)
NS_IMPL_RELEASE(nsNodeSet)
NS_INTERFACE_MAP_BEGIN(nsNodeSet)
NS_INTERFACE_MAP_ENTRY(nsIDOMNodeList)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_ENTRY_EXTERNAL_DOM_CLASSINFO(NodeSet)
NS_INTERFACE_MAP_END
nsNodeSet::nsNodeSet(NodeSet* aNodeSet) {
NS_INIT_ISUPPORTS();
mScriptObject = nsnull;
if (aNodeSet) {
for (int i=0; i < aNodeSet->size(); i++) {
mNodes.AppendElement(aNodeSet->get(i)->getNSObj());
}
}
}
nsNodeSet::~nsNodeSet() {
}
NS_IMETHODIMP
nsNodeSet::Item(PRUint32 aIndex, nsIDOMNode** aReturn)
{
*aReturn = nsnull;
mNodes.QueryElementAt(aIndex, NS_GET_IID(nsIDOMNode), (void**)aReturn);
return NS_OK;
}
NS_IMETHODIMP
nsNodeSet::GetLength(PRUint32* aLength)
{
mNodes.Count(aLength);
return NS_OK;
}

View File

@@ -1,71 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Peter Van der Beken, peterv@netscape.com
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef TRANSFRMX_NS_NODESET_H
#define TRANSFRMX_NS_NODESET_H
#include "NodeSet.h"
#include "nsIDOMNodeList.h"
#include "nsSupportsArray.h"
class nsNodeSet : public nsIDOMNodeList
{
public:
/**
* Creates a new Mozilla NodeSet from a Transformiix NodeSet
**/
nsNodeSet(NodeSet* aNodeSet);
/**
* Default destructor for nsNodeSet
**/
virtual ~nsNodeSet();
// nsISupports interface
NS_DECL_ISUPPORTS
// nsIDocumentTransformer interface
NS_DECL_NSIDOMNODELIST
private:
void* mScriptObject;
nsSupportsArray mNodes;
};
#endif

View File

@@ -105,6 +105,7 @@ viewer:Components:dom_stylesheets.xpt
viewer:Components:dom_traversal.xpt
viewer:Components:dom_views.xpt
viewer:Components:dom_xbl.xpt
viewer:Components:dom_xpath.xpt
viewer:Components:dom_xul.xpt
viewer:Components:editor.xpt
viewer:Components:HTMLEditor.shlb

View File

@@ -76,6 +76,7 @@ bin/components/dom_stylesheets.xpt
bin/components/dom_traversal.xpt
bin/components/dom_views.xpt
bin/components/dom_xbl.xpt
bin/components/dom_xpath.xpt
bin/components/dom_xul.xpt
bin/components/editor.xpt
bin/components/find.xpt

View File

@@ -92,6 +92,7 @@ bin\components\dom_stylesheets.xpt
bin\components\dom_traversal.xpt
bin\components\dom_views.xpt
bin\components\dom_xbl.xpt
bin\components\dom_xpath.xpt
bin\components\dom_xul.xpt
bin\components\editor.xpt
bin\components\find.xpt

View File

@@ -90,6 +90,7 @@ bin/components/dom_stylesheets.xpt
bin/components/dom_traversal.xpt
bin/components/dom_views.xpt
bin/components/dom_xbl.xpt
bin/components/dom_xpath.xpt
bin/components/dom_xul.xpt
bin/components/editor.xpt
bin/components/find.xpt

View File

@@ -113,6 +113,7 @@ bin\components\dom_stylesheets.xpt
bin\components\dom_traversal.xpt
bin\components\dom_views.xpt
bin\components\dom_xbl.xpt
bin\components\dom_xpath.xpt
bin\components\dom_xul.xpt
bin\components\editor.xpt
bin\components\editor.dll