实际上这是http://community.sharpdevelop.net/forums/p/21949/56153.aspx#56153的问题,但还没有答案 - 所以我在这里试试。
我在WPF 4.0应用程序中使用Avalon Edit(ICSharpCode.AvalonEdit.dll 4.4.2)。 我已经在编辑器中加载了一个文本文件(~7 MBytes)。当我应用语法高亮,然后应对(Control-A和Control-C)整个文本它将永远需要(没有突出显示它在一秒钟内完成)
当我进入调试器时,我得到以下callstack(缩短):
System.Text.RegularExpressions.RegexInterpreter.Go()
System.Text.RegularExpressions.RegexRunner.Scan(regex, text, textbeg, textend, textstart, prevlen, quick, timeout)
System.Text.RegularExpressions.Regex.Run(quick, prevlen, input, beginning, length, startat)
System.Text.RegularExpressions.Regex.Match(input, beginning, length)
ICSharpCode.AvalonEdit.Highlighting.DocumentHighlighter.HighlightNonSpans(until)
ICSharpCode.AvalonEdit.Highlighting.DocumentHighlighter.HighlightLineInternal(line)
ICSharpCode.AvalonEdit.Highlighting.DocumentHighlighter.HighlightLineAndUpdateTreeList(line, lineNumber)
ICSharpCode.AvalonEdit.Highlighting.DocumentHighlighter.HighlightLine(lineNumber)
ICSharpCode.AvalonEdit.Highlighting.HtmlClipboard.CreateHtmlFragment(document, highlighter, segment, options)
ICSharpCode.AvalonEdit.Editing.Selection.CreateHtmlFragment(options)
ICSharpCode.AvalonEdit.Editing.Selection.CreateDataObject(textArea)
ICSharpCode.AvalonEdit.Editing.EditingCommandHandler.CopySelectedText(textArea)
ICSharpCode.AvalonEdit.Editing.EditingCommandHandler.OnCopy(target, args)
编辑器似乎为剪贴板创建基于html的内容,并使用RegularExpressions,这需要永远(约30秒)。
问题:是否有人知道可以禁用复制操作的语法高亮显示,以便只将纯文本复制到剪贴板。
答案 0 :(得分:2)
我从SharpDevelop上的DanielGrunwald那里得到了我想要分享的答案: 在avalonedit 4.X中,不可以禁用html拷贝到剪贴板。但是在5.X中,你可以做到这一点。
使用:
AvalonEdit.TextEditor TextView
编写以下内容以注册复制前事件的回调:
DataObject.AddSettingDataHandler(TextView, onTextViewSettingDataHandler);
注册在处理cliboard复制之前调用的用户处理程序。在该处理程序中取消html格式(例如,取决于文档大小)。例如:
static public void onTextViewSettingDataHandler(object sender, DataObjectSettingDataEventArgs e)
{
var textView = sender as TextEditor;
if (textView != null && e.Format == DataFormats.Html && textView.Text.Count() > MaxDocByteSizeForHtmlCopy)
{
e.CancelCommand();
}
}
使用该代码可以防止该挂钩,但当然粘贴内容时(例如,粘贴到Word中)不会保留格式。