Fossil SCM

Bug fix in the handling of tabs on a side-by-side diff.

drh 2012-02-05 00:22 trunk
Commit 07a0ade926f3bd8af3d1a2cd55b095d6967d8c18
1 file changed +4 -4
+4 -4
--- src/diff.c
+++ src/diff.c
@@ -384,20 +384,20 @@
384384
** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters
385385
** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set.
386386
*/
387387
static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){
388388
int n = pLine->h & LENGTH_MASK;
389
- int i, j;
389
+ int i, j, k;
390390
const char *zIn = pLine->z;
391391
char *z = &p->zLine[p->n];
392392
int w = p->width;
393393
if( n>w ) n = w;
394
- for(i=j=0; i<n; i++){
394
+ for(i=j=k=0; k<n; i++, k++){
395395
char c = zIn[i];
396396
if( c=='\t' ){
397397
z[j++] = ' ';
398
- while( (j&7)!=0 && j<n ) z[j++] = ' ';
398
+ while( (k&7)!=0 && k<n ){ z[j++] = ' '; k++; }
399399
}else if( c=='\r' || c=='\f' ){
400400
z[j++] = ' ';
401401
}else if( c=='<' && p->escHtml ){
402402
memcpy(&z[j], "&lt;", 4);
403403
j += 4;
@@ -414,11 +414,11 @@
414414
if( (flags & SBS_ENDSPAN) && p->escHtml ){
415415
memcpy(&z[j], "</span>", 7);
416416
j += 7;
417417
}
418418
if( (flags & SBS_PAD)!=0 ){
419
- while( i<w ){ i++; z[j++] = ' '; }
419
+ while( k<w ){ k++; z[j++] = ' '; }
420420
}
421421
if( flags & SBS_NEWLINE ){
422422
z[j++] = '\n';
423423
}
424424
p->n += j;
425425
--- src/diff.c
+++ src/diff.c
@@ -384,20 +384,20 @@
384 ** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters
385 ** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set.
386 */
387 static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){
388 int n = pLine->h & LENGTH_MASK;
389 int i, j;
390 const char *zIn = pLine->z;
391 char *z = &p->zLine[p->n];
392 int w = p->width;
393 if( n>w ) n = w;
394 for(i=j=0; i<n; i++){
395 char c = zIn[i];
396 if( c=='\t' ){
397 z[j++] = ' ';
398 while( (j&7)!=0 && j<n ) z[j++] = ' ';
399 }else if( c=='\r' || c=='\f' ){
400 z[j++] = ' ';
401 }else if( c=='<' && p->escHtml ){
402 memcpy(&z[j], "&lt;", 4);
403 j += 4;
@@ -414,11 +414,11 @@
414 if( (flags & SBS_ENDSPAN) && p->escHtml ){
415 memcpy(&z[j], "</span>", 7);
416 j += 7;
417 }
418 if( (flags & SBS_PAD)!=0 ){
419 while( i<w ){ i++; z[j++] = ' '; }
420 }
421 if( flags & SBS_NEWLINE ){
422 z[j++] = '\n';
423 }
424 p->n += j;
425
--- src/diff.c
+++ src/diff.c
@@ -384,20 +384,20 @@
384 ** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters
385 ** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set.
386 */
387 static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){
388 int n = pLine->h & LENGTH_MASK;
389 int i, j, k;
390 const char *zIn = pLine->z;
391 char *z = &p->zLine[p->n];
392 int w = p->width;
393 if( n>w ) n = w;
394 for(i=j=k=0; k<n; i++, k++){
395 char c = zIn[i];
396 if( c=='\t' ){
397 z[j++] = ' ';
398 while( (k&7)!=0 && k<n ){ z[j++] = ' '; k++; }
399 }else if( c=='\r' || c=='\f' ){
400 z[j++] = ' ';
401 }else if( c=='<' && p->escHtml ){
402 memcpy(&z[j], "&lt;", 4);
403 j += 4;
@@ -414,11 +414,11 @@
414 if( (flags & SBS_ENDSPAN) && p->escHtml ){
415 memcpy(&z[j], "</span>", 7);
416 j += 7;
417 }
418 if( (flags & SBS_PAD)!=0 ){
419 while( k<w ){ k++; z[j++] = ' '; }
420 }
421 if( flags & SBS_NEWLINE ){
422 z[j++] = '\n';
423 }
424 p->n += j;
425

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button