Получить первую строку и столбец diff с помощью Google Diff Match Patch? - PullRequest
0 голосов
/ 05 апреля 2019

Я следую примеру на https://github.com/google/diff-match-patch и

var text = "<div class='hover'>\nHello world\n</div>";
var text2 = "<div class='hover'>\nHello whirld\n</div>";
var dmp = new diff_match_patch();
var result = dmp.diff_main(text, text2, false);

Когда я смотрю на объект, получается результат:

Array {
  0     0,<div class='hover'>
Hello w
  1     -1,o
  2     1,hi
  3     0,rld
</div>
}

В документации говорится, что он возвращаетмассив кортежей.Как я могу получить номер строки и номер строки первой разницы?Если я смогу получить первое изменение, это бонус, но не обязателен.

После создания приведенного выше примера, похоже, я могу найти первый -1, и это строка?Я надеялся на метод, который сделал что-то вроде этого:

var result = dmp.diff_main(text, text2, false);

Object {
   row: 1,
   column: 4,
   original: "hello world",
   changed: "hello whirld"
}

Если я изменю 3-ю строку, это будет результат:

var text = "<div class='hover'>\nHello world\n</div>";
var text2 = "<div class='hover'>\nHello world\n</div2>";
var dmp = new diff_match_patch();
var result = dmp.diff_main(text, text2, false);

Это результат:

Array {
  0     0,<div class='hover'>
Hello world
</div
  1     1,2
  2     0,>
}

Значит, у результата нет номеров строк?

https://github.com/google/diff-match-patch

1 Ответ

0 голосов
/ 06 апреля 2019

Работ такого рода:

var text = "<div class='hover'>\nHello world\n</div>";
var text2 = "<div class='hover'>\nHello world\n</div2>";
var dmp = new diff_match_patch();
var result = dmp.diff_main(text, text2, false);

var LINE_BREAK = "\n";
var lines = [];
var row = 1;
var column = 0;
var firstResult = result && result[0] ? result[0] : null;
var operation = firstResult ? firstResult[0] : null;
var data = firstResult ? firstResult[1] : null;
var lastLine = "";

if (data && data.indexOf(LINE_BREAK)!=-1) {
    lines = data.split(LINE_BREAK);
    lastLine = lines[lines.length-1];
    row = lines.length;
    column = lastLine.length;
}
...