Discussion:
U + OpenType + redu arabe
(trop ancien pour répondre)
c l a p
2004-08-21 16:34:32 UTC
Permalink
Bonjour;

J'ai beau lire des docs en vue de développer une police arabe OT sous
FontLab4.6 , mais je n'arrive pas à résoudre d'une façon satisfaisante un
problème de rendu :
Je souhaite contourner (inhiber) la propriété qu'ont la plupart des glyphes
arabes à s'attacher au précédent ou au suivant. En clair : isoler les
lettres d'un paragraphe.

Ma question, probablement mal posée ( et pour cause !) est :
-- Qui décide en définitive ? : La propriété Unicode du caractère , ou la
fonctionnalité OT (features : isol, medi, fina ) ou le logiciel de rendu
(uniscribe ...) ?

A moins que ce soit le driver du clavier...

Merci de votre indulgence
Pablo Saratxaga
2004-08-21 19:39:10 UTC
Permalink
Kaixo!
Li Sat, 21 Aug 2004 18:34:32 +0200,
c l a p <***@zalabor.fr> scrijheut:

clap> Je souhaite contourner (inhiber) la propriété qu'ont la plupart des
clap> glyphes arabes à s'attacher au précédent ou au suivant.
clap> En clair : isoler les lettres d'un paragraphe.

Dans ce cas il n'y a qu'une seule posibilité, il faut que les glyphes
soient separés (inclure dans les metriques de l'espace blanc; je ne sais
pas si vous voulez aussi inhiber la differentiation de glyphes selon
le contexte (iniciale, mediale, finale, isolée) ou pas).

clap> -- Qui décide en définitive ? : La propriété Unicode du caractère , ou la
clap> fonctionnalité OT (features : isol, medi, fina ) ou le logiciel de rendu
clap> (uniscribe ...) ?

le logiciel de rendu c'est que pour l'arabe il faut lier, et il ira
chercher les tables OT pour les bons glyphes (j'imagine qu'à defaut
il sera capable de se debrouiller avec les formes de présentation
encodées dans le BMP).

