mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 05:45:37 +00:00
cleanup and small bug fixes
This commit is contained in:
parent
85ed3b0e46
commit
f15ea6358d
@ -154,8 +154,11 @@ nsresult TypeInState::ClearProp(nsIAtom *aProp, const nsString &aAttr, const nsS
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
nsresult TypeInState::ProcessClearProperty(PropItem **outPropItem)
|
* TakeClearProperty: hands back next poroperty item on the clear list.
|
||||||
|
* caller assumes ownership of PropItem and must delete it.
|
||||||
|
*/
|
||||||
|
nsresult TypeInState::TakeClearProperty(PropItem **outPropItem)
|
||||||
{
|
{
|
||||||
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
||||||
*outPropItem = nsnull;
|
*outPropItem = nsnull;
|
||||||
@ -169,8 +172,11 @@ nsresult TypeInState::ProcessClearProperty(PropItem **outPropItem)
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
nsresult TypeInState::ProcessSetProperty(PropItem **outPropItem)
|
* TakeSetProperty: hands back next poroperty item on the set list.
|
||||||
|
* caller assumes ownership of PropItem and must delete it.
|
||||||
|
*/
|
||||||
|
nsresult TypeInState::TakeSetProperty(PropItem **outPropItem)
|
||||||
{
|
{
|
||||||
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
||||||
*outPropItem = nsnull;
|
*outPropItem = nsnull;
|
||||||
@ -271,6 +277,7 @@ PRBool TypeInState::IsPropSet(nsIAtom *aProp,
|
|||||||
const nsString &aValue,
|
const nsString &aValue,
|
||||||
PRInt32 &outIndex)
|
PRInt32 &outIndex)
|
||||||
{
|
{
|
||||||
|
// linear search. list should be short.
|
||||||
PRInt32 i, count = mSetArray.Count();
|
PRInt32 i, count = mSetArray.Count();
|
||||||
for (i=0; i<count; i++)
|
for (i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
@ -300,10 +307,11 @@ PRBool TypeInState::IsPropCleared(nsIAtom *aProp,
|
|||||||
const nsString &aValue,
|
const nsString &aValue,
|
||||||
PRInt32 &outIndex)
|
PRInt32 &outIndex)
|
||||||
{
|
{
|
||||||
PRInt32 i, count = mSetArray.Count();
|
// linear search. list should be short.
|
||||||
|
PRInt32 i, count = mClearedArray.Count();
|
||||||
for (i=0; i<count; i++)
|
for (i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
PropItem *item = (PropItem*)mSetArray[i];
|
PropItem *item = (PropItem*)mClearedArray[i];
|
||||||
if ( (item->tag == aProp) &&
|
if ( (item->tag == aProp) &&
|
||||||
(item->attr == aAttr) )
|
(item->attr == aAttr) )
|
||||||
{
|
{
|
||||||
|
@ -53,12 +53,20 @@ public:
|
|||||||
nsresult SetProp(nsIAtom *aProp);
|
nsresult SetProp(nsIAtom *aProp);
|
||||||
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr);
|
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr);
|
||||||
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
||||||
|
|
||||||
nsresult ClearProp(nsIAtom *aProp);
|
nsresult ClearProp(nsIAtom *aProp);
|
||||||
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr);
|
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr);
|
||||||
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
||||||
|
|
||||||
nsresult ProcessClearProperty(PropItem **outPropItem);
|
//**************************************************************************
|
||||||
nsresult ProcessSetProperty(PropItem **outPropItem);
|
// TakeClearProperty: hands back next poroperty item on the clear list.
|
||||||
|
// caller assumes ownership of PropItem and must delete it.
|
||||||
|
nsresult TakeClearProperty(PropItem **outPropItem);
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TakeSetProperty: hands back next poroperty item on the set list.
|
||||||
|
// caller assumes ownership of PropItem and must delete it.
|
||||||
|
nsresult TakeSetProperty(PropItem **outPropItem);
|
||||||
|
|
||||||
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp);
|
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp);
|
||||||
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp,
|
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp,
|
||||||
@ -81,5 +89,5 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // TypeInState_h__
|
#endif // TypeInState_h__
|
||||||
|
|
||||||
|
@ -313,9 +313,15 @@ NS_IMETHODIMP
|
|||||||
nsHTMLEditRules::DidDoAction(nsIDOMSelection *aSelection,
|
nsHTMLEditRules::DidDoAction(nsIDOMSelection *aSelection,
|
||||||
nsRulesInfo *aInfo, nsresult aResult)
|
nsRulesInfo *aInfo, nsresult aResult)
|
||||||
{
|
{
|
||||||
// pass thru to nsTextEditRules:
|
nsTextRulesInfo *info = NS_STATIC_CAST(nsTextRulesInfo*, aInfo);
|
||||||
nsresult res = nsTextEditRules::DidDoAction(aSelection, aInfo, aResult);
|
switch (info->action)
|
||||||
return res;
|
{
|
||||||
|
case kMakeBasicBlock:
|
||||||
|
return DidMakeBasicBlock(aSelection, aInfo, aResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
// default: pass thru to nsTextEditRules
|
||||||
|
return nsTextEditRules::DidDoAction(aSelection, aInfo, aResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1472,6 +1478,24 @@ nsHTMLEditRules::WillMakeBasicBlock(nsIDOMSelection *aSelection,
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsHTMLEditRules::DidMakeBasicBlock(nsIDOMSelection *aSelection,
|
||||||
|
nsRulesInfo *aInfo, nsresult aResult)
|
||||||
|
{
|
||||||
|
if (!aSelection) return NS_ERROR_NULL_POINTER;
|
||||||
|
// check for empty block. if so, put a moz br in it.
|
||||||
|
PRBool isCollapsed;
|
||||||
|
nsresult res = aSelection->GetIsCollapsed(&isCollapsed);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
if (!isCollapsed) return NS_OK;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDOMNode> parent;
|
||||||
|
PRInt32 offset;
|
||||||
|
res = nsEditor::GetStartNodeAndOffset(aSelection, &parent, &offset);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
res = InsertMozBRIfNeeded(parent);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsHTMLEditRules::WillIndent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool * aHandled)
|
nsHTMLEditRules::WillIndent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool * aHandled)
|
||||||
@ -1710,18 +1734,18 @@ nsHTMLEditRules::CreateStyleForInsertText(nsIDOMSelection *aSelection, nsIDOMDoc
|
|||||||
PropItem *item = nsnull;
|
PropItem *item = nsnull;
|
||||||
|
|
||||||
// process clearing any styles first
|
// process clearing any styles first
|
||||||
mEditor->mTypeInState->ProcessClearProperty(&item);
|
mEditor->mTypeInState->TakeClearProperty(&item);
|
||||||
while (item)
|
while (item)
|
||||||
{
|
{
|
||||||
res = mEditor->SplitStyleAbovePoint(&node, &offset, item->tag, &item->attr);
|
res = mEditor->SplitStyleAbovePoint(&node, &offset, item->tag, &item->attr);
|
||||||
if (NS_FAILED(res)) return res;
|
if (NS_FAILED(res)) return res;
|
||||||
// we own item now (ProcessClearProperty hands ownership to us)
|
// we own item now (TakeClearProperty hands ownership to us)
|
||||||
delete item;
|
delete item;
|
||||||
mEditor->mTypeInState->ProcessClearProperty(&item);
|
mEditor->mTypeInState->TakeClearProperty(&item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// then process setting any styles
|
// then process setting any styles
|
||||||
mEditor->mTypeInState->ProcessSetProperty(&item);
|
mEditor->mTypeInState->TakeSetProperty(&item);
|
||||||
|
|
||||||
if (item) // we have at least one style to add; make a
|
if (item) // we have at least one style to add; make a
|
||||||
{ // new text node to insert style nodes above.
|
{ // new text node to insert style nodes above.
|
||||||
@ -1750,9 +1774,9 @@ nsHTMLEditRules::CreateStyleForInsertText(nsIDOMSelection *aSelection, nsIDOMDoc
|
|||||||
{
|
{
|
||||||
res = mEditor->SetInlinePropertyOnNode(node, item->tag, &item->attr, &item->value);
|
res = mEditor->SetInlinePropertyOnNode(node, item->tag, &item->attr, &item->value);
|
||||||
if (NS_FAILED(res)) return res;
|
if (NS_FAILED(res)) return res;
|
||||||
// we own item now (ProcessSetProperty hands ownership to us)
|
// we own item now (TakeSetProperty hands ownership to us)
|
||||||
delete item;
|
delete item;
|
||||||
mEditor->mTypeInState->ProcessSetProperty(&item);
|
mEditor->mTypeInState->TakeSetProperty(&item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return aSelection->Collapse(node, offset);
|
return aSelection->Collapse(node, offset);
|
||||||
@ -2883,6 +2907,16 @@ nsHTMLEditRules::ReturnInParagraph(nsIDOMSelection *aSelection,
|
|||||||
// get rid of the break
|
// get rid of the break
|
||||||
res = mEditor->DeleteNode(sibling);
|
res = mEditor->DeleteNode(sibling);
|
||||||
if (NS_FAILED(res)) return res;
|
if (NS_FAILED(res)) return res;
|
||||||
|
// check both halves of para to see if we need mozBR
|
||||||
|
res = InsertMozBRIfNeeded(aPara);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
res = mEditor->GetPriorHTMLSibling(aPara, &sibling);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
if (sibling && nsHTMLEditUtils::IsParagraph(sibling))
|
||||||
|
{
|
||||||
|
res = InsertMozBRIfNeeded(sibling);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
}
|
||||||
// position selection inside right hand para
|
// position selection inside right hand para
|
||||||
res = aSelection->Collapse(aPara,0);
|
res = aSelection->Collapse(aPara,0);
|
||||||
}
|
}
|
||||||
@ -4255,7 +4289,22 @@ nsHTMLEditRules::IsDescendantOfBody(nsIDOMNode *inNode)
|
|||||||
return PR_FALSE;
|
return PR_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
nsHTMLEditRules::InsertMozBRIfNeeded(nsIDOMNode *aNode)
|
||||||
|
{
|
||||||
|
if (!aNode) return NS_ERROR_NULL_POINTER;
|
||||||
|
if (!mEditor->IsBlockNode(aNode)) return NS_OK;
|
||||||
|
|
||||||
|
PRBool isEmpty;
|
||||||
|
nsCOMPtr<nsIDOMNode> brNode;
|
||||||
|
nsresult res = IsEmptyNode(aNode, &isEmpty);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
if (isEmpty)
|
||||||
|
{
|
||||||
|
res = CreateMozBR(aNode, 0, &brNode);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef XP_MAC
|
#ifdef XP_MAC
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
@ -95,6 +95,7 @@ protected:
|
|||||||
nsresult WillOutdent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool *aHandled);
|
nsresult WillOutdent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool *aHandled);
|
||||||
nsresult WillAlign(nsIDOMSelection *aSelection, const nsString *alignType, PRBool *aCancel, PRBool *aHandled);
|
nsresult WillAlign(nsIDOMSelection *aSelection, const nsString *alignType, PRBool *aCancel, PRBool *aHandled);
|
||||||
nsresult WillMakeBasicBlock(nsIDOMSelection *aSelection, const nsString *aBlockType, PRBool *aCancel, PRBool *aHandled);
|
nsresult WillMakeBasicBlock(nsIDOMSelection *aSelection, const nsString *aBlockType, PRBool *aCancel, PRBool *aHandled);
|
||||||
|
nsresult DidMakeBasicBlock(nsIDOMSelection *aSelection, nsRulesInfo *aInfo, nsresult aResult);
|
||||||
|
|
||||||
nsresult AlignTableElement(nsIDOMNode *aNode, const nsString *alignType);
|
nsresult AlignTableElement(nsIDOMNode *aNode, const nsString *alignType);
|
||||||
nsresult AlignTableCellContents(nsIDOMNode *aNode, const nsString *alignType);
|
nsresult AlignTableCellContents(nsIDOMNode *aNode, const nsString *alignType);
|
||||||
@ -160,7 +161,8 @@ protected:
|
|||||||
nsresult ConvertWhitespace(const nsString & inString, nsString & outString);
|
nsresult ConvertWhitespace(const nsString & inString, nsString & outString);
|
||||||
nsresult ConfirmSelectionInBody();
|
nsresult ConfirmSelectionInBody();
|
||||||
|
|
||||||
PRBool IsDescendantOfBody(nsIDOMNode *inNode) ;
|
PRBool IsDescendantOfBody(nsIDOMNode *inNode);
|
||||||
|
nsresult InsertMozBRIfNeeded(nsIDOMNode *aNode);
|
||||||
|
|
||||||
// data members
|
// data members
|
||||||
protected:
|
protected:
|
||||||
|
@ -588,10 +588,7 @@ nsTextEditRules::WillInsertText(PRInt32 aAction,
|
|||||||
// fixes bug 21032
|
// fixes bug 21032
|
||||||
// *** there's some debate about whether we should replace CRLF with spaces, or
|
// *** there's some debate about whether we should replace CRLF with spaces, or
|
||||||
// truncate the string at the first CRLF. Here, we replace with spaces.
|
// truncate the string at the first CRLF. Here, we replace with spaces.
|
||||||
// Hack: I stripped out this test for IME inserts - it screws up double byte chars
|
if (nsIHTMLEditor::eEditorSingleLineMask & mFlags)
|
||||||
// that happen to end in the same values as CR or LF. Bug 27699
|
|
||||||
if (inString->IsEmpty() && (aAction != kInsertTextIME))
|
|
||||||
if ((nsIHTMLEditor::eEditorSingleLineMask & mFlags) && (aAction != kInsertTextIME))
|
|
||||||
{
|
{
|
||||||
outString->ReplaceChar(CRLF, ' ');
|
outString->ReplaceChar(CRLF, ' ');
|
||||||
}
|
}
|
||||||
|
@ -154,8 +154,11 @@ nsresult TypeInState::ClearProp(nsIAtom *aProp, const nsString &aAttr, const nsS
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
nsresult TypeInState::ProcessClearProperty(PropItem **outPropItem)
|
* TakeClearProperty: hands back next poroperty item on the clear list.
|
||||||
|
* caller assumes ownership of PropItem and must delete it.
|
||||||
|
*/
|
||||||
|
nsresult TypeInState::TakeClearProperty(PropItem **outPropItem)
|
||||||
{
|
{
|
||||||
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
||||||
*outPropItem = nsnull;
|
*outPropItem = nsnull;
|
||||||
@ -169,8 +172,11 @@ nsresult TypeInState::ProcessClearProperty(PropItem **outPropItem)
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
nsresult TypeInState::ProcessSetProperty(PropItem **outPropItem)
|
* TakeSetProperty: hands back next poroperty item on the set list.
|
||||||
|
* caller assumes ownership of PropItem and must delete it.
|
||||||
|
*/
|
||||||
|
nsresult TypeInState::TakeSetProperty(PropItem **outPropItem)
|
||||||
{
|
{
|
||||||
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
if (!outPropItem) return NS_ERROR_NULL_POINTER;
|
||||||
*outPropItem = nsnull;
|
*outPropItem = nsnull;
|
||||||
@ -271,6 +277,7 @@ PRBool TypeInState::IsPropSet(nsIAtom *aProp,
|
|||||||
const nsString &aValue,
|
const nsString &aValue,
|
||||||
PRInt32 &outIndex)
|
PRInt32 &outIndex)
|
||||||
{
|
{
|
||||||
|
// linear search. list should be short.
|
||||||
PRInt32 i, count = mSetArray.Count();
|
PRInt32 i, count = mSetArray.Count();
|
||||||
for (i=0; i<count; i++)
|
for (i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
@ -300,10 +307,11 @@ PRBool TypeInState::IsPropCleared(nsIAtom *aProp,
|
|||||||
const nsString &aValue,
|
const nsString &aValue,
|
||||||
PRInt32 &outIndex)
|
PRInt32 &outIndex)
|
||||||
{
|
{
|
||||||
PRInt32 i, count = mSetArray.Count();
|
// linear search. list should be short.
|
||||||
|
PRInt32 i, count = mClearedArray.Count();
|
||||||
for (i=0; i<count; i++)
|
for (i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
PropItem *item = (PropItem*)mSetArray[i];
|
PropItem *item = (PropItem*)mClearedArray[i];
|
||||||
if ( (item->tag == aProp) &&
|
if ( (item->tag == aProp) &&
|
||||||
(item->attr == aAttr) )
|
(item->attr == aAttr) )
|
||||||
{
|
{
|
||||||
|
@ -53,12 +53,20 @@ public:
|
|||||||
nsresult SetProp(nsIAtom *aProp);
|
nsresult SetProp(nsIAtom *aProp);
|
||||||
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr);
|
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr);
|
||||||
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
nsresult SetProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
||||||
|
|
||||||
nsresult ClearProp(nsIAtom *aProp);
|
nsresult ClearProp(nsIAtom *aProp);
|
||||||
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr);
|
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr);
|
||||||
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
nsresult ClearProp(nsIAtom *aProp, const nsString &aAttr, const nsString &aValue);
|
||||||
|
|
||||||
nsresult ProcessClearProperty(PropItem **outPropItem);
|
//**************************************************************************
|
||||||
nsresult ProcessSetProperty(PropItem **outPropItem);
|
// TakeClearProperty: hands back next poroperty item on the clear list.
|
||||||
|
// caller assumes ownership of PropItem and must delete it.
|
||||||
|
nsresult TakeClearProperty(PropItem **outPropItem);
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TakeSetProperty: hands back next poroperty item on the set list.
|
||||||
|
// caller assumes ownership of PropItem and must delete it.
|
||||||
|
nsresult TakeSetProperty(PropItem **outPropItem);
|
||||||
|
|
||||||
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp);
|
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp);
|
||||||
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp,
|
nsresult GetTypingState(PRBool &isSet, PRBool &theSetting, nsIAtom *aProp,
|
||||||
@ -81,5 +89,5 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // TypeInState_h__
|
#endif // TypeInState_h__
|
||||||
|
|
||||||
|
@ -313,9 +313,15 @@ NS_IMETHODIMP
|
|||||||
nsHTMLEditRules::DidDoAction(nsIDOMSelection *aSelection,
|
nsHTMLEditRules::DidDoAction(nsIDOMSelection *aSelection,
|
||||||
nsRulesInfo *aInfo, nsresult aResult)
|
nsRulesInfo *aInfo, nsresult aResult)
|
||||||
{
|
{
|
||||||
// pass thru to nsTextEditRules:
|
nsTextRulesInfo *info = NS_STATIC_CAST(nsTextRulesInfo*, aInfo);
|
||||||
nsresult res = nsTextEditRules::DidDoAction(aSelection, aInfo, aResult);
|
switch (info->action)
|
||||||
return res;
|
{
|
||||||
|
case kMakeBasicBlock:
|
||||||
|
return DidMakeBasicBlock(aSelection, aInfo, aResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
// default: pass thru to nsTextEditRules
|
||||||
|
return nsTextEditRules::DidDoAction(aSelection, aInfo, aResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1472,6 +1478,24 @@ nsHTMLEditRules::WillMakeBasicBlock(nsIDOMSelection *aSelection,
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsHTMLEditRules::DidMakeBasicBlock(nsIDOMSelection *aSelection,
|
||||||
|
nsRulesInfo *aInfo, nsresult aResult)
|
||||||
|
{
|
||||||
|
if (!aSelection) return NS_ERROR_NULL_POINTER;
|
||||||
|
// check for empty block. if so, put a moz br in it.
|
||||||
|
PRBool isCollapsed;
|
||||||
|
nsresult res = aSelection->GetIsCollapsed(&isCollapsed);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
if (!isCollapsed) return NS_OK;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDOMNode> parent;
|
||||||
|
PRInt32 offset;
|
||||||
|
res = nsEditor::GetStartNodeAndOffset(aSelection, &parent, &offset);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
res = InsertMozBRIfNeeded(parent);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsHTMLEditRules::WillIndent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool * aHandled)
|
nsHTMLEditRules::WillIndent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool * aHandled)
|
||||||
@ -1710,18 +1734,18 @@ nsHTMLEditRules::CreateStyleForInsertText(nsIDOMSelection *aSelection, nsIDOMDoc
|
|||||||
PropItem *item = nsnull;
|
PropItem *item = nsnull;
|
||||||
|
|
||||||
// process clearing any styles first
|
// process clearing any styles first
|
||||||
mEditor->mTypeInState->ProcessClearProperty(&item);
|
mEditor->mTypeInState->TakeClearProperty(&item);
|
||||||
while (item)
|
while (item)
|
||||||
{
|
{
|
||||||
res = mEditor->SplitStyleAbovePoint(&node, &offset, item->tag, &item->attr);
|
res = mEditor->SplitStyleAbovePoint(&node, &offset, item->tag, &item->attr);
|
||||||
if (NS_FAILED(res)) return res;
|
if (NS_FAILED(res)) return res;
|
||||||
// we own item now (ProcessClearProperty hands ownership to us)
|
// we own item now (TakeClearProperty hands ownership to us)
|
||||||
delete item;
|
delete item;
|
||||||
mEditor->mTypeInState->ProcessClearProperty(&item);
|
mEditor->mTypeInState->TakeClearProperty(&item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// then process setting any styles
|
// then process setting any styles
|
||||||
mEditor->mTypeInState->ProcessSetProperty(&item);
|
mEditor->mTypeInState->TakeSetProperty(&item);
|
||||||
|
|
||||||
if (item) // we have at least one style to add; make a
|
if (item) // we have at least one style to add; make a
|
||||||
{ // new text node to insert style nodes above.
|
{ // new text node to insert style nodes above.
|
||||||
@ -1750,9 +1774,9 @@ nsHTMLEditRules::CreateStyleForInsertText(nsIDOMSelection *aSelection, nsIDOMDoc
|
|||||||
{
|
{
|
||||||
res = mEditor->SetInlinePropertyOnNode(node, item->tag, &item->attr, &item->value);
|
res = mEditor->SetInlinePropertyOnNode(node, item->tag, &item->attr, &item->value);
|
||||||
if (NS_FAILED(res)) return res;
|
if (NS_FAILED(res)) return res;
|
||||||
// we own item now (ProcessSetProperty hands ownership to us)
|
// we own item now (TakeSetProperty hands ownership to us)
|
||||||
delete item;
|
delete item;
|
||||||
mEditor->mTypeInState->ProcessSetProperty(&item);
|
mEditor->mTypeInState->TakeSetProperty(&item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return aSelection->Collapse(node, offset);
|
return aSelection->Collapse(node, offset);
|
||||||
@ -2883,6 +2907,16 @@ nsHTMLEditRules::ReturnInParagraph(nsIDOMSelection *aSelection,
|
|||||||
// get rid of the break
|
// get rid of the break
|
||||||
res = mEditor->DeleteNode(sibling);
|
res = mEditor->DeleteNode(sibling);
|
||||||
if (NS_FAILED(res)) return res;
|
if (NS_FAILED(res)) return res;
|
||||||
|
// check both halves of para to see if we need mozBR
|
||||||
|
res = InsertMozBRIfNeeded(aPara);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
res = mEditor->GetPriorHTMLSibling(aPara, &sibling);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
if (sibling && nsHTMLEditUtils::IsParagraph(sibling))
|
||||||
|
{
|
||||||
|
res = InsertMozBRIfNeeded(sibling);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
}
|
||||||
// position selection inside right hand para
|
// position selection inside right hand para
|
||||||
res = aSelection->Collapse(aPara,0);
|
res = aSelection->Collapse(aPara,0);
|
||||||
}
|
}
|
||||||
@ -4255,7 +4289,22 @@ nsHTMLEditRules::IsDescendantOfBody(nsIDOMNode *inNode)
|
|||||||
return PR_FALSE;
|
return PR_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
nsHTMLEditRules::InsertMozBRIfNeeded(nsIDOMNode *aNode)
|
||||||
|
{
|
||||||
|
if (!aNode) return NS_ERROR_NULL_POINTER;
|
||||||
|
if (!mEditor->IsBlockNode(aNode)) return NS_OK;
|
||||||
|
|
||||||
|
PRBool isEmpty;
|
||||||
|
nsCOMPtr<nsIDOMNode> brNode;
|
||||||
|
nsresult res = IsEmptyNode(aNode, &isEmpty);
|
||||||
|
if (NS_FAILED(res)) return res;
|
||||||
|
if (isEmpty)
|
||||||
|
{
|
||||||
|
res = CreateMozBR(aNode, 0, &brNode);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef XP_MAC
|
#ifdef XP_MAC
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
@ -95,6 +95,7 @@ protected:
|
|||||||
nsresult WillOutdent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool *aHandled);
|
nsresult WillOutdent(nsIDOMSelection *aSelection, PRBool *aCancel, PRBool *aHandled);
|
||||||
nsresult WillAlign(nsIDOMSelection *aSelection, const nsString *alignType, PRBool *aCancel, PRBool *aHandled);
|
nsresult WillAlign(nsIDOMSelection *aSelection, const nsString *alignType, PRBool *aCancel, PRBool *aHandled);
|
||||||
nsresult WillMakeBasicBlock(nsIDOMSelection *aSelection, const nsString *aBlockType, PRBool *aCancel, PRBool *aHandled);
|
nsresult WillMakeBasicBlock(nsIDOMSelection *aSelection, const nsString *aBlockType, PRBool *aCancel, PRBool *aHandled);
|
||||||
|
nsresult DidMakeBasicBlock(nsIDOMSelection *aSelection, nsRulesInfo *aInfo, nsresult aResult);
|
||||||
|
|
||||||
nsresult AlignTableElement(nsIDOMNode *aNode, const nsString *alignType);
|
nsresult AlignTableElement(nsIDOMNode *aNode, const nsString *alignType);
|
||||||
nsresult AlignTableCellContents(nsIDOMNode *aNode, const nsString *alignType);
|
nsresult AlignTableCellContents(nsIDOMNode *aNode, const nsString *alignType);
|
||||||
@ -160,7 +161,8 @@ protected:
|
|||||||
nsresult ConvertWhitespace(const nsString & inString, nsString & outString);
|
nsresult ConvertWhitespace(const nsString & inString, nsString & outString);
|
||||||
nsresult ConfirmSelectionInBody();
|
nsresult ConfirmSelectionInBody();
|
||||||
|
|
||||||
PRBool IsDescendantOfBody(nsIDOMNode *inNode) ;
|
PRBool IsDescendantOfBody(nsIDOMNode *inNode);
|
||||||
|
nsresult InsertMozBRIfNeeded(nsIDOMNode *aNode);
|
||||||
|
|
||||||
// data members
|
// data members
|
||||||
protected:
|
protected:
|
||||||
|
@ -588,10 +588,7 @@ nsTextEditRules::WillInsertText(PRInt32 aAction,
|
|||||||
// fixes bug 21032
|
// fixes bug 21032
|
||||||
// *** there's some debate about whether we should replace CRLF with spaces, or
|
// *** there's some debate about whether we should replace CRLF with spaces, or
|
||||||
// truncate the string at the first CRLF. Here, we replace with spaces.
|
// truncate the string at the first CRLF. Here, we replace with spaces.
|
||||||
// Hack: I stripped out this test for IME inserts - it screws up double byte chars
|
if (nsIHTMLEditor::eEditorSingleLineMask & mFlags)
|
||||||
// that happen to end in the same values as CR or LF. Bug 27699
|
|
||||||
if (inString->IsEmpty() && (aAction != kInsertTextIME))
|
|
||||||
if ((nsIHTMLEditor::eEditorSingleLineMask & mFlags) && (aAction != kInsertTextIME))
|
|
||||||
{
|
{
|
||||||
outString->ReplaceChar(CRLF, ' ');
|
outString->ReplaceChar(CRLF, ' ');
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user