Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3109|回复: 1
打印 上一主题 下一主题

编辑器

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2016-4-21 00:17:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
右键菜单:

---粘贴 : 有表格,但border=0  
cmd_pastensEditorController.cpp
NS_REGISTER_ONE_COMMAND(nsPasteCommand, "cmd_paste");

nsEditorCommands.cpp
nsPasteCommand:: DoCommand(const char *aCommandName, nsISupports *aCommandRefCon)
{
return editor-> Paste(nsIClipboard::kGlobalClipboard);
}
nsHTMLDataTransfer.cpp
NS_IMETHODIMP nsHTMLEditor:: Paste(int32_t aSelectionType)

return InsertFromTransferable(trans, nullptr, contextStr, infoStr,
                                nullptr, 0, true);
}InsertFromTransferable(....)
{
nsXPIDLString cfcontext, cffragment, cfselection; // cfselection left emtpy for now

        rv = ParseCFHTML(cfhtml, getter_Copies(cffragment), getter_Copies(cfcontext)); //cfcontext这里面修改解析后的内容让border=1

//ParseCFHTML解析完后,cfcontext含有<table border=0 cellpadding=0 cellspacing=0 width=216 style='border-collapse: 等table信息,即 border=0  
//cffragment 只含有相关列信息 <col width=72 span=3 style='width:54pt'> 等
rv = DoInsertHTMLWithContext(cffragment,
                                       cfcontext, cfselection, flavor,
}
nsHTMLEditor:: DoInsertHTMLWithContext(const nsAString & aInputString,
                                      const nsAString & aContextStr,
{
nsresult rv = CreateDOMFragmentFromPaste(aInputString, aContextStr, aInfoStr,
}
nsresult nsHTMLEditor::CreateDOMFragmentFromPaste(const nsAString &aInputString,
                                                  const nsAString & aContextStr,
{
if (!aContextStr.IsEmpty())
  {
    rv = ParseFragment(aContextStr, nullptr, doc, address_of(contextAsNode),
                       aTrustedInput);

}
/************
table相关
rv = ParseFragment(aContextStr, nullptr, doc, address_of(contextAsNode),
                       aTrustedInput);

nsContentUtils:: ParseFragmentHTML(aFragStr,

/mozilla/content/base/src/nsContentUtils.cpp
nsContentUtils:: ParseFragmentHTML(const nsAString& aSourceBuffer,
{ sHTMLFragmentParser = new nsHtml5StringParser()
nsresult rv =
    sHTMLFragmentParser->ParseFragment(aSourceBuffer,
                                       aTargetNode,
                                       aContextLocalName,
                                       aContextNamespace,
                                       aQuirks,
                                       aPreventScriptExecution);
}

mozilla/parser/html/nsHtml5Parser.cpp

nsHtml5Parser::ParseFragment(const nsAString& aSourceBuffer,                              nsTArray<nsString>& aTagStack) {   return NS_ERROR_NOT_IMPLEMENTED; }
************************/
---粘贴为无格式文本  无表格
cmd_pasteNoFormatting
nsComposerController.cpp
NS_REGISTER_ONE_COMMAND(nsPasteNoFormattingCommand, "cmd_pasteNoFormatting");

/mozilla/editor/composer/src/nsComposerCommands.cppnsPasteNoFormattingCommand:: DoCommand(const char *aCommandName,
{
return htmlEditor->PasteNoFormatting(nsIClipboard::kGlobalClipboard);
}
nsHTMLDataTransfer.cpp
NS_IMETHODIMP nsHTMLEditor:: PasteNoFormatting(int32_t aSelectionType)
{  rv = InsertFromTransferable(trans, nullptr, empty, empty, nullptr, 0,
                                  true);
}
---粘贴为引文 有表格,但增加type=cite模式,即只有鼠标移上去时,才会显示边框

cmd_pasteQuote
nsEditorController.cpp
NS_REGISTER_ONE_COMMAND(nsPasteQuotationCommand,  "cmd_pasteQuote");

nsEditorCommands.cpp
nsPasteQuotationCommand:: DoCommand(const char *aCommandName,
{
return mailEditor-> PasteAsQuotation(nsIClipboard::kGlobalClipboard);
}


nsHTMLDataTransfer.cpp
NS_IMETHODIMP nsHTMLEditor:: PasteAsQuotation(int32_t aSelectionType)
{
return PasteAsCitedQuotation(citation, aSelectionType);
}

NS_IMETHODIMP nsHTMLEditor:: PasteAsCitedQuotation(const nsAString & aCitation,
                                                  int32_t aSelectionType)

{
newElement->SetAttribute(NS_LITERAL_STRING("type"), NS_LITERAL_STRING("cite"));
return Paste(aSelectionType);
}
回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2016-4-21 00:17:51 | 只看该作者
nsHTMLDataTransfer.cpp
nsHTMLEditor:: ParseCFHTML(nsCString & aCfhtml, PRUnichar **aStuffToPaste, PRUnichar **aCfcontext)
{
*aCfcontext = nsLinebreakConverter::ConvertUnicharLineBreaks(cntxtUcs2Str.get(),
                                                           nsLinebreakConverter::eLinebreakAny,
                                                           nsLinebreakConverter::eLinebreakContent,
                                                           oldLengthInChars, &newLengthInChars);
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-4-28 11:49 , Processed in 0.056923 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表