87 lines
2.2 KiB
C++
87 lines
2.2 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "txExpr.h"
|
|
#include "nsIAtom.h"
|
|
#include "txIXPathContext.h"
|
|
#include "txXPathTreeWalker.h"
|
|
|
|
bool txNodeTypeTest::matches(const txXPathNode& aNode,
|
|
txIMatchContext* aContext)
|
|
{
|
|
switch (mNodeType) {
|
|
case COMMENT_TYPE:
|
|
{
|
|
return txXPathNodeUtils::isComment(aNode);
|
|
}
|
|
case TEXT_TYPE:
|
|
{
|
|
return txXPathNodeUtils::isText(aNode) &&
|
|
!aContext->isStripSpaceAllowed(aNode);
|
|
}
|
|
case PI_TYPE:
|
|
{
|
|
return txXPathNodeUtils::isProcessingInstruction(aNode) &&
|
|
(!mNodeName ||
|
|
txXPathNodeUtils::localNameEquals(aNode, mNodeName));
|
|
}
|
|
case NODE_TYPE:
|
|
{
|
|
return !txXPathNodeUtils::isText(aNode) ||
|
|
!aContext->isStripSpaceAllowed(aNode);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
txNodeTest::NodeTestType
|
|
txNodeTypeTest::getType()
|
|
{
|
|
return NODETYPE_TEST;
|
|
}
|
|
|
|
/*
|
|
* Returns the default priority of this txNodeTest
|
|
*/
|
|
double txNodeTypeTest::getDefaultPriority()
|
|
{
|
|
return mNodeName ? 0 : -0.5;
|
|
}
|
|
|
|
bool
|
|
txNodeTypeTest::isSensitiveTo(Expr::ContextSensitivity aContext)
|
|
{
|
|
return !!(aContext & Expr::NODE_CONTEXT);
|
|
}
|
|
|
|
#ifdef TX_TO_STRING
|
|
void
|
|
txNodeTypeTest::toString(nsAString& aDest)
|
|
{
|
|
switch (mNodeType) {
|
|
case COMMENT_TYPE:
|
|
aDest.AppendLiteral("comment()");
|
|
break;
|
|
case TEXT_TYPE:
|
|
aDest.AppendLiteral("text()");
|
|
break;
|
|
case PI_TYPE:
|
|
aDest.AppendLiteral("processing-instruction(");
|
|
if (mNodeName) {
|
|
nsAutoString str;
|
|
mNodeName->ToString(str);
|
|
aDest.Append(char16_t('\''));
|
|
aDest.Append(str);
|
|
aDest.Append(char16_t('\''));
|
|
}
|
|
aDest.Append(char16_t(')'));
|
|
break;
|
|
case NODE_TYPE:
|
|
aDest.AppendLiteral("node()");
|
|
break;
|
|
}
|
|
}
|
|
#endif
|