- C Fix\sover-length\slines\sin\sthe\sshell\ssource\scode.
- D 2024-09-24T19:47:12.272
-C In\sthe\sCLI,\sfor\scolumnar\soutput\sformats,\stry\sto\saccount\sfor\sthe\spresence\sof\nzero-width\sand\sdouble-width\scharacters\sin\sthe\soutput\sand\sadjust\scolumn\swidths\naccordingly.
-D 2024-09-25T09:39:11.501
++C Merge\strunk\senhancements,\sand\sespecially\sthe\szero-\sand\sdouble-width\scharacter\nprocessing\sfor\scolumnar\soutputs\sinto\sthe\scli-stdlib\sbranch.
++D 2024-09-25T09:43:05.208
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F src/prepare.c 3ba0ad907b7773ed642f66cea8a2c9c8edc18841aa1050b6218dbb3479e86225
F src/printf.c 6a87534ebfb9e5346011191b1f3a7ebc457f5938c7e4feeea478ecf53f6a41b2
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
- F src/resolve.c b2cd748488012312824508639b6af908461e45403037d5c4e19d9b0e8195507f
+ F src/resolve.c 9750a281f7ba073b4e6da2be1a6c4071f5d841a7746c5fb3f70d6d793b6675ea
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe
- F src/shell.c.in 59d96ef5df9ba2f1f1982267385486b0a3fe5d9c04bcf00db8341064a6aaf72f
-F src/shell.c.in 9b68a945f3aafc78eac1a256a4a588a9310dbc61a0cd60378c5b7a78f789af50
++F src/shell.c.in 3eb4e28de9e629adba14f2314c0051ea462770fdc04972f15a3922810fec5959
F src/sqlite.h.in 77f55bd1978a04a14db211732f0a609077cf60ba4ccf9baf39988f508945419c
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P aeef82e974c24071e3211588001a92c7f122fbaf02d9dcf7fa5aaf30d2729f64
- R e0249c26fc1dbc90ee636c7d58ded95a
-P 42bb941584a1ac922ee6b0b6ecadce71c9259555563cf49913a6f820f3f9b887 b217e3004b58af0e777726bdd652b999ad41815261299ef4ce8f8d2f6b0afe8d
-R 5fcf6775e686fdd76943c66cce860cb0
-T +closed b217e3004b58af0e777726bdd652b999ad41815261299ef4ce8f8d2f6b0afe8d
++P f3fdf76a0d3abeb5202f2b6f26318815396da7df680073955bde60b13f84e797 9592b9ba3ad7a842cdd4c4010da278485a6fdec7e811bda01ebe640162a8c3b6
++R cb8cb8b7debcfd75af761c484fdbc0a1
U drh
- Z d330d508deb5561f036eaedfc6533764
-Z af457fc67e3efab459ef7260d9a5da46
++Z e3c77b1ca9fc0efcd7f2507f7b7e048d
# Remove this line to create a well-formed Fossil manifest.
** then right-justify the text. W is the width in UTF-8 characters, not
** in bytes. This is different from the %*.*s specification in printf
** since with %*.*s the width is measured in bytes, not characters.
+ **
+ ** Take into account zero-width and double-width Unicode characters.
+ ** In other words, a zero-width character does not count toward the
+ ** the w limit. A double-width character counts as two.
*/
-static void utf8_width_print(int w, const char *zUtf){
+static void utf8_width_print(FILE *out, int w, const char *zUtf){
- int i;
- int n;
+ const unsigned char *a = (const unsigned char*)zUtf;
+ unsigned char c;
+ int i = 0;
+ int n = 0;
int aw = w<0 ? -w : w;
if( zUtf==0 ) zUtf = "";
- for(i=n=0; zUtf[i]; i++){
- if( (zUtf[i]&0xc0)!=0x80 ){
- n++;
- if( n==aw ){
- do{ i++; }while( (zUtf[i]&0xc0)==0x80 );
+ while( (c = a[i])!=0 ){
+ if( (c&0xc0)==0xc0 ){
+ int u;
+ int len = decodeUtf8(a+i, &u);
+ int x = cli_wcwidth(u);
+ if( x+n>aw ){
break;
}
+ i += len;
+ n += x;
+ }else if( n>=aw ){
+ break;
+ }else{
+ n++;
+ i++;
}
}
if( n>=aw ){