2 MetaEditor:
Нашел способ стабильного воспроизведения ошибки "Тексты НЕ совпадают!".
Ошибка воспроизводится при программной работе с модулем на изменение через selectedText, если в конце модуля есть пустая строка (просто лишний перевод строки).
Вероятнее всего это связано с тем, что Scintilla и редактор 1С по-разному считают количество строк. В документации
http://www.scintilla.org/ScintillaDoc.h ... TLINECOUNT написано:
Цитата:
A document holding only an end of line sequence has 2 lines
(выделено мной).
Набросал небольшой скрипт с макросом, проверяющим значение количества строк, как его "знает" ITextWindow и как его "знает" SciColorer:
Код:
$engine JScript
$uname SciColorer_vs_TextWindow_LinesCount
$addin stdlib
SCI_GETLINECOUNT = 2154;
function macrosCheckLinesCount() {
var tw = snegopat.activeTextWindow();
if (tw) {
Message('ITextWindow::linesCount == ' + tw.linesCount);
}
var hwnd = addins.byUniqueName("SciColorerV8").invokeMacros("_GetActiveScintillaHandle")
if (hwnd) {
var objColorer = addins.byUniqueName("SciColorerV8").invokeMacros("_GetObject")
var linesCount = objColorer.SendSciMessage(hwnd, SCI_GETLINECOUNT, 0, 0);
Message('SciColorerV8::GETLINESCOUNT() == ' + linesCount);
}
}
Разные значения возвращаются 1) на пустом модуле, 2) на модуле, в конце которого есть пустая строка.
После ошибки, если посмотреть на сохраненные Колорером тексты модулей на диске C:, то тексты в этих файлах действительно отличаются - но именно последней строчкой - в файле C:\scicolorer_doctext.txt нет пустой строки в конце файла, а в C:\scicolorer_scitext.txt - есть.
Не понятно, какой текст из этих правильный - с пустой строкой или без.
Очень хотелось бы решить эту проблему, без Колорера уже плохо, но и ошибка при программной модификации текста мешает пользоваться скриптами.