summaryrefslogtreecommitdiffstats
path: root/dom/xslt/xslt/txInstructions.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/xslt/xslt/txInstructions.h')
-rw-r--r--dom/xslt/xslt/txInstructions.h362
1 files changed, 362 insertions, 0 deletions
diff --git a/dom/xslt/xslt/txInstructions.h b/dom/xslt/xslt/txInstructions.h
new file mode 100644
index 0000000000..5324303704
--- /dev/null
+++ b/dom/xslt/xslt/txInstructions.h
@@ -0,0 +1,362 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+#ifndef TRANSFRMX_TXINSTRUCTIONS_H
+#define TRANSFRMX_TXINSTRUCTIONS_H
+
+#include "mozilla/UniquePtr.h"
+#include "nsCOMPtr.h"
+#include "txCore.h"
+#include "nsString.h"
+#include "txXMLUtils.h"
+#include "txExpandedName.h"
+#include "txNamespaceMap.h"
+#include "txXSLTNumber.h"
+#include "nsTArray.h"
+
+class nsAtom;
+class txExecutionState;
+
+class txInstruction : public txObject {
+ public:
+ MOZ_COUNTED_DEFAULT_CTOR(txInstruction)
+
+ ~txInstruction() override {
+ MOZ_COUNT_DTOR(txInstruction);
+
+ mozilla::UniquePtr<txInstruction> next(std::move(mNext));
+ while (next) {
+ mozilla::UniquePtr<txInstruction> destroy(std::move(next));
+ next = std::move(destroy->mNext);
+ }
+ }
+
+ virtual nsresult execute(txExecutionState& aEs) = 0;
+
+ mozilla::UniquePtr<txInstruction> mNext;
+};
+
+#define TX_DECL_TXINSTRUCTION \
+ virtual nsresult execute(txExecutionState& aEs) override;
+
+class txApplyDefaultElementTemplate : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txApplyImportsEnd : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txApplyImportsStart : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txApplyTemplates : public txInstruction {
+ public:
+ explicit txApplyTemplates(const txExpandedName& aMode);
+
+ TX_DECL_TXINSTRUCTION
+
+ txExpandedName mMode;
+};
+
+class txAttribute : public txInstruction {
+ public:
+ txAttribute(mozilla::UniquePtr<Expr>&& aName,
+ mozilla::UniquePtr<Expr>&& aNamespace, txNamespaceMap* aMappings);
+
+ TX_DECL_TXINSTRUCTION
+
+ mozilla::UniquePtr<Expr> mName;
+ mozilla::UniquePtr<Expr> mNamespace;
+ RefPtr<txNamespaceMap> mMappings;
+};
+
+class txCallTemplate : public txInstruction {
+ public:
+ explicit txCallTemplate(const txExpandedName& aName);
+
+ TX_DECL_TXINSTRUCTION
+
+ txExpandedName mName;
+};
+
+class txCheckParam : public txInstruction {
+ public:
+ explicit txCheckParam(const txExpandedName& aName);
+
+ TX_DECL_TXINSTRUCTION
+
+ txExpandedName mName;
+ txInstruction* mBailTarget;
+};
+
+class txConditionalGoto : public txInstruction {
+ public:
+ txConditionalGoto(mozilla::UniquePtr<Expr>&& aCondition,
+ txInstruction* aTarget);
+
+ TX_DECL_TXINSTRUCTION
+
+ mozilla::UniquePtr<Expr> mCondition;
+ txInstruction* mTarget;
+};
+
+class txComment : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txCopyBase : public txInstruction {
+ protected:
+ nsresult copyNode(const txXPathNode& aNode, txExecutionState& aEs);
+};
+
+class txCopy : public txCopyBase {
+ public:
+ txCopy();
+
+ TX_DECL_TXINSTRUCTION
+
+ txInstruction* mBailTarget;
+};
+
+class txCopyOf : public txCopyBase {
+ public:
+ explicit txCopyOf(mozilla::UniquePtr<Expr>&& aSelect);
+
+ TX_DECL_TXINSTRUCTION
+
+ mozilla::UniquePtr<Expr> mSelect;
+};
+
+class txEndElement : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txErrorInstruction : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txGoTo : public txInstruction {
+ public:
+ explicit txGoTo(txInstruction* aTarget);
+
+ TX_DECL_TXINSTRUCTION
+
+ txInstruction* mTarget;
+};
+
+class txInsertAttrSet : public txInstruction {
+ public:
+ explicit txInsertAttrSet(const txExpandedName& aName);
+
+ TX_DECL_TXINSTRUCTION
+
+ txExpandedName mName;
+};
+
+class txLoopNodeSet : public txInstruction {
+ public:
+ explicit txLoopNodeSet(txInstruction* aTarget);
+
+ TX_DECL_TXINSTRUCTION
+
+ txInstruction* mTarget;
+};
+
+class txLREAttribute : public txInstruction {
+ public:
+ txLREAttribute(int32_t aNamespaceID, nsAtom* aLocalName, nsAtom* aPrefix,
+ mozilla::UniquePtr<Expr>&& aValue);
+
+ TX_DECL_TXINSTRUCTION
+
+ int32_t mNamespaceID;
+ RefPtr<nsAtom> mLocalName;
+ RefPtr<nsAtom> mLowercaseLocalName;
+ RefPtr<nsAtom> mPrefix;
+ mozilla::UniquePtr<Expr> mValue;
+};
+
+class txMessage : public txInstruction {
+ public:
+ explicit txMessage(bool aTerminate);
+
+ TX_DECL_TXINSTRUCTION
+
+ bool mTerminate;
+};
+
+class txNumber : public txInstruction {
+ public:
+ txNumber(txXSLTNumber::LevelType aLevel,
+ mozilla::UniquePtr<txPattern>&& aCount,
+ mozilla::UniquePtr<txPattern>&& aFrom,
+ mozilla::UniquePtr<Expr>&& aValue,
+ mozilla::UniquePtr<Expr>&& aFormat,
+ mozilla::UniquePtr<Expr>&& aGroupingSeparator,
+ mozilla::UniquePtr<Expr>&& aGroupingSize);
+
+ TX_DECL_TXINSTRUCTION
+
+ txXSLTNumber::LevelType mLevel;
+ mozilla::UniquePtr<txPattern> mCount;
+ mozilla::UniquePtr<txPattern> mFrom;
+ mozilla::UniquePtr<Expr> mValue;
+ mozilla::UniquePtr<Expr> mFormat;
+ mozilla::UniquePtr<Expr> mGroupingSeparator;
+ mozilla::UniquePtr<Expr> mGroupingSize;
+};
+
+class txPopParams : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txProcessingInstruction : public txInstruction {
+ public:
+ explicit txProcessingInstruction(mozilla::UniquePtr<Expr>&& aName);
+
+ TX_DECL_TXINSTRUCTION
+
+ mozilla::UniquePtr<Expr> mName;
+};
+
+class txPushNewContext : public txInstruction {
+ public:
+ explicit txPushNewContext(mozilla::UniquePtr<Expr>&& aSelect);
+ ~txPushNewContext();
+
+ TX_DECL_TXINSTRUCTION
+
+ void addSort(mozilla::UniquePtr<Expr>&& aSelectExpr,
+ mozilla::UniquePtr<Expr>&& aLangExpr,
+ mozilla::UniquePtr<Expr>&& aDataTypeExpr,
+ mozilla::UniquePtr<Expr>&& aOrderExpr,
+ mozilla::UniquePtr<Expr>&& aCaseOrderExpr);
+
+ struct SortKey {
+ mozilla::UniquePtr<Expr> mSelectExpr;
+ mozilla::UniquePtr<Expr> mLangExpr;
+ mozilla::UniquePtr<Expr> mDataTypeExpr;
+ mozilla::UniquePtr<Expr> mOrderExpr;
+ mozilla::UniquePtr<Expr> mCaseOrderExpr;
+ };
+
+ nsTArray<SortKey> mSortKeys;
+ mozilla::UniquePtr<Expr> mSelect;
+ txInstruction* mBailTarget;
+};
+
+class txPushNullTemplateRule : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txPushParams : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txPushRTFHandler : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txPushStringHandler : public txInstruction {
+ public:
+ explicit txPushStringHandler(bool aOnlyText);
+
+ TX_DECL_TXINSTRUCTION
+
+ bool mOnlyText;
+};
+
+class txRemoveVariable : public txInstruction {
+ public:
+ explicit txRemoveVariable(const txExpandedName& aName);
+
+ TX_DECL_TXINSTRUCTION
+
+ txExpandedName mName;
+};
+
+class txReturn : public txInstruction {
+ public:
+ TX_DECL_TXINSTRUCTION
+};
+
+class txSetParam : public txInstruction {
+ public:
+ txSetParam(const txExpandedName& aName, mozilla::UniquePtr<Expr>&& aValue);
+
+ TX_DECL_TXINSTRUCTION
+
+ txExpandedName mName;
+ mozilla::UniquePtr<Expr> mValue;
+};
+
+class txSetVariable : public txInstruction {
+ public:
+ txSetVariable(const txExpandedName& aName, mozilla::UniquePtr<Expr>&& aValue);
+
+ TX_DECL_TXINSTRUCTION
+
+ txExpandedName mName;
+ mozilla::UniquePtr<Expr> mValue;
+};
+
+class txStartElement : public txInstruction {
+ public:
+ txStartElement(mozilla::UniquePtr<Expr>&& aName,
+ mozilla::UniquePtr<Expr>&& aNamespace,
+ txNamespaceMap* aMappings);
+
+ TX_DECL_TXINSTRUCTION
+
+ mozilla::UniquePtr<Expr> mName;
+ mozilla::UniquePtr<Expr> mNamespace;
+ RefPtr<txNamespaceMap> mMappings;
+};
+
+class txStartLREElement : public txInstruction {
+ public:
+ txStartLREElement(int32_t aNamespaceID, nsAtom* aLocalName, nsAtom* aPrefix);
+
+ TX_DECL_TXINSTRUCTION
+
+ int32_t mNamespaceID;
+ RefPtr<nsAtom> mLocalName;
+ RefPtr<nsAtom> mLowercaseLocalName;
+ RefPtr<nsAtom> mPrefix;
+};
+
+class txText : public txInstruction {
+ public:
+ txText(const nsAString& aStr, bool aDOE);
+
+ TX_DECL_TXINSTRUCTION
+
+ nsString mStr;
+ bool mDOE;
+};
+
+class txValueOf : public txInstruction {
+ public:
+ txValueOf(mozilla::UniquePtr<Expr>&& aExpr, bool aDOE);
+
+ TX_DECL_TXINSTRUCTION
+
+ mozilla::UniquePtr<Expr> mExpr;
+ bool mDOE;
+};
+
+#endif // TRANSFRMX_TXINSTRUCTIONS_H