Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Colorize the context diff. Add color to the line numbers so that they can be deemphasized. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | retro-sbsdiff |
| Files: | files | file ages | folders |
| SHA1: |
b57b035654aea0ec6f7ac09b529758fa |
| User & Date: | drh 2012-02-04 19:55:04.028 |
Context
|
2012-02-04
| ||
| 20:00 | Bug fix in the context-diff colorization. ... (check-in: ecf30837d4 user: drh tags: retro-sbsdiff) | |
| 19:55 | Colorize the context diff. Add color to the line numbers so that they can be deemphasized. ... (check-in: b57b035654 user: drh tags: retro-sbsdiff) | |
| 19:34 | Revised default color scheme. Add line-numbers to context diff. ... (check-in: 6a6697694c user: drh tags: retro-sbsdiff) | |
Changes
Changes to src/diff.c.
| ︙ | ︙ | |||
147 148 149 150 151 152 153 |
static int same_dline(DLine *pA, DLine *pB){
return pA->h==pB->h && memcmp(pA->z,pB->z,pA->h & LENGTH_MASK)==0;
}
/*
** Append a single line of "diff" output to pOut.
*/
| | | > > > > > > > > > > > | > | > > | 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
static int same_dline(DLine *pA, DLine *pB){
return pA->h==pB->h && memcmp(pA->z,pB->z,pA->h & LENGTH_MASK)==0;
}
/*
** Append a single line of "diff" output to pOut.
*/
static void appendDiffLine(Blob *pOut, char cPrefix, DLine *pLine, int html){
blob_append(pOut, &cPrefix, 1);
if( html ){
if( cPrefix=='+' ){
blob_append(pOut, "<span class=\"diffadd\">", -1);
}else if( cPrefix=='-' ){
blob_append(pOut, "<span class=\"diffrm\">", -1);
}
blob_appendf(pOut, "%.*h", (pLine->h & LENGTH_MASK), pLine->z);
if( cPrefix!=' ' ){
blob_append(pOut, "</span>", -1);
}
}else{
blob_append(pOut, pLine->z, pLine->h & LENGTH_MASK);
}
blob_append(pOut, "\n", 1);
}
/*
** Append line numbers to the context diff output. Zero or negative numbers
** are blanks.
*/
static void appendDiffLineno(Blob *pOut, int lnA, int lnB, int html){
if( html ) blob_append(pOut, "<span class=\"diffln\">", -1);
if( lnA>0 ){
blob_appendf(pOut, "%6d ", lnA);
}else{
blob_append(pOut, " ", 7);
}
if( lnB>0 ){
blob_appendf(pOut, "%6d ", lnB);
}else{
blob_append(pOut, " ", 8);
}
if( html ) blob_append(pOut, "</span>", -1);
}
/*
** Expand the size of aEdit[] array to hold nEdit elements.
*/
static void expandEdit(DContext *p, int nEdit){
p->aEdit = fossil_realloc(p->aEdit, nEdit*sizeof(int));
|
| ︙ | ︙ | |||
216 217 218 219 220 221 222 | } /* ** Given a diff context in which the aEdit[] array has been filled ** in, compute a context diff into pOut. */ | | > > > > > > | 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
}
/*
** Given a diff context in which the aEdit[] array has been filled
** in, compute a context diff into pOut.
*/
static void contextDiff(
DContext *p, /* The difference */
Blob *pOut, /* Output a context diff to here */
int nContext, /* Number of lines of context */
int showLn, /* Show line numbers */
int html /* Render as HTML */
){
DLine *A; /* Left side of the diff */
DLine *B; /* Right side of the diff */
int a = 0; /* Index of next line in A[] */
int b = 0; /* Index of next line in B[] */
int *R; /* Array of COPY/DELETE/INSERT triples */
int r; /* Index into R[] */
int nr; /* Number of COPY/DELETE/INSERT triples to process */
|
| ︙ | ︙ | |||
280 281 282 283 284 285 286 |
nb ? b+skip+1 : 0, nb);
/* Show the initial common area */
a += skip;
b += skip;
m = R[r] - skip;
for(j=0; j<m; j++){
| | | | | | | | | | | < < < < < < < < < | 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 |
nb ? b+skip+1 : 0, nb);
/* Show the initial common area */
a += skip;
b += skip;
m = R[r] - skip;
for(j=0; j<m; j++){
if( showLn ) appendDiffLineno(pOut, a+j, b+j, html);
appendDiffLine(pOut, ' ', &A[a+j], html);
}
a += m;
b += m;
/* Show the differences */
for(i=0; i<nr; i++){
m = R[r+i*3+1];
for(j=0; j<m; j++){
if( showLn ) appendDiffLineno(pOut, a+j, 0, html);
appendDiffLine(pOut, '-', &A[a+j], html);
}
a += m;
m = R[r+i*3+2];
for(j=0; j<m; j++){
if( showLn ) appendDiffLineno(pOut, 0, b+j, html);
appendDiffLine(pOut, '+', &B[b+j], html);
}
b += m;
if( i<nr-1 ){
m = R[r+i*3+3];
for(j=0; j<m; j++){
if( showLn ) appendDiffLineno(pOut, a+j, b+j, html);
appendDiffLine(pOut, ' ', &B[b+j], html);
}
b += m;
a += m;
}
}
/* Show the final common area */
assert( nr==i );
m = R[r+nr*3];
if( m>nContext ) m = nContext;
for(j=0; j<m; j++){
if( showLn ) appendDiffLineno(pOut, a+j, b+j, html);
appendDiffLine(pOut, ' ', &B[b+j], html);
}
}
}
/*
** Status of a single output line
*/
typedef struct SbsLine SbsLine;
struct SbsLine {
char *zLine; /* The output line under construction */
int n; /* Index of next unused slot in the zLine[] */
int width; /* Maximum width of a column in the output */
unsigned char escHtml; /* True to escape html characters */
};
/*
** Flags for sbsWriteText()
*/
#define SBS_NEWLINE 0x0001 /* End with \n\000 */
#define SBS_PAD 0x0002 /* Pad output to width spaces */
#define SBS_ENDSPAN 0x0004 /* Write a </span> after text */
|
| ︙ | ︙ | |||
415 416 417 418 419 420 421 422 423 424 425 426 427 428 |
/*
** Append a string to the output only if we are rendering HTML.
*/
static void sbsWriteHtml(SbsLine *p, const char *zIn){
if( p->escHtml ) sbsWrite(p, zIn, strlen(zIn));
}
/*
** Given a diff context in which the aEdit[] array has been filled
** in, compute a side-by-side diff into pOut.
*/
static void sbsDiff(
| > > > > > > > > > > > | 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 |
/*
** Append a string to the output only if we are rendering HTML.
*/
static void sbsWriteHtml(SbsLine *p, const char *zIn){
if( p->escHtml ) sbsWrite(p, zIn, strlen(zIn));
}
/*
** Write a 6-digit line number followed by a single space onto the line.
*/
static void sbsWriteLineno(SbsLine *p, int ln){
sbsWriteHtml(p, "<span class=\"diffln\">");
sqlite3_snprintf(7, &p->zLine[p->n], "%5d ", ln+1);
p->n += 6;
sbsWriteHtml(p, "</span>");
p->zLine[p->n++] = ' ';
}
/*
** Given a diff context in which the aEdit[] array has been filled
** in, compute a side-by-side diff into pOut.
*/
static void sbsDiff(
|
| ︙ | ︙ | |||
885 886 887 888 889 890 891 892 893 |
}
/* Compute the difference */
diff_all(&c);
if( pOut ){
/* Compute a context or side-by-side diff into pOut */
if( diffFlags & DIFF_SIDEBYSIDE ){
int width = diff_width(diffFlags);
| > < | | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 |
}
/* Compute the difference */
diff_all(&c);
if( pOut ){
/* Compute a context or side-by-side diff into pOut */
int escHtml = (diffFlags & DIFF_HTML)!=0;
if( diffFlags & DIFF_SIDEBYSIDE ){
int width = diff_width(diffFlags);
sbsDiff(&c, pOut, nContext, width, escHtml);
}else{
int showLn = (diffFlags & DIFF_LINENO)!=0;
contextDiff(&c, pOut, nContext, showLn, escHtml);
}
free(c.aFrom);
free(c.aTo);
free(c.aEdit);
return 0;
}else{
/* If a context diff is not requested, then return the
|
| ︙ | ︙ |
Changes to src/info.c.
| ︙ | ︙ | |||
272 273 274 275 276 277 278 |
blob_zero(&out);
if( diffFlags & DIFF_SIDEBYSIDE ){
text_diff(&from, &to, &out, diffFlags | DIFF_HTML);
@ <div class="sbsdiff">
@ %s(blob_str(&out))
@ </div>
}else{
| | > | > | 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
blob_zero(&out);
if( diffFlags & DIFF_SIDEBYSIDE ){
text_diff(&from, &to, &out, diffFlags | DIFF_HTML);
@ <div class="sbsdiff">
@ %s(blob_str(&out))
@ </div>
}else{
text_diff(&from, &to, &out, diffFlags | DIFF_LINENO | DIFF_HTML);
@ <div class="udiff">
@ %s(blob_str(&out))
@ </div>
}
blob_reset(&from);
blob_reset(&to);
blob_reset(&out);
}
|
| ︙ | ︙ |
Changes to src/style.c.
| ︙ | ︙ | |||
775 776 777 778 779 780 781 782 783 784 785 786 787 788 |
"deleted in a diff",
@ background-color: #ffe0e0;
},
{ "span.diffhr",
"suppressed lines in a diff",
@ color: #0000ff;
},
{ 0,
0,
0
}
};
/*
| > > > > | 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 |
"deleted in a diff",
@ background-color: #ffe0e0;
},
{ "span.diffhr",
"suppressed lines in a diff",
@ color: #0000ff;
},
{ "span.diffln",
"line nubmers in a diff",
@ color: #a0a0a0;
},
{ 0,
0,
0
}
};
/*
|
| ︙ | ︙ |