|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Aleksey Cheusov 2:5020/400 27 Jun 2003 19:32:06 To : Anton Kovalenko Subject : Re: Пересборка иксов ради 15% прироста производительности -------------------------------------------------------------------------------- Anton Kovalenko <a_kovalenko@fromru.com> writes: > >>>>> Aleksey Cheusov writes: > > >> Похоже, что readline неправильно классифицирует русские буквы -- > >> думает, что это не буквы, а так -- символы вроде пробела... И > >> слова из них состоять не могут. > > AC> Это тоже понятно. Hо я подумал, может ты и это знаешь тоже ;) > AC> В смысле, может, знаешь, есть ли патч какой для этого дела. > > Я у себя запатчил. > > Значит, так. Смотрим файл chardefs.h в дистрибутиве readline. [патч поскипан] IMO Так будет лучше: diff -Nur readline-4.3-orig/chardefs.h readline-4.3-new/chardefs.h - --- readline-4.3-orig/chardefs.h Thu Feb 14 18:38:18 2002 +++ readline-4.3-new/chardefs.h Fri Jun 27 17:55:26 2003 @@ -67,28 +67,32 @@ #define UNMETA(c) ((c) & (~meta_character_bit)) #define UNCTRL(c) _rl_to_upper(((c)|control_character_bit)) +/* #if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII)) # define IN_CTYPE_DOMAIN(c) 1 #else # define IN_CTYPE_DOMAIN(c) isascii(c) #endif +*/ +# define IN_CTYPE_DOMAIN(c) 1 #if !defined (isxdigit) && !defined (HAVE_ISXDIGIT) # define isxdigit(c) (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) #endif -#define NON_NEGATIVE(c) ((unsigned char)(c) == (c)) +#define NON_NEGATIVE(c) 1 +/* There was ((unsigned char)(c) == (c)) */ /* Some systems define these; we want our definitions. */ #undef ISPRINT -#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c)) -#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c)) -#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c)) -#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c)) -#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c)) -#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c)) -#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c)) +#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum ((unsigned char) c)) +#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha ((unsigned char) c)) +#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit ((unsigned char) c)) +#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower ((unsigned char) c)) +#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint ((unsigned char) c)) +#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper ((unsigned char) c)) +#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit ((unsigned char) c)) #define _rl_lowercase_p(c) (NON_NEGATIVE(c) && ISLOWER(c)) #define _rl_uppercase_p(c) (NON_NEGATIVE(c) && ISUPPER(c)) Я поползал по коду. Макросы ISALNUM_и_траливали используются правильно, т.е. им передают unsigned char, а вот функциям _rl_tralivali передают signed, т.е. могуть быть проблемы. я(cp1251) и Ъ(koi8r) жалко ;) EOF вроде не используется. Тоже проверил. Тоже работает. -- Best regards, Aleksey Cheusov. --- ifmail v.2.15dev5 * Origin: Science Soft (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/17283cc4bce18.html, оценка из 5, голосов 10
|