mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-15 08:53:07 +09:00
parent
9220996e92
commit
9d8343e19c
16 changed files with 330 additions and 205 deletions
|
|
@ -164,16 +164,23 @@ mozInlineSpellStatus::InitForEditorChange(
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (cmpResult < 0) {
|
||||
// previous anchor node is before the current anchor
|
||||
rv = mRange->SetStart(aPreviousNode, aPreviousOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mRange->SetEnd(aAnchorNode, aAnchorOffset);
|
||||
nsCOMPtr<nsINode> previousNode = do_QueryInterface(aPreviousNode);
|
||||
nsCOMPtr<nsINode> anchorNode = do_QueryInterface(aAnchorNode);
|
||||
rv = mRange->SetStartAndEnd(previousNode, aPreviousOffset,
|
||||
anchorNode, aAnchorOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
} else {
|
||||
// previous anchor node is after (or the same as) the current anchor
|
||||
rv = mRange->SetStart(aAnchorNode, aAnchorOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mRange->SetEnd(aPreviousNode, aPreviousOffset);
|
||||
nsCOMPtr<nsINode> previousNode = do_QueryInterface(aPreviousNode);
|
||||
nsCOMPtr<nsINode> anchorNode = do_QueryInterface(aAnchorNode);
|
||||
rv = mRange->SetStartAndEnd(anchorNode, aAnchorOffset,
|
||||
previousNode, aPreviousOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// On insert save this range: DoSpellCheck optimizes things in this range.
|
||||
// Otherwise, just leave this nullptr.
|
||||
|
|
@ -454,17 +461,19 @@ mozInlineSpellStatus::GetDocument(nsIDOMDocument** aDocument)
|
|||
|
||||
nsresult
|
||||
mozInlineSpellStatus::PositionToCollapsedRange(nsIDOMDocument* aDocument,
|
||||
nsIDOMNode* aNode, int32_t aOffset, nsIDOMRange** aRange)
|
||||
nsIDOMNode* aNode,
|
||||
int32_t aOffset,
|
||||
nsRange** aRange)
|
||||
{
|
||||
*aRange = nullptr;
|
||||
nsCOMPtr<nsIDOMRange> range;
|
||||
nsresult rv = aDocument->CreateRange(getter_AddRefs(range));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> documentNode = do_QueryInterface(aDocument);
|
||||
RefPtr<nsRange> range = new nsRange(documentNode);
|
||||
|
||||
rv = range->SetStart(aNode, aOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = range->SetEnd(aNode, aOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
|
||||
nsresult rv = range->CollapseTo(node, aOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
range.swap(*aRange);
|
||||
return NS_OK;
|
||||
|
|
@ -1164,9 +1173,8 @@ mozInlineSpellChecker::MakeSpellCheckRange(
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
NS_ENSURE_TRUE(doc, NS_ERROR_FAILURE);
|
||||
|
||||
nsCOMPtr<nsIDOMRange> range;
|
||||
rv = doc->CreateRange(getter_AddRefs(range));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> documentNode = do_QueryInterface(doc);
|
||||
RefPtr<nsRange> range = new nsRange(documentNode);
|
||||
|
||||
// possibly use full range of the editor
|
||||
nsCOMPtr<nsIDOMElement> rootElem;
|
||||
|
|
@ -1198,15 +1206,23 @@ mozInlineSpellChecker::MakeSpellCheckRange(
|
|||
if (aStartNode == aEndNode && aStartOffset == aEndOffset)
|
||||
return NS_OK;
|
||||
|
||||
rv = range->SetStart(aStartNode, aStartOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (aEndOffset)
|
||||
rv = range->SetEnd(aEndNode, aEndOffset);
|
||||
else
|
||||
rv = range->SetEndAfter(aEndNode);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> startNode = do_QueryInterface(aStartNode);
|
||||
nsCOMPtr<nsINode> endNode = do_QueryInterface(aEndNode);
|
||||
if (aEndOffset) {
|
||||
rv = range->SetStartAndEnd(startNode, aStartOffset, endNode, aEndOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
} else {
|
||||
int32_t endOffset = -1;
|
||||
endNode = nsRange::GetParentAndOffsetAfter(endNode, &endOffset);
|
||||
rv = range->SetStartAndEnd(startNode, aStartOffset, endNode, endOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
*aRange = static_cast<nsRange*>(range.forget().take());
|
||||
range.swap(*aRange);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ public:
|
|||
// (such as for the intial check of everything).
|
||||
//
|
||||
// For mOp == eOpNavigation, this is the NEW position of the cursor
|
||||
nsCOMPtr<nsIDOMRange> mAnchorRange;
|
||||
RefPtr<nsRange> mAnchorRange;
|
||||
|
||||
// -----
|
||||
// The following members are only for navigation events and are only
|
||||
|
|
@ -93,7 +93,7 @@ public:
|
|||
// -----
|
||||
|
||||
// this is the OLD position of the cursor
|
||||
nsCOMPtr<nsIDOMRange> mOldNavigationAnchorRange;
|
||||
RefPtr<nsRange> mOldNavigationAnchorRange;
|
||||
|
||||
// Set when we should force checking the current word. See
|
||||
// mozInlineSpellChecker::HandleNavigationEvent for a description of why we
|
||||
|
|
@ -111,7 +111,7 @@ protected:
|
|||
nsresult GetDocument(nsIDOMDocument** aDocument);
|
||||
nsresult PositionToCollapsedRange(nsIDOMDocument* aDocument,
|
||||
nsIDOMNode* aNode, int32_t aOffset,
|
||||
nsIDOMRange** aRange);
|
||||
nsRange** aRange);
|
||||
};
|
||||
|
||||
class mozInlineSpellChecker final : public nsIInlineSpellChecker,
|
||||
|
|
|
|||
|
|
@ -336,9 +336,11 @@ mozInlineSpellWordUtil::MakeRange(NodeOffset aBegin, NodeOffset aEnd,
|
|||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
RefPtr<nsRange> range = new nsRange(aBegin.mNode);
|
||||
nsresult rv = range->Set(aBegin.mNode, aBegin.mOffset,
|
||||
aEnd.mNode, aEnd.mOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = range->SetStartAndEnd(aBegin.mNode, aBegin.mOffset,
|
||||
aEnd.mNode, aEnd.mOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
range.forget(aRange);
|
||||
|
||||
return NS_OK;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue