*** 4 - Gestion de "au/aux/à le/à la/à l'" lors de l'affichage *** [en cours, besoin d'aide]
Je n'ai pas trouvé de moyen simple d'afficher automatiquement "vous faites signe au conducteur" ou "vous faites signe aux voyageurs" ou "vous faites signe à l'homme".
En effet, en anglais dans tous les cas ce sera "to the" et on ne se pose pas de question.
J'ai donc écrit une petite fonction, probablement améliorable, afin de permettre l'utilisation de code tel que :
- Code: Tout sélectionner
print "Vous faites signe ", (to_the) noun, ".^";
La fonction :
- Code: Tout sélectionner
Array TabTemp1 -> 255;
Array TabTemp2 -> 255;
! Cette fonction permet d'afficher correctement "à la" "à l'" "au" ou "aux"
! selon le contexte.
! A AMELIORER : REUSSIR A NE PAS UTILISER DE VARIABLES GLOBALES
[ to_the obj;
if (obj has pluralname)
{
print "aux ";
obj.short_name.print();
}
else
{
!faire un tableau qui ne contient que le premier caractère de short_name
obj.short_name.print_to_array(TabTemp1);
TabTemp2->0 = TabTemp1->2;
if (obj has male && LanguageContraction(TabTemp2)==0)
{
print "au ";
obj.short_name.print();
}
else
{
print "à ", (the) obj;
}
}
];
Je ne suis pas complètement satisfait du code. J'ai pas mal galéré avec les tableaux, et je regrette d'avoir à déclarer deux tableaux globaux hors de la fonction. Si quelqu'un sait comment faire mieux...
A améliorer éventuellement : gérer une propriété, si elle est présente, similaire à 'articles', qui permettrait de spécifier explicitement que l'on dit par exemple "au haricot" et non pas "à l'haricot", pour un objet haricot.
Bref, je ne suis pas certain qu'en l'état actuel cela soit intégrable à la bibliothèque, ni même certain que cela soit souhaitable, mais je serais intéressé d'avoir votre retour.
Un développement similaire pourrait être fait pour "du/de l'/de la/des"...
---------- Suite ----------[01/12/2006]
ça existe déjà pour "du/de la/des", mais ne gère pas encore de cas "de l'". Le code de la fonction "to_the", que l'on pourrait d'ailleurs renommer "AAuAux" pour être cohérent, pourrait
suivre le même modèle. Je remarque d'ailleurs que mon code ci-dessus ne gère pas les noms propres correctement.
Le code actuel de DeDuDes dans French.h :
(noter l'idée, bien que non opérationnelle pour l'instant, de
réutiliser le formatage (the) pour savoir si le mot commence par un l', plutôt que de tout refaire comme dans ma fonction ci-dessus.)
- Code: Tout sélectionner
[ DeDuDes obj; ! ex : descendre... sortir...
if (obj == player) { print "de vous"; return; }
if (obj has pluralname) { print "des ", (name) obj; return;}
if (obj has female or proper) { print "de ", (the) obj; return;} ! ex : de la voiture, de Paris
!*! test ci-dessous à effectuer avec @output_stream (ZCode) et avec PrintAnyToArray (Glulx) ?
! if ((the)obj="l'...") {print "de ", (the) obj; return;} ! ex : de l'avion
print "du ", (name) obj; return; ! ex : du train, du Nautilus (le Nautilus ne doit donc pas être considéré comme proper !*!)
];
[01/12/2006] L'avis de JL
La fonction me semble compliquée (il faut dire que je ne sais plus trop lire la syntaxe des tableaux en Inform ; en fait je suis un peu rouillé là). Il y a sans doute l'histoire du "h" aspiré ou pas (comme dans "haricot"), qui correspond peut-être à LanguageContraction, même si cette fonction ne semble pas traiter actuellement le problème [Edit: en fait LanguageContraction ne semble être appelée que lorsque la propriété articles n'existe pas].
(sinon pour cette histoire de "h" aspiré, il n'y avait pas déjà une propriété qui gère ça ? revoir le manuel du traducteur [Edit: oui, en fait la propriété articles permet de gérer le cas du "haricot" ; donc au lieu de rajouter une autre propriété il doit suffire de tester cette propriété articles (ou plutôt le résultat de l'affichage de (the) noun ; il faut peut-être écrire dans un buffer pour avoir cela, car obtenir l'article seul n'est peut-être pas possible) à l'intérieur de la fonction AAuAux et d'en déduire l'affichage correct ; mais ce n'est peut-être pas si facile, un peu comme dans DeDuDes le cas "de l'avion" que je n'avais pas codé sur le moment (trop difficile ?)])
Samuel V.