Defoma::Id(3) module Defoma pour la gestion des bases de référence.

SYNOPSIS

use Defoma::Id;

$Id = defoma_id_open_cache( suffixe, nom_paquet );

defoma_id_close_cache( id_objet );

defoma_id_register( id_objet,
type => type,
font => police,
id => identifiant,
priority => priorité,
category => catégorie,
origin => origine,
depend => dépendance,
hints => indications );

defoma_id_unregister( id_objet,
type => type,
font => police,
id => identifiant );

@index = defoma_id_grep_cache( id_objet, type-recherché,
id => identifiant,
font => police,
type => type,
category => catégorie,
depid => depid,
depfont => depfont );

@hints = defoma_id_get_hints( id_objet, index );

defoma_id_set( id_objet, identifiant, police, flag );

defoma_id_unset( id_objet, identifiant, police );

DESCRIPTION

Defoma::Id est un module Defoma pour la gestion des identifiants de police et des bases de référence. Il fournit les fonctions listées ci-dessous, qui sont supposées être appelées par les scripts de configuration Defoma.

Une base de référence est une sorte de base de données dont le but est d'éviter les conflits de noms. Les applications accèdent souvent aux polices avec leurs propres identifiants, il est donc préférable qu'un identifiant pointe vers une seule police. C'est une contrainte importante pour une configuration automatique, parce qu'il peut facilement arriver que plusieurs polices aient le même identifiant. Les scripts de configuration automatique peuvent difficilement détecter quelle est la meilleure police pour porter le nom d'un identifiant, ou même pour savoir si cette situation se produit. Defoma::Id est une aide pour résoudre ce type de problème.

Voici comment Defoma::Id fonctionne dans les grandes lignes :
1. Ouverture d'une base de référence avec la commande init d'un script de configuration Defoma.
2. Enregistrement de(s) l'identifiant(s) pour une police avec la commande register du script.
3. Recherche dans la base de référence par Defoma::Id pour vérifier si une autre police fournit le même identifiant, et rappel du script afin de faire le choix le plus approprié de la police qui fournira l'identifiant, à l'aide des commandes do-install- et do-remove-.

TYPE D'IDENTIFIANTS

Il peut gérer trois types d'identifiants : RealName, Alias et Substituted.

RealName est le nom réel d'une police et est généralement pris dans l'indication FontName. Si vous voulez enregistrer une police à une base de références, au moins un nom réel doit être enregistré. Vous pouvez fournir les indications aux options lorsque vous enregistrez un RealName.
Alias est un autre nom pour une police, qui est généralement pris dans l'indication Alias. Vous devez spécifier le nom réel (RealName) de la police avec le paramètre origine lorsque vous enregistrez un Alias.
Substituted est encore un autre nom d'une police, qui contrairement à Alias n'est ni pris dans les indications de la police, ni directement enregistré dans une base de référence par les scripts de configuration Defoma. Il est plutôt pris dans une règle de substitution (subst-rule), qui est gérée par le module Defoma::Subst, et est enregistrée par le module. Si vous voulez qu'une police particulière se substitue à un autre identifiant, vous devez enregistrer la police (et son nom réel) auprès d'un cache de substitution (subst-cache). Pour plus de détails, veuillez consulter la page de manuel Defoma::Subst.

DÉTAIL SUR LE FONCTIONNEMENT DE DEFOMA::ID