Eventuellement essayez avec une police sans formes de presentation
(rien qu'un glyphe par caractère donc); mais il se pourrait que
certains logiciels de rendu ignorent une telle poloce, la jugeant
(à juste titre!) impropre à afficher l'écriture arabe.

Ce qui n'est pas très clair c'est ce que vous voulez vraimment faire:
- bidouiller l'affichage à des fins de debogage?
- ou afficher réellement des caractères disjoints (je sais qu'il y a eu
quelques tentatives pour une écriture "arabe carrée" à caractères qui
ne changent pas d'apparence et non liés)?

si c'est pour le deuxième cas, il suffit d'utiliser le même glyphe pour
les 4 (ou 2, suivant les lettres) formes de presentation; mais garder
les mêmes tables que pour une police normale, puisque c'est ce que tout
moteur de rendu s'attendra à avoir.

Cela s'apparente un peu, mutatis mutandis, à vouloir des mayuscules
y compris pour les miniscules en alphabet latin; la bonne solution
consiste en fournir des glyphes adequats pour les minuscules; et non
pas à faire une bidouille étrange pour que les minuscules soient
transcodées en majuscules au niveau du moteur de rendu.
--
Ki ça vos våye bén,
Pablo Saratxaga

Il est bon de parler, et meilleur de se taire ;
Mais tous deux sont mauvais alors qu'ils sont outres.

-- Jean de La Fontaine, L'Ours et l'Amateur des jardins
c l a p
2004-08-22 09:57:05 UTC
Permalink
Post by Pablo Saratxaga
clap> Je souhaite contourner (inhiber) la propriété qu'ont la plupart des
clap> glyphes arabes à s'attacher au précédent ou au suivant.
clap> En clair : isoler les lettres d'un paragraphe.
Dans ce cas il n'y a qu'une seule posibilité, il faut que les glyphes
soient separés (inclure dans les metriques de l'espace blanc; je ne sais
pas si vous voulez aussi inhiber la differentiation de glyphes selon
le contexte (iniciale, mediale, finale, isolée) ou pas).
Oui. Mais le pb est que je souhaite garder la différentiation des glyphes
selon le contexte (ecriure normale disons) et , à l'aide d'un outil de
configuration du claver (MSKLC...) pouvoir passer , par une combinaison de
touches, à l' " écriture carrée " comme vous dites si bien plus bas.
Post by Pablo Saratxaga
clap> -- Qui décide en définitive ? : La propriété Unicode du caractère
,ou la
Post by Pablo Saratxaga
clap> fonctionnalité OT (features : isol, medi, fina ) ou le logiciel de rendu
clap> (uniscribe ...) ?
le logiciel de rendu c'est que pour l'arabe il faut lier, et il ira
chercher les tables OT pour les bons glyphes (j'imagine qu'à defaut
il sera capable de se debrouiller avec les formes de présentation
encodées dans le BMP).
Vous voulez parler de U+FB50 -> U+FBB1 et U+FE70 -> U+FEFC ? (A et B )
...
Post by Pablo Saratxaga
- ou afficher réellement des caractères disjoints (je sais qu'il y a eu
quelques tentatives pour une écriture "arabe carrée" à caractères qui
ne changent pas d'apparence et non liés)?
C'est ça. Mais optionnellement .Sous une même police. Comme ,pour l'alphabet
latin , passer des minuscules aux majuscules.
Je dois dire que, concernant la conception des glyphes , pas de gros pb
(j'ai fréquenté la callygraphie arabe pour des journaux et magazines il y a
quelque temps...). Mais j'ambitionne [ dans mon coin pour le moment, et
depuis que j'ai pris ma retraite de prof de math.! ] de proposer une autre
façon d'écrire lisiblement l'arabe , autrement que les "pattes de mouche"
que l'on peut déchiffrer sur beaucoup de sites arabisants.
En attendant je me documente, histoire de faire mon apprentissage de l'
Unicode et autres technologies pointues de l'information.

Merci pour les conseils

Hicham
Pablo Saratxaga
2004-08-22 15:32:32 UTC
Permalink
Kaixo!
Li Sun, 22 Aug 2004 11:57:05 +0200,
c l a p <***@zalabor.fr> scrijheut:

clap> Oui. Mais le pb est que je souhaite garder la différentiation des glyphes
clap> selon le contexte (ecriure normale disons) et , à l'aide d'un outil de
clap> configuration du claver (MSKLC...) pouvoir passer , par une combinaison de
clap> touches, à l' " écriture carrée " comme vous dites si bien plus bas.

A moins de remplacer le moteur de rendu standard par votre propre moteur
de rendu spécial je ne pense pas que ce soit faisable.

C'est comme si vous vouliez, d'une simple combinaison de touches,
qu'à l'écran toutes les minuscules deviennent des majuscules et
toutes les majuscules deviennent des minuscules.
Ou que sur simple combinaison de touches ça passe en italiques...

Ce n'est pas là le rôle d'un moteur de rendu; c'est à l'utilisateur de
choisir les polices qu'il veut selon le resultat qu'il veut.
Post by Pablo Saratxaga
chercher les tables OT pour les bons glyphes (j'imagine qu'à defaut
il sera capable de se debrouiller avec les formes de présentation
encodées dans le BMP).
clap> Vous voulez parler de U+FB50 -> U+FBB1 et U+FE70 -> U+FEFC ? (A et B )

Oui (il y a encore des polices sans tables OT, mais avec des glyphes
à ces positions là)
Post by Pablo Saratxaga
- ou afficher réellement des caractères disjoints (je sais qu'il y a eu
quelques tentatives pour une écriture "arabe carrée" à caractères qui
ne changent pas d'apparence et non liés)?
clap> C'est ça. Mais optionnellement .Sous une même police.

Mauvaise approche.
Il faut faire ça dans une police separée.

clap> Comme ,pour l'alphabet
clap> latin , passer des minuscules aux majuscules.

Non, ce n'est pas pareil; les miniscules et les majuscules existent
toutes deux en même temps et ce sont des caratceristiques de base des
lettres.
Ce que vous voulez s'apparente plus à faie un choix entre une police
type "Times" ou "Fraktur" pour lire l'allemand, vous ne créeriez pas
une police latine avec à la fois des glyphes type Times et type Fraktur
pour chaque lettre, si? (mais même si vous le faisiez, quasimment aucun
programme ne pourrait en faire un quelconque usage interessant; des
polices separées c'est la meilleure solution, car quasimment tous les
programmes permettent de choisir la police à utiliser)

clap> Je dois dire que, concernant la conception des glyphes, pas de gros pb

Il faut juste penser à fournir les glyphes pour les differentes
formes de presentation (même si c'est les mêmes), car les moteurs de
rendu s'attendront à cela pour l'arabe.

Si on prend l'approche de concevoir une fonte tout ce qu'il y a de
plus standard, avec seulement l'apparence des glyphes qui ne l'est
pas; alors il n'y a aucune difficulté majeure pour votre projet.
(je suppose que vous vous baserez sur le style koufi pour les glyphes)
--
Ki ça vos våye bén,
Pablo Saratxaga

C'est en voulant gagner du temps qu'on le perd.
John Steinbeck
Antoine Leca
2004-08-31 08:00:25 UTC
Permalink
Post by c l a p
Je souhaite contourner (inhiber) la propriété qu'ont la plupart des
isoler les lettres d'un paragraphe.
Et insérer un caractère ZWNJ entre chaque caractère arabe ?

Si tu veux que cela ne soit effectif QUE pour ta fonte, il "suffit" de ne
pas avoir de table 'medi' 'init' 'fina'; attention cependant parce que les
logiciels de rendu (genre Windows) vont alors penser que ta police est du
genre antédiluvien, font faire la substitution eux-même en utilisant les
formes de présentations U+0FFxx (le syndrome "je sais mieux que toi ce qui
est bon pour toi"...); donc il faut peut-être avoir des tables, mais
vides...
Post by c l a p
-- Qui décide en définitive ? : La propriété Unicode du caractère ,
ou la fonctionnalité OT (features : isol, medi, fina ) ou le logiciel
de rendu (uniscribe ...) ?
Uniscribe (ou ses équivalents) demande à la fonte OpenType d'appliquer la
fonctionnalité (init, fina, etc.) en fonction des tables définies par
Unicode (dans une version x).

Si tu sais lire du code C, regarde l'exemple écrit par Werner Lemberg pour
la bibliothèque Freetype 1.x, le programme ftstrtto, en particulier
arabic.c; il ne fait QUE ce que tu cherches à comprendre (et il y a pas mal
de lignes de code).
ftp://ftp.freetype.org/freetype/unstable/freetype-current.tar.gz (800 K)



Antoine
c l a p
2004-08-31 10:40:51 UTC
Permalink
Post by Antoine Leca
Et insérer un caractère ZWNJ entre chaque caractère arabe ?
Je vois. Je vais voir ce que ça donne aussi
Post by Antoine Leca
Si tu veux que cela ne soit effectif QUE pour ta fonte, il "suffit" de ne
pas avoir de table 'medi' 'init' 'fina'; attention cependant parce que les
logiciels de rendu (genre Windows) vont alors penser que ta police est du
genre antédiluvien, font faire la substitution eux-même en utilisant les
formes de présentations U+0FFxx (le syndrome "je sais mieux que toi ce qui
est bon pour toi"...); donc il faut peut-être avoir des tables, mais
vides...
Je comprends.
Je rêve pourtant de pouvoir , dans une MEME fonte normale , 'tromper' le
moteur de rendu pour qu'il ignore (?) les classes {init,medi,fina},
moyennant une ou combinaison de touches de clavier ( configuré à cet égard)
D'après ce que j'ai compris de vos réponses à tous les deux, c'est une
..utopie !
Post by Antoine Leca
Si tu sais lire du code C, regarde l'exemple écrit par Werner Lemberg pour
la bibliothèque Freetype 1.x, le programme ftstrtto, en particulier
arabic.c; il ne fait QUE ce que tu cherches à comprendre (et il y a pas mal
de lignes de code).
ftp://ftp.freetype.org/freetype/unstable/freetype-current.tar.gz (800 K)
Merci. Je vais re-installer Linux spécialement pour ça.
Antoine Leca
2004-08-31 17:30:48 UTC
Permalink
Post by c l a p
Post by Antoine Leca
ftp://ftp.freetype.org/freetype/unstable/freetype-current.tar.gz (800 K)
Merci. Je vais re-installer Linux spécialement pour ça.
Pourquoi faire ? J'ai toujours fait tourner ce code (sous DOS ou Win32) sans
aucun problème; et je suppose que cela doit être OK avec OS/2 ou Amiga!


Antoine
Pablo Saratxaga
2004-09-01 13:42:00 UTC
Permalink
Kaixo!
Li Tue, 31 Aug 2004 10:00:25 +0200,
Post by c l a p
Je souhaite contourner (inhiber) la propriété qu'ont la plupart des
isoler les lettres d'un paragraphe.
AL> Et insérer un caractère ZWNJ entre chaque caractère arabe ?

il veut modifier le rendu, pas le texte source (sur lequel il n'a
peut-être pas moyen d'agir)

AL> Si tu veux que cela ne soit effectif QUE pour ta fonte, il "suffit" de ne
AL> pas avoir de table 'medi' 'init' 'fina'; attention cependant parce que les
AL> logiciels de rendu (genre Windows) vont alors penser que ta police est du
AL> genre antédiluvien, font faire la substitution eux-même en utilisant les
AL> formes de présentations U+0FFxx (le syndrome "je sais mieux que toi ce qui
AL> est bon pour toi"...); donc il faut peut-être avoir des tables, mais
AL> vides...

une fonte avec des tables et sans formes de presentation U+0FFxx risque
d'être tout simplement ignorée car incapable de couvir l'arabe;
il faut je pense au contraire fournir les tables et les formes
de presentation; mais simplement modifier leur dessin pour en faire des
"lettres carrées".
Il faut considerer ça comme une variation de style de police (un peu
comme roman/fraktur; mais en bien plus radical) et ne pas toucher à la
logique intrinseque à la langue.

Ne pas fournir de tables ou des tables vides, pourrait marcher avec
certains moteurs de rendu, mais pas avec d'autres.
Par contre se comporter comme une police arabe tout ce qu'il y a de
plus standard, avec juste des glyphes très spéciaux, ça marchera
partout.
--
Ki ça vos våye bén,
Pablo Saratxaga

Quand j'écoute trop Wagner, j'ai envie d'envahir la Pologne.
Woody Allen
Antoine Leca
2004-09-03 11:41:45 UTC
Permalink
Post by Pablo Saratxaga
Post by Antoine Leca
Si tu veux que cela ne soit effectif QUE pour ta fonte, il "suffit"
de ne pas avoir de table 'medi' 'init' 'fina'; attention cependant
parce que les logiciels de rendu (genre Windows) vont alors penser
que ta police est du genre antédiluvien, font faire la substitution
eux-même en utilisant les formes de présentations U+0FFxx (le
syndrome "je sais mieux que toi ce qui est bon pour toi"...); donc
il faut peut-être avoir des tables, mais vides...
une fonte avec des tables et sans formes de presentation U+0FFxx
risque d'être tout simplement ignorée car incapable de couvir
l'arabe;
Avec Windows (donc marquant la case arabe dans 'OS/2', et une entrée 'arab'
dans la liste des écritures) ? J'ai un gros doute. Je ne pense pas que
Uniscribe, quand il s'initialise, fasse un travail aussi fin. Rappelez-vous
que cette DLL se décharge complètement de la mémoire, donc elle ne peut pas
passer deux heures à évaluer suivant les CMAPs ou je ne sais comment si une
police peut, ou pas, couvrir une écriture quelconque (de son côté, xftconfig
et similaires font peut-être une analyse de ce genre, mais peuvbent se le
permettre parce que ces utilitaires ne sont pas executés "en temps réel").

En fait, il suffit de respecter les prescriptions OpenType. Et les
prescriptions ne parlent pas d'existence ou non de certains caractères, ni
de l'existence ou pas de substitution pour telle ou telle table (surtout que
pour certain dessins, en alphabet arabe, tu peux utiliser par exemple pour w
le même dessin en version isolée ou finale). Il suffit d'avoir l'entrée dans
la table des écritures ('GSUB' ou 'GPOS'), et le bit qui va bien dans la
table 'OS/2'. En fait, probablement le second suffit vec Windows.
La seule chose que je signalais, c'est qu'au-delà des prescriptions
officielles, il y a aussi une compatibilité avec l'existant qui joue ici, et
dont il faut tenir compte (idem avec le thaï).
Post by Pablo Saratxaga
Ne pas fournir de tables ou des tables vides, pourrait marcher avec
certains moteurs de rendu, mais pas avec d'autres.
Je considérerait cela comme un bogue du moteur de rendu.
Par exemple, j'ai des polices qui n'ont pas de tables 'GPOS' (parce que je
me suis débrouillé pour les caractères avec seulement 'GSUB' arrivent au bon
endroit, et je néglige les cas tordus du genre deux diacritiques ou
similaire). Et bien je serais outré qu'un prétendu conforme moteur de rendu
décide que puisqu'il n'y a pas de table 'GPOS', alors ma police n'est pas
une vraie et qu'il refuse d'exécuter les séquences de substitution, ou pire
qu'il refuse de considérer ma police comme une police valable pour
l'écriture en question.


Antoine

Loading...