1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-10-11 05:29:28 -04:00

Bug 821: With CONFIG_UTF8 and UTF-8 I/O, form_state.value is in UTF-8.

That is even if the document and the terminal have some other charset.
This commit is contained in:
Kalle Olavi Niemitalo 2006-10-23 23:01:47 +03:00 committed by Kalle Olavi Niemitalo
parent 50b6a61f31
commit 4076759890
2 changed files with 21 additions and 16 deletions

View File

@ -1744,26 +1744,29 @@ field_op(struct session *ses, struct document_view *doc_view,
} }
#ifdef CONFIG_UTF8 #ifdef CONFIG_UTF8
{ if (ses->tab->term->utf8) {
/* The charset of the terminal; we assume /* fs->value is in UTF-8 regardless of
* fs->value is in this charset. * the charset of the terminal. */
* (Is that OK?) */ text = encode_utf8(get_kbd_key(ev));
} else {
/* fs->value is in the charset of the
* terminal. */
int cp = get_opt_codepage_tree(ses->tab->term->spec, int cp = get_opt_codepage_tree(ses->tab->term->spec,
"charset"); "charset");
text = u2cp_no_nbsp(get_kbd_key(ev), cp); text = u2cp_no_nbsp(get_kbd_key(ev), cp);
length = strlen(text);
if (strlen(fs->value) + length > fc->maxlength
|| !insert_in_string(&fs->value, fs->state, text, length)) {
status = FRAME_EVENT_OK;
break;
}
fs->state += length;
if (fc->type == FC_TEXTAREA)
fs->state_cell = 0;
} }
length = strlen(text);
if (strlen(fs->value) + length > fc->maxlength
|| !insert_in_string(&fs->value, fs->state, text, length)) {
status = FRAME_EVENT_OK;
break;
}
fs->state += length;
if (fc->type == FC_TEXTAREA)
fs->state_cell = 0;
#else #else
fs->value[fs->state++] = get_kbd_key(ev); fs->value[fs->state++] = get_kbd_key(ev);
#endif /* CONFIG_UTF8 */ #endif /* CONFIG_UTF8 */

View File

@ -115,7 +115,9 @@ get_link_cursor_offset(struct document_view *doc_view, struct link *link)
struct form_control *fc; struct form_control *fc;
struct form_state *fs; struct form_state *fs;
#ifdef CONFIG_UTF8 #ifdef CONFIG_UTF8
int utf8 = doc_view->document->options.utf8; /* The encoding of form fields depends on the terminal,
* rather than on the document. */
int utf8 = doc_view->session->tab->term->utf8;
#endif /* CONFIG_UTF8 */ #endif /* CONFIG_UTF8 */
switch (link->type) { switch (link->type) {