2014-11-29 2 views
3

На самом деле это было задано на http://community.sharpdevelop.net/forums/p/21949/56153.aspx#56153, но пока нет ответа - так что я попробую его здесь.AvalonEdit: Копирование занимает вечно для больших текстовых файлов с подсветкой

Я использую Avalon Edit (ICSharpCode.AvalonEdit.dll 4.4.2) в приложении WPF 4.0. Я загрузил текстовый файл (~ 7 Мбайт) в редактор. Когда я применяю подсветку синтаксиса, а затем копирую (Control-A и Control-C) весь текст, который он принимает навсегда (без выделения его делается за секунду)

Когда я ворвался в отладчик, я получил следующий столбец (укороченный):

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 секунд).

Вопрос: Кто-нибудь знает возможность отключить подсветку синтаксиса для действия копирования, чтобы только чистый текст был скопирован в буфер обмена.

ответ

1

Я получил ответ от DanielGrunwald на SharpDevelop, что я хочу поделиться: В 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).

Смежные вопросы