Modérateurs: Stormi, Otto Grimwald
>x la clef
Cette vieille clef est toute rouillée. Elle pense qu'elle ouvre le coffre.
>prendre elle
Elle prend la clef.
Include (-
Array LanguageNumbers table
'un' 1 'une' 1 'deux' 2 'trois' 3 'quatre' 4 'cinq' 5
'six' 6 'sept' 7 'huit' 8 'neuf' 9 'dix' 10
'onze' 11 'douze' 12 'treize' 13 'quatorze' 14 'quinze' 15
'seize' 16 'dix-sept' 17 'dix-huit' 18 'dix-neuf' 19 'vingt' 20
'vingt et un' 21 'vingt-deux' 22 'vingt-trois' 23 'vingt-quatre' 24
'vingt-cinq' 25 'vingt-six' 26 'vingt-sept' 27 'vingt-huit' 28
'vingt-neuf' 29 'trente' 30
;
[ LanguageNumber n s f;
! L'argument "s" sert à spécifier si on n'est pas en train de construire la fin du nombre(c-à-d les 3 derniers chiffres). Si s == 1, alors on est à l'intérieur du nombre et on ne peut pas ajouter un "s" à "cent" et à "quatre-vingt".
if (n == 0) { print "zéro"; rfalse; }
if (n < 0) { print "moins "; n = -n; }
#Iftrue (WORDSIZE == 4);
if (n >= 1000000000)
{
LanguageNumber(n/1000000000, 1); print " ";
print "milliard";
if (n/1000000000 > 1) { print "s"; }
f = 1;
n = n%1000000000;
}
if (n >= 1000000)
{
if (f == 1) { print " "; }
LanguageNumber(n/1000000, 1); print " ";
print "million";
if (n/1000000 > 1) { print "s"; }
f = 1;
n = n%1000000;
}
#Endif;
if (n >= 1000)
{
if (f == 1) { print " "; }
if (n/1000 ~= 1) { LanguageNumber(n/1000, 1); print " "; }
print "mille";
f =1;
n = n%1000;
}
if (n >= 100)
{
if (f == 1) { print " "; }
if (n/100 ~= 1) { LanguageNumber(n/100); print " "; }
print "cent";
if (n%100 == 0 && n/100 > 1 && s == 0) {print "s"; }
f = 1;
n = n%100;
}
if (n >= 10)
{
if (f == 1) { print " "; }
switch(n/10)
{
1: if (n == 11) { print "onze"; return; }
if (n == 12) { print "douze"; return; }
if (n == 13) { print "treize"; return; }
if (n == 14) { print "quatorze"; return; }
if (n == 15) { print "quinze"; return; }
if (n == 16) { print "seize"; return; }
if (n == 10 || n >= 17 ) { print "dix"; }
2: print "vingt";
3: print "trente";
4: print "quarante";
5: print "cinquante";
6: print "soixante";
7: print "soixante";
if (n-60 == 11) { print " et onze"; return; }
print "-"; LanguageNumber(n-60); return;
8: print "quatre-vingt";
if (n%10 == 0 && s == 0) { print "s"; }
if (n%10 == 1) { print "-un"; return; }
9: print "quatre-vingt";
print "-"; LanguageNumber(n-80); return;
}
if (n%10 == 1) { print " et "; }
if (n%10 > 1) { print "-"; }
n = n%10;
}
switch(n)
{
1: print "un";
2: print "deux";
3: print "trois";
4: print "quatre";
5: print "cinq";
6: print "six";
7: print "sept";
8: print "huit";
9: print "neuf";
}
];
-) instead of "Numbers" in "Language.i6t".
Include (-
[ PrintTimeOfDayEnglish t h m dir aop half;
h = (t/ONE_HOUR); m = t%ONE_HOUR; dir = " ";
if (m > HALF_HOUR) { h = h+1; if (h == 24) h = 0; m = ONE_HOUR-m; dir = " moins "; half = 1; }
switch(h)
{
0: print "minuit";
1: print "une heure";
12: print "midi";
21: print "vingt et une heures";
default: print (number) h, " heures";
}
if (m > 0)
{
print (string) dir;
switch(m)
{
1: print "une";
21: print "vingt et une";
QUARTER_HOUR: if (half == 0) print "et "; else print "le "; print "quart";
HALF_HOUR: print "et demie";
default: print (number) m;
}
}
];
-) instead of "Analogue Printing" in "Time.i6t".
if the character number 1 in T matches the text "œ":
blablabla;
if (text->0 == 'œ') blablabla;
Natrium a écrit:Est-ce qu'il y a un moyen de comparer des caractères unicode en I6 ? Parce que si on peut le faire avec I7, ça doit être possible, non ?
[ LanguageNumber n s f;
! L'argument "s" sert à spécifier si on n'est pas en train de construire la fin du nombre(c-à-d les 3 derniers chiffres). Si s == 1, alors on est à l'intérieur du nombre et on ne peut pas ajouter un "s" à "cent" et à "quatre-vingt".
if (n == 0) { print "zéro"; rfalse; }
if (n < 0) { print "moins "; n = -n; }
#Iftrue (WORDSIZE == 4);
if (n >= 1000000000)
{
LanguageNumber(n/1000000000, 1); print " ";
print "milliard";
if (n/1000000000 > 1) { print "s"; }
f = 1;
n = n%1000000000;
}
if (n >= 1000000)
{
if (f == 1) { print " "; }
LanguageNumber(n/1000000, 1); print " ";
print "million";
if (n/1000000 > 1) { print "s"; }
f = 1;
n = n%1000000;
}
#Endif;
if (n >= 1000)
{
if (f == 1) { print " "; }
if (n/1000 ~= 1) { LanguageNumber(n/1000, 1); print " "; }
print "mille";
f = 1;
n = n%1000;
}
if (n >= 100)
{
if (f == 1) { print " "; }
if (n/100 ~= 1) { LanguageNumber(n/100); print " "; }
print "cent";
if (n%100 == 0 && n/100 > 1 && s == 0) {print "s"; }
f = 1;
n = n%100;
}
if (n >= 20)
{
if (f == 1) { print " "; }
switch(n/10)
{
2: print "vingt";
3: print "trente";
4: print "quarante";
5: print "cinquante";
6: print "soixante";
7: print "soixante";
if (n == 71) { print " et onze"; return; }
8: print "quatre-vingt"; if (n == 80 && s == 0) { print "s"; } if (n == 81) { print "-un"; return; }
9: print "quatre-vingt";
}
if (n%10 == 1) { print " et "; }
if (n%10 > 1) { print "-"; }
n = n%10;
f=0;
}
if (f == 1) { print " "; }
! ceci ne marche pas : print (string) LanguageNumbers->(n-1); return;
switch(n)
{
1: print "un";
2: print "deux";
3: print "trois";
4: print "quatre";
5: print "cinq";
6: print "six";
7: print "sept";
8: print "huit";
9: print "neuf";
10: print "dix";
11: print "onze";
12: print "douze";
13: print "treize";
14: print "quatorze";
15: print "quinze";
16: print "seize";
17: print "dix-sept";
18: print "dix-huit";
19: print "dix-neuf";
}
];
La description de la montre est "Il est [time of day in words].".
[ LanguageNumber n; !-32768 <= n <= +32767
if (n == 0) { print "zéro"; rfalse; }
if (n < 0) { print "moins "; n=-n; }
if (n >= 1000) {
if (n >= 2000){ print (LanguageNumber) n/1000; print " ";}
print "mille";
n = n%1000;
if (n) print " ";
}
if (n >= 100) {
if (n >= 200){ print (LanguageNumber) n/100; print " ";}
print "cent";
if (n == 100) rfalse;
n = n%100;
if (n) print " "; else print "s";
}
if (n==0) rfalse;
switch(n)
{
1: print "un"; ! "une" ?
2: print "deux";
3: print "trois";
4: print "quatre";
5: print "cinq";
6: print "six";
7: print "sept";
8: print "huit";
9: print "neuf";
10: print "dix";
11: print "onze";
12: print "douze";
13: print "treize";
14: print "quatorze";
15: print "quinze";
16: print "seize";
17: print "dix-sept";
18: print "dix-huit";
19: print "dix-neuf";
20: print "vingt";
30: print "trente";
40: print "quarante";
50: print "cinquante";
60: print "soixante";
70: print "soixante-dix";
71: print "soixante et onze";
72 to 79: print "soixante-", (LanguageNumber) 10 + n%10;
80: print "quatre-vingts";
81 to 89: print "quatre-vingt-", (LanguageNumber) n%10;
90 to 99: print "quatre-vingt-", (LanguageNumber) 10 + n%10;
default:
print (LanguageNumber) n - n%10;
if (n%10 == 1) print " et "; else print "-";
print (LanguageNumber) n%10;
}
];
Vous êtes dans la confusion avec l'Unicode (UTF-8) : œ ou @oe ne posent pas de problèmes avec I6, quelque soit l'usage ; le code affiche dans les deux cas : OK.Mule hollandaise a écrit:Pour le oe, c'est fait
!% -Cu
Array text -> "œuf";
[ main key;
if (text->0 == 'œ')
print "OK";
@read_char 1 -> key;
];
Array text -> "@oeuf";
[ main key;
if (text->0 == '@oe')
print "OK";
@read_char 1 -> key;
];
auraes a écrit:Il me semble qu'il faut se méfier des problèmes d'accords que pose l'usage combiné de mille, million et miliard.
« MILLE MILLIARDS DE MILLE SABORDS DE TONNERRE DE BREST ! »
auraes a écrit:I6 ne gère l'UTF-8 (optionnel) que pour le source, il disparaît lors du prétraitement. Le programme compilé ne gère pas l'Unicode.
print (char) 220;
print (char) 339;
print "œ";
To say le/la/les/l' (O - object):
unless the character number 1 in "[O]" matches the text "œ", case insensitively:
say "[the O]";
else:
say "l['][O]".
Natrium a écrit:N'empêche, Inform 7 peut comparer « œ », et comme le code I7 est traduit en I6 lors de la compilation, ça doit bien être possible à le faire directement en I6, non ?
if (text->0 == $C5 && text->1 == $93)
[ LanguageContraction text;
if (text->0 == 'a' or 'e' or etc...) ! caractères <= 256
return 1;
if (test->0 == $C5 && text->1 == $93 or $92) ! œ Œ
return 1;
return 0;
];
Retourner vers Questions techniques et aide pour votre code
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité