Newsgroup: it.comp.programmare.win32
Titolo: Gestione dei font nelle diverse codifiche

) scritto da Marvin, spero
che renda la mia richiesta più chiara:
|Non mi intendo molto di font, comunque le cose dovrebbero stare più o 
|meno così: ogni font deve indicare quali charset e quali range Unicode 
|supporta; se tra questi c'è iso-8859-15, nessun problema; se non c'è, 
|posso vedere se c'è WinLatin1 (win-1252, e se è un font per Windows ci 
|sarà sicuramente). A questo punto, ogni volta che il nr incontra il 
|carattere 0xA4 di Latin9 (l'Euro), visualizza al suo posto il carattere 
|0x80 di win-1252 (sempre l'Euro). 
|Alternativamente, come ha detto André, si può andare a cercare nel 
|font il carattere Unicode 20AC (sempre l'Euro): ho dato un'occhiata al 
|Courier New e all'Andale Mono, ed entrambi ce l'hanno ("There is a 
|glyph mapped to Unicode position 20AC").
|
|Inoltre, lo stesso discorso vale non solo per il (limitato) problema 
|dell'Euro. Supponi che io voglia includere nel mio messaggio una frase 
|in cirillico. Teoricamente non ci sono problemi: indico negli header 
|il charset=iso-8859-5, e confido nel fatto che la maggior parte dei 
|font ha i caratteri cirillici (ad esempio, Courier New, Times New 
|Roman e Andale Mono). Il tuo newsreader riceve il messaggio, si 
|accorge che il charset è iso-8859-5, e lo va a cercare nel font in 
|uso. Il problema è che con ogni probabilità non c'è esattamente iso-
|8859-5, ma il WinCyrillic (win-1251), oppure il range Unicode del 
|cirillico (da 0400 a 04FF). Quindi dovrà rimappare il messaggio (su 
|win-1251 o su Unicode) prima di poterlo fare apparire a schermo. Ad 
|esempio: la 'R' rovesciata è in 0xCF di iso-8859-5, ma nel nostro font 
|Courier New sarà in 0xDF di win1251, oppure in 0x042F di Unicode. 
|
|Tutto questo è compito del nr, anche se ovviamente nessuno ti obbliga 
|a supportare tutti i charset ISO: puoi ad esempio decidere di non 
|supportare iso-8859-x con x diverso da 1 e 15; in quel caso, dovresti 
|far apparire dei '?' per tutti i caratteri over-127 di charset ignoti. 
|Altrimenti, il tuo nr non sarà diverso dai vari Xnews, Gravity, FA, 
|che se ne fregano delle indicazioni sul charset e visualizzano tutto 
|usando win1252. (E questo forse ti farà rivalutare OE, che è l'unico 
|nr gratuito per windows che si comporta -più o meno- in questo modo.)
Se non sapete come la cosa può essere risolta potreste almeno
indicarmi qualche sito che conoscete sui font (non per scaricare nuovi
font ma per conoscere meglio il loro formato e come funzionano).
-- 
Marco Barisione (ICQ 84277092)

 giusto. 
Forse ti dico cose che sai già, comunque ho dato un'occhiata ai file 
.cod di Agent, e credo di aver capito come fa Agent: per ogni charset 
o codepage ha un file .cod, in cui c'è la corrispondenza tra il codice 
di charset (1 byte) e il codice di Unicode (2 byte). Ad esempio, da 
8859-1.cod, la linea:
  0xE8  0x00E8
indica che la posizione 0xE8 di iso-8859-1 corrisponde al carattere 
Unicode 0x00E8 (la 'è'). Oppure da 8859-15.cod:
  0xA4  0x20AC
indica che la posizione 0xA4 di iso-8859-15 corrisponde al carattere 
Unicode 0x20AC (il glifo dell'Euro).
[En passant, ho trovato anche degli errori: in 8859-1.cod, alla 
posizione 0x80 c'è mappato 0x20AC, mentre non ci dovrebbe essere 
nulla. Ho commentato quella riga, e adesso appare il '?'.]
Quindi puoi benissimo "rubare" i file .cod di Agent per costruirti 
facilmente una funzione charset2Unicode del genere:
   int charset2Unicode( string charset, unsigned char pos )
che calcola il corrispondente Unicode di qualunque posizione in 
qualunque charset ("qualunque" per modo di dire; comunque nella 
directory all_cod ci sono un bel po' di charset).
A questo punto, devi scovare come il tuo sistema usa i font. Con Java 
non ci sarebbero problemi, visto che supporta Unicode e i char sono a 
16 bit. In C/C++ temo che dipenda fortemente dal sistema e dalle 
librerie che usi, e non so aiutarti. Tieni però conto di un fatto: in 
tutti i font che ho guardato, ogni glifo è 'etichettato' anche con la 
posizione Unicode, quindi un sistema *deve* esserci, e nemmeno 
complicato.
In sostanza, gestiresti la visualizzazione degli articoli Usenet 
usando Unicode, e questo sarebbe notevole, visto che non ho notizie di 
altri newsreader gratuiti per Windows che lo fanno (a parte OE, 
ovviamente). Inoltre, questo ti faciliterebbe enormemente 
l'implementazione del supporto per l'utf-8, che si ridurrebbe 
all'esercizio banale di scrivere una funzione numerica di conversione.
-- 
Ciao, Marvin

all'esercizio banale di scrivere una funzione numerica di conversione.
Peccato che Win9x non supporta unicode al contrario di winnt.
