summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNicolas Pitre <npitre@baylibre.com>2025-04-09 21:14:00 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-04-11 16:55:55 +0200
commitcd6937d42bca46f2143544918e535d6fd22b71b7 (patch)
treec05e2bb7311d1235142f6fc1e9274f40e7a20131 /drivers
parent54af55b990eda5a6a0140a3cded8094b42c0c3b7 (diff)
vt: support Unicode recomposition
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@baylibre.com> Link: https://lore.kernel.org/r/20250410011839.64418-9-nico@fluxnic.net Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/tty/vt/vt.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 5d53feeb5d2bf..e3d35c4f92045 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;
+ }
}
}
}