mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 22:25:03 +00:00
speakup: Support spelling unicode characters
This supports spelling unicode characters by just passing them to the speech synthesis in direct mode. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c188966067
commit
33590c1852
1 changed files with 9 additions and 9 deletions
|
@ -432,7 +432,7 @@ static void speak_char(u16 ch)
|
||||||
char *cp;
|
char *cp;
|
||||||
struct var_t *direct = spk_get_var(DIRECT);
|
struct var_t *direct = spk_get_var(DIRECT);
|
||||||
|
|
||||||
if (direct && direct->u.n.value) {
|
if (ch >= 0x100 || (direct && direct->u.n.value)) {
|
||||||
if (IS_CHAR(ch, B_CAP)) {
|
if (IS_CHAR(ch, B_CAP)) {
|
||||||
spk_pitch_shift++;
|
spk_pitch_shift++;
|
||||||
synth_printf("%s", spk_str_caps_start);
|
synth_printf("%s", spk_str_caps_start);
|
||||||
|
@ -443,8 +443,6 @@ static void speak_char(u16 ch)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ch >= 0x100)
|
|
||||||
return;
|
|
||||||
cp = spk_characters[ch];
|
cp = spk_characters[ch];
|
||||||
if (cp == NULL) {
|
if (cp == NULL) {
|
||||||
pr_info("speak_char: cp == NULL!\n");
|
pr_info("speak_char: cp == NULL!\n");
|
||||||
|
@ -712,17 +710,16 @@ static void spell_word(struct vc_data *vc)
|
||||||
char *cp1;
|
char *cp1;
|
||||||
char *str_cap = spk_str_caps_stop;
|
char *str_cap = spk_str_caps_stop;
|
||||||
char *last_cap = spk_str_caps_stop;
|
char *last_cap = spk_str_caps_stop;
|
||||||
|
struct var_t *direct = spk_get_var(DIRECT);
|
||||||
u16 ch;
|
u16 ch;
|
||||||
|
|
||||||
if (!get_word(vc))
|
if (!get_word(vc))
|
||||||
return;
|
return;
|
||||||
while ((ch = *cp)) {
|
while ((ch = *cp)) {
|
||||||
if (ch >= 0x100)
|
|
||||||
/* FIXME */
|
|
||||||
continue;
|
|
||||||
if (cp != buf)
|
if (cp != buf)
|
||||||
synth_printf(" %s ", delay_str[spk_spell_delay]);
|
synth_printf(" %s ", delay_str[spk_spell_delay]);
|
||||||
if (IS_CHAR(ch, B_CAP)) {
|
/* FIXME: Non-latin1 considered as lower case */
|
||||||
|
if (ch < 0x100 && IS_CHAR(ch, B_CAP)) {
|
||||||
str_cap = spk_str_caps_start;
|
str_cap = spk_str_caps_start;
|
||||||
if (*spk_str_caps_stop)
|
if (*spk_str_caps_stop)
|
||||||
spk_pitch_shift++;
|
spk_pitch_shift++;
|
||||||
|
@ -734,18 +731,21 @@ static void spell_word(struct vc_data *vc)
|
||||||
synth_printf("%s", str_cap);
|
synth_printf("%s", str_cap);
|
||||||
last_cap = str_cap;
|
last_cap = str_cap;
|
||||||
}
|
}
|
||||||
if (this_speakup_key == SPELL_PHONETIC &&
|
if (ch >= 0x100 || (direct && direct->u.n.value)) {
|
||||||
|
synth_putwc_s(ch);
|
||||||
|
} else if (this_speakup_key == SPELL_PHONETIC &&
|
||||||
ch <= 0x7f && isalpha(ch)) {
|
ch <= 0x7f && isalpha(ch)) {
|
||||||
ch &= 0x1f;
|
ch &= 0x1f;
|
||||||
cp1 = phonetic[--ch];
|
cp1 = phonetic[--ch];
|
||||||
|
synth_printf("%s", cp1);
|
||||||
} else {
|
} else {
|
||||||
cp1 = spk_characters[ch];
|
cp1 = spk_characters[ch];
|
||||||
if (*cp1 == '^') {
|
if (*cp1 == '^') {
|
||||||
synth_printf("%s", spk_msg_get(MSG_CTRL));
|
synth_printf("%s", spk_msg_get(MSG_CTRL));
|
||||||
cp1++;
|
cp1++;
|
||||||
}
|
}
|
||||||
|
synth_printf("%s", cp1);
|
||||||
}
|
}
|
||||||
synth_printf("%s", cp1);
|
|
||||||
cp++;
|
cp++;
|
||||||
}
|
}
|
||||||
if (str_cap != spk_str_caps_stop)
|
if (str_cap != spk_str_caps_stop)
|
||||||
|
|
Loading…
Reference in a new issue