L'enregistrement et le désenregistrement des identifiants d'une police sont généralement effectués par les scripts de configuration Defoma avec les commandes register et unregister respectivement, mais l'installation et le retrait de certains identifiants ne doivent pas être effectués lors de l'appel aux commandes register et unregister, mais lors de l'appel aux commandes do-install-(real,alias,subst) et do-remove-(real,alias,subst) respectivement. Les exemples suivants montrent comment les identifiants des polices sont enregistrés dans une base de référence et comment il en sont retirés.
1.Enregistrement
Le module Defoma::Id enregistre l'identifiant, la police, le type, la priorité et encore d'autres informations dans une base de référence.
1.2
Le module recherche les polices qui fournissent l'identifiant de la base de référence, et prend la première d'entre elles. Les noms réels (RealName) sont toujours prioritaires par rapport aux Alias, et les Alias par rapport aux noms substitués (Substituted).
1.3
Si aucune police n'est installée pour cet identifiant, le module rappelle le script avec la commande do-install-<type>. Si le script réussit l'installation de la police pour l'identifiant, le module marque l'identifiant et la police comme INSTALLED (installé).
1.4
Si une autre police est déjà marquée INSTALLED (installée) pour l'identifiant, le module rappelle le script avec la commande do-remove-<type> pour retirer l'ancienne police prioritaire pour cette identifiant, et retire la marque INSTALLED. Ensuite, le module rappelle le script avec la commande do-install-<type> pour installer la police comme prioritaire pour cet identifiant. En cas de succès de l'installation de la police pour l'identifiant, le module marque l'identifiant et la police comme étant INSTALLED.
2.Désenregistrement
Si la police est installée pour l'identifiant, le module Defoma::Id rappelle le script avec la commande do-remove-<type> afin de retirer la police pour cet identifiant, et retire la marque INSTALLED. Ensuite, le module recherche les polices qui fournissent l'identifiant dans la base de référence. Si l'identifiant est fourni par d'autres polices, le module recherche la plus prioritaire d'entre elles, et l'installe comme mentionné dans la section 1.3 précédente.
2.2
Le module retire l'entrée correspondant à l'identifiant et la police.

Ces processus permettent de n'avoir qu'une seule police, la plus appropriée, qui fournit un identifiant donné, de telle sorte qu'il n'y ait pas de conflit de nom.

FORMAT D'UNE BASE DE RÉFÉRENCE

Une base de référence contient huit champs pour chaque entrée : id (identifiant), font (police), type, priority (priorité), category (catégorie), depid, depfont et hints (indications).

Le type représente le type d'une entrée à l'aide d'une combinaison de lettres. Une base de référence gère des entrées de polices et de marques. Ce dernier type d'entrée permet d'installer des polices moins prioritaires pour certains identifiants (qui sont marqués USE - utilisé), ou pour conserver une police installée pour un certain identifiant (marqué comme EXCLUDE - exclu). Elles sont supposées être placées par les utilisateurs, et ne doivent pas être utilisées dans les scripts de configuration Defoma, juste pour une utilisation interne. Les entrées de polices contiennent des informations sur certains identifiants d'une police et peuvent être utilisées dans les scripts.

Le type consiste en deux ou trois lettres. La première lettre représente le type d'entrée, qui est soit S (pour les polices), soit M (pour les marques). Si la première lettre est un S, ce qui signifie qu'il s'agit de l'entrée d'une police, la deuxième lettre peut être un r (nom réel), un a (un alias) ou un S (pour une police de substitution). Si la première lettre est un M, ce qui signifie qu'il s'agit de l'entrée d'une marque, la seconde lettre est soit un u (USE) soit un x (EXCLUDE). Pour les entrées de polices (dont la première lettre est un S), si la police et l'identifiant de l'entrée sont marqués INSTALLED, il y a une troisième lettre, qui est I.

depid et depfont représentent les dépendances envers un identifiant ou une police. Une police n'est jamais installée, à moins que la police depfont soit installée pour l'identifiant depid. Les paramètres origine et depend de defoma_id_register affectent ces champs. Si l'identifiant d'une police ne dépend d'aucun autre identifiant ou police, alors ces champs valent « . ».

Le champ hints (indications) représente les indications d'un identifiant. Il est spécifié par l'argument indications de defoma_id_register. Vous devez utiliser defoma_id_get_hints pour accéder à la valeur de ce champ.

Les champs de chaque entrée d'une base de référence sont accessibles par les champs de l'id-object dont les clefs sont e_id, e_font, e_type, e_priority, e_category, e_depid, et e_depfont. Par exemple : $Id->{e_font}->[3] permet d'accéder à la police de la troisième entrée de l'id-object $ID.

