michael@0: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "txExpr.h" michael@0: michael@0: nsresult michael@0: txLiteralExpr::evaluate(txIEvalContext* aContext, txAExprResult** aResult) michael@0: { michael@0: NS_ENSURE_TRUE(mValue, NS_ERROR_OUT_OF_MEMORY); michael@0: michael@0: *aResult = mValue; michael@0: NS_ADDREF(*aResult); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: static Expr::ResultType resultTypes[] = michael@0: { michael@0: Expr::NODESET_RESULT, // NODESET michael@0: Expr::BOOLEAN_RESULT, // BOOLEAN michael@0: Expr::NUMBER_RESULT, // NUMBER michael@0: Expr::STRING_RESULT, // STRING michael@0: Expr::RTF_RESULT // RESULT_TREE_FRAGMENT michael@0: }; michael@0: michael@0: Expr::ResultType michael@0: txLiteralExpr::getReturnType() michael@0: { michael@0: return resultTypes[mValue->getResultType()]; michael@0: } michael@0: michael@0: Expr* michael@0: txLiteralExpr::getSubExprAt(uint32_t aPos) michael@0: { michael@0: return nullptr; michael@0: } michael@0: void michael@0: txLiteralExpr::setSubExprAt(uint32_t aPos, Expr* aExpr) michael@0: { michael@0: NS_NOTREACHED("setting bad subexpression index"); michael@0: } michael@0: michael@0: bool michael@0: txLiteralExpr::isSensitiveTo(ContextSensitivity aContext) michael@0: { michael@0: return false; michael@0: } michael@0: michael@0: #ifdef TX_TO_STRING michael@0: void michael@0: txLiteralExpr::toString(nsAString& aStr) michael@0: { michael@0: switch (mValue->getResultType()) { michael@0: case txAExprResult::NODESET: michael@0: { michael@0: aStr.AppendLiteral(" { Nodeset literal } "); michael@0: return; michael@0: } michael@0: case txAExprResult::BOOLEAN: michael@0: { michael@0: if (mValue->booleanValue()) { michael@0: aStr.AppendLiteral("true()"); michael@0: } michael@0: else { michael@0: aStr.AppendLiteral("false()"); michael@0: } michael@0: return; michael@0: } michael@0: case txAExprResult::NUMBER: michael@0: { michael@0: txDouble::toString(mValue->numberValue(), aStr); michael@0: return; michael@0: } michael@0: case txAExprResult::STRING: michael@0: { michael@0: StringResult* strRes = michael@0: static_cast(static_cast michael@0: (mValue)); michael@0: char16_t ch = '\''; michael@0: if (strRes->mValue.FindChar(ch) != kNotFound) { michael@0: ch = '\"'; michael@0: } michael@0: aStr.Append(ch); michael@0: aStr.Append(strRes->mValue); michael@0: aStr.Append(ch); michael@0: return; michael@0: } michael@0: case txAExprResult::RESULT_TREE_FRAGMENT: michael@0: { michael@0: aStr.AppendLiteral(" { RTF literal } "); michael@0: return; michael@0: } michael@0: } michael@0: } michael@0: #endif