Ako pokracuje Netscape?

Tomas Brodsky brodsky na cfar.umd.edu
Pátek Červenec 3 20:09:55 CEST 1998


Jaromir Koutek wrote:
> > > Preloz si posledni zdrojaky a uvidis.
> > > > Je to fakt. Mely by se konecne vyresit problemy s CP1250,
> > > Se to vyresilo.  (Diky Tomasi Brodskemu.)
> > Je to niekde skompilovane a stiahnutelne?
> Tady:
> http://www.wynholds.com/mike/mozilla/

Do te doby nez bude Mozilla stabilni pro bezne pouzivani (mozna uz
je), daji se problemy s CP1250 vyresit malou zmenou starsi binarky.

Mam nainstalovane Latin2 fonty, ve kterych jsou i ceska pismena podle
CP1250 - nekolikrat se o nich mluvilo tady v konferenci. Takze vetsina
WWW stranek v CP1250 se zobrazuje spravne. Problemy jsou jenom se
strankami, ktere jsou v CP1250 a v meta tagu to (spravne) oznamuji.

Bohuzel Netscape kdyz vidi CP1250, tak se na Unixu pokusi o
prekodovani na Latin2 a protoze takovou polozku nema v konverzni
tabulce, tupe zacne pouzivat Latin1 font (misto defaultu). No, ale ted
kdyz mame zdrojaky, tak muzeme provadet dedukce o starsich verzich. Ta
konverzni tabulka je minimalne od verze 3 stejna a taky interni cisla
kodovych stranek se nezmenily.

Pro zajemce, tady je jedna polozka te konverzni tabulky, v binarce je
zarovnana na 32 bytu:

typedef struct {
    int16       from_csid;  /* "from" codeset ID        */
    int16       to_csid;    /* "to" codeset ID      */
    int16       autoselect; /* autoselectable       */
    CCCFunc     cvtmethod;  /* char. codeset conv method    */
    int32       cvtflag;    /* conv func dependent flag */
} cscvt_t;

CP1250 ma csid 44 (=0x2C), Latin2 ma csid 10 (=0x0A). Takze staci
najit tu tabulku a preplacnout jednu polozku sekvenci
00 2C 00 0A 00 ... (zbytek same nuly). Tim se vyrobi prevodni metoda z
CP1250 do Latin2 pouzivajici funkci NULL, ktera ten text necha beze
zmeny.

Nejjednodussi je preplacnuti polozek, ktere jsou skoro spravne a
clovek je nepotrebuje. Ja jsem zmenil iso-8859-9 (turectina), s csid
20 (=0x14). Dalsi jednoducha moznost je iso-8859-7 (rectina) s csid 18
(=0x12).

Staci najit v binarce retezec (v hex): 
00 14 00 14 00 00 00 00 00 00 ... (tech nul by melo byt 28)
a nahradit 2 byty:
00 2C 00 0A 00 00 00 00 00 00 ...

Funguje mi to takhle v Netscape 3 na Linuxu i na Solarisu k plne
spokojenosti. Ve verzi 4 by to melo taky fungovat, ale nezkousel jsem
to.

Tom

======================================================================
| Tomas Brodsky                     | Microsoft is not the answer.   |
| CfAR, Univ. of Md at College Park | Microsoft is the question and  |
| Email: brodsky na cfar.umd.edu       | the answer is no.              |
| http://www.cfar.umd.edu/~brodsky  |                                |
======================================================================







Další informace o konferenci Linux