[PATCH 08/11] vt: support Unicode recomposition

From: Nicolas Pitre
Date: Wed Apr 09 2025 - 21:20:45 EST


From: Nicolas Pitre <npitre@xxxxxxxxxxxx>

Try replacing any decomposed Unicode sequence by the corresponding
recomposed code point. Code point to glyph correspondance works best
after recomposition, and this apply mostly to single-width code points
therefore we can't preserve them in their decomposed form anyway.

With all the infrastructure in place this is now trivial to do.

Signed-off-by: Nicolas Pitre <npitre@xxxxxxxxxxxx>
---
drivers/tty/vt/vt.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 5d53feeb5d..e3d35c4f92 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -2953,8 +2953,15 @@ static int vc_con_write_normal(struct vc_data *vc, int tc, int c,
* double-width.
*/
} else {
- /* Otherwise zero-width code points are ignored */
- goto out;
+ /* try recomposition */
+ prev_c = ucs_recompose(prev_c, c);
+ if (prev_c != 0) {
+ vc_con_rewind(vc);
+ c = prev_c;
+ } else {
+ /* Otherwise zero-width code points are ignored */
+ goto out;
+ }
}
}
}
--
2.49.0