123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /* -*- Mode: C++; tab-width: 8; 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/. */
- #include "nsGkAtoms.h"
- #include "nsUnicharUtils.h"
- #include "mozilla/dom/ProcessingInstruction.h"
- #include "mozilla/dom/ProcessingInstructionBinding.h"
- #include "mozilla/dom/XMLStylesheetProcessingInstruction.h"
- #include "mozilla/IntegerPrintfMacros.h"
- #include "nsContentUtils.h"
- already_AddRefed<mozilla::dom::ProcessingInstruction>
- NS_NewXMLProcessingInstruction(nsNodeInfoManager *aNodeInfoManager,
- const nsAString& aTarget,
- const nsAString& aData)
- {
- using mozilla::dom::ProcessingInstruction;
- using mozilla::dom::XMLStylesheetProcessingInstruction;
- NS_PRECONDITION(aNodeInfoManager, "Missing nodeinfo manager");
- nsCOMPtr<nsIAtom> target = NS_Atomize(aTarget);
- MOZ_ASSERT(target);
- if (target == nsGkAtoms::xml_stylesheet) {
- RefPtr<XMLStylesheetProcessingInstruction> pi =
- new XMLStylesheetProcessingInstruction(aNodeInfoManager, aData);
- return pi.forget();
- }
- RefPtr<mozilla::dom::NodeInfo> ni;
- ni = aNodeInfoManager->GetNodeInfo(nsGkAtoms::processingInstructionTagName,
- nullptr, kNameSpaceID_None,
- nsIDOMNode::PROCESSING_INSTRUCTION_NODE,
- target);
- RefPtr<ProcessingInstruction> instance =
- new ProcessingInstruction(ni.forget(), aData);
- return instance.forget();
- }
- namespace mozilla {
- namespace dom {
- ProcessingInstruction::ProcessingInstruction(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
- const nsAString& aData)
- : nsGenericDOMDataNode(Move(aNodeInfo))
- {
- MOZ_ASSERT(mNodeInfo->NodeType() == nsIDOMNode::PROCESSING_INSTRUCTION_NODE,
- "Bad NodeType in aNodeInfo");
- SetTextInternal(0, mText.GetLength(),
- aData.BeginReading(), aData.Length(),
- false); // Don't notify (bug 420429).
- }
- ProcessingInstruction::~ProcessingInstruction()
- {
- }
- NS_IMPL_ISUPPORTS_INHERITED(ProcessingInstruction, nsGenericDOMDataNode,
- nsIDOMNode, nsIDOMCharacterData,
- nsIDOMProcessingInstruction)
- JSObject*
- ProcessingInstruction::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
- {
- return ProcessingInstructionBinding::Wrap(aCx, this, aGivenProto);
- }
- NS_IMETHODIMP
- ProcessingInstruction::GetTarget(nsAString& aTarget)
- {
- aTarget = NodeName();
- return NS_OK;
- }
- bool
- ProcessingInstruction::GetAttrValue(nsIAtom *aName, nsAString& aValue)
- {
- nsAutoString data;
- GetData(data);
- return nsContentUtils::GetPseudoAttributeValue(data, aName, aValue);
- }
- bool
- ProcessingInstruction::IsNodeOfType(uint32_t aFlags) const
- {
- return !(aFlags & ~(eCONTENT | ePROCESSING_INSTRUCTION | eDATA_NODE));
- }
- nsGenericDOMDataNode*
- ProcessingInstruction::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
- bool aCloneText) const
- {
- nsAutoString data;
- nsGenericDOMDataNode::GetData(data);
- RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
- return new ProcessingInstruction(ni.forget(), data);
- }
- #ifdef DEBUG
- void
- ProcessingInstruction::List(FILE* out, int32_t aIndent) const
- {
- int32_t index;
- for (index = aIndent; --index >= 0; ) fputs(" ", out);
- fprintf(out, "Processing instruction refcount=%" PRIuPTR "<", mRefCnt.get());
- nsAutoString tmp;
- ToCString(tmp, 0, mText.GetLength());
- tmp.Insert(nsDependentAtomString(NodeInfo()->GetExtraName()).get(), 0);
- fputs(NS_LossyConvertUTF16toASCII(tmp).get(), out);
- fputs(">\n", out);
- }
- void
- ProcessingInstruction::DumpContent(FILE* out, int32_t aIndent,
- bool aDumpAll) const
- {
- }
- #endif
- } // namespace dom
- } // namespace mozilla
|