]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge trunk enhancements, and especially the zero- and double-width character
authordrh <>
Wed, 25 Sep 2024 09:43:05 +0000 (09:43 +0000)
committerdrh <>
Wed, 25 Sep 2024 09:43:05 +0000 (09:43 +0000)
processing for columnar outputs into the cli-stdlib branch.

FossilOrigin-Name: d6262a4bcd7b0334b23ae4d194ca2bce7c6554ee6c678666b24c830e4c14a467

1  2 
manifest
manifest.uuid
src/shell.c.in

diff --cc manifest
index 42bba291526c9c183fef630d364f27da0edf3a5b,e74bcacf3c8fd268aacac4d8723436420408a940..97936fe65a7735f82546e6cd15680bc099030d6a
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- 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
@@@ -767,10 -765,10 +767,10 @@@ F src/pragma.h e690a356c18e98414d2e870e
  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
@@@ -2215,8 -2213,9 +2215,8 @@@ F vsixtest/vsixtest.tcl 6195aba1f12a5e1
  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.
diff --cc manifest.uuid
index fd858c80cf301263ad73a55c6ff9c9dc6b6ed878,5d05a8c7ec528f03bd7b493653796b31cb18399f..8afc0d5af4735470b4fa8ca0195500ffdf261ada
@@@ -1,1 -1,1 +1,1 @@@
- f3fdf76a0d3abeb5202f2b6f26318815396da7df680073955bde60b13f84e797
 -9592b9ba3ad7a842cdd4c4010da278485a6fdec7e811bda01ebe640162a8c3b6
++d6262a4bcd7b0334b23ae4d194ca2bce7c6554ee6c678666b24c830e4c14a467
diff --cc src/shell.c.in
index 6454c2d935bd14c56397494fbf84bcb6a6115e5d,f40fdaecbcdf4c4672022dfd16d1d17a10d4b804..cdcba084da03cb42fbe413fc10b382e2b07ea166
@@@ -629,19 -839,33 +793,33 @@@ int cli_wcswidth(const char *z)
  ** 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 ){