mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 1010760 - Add nsINode::GetAsText; r=smaug
This commit is contained in:
parent
93bf3f1a27
commit
91963e0976
@ -74,6 +74,7 @@ class Element;
|
|||||||
class EventHandlerNonNull;
|
class EventHandlerNonNull;
|
||||||
class OnErrorEventHandlerNonNull;
|
class OnErrorEventHandlerNonNull;
|
||||||
template<typename T> class Optional;
|
template<typename T> class Optional;
|
||||||
|
class Text;
|
||||||
class TextOrElementOrDocument;
|
class TextOrElementOrDocument;
|
||||||
struct DOMPointInit;
|
struct DOMPointInit;
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
@ -426,6 +427,13 @@ public:
|
|||||||
return const_cast<nsINode*>(this)->AsContent();
|
return const_cast<nsINode*>(this)->AsContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return this node as Text if it is one, otherwise null. This is defined
|
||||||
|
* inline in Text.h.
|
||||||
|
*/
|
||||||
|
mozilla::dom::Text* GetAsText();
|
||||||
|
const mozilla::dom::Text* GetAsText() const;
|
||||||
|
|
||||||
virtual nsIDOMNode* AsDOMNode() = 0;
|
virtual nsIDOMNode* AsDOMNode() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,4 +40,16 @@ public:
|
|||||||
} // namespace dom
|
} // namespace dom
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
||||||
|
inline mozilla::dom::Text* nsINode::GetAsText()
|
||||||
|
{
|
||||||
|
return IsNodeOfType(eTEXT) ? static_cast<mozilla::dom::Text*>(this)
|
||||||
|
: nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const mozilla::dom::Text* nsINode::GetAsText() const
|
||||||
|
{
|
||||||
|
return IsNodeOfType(eTEXT) ? static_cast<const mozilla::dom::Text*>(this)
|
||||||
|
: nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // mozilla_dom_Text_h
|
#endif // mozilla_dom_Text_h
|
||||||
|
@ -628,8 +628,7 @@ nsWSRunObject::GetWSNodes()
|
|||||||
nsCOMPtr<nsINode> wsBoundingParent = GetWSBoundingParent();
|
nsCOMPtr<nsINode> wsBoundingParent = GetWSBoundingParent();
|
||||||
|
|
||||||
// first look backwards to find preceding ws nodes
|
// first look backwards to find preceding ws nodes
|
||||||
if (mNode->IsNodeOfType(nsINode::eTEXT)) {
|
if (nsRefPtr<Text> textNode = mNode->GetAsText()) {
|
||||||
nsRefPtr<Text> textNode(static_cast<Text*>(mNode.get()));
|
|
||||||
const nsTextFragment* textFrag = textNode->GetText();
|
const nsTextFragment* textFrag = textNode->GetText();
|
||||||
|
|
||||||
mNodeArray.InsertElementAt(0, textNode);
|
mNodeArray.InsertElementAt(0, textNode);
|
||||||
@ -675,8 +674,7 @@ nsWSRunObject::GetWSNodes()
|
|||||||
mStartOffset = start.offset;
|
mStartOffset = start.offset;
|
||||||
mStartReason = WSType::otherBlock;
|
mStartReason = WSType::otherBlock;
|
||||||
mStartReasonNode = priorNode;
|
mStartReasonNode = priorNode;
|
||||||
} else if (priorNode->IsNodeOfType(nsINode::eTEXT)) {
|
} else if (nsRefPtr<Text> textNode = priorNode->GetAsText()) {
|
||||||
nsRefPtr<Text> textNode(static_cast<Text*>(priorNode.get()));
|
|
||||||
mNodeArray.InsertElementAt(0, textNode);
|
mNodeArray.InsertElementAt(0, textNode);
|
||||||
const nsTextFragment *textFrag;
|
const nsTextFragment *textFrag;
|
||||||
if (!textNode || !(textFrag = textNode->GetText())) {
|
if (!textNode || !(textFrag = textNode->GetText())) {
|
||||||
@ -738,9 +736,8 @@ nsWSRunObject::GetWSNodes()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// then look ahead to find following ws nodes
|
// then look ahead to find following ws nodes
|
||||||
if (mNode->IsNodeOfType(nsINode::eTEXT)) {
|
if (nsRefPtr<Text> textNode = mNode->GetAsText()) {
|
||||||
// don't need to put it on list. it already is from code above
|
// don't need to put it on list. it already is from code above
|
||||||
nsRefPtr<Text> textNode(static_cast<Text*>(mNode.get()));
|
|
||||||
const nsTextFragment *textFrag = textNode->GetText();
|
const nsTextFragment *textFrag = textNode->GetText();
|
||||||
|
|
||||||
uint32_t len = textNode->TextLength();
|
uint32_t len = textNode->TextLength();
|
||||||
@ -786,8 +783,7 @@ nsWSRunObject::GetWSNodes()
|
|||||||
mEndOffset = end.offset;
|
mEndOffset = end.offset;
|
||||||
mEndReason = WSType::otherBlock;
|
mEndReason = WSType::otherBlock;
|
||||||
mEndReasonNode = nextNode;
|
mEndReasonNode = nextNode;
|
||||||
} else if (nextNode->IsNodeOfType(nsINode::eTEXT)) {
|
} else if (nsRefPtr<Text> textNode = nextNode->GetAsText()) {
|
||||||
nsRefPtr<Text> textNode(static_cast<Text*>(nextNode.get()));
|
|
||||||
mNodeArray.AppendElement(textNode);
|
mNodeArray.AppendElement(textNode);
|
||||||
const nsTextFragment *textFrag;
|
const nsTextFragment *textFrag;
|
||||||
if (!textNode || !(textFrag = textNode->GetText())) {
|
if (!textNode || !(textFrag = textNode->GetText())) {
|
||||||
@ -1342,8 +1338,8 @@ nsWSRunObject::DeleteChars(nsINode* aStartNode, int32_t aStartOffset,
|
|||||||
idx = 0;
|
idx = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aStartNode == aEndNode && aStartNode->IsNodeOfType(nsINode::eTEXT)) {
|
if (aStartNode == aEndNode && aStartNode->GetAsText()) {
|
||||||
return mHTMLEditor->DeleteText(static_cast<Text*>(aStartNode),
|
return mHTMLEditor->DeleteText(aStartNode->GetAsText(),
|
||||||
(uint32_t)aStartOffset, (uint32_t)(aEndOffset - aStartOffset));
|
(uint32_t)aStartOffset, (uint32_t)(aEndOffset - aStartOffset));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user