> > > > можно только один символ, вроде это для wide table нужно длинные символы.
> > > utf - это по определению wide-таблица. one->many
> > А я про это и говорю, слишком мал t[2] для wide table и
> > алгоритм не поддерживает -((((, и табуляцию как ' ' ...
> Странное ты говоришь.
> Wide-table имеет формат
> <CHAR><SPACES><STRING>
> где CHAR - или один символ или 0xAA - его 16-ричное представление
> SPACES - некоторое количество пробелов и '\t'
> STRING -строка произвольной длины (не может начинаться с пробела или
> табуляции)
>
> Чтением этих таблиц заведует
> CMDCONST char *
> add_wide_recode_table (cmd_parms *cmd, charset_dir_t *dc,
> char *charsetfrom, char *charsetto,
> char *filename)
> из исходников которой это прозрачно следует.
Не прими это за наезд, но все же что делает этот кусок из add_wide_recode_table:
while (fgets(string,MAX_STRING_LEN,f) != NULL)
{
char *p;
if (string[0] != '#' && (p=strchr(string,' ')) != NULL)
// В часности - strchr(string,' ') - где же здесь \t ?
// Здесь бы подошел strtok_r.
{
*(p++)='\0';
if (string[0]=='0' && string[1]=='x')
sscanf(string,"0x%x",&src);
else if (string[1])
src=atoi(string); /* one-byte numbers treated as symbols! */
else
src=*string;
if (p[0]=='0' && p[1]=='x')
{
sscanf(p,"0x%x",&dst); // И этот sscanf это делает?
t[0]=dst;t[1]='\0';
}
else
{
t[0]=0;
strtok(p," \t\n\r#");
}
if (src < 256)
{
if(t[0])
ptrs[src] = ap_pstrdup(lpool,t);
else
{
ptrs[src] = ap_pstrdup(lpool,p);
}
}
Может доделать. чтобы CharsetWideRecodeTable понимал страку из hex для DST?
--
С наилучшими пожеланиями, Евгений Бырганов.
Best regards, Eugene Byrganov.
mailto:E.B.Byrganov@inp.nsk.su
work - http://www.inp.nsk.su/
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.