Ответ 1
Я создал JSFiddle на основе автора библиотеки example страница (предполагая, что вам нужна версия Javascript на основе тега вопроса).
И использование этого кода даст мне то, что вы ожидаете:
var dmp = new diff_match_patch();
function launch() {
var text1 = document.getElementById('text1').value;
var text2 = document.getElementById('text2').value;
var d = dmp.diff_main(text1, text2);
var ds = dmp.diff_prettyHtml(d);
document.getElementById('outputdiv').innerHTML = ds;
}
Вы также можете посмотреть консоль и увидеть исходный ответ (массивы), где вы также можете увидеть, что diff_main
возвращает то, что вы ожидаете. Вы делаете что-то другое? Если да, пожалуйста, поделитесь своим кодом.
Новая информация
Теперь, когда вы предоставили полный текст, я могу дать вам лучший ответ: результат, который вы видите, в порядке, это просто способ работы алгоритма
Я попытаюсь объяснить вам, что происходит и как это исправить. Посмотрим на заключительную часть каждого текста:
Текст 1
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Текст 2
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c;
};
Позволяет заметить это:
- Последняя }; функции
changed
в тексте 1 не имеет возврата каретки после нее. - Последняя }; функции
changed
в тексте 2 возвращает карету после нее. - Конечная }; функции
autorun
в тексте 2 не имеет возврата каретки после нее.
Итак, алгоритм, который вычисляет diff, будет соответствовать 1
с 3
, оставив 2
в качестве добавленного текста. Вот почему tou получает этот результат.
Теперь, чтобы получить желаемый результат, вам нужно будет сопоставить 1
с 2
. Это означает добавление новой пустой строки в конце текста 1, как вы можете видеть в обновленном туре JSFIddle:
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};[PRESS ENTER HERE TO ADD NEW LINE]
Обратите внимание, что если вы используете только этот текст, алгоритм будет работать правильно (как я показал в своем оригинальном ответе). Это после того, как вы добавите еще какой-нибудь текст, когда эта конфуция начнет происходить, не зная почему.