@@ -412,24 +412,45 @@
412 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if two DLine elements are identical.
413 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
414 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int same_dline(DLine *pA, DLine *pB){
415 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pA->h==pB->h && memcmp(pA->z,pB->z,pA->h & LENGTH_MASK)==0;
416 416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the regular expression *pRe matches any of the
420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** N dlines
421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int re_dline_match(
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ReCompiled *pRe, /* The regular expression to be matched */
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DLine *aDLine, /* First of N DLines to compare against */
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int N /* Number of DLines to check */
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( N-- ){
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( re_exec(pRe, aDLine->z, LENGTH(aDLine)) ){
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aDLine++;
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
417 435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
418 436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
419 437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Append a single line of context-diff output to pOut.
420 438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
421 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void appendDiffLine(
422 440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pOut, /* Where to write the line of output */
423 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char cPrefix, /* One of " ", "+", or "-" */
424 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pLine, /* The line to be output */
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int html /* True if generating HTML. False for plain text */
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int html, /* True if generating HTML. False for plain text */
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ReCompiled *pRe /* Colorize only if line matches this Regex */
426 445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
427 446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(pOut, &cPrefix, 1);
428 447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( html ){
429 448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zHtml;
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cPrefix=='+' ){
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRe && re_dline_match(pRe, pLine, 1)==0 ){
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cPrefix = ' ';
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( cPrefix=='+' ){
431 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(pOut, "<span class=\"diffadd\">", -1);
432 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( cPrefix=='-' ){
433 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(pOut, "<span class=\"diffrm\">", -1);
434 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
435 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zHtml = htmlize(pLine->z, (pLine->h & LENGTH_MASK));
@@ -463,21 +484,19 @@
463 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(pOut, " ", 8);
464 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
465 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( html ) blob_append(pOut, "</span>", -1);
466 487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
467 488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
469 489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
470 490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Given a raw diff p[] in which the p->aEdit[] array has been filled
471 491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in, compute a context diff into pOut.
472 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
473 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void contextDiff(
474 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DContext *p, /* The difference */
475 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pOut, /* Output a context diff to here */
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nContext, /* Number of lines of context */
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int showLn, /* Show line numbers */
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int html /* Render as HTML */
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ReCompiled *pRe, /* Only show changes that match this regex */
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 diffFlags /* Flags controlling the diff format */
479 498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
480 499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *A; /* Left side of the diff */
481 500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *B; /* Right side of the diff */
482 501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int a = 0; /* Index of next line in A[] */
483 502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int b = 0; /* Index of next line in B[] */
@@ -488,11 +507,18 @@
488 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int na, nb; /* Number of lines shown from A and B */
489 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j; /* Loop counters */
490 509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int m; /* Number of lines to output */
491 510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int skip; /* Number of lines to skip */
492 511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nChunk = 0; /* Number of diff chunks seen so far */
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nContext; /* Number of lines of context */
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int showLn; /* Show line numbers */
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int html; /* Render as HTML */
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int showDivider = 0; /* True to show the divider between diff blocks */
493 516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nContext = diff_context_lines(diffFlags);
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showLn = (diffFlags & DIFF_LINENO)!=0;
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ html = (diffFlags & DIFF_HTML)!=0;
494 520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A = p->aFrom;
495 521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
B = p->aTo;
496 522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
R = p->aEdit;
497 523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxr = p->nEdit;
498 524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( mxr>2 && R[mxr-1]==0 && R[mxr-2]==0 ){ mxr -= 3; }
@@ -499,10 +525,35 @@
499 525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(r=0; r<mxr; r += 3*nr){
500 526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Figure out how many triples to show in a single block */
501 527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(nr=1; R[r+nr*3]>0 && R[r+nr*3]<nContext*2; nr++){}
502 528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* printf("r=%d nr=%d\n", r, nr); */
503 529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there is a regex, skip this block (generate no diff output)
531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the regex matches or does not match both insert and delete.
532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Only display the block if one side matches but the other side does
533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not.
534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRe ){
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int hideBlock = 1;
537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int xa = a, xb = b;
538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; hideBlock && i<nr; i++){
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int c1, c2;
540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xa += R[r+i*3];
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xb += R[r+i*3];
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c1 = re_dline_match(pRe, &A[xa], R[r+i*3+1]);
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c2 = re_dline_match(pRe, &B[xb], R[r+i*3+2]);
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideBlock = c1==c2;
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xa += R[r+i*3+1];
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xb += R[r+i*3+2];
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( hideBlock ){
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ a = xa;
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ b = xb;
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
504 555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* For the current block comprising nr triples, figure out
505 556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** how many lines of A and B are to be displayed
506 557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
507 558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( R[r]>nContext ){
508 559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
na = nb = nContext;
@@ -531,12 +582,13 @@
531 582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** context diff that contains line numbers, show the separator from
532 583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the previous block.
533 584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
534 585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nChunk++;
535 586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showLn ){
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( r==0 ){
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !showDivider ){
537 588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Do not show a top divider */
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showDivider = 1;
538 590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( html ){
539 591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pOut, "<span class=\"diffhr\">%.80c</span>\n", '.');
540 592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pOut, "<a name=\"chunk%d\"></a>\n", nChunk);
541 593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
542 594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pOut, "%.80c\n", '.');
@@ -559,34 +611,36 @@
559 611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a += skip;
560 612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b += skip;
561 613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = R[r] - skip;
562 614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<m; j++){
563 615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showLn ) appendDiffLineno(pOut, a+j+1, b+j+1, html);
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendDiffLine(pOut, ' ', &A[a+j], html);
616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendDiffLine(pOut, ' ', &A[a+j], html, 0);
565 617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
566 618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a += m;
567 619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b += m;
568 620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
569 621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Show the differences */
570 622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nr; i++){
571 623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = R[r+i*3+1];
572 624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<m; j++){
625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char cMark = '-';
573 626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showLn ) appendDiffLineno(pOut, a+j+1, 0, html);
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendDiffLine(pOut, '-', &A[a+j], html);
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRe && re_dline_match(pRe, &A[a+j], 1)==0 ) cMark = ' ';
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendDiffLine(pOut, '-', &A[a+j], html, pRe);
575 629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
576 630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a += m;
577 631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = R[r+i*3+2];
578 632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<m; j++){
579 633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showLn ) appendDiffLineno(pOut, 0, b+j+1, html);
580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendDiffLine(pOut, '+', &B[b+j], html);
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendDiffLine(pOut, '+', &B[b+j], html, pRe);
581 635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
582 636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b += m;
583 637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<nr-1 ){
584 638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = R[r+i*3+3];
585 639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<m; j++){
586 640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showLn ) appendDiffLineno(pOut, a+j+1, b+j+1, html);
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendDiffLine(pOut, ' ', &B[b+j], html);
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendDiffLine(pOut, ' ', &B[b+j], html, 0);
588 642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
589 643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b += m;
590 644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a += m;
591 645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
592 646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -595,11 +649,11 @@
595 649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nr==i );
596 650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = R[r+nr*3];
597 651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m>nContext ) m = nContext;
598 652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<m; j++){
599 653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showLn ) appendDiffLineno(pOut, a+j+1, b+j+1, html);
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendDiffLine(pOut, ' ', &B[b+j], html);
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendDiffLine(pOut, ' ', &B[b+j], html, 0);
601 655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
602 656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
603 657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
604 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
605 659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -615,10 +669,11 @@
615 669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zStart; /* A <span> tag */
616 670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iEnd; /* Write </span> prior to character iEnd */
617 671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iStart2; /* Write zStart2 prior to character iStart2 */
618 672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zStart2; /* A <span> tag */
619 673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iEnd2; /* Write </span> prior to character iEnd2 */
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ReCompiled *pRe; /* Only colorize matching lines, if not NULL */
620 675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
621 676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
622 677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
623 678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Flags for sbsWriteText()
624 679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -640,13 +695,17 @@
640 695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int k; /* Cursor position */
641 696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int needEndSpan = 0;
642 697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zIn = pLine->z;
643 698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z = &p->zLine[p->n];
644 699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int w = p->width;
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int colorize = p->escHtml;
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( colorize && p->pRe && re_dline_match(p->pRe, pLine, 1)==0 ){
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ colorize = 0;
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
645 704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=j=k=0; k<w && i<n; i++, k++){
646 705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char c = zIn[i];
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->escHtml ){
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( colorize ){
648 707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i==p->iStart ){
649 708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int x = strlen(p->zStart);
650 709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(z+j, p->zStart, x);
651 710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j += x;
652 711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
needEndSpan = 1;
@@ -1196,13 +1255,12 @@
1196 1255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in, compute a side-by-side diff into pOut.
1197 1256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1198 1257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void sbsDiff(
1199 1258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DContext *p, /* The computed diff */
1200 1259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pOut, /* Write the results here */
1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nContext, /* Number of lines of context around each change */
1202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int width, /* Width of each column of output */
1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int escHtml /* True to generate HTML output */
1260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ReCompiled *pRe, /* Only show changes that match this regex */
1261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 diffFlags /* Flags controlling the diff */
1204 1262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1205 1263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *A; /* Left side of the diff */
1206 1264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *B; /* Right side of the diff */
1207 1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int a = 0; /* Index of next line in A[] */
1208 1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int b = 0; /* Index of next line in B[] */
@@ -1214,16 +1272,20 @@
1214 1272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j; /* Loop counters */
1215 1273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int m, ma, mb;/* Number of lines to output */
1216 1274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int skip; /* Number of lines to skip */
1217 1275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nChunk = 0; /* Number of chunks of diff output seen so far */
1218 1276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SbsLine s; /* Output line buffer */
1277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nContext; /* Lines of context above and below each change */
1278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int showDivider = 0; /* True to show the divider */
1219 1279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1220 1280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&s, 0, sizeof(s));
1221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- s.zLine = fossil_malloc( 15*width + 200 );
1281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s.width = diff_width(diffFlags);
1282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s.zLine = fossil_malloc( 15*s.width + 200 );
1222 1283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( s.zLine==0 ) return;
1223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- s.width = width;
1224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- s.escHtml = escHtml;
1284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nContext = diff_context_lines(diffFlags);
1285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s.escHtml = (diffFlags & DIFF_HTML)!=0;
1286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s.pRe = pRe;
1225 1287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.iStart = -1;
1226 1288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.iStart2 = 0;
1227 1289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.iEnd = -1;
1228 1290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
A = p->aFrom;
1229 1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
B = p->aTo;
@@ -1232,10 +1294,35 @@
1232 1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( mxr>2 && R[mxr-1]==0 && R[mxr-2]==0 ){ mxr -= 3; }
1233 1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(r=0; r<mxr; r += 3*nr){
1234 1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Figure out how many triples to show in a single block */
1235 1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(nr=1; R[r+nr*3]>0 && R[r+nr*3]<nContext*2; nr++){}
1236 1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* printf("r=%d nr=%d\n", r, nr); */
1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there is a regex, skip this block (generate no diff output)
1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the regex matches or does not match both insert and delete.
1302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Only display the block if one side matches but the other side does
1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not.
1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRe ){
1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int hideBlock = 1;
1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int xa = a, xb = b;
1308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; hideBlock && i<nr; i++){
1309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int c1, c2;
1310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xa += R[r+i*3];
1311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xb += R[r+i*3];
1312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c1 = re_dline_match(pRe, &A[xa], R[r+i*3+1]);
1313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c2 = re_dline_match(pRe, &B[xb], R[r+i*3+2]);
1314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideBlock = c1==c2;
1315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xa += R[r+i*3+1];
1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xb += R[r+i*3+2];
1317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( hideBlock ){
1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ a = xa;
1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ b = xb;
1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1237 1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1238 1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* For the current block comprising nr triples, figure out
1239 1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** how many lines of A and B are to be displayed
1240 1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1241 1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( R[r]>nContext ){
@@ -1260,20 +1347,21 @@
1260 1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
na += R[r+i*3];
1261 1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nb += R[r+i*3];
1262 1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1263 1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1264 1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Draw the separator between blocks */
1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( r>0 ){
1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( escHtml ){
1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( showDivider ){
1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s.escHtml ){
1267 1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pOut, "<span class=\"diffhr\">%.*c</span>\n",
1268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- width*2+16, '.');
1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s.width*2+16, '.');
1269 1356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_appendf(pOut, "%.*c\n", width*2+16, '.');
1357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pOut, "%.*c\n", s.width*2+16, '.');
1271 1358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1272 1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showDivider = 1;
1273 1361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nChunk++;
1274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( escHtml ){
1362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s.escHtml ){
1275 1363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pOut, "<a name=\"chunk%d\"></a>\n", nChunk);
1276 1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1277 1365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1278 1366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Show the initial common area */
1279 1367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a += skip;
@@ -1316,11 +1404,11 @@
1316 1404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sbsWriteLineno(&s, a);
1317 1405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.iStart = 0;
1318 1406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.zStart = "<span class=\"diffrm\">";
1319 1407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.iEnd = s.width;
1320 1408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sbsWriteText(&s, &A[a], SBS_PAD);
1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( escHtml ){
1409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s.escHtml ){
1322 1410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sbsWrite(&s, " <\n", 6);
1323 1411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1324 1412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sbsWrite(&s, " <\n", 3);
1325 1413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1326 1414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(pOut, s.zLine, s.n);
@@ -1338,12 +1426,12 @@
1338 1426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a++;
1339 1427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b++;
1340 1428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( alignment[j]==2 ){
1341 1429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Insert one line on the right */
1342 1430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.n = 0;
1343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sbsWriteSpace(&s, width + 7);
1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( escHtml ){
1431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sbsWriteSpace(&s, s.width + 7);
1432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s.escHtml ){
1345 1433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sbsWrite(&s, " > ", 6);
1346 1434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1347 1435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sbsWrite(&s, " > ", 3);
1348 1436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1349 1437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sbsWriteLineno(&s, b);
@@ -1833,10 +1921,11 @@
1833 1921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1834 1922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *text_diff(
1835 1923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pA_Blob, /* FROM file */
1836 1924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pB_Blob, /* TO file */
1837 1925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pOut, /* Write diff here if not NULL */
1926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ReCompiled *pRe, /* Only output changes where this Regexp matches */
1838 1927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags /* DIFF_* flags defined above */
1839 1928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1840 1929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ignoreEolWs; /* Ignore whitespace at the end of lines */
1841 1930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nContext; /* Amount of context to display */
1842 1931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DContext c;
@@ -1844,11 +1933,10 @@
1844 1933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( diffFlags & DIFF_INVERT ){
1845 1934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pTemp = pA_Blob;
1846 1935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pA_Blob = pB_Blob;
1847 1936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pB_Blob = pTemp;
1848 1937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nContext = diff_context_lines(diffFlags);
1850 1938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ignoreEolWs = (diffFlags & DIFF_IGNORE_EOLWS)!=0;
1851 1939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1852 1940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Prepare the input files */
1853 1941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&c, 0, sizeof(c));
1854 1942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c.aFrom = break_into_lines(blob_str(pA_Blob), blob_size(pA_Blob),
@@ -1868,17 +1956,14 @@
1868 1956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_all(&c);
1869 1957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (diffFlags & DIFF_NOOPT)==0 ) diff_optimize(&c);
1870 1958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1871 1959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOut ){
1872 1960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Compute a context or side-by-side diff into pOut */
1873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int escHtml = (diffFlags & DIFF_HTML)!=0;
1874 1961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( diffFlags & DIFF_SIDEBYSIDE ){
1875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int width = diff_width(diffFlags);
1876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sbsDiff(&c, pOut, nContext, width, escHtml);
1962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sbsDiff(&c, pOut, pRe, diffFlags);
1877 1963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int showLn = (diffFlags & DIFF_LINENO)!=0;
1879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- contextDiff(&c, pOut, nContext, showLn, escHtml);
1964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ contextDiff(&c, pOut, pRe, diffFlags);
1880 1965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1881 1966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(c.aFrom);
1882 1967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(c.aTo);
1883 1968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(c.aEdit);
1884 1969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
@@ -1941,11 +2026,11 @@
1941 2026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc<4 ) usage("FILE1 FILE2 ...");
1942 2027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_read_from_file(&a, g.argv[2]);
1943 2028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=3; i<g.argc; i++){
1944 2029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>3 ) fossil_print("-------------------------------\n");
1945 2030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_read_from_file(&b, g.argv[i]);
1946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- R = text_diff(&a, &b, 0, diffFlags);
2031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ R = text_diff(&a, &b, 0, 0, diffFlags);
1947 2032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(r=0; R[r] || R[r+1] || R[r+2]; r += 3){
1948 2033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print(" copy %4d delete %4d insert %4d\n", R[r], R[r+1], R[r+2]);
1949 2034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1950 2035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* free(R); */
1951 2036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&b);
@@ -1960,25 +2045,33 @@
1960 2045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Print the difference between two files. The usual diff options apply.
1961 2046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1962 2047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void test_diff_cmd(void){
1963 2048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob a, b, out;
1964 2049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlag;
2050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zRe; /* Regex filter for diff output */
2051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ReCompiled *pRe = 0; /* Regex filter for diff output */
1965 2052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1966 2053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("tk",0,0)!=0 ){
1967 2054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_tk("test-diff", 2);
1968 2055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
1969 2056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1970 2057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
find_option("i",0,0);
2058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zRe = find_option("regexp","e",1);
2059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zRe ){
2060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zErr = re_compile(&pRe, zRe, 0);
2061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zErr ) fossil_fatal("regex error: %s", zErr);
2062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1971 2063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diffFlag = diff_options();
1972 2064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
verify_all_options();
1973 2065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=4 ) usage("FILE1 FILE2");
1974 2066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_print_filenames(g.argv[2], g.argv[3], diffFlag);
1975 2067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_read_from_file(&a, g.argv[2]);
1976 2068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_read_from_file(&b, g.argv[3]);
1977 2069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&out);
1978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- text_diff(&a, &b, &out, diffFlag);
2070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ text_diff(&a, &b, &out, pRe, diffFlag);
1979 2071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_write_to_file(&out, "-");
2072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ re_free(pRe);
1980 2073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1981 2074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1982 2075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**************************************************************************
1983 2076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The basic difference engine is above. What follows is the annotation
1984 2077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** engine. Both are in the same file since they share many components.
1985 2078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!