]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhance "box" and "column" mode formatting in the CLI to better deal with
authordrh <>
Sat, 31 May 2025 20:51:42 +0000 (20:51 +0000)
committerdrh <>
Sat, 31 May 2025 20:51:42 +0000 (20:51 +0000)
double-wide characters.

FossilOrigin-Name: b0de22ed0abf2ea5d269f191c884d7b2be167a2ed27018c25aaa0ea238cd621a

manifest
manifest.uuid
src/shell.c.in
test/dblwidth-a.sql [new file with mode: 0644]

index db32e864353aea3a8f2ef9aa3c0dea1210a2c613..3801f5988e3237992e8c56b6dd655b7ee6ef6b86 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C New\smakefile\starget\s"xdevtest"\sworks\slike\s"releasetest"\sexcept\sthat\sit\nomits\sthe\s"verify-source"\sdependency\sso\sthat\sit\scan\sbe\srun\swith\suncommitted\nchanges\sin\sthe\ssource\stree.
-D 2025-05-31T18:26:37.671
+C Enhance\s"box"\sand\s"column"\smode\sformatting\sin\sthe\sCLI\sto\sbetter\sdeal\swith\ndouble-wide\scharacters.
+D 2025-05-31T20:51:42.476
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -786,7 +786,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c d40fe18d7c2fd0339f5846ffcf7d6809866e380acdf14c76fb2af87e9fe13f64
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c 9929e56e78f958657bfbb8234916473468243f90af359cc646d97c3ee809c79c
-F src/shell.c.in ba53a52dafb167ac6320703da741386c34fbcabe8c078a188bb9f89808e3ef8f
+F src/shell.c.in 1da613953db4c8d50e3a4a66fa7d69b4c95edb3628941d732637d3c35ea0dce6
 F src/sqlite.h.in 22882ddd3a70751aa8864c81993ee4562ed54c2c508b6270f75e223ffee38e1b
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
 F src/sqlite3ext.h 0bfd049bb2088cc44c2ad54f2079d1c6e43091a4e1ce8868779b75f6c1484f1e
@@ -1084,6 +1084,7 @@ F test/dbfuzz.c fc566102f72c8af84ae8077b4faf7f056c571e6fa7a32e98b66e42b7505f47b6
 F test/dbfuzz001.test 6c9a4622029d69dc38926f115864b055cb2f39badd25ec22cbfb130c8ba8e9c3
 F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee
 F test/dbfuzz2.c 4b3c12de4d98b1b2d908ab03d217d4619e47c8b23d5e67f8a6f2b1bdee7cae23
+F test/dblwidth-a.sql eb4141518610e52f931a55a984310075e98dc31eee5a28ae806b1e35377be85a
 F test/dbpage.test 63fab1eb026bada121107e53436fa749bbf83281dc9dea17af422f7a5c0f289f
 F test/dbpagefault.test ea39de2ca86041a9c6df1135645180a76d0a8da93ac159e2fafe38e39636530b
 F test/dbstatus.test 4a4221a883025ffd39696b3d1b3910b928fb097d77e671351acb35f3aed42759
@@ -2207,8 +2208,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 8d393ca07fe09f48d77adb517e2e4baaa58a9251422de62a0504999205d3ea1d
-R 9b94db4e5d892a93cf1670d233c18f80
+P 1afb1ac3e9f0a122f1374799c09b60a0dd5443434d4567d94385096ada91bf12
+R 241d4fe28f71a66e02a0774aedd929d3
 U drh
-Z 1c2aee3d74e96a6684f9847b4822e599
+Z 36464e257b6f6b054003c79b6284e296
 # Remove this line to create a well-formed Fossil manifest.
index effd39b1f33841d880c314aa00dfd6534ca3476b..cebff17bade0b4e02736e093e83f477f869f260f 100644 (file)
@@ -1 +1 @@
-1afb1ac3e9f0a122f1374799c09b60a0dd5443434d4567d94385096ada91bf12
+b0de22ed0abf2ea5d269f191c884d7b2be167a2ed27018c25aaa0ea238cd621a
index 8660bd78a24d0ae64def699c40f15b3a6a6e6ac5..363685eb0daf4f0e02a9465af52df1b6db71228d 100644 (file)
@@ -887,12 +887,21 @@ static int strlen30(const char *z){
 
 /*
 ** Return the length of a string in characters.  Multibyte UTF8 characters
-** count as a single character.
+** count as a single character for single-width characters, or as two
+** characters for double-width characters.
 */
 static int strlenChar(const char *z){
   int n = 0;
   while( *z ){
-    if( (0xc0&*(z++))!=0x80 ) n++;
+    if( (0x80&z[0])==0 ){
+      n++;
+      z++;
+    }else{
+      int u = 0;
+      int len = decodeUtf8((const u8*)z, &u);
+      z += len;
+      n += cli_wcwidth(u);
+    }
   }
   return n;
 }
diff --git a/test/dblwidth-a.sql b/test/dblwidth-a.sql
new file mode 100644 (file)
index 0000000..38c2196
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+** Run this script using "sqlite3" to confirm that the command-line
+** shell properly handles the output of double-width characters.
+**
+** https://sqlite.org/forum/forumpost/008ac80276
+*/
+.mode box
+CREATE TABLE data(word TEXT, description TEXT);
+INSERT INTO data VALUES('〈οὐκέτι〉','Greek without dblwidth <...>');
+.print .mode box
+SELECT * FROM data;
+.mode table
+.print .mode table
+SELECT * FROM data;
+.mode qbox
+.print .mode qbox
+SELECT * FROM data;
+.mode column
+.print .mode column
+SELECT * FROM data;