Voici un exemple de base de référence :
# e_id        e_font e_type e_priority e_category ...
0 Helvetica   a.pfa  SrI    20         type1 ...
1 Courier     a.pfa  Sa     20         type1 ...
2 Times-Roman b.ttf  SrI    30         truetype ...
3 Courier     b.ttf  SaI    30         truetype ...
Cette base montre que a.pfa a deux identifiants : Helvetica comme RealName et Courier comme Alias. b.ttf a également deux identifiants : Times-Roman comme RealName et Courier comme Alias.
Deux polices ont le même identifiant Courier, mais cette base de référence fait pointer Courier vers b.ttf (autrement dit, c'est b.ttf qui fournit Courier).

FONCTIONS

defoma_id_open_cache permet d'ouvrir une base de référence. Les bases de référence dépendent des applications. Les scripts de configuration Defoma d'une application ne peuvent pas ouvrir les bases de référence d'une autre application. Chaque application peut avoir plusieurs bases de référence, qui sont identifiées par un suffixe unique pour une application. Vous pouvez omettre le suffixe pour une application n'utilisant qu'une seule base de référence. nom_paquet doit être omis dans la plupart des cas. La fonction retourne un objet id_object utilisé comme descripteur pour les opérations suivantes.

defoma_id_close_cache permet de fermer une base de référence. En interne, cela permet d'écrire le contenu d'une base de référence dans un fichier identifié par id_object.

defoma_id_register permet d'enregistrer une police et un de ses identifiants dans la base de référence id_object. Vous devez au moins fournir les paramètres type, font, id et priority. type peut prendre les valeurs « real », « alias » ou « subst » qui correspondent à des noms réels (RealName), des Alias, ou des polices de substitution (Substituted), comme mentionné précédemment. « subst » ne devrait être utilisé que par le module Defoma::Subst, ce qui ne laisse donc que le choix « real » et « alias ». Si « alias » est utilisé comme type de police, alors vous devez spécifier le nom réel de la police dans le paramètre origine. Il est obligatoire de spécifier l'origine pour les identifiants ne correspondant pas à un nom réel, parce que ces identifiants ne doivent pas être installés, à moins que le nom réel de la police le soit. Si « real » est utilisé comme type, alors vous devez spécifier les indications de la police.

defoma_id_unregister permet de retirer un identifiant (ou tous) d'une police d'une base de référence. Si id est spécifié, seul cet identifiant de la police spécifiée est retiré de la base de référence id_object. Sinon, tous les identifiants de la police sont retirés.

defoma_id_grep_cache permet de rechercher dans la base de référence id_object un certain identifiant, police, catégorie, depid ou depfont et de retourner la liste des index. Le paramètre search-type peut être « real », « alias », « subst », « font », « installed » ou « mark » pour limiter les sujets de la recherche. Les paramètres id, font, type, category, depid et depfont permettent de préciser des valeurs de recherche pour ces différents champs. Il n'est pas nécessaire de préciser aucun de ces paramètres.

defoma_id_get_hints permet d'obtenir les indications de l'index spécifié dans la base de référence id_object. Si l'index d'un Alias ou d'une police de substitution (Substituted) est spécifié, cette fonction retourne les indications de la police dont le nom réel (RealName) est spécifié par le paramètre origine de defoma_id_register lorsque cet alias ou cette police de substitution a été enregistré.

defoma_id_set permet de faire fournir un id à une police, ou d'empêcher une police de fournir un identifiant. Le paramètre flag peut valoir install ou exclude. defoma_id_unset permet de supprimer le drapeau de l'identifiant et de la police spécifiés.

EXEMPLES

# Ouvre une base de référence avec « test » comme suffixe.
$Id = defoma_id_open_cache('test');
# enregistrement des identifiants avec la commande register.
my $police = shift;
my $h = parse_hints_start('Alias', @_);
my $nom_police = $h->{FontName};
my @alias = split(/ /, $h->{Alias});
my $pri = $h->{Priority};
  
defoma_id_register($Id,
                   type => 'real',
                   font => $police,
                   id => $nom_police,
                   priority => $pri,
                   hints => join(' ', @_));
  
foreach my $i (@alias) {
  defoma_id_register($Id,
                     type => 'alias',
                     font => $police,
                     id => $i,
                     priority => $pri,
                     origin => $nom_police);
}
# retire des identifiants.
defoma_id_unregister($Id, type => 'alias', font => $police);
defoma_id_unregister($Id, type => 'real', font => $police);
# fermeture d'une base de référence
defoma_id_close_cache($Id);
# liste des index de polices ayant « Helvetica » comme identifiant.
my @liste = defoma_id_grep_cache($Id, 'installed', id => 'Helvetica');

TRADUCTION

Ce document est une traduction, réalisée par Nicolas François le 29 juillet 2005 et mise à jour par Cyril Brulebois en janvier 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité.

La version anglaise la plus à jour de ce document est toujours consultable en ajoutant l'option « -L C » à la commande man.

N'hésitez pas à signaler à l'auteur ou à la liste de traduction <[email protected]>, selon le cas, toute erreur dans cette page de manuel.