Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Account for multibyte unicode characters when computing column widths for side-by-side diffs. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
484f8d29af0d130e5b5bb62eb69285a1 |
| User & Date: | drh 2012-06-20 11:02:30.823 |
Context
|
2012-06-20
| ||
| 11:31 | Update the diff-test-1.wiki tests to include a case for side-by-side diffs of multibyte characters. ... (check-in: c2b681e635 user: drh tags: trunk) | |
| 11:02 | Account for multibyte unicode characters when computing column widths for side-by-side diffs. ... (check-in: 484f8d29af user: drh tags: trunk) | |
| 10:57 | Add a comment that contains multi-byte unicode characters. This will be used for testing diff logic. ... (check-in: d1fc2f4a16 user: drh tags: trunk) | |
Changes
Changes to src/diff.c.
| ︙ | ︙ | |||
377 378 379 380 381 382 383 | #define SBS_PAD 0x0002 /* Pad output to width spaces */ /* ** Write up to width characters of pLine into p->zLine[]. Translate tabs into ** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters ** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set. ** | | | 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 |
#define SBS_PAD 0x0002 /* Pad output to width spaces */
/*
** Write up to width characters of pLine into p->zLine[]. Translate tabs into
** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters
** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set.
**
** This comment contains multibyte unicode characters (ü, Æ, ð) in order
** to test the ability of the diff code to handle such characters.
*/
static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){
int n = pLine->h & LENGTH_MASK;
int i; /* Number of input characters consumed */
int j; /* Number of output characters generated */
int k; /* Cursor position */
|
| ︙ | ︙ | |||
428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
memcpy(&z[j], "&", 5);
j += 5;
}else if( c=='>' && p->escHtml ){
memcpy(&z[j], ">", 4);
j += 4;
}else{
z[j++] = c;
}
}
if( needEndSpan ){
memcpy(&z[j], "</span>", 7);
j += 7;
}
if( (flags & SBS_PAD)!=0 ){
| > | 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 |
memcpy(&z[j], "&", 5);
j += 5;
}else if( c=='>' && p->escHtml ){
memcpy(&z[j], ">", 4);
j += 4;
}else{
z[j++] = c;
if( (c&0xc0)==0x80 ) k--;
}
}
if( needEndSpan ){
memcpy(&z[j], "</span>", 7);
j += 7;
}
if( (flags & SBS_PAD)!=0 ){
|
| ︙ | ︙ | |||
883 884 885 886 887 888 889 | int i, j; /* Loop counters */ int m, ma, mb;/* Number of lines to output */ int skip; /* Number of lines to skip */ int nChunk = 0; /* Number of chunks of diff output seen so far */ SbsLine s; /* Output line buffer */ memset(&s, 0, sizeof(s)); | | | 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 | int i, j; /* Loop counters */ int m, ma, mb;/* Number of lines to output */ int skip; /* Number of lines to skip */ int nChunk = 0; /* Number of chunks of diff output seen so far */ SbsLine s; /* Output line buffer */ memset(&s, 0, sizeof(s)); s.zLine = fossil_malloc( 15*width + 200 ); if( s.zLine==0 ) return; s.width = width; s.escHtml = escHtml; s.iStart = -1; s.iStart2 = 0; s.iEnd = -1; A = p->aFrom; |
| ︙ | ︙ |