DiffStrings computes differences between two lines-of-strings and displays in DiffEditor.
(astr, bstr []string)
| 320 | // DiffStrings computes differences between two lines-of-strings and displays in |
| 321 | // DiffEditor. |
| 322 | func (dv *DiffEditor) DiffStrings(astr, bstr []string) { |
| 323 | dv.setFilenames() |
| 324 | dv.diffs.SetStringLines(astr, bstr) |
| 325 | |
| 326 | dv.bufferA.LineColors = nil |
| 327 | dv.bufferB.LineColors = nil |
| 328 | del := colors.Scheme.Error.Base |
| 329 | ins := colors.Scheme.Success.Base |
| 330 | chg := colors.Scheme.Primary.Base |
| 331 | |
| 332 | nd := len(dv.diffs.Diffs) |
| 333 | dv.alignD = make(text.Diffs, nd) |
| 334 | var ab, bb [][]byte |
| 335 | absln := 0 |
| 336 | bspc := []byte(" ") |
| 337 | for i, df := range dv.diffs.Diffs { |
| 338 | switch df.Tag { |
| 339 | case 'r': |
| 340 | di := df.I2 - df.I1 |
| 341 | dj := df.J2 - df.J1 |
| 342 | mx := max(di, dj) |
| 343 | ad := df |
| 344 | ad.I1 = absln |
| 345 | ad.I2 = absln + di |
| 346 | ad.J1 = absln |
| 347 | ad.J2 = absln + dj |
| 348 | dv.alignD[i] = ad |
| 349 | for i := 0; i < mx; i++ { |
| 350 | dv.bufferA.SetLineColor(absln+i, chg) |
| 351 | dv.bufferB.SetLineColor(absln+i, chg) |
| 352 | blen := 0 |
| 353 | alen := 0 |
| 354 | if i < di { |
| 355 | aln := []byte(astr[df.I1+i]) |
| 356 | alen = len(aln) |
| 357 | ab = append(ab, aln) |
| 358 | } |
| 359 | if i < dj { |
| 360 | bln := []byte(bstr[df.J1+i]) |
| 361 | blen = len(bln) |
| 362 | bb = append(bb, bln) |
| 363 | } else { |
| 364 | bb = append(bb, bytes.Repeat(bspc, alen)) |
| 365 | } |
| 366 | if i >= di { |
| 367 | ab = append(ab, bytes.Repeat(bspc, blen)) |
| 368 | } |
| 369 | } |
| 370 | absln += mx |
| 371 | case 'd': |
| 372 | di := df.I2 - df.I1 |
| 373 | ad := df |
| 374 | ad.I1 = absln |
| 375 | ad.I2 = absln + di |
| 376 | ad.J1 = absln |
| 377 | ad.J2 = absln + di |
| 378 | dv.alignD[i] = ad |
| 379 | for i := 0; i < di; i++ { |
no test coverage detected