From 85ca0c585720f5566a1dd7a9899d0f52742a42d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Sat, 3 Jul 2021 11:36:46 +0200 Subject: [PATCH] sdtui: normalize whitespace in clipboard input --- LICENSE | 2 +- src/sdtui.c | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/LICENSE b/LICENSE index 407b3d9..594da52 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013 - 2020, Přemysl Eric Janouch +Copyright (c) 2013 - 2021, Přemysl Eric Janouch Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. diff --git a/src/sdtui.c b/src/sdtui.c index d593de5..815648a 100644 --- a/src/sdtui.c +++ b/src/sdtui.c @@ -1,7 +1,7 @@ /* * StarDict terminal UI * - * Copyright (c) 2013 - 2020, Přemysl Eric Janouch + * Copyright (c) 2013 - 2021, Přemysl Eric Janouch * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. @@ -980,7 +980,7 @@ app_show_help (Application *self) { PROJECT_NAME " " PROJECT_VERSION, _("Terminal UI for StarDict dictionaries"), - "Copyright (c) 2013 - 2020, Přemysl Eric Janouch", + "Copyright (c) 2013 - 2021, Přemysl Eric Janouch", "", _("Type to search") }; @@ -1842,13 +1842,26 @@ app_set_input (Application *self, const gchar *text, gsize text_len) self->input_pos = 0; gunichar *p = output; + gboolean last_was_space = false; while (size--) { - // XXX: skip? - if (!g_unichar_isprint (*p)) + // Normalize whitespace, to cover OCR anomalies + gunichar c = *p++; + if (!g_unichar_isspace (c)) + last_was_space = FALSE; + else if (last_was_space) + continue; + else + { + c = ' '; + last_was_space = TRUE; + } + + // XXX: skip? Might be some binary nonsense. + if (!g_unichar_isprint (c)) break; - g_array_insert_val (self->input, self->input_pos++, *p++); + g_array_insert_val (self->input, self->input_pos++, c); } g_free (output);