Bug 1004522 part 13 - Clean up nsWSRunObject::GetAsciiWSBounds; r=ehsan

This commit is contained in:
Aryeh Gregor 2014-05-02 15:15:27 +03:00
Родитель bce8f0f030
Коммит e186271f6e
2 изменённых файлов: 42 добавлений и 70 удалений

Просмотреть файл

@ -1251,11 +1251,12 @@ nsWSRunObject::PrepareToDeleteRangePriv(nsWSRunObject* aEndObject)
WSPoint point = GetCharBefore(mNode, mOffset); WSPoint point = GetCharBefore(mNode, mOffset);
if (point.mTextNode && nsCRT::IsAsciiSpace(point.mChar)) if (point.mTextNode && nsCRT::IsAsciiSpace(point.mChar))
{ {
nsCOMPtr<nsIDOMNode> wsStartNode, wsEndNode; nsCOMPtr<Text> wsStartNode, wsEndNode;
int32_t wsStartOffset, wsEndOffset; int32_t wsStartOffset, wsEndOffset;
GetAsciiWSBounds(eBoth, GetAsDOMNode(mNode), mOffset, address_of(wsStartNode), GetAsciiWSBounds(eBoth, mNode, mOffset,
&wsStartOffset, address_of(wsEndNode), &wsEndOffset); getter_AddRefs(wsStartNode), &wsStartOffset,
point.mTextNode = do_QueryInterface(wsStartNode); getter_AddRefs(wsEndNode), &wsEndOffset);
point.mTextNode = wsStartNode;
point.mOffset = wsStartOffset; point.mOffset = wsStartOffset;
res = ConvertToNBSP(point, eOutsideUserSelectAll); res = ConvertToNBSP(point, eOutsideUserSelectAll);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
@ -1295,11 +1296,12 @@ nsWSRunObject::PrepareToSplitAcrossBlocksPriv()
WSPoint point = GetCharBefore(mNode, mOffset); WSPoint point = GetCharBefore(mNode, mOffset);
if (point.mTextNode && nsCRT::IsAsciiSpace(point.mChar)) if (point.mTextNode && nsCRT::IsAsciiSpace(point.mChar))
{ {
nsCOMPtr<nsIDOMNode> wsStartNode, wsEndNode; nsCOMPtr<Text> wsStartNode, wsEndNode;
int32_t wsStartOffset, wsEndOffset; int32_t wsStartOffset, wsEndOffset;
GetAsciiWSBounds(eBoth, GetAsDOMNode(mNode), mOffset, address_of(wsStartNode), GetAsciiWSBounds(eBoth, mNode, mOffset,
&wsStartOffset, address_of(wsEndNode), &wsEndOffset); getter_AddRefs(wsStartNode), &wsStartOffset,
point.mTextNode = do_QueryInterface(wsStartNode); getter_AddRefs(wsEndNode), &wsEndOffset);
point.mTextNode = wsStartNode;
point.mOffset = wsStartOffset; point.mOffset = wsStartOffset;
res = ConvertToNBSP(point); res = ConvertToNBSP(point);
NS_ENSURE_SUCCESS(res, res); NS_ENSURE_SUCCESS(res, res);
@ -1532,80 +1534,53 @@ nsWSRunObject::GetAsciiWSBounds(int16_t aDir, nsINode* aNode, int32_t aOffset,
nsIContent** outStartNode, int32_t* outStartOffset, nsIContent** outStartNode, int32_t* outStartOffset,
nsIContent** outEndNode, int32_t* outEndOffset) nsIContent** outEndNode, int32_t* outEndOffset)
{ {
nsCOMPtr<nsIDOMNode> outStartDOMNode, outEndDOMNode; MOZ_ASSERT(aNode && outStartNode && outStartOffset && outEndNode &&
GetAsciiWSBounds(aDir, GetAsDOMNode(aNode), aOffset, outEndOffset);
address_of(outStartDOMNode), outStartOffset,
address_of(outEndDOMNode), outEndOffset);
nsCOMPtr<nsIContent> start(do_QueryInterface(outStartDOMNode));
nsCOMPtr<nsIContent> end(do_QueryInterface(outEndDOMNode));
start.forget(outStartNode);
end.forget(outEndNode);
}
void nsCOMPtr<Text> startNode, endNode;
nsWSRunObject::GetAsciiWSBounds(int16_t aDir, nsIDOMNode *aNode, int32_t aOffset, int32_t startOffset = 0, endOffset = 0;
nsCOMPtr<nsIDOMNode> *outStartNode, int32_t *outStartOffset,
nsCOMPtr<nsIDOMNode> *outEndNode, int32_t *outEndOffset)
{
MOZ_ASSERT(aNode && outStartNode && outEndNode);
nsCOMPtr<nsIDOMNode> startNode, endNode; if (aDir & eAfter) {
int32_t startOffset=0, endOffset=0; WSPoint point = GetCharAfter(aNode, aOffset);
nsCOMPtr<nsINode> node(do_QueryInterface(aNode));
if (aDir & eAfter)
{
WSPoint point = GetCharAfter(node, aOffset);
if (point.mTextNode) { if (point.mTextNode) {
// we found a text node, at least // We found a text node, at least
endNode = do_QueryInterface(point.mTextNode); startNode = endNode = point.mTextNode;
endOffset = point.mOffset; startOffset = endOffset = point.mOffset;
startNode = endNode;
startOffset = endOffset; // Scan ahead to end of ASCII ws
for (; nsCRT::IsAsciiSpace(point.mChar) && point.mTextNode;
// scan ahead to end of ascii ws point = GetCharAfter(point)) {
while (nsCRT::IsAsciiSpace(point.mChar)) endNode = point.mTextNode;
{ // endOffset is _after_ ws
endNode = do_QueryInterface(point.mTextNode); point.mOffset++;
point.mOffset++; // endOffset is _after_ ws
endOffset = point.mOffset; endOffset = point.mOffset;
point = GetCharAfter(point);
if (!point.mTextNode) {
break;
}
} }
} }
} }
if (aDir & eBefore) if (aDir & eBefore) {
{ WSPoint point = GetCharBefore(aNode, aOffset);
WSPoint point = GetCharBefore(node, aOffset);
if (point.mTextNode) { if (point.mTextNode) {
// we found a text node, at least // We found a text node, at least
startNode = do_QueryInterface(point.mTextNode); startNode = point.mTextNode;
startOffset = point.mOffset+1; startOffset = point.mOffset + 1;
if (!endNode) if (!endNode) {
{
endNode = startNode; endNode = startNode;
endOffset = startOffset; endOffset = startOffset;
} }
// scan back to start of ascii ws // Scan back to start of ASCII ws
while (nsCRT::IsAsciiSpace(point.mChar)) for (; nsCRT::IsAsciiSpace(point.mChar) && point.mTextNode;
{ point = GetCharBefore(point)) {
startNode = do_QueryInterface(point.mTextNode); startNode = point.mTextNode;
startOffset = point.mOffset; startOffset = point.mOffset;
point = GetCharBefore(point);
if (!point.mTextNode) {
break;
}
} }
} }
} }
*outStartNode = startNode; startNode.forget(outStartNode);
*outStartOffset = startOffset; *outStartOffset = startOffset;
*outEndNode = endNode; endNode.forget(outEndNode);
*outEndOffset = endOffset; *outEndOffset = endOffset;
} }

Просмотреть файл

@ -339,9 +339,6 @@ class MOZ_STACK_CLASS nsWSRunObject
int32_t* outStartOffset, int32_t* outStartOffset,
nsIContent** outEndNode, nsIContent** outEndNode,
int32_t* outEndOffset); int32_t* outEndOffset);
void GetAsciiWSBounds(int16_t aDir, nsIDOMNode *aNode, int32_t aOffset,
nsCOMPtr<nsIDOMNode> *outStartNode, int32_t *outStartOffset,
nsCOMPtr<nsIDOMNode> *outEndNode, int32_t *outEndOffset);
void FindRun(nsINode* aNode, int32_t aOffset, WSFragment** outRun, void FindRun(nsINode* aNode, int32_t aOffset, WSFragment** outRun,
bool after); bool after);
char16_t GetCharAt(nsIContent *aTextNode, int32_t aOffset); char16_t GetCharAt(nsIContent *aTextNode, int32_t aOffset);