| Comment: | commit 1 |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk | commit1 |
| Files: | files | file ages | folders |
| SHA3-256: |
2fd7dc4dd557072b74bf5828ec33a392 |
| User & Date: | olr on 2017-04-25 11:51:19 |
| Other Links: | manifest | tags |
|
2017-04-25
| ||
| 12:09 | Python v3.6 check-in: 1b348abe60 user: olr tags: trunk | |
| 11:51 | commit 1 check-in: 2fd7dc4dd5 user: olr tags: trunk, commit1 | |
| 11:44 | initial empty check-in check-in: c902aec434 user: Z9 tags: trunk | |
Added LICENSE.fr.txt version [6c800bc372].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 |
LICENCE PUBLIQUE GÉNÉRALE GNU
Version 3, du 29 juin 2007.
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Chacun est autorisé à copier et distribuer des copies conformes de ce
document de licence, mais toute modification en est proscrite.
Traduction française par Philippe Verdy
<verdy_p (à) wanadoo (point) fr>, le 30 juin 2007.
_______________________________________________________________________
Avertissement important au sujet de cette traduction française.
_______________________________________________________________________
Ceci est une traduction en français de la licence “GNU General Public
License” (GPL). Cette traduction est fournie ici dans l’espoir qu’elle
facilitera sa compréhension, mais elle ne constitue pas une traduction
officielle ou approuvée d’un point de vue juridique.
La Free Software Foundation (FSF) ne publie pas cette traduction et ne
l’a pas approuvée en tant que substitut valide au plan légal pour la
licence authentique “GNU General Public Licence”. Cette traduction n’a
pas encore été passée en revue attentivement par un juriste et donc le
traducteur ne peut garantir avec certitude qu’elle représente avec
exactitude la signification légale des termes de la licence authentique
“GNU General Public License” publiée en anglais. Cette traduction
n’établit donc légalement aucun des termes et conditions d’utilisation
d’un logiciel sous licence GNU GPL — seul le texte original en anglais
le fait. Si vous souhaitez être sûr que les activités que vous projetez
seront autorisées par la GNU General Public License, veuillez vous
référer à sa seule version anglaise authentique.
La FSF vous recommande fermement de ne pas utiliser cette traduction en
tant que termes officiels pour vos propres programmes ; veuillez plutôt
utiliser la version anglaise authentique telle que publiée par la FSF.
Si vous choisissez d’acheminer cette traduction en même temps qu’un
Programme sous licence GNU GPL, cela ne vous dispense pas de l’obligation
d’acheminer en même temps une copie de la licence authentique en anglais,
et de conserver dans la traduction cet avertissement important en
français et son équivalent en anglais ci-dessous.
_______________________________________________________________________
Important Warning About This French Translation.
_______________________________________________________________________
This is a translation of the GNU General Public License (GPL) into
French. This translation is distributed in the hope that it will
facilitate understanding, but it is not an official or legally approved
translation.
The Free Software Foundation (FSF) is not the publisher of this
translation and has not approved it as a legal substitute for the
authentic GNU General Public License. The translation has not been
reviewed carefully by lawyers, and therefore the translator cannot be
sure that it exactly represents the legal meaning of the authentic GNU
General Public License published in English. This translation does not
legally state the terms and conditions of use of any Program licenced
under GNU GPL — only the original English text of the GNU LGPL does
that. If you wish to be sure whether your planned activities are
permitted by the GNU General Public License, please refer to its sole
authentic English version.
The FSF strongly urges you not to use this translation as the official
distribution terms for your programs; instead, please use the authentic
English version published by the FSF. If you choose to convey this
translation along with a Program covered by the GPL Licence, this does
not remove your obligation to convey at the same time a copy of the
authentic GNU GPL License in English, and you must keep in this
translation this important warning in English and its equivalent in
French above.
_______________________________________________________________________
Préambule
La Licence Publique Générale GNU (“GNU General Public License”) est une
licence libre, en “copyleft”, destinée aux œuvres logicielles et
d’autres types de travaux.
Les licences de la plupart des œuvres logicielles et autres travaux de
pratique sont conçues pour ôter votre liberté de partager et modifier
ces travaux. En contraste, la Licence Publique Générale GNU a pour but
de garantir votre liberté de partager et changer toutes les versions
d’un programme — afin d’assurer qu’il restera libre pour tous les
utilisateurs. Nous, la Free Software Foundation, utilisons la Licence
Publique Générale GNU pour la plupart de nos logiciels ; cela
s’applique aussi à tout autre travail édité de cette façon par ses
auteurs. Vous pouvez, vous aussi, l’appliquer à vos propres programmes.
Quand nous parlons de logiciel libre (“free”), nous nous référons à la
liberté (“freedom”), pas au prix. Nos Licences Publiques Générales sont
conçues pour assurer que vous ayez la liberté de distribuer des copies
de logiciel libre (et le facturer si vous le souhaitez), que vous
receviez le code source ou pouviez l’obtenir si vous le voulez, que
vous pouviez modifier le logiciel ou en utiliser toute partie dans de
nouveaux logiciels libres, et que vous sachiez que vous avez le droit
de faire tout ceci.
Pour protéger vos droits, nous avons besoin d’empêcher que d’autres
vous restreignent ces droits ou vous demande de leur abandonner ces
droits. En conséquence, vous avez certaines responsabilités si vous
distribuez des copies d’un tel programme ou si vous le modifiez :
les responsabilités de respecter la liberté des autres.
Par exemple, si vous distribuez des copies d’un tel programme, que ce
soit gratuit ou contre un paiement, vous devez accorder aux
Destinataires les mêmes libertés que vous avez reçues. Vous devez aussi
vous assurer qu’eux aussi reçoivent ou peuvent recevoir son code
source. Et vous devez leur montrer les termes de cette licence afin
qu’ils connaissent leurs droits.
Les développeurs qui utilisent la GPL GNU protègent vos droits en deux
étapes : (1) ils affirment leur droits d’auteur (“copyright”) sur le
logiciel, et (2) vous accordent cette Licence qui vous donne la
permission légale de le copier, le distribuer et/ou le modifier.
Pour la protection des développeurs et auteurs, la GPL stipule
clairement qu’il n’y a pas de garantie pour ce logiciel libre. Aux fins
à la fois des utilisateurs et auteurs, la GPL requière que les versions
modifiées soient marquées comme changées, afin que leurs problèmes ne
soient pas attribués de façon erronée aux auteurs des versions
précédentes.
Certains dispositifs sont conçus pour empêcher l’accès des utilisateurs
à l’installation ou l’exécution de versions modifiées du logiciel à
l’intérieur de ces dispositifs, alors que les fabricants le peuvent.
Ceci est fondamentalement incompatible avec le but de protéger la
liberté des utilisateurs de modifier le logiciel. L’aspect systématique
de tels abus se produit dans le secteur des produits destinés aux
utilisateurs individuels, ce qui est précidément ce qui est le plus
inacceptable. Aussi, nous avons conçu cette version de la GPL pour
prohiber cette pratique pour ces produits. Si de tels problèmes
surviennent dans d’autres domaines, nous nous tenons prêt à étendre
cette restriction à ces domaines dans de futures versions de la GPL,
autant qu’il sera nécessaire pour protéger la liberté des utilisateurs.
Finalement, chaque programme est constamment menacé par les brevets
logiciels. Les États ne devraient pas autoriser de tels brevets à
restreindre le développement et l’utilisation de logiciels libres sur
des ordinateurs d’usage général ; mais dans ceux qui le font, nous
voulons spécialement éviter le danger que les brevets appliqués à un
programme libre puisse le rendre effectivement propriétaire. Pour
empêcher ceci, la GPL assure que les brevets ne peuvent être utilisés
pour rendre le programme non-libre.
Les termes précis et conditions concernant la copie, la distribution
et la modification suivent.
TERMES ET CONDITIONS
Article 0. Définitions.
« Cette Licence » se réfère à la version 3 de la “GNU General Public
License” (le texte original en anglais).
« Droit d’Auteur » signifie aussi les droits du “copyright” ou voisins
qui s’appliquent à d’autres types de travaux, tels que ceux sur les
masques de semi-conducteurs.
« Le Programme » se réfère à tout travail qui peut être sujet au Droit
d’Auteur (“copyright”) et dont les droits d’utilisation sont concédés
en vertu de cette Licence. Chacun des Licenciés, à qui cette Licence
est concédée, est désigné par « vous. » Les « Licenciés » et les
« Destinataires » peuvent être des personnes physiques ou morales
(individus ou organisations).
« Modifier » un travail signifie en obtenir une copie et adapter tout
ou partie du travail d’une façon nécessitant une autorisation d’un
titulaire de Droit d’Auteur, autre que celle permettant d’en produire
une copie conforme. Le travail résultant est appelé une « version
modifiée » du précédent travail, ou un travail « basé sur » le
précédent travail.
Un « Travail Couvert » signifie soit le Programme non modifié soit un
travail basé sur le Programme.
« Propager » un travail signifie faire quoi que ce soit avec lui qui,
sans permission, vous rendrait directement ou indirectement responsable
d’un délit de contrefaçon suivant les lois relatives au Droit d’Auteur,
à l’exception de son exécution sur un ordinateur ou de la modification
d’une copie privée. La propagation inclue la copie, la distribution
(avec ou sans modification), la mise à disposition envers le public, et
aussi d'autres activités dans certains pays.
« Acheminer » un travail signifie tout moyen de propagation de celui-ci
qui permet à d’autres parties de réaliser ou recevoir des copies. La
simple interaction d’un utilisateur à travers un réseau informatique,
sans transfert effectif d’une copie, ne constitue pas un acheminement.
Une interface utilisateur interactive affiche des « Notices Légales
Appropriées » quand elle comprend un dispositif convenable, bien
visible et évident qui (1) affiche une notice appropriée sur les droits
d’auteur et (2) informe l’utilisateur qu’il n’y a pas de garantie pour
le travail (sauf si des garanties ont été fournies hors du cadre de
cette Licence), que les licenciés peuvent acheminer le travail sous
cette Licence, et comment voir une copie de cette Licence. Si
l’interface présente une liste de commandes utilisateur ou d’options,
tel qu’un menu, un élément évident dans la liste présentée remplit ce
critère.
Article 1. Code source.
Le « code source » d’un travail signifie la forme préférée du travail
permettant ou facilitant les modifications de celui-ci. Le « code
objet » d’un travail signifie toute forme du travail qui n’en est pas
le code source.
Une « Interface Standard » signifie une interface qui est soit celle
d’une norme officielle définie par un organisme de normalisation
reconnu ou, dans le cas des interfaces spécifiées pour un langage de
programmation particulier, une interface largement utilisée parmi les
développeurs travaillant dans ce langage.
Les « Bibliothèques Système » d’un travail exécutable incluent tout ce
qui, en dehors du travail dans son ensemble, (a) est inclus dans la
forme usuelle de paquetage d’un Composant Majeur mais ne fait pas
partie de ce Composant Majeur et (b) sert seulement à permettre
l’utilisation du travail avec ce Composant Majeur ou à implémenter une
Interface Standard pour laquelle une implémentation est disponible au
public sous forme de code source ; un « Composant Majeur » signifie,
dans ce contexte, un composant majeur essentiel (noyau, système de
fenêtrage, etc.) du système d’exploitation (le cas échéant) d’un
système sur lequel le travail exécutable fonctionne, ou bien un
compilateur utilisé pour produire le code objet du travail, ou un
interprète de code objet utilisé pour exécuter celui-ci.
Le « Source Correspondant » d’un travail sous forme de code objet
signifie l’ensemble des codes sources nécessaires pour générer,
installer et (dans le cas d’un travail exécutable) exécuter le code
objet et modifier le travail, y compris les scripts pour contrôler ces
activités. Cependant, cela n’inclue pas les Bibliothèques Système du
travail, ni les outils d’usage général ou les programmes libres
généralement disponibles qui peuvent être utilisés sans modification
pour achever ces activités mais ne sont pas partie de ce travail. Par
exemple le Source Correspondant inclut les fichiers de définition
d’interfaces associés aux fichiers sources du travail, et le code
source des bibliothèques partagées et des sous-routines liées
dynamiquement, pour lesquelles le travail est spécifiquement conçu pour
les requérir via, par exemple, des communications de données ou
contrôles de flux internes entre ces sous-programmes et d’autres
parties du travail.
Le Source Correspondant n’a pas besoin d’inclure tout ce que les
utilisateurs peuvent regénérer automatiquement à partir d’autres
parties du Source Correspondant.
Le Source Correspondant pour un travail sous forme de code source est
ce même travail.
Article 2. Permissions de base.
Tous les droits accordés suivant cette Licence le sont jusqu’au terme
des Droits d’Auteur (“copyright”) sur le Programme, et sont
irrévocables pourvu que les conditions établies soient remplies. Cette
Licence affirme explicitement votre permission illimitée d’exécuter le
Programme non modifié. La sortie produite par l’exécution d’un Travail
Couvert n’est couverte par cette Licence que si cette sortie, étant
donné leur contenu, constitue un Travail Couvert. Cette Licence
reconnait vos propres droits d’usage raisonnable (“fair use” en
législation des États-Unis d’Amérique) ou autres équivalents, tels
qu’ils sont pourvus par la loi applicable sur le Droit d’Auteur
(“copyright”).
Vous pouvez créer, exécuter et propager sans condition des Travaux
Couverts que vous n’acheminez pas, aussi longtemps que votre licence
demeure en vigueur. Vous pouvez acheminer des Travaux Couverts à
d’autres personnes dans le seul but de leur faire réaliser des
modifications à votre usage exclusif, ou pour qu’ils vous fournissent
des facilités vous permettant d’exécuter ces travaux, pourvu que vous
vous conformiez aux termes de cette Licence lors de l’acheminement de
tout matériel dont vous ne contrôlez pas le Droit d’Auteur
(“copyright”). Ceux qui, dès lors, réalisent ou exécutent pour vous les
Travaux Couverts ne doivent alors le faire qu’exclusivement pour votre
propre compte, sous votre direction et votre contrôle, suivant des
termes qui leur interdisent de réaliser, en dehors de leurs relations
avec vous, toute copie de votre matériel soumis au Droit d’Auteur.
L’acheminement dans toutes les autres circonstances n’est permis que
selon les conditions établies ci-dessous. La concession de
sous-licences n’est pas autorisé ; l’article 10 rend cet usage non
nécessaire.
Article 3. Protection des droits légaux des utilisateurs envers les
lois anti-contournement.
Aucun Travail Couvert ne doit être vu comme faisant partie d’une mesure
technologique effective selon toute loi applicable remplissant les
obligations prévues à l’article 11 du traité international sur le droit
d’auteur adopté à l’OMPI le 20 décembre 1996, ou toutes lois similaires
qui prohibent ou restreignent le contournement de telles mesures.
Si vous acheminez un Travail Couvert, vous renoncez à tout pouvoir légal
d’interdire le contournement des mesures technologiques dans tous les
cas où un tel contournement serait effectué en exerçant les droits
prévus dans cette Licence pour ce Travail Couvert, et vous déclarez
rejeter toute intention de limiter l’opération ou la modification du
Travail, en tant que moyens de renforcer, à l’encontre des utilisateurs
de ce Travail, vos droits légaux ou ceux de tierces parties d’interdire
le contournement des mesures technologiques.
Article 4. Acheminement des copies conformes.
Vous pouvez acheminer des copies conformes du code source du Programme
tel que vous l’avez reçu, sur n’importe quel support, pourvu que vous
publiiez scrupuleusement et de façon appropriée sur chaque copie une
notice de Droit d’Auteur appropriée ; gardez intactes toutes les
notices établissant que cette Licence et tous les termes additionnels non
permissifs ajoutés en accord avec l’article 7 s’appliquent à ce code ;
et donnez à chacun des Destinataires une copie de cette Licence en même
temps que le Programme.
Vous pouvez facturer à un prix quelconque, y compris gratuit, chacune
des copies que vous acheminez, et vous pouvez offrir une protection
additionnelle de support ou de garantie en échange d’un paiement.
Article 5. Acheminement des versions sources modifiées.
Vous pouvez acheminer un travail basé sur le Programme, ou bien les
modifications pour le produire à partir du Programme, sous la forme de
code source suivant les termes de l’article 4, pourvu que vous
satisfassiez aussi à chacune des conditions requises suivantes :
a) Le travail doit comporter des notices évidentes établissant que
vous l’avez modifié et donnant la date correspondante.
b) Le travail doit comporter des notices évidentes établissant qu’il
est édité selon cette Licence et les conditions ajoutées d’après
l’article 7. Cette obligation vient modifier l’obligation de
l’article 4 de « garder intactes toutes les notices. »
c) Vous devez licencier le travail entier, comme un tout, suivant
cette Licence à quiconque entre en possession d’une copie. Cette
Licence s’appliquera en conséquence, avec les termes additionnels
applicables prévus par l’article 7, à la totalité du travail et
chacune de ses parties, indépendamment de la façon dont ils sont
empaquetés. Cette licence ne donne aucune permission de licencier
le travail d’une autre façon, mais elle n’invalide pas une telle
permission si vous l’avez reçue séparément.
d) Si le travail a des interfaces utilisateurs interactives, chacune
doit afficher les Notices Légales Appropriées ; cependant si le
Programme a des interfaces qui n’affichent pas les Notices Légales
Appropriées, votre travail n’a pas à les modifier pour qu’elles
les affichent.
Une compilation d’un Travail Couvert avec d’autres travaux séparés et
indépendants, qui ne sont pas par leur nature des extensions du Travail
Couvert, et qui ne sont pas combinés avec lui de façon à former un
programme plus large, dans ou sur un volume de stockage ou un support
de distribution, est appelé un « aggrégat » si la compilation et son
Droit d’Auteur résultant ne sont pas utilisés pour limiter l’accès ou
les droits légaux des utilisateurs de la compilation en deça de ce que
permettent les travaux individuels. L’inclusion d’un Travail Couvert
dans un aggrégat ne cause pas l’application de cette Licence aux
autres parties de l’aggrégat.
Article 6. Acheminement des formes non sources.
Vous pouvez acheminer sous forme de code objet un Travail Couvert
suivant les termes des articles 4 et 5, pourvu que vous acheminiez
également suivant les termes de cette Licence le Source Correspondant
lisible par une machine, d’une des façons suivantes :
a) Acheminer le code objet sur, ou inclus dans, un produit physique
(y compris un support de distribution physique), accompagné par le
Source Correspondant fixé sur un support physique durable
habituellement utilisé pour les échanges de logiciels.
b) Acheminer le code objet sur, ou inclus dans, un produit physique
(y compris un support de distribution physique), accompagné d’une
offre écrite, valide pour au moins trois années et valide pour
aussi longtemps que vous fournissez des pièces de rechange ou un
support client pour ce modèle de produit, afin de donner à
quiconque possède le code objet soit (1) une copie du Source
Correspondant à tout logiciel dans ce produit qui est couvert par
cette Licence, sur un support physique durable habituellement
utilisé pour les échanges de logiciels, pour un prix non supérieur
au coût raisonnable de la réalisation physique de l’acheminement
de la source, ou soit (2) un accès permettant de copier le Source
Correspondant depuis un serveur réseau sans frais.
c) Acheminer des copies individuelles du code objet avec une copie de
l’offre écrite de fournir le Source Correspondant. Cette
alternative est permise seulement occasionellement et non
commercialement, et seulement si vous avez reçu le code objet avec
une telle offre, en accord avec l’article 6 alinéa b.
d) Acheminer le code objet en offrant un accès depuis un emplacement
désigné (gratuit ou contre facturation) et offrir un accès
équivalent au Source Correspondant de la même façon via le même
emplacement et sans facturation supplémentaire. Vous n’avez pas
besoin d’obliger les Destinataires à copier le Source
Correspondant en même temps que le code objet. Si l’emplacement
pour copier le code objet est un serveur réseau, le Source
Correspondant peut être sur un serveur différent (opéré par vous
ou par un tiers) qui supporte des facilités équivalentes de
copie, pourvu que vous mainteniez des directions claires à
proximité du code objet indiquant où trouver le Source
Correspondant. Indépendamment de quel serveur héberge le Source
Correspondant, vous restez obligé de vous assurer qu’il reste
disponible aussi longtemps que nécessaire pour satisfaire à ces
obligations.
e) Acheminer le code objet en utilisant une transmission
d’égal-à-égal, pourvu que vous informiez les autres participants
sur où le code objet et le Source Correspondant du travail sont
offerts sans frais au public général suivant l’article 6 alinéa d.
Une portion séparable du code objet, dont le code source est exclu
du Source Correspondant en tant que Bibliothèque Système, n’a pas
besoin d’être inclu dans l’acheminement du travail sous forme de
code objet.
Un « Produit Utilisateur » est soit (1) un « Produit de Consommation, »
ce qui signifie toute propriété personnelle tangible normalement
utilisée à des fins personnelles, familiales ou relatives au foyer,
soit (2) toute chose conçue ou vendue pour l’incorporation dans un lieu
d’habitation. Pour déterminer si un produit constitue un Produit de
Consommation, les cas ambigus sont résolus en fonction de la
couverture. Pour un produit particulier reçu par un utilisateur
particulier, l’expression « normalement utilisée » ci-avant se réfère
à une utilisation typique ou l’usage commun de produits de même
catégorie, indépendamment du statut de cet utilisateur particulier ou
de la façon spécifique dont cet utilisateur particulier utilise
effectivement ou s’attend lui-même ou est attendu à utiliser ce
produit. Un produit est un Produit de Consommation indépendamment du
fait que ce produit a ou n’a pas d’utilisations substantielles
commerciales, industrielles ou hors Consommation, à moins que de telles
utilisations représentent le seul mode significatif d’utilisation du
produit.
Les « Informations d’Installation » d’un Produit Utilisateur signifient
toutes les méthodes, procédures, clés d’autorisation ou autres
informations requises pour installer et exécuter des versions modifiées
d’un Travail Couvert dans ce Produit Utilisateur à partir d’une version
modifiée de son Source Correspondant. Les informations qui suffisent à
assurer la continuité de fonctionnement du code objet modifié ne
doivent en aucun cas être empêchées ou interférées du seul fait qu’une
modification a été effectuée.
Si vous acheminez le code objet d’un Travail Couvert dans, ou avec, ou
spécifiquement pour l’utilisation dans, un Produit Utilisateur et
l’acheminement se produit en tant qu’élément d’une transaction dans
laquelle le droit de possession et d’utilisation du Produit
Utilisateur est transféré au Destinataire définitivement ou pour un
terme fixé (indépendamment de la façon dont la transaction est
caractérisée), le Source Correspondant acheminé selon cet article-ci
doit être accompagné des Informations d’Installation. Mais cette
obligation ne s’applique pas si ni vous ni aucune tierce partie ne
détient la possibilité d’intaller un code objet modifié sur le Produit
Utilisateur (par exemple, le travail a été installé en mémoire morte).
L’obligation de fournir les Informations d’Installation n’inclue pas
celle de continuer à fournir un service de support, une garantie ou des
mises à jour pour un travail qui a été modifié ou installé par le
Destinataire, ou pour le Produit Utilisateur dans lequel il a été
modifié ou installé. L’accès à un réseau peut être rejeté quand la
modification elle-même affecte matériellement et défavorablement les
opérations du réseau ou viole les règles et protocoles de communication
au travers du réseau.
Le Source Correspondant acheminé et les Informations d’Installation
fournies, en accord avec cet article, doivent être dans un format
publiquement documenté (et dont une implémentation est disponible
auprès du public sous forme de code source) et ne doit nécessiter
aucune clé ou mot de passe spécial pour le dépaquetage, la lecture ou
la copie.
Article 7. Termes additionnels.
Les « permissions additionelles » désignent les termes qui
supplémentent ceux de cette Licence en émettant des exceptions à l’une
ou plusieurs de ses conditions. Les permissions additionnelles qui
sont applicables au Programme entier doivent être traitées comme si
elles étaient incluent dans cette Licence, dans les limites de leur
validité suivant la loi applicable. Si des permissions additionnelles
s’appliquent seulement à une partie du Programme, cette partie peut
être utilisée séparément suivant ces permissions, mais le Programme
tout entier reste gouverné par cette Licence sans regard aux
permissions additionelles.
Quand vous acheminez une copie d’un Travail Couvert, vous pouvez à
votre convenance ôter toute permission additionelle de cette copie, ou
de n’importe quelle partie de celui-ci. (Des permissions
additionnelles peuvent être rédigées de façon à requérir leur propre
suppression dans certains cas où vous modifiez le travail.) Vous
pouvez placer les permissions additionnelles sur le matériel acheminé,
ajoutées par vous à un Travail Couvert pour lequel vous avez ou pouvez
donner les permissions de Droit d’Auteur (“copyright”) appropriées.
Nonobstant toute autre clause de cette Licence, pour tout constituant
que vous ajoutez à un Travail Couvert, vous pouvez (si autorisé par les
titulaires de Droit d’Auteur pour ce constituant) supplémenter les
termes de cette Licence avec des termes :
a) qui rejettent la garantie ou limitent la responsabilité de façon
différente des termes des articles 15 et 16 de cette Licence ; ou
b) qui requièrent la préservation de notices légales raisonnables
spécifiées ou les attributions d’auteur dans ce constituant ou
dans les Notices Légales Appropriées affichées par les travaux qui
le contiennent ; ou
c) qui prohibent la représentation incorrecte de l’origine de ce
constituant, ou qui requièrent que les versions modifiées d’un tel
constituant soit marquées par des moyens raisonnables comme
différentes de la version originale ; ou
d) qui limitent l’usage à but publicitaire des noms des concédants de
licence et des auteurs du constituant ; ou
e) qui refusent à accorder des droits selon la législation relative
aux marques commerciales, pour l’utilisation dans des noms
commerciaux, marques commerciales ou marques de services ; ou
f) qui requièrent l’indemnisation des concédants de licences et
auteurs du constituant par quiconque achemine ce constituant (ou
des versions modifiées de celui-ci) en assumant contractuellement
la responsabilité envers le Destinataire, pour toute
responsabilité que ces engagements contractuels imposent
directement à ces octroyants de licences et auteurs.
Tous les autres termes additionnels non permissifs sont considérés
comme des « restrictions avancées » dans le sens de l’article 10. Si le
Programme tel que vous l’avez reçu, ou toute partie de celui-ci,
contient une notice établissant qu’il est gouverné par cette Licence en
même temps qu’un terme qui est une restriction avancée, vous pouvez
ôter ce terme. Si un document de licence contient une restriction
avancée mais permet la reconcession de licence ou l’acheminement
suivant cette Licence, vous pouvez ajouter un Travail Couvert
constituant gouverné par les termes de ce document de licence, pourvu
que la restriction avancée ne survit pas à un telle cession de licence
ou acheminement.
Si vous ajoutez des termes à un Travail Couvert en accord avec cet
article, vous devez placer, dans les fichiers sources appropriés, une
déclaration des termes additionnels qui s’appliquent à ces fichiers, ou
une notice indiquant où trouver les termes applicables.
Les termes additionnels, qu’ils soient permissifs ou non permissifs,
peuvent être établis sous la forme d’une licence écrite séparément, ou
établis comme des exceptions ; les obligations ci-dessus s’appliquent
dans chacun de ces cas.
Article 8. Terminaison.
Vous ne pouvez ni propager ni modifier un Travail Couvert autrement que
suivant les termes de cette Licence. Toute autre tentative de le
propager ou le modifier est nulle et terminera automatiquement vos
droits selon cette Licence (y compris toute licence de brevet accordée
selon le troisième paragraphe de l’article 11).
Cependant, si vous cessez toute violation de cette Licence, alors votre
licence depuis un titulaire de Droit d’Auteur (“copyright”) est
réinstaurée (a) à titre provisoire à moins que et jusqu’à ce que le
titulaire de Droit d’Auteur termine finalement et explicitement votre
licence, et (b) de façon permanente si le titulaire de Droit d’Auteur
ne parvient pas à vous notifier de la violation par quelque moyen
raisonnable dans les soixante (60) jours après la cessation.
De plus, votre licence depuis un titulaire particulier de Droit
d’Auteur est réinstaurée de façon permanente si ce titulaire vous
notifie de la violation par quelque moyen raisonnable, c’est la
première fois que vous avez reçu une notification deviolation de cette
Licence (pour un travail quelconque) depuis ce titulaire de Droit
d’Auteur, et vous résolvez la violation dans les trente (30) jours qui
suivent votre réception de la notification.
La terminaison de vos droits suivant cette section ne terminera pas les
licences des parties qui ont reçu des copies ou droits de votre part
suivant cette Licence. Si vos droits ont été terminés et non
réinstaurés de façon permanente, vous n’êtes plus qualifié à recevoir
de nouvelles licences pour les mêmes constituants selon l’article 10.
Article 9. Acceptation non requise pour obtenir des copies.
Vous n’êtes pas obligé d’accepter cette licence afin de recevoir ou
exécuter une copie du Programme. La propagation asservie d’un Travail
Couvert qui se produit simplement en conséquence d’une transmission
d’égal-à-égal pour recevoir une copie ne nécessite pas l’acceptation.
Cependant, rien d’autre que cette Licence ne vous accorde la
permission de propager ou modifier un quelconque Travail Couvert. Ces
actions enfreignent le Droit d’Auteur si vous n’acceptez pas cette
Licence. Par conséquent, en modifiant ou propageant un Travail Couvert,
vous indiquez votre acceptation de cette Licence pour agir ainsi.
Article 10. Cession automatique de Licence aux Destinataires et
intermédiaires.
Chaque fois que vous acheminez un Travail Couvert, le Destinataire
reçoit automatiquement une licence depuis les concédants originaux,
pour exécuter, modifier et propager ce travail, suivant les termes de
cette Licence. Vous n’êtes pas responsable du renforcement de la
conformation des tierces parties avec cette Licence.
Une « transaction d’entité » désigne une transaction qui transfère le
contrôle d’une organisation, ou de substantiellement tous ses actifs,
ou la subdivision d’une organisation, ou la fusion de plusieurs
organisations. Si la propagation d’un Travail Couvert résulte d’une
transaction d’entité, chaque partie à cette transaction qui reçoit une
copie du travail reçoit aussi les licences pour le travail que le
prédécesseur intéressé à cette partie avait ou pourrait donner selon le
paragraphe précédent, plus un droit de possession du Source
Correspondant de ce travail depuis le prédécesseur intéressé si ce
prédécesseur en dispose ou peut l’obtenir par des efforts raisonnables.
Vous ne pouvez imposer aucune restriction avancée dans l’exercice des
droits accordés ou affirmés selon cette Licence. Par exemple, vous ne
pouvez imposer aucun paiement pour la licence, aucune royaltie, ni
aucune autre charge pour l’exercice des droits accordés selon cette
Licence ; et vous ne pouvez amorcer aucun litige judiciaire (y compris
une réclamation croisée ou contre-réclamation dans un procès) sur
l’allégation qu’une revendication de brevet est enfreinte par la
réalisation, l’utilisation, la vente, l’offre de vente, ou
l’importation du Programme ou d’une quelconque portion de celui-ci.
Article 11. Brevets.
Un « contributeur » est un titulaire de Droit d’Auteur (“copyright”)
qui autorise l’utilisation selon cette Licence du Programme ou du
travail sur lequel le Programme est basé. Le travail ainsi soumis à
licence est appelé la « version contributive » de ce contributeur.
Les « revendications de brevet essentielles » sont toutes les
revendications de brevets détenues ou contrôlées par le contributeur,
qu’elles soient déjà acquises par lui ou acquises subséquemment, qui
pourraient être enfreintes de quelque manière, permises par cette
Licence, sur la réalisation, l’utilisation ou la vente de la version
contributive de celui-ci. Aux fins de cette définition, le « contrôle »
inclue le droit de concéder des sous-licences de brevets d’une manière
consistante, nécessaire et suffisante, avec les obligations de cette
Licence.
Chaque contributeur vous accorde une licence de brevet non exclusive,
mondiale et libre de toute royaltie, selon les revendications de brevet
essentielles, pour réaliser, utiliser, vendre, offrir à la vente,
importer et autrement exécuter, modifier et propager les contenus de sa
version contributive.
Dans les trois paragraphes suivants, une « licence de brevet » désigne
tous les accords ou engagements exprimés, quel que soit le nom que vous
lui donnez, de ne pas mettre en vigueur un brevet (telle qu’une
permission explicite pour mettre en pratique un brevet, ou un accord
pour ne pas poursuivre un Destinataire pour cause de violation de
brevet). « Accorder » une telle licence de brevet à une partie signifie
conclure un tel accord ou engagement à ne pas faire appliquer le brevet
à cette partie.
Si vous acheminez un Travail Couvert, dépendant en connaissance d’une
licence de brevet, et si le Source Correspondant du travail n’est pas
disponible à quiconque copie, sans frais et suivant les termes de cette
Licence, à travers un serveur réseau publiquement acessible ou tout
autre moyen immédiatement accessible, alors vous devez soit (1) rendre
la Source Correspondante ainsi disponible, soit (2) vous engager à vous
priver pour vous-même du bénéfice de la licence de brevet pour ce
travail particulier, soit (3) vous engager, d’une façon consistante
avec les obligations de cette Licence, à étendre la licence de brevet
aux Destinataires de ce travail. « Dépendant en connaissance » signifie
que vous avez effectivement connaissance que, selon la licence de
brevet, votre acheminement du Travail Couvert dans un pays, ou
l’utilisation du Travail Couvert par votre Destinataire dans un pays,
infreindrait un ou plusieurs brevets identifiables dans ce pays où vous
avez des raisons de penser qu’ils sont valides.
Si, conformément à ou en liaison avec une même transaction ou un même
arrangement, vous acheminez, ou propagez en procurant un acheminement
de, un Travail Couvert et accordez une licence de brevet à l’une des
parties recevant le Travail Couvert pour lui permettre d’utiliser,
propager, modifier ou acheminer une copie spécifique du Travail
Couvert, alors votre accord est automatiquement étendu à tous les
Destinataires du Travail Couvert et des travaux basés sur celui-ci.
Une licence de brevet est « discriminatoire » si, dans le champ de sa
couverture, elle n’inclut pas un ou plusieurs des droits qui sont
spécifiquement accordés selon cette Licence, ou en prohibe l’exercice,
ou est conditionnée par le non-exercice d’un ou plusieurs de ces
droits. Vous ne pouvez pas acheminer un Travail Couvert si vous êtes
partie à un arrangement selon lequel une partie tierce exerçant son
activité dans la distribution de logiciels et à laquelle vous effectuez
un paiement fondé sur l’étendue de votre activité d’acheminement du
travail, et selon lequel la partie tierce accorde, à une quelconque
partie qui recevrait depuis vous le Travail Couvert, une licence de
brevet discriminatoire (a) en relation avec les copies du Travail
Couvert acheminées par vous (ou les copies réalisées à partir de ces
copies), ou (b) avant tout destinée et en relation avec des produits
spécifiques ou compilations contenant le Travail Couvert, à moins que
vous ayez conclu cet arrangement ou que la licence de brevet ait été
accordée avant le 28 mars 2007.
Rien dans cette Licence ne devrait être interprété comme devant exclure
ou limiter toute licence implicite ou d’autres moyens de défense à une
infraction qui vous seraient autrement disponible selon la loi
applicable relative aux brevets.
Article 12. Non abandon de la liberté des autres.
Si des conditions vous sont imposées (que ce soit par décision
judiciaire, par un accord ou autrement) qui contredisent les conditions
de cette Licence, elles ne vous excusent pas des conditions de cette
Licence. Si vous ne pouvez pas acheminer un Travail Couvert de façon à
satisfaire simulténément vos obligations suivant cette Licence et
toutes autres obligations pertinentes, alors en conséquence vous ne
pouvez pas du tout l’acheminer. Par exemple, si vous avez un accord sur
des termes qui vous obligent à collecter pour le réacheminement des
royalties depuis ceux à qui vous acheminez le Programme, la seule façon
qui puisse vous permettre de satisfaire à la fois à ces termes et ceux
de cette Licence sera de vous abstenir entièrement d’acheminer le
Programme.
Article 13. Utilisation avec la Licence Générale Publique Affero GNU.
Nonobstant toute autre clause de cette Licence, vous avez la permission
de lier ou combiner tout Travail Couvert avec un travail placé sous la
version 3 de la Licence Générale Publique GNU Affero (“GNU Affero
General Public License”) en un seul travail combiné, et d’acheminer le
travail résultant. Les termes de cette Licence continueront à
s’appliquer à la partie formant un Travail Couvert, mais les
obligations spéciales de la Licence Générale Publique GNU Affero,
article 13, concernant l’interaction à travers un réseau s’appliqueront
à la combinaison en tant que telle.
Article 14. Versions révisées de cette License.
La Free Software Foundation peut publier des versions révisées et/ou
nouvelles de la Licence Publique Générale GNU (“GNU General Public
License”) de temps en temps. De telles version nouvelles resteront
similaires dans l’esprit avec la présente version, mais peuvent
différer dans le détail afin de traiter de nouveaux problèmes ou
préoccupations.
Chaque version reçoit un numéro de version distinctif. Si le Programme
indique qu’une version spécifique de la Licence Publique Générale GNU
« ou toute version ultérieure » (“or any later version”) s’applique à
celui-ci, vous avez le choix de suivre soit les termes et conditions de
cette version numérotée, soit ceux de n’importe quelle version publiée
ultérieurement par la Free Software Foundation. Si le Programme
n’indique pas une version spécifique de la Licence Publique Générale
GNU, vous pouvez choisir l’une quelconque des versions qui ont été
publiées par la Free Software Foundation.
Si le Programme spécifie qu’un intermédiaire peut décider quelles
versions futures de la Licence Générale Publique GNU peut être
utilisée, la déclaration publique d’acceptation d’une version par cet
intermédiaire vous autorise à choisir cette version pour le Programme.
Des versions ultérieures de la licence peuvent vous donner des
permissions additionelles ou différentes. Cependant aucune obligation
additionelle n’est imposée à l’un des auteurs ou titulaires de Droit
d’Auteur du fait de votre choix de suivre une version ultérieure.
Article 15. Déclaration d’absence de garantie.
IL N’Y A AUCUNE GARANTIE POUR LE PROGRAMME, DANS LES LIMITES PERMISES
PAR LA LOI APPLICABLE. À MOINS QUE CELA NE SOIT ÉTABLI DIFFÉREMMENT PAR
ÉCRIT, LES PROPRIÉTAIRES DE DROITS ET/OU LES AUTRES PARTIES FOURNISSENT
LE PROGRAMME « EN L’ÉTAT » SANS GARANTIE D’AUCUNE SORTE, QU’ELLE SOIT
EXPRIMÉE OU IMPLICITE, CECI COMPRENANT, SANS SE LIMITER À CELLES-CI,
LES GARANTIES IMPLICITES DE COMMERCIALISABILITÉ ET D’ADÉQUATION À UN
OBJECTIF PARTICULIER. VOUS ASSUMEZ LE RISQUE ENTIER CONCERNANT LA
QUALITÉ ET LES PERFORMANCES DU PROGRAMME. DANS L’ÉVENTUALITÉ OÙ LE
PROGRAMME S’AVÉRERAIT DÉFECTUEUX, VOUS ASSUMEZ LES COÛTS DE TOUS LES
SERVICES, RÉPARATIONS OU CORRECTIONS NÉCESSAIRES.
Article 16. Limitation de responsabilité.
EN AUCUNE AUTRE CIRCONSTANCE QUE CELLES REQUISES PAR LA LOI APPLICABLE
OU ACCORDÉES PAR ÉCRIT, UN TITULAIRE DE DROITS SUR LE PROGRAMME, OU
TOUT AUTRE PARTIE QUI MODIFIE OU ACHEMINE LE PROGRAMME COMME PERMIS
CI-DESSUS, NE PEUT ÊTRE TENU POUR RESPONSABLE ENVERS VOUS POUR LES
DOMMAGES, INCLUANT TOUT DOMMAGE GÉNÉRAL, SPÉCIAL, ACCIDENTEL OU INDUIT
SURVENANT PAR SUITE DE L’UTILISATION OU DE L’INCAPACITÉ D’UTILISER LE
PROGRAMME (Y COMPRIS, SANS SE LIMITER À CELLES-CI, LA PERTE DE DONNÉES
OU L’INEXACTITUDE DES DONNÉES RETOURNÉES OU LES PERTES SUBIES PAR VOUS
OU DES PARTIES TIERCES OU L’INCAPACITÉ DU PROGRAMME À FONCTIONNER AVEC
TOUT AUTRE PROGRAMME), MÊME SI UN TEL TITULAIRE OU TOUTE AUTRE PARTIE
A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS DOMMAGES.
Article 17. Interprétation des sections 15 et 16.
Si la déclaration d’absence de garantie et la limitation de
responsabilité fournies ci-dessus ne peuvent prendre effet localement
selon leurs termes, les cours de justice qui les examinent doivent
appliquer la législation locale qui approche au plus près possible une
levée absolue de toute responsabilité civile liée au Programme, à moins
qu’une garantie ou assumation de responsabilité accompagne une copie du
Programme en échange d’un paiement.
FIN DES TERMES ET CONDITIONS.
_______________________________________________________________________
Comment appliquer ces termes à vos nouveaux programmes
Si vous développez un nouveau programme et voulez qu’il soit le plus
possible utilisable par le public, la meilleure façon d’y parvenir et
d’en faire un logiciel libre que chacun peut redistribuer et changer
suivant ces termes-ci.
Pour appliquer ces termes, attachez les notices suivantes au programme.
Il est plus sûr de les attacher au début de chacun des fichiers sources
afin de transporter de façon la plus effective possible l’exclusion de
garantie ; et chaque fichier devrait comporter au moins la ligne de
réservation de droit (“copyright”) et une indication permettant de savoir
où la notice complète peut être trouvée :
<une ligne donnant le nom du programme et une brève idée de ce qu’il fait.>
Copyright (C) <année> <nom de l’auteur> — Tous droits réservés.
Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le
modifier suivant les termes de la “GNU General Public License” telle que
publiée par la Free Software Foundation : soit la version 3 de cette
licence, soit (à votre gré) toute version ultérieure.
Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS
AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ
ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale
Publique GNU pour plus de détails.
Vous devriez avoir reçu une copie de la Licence Générale Publique GNU avec
ce programme ; si ce n’est pas le cas, consultez :
<http://www.gnu.org/licenses/>.
Ajoutez également les informations permettant de vous contacter par
courrier électronique ou postal.
Si le programme produit une interaction sur un terminal, faites lui
afficher une courte notice comme celle-ci lors de son démarrage en mode
interactif :
<programme> Copyright (C) <année> <nom de l’auteur>
Ce programme vient SANS ABSOLUMENT AUCUNE GARANTIE ; taper “affiche g” pour
les détails. Ceci est un logiciel libre et vous êtes invité à le redistribuer
suivant certaines conditions ; taper “affiche c” pour les détails.
Les commandes hypothétiques “affiche g” and “affiche c” devrait
afficher les parties appropriées de la Licence Générale Publique. Bien
sûr, les commandes de votre programme peuvent être différentes ; pour
une interface graphique, vous pourriez utiliser une « boîte À propos. »
Vous devriez également obtenir de votre employeur (si vous travaillez
en tant que programmeur) ou de votre école un « renoncement aux droits
de propriété » pour ce programme, si nécessaire. Pour plus
d’informations à ce sujet, et comment appliquer la GPL GNU, consultez
<http://www.gnu.org/licenses/>.
La Licence Générale Publique GNU ne permet pas d’incorporer votre
programme dans des programmes propriétaires. Si votre programme est une
bibliothèque de sous-routines, vous pourriez considérer qu’il serait
plus utile de permettre de lier des applications propriétaires avec la
bibliothèque. Si c’est ce que vous voulez faire, utilisez la Licence
Générale Publique Limitée GNU au lieu de cette Licence ; mais d’abord,
veuillez lire <http://www.gnu.org/philosophy/why-not-lgpl.html>.
_______________________________________________________________________
|
Added LICENSE.txt version [040444d592].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 |
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
Added README.txt version [43cb1be5f3].
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
= GRAMMALECTE =
Grammar checker
By Olivier R.
Website: http://grammalecte.net
License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html
Grammalecte is a fork of Lightproof
from László Németh (nemeth /at/ numbertext /dot/ org)
http://cgit.freedesktop.org/libreoffice/lightproof/
Required : Python 3.3
|
Added bottle.py version [edaaf360b0].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Bottle is a fast and simple micro-framework for small web applications. It
offers request dispatching (Routes) with url parameter support, templates,
a built-in HTTP Server and adapters for many third party WSGI/HTTP-server and
template engines - all in a single file and with no dependencies other than the
Python Standard Library.
Homepage and documentation: http://bottlepy.org/
Copyright (c) 2013, Marcel Hellkamp.
License: MIT (see LICENSE for details)
"""
from __future__ import with_statement
__author__ = 'Marcel Hellkamp'
__version__ = '0.12.9'
__license__ = 'MIT'
# The gevent server adapter needs to patch some modules before they are imported
# This is why we parse the commandline parameters here but handle them later
if __name__ == '__main__':
from optparse import OptionParser
_cmd_parser = OptionParser(usage="usage: %prog [options] package.module:app")
_opt = _cmd_parser.add_option
_opt("--version", action="store_true", help="show version number.")
_opt("-b", "--bind", metavar="ADDRESS", help="bind socket to ADDRESS.")
_opt("-s", "--server", default='wsgiref', help="use SERVER as backend.")
_opt("-p", "--plugin", action="append", help="install additional plugin/s.")
_opt("--debug", action="store_true", help="start server in debug mode.")
_opt("--reload", action="store_true", help="auto-reload on file changes.")
_cmd_options, _cmd_args = _cmd_parser.parse_args()
if _cmd_options.server and _cmd_options.server.startswith('gevent'):
import gevent.monkey; gevent.monkey.patch_all()
import base64, cgi, email.utils, functools, hmac, imp, itertools, mimetypes,\
os, re, subprocess, sys, tempfile, threading, time, warnings
from datetime import date as datedate, datetime, timedelta
from tempfile import TemporaryFile
from traceback import format_exc, print_exc
from inspect import getargspec
from unicodedata import normalize
try: from simplejson import dumps as json_dumps, loads as json_lds
except ImportError: # pragma: no cover
try: from json import dumps as json_dumps, loads as json_lds
except ImportError:
try: from django.utils.simplejson import dumps as json_dumps, loads as json_lds
except ImportError:
def json_dumps(data):
raise ImportError("JSON support requires Python 2.6 or simplejson.")
json_lds = json_dumps
# We now try to fix 2.5/2.6/3.1/3.2 incompatibilities.
# It ain't pretty but it works... Sorry for the mess.
py = sys.version_info
py3k = py >= (3, 0, 0)
py25 = py < (2, 6, 0)
py31 = (3, 1, 0) <= py < (3, 2, 0)
# Workaround for the missing "as" keyword in py3k.
def _e(): return sys.exc_info()[1]
# Workaround for the "print is a keyword/function" Python 2/3 dilemma
# and a fallback for mod_wsgi (resticts stdout/err attribute access)
try:
_stdout, _stderr = sys.stdout.write, sys.stderr.write
except IOError:
_stdout = lambda x: sys.stdout.write(x)
_stderr = lambda x: sys.stderr.write(x)
# Lots of stdlib and builtin differences.
if py3k:
import http.client as httplib
import _thread as thread
from urllib.parse import urljoin, SplitResult as UrlSplitResult
from urllib.parse import urlencode, quote as urlquote, unquote as urlunquote
urlunquote = functools.partial(urlunquote, encoding='latin1')
from http.cookies import SimpleCookie
from collections import MutableMapping as DictMixin
import pickle
from io import BytesIO
from configparser import ConfigParser
basestring = str
unicode = str
json_loads = lambda s: json_lds(touni(s))
callable = lambda x: hasattr(x, '__call__')
imap = map
def _raise(*a): raise a[0](a[1]).with_traceback(a[2])
else: # 2.x
import httplib
import thread
from urlparse import urljoin, SplitResult as UrlSplitResult
from urllib import urlencode, quote as urlquote, unquote as urlunquote
from Cookie import SimpleCookie
from itertools import imap
import cPickle as pickle
from StringIO import StringIO as BytesIO
from ConfigParser import SafeConfigParser as ConfigParser
if py25:
msg = "Python 2.5 support may be dropped in future versions of Bottle."
warnings.warn(msg, DeprecationWarning)
from UserDict import DictMixin
def next(it): return it.next()
bytes = str
else: # 2.6, 2.7
from collections import MutableMapping as DictMixin
unicode = unicode
json_loads = json_lds
eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec'))
# Some helpers for string/byte handling
def tob(s, enc='utf8'):
return s.encode(enc) if isinstance(s, unicode) else bytes(s)
def touni(s, enc='utf8', err='strict'):
return s.decode(enc, err) if isinstance(s, bytes) else unicode(s)
tonat = touni if py3k else tob
# 3.2 fixes cgi.FieldStorage to accept bytes (which makes a lot of sense).
# 3.1 needs a workaround.
if py31:
from io import TextIOWrapper
class NCTextIOWrapper(TextIOWrapper):
def close(self): pass # Keep wrapped buffer open.
# A bug in functools causes it to break if the wrapper is an instance method
def update_wrapper(wrapper, wrapped, *a, **ka):
try: functools.update_wrapper(wrapper, wrapped, *a, **ka)
except AttributeError: pass
# These helpers are used at module level and need to be defined first.
# And yes, I know PEP-8, but sometimes a lower-case classname makes more sense.
def depr(message, hard=False):
warnings.warn(message, DeprecationWarning, stacklevel=3)
def makelist(data): # This is just to handy
if isinstance(data, (tuple, list, set, dict)): return list(data)
elif data: return [data]
else: return []
class DictProperty(object):
''' Property that maps to a key in a local dict-like attribute. '''
def __init__(self, attr, key=None, read_only=False):
self.attr, self.key, self.read_only = attr, key, read_only
def __call__(self, func):
functools.update_wrapper(self, func, updated=[])
self.getter, self.key = func, self.key or func.__name__
return self
def __get__(self, obj, cls):
if obj is None: return self
key, storage = self.key, getattr(obj, self.attr)
if key not in storage: storage[key] = self.getter(obj)
return storage[key]
def __set__(self, obj, value):
if self.read_only: raise AttributeError("Read-Only property.")
getattr(obj, self.attr)[self.key] = value
def __delete__(self, obj):
if self.read_only: raise AttributeError("Read-Only property.")
del getattr(obj, self.attr)[self.key]
class cached_property(object):
''' A property that is only computed once per instance and then replaces
itself with an ordinary attribute. Deleting the attribute resets the
property. '''
def __init__(self, func):
self.__doc__ = getattr(func, '__doc__')
self.func = func
def __get__(self, obj, cls):
if obj is None: return self
value = obj.__dict__[self.func.__name__] = self.func(obj)
return value
class lazy_attribute(object):
''' A property that caches itself to the class object. '''
def __init__(self, func):
functools.update_wrapper(self, func, updated=[])
self.getter = func
def __get__(self, obj, cls):
value = self.getter(cls)
setattr(cls, self.__name__, value)
return value
###############################################################################
# Exceptions and Events ########################################################
###############################################################################
class BottleException(Exception):
""" A base class for exceptions used by bottle. """
pass
###############################################################################
# Routing ######################################################################
###############################################################################
class RouteError(BottleException):
""" This is a base class for all routing related exceptions """
class RouteReset(BottleException):
""" If raised by a plugin or request handler, the route is reset and all
plugins are re-applied. """
class RouterUnknownModeError(RouteError): pass
class RouteSyntaxError(RouteError):
""" The route parser found something not supported by this router. """
class RouteBuildError(RouteError):
""" The route could not be built. """
def _re_flatten(p):
''' Turn all capturing groups in a regular expression pattern into
non-capturing groups. '''
if '(' not in p: return p
return re.sub(r'(\\*)(\(\?P<[^>]+>|\((?!\?))',
lambda m: m.group(0) if len(m.group(1)) % 2 else m.group(1) + '(?:', p)
class Router(object):
''' A Router is an ordered collection of route->target pairs. It is used to
efficiently match WSGI requests against a number of routes and return
the first target that satisfies the request. The target may be anything,
usually a string, ID or callable object. A route consists of a path-rule
and a HTTP method.
The path-rule is either a static path (e.g. `/contact`) or a dynamic
path that contains wildcards (e.g. `/wiki/<page>`). The wildcard syntax
and details on the matching order are described in docs:`routing`.
'''
default_pattern = '[^/]+'
default_filter = 're'
#: The current CPython regexp implementation does not allow more
#: than 99 matching groups per regular expression.
_MAX_GROUPS_PER_PATTERN = 99
def __init__(self, strict=False):
self.rules = [] # All rules in order
self._groups = {} # index of regexes to find them in dyna_routes
self.builder = {} # Data structure for the url builder
self.static = {} # Search structure for static routes
self.dyna_routes = {}
self.dyna_regexes = {} # Search structure for dynamic routes
#: If true, static routes are no longer checked first.
self.strict_order = strict
self.filters = {
're': lambda conf:
(_re_flatten(conf or self.default_pattern), None, None),
'int': lambda conf: (r'-?\d+', int, lambda x: str(int(x))),
'float': lambda conf: (r'-?[\d.]+', float, lambda x: str(float(x))),
'path': lambda conf: (r'.+?', None, None)}
def add_filter(self, name, func):
''' Add a filter. The provided function is called with the configuration
string as parameter and must return a (regexp, to_python, to_url) tuple.
The first element is a string, the last two are callables or None. '''
self.filters[name] = func
rule_syntax = re.compile('(\\\\*)'\
'(?:(?::([a-zA-Z_][a-zA-Z_0-9]*)?()(?:#(.*?)#)?)'\
'|(?:<([a-zA-Z_][a-zA-Z_0-9]*)?(?::([a-zA-Z_]*)'\
'(?::((?:\\\\.|[^\\\\>]+)+)?)?)?>))')
def _itertokens(self, rule):
offset, prefix = 0, ''
for match in self.rule_syntax.finditer(rule):
prefix += rule[offset:match.start()]
g = match.groups()
if len(g[0])%2: # Escaped wildcard
prefix += match.group(0)[len(g[0]):]
offset = match.end()
continue
if prefix:
yield prefix, None, None
name, filtr, conf = g[4:7] if g[2] is None else g[1:4]
yield name, filtr or 'default', conf or None
offset, prefix = match.end(), ''
if offset <= len(rule) or prefix:
yield prefix+rule[offset:], None, None
def add(self, rule, method, target, name=None):
''' Add a new rule or replace the target for an existing rule. '''
anons = 0 # Number of anonymous wildcards found
keys = [] # Names of keys
pattern = '' # Regular expression pattern with named groups
filters = [] # Lists of wildcard input filters
builder = [] # Data structure for the URL builder
is_static = True
for key, mode, conf in self._itertokens(rule):
if mode:
is_static = False
if mode == 'default': mode = self.default_filter
mask, in_filter, out_filter = self.filters[mode](conf)
if not key:
pattern += '(?:%s)' % mask
key = 'anon%d' % anons
anons += 1
else:
pattern += '(?P<%s>%s)' % (key, mask)
keys.append(key)
if in_filter: filters.append((key, in_filter))
builder.append((key, out_filter or str))
elif key:
pattern += re.escape(key)
builder.append((None, key))
self.builder[rule] = builder
if name: self.builder[name] = builder
if is_static and not self.strict_order:
self.static.setdefault(method, {})
self.static[method][self.build(rule)] = (target, None)
return
try:
re_pattern = re.compile('^(%s)$' % pattern)
re_match = re_pattern.match
except re.error:
raise RouteSyntaxError("Could not add Route: %s (%s)" % (rule, _e()))
if filters:
def getargs(path):
url_args = re_match(path).groupdict()
for name, wildcard_filter in filters:
try:
url_args[name] = wildcard_filter(url_args[name])
except ValueError:
raise HTTPError(400, 'Path has wrong format.')
return url_args
elif re_pattern.groupindex:
def getargs(path):
return re_match(path).groupdict()
else:
getargs = None
flatpat = _re_flatten(pattern)
whole_rule = (rule, flatpat, target, getargs)
if (flatpat, method) in self._groups:
if DEBUG:
msg = 'Route <%s %s> overwrites a previously defined route'
warnings.warn(msg % (method, rule), RuntimeWarning)
self.dyna_routes[method][self._groups[flatpat, method]] = whole_rule
else:
self.dyna_routes.setdefault(method, []).append(whole_rule)
self._groups[flatpat, method] = len(self.dyna_routes[method]) - 1
self._compile(method)
def _compile(self, method):
all_rules = self.dyna_routes[method]
comborules = self.dyna_regexes[method] = []
maxgroups = self._MAX_GROUPS_PER_PATTERN
for x in range(0, len(all_rules), maxgroups):
some = all_rules[x:x+maxgroups]
combined = (flatpat for (_, flatpat, _, _) in some)
combined = '|'.join('(^%s$)' % flatpat for flatpat in combined)
combined = re.compile(combined).match
rules = [(target, getargs) for (_, _, target, getargs) in some]
comborules.append((combined, rules))
def build(self, _name, *anons, **query):
''' Build an URL by filling the wildcards in a rule. '''
builder = self.builder.get(_name)
if not builder: raise RouteBuildError("No route with that name.", _name)
try:
for i, value in enumerate(anons): query['anon%d'%i] = value
url = ''.join([f(query.pop(n)) if n else f for (n,f) in builder])
return url if not query else url+'?'+urlencode(query)
except KeyError:
raise RouteBuildError('Missing URL argument: %r' % _e().args[0])
def match(self, environ):
''' Return a (target, url_agrs) tuple or raise HTTPError(400/404/405). '''
verb = environ['REQUEST_METHOD'].upper()
path = environ['PATH_INFO'] or '/'
target = None
if verb == 'HEAD':
methods = ['PROXY', verb, 'GET', 'ANY']
else:
methods = ['PROXY', verb, 'ANY']
for method in methods:
if method in self.static and path in self.static[method]:
target, getargs = self.static[method][path]
return target, getargs(path) if getargs else {}
elif method in self.dyna_regexes:
for combined, rules in self.dyna_regexes[method]:
match = combined(path)
if match:
target, getargs = rules[match.lastindex - 1]
return target, getargs(path) if getargs else {}
# No matching route found. Collect alternative methods for 405 response
allowed = set([])
nocheck = set(methods)
for method in set(self.static) - nocheck:
if path in self.static[method]:
allowed.add(verb)
for method in set(self.dyna_regexes) - allowed - nocheck:
for combined, rules in self.dyna_regexes[method]:
match = combined(path)
if match:
allowed.add(method)
if allowed:
allow_header = ",".join(sorted(allowed))
raise HTTPError(405, "Method not allowed.", Allow=allow_header)
# No matching route and no alternative method found. We give up
raise HTTPError(404, "Not found: " + repr(path))
class Route(object):
''' This class wraps a route callback along with route specific metadata and
configuration and applies Plugins on demand. It is also responsible for
turing an URL path rule into a regular expression usable by the Router.
'''
def __init__(self, app, rule, method, callback, name=None,
plugins=None, skiplist=None, **config):
#: The application this route is installed to.
self.app = app
#: The path-rule string (e.g. ``/wiki/:page``).
self.rule = rule
#: The HTTP method as a string (e.g. ``GET``).
self.method = method
#: The original callback with no plugins applied. Useful for introspection.
self.callback = callback
#: The name of the route (if specified) or ``None``.
self.name = name or None
#: A list of route-specific plugins (see :meth:`Bottle.route`).
self.plugins = plugins or []
#: A list of plugins to not apply to this route (see :meth:`Bottle.route`).
self.skiplist = skiplist or []
#: Additional keyword arguments passed to the :meth:`Bottle.route`
#: decorator are stored in this dictionary. Used for route-specific
#: plugin configuration and meta-data.
self.config = ConfigDict().load_dict(config, make_namespaces=True)
def __call__(self, *a, **ka):
depr("Some APIs changed to return Route() instances instead of"\
" callables. Make sure to use the Route.call method and not to"\
" call Route instances directly.") #0.12
return self.call(*a, **ka)
@cached_property
def call(self):
''' The route callback with all plugins applied. This property is
created on demand and then cached to speed up subsequent requests.'''
return self._make_callback()
def reset(self):
''' Forget any cached values. The next time :attr:`call` is accessed,
all plugins are re-applied. '''
self.__dict__.pop('call', None)
def prepare(self):
''' Do all on-demand work immediately (useful for debugging).'''
self.call
@property
def _context(self):
depr('Switch to Plugin API v2 and access the Route object directly.') #0.12
return dict(rule=self.rule, method=self.method, callback=self.callback,
name=self.name, app=self.app, config=self.config,
apply=self.plugins, skip=self.skiplist)
def all_plugins(self):
''' Yield all Plugins affecting this route. '''
unique = set()
for p in reversed(self.app.plugins + self.plugins):
if True in self.skiplist: break
name = getattr(p, 'name', False)
if name and (name in self.skiplist or name in unique): continue
if p in self.skiplist or type(p) in self.skiplist: continue
if name: unique.add(name)
yield p
def _make_callback(self):
callback = self.callback
for plugin in self.all_plugins():
try:
if hasattr(plugin, 'apply'):
api = getattr(plugin, 'api', 1)
context = self if api > 1 else self._context
callback = plugin.apply(callback, context)
else:
callback = plugin(callback)
except RouteReset: # Try again with changed configuration.
return self._make_callback()
if not callback is self.callback:
update_wrapper(callback, self.callback)
return callback
def get_undecorated_callback(self):
''' Return the callback. If the callback is a decorated function, try to
recover the original function. '''
func = self.callback
func = getattr(func, '__func__' if py3k else 'im_func', func)
closure_attr = '__closure__' if py3k else 'func_closure'
while hasattr(func, closure_attr) and getattr(func, closure_attr):
func = getattr(func, closure_attr)[0].cell_contents
return func
def get_callback_args(self):
''' Return a list of argument names the callback (most likely) accepts
as keyword arguments. If the callback is a decorated function, try
to recover the original function before inspection. '''
return getargspec(self.get_undecorated_callback())[0]
def get_config(self, key, default=None):
''' Lookup a config field and return its value, first checking the
route.config, then route.app.config.'''
for conf in (self.config, self.app.conifg):
if key in conf: return conf[key]
return default
def __repr__(self):
cb = self.get_undecorated_callback()
return '<%s %r %r>' % (self.method, self.rule, cb)
###############################################################################
# Application Object ###########################################################
###############################################################################
class Bottle(object):
""" Each Bottle object represents a single, distinct web application and
consists of routes, callbacks, plugins, resources and configuration.
Instances are callable WSGI applications.
:param catchall: If true (default), handle all exceptions. Turn off to
let debugging middleware handle exceptions.
"""
def __init__(self, catchall=True, autojson=True):
#: A :class:`ConfigDict` for app specific configuration.
self.config = ConfigDict()
self.config._on_change = functools.partial(self.trigger_hook, 'config')
self.config.meta_set('autojson', 'validate', bool)
self.config.meta_set('catchall', 'validate', bool)
self.config['catchall'] = catchall
self.config['autojson'] = autojson
#: A :class:`ResourceManager` for application files
self.resources = ResourceManager()
self.routes = [] # List of installed :class:`Route` instances.
self.router = Router() # Maps requests to :class:`Route` instances.
self.error_handler = {}
# Core plugins
self.plugins = [] # List of installed plugins.
if self.config['autojson']:
self.install(JSONPlugin())
self.install(TemplatePlugin())
#: If true, most exceptions are caught and returned as :exc:`HTTPError`
catchall = DictProperty('config', 'catchall')
__hook_names = 'before_request', 'after_request', 'app_reset', 'config'
__hook_reversed = 'after_request'
@cached_property
def _hooks(self):
return dict((name, []) for name in self.__hook_names)
def add_hook(self, name, func):
''' Attach a callback to a hook. Three hooks are currently implemented:
before_request
Executed once before each request. The request context is
available, but no routing has happened yet.
after_request
Executed once after each request regardless of its outcome.
app_reset
Called whenever :meth:`Bottle.reset` is called.
'''
if name in self.__hook_reversed:
self._hooks[name].insert(0, func)
else:
self._hooks[name].append(func)
def remove_hook(self, name, func):
''' Remove a callback from a hook. '''
if name in self._hooks and func in self._hooks[name]:
self._hooks[name].remove(func)
return True
def trigger_hook(self, __name, *args, **kwargs):
''' Trigger a hook and return a list of results. '''
return [hook(*args, **kwargs) for hook in self._hooks[__name][:]]
def hook(self, name):
""" Return a decorator that attaches a callback to a hook. See
:meth:`add_hook` for details."""
def decorator(func):
self.add_hook(name, func)
return func
return decorator
def mount(self, prefix, app, **options):
''' Mount an application (:class:`Bottle` or plain WSGI) to a specific
URL prefix. Example::
root_app.mount('/admin/', admin_app)
:param prefix: path prefix or `mount-point`. If it ends in a slash,
that slash is mandatory.
:param app: an instance of :class:`Bottle` or a WSGI application.
All other parameters are passed to the underlying :meth:`route` call.
'''
if isinstance(app, basestring):
depr('Parameter order of Bottle.mount() changed.', True) # 0.10
segments = [p for p in prefix.split('/') if p]
if not segments: raise ValueError('Empty path prefix.')
path_depth = len(segments)
def mountpoint_wrapper():
try:
request.path_shift(path_depth)
rs = HTTPResponse([])
def start_response(status, headerlist, exc_info=None):
if exc_info:
try:
_raise(*exc_info)
finally:
exc_info = None
rs.status = status
for name, value in headerlist: rs.add_header(name, value)
return rs.body.append
body = app(request.environ, start_response)
if body and rs.body: body = itertools.chain(rs.body, body)
rs.body = body or rs.body
return rs
finally:
request.path_shift(-path_depth)
options.setdefault('skip', True)
options.setdefault('method', 'PROXY')
options.setdefault('mountpoint', {'prefix': prefix, 'target': app})
options['callback'] = mountpoint_wrapper
self.route('/%s/<:re:.*>' % '/'.join(segments), **options)
if not prefix.endswith('/'):
self.route('/' + '/'.join(segments), **options)
def merge(self, routes):
''' Merge the routes of another :class:`Bottle` application or a list of
:class:`Route` objects into this application. The routes keep their
'owner', meaning that the :data:`Route.app` attribute is not
changed. '''
if isinstance(routes, Bottle):
routes = routes.routes
for route in routes:
self.add_route(route)
def install(self, plugin):
''' Add a plugin to the list of plugins and prepare it for being
applied to all routes of this application. A plugin may be a simple
decorator or an object that implements the :class:`Plugin` API.
'''
if hasattr(plugin, 'setup'): plugin.setup(self)
if not callable(plugin) and not hasattr(plugin, 'apply'):
raise TypeError("Plugins must be callable or implement .apply()")
self.plugins.append(plugin)
self.reset()
return plugin
def uninstall(self, plugin):
''' Uninstall plugins. Pass an instance to remove a specific plugin, a type
object to remove all plugins that match that type, a string to remove
all plugins with a matching ``name`` attribute or ``True`` to remove all
plugins. Return the list of removed plugins. '''
removed, remove = [], plugin
for i, plugin in list(enumerate(self.plugins))[::-1]:
if remove is True or remove is plugin or remove is type(plugin) \
or getattr(plugin, 'name', True) == remove:
removed.append(plugin)
del self.plugins[i]
if hasattr(plugin, 'close'): plugin.close()
if removed: self.reset()
return removed
def reset(self, route=None):
''' Reset all routes (force plugins to be re-applied) and clear all
caches. If an ID or route object is given, only that specific route
is affected. '''
if route is None: routes = self.routes
elif isinstance(route, Route): routes = [route]
else: routes = [self.routes[route]]
for route in routes: route.reset()
if DEBUG:
for route in routes: route.prepare()
self.trigger_hook('app_reset')
def close(self):
''' Close the application and all installed plugins. '''
for plugin in self.plugins:
if hasattr(plugin, 'close'): plugin.close()
self.stopped = True
def run(self, **kwargs):
''' Calls :func:`run` with the same parameters. '''
run(self, **kwargs)
def match(self, environ):
""" Search for a matching route and return a (:class:`Route` , urlargs)
tuple. The second value is a dictionary with parameters extracted
from the URL. Raise :exc:`HTTPError` (404/405) on a non-match."""
return self.router.match(environ)
def get_url(self, routename, **kargs):
""" Return a string that matches a named route """
scriptname = request.environ.get('SCRIPT_NAME', '').strip('/') + '/'
location = self.router.build(routename, **kargs).lstrip('/')
return urljoin(urljoin('/', scriptname), location)
def add_route(self, route):
''' Add a route object, but do not change the :data:`Route.app`
attribute.'''
self.routes.append(route)
self.router.add(route.rule, route.method, route, name=route.name)
if DEBUG: route.prepare()
def route(self, path=None, method='GET', callback=None, name=None,
apply=None, skip=None, **config):
""" A decorator to bind a function to a request URL. Example::
@app.route('/hello/:name')
def hello(name):
return 'Hello %s' % name
The ``:name`` part is a wildcard. See :class:`Router` for syntax
details.
:param path: Request path or a list of paths to listen to. If no
path is specified, it is automatically generated from the
signature of the function.
:param method: HTTP method (`GET`, `POST`, `PUT`, ...) or a list of
methods to listen to. (default: `GET`)
:param callback: An optional shortcut to avoid the decorator
syntax. ``route(..., callback=func)`` equals ``route(...)(func)``
:param name: The name for this route. (default: None)
:param apply: A decorator or plugin or a list of plugins. These are
applied to the route callback in addition to installed plugins.
:param skip: A list of plugins, plugin classes or names. Matching
plugins are not installed to this route. ``True`` skips all.
Any additional keyword arguments are stored as route-specific
configuration and passed to plugins (see :meth:`Plugin.apply`).
"""
if callable(path): path, callback = None, path
plugins = makelist(apply)
skiplist = makelist(skip)
def decorator(callback):
# TODO: Documentation and tests
if isinstance(callback, basestring): callback = load(callback)
for rule in makelist(path) or yieldroutes(callback):
for verb in makelist(method):
verb = verb.upper()
route = Route(self, rule, verb, callback, name=name,
plugins=plugins, skiplist=skiplist, **config)
self.add_route(route)
return callback
return decorator(callback) if callback else decorator
def get(self, path=None, method='GET', **options):
""" Equals :meth:`route`. """
return self.route(path, method, **options)
def post(self, path=None, method='POST', **options):
""" Equals :meth:`route` with a ``POST`` method parameter. """
return self.route(path, method, **options)
def put(self, path=None, method='PUT', **options):
""" Equals :meth:`route` with a ``PUT`` method parameter. """
return self.route(path, method, **options)
def delete(self, path=None, method='DELETE', **options):
""" Equals :meth:`route` with a ``DELETE`` method parameter. """
return self.route(path, method, **options)
def error(self, code=500):
""" Decorator: Register an output handler for a HTTP error code"""
def wrapper(handler):
self.error_handler[int(code)] = handler
return handler
return wrapper
def default_error_handler(self, res):
return tob(template(ERROR_PAGE_TEMPLATE, e=res))
def _handle(self, environ):
path = environ['bottle.raw_path'] = environ['PATH_INFO']
if py3k:
try:
environ['PATH_INFO'] = path.encode('latin1').decode('utf8')
except UnicodeError:
return HTTPError(400, 'Invalid path string. Expected UTF-8')
try:
environ['bottle.app'] = self
request.bind(environ)
response.bind()
try:
self.trigger_hook('before_request')
route, args = self.router.match(environ)
environ['route.handle'] = route
environ['bottle.route'] = route
environ['route.url_args'] = args
return route.call(**args)
finally:
self.trigger_hook('after_request')
except HTTPResponse:
return _e()
except RouteReset:
route.reset()
return self._handle(environ)
except (KeyboardInterrupt, SystemExit, MemoryError):
raise
except Exception:
if not self.catchall: raise
stacktrace = format_exc()
environ['wsgi.errors'].write(stacktrace)
return HTTPError(500, "Internal Server Error", _e(), stacktrace)
def _cast(self, out, peek=None):
""" Try to convert the parameter into something WSGI compatible and set
correct HTTP headers when possible.
Support: False, str, unicode, dict, HTTPResponse, HTTPError, file-like,
iterable of strings and iterable of unicodes
"""
# Empty output is done here
if not out:
if 'Content-Length' not in response:
response['Content-Length'] = 0
return []
# Join lists of byte or unicode strings. Mixed lists are NOT supported
if isinstance(out, (tuple, list))\
and isinstance(out[0], (bytes, unicode)):
out = out[0][0:0].join(out) # b'abc'[0:0] -> b''
# Encode unicode strings
if isinstance(out, unicode):
out = out.encode(response.charset)
# Byte Strings are just returned
if isinstance(out, bytes):
if 'Content-Length' not in response:
response['Content-Length'] = len(out)
return [out]
# HTTPError or HTTPException (recursive, because they may wrap anything)
# TODO: Handle these explicitly in handle() or make them iterable.
if isinstance(out, HTTPError):
out.apply(response)
out = self.error_handler.get(out.status_code, self.default_error_handler)(out)
return self._cast(out)
if isinstance(out, HTTPResponse):
out.apply(response)
return self._cast(out.body)
# File-like objects.
if hasattr(out, 'read'):
if 'wsgi.file_wrapper' in request.environ:
return request.environ['wsgi.file_wrapper'](out)
elif hasattr(out, 'close') or not hasattr(out, '__iter__'):
return WSGIFileWrapper(out)
# Handle Iterables. We peek into them to detect their inner type.
try:
iout = iter(out)
first = next(iout)
while not first:
first = next(iout)
except StopIteration:
return self._cast('')
except HTTPResponse:
first = _e()
except (KeyboardInterrupt, SystemExit, MemoryError):
raise
except Exception:
if not self.catchall: raise
first = HTTPError(500, 'Unhandled exception', _e(), format_exc())
# These are the inner types allowed in iterator or generator objects.
if isinstance(first, HTTPResponse):
return self._cast(first)
elif isinstance(first, bytes):
new_iter = itertools.chain([first], iout)
elif isinstance(first, unicode):
encoder = lambda x: x.encode(response.charset)
new_iter = imap(encoder, itertools.chain([first], iout))
else:
msg = 'Unsupported response type: %s' % type(first)
return self._cast(HTTPError(500, msg))
if hasattr(out, 'close'):
new_iter = _closeiter(new_iter, out.close)
return new_iter
def wsgi(self, environ, start_response):
""" The bottle WSGI-interface. """
try:
out = self._cast(self._handle(environ))
# rfc2616 section 4.3
if response._status_code in (100, 101, 204, 304)\
or environ['REQUEST_METHOD'] == 'HEAD':
if hasattr(out, 'close'): out.close()
out = []
start_response(response._status_line, response.headerlist)
return out
except (KeyboardInterrupt, SystemExit, MemoryError):
raise
except Exception:
if not self.catchall: raise
err = '<h1>Critical error while processing request: %s</h1>' \
% html_escape(environ.get('PATH_INFO', '/'))
if DEBUG:
err += '<h2>Error:</h2>\n<pre>\n%s\n</pre>\n' \
'<h2>Traceback:</h2>\n<pre>\n%s\n</pre>\n' \
% (html_escape(repr(_e())), html_escape(format_exc()))
environ['wsgi.errors'].write(err)
headers = [('Content-Type', 'text/html; charset=UTF-8')]
start_response('500 INTERNAL SERVER ERROR', headers, sys.exc_info())
return [tob(err)]
def __call__(self, environ, start_response):
''' Each instance of :class:'Bottle' is a WSGI application. '''
return self.wsgi(environ, start_response)
###############################################################################
# HTTP and WSGI Tools ##########################################################
###############################################################################
class BaseRequest(object):
""" A wrapper for WSGI environment dictionaries that adds a lot of
convenient access methods and properties. Most of them are read-only.
Adding new attributes to a request actually adds them to the environ
dictionary (as 'bottle.request.ext.<name>'). This is the recommended
way to store and access request-specific data.
"""
__slots__ = ('environ')
#: Maximum size of memory buffer for :attr:`body` in bytes.
MEMFILE_MAX = 102400
def __init__(self, environ=None):
""" Wrap a WSGI environ dictionary. """
#: The wrapped WSGI environ dictionary. This is the only real attribute.
#: All other attributes actually are read-only properties.
self.environ = {} if environ is None else environ
self.environ['bottle.request'] = self
@DictProperty('environ', 'bottle.app', read_only=True)
def app(self):
''' Bottle application handling this request. '''
raise RuntimeError('This request is not connected to an application.')
@DictProperty('environ', 'bottle.route', read_only=True)
def route(self):
""" The bottle :class:`Route` object that matches this request. """
raise RuntimeError('This request is not connected to a route.')
@DictProperty('environ', 'route.url_args', read_only=True)
def url_args(self):
""" The arguments extracted from the URL. """
raise RuntimeError('This request is not connected to a route.')
@property
def path(self):
''' The value of ``PATH_INFO`` with exactly one prefixed slash (to fix
broken clients and avoid the "empty path" edge case). '''
return '/' + self.environ.get('PATH_INFO','').lstrip('/')
@property
def method(self):
''' The ``REQUEST_METHOD`` value as an uppercase string. '''
return self.environ.get('REQUEST_METHOD', 'GET').upper()
@DictProperty('environ', 'bottle.request.headers', read_only=True)
def headers(self):
''' A :class:`WSGIHeaderDict` that provides case-insensitive access to
HTTP request headers. '''
return WSGIHeaderDict(self.environ)
def get_header(self, name, default=None):
''' Return the value of a request header, or a given default value. '''
return self.headers.get(name, default)
@DictProperty('environ', 'bottle.request.cookies', read_only=True)
def cookies(self):
""" Cookies parsed into a :class:`FormsDict`. Signed cookies are NOT
decoded. Use :meth:`get_cookie` if you expect signed cookies. """
cookies = SimpleCookie(self.environ.get('HTTP_COOKIE','')).values()
return FormsDict((c.key, c.value) for c in cookies)
def get_cookie(self, key, default=None, secret=None):
""" Return the content of a cookie. To read a `Signed Cookie`, the
`secret` must match the one used to create the cookie (see
:meth:`BaseResponse.set_cookie`). If anything goes wrong (missing
cookie or wrong signature), return a default value. """
value = self.cookies.get(key)
if secret and value:
dec = cookie_decode(value, secret) # (key, value) tuple or None
return dec[1] if dec and dec[0] == key else default
return value or default
@DictProperty('environ', 'bottle.request.query', read_only=True)
def query(self):
''' The :attr:`query_string` parsed into a :class:`FormsDict`. These
values are sometimes called "URL arguments" or "GET parameters", but
not to be confused with "URL wildcards" as they are provided by the
:class:`Router`. '''
get = self.environ['bottle.get'] = FormsDict()
pairs = _parse_qsl(self.environ.get('QUERY_STRING', ''))
for key, value in pairs:
get[key] = value
return get
@DictProperty('environ', 'bottle.request.forms', read_only=True)
def forms(self):
""" Form values parsed from an `url-encoded` or `multipart/form-data`
encoded POST or PUT request body. The result is returned as a
:class:`FormsDict`. All keys and values are strings. File uploads
are stored separately in :attr:`files`. """
forms = FormsDict()
for name, item in self.POST.allitems():
if not isinstance(item, FileUpload):
forms[name] = item
return forms
@DictProperty('environ', 'bottle.request.params', read_only=True)
def params(self):
""" A :class:`FormsDict` with the combined values of :attr:`query` and
:attr:`forms`. File uploads are stored in :attr:`files`. """
params = FormsDict()
for key, value in self.query.allitems():
params[key] = value
for key, value in self.forms.allitems():
params[key] = value
return params
@DictProperty('environ', 'bottle.request.files', read_only=True)
def files(self):
""" File uploads parsed from `multipart/form-data` encoded POST or PUT
request body. The values are instances of :class:`FileUpload`.
"""
files = FormsDict()
for name, item in self.POST.allitems():
if isinstance(item, FileUpload):
files[name] = item
return files
@DictProperty('environ', 'bottle.request.json', read_only=True)
def json(self):
''' If the ``Content-Type`` header is ``application/json``, this
property holds the parsed content of the request body. Only requests
smaller than :attr:`MEMFILE_MAX` are processed to avoid memory
exhaustion. '''
ctype = self.environ.get('CONTENT_TYPE', '').lower().split(';')[0]
if ctype == 'application/json':
b = self._get_body_string()
if not b:
return None
return json_loads(b)
return None
def _iter_body(self, read, bufsize):
maxread = max(0, self.content_length)
while maxread:
part = read(min(maxread, bufsize))
if not part: break
yield part
maxread -= len(part)
def _iter_chunked(self, read, bufsize):
err = HTTPError(400, 'Error while parsing chunked transfer body.')
rn, sem, bs = tob('\r\n'), tob(';'), tob('')
while True:
header = read(1)
while header[-2:] != rn:
c = read(1)
header += c
if not c: raise err
if len(header) > bufsize: raise err
size, _, _ = header.partition(sem)
try:
maxread = int(tonat(size.strip()), 16)
except ValueError:
raise err
if maxread == 0: break
buff = bs
while maxread > 0:
if not buff:
buff = read(min(maxread, bufsize))
part, buff = buff[:maxread], buff[maxread:]
if not part: raise err
yield part
maxread -= len(part)
if read(2) != rn:
raise err
@DictProperty('environ', 'bottle.request.body', read_only=True)
def _body(self):
body_iter = self._iter_chunked if self.chunked else self._iter_body
read_func = self.environ['wsgi.input'].read
body, body_size, is_temp_file = BytesIO(), 0, False
for part in body_iter(read_func, self.MEMFILE_MAX):
body.write(part)
body_size += len(part)
if not is_temp_file and body_size > self.MEMFILE_MAX:
body, tmp = TemporaryFile(mode='w+b'), body
body.write(tmp.getvalue())
del tmp
is_temp_file = True
self.environ['wsgi.input'] = body
body.seek(0)
return body
def _get_body_string(self):
''' read body until content-length or MEMFILE_MAX into a string. Raise
HTTPError(413) on requests that are to large. '''
clen = self.content_length
if clen > self.MEMFILE_MAX:
raise HTTPError(413, 'Request to large')
if clen < 0: clen = self.MEMFILE_MAX + 1
data = self.body.read(clen)
if len(data) > self.MEMFILE_MAX: # Fail fast
raise HTTPError(413, 'Request to large')
return data
@property
def body(self):
""" The HTTP request body as a seek-able file-like object. Depending on
:attr:`MEMFILE_MAX`, this is either a temporary file or a
:class:`io.BytesIO` instance. Accessing this property for the first
time reads and replaces the ``wsgi.input`` environ variable.
Subsequent accesses just do a `seek(0)` on the file object. """
self._body.seek(0)
return self._body
@property
def chunked(self):
''' True if Chunked transfer encoding was. '''
return 'chunked' in self.environ.get('HTTP_TRANSFER_ENCODING', '').lower()
#: An alias for :attr:`query`.
GET = query
@DictProperty('environ', 'bottle.request.post', read_only=True)
def POST(self):
""" The values of :attr:`forms` and :attr:`files` combined into a single
:class:`FormsDict`. Values are either strings (form values) or
instances of :class:`cgi.FieldStorage` (file uploads).
"""
post = FormsDict()
# We default to application/x-www-form-urlencoded for everything that
# is not multipart and take the fast path (also: 3.1 workaround)
if not self.content_type.startswith('multipart/'):
pairs = _parse_qsl(tonat(self._get_body_string(), 'latin1'))
for key, value in pairs:
post[key] = value
return post
safe_env = {'QUERY_STRING':''} # Build a safe environment for cgi
for key in ('REQUEST_METHOD', 'CONTENT_TYPE', 'CONTENT_LENGTH'):
if key in self.environ: safe_env[key] = self.environ[key]
args = dict(fp=self.body, environ=safe_env, keep_blank_values=True)
if py31:
args['fp'] = NCTextIOWrapper(args['fp'], encoding='utf8',
newline='\n')
elif py3k:
args['encoding'] = 'utf8'
data = cgi.FieldStorage(**args)
self['_cgi.FieldStorage'] = data #http://bugs.python.org/issue18394#msg207958
data = data.list or []
for item in data:
if item.filename:
post[item.name] = FileUpload(item.file, item.name,
item.filename, item.headers)
else:
post[item.name] = item.value
return post
@property
def url(self):
""" The full request URI including hostname and scheme. If your app
lives behind a reverse proxy or load balancer and you get confusing
results, make sure that the ``X-Forwarded-Host`` header is set
correctly. """
return self.urlparts.geturl()
@DictProperty('environ', 'bottle.request.urlparts', read_only=True)
def urlparts(self):
''' The :attr:`url` string as an :class:`urlparse.SplitResult` tuple.
The tuple contains (scheme, host, path, query_string and fragment),
but the fragment is always empty because it is not visible to the
server. '''
env = self.environ
http = env.get('HTTP_X_FORWARDED_PROTO') or env.get('wsgi.url_scheme', 'http')
host = env.get('HTTP_X_FORWARDED_HOST') or env.get('HTTP_HOST')
if not host:
# HTTP 1.1 requires a Host-header. This is for HTTP/1.0 clients.
host = env.get('SERVER_NAME', '127.0.0.1')
port = env.get('SERVER_PORT')
if port and port != ('80' if http == 'http' else '443'):
host += ':' + port
path = urlquote(self.fullpath)
return UrlSplitResult(http, host, path, env.get('QUERY_STRING'), '')
@property
def fullpath(self):
""" Request path including :attr:`script_name` (if present). """
return urljoin(self.script_name, self.path.lstrip('/'))
@property
def query_string(self):
""" The raw :attr:`query` part of the URL (everything in between ``?``
and ``#``) as a string. """
return self.environ.get('QUERY_STRING', '')
@property
def script_name(self):
''' The initial portion of the URL's `path` that was removed by a higher
level (server or routing middleware) before the application was
called. This script path is returned with leading and tailing
slashes. '''
script_name = self.environ.get('SCRIPT_NAME', '').strip('/')
return '/' + script_name + '/' if script_name else '/'
def path_shift(self, shift=1):
''' Shift path segments from :attr:`path` to :attr:`script_name` and
vice versa.
:param shift: The number of path segments to shift. May be negative
to change the shift direction. (default: 1)
'''
script = self.environ.get('SCRIPT_NAME','/')
self['SCRIPT_NAME'], self['PATH_INFO'] = path_shift(script, self.path, shift)
@property
def content_length(self):
''' The request body length as an integer. The client is responsible to
set this header. Otherwise, the real length of the body is unknown
and -1 is returned. In this case, :attr:`body` will be empty. '''
return int(self.environ.get('CONTENT_LENGTH') or -1)
@property
def content_type(self):
''' The Content-Type header as a lowercase-string (default: empty). '''
return self.environ.get('CONTENT_TYPE', '').lower()
@property
def is_xhr(self):
''' True if the request was triggered by a XMLHttpRequest. This only
works with JavaScript libraries that support the `X-Requested-With`
header (most of the popular libraries do). '''
requested_with = self.environ.get('HTTP_X_REQUESTED_WITH','')
return requested_with.lower() == 'xmlhttprequest'
@property
def is_ajax(self):
''' Alias for :attr:`is_xhr`. "Ajax" is not the right term. '''
return self.is_xhr
@property
def auth(self):
""" HTTP authentication data as a (user, password) tuple. This
implementation currently supports basic (not digest) authentication
only. If the authentication happened at a higher level (e.g. in the
front web-server or a middleware), the password field is None, but
the user field is looked up from the ``REMOTE_USER`` environ
variable. On any errors, None is returned. """
basic = parse_auth(self.environ.get('HTTP_AUTHORIZATION',''))
if basic: return basic
ruser = self.environ.get('REMOTE_USER')
if ruser: return (ruser, None)
return None
@property
def remote_route(self):
""" A list of all IPs that were involved in this request, starting with
the client IP and followed by zero or more proxies. This does only
work if all proxies support the ```X-Forwarded-For`` header. Note
that this information can be forged by malicious clients. """
proxy = self.environ.get('HTTP_X_FORWARDED_FOR')
if proxy: return [ip.strip() for ip in proxy.split(',')]
remote = self.environ.get('REMOTE_ADDR')
return [remote] if remote else []
@property
def remote_addr(self):
""" The client IP as a string. Note that this information can be forged
by malicious clients. """
route = self.remote_route
return route[0] if route else None
def copy(self):
""" Return a new :class:`Request` with a shallow :attr:`environ` copy. """
return Request(self.environ.copy())
def get(self, value, default=None): return self.environ.get(value, default)
def __getitem__(self, key): return self.environ[key]
def __delitem__(self, key): self[key] = ""; del(self.environ[key])
def __iter__(self): return iter(self.environ)
def __len__(self): return len(self.environ)
def keys(self): return self.environ.keys()
def __setitem__(self, key, value):
""" Change an environ value and clear all caches that depend on it. """
if self.environ.get('bottle.request.readonly'):
raise KeyError('The environ dictionary is read-only.')
self.environ[key] = value
todelete = ()
if key == 'wsgi.input':
todelete = ('body', 'forms', 'files', 'params', 'post', 'json')
elif key == 'QUERY_STRING':
todelete = ('query', 'params')
elif key.startswith('HTTP_'):
todelete = ('headers', 'cookies')
for key in todelete:
self.environ.pop('bottle.request.'+key, None)
def __repr__(self):
return '<%s: %s %s>' % (self.__class__.__name__, self.method, self.url)
def __getattr__(self, name):
''' Search in self.environ for additional user defined attributes. '''
try:
var = self.environ['bottle.request.ext.%s'%name]
return var.__get__(self) if hasattr(var, '__get__') else var
except KeyError:
raise AttributeError('Attribute %r not defined.' % name)
def __setattr__(self, name, value):
if name == 'environ': return object.__setattr__(self, name, value)
self.environ['bottle.request.ext.%s'%name] = value
def _hkey(s):
return s.title().replace('_','-')
class HeaderProperty(object):
def __init__(self, name, reader=None, writer=str, default=''):
self.name, self.default = name, default
self.reader, self.writer = reader, writer
self.__doc__ = 'Current value of the %r header.' % name.title()
def __get__(self, obj, cls):
if obj is None: return self
value = obj.headers.get(self.name, self.default)
return self.reader(value) if self.reader else value
def __set__(self, obj, value):
obj.headers[self.name] = self.writer(value)
def __delete__(self, obj):
del obj.headers[self.name]
class BaseResponse(object):
""" Storage class for a response body as well as headers and cookies.
This class does support dict-like case-insensitive item-access to
headers, but is NOT a dict. Most notably, iterating over a response
yields parts of the body and not the headers.
:param body: The response body as one of the supported types.
:param status: Either an HTTP status code (e.g. 200) or a status line
including the reason phrase (e.g. '200 OK').
:param headers: A dictionary or a list of name-value pairs.
Additional keyword arguments are added to the list of headers.
Underscores in the header name are replaced with dashes.
"""
default_status = 200
default_content_type = 'text/html; charset=UTF-8'
# Header blacklist for specific response codes
# (rfc2616 section 10.2.3 and 10.3.5)
bad_headers = {
204: set(('Content-Type',)),
304: set(('Allow', 'Content-Encoding', 'Content-Language',
'Content-Length', 'Content-Range', 'Content-Type',
'Content-Md5', 'Last-Modified'))}
def __init__(self, body='', status=None, headers=None, **more_headers):
self._cookies = None
self._headers = {}
self.body = body
self.status = status or self.default_status
if headers:
if isinstance(headers, dict):
headers = headers.items()
for name, value in headers:
self.add_header(name, value)
if more_headers:
for name, value in more_headers.items():
self.add_header(name, value)
def copy(self, cls=None):
''' Returns a copy of self. '''
cls = cls or BaseResponse
assert issubclass(cls, BaseResponse)
copy = cls()
copy.status = self.status
copy._headers = dict((k, v[:]) for (k, v) in self._headers.items())
if self._cookies:
copy._cookies = SimpleCookie()
copy._cookies.load(self._cookies.output(header=''))
return copy
def __iter__(self):
return iter(self.body)
def close(self):
if hasattr(self.body, 'close'):
self.body.close()
@property
def status_line(self):
''' The HTTP status line as a string (e.g. ``404 Not Found``).'''
return self._status_line
@property
def status_code(self):
''' The HTTP status code as an integer (e.g. 404).'''
return self._status_code
def _set_status(self, status):
if isinstance(status, int):
code, status = status, _HTTP_STATUS_LINES.get(status)
elif ' ' in status:
status = status.strip()
code = int(status.split()[0])
else:
raise ValueError('String status line without a reason phrase.')
if not 100 <= code <= 999: raise ValueError('Status code out of range.')
self._status_code = code
self._status_line = str(status or ('%d Unknown' % code))
def _get_status(self):
return self._status_line
status = property(_get_status, _set_status, None,
''' A writeable property to change the HTTP response status. It accepts
either a numeric code (100-999) or a string with a custom reason
phrase (e.g. "404 Brain not found"). Both :data:`status_line` and
:data:`status_code` are updated accordingly. The return value is
always a status string. ''')
del _get_status, _set_status
@property
def headers(self):
''' An instance of :class:`HeaderDict`, a case-insensitive dict-like
view on the response headers. '''
hdict = HeaderDict()
hdict.dict = self._headers
return hdict
def __contains__(self, name): return _hkey(name) in self._headers
def __delitem__(self, name): del self._headers[_hkey(name)]
def __getitem__(self, name): return self._headers[_hkey(name)][-1]
def __setitem__(self, name, value): self._headers[_hkey(name)] = [str(value)]
def get_header(self, name, default=None):
''' Return the value of a previously defined header. If there is no
header with that name, return a default value. '''
return self._headers.get(_hkey(name), [default])[-1]
def set_header(self, name, value):
''' Create a new response header, replacing any previously defined
headers with the same name. '''
self._headers[_hkey(name)] = [str(value)]
def add_header(self, name, value):
''' Add an additional response header, not removing duplicates. '''
self._headers.setdefault(_hkey(name), []).append(str(value))
def iter_headers(self):
''' Yield (header, value) tuples, skipping headers that are not
allowed with the current response status code. '''
return self.headerlist
@property
def headerlist(self):
''' WSGI conform list of (header, value) tuples. '''
out = []
headers = list(self._headers.items())
if 'Content-Type' not in self._headers:
headers.append(('Content-Type', [self.default_content_type]))
if self._status_code in self.bad_headers:
bad_headers = self.bad_headers[self._status_code]
headers = [h for h in headers if h[0] not in bad_headers]
out += [(name, val) for name, vals in headers for val in vals]
if self._cookies:
for c in self._cookies.values():
out.append(('Set-Cookie', c.OutputString()))
return out
content_type = HeaderProperty('Content-Type')
content_length = HeaderProperty('Content-Length', reader=int)
expires = HeaderProperty('Expires',
reader=lambda x: datetime.utcfromtimestamp(parse_date(x)),
writer=lambda x: http_date(x))
@property
def charset(self, default='UTF-8'):
""" Return the charset specified in the content-type header (default: utf8). """
if 'charset=' in self.content_type:
return self.content_type.split('charset=')[-1].split(';')[0].strip()
return default
def set_cookie(self, name, value, secret=None, **options):
''' Create a new cookie or replace an old one. If the `secret` parameter is
set, create a `Signed Cookie` (described below).
:param name: the name of the cookie.
:param value: the value of the cookie.
:param secret: a signature key required for signed cookies.
Additionally, this method accepts all RFC 2109 attributes that are
supported by :class:`cookie.Morsel`, including:
:param max_age: maximum age in seconds. (default: None)
:param expires: a datetime object or UNIX timestamp. (default: None)
:param domain: the domain that is allowed to read the cookie.
(default: current domain)
:param path: limits the cookie to a given path (default: current path)
:param secure: limit the cookie to HTTPS connections (default: off).
:param httponly: prevents client-side javascript to read this cookie
(default: off, requires Python 2.6 or newer).
If neither `expires` nor `max_age` is set (default), the cookie will
expire at the end of the browser session (as soon as the browser
window is closed).
Signed cookies may store any pickle-able object and are
cryptographically signed to prevent manipulation. Keep in mind that
cookies are limited to 4kb in most browsers.
Warning: Signed cookies are not encrypted (the client can still see
the content) and not copy-protected (the client can restore an old
cookie). The main intention is to make pickling and unpickling
save, not to store secret information at client side.
'''
if not self._cookies:
self._cookies = SimpleCookie()
if secret:
value = touni(cookie_encode((name, value), secret))
elif not isinstance(value, basestring):
raise TypeError('Secret key missing for non-string Cookie.')
if len(value) > 4096: raise ValueError('Cookie value to long.')
self._cookies[name] = value
for key, value in options.items():
if key == 'max_age':
if isinstance(value, timedelta):
value = value.seconds + value.days * 24 * 3600
if key == 'expires':
if isinstance(value, (datedate, datetime)):
value = value.timetuple()
elif isinstance(value, (int, float)):
value = time.gmtime(value)
value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value)
self._cookies[name][key.replace('_', '-')] = value
def delete_cookie(self, key, **kwargs):
''' Delete a cookie. Be sure to use the same `domain` and `path`
settings as used to create the cookie. '''
kwargs['max_age'] = -1
kwargs['expires'] = 0
self.set_cookie(key, '', **kwargs)
def __repr__(self):
out = ''
for name, value in self.headerlist:
out += '%s: %s\n' % (name.title(), value.strip())
return out
def local_property(name=None):
if name: depr('local_property() is deprecated and will be removed.') #0.12
ls = threading.local()
def fget(self):
try: return ls.var
except AttributeError:
raise RuntimeError("Request context not initialized.")
def fset(self, value): ls.var = value
def fdel(self): del ls.var
return property(fget, fset, fdel, 'Thread-local property')
class LocalRequest(BaseRequest):
''' A thread-local subclass of :class:`BaseRequest` with a different
set of attributes for each thread. There is usually only one global
instance of this class (:data:`request`). If accessed during a
request/response cycle, this instance always refers to the *current*
request (even on a multithreaded server). '''
bind = BaseRequest.__init__
environ = local_property()
class LocalResponse(BaseResponse):
''' A thread-local subclass of :class:`BaseResponse` with a different
set of attributes for each thread. There is usually only one global
instance of this class (:data:`response`). Its attributes are used
to build the HTTP response at the end of the request/response cycle.
'''
bind = BaseResponse.__init__
_status_line = local_property()
_status_code = local_property()
_cookies = local_property()
_headers = local_property()
body = local_property()
Request = BaseRequest
Response = BaseResponse
class HTTPResponse(Response, BottleException):
def __init__(self, body='', status=None, headers=None, **more_headers):
super(HTTPResponse, self).__init__(body, status, headers, **more_headers)
def apply(self, response):
response._status_code = self._status_code
response._status_line = self._status_line
response._headers = self._headers
response._cookies = self._cookies
response.body = self.body
class HTTPError(HTTPResponse):
default_status = 500
def __init__(self, status=None, body=None, exception=None, traceback=None,
**options):
self.exception = exception
self.traceback = traceback
super(HTTPError, self).__init__(body, status, **options)
###############################################################################
# Plugins ######################################################################
###############################################################################
class PluginError(BottleException): pass
class JSONPlugin(object):
name = 'json'
api = 2
def __init__(self, json_dumps=json_dumps):
self.json_dumps = json_dumps
def apply(self, callback, route):
dumps = self.json_dumps
if not dumps: return callback
def wrapper(*a, **ka):
try:
rv = callback(*a, **ka)
except HTTPError:
rv = _e()
if isinstance(rv, dict):
#Attempt to serialize, raises exception on failure
json_response = dumps(rv)
#Set content type only if serialization succesful
response.content_type = 'application/json'
return json_response
elif isinstance(rv, HTTPResponse) and isinstance(rv.body, dict):
rv.body = dumps(rv.body)
rv.content_type = 'application/json'
return rv
return wrapper
class TemplatePlugin(object):
''' This plugin applies the :func:`view` decorator to all routes with a
`template` config parameter. If the parameter is a tuple, the second
element must be a dict with additional options (e.g. `template_engine`)
or default variables for the template. '''
name = 'template'
api = 2
def apply(self, callback, route):
conf = route.config.get('template')
if isinstance(conf, (tuple, list)) and len(conf) == 2:
return view(conf[0], **conf[1])(callback)
elif isinstance(conf, str):
return view(conf)(callback)
else:
return callback
#: Not a plugin, but part of the plugin API. TODO: Find a better place.
class _ImportRedirect(object):
def __init__(self, name, impmask):
''' Create a virtual package that redirects imports (see PEP 302). '''
self.name = name
self.impmask = impmask
self.module = sys.modules.setdefault(name, imp.new_module(name))
self.module.__dict__.update({'__file__': __file__, '__path__': [],
'__all__': [], '__loader__': self})
sys.meta_path.append(self)
def find_module(self, fullname, path=None):
if '.' not in fullname: return
packname = fullname.rsplit('.', 1)[0]
if packname != self.name: return
return self
def load_module(self, fullname):
if fullname in sys.modules: return sys.modules[fullname]
modname = fullname.rsplit('.', 1)[1]
realname = self.impmask % modname
__import__(realname)
module = sys.modules[fullname] = sys.modules[realname]
setattr(self.module, modname, module)
module.__loader__ = self
return module
###############################################################################
# Common Utilities #############################################################
###############################################################################
class MultiDict(DictMixin):
""" This dict stores multiple values per key, but behaves exactly like a
normal dict in that it returns only the newest value for any given key.
There are special methods available to access the full list of values.
"""
def __init__(self, *a, **k):
self.dict = dict((k, [v]) for (k, v) in dict(*a, **k).items())
def __len__(self): return len(self.dict)
def __iter__(self): return iter(self.dict)
def __contains__(self, key): return key in self.dict
def __delitem__(self, key): del self.dict[key]
def __getitem__(self, key): return self.dict[key][-1]
def __setitem__(self, key, value): self.append(key, value)
def keys(self): return self.dict.keys()
if py3k:
def values(self): return (v[-1] for v in self.dict.values())
def items(self): return ((k, v[-1]) for k, v in self.dict.items())
def allitems(self):
return ((k, v) for k, vl in self.dict.items() for v in vl)
iterkeys = keys
itervalues = values
iteritems = items
iterallitems = allitems
else:
def values(self): return [v[-1] for v in self.dict.values()]
def items(self): return [(k, v[-1]) for k, v in self.dict.items()]
def iterkeys(self): return self.dict.iterkeys()
def itervalues(self): return (v[-1] for v in self.dict.itervalues())
def iteritems(self):
return ((k, v[-1]) for k, v in self.dict.iteritems())
def iterallitems(self):
return ((k, v) for k, vl in self.dict.iteritems() for v in vl)
def allitems(self):
return [(k, v) for k, vl in self.dict.iteritems() for v in vl]
def get(self, key, default=None, index=-1, type=None):
''' Return the most recent value for a key.
:param default: The default value to be returned if the key is not
present or the type conversion fails.
:param index: An index for the list of available values.
:param type: If defined, this callable is used to cast the value
into a specific type. Exception are suppressed and result in
the default value to be returned.
'''
try:
val = self.dict[key][index]
return type(val) if type else val
except Exception:
pass
return default
def append(self, key, value):
''' Add a new value to the list of values for this key. '''
self.dict.setdefault(key, []).append(value)
def replace(self, key, value):
''' Replace the list of values with a single value. '''
self.dict[key] = [value]
def getall(self, key):
''' Return a (possibly empty) list of values for a key. '''
return self.dict.get(key) or []
#: Aliases for WTForms to mimic other multi-dict APIs (Django)
getone = get
getlist = getall
class FormsDict(MultiDict):
''' This :class:`MultiDict` subclass is used to store request form data.
Additionally to the normal dict-like item access methods (which return
unmodified data as native strings), this container also supports
attribute-like access to its values. Attributes are automatically de-
or recoded to match :attr:`input_encoding` (default: 'utf8'). Missing
attributes default to an empty string. '''
#: Encoding used for attribute values.
input_encoding = 'utf8'
#: If true (default), unicode strings are first encoded with `latin1`
#: and then decoded to match :attr:`input_encoding`.
recode_unicode = True
def _fix(self, s, encoding=None):
if isinstance(s, unicode) and self.recode_unicode: # Python 3 WSGI
return s.encode('latin1').decode(encoding or self.input_encoding)
elif isinstance(s, bytes): # Python 2 WSGI
return s.decode(encoding or self.input_encoding)
else:
return s
def decode(self, encoding=None):
''' Returns a copy with all keys and values de- or recoded to match
:attr:`input_encoding`. Some libraries (e.g. WTForms) want a
unicode dictionary. '''
copy = FormsDict()
enc = copy.input_encoding = encoding or self.input_encoding
copy.recode_unicode = False
for key, value in self.allitems():
copy.append(self._fix(key, enc), self._fix(value, enc))
return copy
def getunicode(self, name, default=None, encoding=None):
''' Return the value as a unicode string, or the default. '''
try:
return self._fix(self[name], encoding)
except (UnicodeError, KeyError):
return default
def __getattr__(self, name, default=unicode()):
# Without this guard, pickle generates a cryptic TypeError:
if name.startswith('__') and name.endswith('__'):
return super(FormsDict, self).__getattr__(name)
return self.getunicode(name, default=default)
class HeaderDict(MultiDict):
""" A case-insensitive version of :class:`MultiDict` that defaults to
replace the old value instead of appending it. """
def __init__(self, *a, **ka):
self.dict = {}
if a or ka: self.update(*a, **ka)
def __contains__(self, key): return _hkey(key) in self.dict
def __delitem__(self, key): del self.dict[_hkey(key)]
def __getitem__(self, key): return self.dict[_hkey(key)][-1]
def __setitem__(self, key, value): self.dict[_hkey(key)] = [str(value)]
def append(self, key, value):
self.dict.setdefault(_hkey(key), []).append(str(value))
def replace(self, key, value): self.dict[_hkey(key)] = [str(value)]
def getall(self, key): return self.dict.get(_hkey(key)) or []
def get(self, key, default=None, index=-1):
return MultiDict.get(self, _hkey(key), default, index)
def filter(self, names):
for name in [_hkey(n) for n in names]:
if name in self.dict:
del self.dict[name]
class WSGIHeaderDict(DictMixin):
''' This dict-like class wraps a WSGI environ dict and provides convenient
access to HTTP_* fields. Keys and values are native strings
(2.x bytes or 3.x unicode) and keys are case-insensitive. If the WSGI
environment contains non-native string values, these are de- or encoded
using a lossless 'latin1' character set.
The API will remain stable even on changes to the relevant PEPs.
Currently PEP 333, 444 and 3333 are supported. (PEP 444 is the only one
that uses non-native strings.)
'''
#: List of keys that do not have a ``HTTP_`` prefix.
cgikeys = ('CONTENT_TYPE', 'CONTENT_LENGTH')
def __init__(self, environ):
self.environ = environ
def _ekey(self, key):
''' Translate header field name to CGI/WSGI environ key. '''
key = key.replace('-','_').upper()
if key in self.cgikeys:
return key
return 'HTTP_' + key
def raw(self, key, default=None):
''' Return the header value as is (may be bytes or unicode). '''
return self.environ.get(self._ekey(key), default)
def __getitem__(self, key):
return tonat(self.environ[self._ekey(key)], 'latin1')
def __setitem__(self, key, value):
raise TypeError("%s is read-only." % self.__class__)
def __delitem__(self, key):
raise TypeError("%s is read-only." % self.__class__)
def __iter__(self):
for key in self.environ:
if key[:5] == 'HTTP_':
yield key[5:].replace('_', '-').title()
elif key in self.cgikeys:
yield key.replace('_', '-').title()
def keys(self): return [x for x in self]
def __len__(self): return len(self.keys())
def __contains__(self, key): return self._ekey(key) in self.environ
class ConfigDict(dict):
''' A dict-like configuration storage with additional support for
namespaces, validators, meta-data, on_change listeners and more.
This storage is optimized for fast read access. Retrieving a key
or using non-altering dict methods (e.g. `dict.get()`) has no overhead
compared to a native dict.
'''
__slots__ = ('_meta', '_on_change')
class Namespace(DictMixin):
def __init__(self, config, namespace):
self._config = config
self._prefix = namespace
def __getitem__(self, key):
depr('Accessing namespaces as dicts is discouraged. '
'Only use flat item access: '
'cfg["names"]["pace"]["key"] -> cfg["name.space.key"]') #0.12
return self._config[self._prefix + '.' + key]
def __setitem__(self, key, value):
self._config[self._prefix + '.' + key] = value
def __delitem__(self, key):
del self._config[self._prefix + '.' + key]
def __iter__(self):
ns_prefix = self._prefix + '.'
for key in self._config:
ns, dot, name = key.rpartition('.')
if ns == self._prefix and name:
yield name
def keys(self): return [x for x in self]
def __len__(self): return len(self.keys())
def __contains__(self, key): return self._prefix + '.' + key in self._config
def __repr__(self): return '<Config.Namespace %s.*>' % self._prefix
def __str__(self): return '<Config.Namespace %s.*>' % self._prefix
# Deprecated ConfigDict features
def __getattr__(self, key):
depr('Attribute access is deprecated.') #0.12
if key not in self and key[0].isupper():
self[key] = ConfigDict.Namespace(self._config, self._prefix + '.' + key)
if key not in self and key.startswith('__'):
raise AttributeError(key)
return self.get(key)
def __setattr__(self, key, value):
if key in ('_config', '_prefix'):
self.__dict__[key] = value
return
depr('Attribute assignment is deprecated.') #0.12
if hasattr(DictMixin, key):
raise AttributeError('Read-only attribute.')
if key in self and self[key] and isinstance(self[key], self.__class__):
raise AttributeError('Non-empty namespace attribute.')
self[key] = value
def __delattr__(self, key):
if key in self:
val = self.pop(key)
if isinstance(val, self.__class__):
prefix = key + '.'
for key in self:
if key.startswith(prefix):
del self[prefix+key]
def __call__(self, *a, **ka):
depr('Calling ConfDict is deprecated. Use the update() method.') #0.12
self.update(*a, **ka)
return self
def __init__(self, *a, **ka):
self._meta = {}
self._on_change = lambda name, value: None
if a or ka:
depr('Constructor does no longer accept parameters.') #0.12
self.update(*a, **ka)
def load_config(self, filename):
''' Load values from an *.ini style config file.
If the config file contains sections, their names are used as
namespaces for the values within. The two special sections
``DEFAULT`` and ``bottle`` refer to the root namespace (no prefix).
'''
conf = ConfigParser()
conf.read(filename)
for section in conf.sections():
for key, value in conf.items(section):
if section not in ('DEFAULT', 'bottle'):
key = section + '.' + key
self[key] = value
return self
def load_dict(self, source, namespace='', make_namespaces=False):
''' Import values from a dictionary structure. Nesting can be used to
represent namespaces.
>>> ConfigDict().load_dict({'name': {'space': {'key': 'value'}}})
{'name.space.key': 'value'}
'''
stack = [(namespace, source)]
while stack:
prefix, source = stack.pop()
if not isinstance(source, dict):
raise TypeError('Source is not a dict (r)' % type(key))
for key, value in source.items():
if not isinstance(key, basestring):
raise TypeError('Key is not a string (%r)' % type(key))
full_key = prefix + '.' + key if prefix else key
if isinstance(value, dict):
stack.append((full_key, value))
if make_namespaces:
self[full_key] = self.Namespace(self, full_key)
else:
self[full_key] = value
return self
def update(self, *a, **ka):
''' If the first parameter is a string, all keys are prefixed with this
namespace. Apart from that it works just as the usual dict.update().
Example: ``update('some.namespace', key='value')`` '''
prefix = ''
if a and isinstance(a[0], basestring):
prefix = a[0].strip('.') + '.'
a = a[1:]
for key, value in dict(*a, **ka).items():
self[prefix+key] = value
def setdefault(self, key, value):
if key not in self:
self[key] = value
return self[key]
def __setitem__(self, key, value):
if not isinstance(key, basestring):
raise TypeError('Key has type %r (not a string)' % type(key))
value = self.meta_get(key, 'filter', lambda x: x)(value)
if key in self and self[key] is value:
return
self._on_change(key, value)
dict.__setitem__(self, key, value)
def __delitem__(self, key):
dict.__delitem__(self, key)
def clear(self):
for key in self:
del self[key]
def meta_get(self, key, metafield, default=None):
''' Return the value of a meta field for a key. '''
return self._meta.get(key, {}).get(metafield, default)
def meta_set(self, key, metafield, value):
''' Set the meta field for a key to a new value. This triggers the
on-change handler for existing keys. '''
self._meta.setdefault(key, {})[metafield] = value
if key in self:
self[key] = self[key]
def meta_list(self, key):
''' Return an iterable of meta field names defined for a key. '''
return self._meta.get(key, {}).keys()
# Deprecated ConfigDict features
def __getattr__(self, key):
depr('Attribute access is deprecated.') #0.12
if key not in self and key[0].isupper():
self[key] = self.Namespace(self, key)
if key not in self and key.startswith('__'):
raise AttributeError(key)
return self.get(key)
def __setattr__(self, key, value):
if key in self.__slots__:
return dict.__setattr__(self, key, value)
depr('Attribute assignment is deprecated.') #0.12
if hasattr(dict, key):
raise AttributeError('Read-only attribute.')
if key in self and self[key] and isinstance(self[key], self.Namespace):
raise AttributeError('Non-empty namespace attribute.')
self[key] = value
def __delattr__(self, key):
if key in self:
val = self.pop(key)
if isinstance(val, self.Namespace):
prefix = key + '.'
for key in self:
if key.startswith(prefix):
del self[prefix+key]
def __call__(self, *a, **ka):
depr('Calling ConfDict is deprecated. Use the update() method.') #0.12
self.update(*a, **ka)
return self
class AppStack(list):
""" A stack-like list. Calling it returns the head of the stack. """
def __call__(self):
""" Return the current default application. """
return self[-1]
def push(self, value=None):
""" Add a new :class:`Bottle` instance to the stack """
if not isinstance(value, Bottle):
value = Bottle()
self.append(value)
return value
class WSGIFileWrapper(object):
def __init__(self, fp, buffer_size=1024*64):
self.fp, self.buffer_size = fp, buffer_size
for attr in ('fileno', 'close', 'read', 'readlines', 'tell', 'seek'):
if hasattr(fp, attr): setattr(self, attr, getattr(fp, attr))
def __iter__(self):
buff, read = self.buffer_size, self.read
while True:
part = read(buff)
if not part: return
yield part
class _closeiter(object):
''' This only exists to be able to attach a .close method to iterators that
do not support attribute assignment (most of itertools). '''
def __init__(self, iterator, close=None):
self.iterator = iterator
self.close_callbacks = makelist(close)
def __iter__(self):
return iter(self.iterator)
def close(self):
for func in self.close_callbacks:
func()
class ResourceManager(object):
''' This class manages a list of search paths and helps to find and open
application-bound resources (files).
:param base: default value for :meth:`add_path` calls.
:param opener: callable used to open resources.
:param cachemode: controls which lookups are cached. One of 'all',
'found' or 'none'.
'''
def __init__(self, base='./', opener=open, cachemode='all'):
self.opener = open
self.base = base
self.cachemode = cachemode
#: A list of search paths. See :meth:`add_path` for details.
self.path = []
#: A cache for resolved paths. ``res.cache.clear()`` clears the cache.
self.cache = {}
def add_path(self, path, base=None, index=None, create=False):
''' Add a new path to the list of search paths. Return False if the
path does not exist.
:param path: The new search path. Relative paths are turned into
an absolute and normalized form. If the path looks like a file
(not ending in `/`), the filename is stripped off.
:param base: Path used to absolutize relative search paths.
Defaults to :attr:`base` which defaults to ``os.getcwd()``.
:param index: Position within the list of search paths. Defaults
to last index (appends to the list).
The `base` parameter makes it easy to reference files installed
along with a python module or package::
res.add_path('./resources/', __file__)
'''
base = os.path.abspath(os.path.dirname(base or self.base))
path = os.path.abspath(os.path.join(base, os.path.dirname(path)))
path += os.sep
if path in self.path:
self.path.remove(path)
if create and not os.path.isdir(path):
os.makedirs(path)
if index is None:
self.path.append(path)
else:
self.path.insert(index, path)
self.cache.clear()
return os.path.exists(path)
def __iter__(self):
''' Iterate over all existing files in all registered paths. '''
search = self.path[:]
while search:
path = search.pop()
if not os.path.isdir(path): continue
for name in os.listdir(path):
full = os.path.join(path, name)
if os.path.isdir(full): search.append(full)
else: yield full
def lookup(self, name):
''' Search for a resource and return an absolute file path, or `None`.
The :attr:`path` list is searched in order. The first match is
returend. Symlinks are followed. The result is cached to speed up
future lookups. '''
if name not in self.cache or DEBUG:
for path in self.path:
fpath = os.path.join(path, name)
if os.path.isfile(fpath):
if self.cachemode in ('all', 'found'):
self.cache[name] = fpath
return fpath
if self.cachemode == 'all':
self.cache[name] = None
return self.cache[name]
def open(self, name, mode='r', *args, **kwargs):
''' Find a resource and return a file object, or raise IOError. '''
fname = self.lookup(name)
if not fname: raise IOError("Resource %r not found." % name)
return self.opener(fname, mode=mode, *args, **kwargs)
class FileUpload(object):
def __init__(self, fileobj, name, filename, headers=None):
''' Wrapper for file uploads. '''
#: Open file(-like) object (BytesIO buffer or temporary file)
self.file = fileobj
#: Name of the upload form field
self.name = name
#: Raw filename as sent by the client (may contain unsafe characters)
self.raw_filename = filename
#: A :class:`HeaderDict` with additional headers (e.g. content-type)
self.headers = HeaderDict(headers) if headers else HeaderDict()
content_type = HeaderProperty('Content-Type')
content_length = HeaderProperty('Content-Length', reader=int, default=-1)
@cached_property
def filename(self):
''' Name of the file on the client file system, but normalized to ensure
file system compatibility. An empty filename is returned as 'empty'.
Only ASCII letters, digits, dashes, underscores and dots are
allowed in the final filename. Accents are removed, if possible.
Whitespace is replaced by a single dash. Leading or tailing dots
or dashes are removed. The filename is limited to 255 characters.
'''
fname = self.raw_filename
if not isinstance(fname, unicode):
fname = fname.decode('utf8', 'ignore')
fname = normalize('NFKD', fname).encode('ASCII', 'ignore').decode('ASCII')
fname = os.path.basename(fname.replace('\\', os.path.sep))
fname = re.sub(r'[^a-zA-Z0-9-_.\s]', '', fname).strip()
fname = re.sub(r'[-\s]+', '-', fname).strip('.-')
return fname[:255] or 'empty'
def _copy_file(self, fp, chunk_size=2**16):
read, write, offset = self.file.read, fp.write, self.file.tell()
while 1:
buf = read(chunk_size)
if not buf: break
write(buf)
self.file.seek(offset)
def save(self, destination, overwrite=False, chunk_size=2**16):
''' Save file to disk or copy its content to an open file(-like) object.
If *destination* is a directory, :attr:`filename` is added to the
path. Existing files are not overwritten by default (IOError).
:param destination: File path, directory or file(-like) object.
:param overwrite: If True, replace existing files. (default: False)
:param chunk_size: Bytes to read at a time. (default: 64kb)
'''
if isinstance(destination, basestring): # Except file-likes here
if os.path.isdir(destination):
destination = os.path.join(destination, self.filename)
if not overwrite and os.path.exists(destination):
raise IOError('File exists.')
with open(destination, 'wb') as fp:
self._copy_file(fp, chunk_size)
else:
self._copy_file(destination, chunk_size)
###############################################################################
# Application Helper ###########################################################
###############################################################################
def abort(code=500, text='Unknown Error.'):
""" Aborts execution and causes a HTTP error. """
raise HTTPError(code, text)
def redirect(url, code=None):
""" Aborts execution and causes a 303 or 302 redirect, depending on
the HTTP protocol version. """
if not code:
code = 303 if request.get('SERVER_PROTOCOL') == "HTTP/1.1" else 302
res = response.copy(cls=HTTPResponse)
res.status = code
res.body = ""
res.set_header('Location', urljoin(request.url, url))
raise res
def _file_iter_range(fp, offset, bytes, maxread=1024*1024):
''' Yield chunks from a range in a file. No chunk is bigger than maxread.'''
fp.seek(offset)
while bytes > 0:
part = fp.read(min(bytes, maxread))
if not part: break
bytes -= len(part)
yield part
def static_file(filename, root, mimetype='auto', download=False, charset='UTF-8'):
""" Open a file in a safe way and return :exc:`HTTPResponse` with status
code 200, 305, 403 or 404. The ``Content-Type``, ``Content-Encoding``,
``Content-Length`` and ``Last-Modified`` headers are set if possible.
Special support for ``If-Modified-Since``, ``Range`` and ``HEAD``
requests.
:param filename: Name or path of the file to send.
:param root: Root path for file lookups. Should be an absolute directory
path.
:param mimetype: Defines the content-type header (default: guess from
file extension)
:param download: If True, ask the browser to open a `Save as...` dialog
instead of opening the file with the associated program. You can
specify a custom filename as a string. If not specified, the
original filename is used (default: False).
:param charset: The charset to use for files with a ``text/*``
mime-type. (default: UTF-8)
"""
root = os.path.abspath(root) + os.sep
filename = os.path.abspath(os.path.join(root, filename.strip('/\\')))
headers = dict()
if not filename.startswith(root):
return HTTPError(403, "Access denied.")
if not os.path.exists(filename) or not os.path.isfile(filename):
return HTTPError(404, "File does not exist.")
if not os.access(filename, os.R_OK):
return HTTPError(403, "You do not have permission to access this file.")
if mimetype == 'auto':
mimetype, encoding = mimetypes.guess_type(filename)
if encoding: headers['Content-Encoding'] = encoding
if mimetype:
if mimetype[:5] == 'text/' and charset and 'charset' not in mimetype:
mimetype += '; charset=%s' % charset
headers['Content-Type'] = mimetype
if download:
download = os.path.basename(filename if download == True else download)
headers['Content-Disposition'] = 'attachment; filename="%s"' % download
stats = os.stat(filename)
headers['Content-Length'] = clen = stats.st_size
lm = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(stats.st_mtime))
headers['Last-Modified'] = lm
ims = request.environ.get('HTTP_IF_MODIFIED_SINCE')
if ims:
ims = parse_date(ims.split(";")[0].strip())
if ims is not None and ims >= int(stats.st_mtime):
headers['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime())
return HTTPResponse(status=304, **headers)
body = '' if request.method == 'HEAD' else open(filename, 'rb')
headers["Accept-Ranges"] = "bytes"
ranges = request.environ.get('HTTP_RANGE')
if 'HTTP_RANGE' in request.environ:
ranges = list(parse_range_header(request.environ['HTTP_RANGE'], clen))
if not ranges:
return HTTPError(416, "Requested Range Not Satisfiable")
offset, end = ranges[0]
headers["Content-Range"] = "bytes %d-%d/%d" % (offset, end-1, clen)
headers["Content-Length"] = str(end-offset)
if body: body = _file_iter_range(body, offset, end-offset)
return HTTPResponse(body, status=206, **headers)
return HTTPResponse(body, **headers)
###############################################################################
# HTTP Utilities and MISC (TODO) ###############################################
###############################################################################
def debug(mode=True):
""" Change the debug level.
There is only one debug level supported at the moment."""
global DEBUG
if mode: warnings.simplefilter('default')
DEBUG = bool(mode)
def http_date(value):
if isinstance(value, (datedate, datetime)):
value = value.utctimetuple()
elif isinstance(value, (int, float)):
value = time.gmtime(value)
if not isinstance(value, basestring):
value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value)
return value
def parse_date(ims):
""" Parse rfc1123, rfc850 and asctime timestamps and return UTC epoch. """
try:
ts = email.utils.parsedate_tz(ims)
return time.mktime(ts[:8] + (0,)) - (ts[9] or 0) - time.timezone
except (TypeError, ValueError, IndexError, OverflowError):
return None
def parse_auth(header):
""" Parse rfc2617 HTTP authentication header string (basic) and return (user,pass) tuple or None"""
try:
method, data = header.split(None, 1)
if method.lower() == 'basic':
user, pwd = touni(base64.b64decode(tob(data))).split(':',1)
return user, pwd
except (KeyError, ValueError):
return None
def parse_range_header(header, maxlen=0):
''' Yield (start, end) ranges parsed from a HTTP Range header. Skip
unsatisfiable ranges. The end index is non-inclusive.'''
if not header or header[:6] != 'bytes=': return
ranges = [r.split('-', 1) for r in header[6:].split(',') if '-' in r]
for start, end in ranges:
try:
if not start: # bytes=-100 -> last 100 bytes
start, end = max(0, maxlen-int(end)), maxlen
elif not end: # bytes=100- -> all but the first 99 bytes
start, end = int(start), maxlen
else: # bytes=100-200 -> bytes 100-200 (inclusive)
start, end = int(start), min(int(end)+1, maxlen)
if 0 <= start < end <= maxlen:
yield start, end
except ValueError:
pass
def _parse_qsl(qs):
r = []
for pair in qs.replace(';','&').split('&'):
if not pair: continue
nv = pair.split('=', 1)
if len(nv) != 2: nv.append('')
key = urlunquote(nv[0].replace('+', ' '))
value = urlunquote(nv[1].replace('+', ' '))
r.append((key, value))
return r
def _lscmp(a, b):
''' Compares two strings in a cryptographically safe way:
Runtime is not affected by length of common prefix. '''
return not sum(0 if x==y else 1 for x, y in zip(a, b)) and len(a) == len(b)
def cookie_encode(data, key):
''' Encode and sign a pickle-able object. Return a (byte) string '''
msg = base64.b64encode(pickle.dumps(data, -1))
sig = base64.b64encode(hmac.new(tob(key), msg).digest())
return tob('!') + sig + tob('?') + msg
def cookie_decode(data, key):
''' Verify and decode an encoded string. Return an object or None.'''
data = tob(data)
if cookie_is_encoded(data):
sig, msg = data.split(tob('?'), 1)
if _lscmp(sig[1:], base64.b64encode(hmac.new(tob(key), msg).digest())):
return pickle.loads(base64.b64decode(msg))
return None
def cookie_is_encoded(data):
''' Return True if the argument looks like a encoded cookie.'''
return bool(data.startswith(tob('!')) and tob('?') in data)
def html_escape(string):
''' Escape HTML special characters ``&<>`` and quotes ``'"``. '''
return string.replace('&','&').replace('<','<').replace('>','>')\
.replace('"','"').replace("'",''')
def html_quote(string):
''' Escape and quote a string to be used as an HTTP attribute.'''
return '"%s"' % html_escape(string).replace('\n',' ')\
.replace('\r',' ').replace('\t','	')
def yieldroutes(func):
""" Return a generator for routes that match the signature (name, args)
of the func parameter. This may yield more than one route if the function
takes optional keyword arguments. The output is best described by example::
a() -> '/a'
b(x, y) -> '/b/<x>/<y>'
c(x, y=5) -> '/c/<x>' and '/c/<x>/<y>'
d(x=5, y=6) -> '/d' and '/d/<x>' and '/d/<x>/<y>'
"""
path = '/' + func.__name__.replace('__','/').lstrip('/')
spec = getargspec(func)
argc = len(spec[0]) - len(spec[3] or [])
path += ('/<%s>' * argc) % tuple(spec[0][:argc])
yield path
for arg in spec[0][argc:]:
path += '/<%s>' % arg
yield path
def path_shift(script_name, path_info, shift=1):
''' Shift path fragments from PATH_INFO to SCRIPT_NAME and vice versa.
:return: The modified paths.
:param script_name: The SCRIPT_NAME path.
:param script_name: The PATH_INFO path.
:param shift: The number of path fragments to shift. May be negative to
change the shift direction. (default: 1)
'''
if shift == 0: return script_name, path_info
pathlist = path_info.strip('/').split('/')
scriptlist = script_name.strip('/').split('/')
if pathlist and pathlist[0] == '': pathlist = []
if scriptlist and scriptlist[0] == '': scriptlist = []
if shift > 0 and shift <= len(pathlist):
moved = pathlist[:shift]
scriptlist = scriptlist + moved
pathlist = pathlist[shift:]
elif shift < 0 and shift >= -len(scriptlist):
moved = scriptlist[shift:]
pathlist = moved + pathlist
scriptlist = scriptlist[:shift]
else:
empty = 'SCRIPT_NAME' if shift < 0 else 'PATH_INFO'
raise AssertionError("Cannot shift. Nothing left from %s" % empty)
new_script_name = '/' + '/'.join(scriptlist)
new_path_info = '/' + '/'.join(pathlist)
if path_info.endswith('/') and pathlist: new_path_info += '/'
return new_script_name, new_path_info
def auth_basic(check, realm="private", text="Access denied"):
''' Callback decorator to require HTTP auth (basic).
TODO: Add route(check_auth=...) parameter. '''
def decorator(func):
def wrapper(*a, **ka):
user, password = request.auth or (None, None)
if user is None or not check(user, password):
err = HTTPError(401, text)
err.add_header('WWW-Authenticate', 'Basic realm="%s"' % realm)
return err
return func(*a, **ka)
return wrapper
return decorator
# Shortcuts for common Bottle methods.
# They all refer to the current default application.
def make_default_app_wrapper(name):
''' Return a callable that relays calls to the current default app. '''
@functools.wraps(getattr(Bottle, name))
def wrapper(*a, **ka):
return getattr(app(), name)(*a, **ka)
return wrapper
route = make_default_app_wrapper('route')
get = make_default_app_wrapper('get')
post = make_default_app_wrapper('post')
put = make_default_app_wrapper('put')
delete = make_default_app_wrapper('delete')
error = make_default_app_wrapper('error')
mount = make_default_app_wrapper('mount')
hook = make_default_app_wrapper('hook')
install = make_default_app_wrapper('install')
uninstall = make_default_app_wrapper('uninstall')
url = make_default_app_wrapper('get_url')
###############################################################################
# Server Adapter ###############################################################
###############################################################################
class ServerAdapter(object):
quiet = False
def __init__(self, host='127.0.0.1', port=8080, **options):
self.options = options
self.host = host
self.port = int(port)
def run(self, handler): # pragma: no cover
pass
def __repr__(self):
args = ', '.join(['%s=%s'%(k,repr(v)) for k, v in self.options.items()])
return "%s(%s)" % (self.__class__.__name__, args)
class CGIServer(ServerAdapter):
quiet = True
def run(self, handler): # pragma: no cover
from wsgiref.handlers import CGIHandler
def fixed_environ(environ, start_response):
environ.setdefault('PATH_INFO', '')
return handler(environ, start_response)
CGIHandler().run(fixed_environ)
class FlupFCGIServer(ServerAdapter):
def run(self, handler): # pragma: no cover
import flup.server.fcgi
self.options.setdefault('bindAddress', (self.host, self.port))
flup.server.fcgi.WSGIServer(handler, **self.options).run()
class WSGIRefServer(ServerAdapter):
def run(self, app): # pragma: no cover
from wsgiref.simple_server import WSGIRequestHandler, WSGIServer
from wsgiref.simple_server import make_server
import socket
class FixedHandler(WSGIRequestHandler):
def address_string(self): # Prevent reverse DNS lookups please.
return self.client_address[0]
def log_request(*args, **kw):
if not self.quiet:
return WSGIRequestHandler.log_request(*args, **kw)
handler_cls = self.options.get('handler_class', FixedHandler)
server_cls = self.options.get('server_class', WSGIServer)
if ':' in self.host: # Fix wsgiref for IPv6 addresses.
if getattr(server_cls, 'address_family') == socket.AF_INET:
class server_cls(server_cls):
address_family = socket.AF_INET6
srv = make_server(self.host, self.port, app, server_cls, handler_cls)
srv.serve_forever()
class CherryPyServer(ServerAdapter):
def run(self, handler): # pragma: no cover
from cherrypy import wsgiserver
self.options['bind_addr'] = (self.host, self.port)
self.options['wsgi_app'] = handler
certfile = self.options.get('certfile')
if certfile:
del self.options['certfile']
keyfile = self.options.get('keyfile')
if keyfile:
del self.options['keyfile']
server = wsgiserver.CherryPyWSGIServer(**self.options)
if certfile:
server.ssl_certificate = certfile
if keyfile:
server.ssl_private_key = keyfile
try:
server.start()
finally:
server.stop()
class WaitressServer(ServerAdapter):
def run(self, handler):
from waitress import serve
serve(handler, host=self.host, port=self.port)
class PasteServer(ServerAdapter):
def run(self, handler): # pragma: no cover
from paste import httpserver
from paste.translogger import TransLogger
handler = TransLogger(handler, setup_console_handler=(not self.quiet))
httpserver.serve(handler, host=self.host, port=str(self.port),
**self.options)
class MeinheldServer(ServerAdapter):
def run(self, handler):
from meinheld import server
server.listen((self.host, self.port))
server.run(handler)
class FapwsServer(ServerAdapter):
""" Extremely fast webserver using libev. See http://www.fapws.org/ """
def run(self, handler): # pragma: no cover
import fapws._evwsgi as evwsgi
from fapws import base, config
port = self.port
if float(config.SERVER_IDENT[-2:]) > 0.4:
# fapws3 silently changed its API in 0.5
port = str(port)
evwsgi.start(self.host, port)
# fapws3 never releases the GIL. Complain upstream. I tried. No luck.
if 'BOTTLE_CHILD' in os.environ and not self.quiet:
_stderr("WARNING: Auto-reloading does not work with Fapws3.\n")
_stderr(" (Fapws3 breaks python thread support)\n")
evwsgi.set_base_module(base)
def app(environ, start_response):
environ['wsgi.multiprocess'] = False
return handler(environ, start_response)
evwsgi.wsgi_cb(('', app))
evwsgi.run()
class TornadoServer(ServerAdapter):
""" The super hyped asynchronous server by facebook. Untested. """
def run(self, handler): # pragma: no cover
import tornado.wsgi, tornado.httpserver, tornado.ioloop
container = tornado.wsgi.WSGIContainer(handler)
server = tornado.httpserver.HTTPServer(container)
server.listen(port=self.port,address=self.host)
tornado.ioloop.IOLoop.instance().start()
class AppEngineServer(ServerAdapter):
""" Adapter for Google App Engine. """
quiet = True
def run(self, handler):
from google.appengine.ext.webapp import util
# A main() function in the handler script enables 'App Caching'.
# Lets makes sure it is there. This _really_ improves performance.
module = sys.modules.get('__main__')
if module and not hasattr(module, 'main'):
module.main = lambda: util.run_wsgi_app(handler)
util.run_wsgi_app(handler)
class TwistedServer(ServerAdapter):
""" Untested. """
def run(self, handler):
from twisted.web import server, wsgi
from twisted.python.threadpool import ThreadPool
from twisted.internet import reactor
thread_pool = ThreadPool()
thread_pool.start()
reactor.addSystemEventTrigger('after', 'shutdown', thread_pool.stop)
factory = server.Site(wsgi.WSGIResource(reactor, thread_pool, handler))
reactor.listenTCP(self.port, factory, interface=self.host)
reactor.run()
class DieselServer(ServerAdapter):
""" Untested. """
def run(self, handler):
from diesel.protocols.wsgi import WSGIApplication
app = WSGIApplication(handler, port=self.port)
app.run()
class GeventServer(ServerAdapter):
""" Untested. Options:
* `fast` (default: False) uses libevent's http server, but has some
issues: No streaming, no pipelining, no SSL.
* See gevent.wsgi.WSGIServer() documentation for more options.
"""
def run(self, handler):
from gevent import wsgi, pywsgi, local
if not isinstance(threading.local(), local.local):
msg = "Bottle requires gevent.monkey.patch_all() (before import)"
raise RuntimeError(msg)
if not self.options.pop('fast', None): wsgi = pywsgi
self.options['log'] = None if self.quiet else 'default'
address = (self.host, self.port)
server = wsgi.WSGIServer(address, handler, **self.options)
if 'BOTTLE_CHILD' in os.environ:
import signal
signal.signal(signal.SIGINT, lambda s, f: server.stop())
server.serve_forever()
class GeventSocketIOServer(ServerAdapter):
def run(self,handler):
from socketio import server
address = (self.host, self.port)
server.SocketIOServer(address, handler, **self.options).serve_forever()
class GunicornServer(ServerAdapter):
""" Untested. See http://gunicorn.org/configure.html for options. """
def run(self, handler):
from gunicorn.app.base import Application
config = {'bind': "%s:%d" % (self.host, int(self.port))}
config.update(self.options)
class GunicornApplication(Application):
def init(self, parser, opts, args):
return config
def load(self):
return handler
GunicornApplication().run()
class EventletServer(ServerAdapter):
""" Untested """
def run(self, handler):
from eventlet import wsgi, listen
try:
wsgi.server(listen((self.host, self.port)), handler,
log_output=(not self.quiet))
except TypeError:
# Fallback, if we have old version of eventlet
wsgi.server(listen((self.host, self.port)), handler)
class RocketServer(ServerAdapter):
""" Untested. """
def run(self, handler):
from rocket import Rocket
server = Rocket((self.host, self.port), 'wsgi', { 'wsgi_app' : handler })
server.start()
class BjoernServer(ServerAdapter):
""" Fast server written in C: https://github.com/jonashaag/bjoern """
def run(self, handler):
from bjoern import run
run(handler, self.host, self.port)
class AutoServer(ServerAdapter):
""" Untested. """
adapters = [WaitressServer, PasteServer, TwistedServer, CherryPyServer, WSGIRefServer]
def run(self, handler):
for sa in self.adapters:
try:
return sa(self.host, self.port, **self.options).run(handler)
except ImportError:
pass
server_names = {
'cgi': CGIServer,
'flup': FlupFCGIServer,
'wsgiref': WSGIRefServer,
'waitress': WaitressServer,
'cherrypy': CherryPyServer,
'paste': PasteServer,
'fapws3': FapwsServer,
'tornado': TornadoServer,
'gae': AppEngineServer,
'twisted': TwistedServer,
'diesel': DieselServer,
'meinheld': MeinheldServer,
'gunicorn': GunicornServer,
'eventlet': EventletServer,
'gevent': GeventServer,
'geventSocketIO':GeventSocketIOServer,
'rocket': RocketServer,
'bjoern' : BjoernServer,
'auto': AutoServer,
}
###############################################################################
# Application Control ##########################################################
###############################################################################
def load(target, **namespace):
""" Import a module or fetch an object from a module.
* ``package.module`` returns `module` as a module object.
* ``pack.mod:name`` returns the module variable `name` from `pack.mod`.
* ``pack.mod:func()`` calls `pack.mod.func()` and returns the result.
The last form accepts not only function calls, but any type of
expression. Keyword arguments passed to this function are available as
local variables. Example: ``import_string('re:compile(x)', x='[a-z]')``
"""
module, target = target.split(":", 1) if ':' in target else (target, None)
if module not in sys.modules: __import__(module)
if not target: return sys.modules[module]
if target.isalnum(): return getattr(sys.modules[module], target)
package_name = module.split('.')[0]
namespace[package_name] = sys.modules[package_name]
return eval('%s.%s' % (module, target), namespace)
def load_app(target):
""" Load a bottle application from a module and make sure that the import
does not affect the current default application, but returns a separate
application object. See :func:`load` for the target parameter. """
global NORUN; NORUN, nr_old = True, NORUN
try:
tmp = default_app.push() # Create a new "default application"
rv = load(target) # Import the target module
return rv if callable(rv) else tmp
finally:
default_app.remove(tmp) # Remove the temporary added default application
NORUN = nr_old
_debug = debug
def run(app=None, server='wsgiref', host='127.0.0.1', port=8080,
interval=1, reloader=False, quiet=False, plugins=None,
debug=None, **kargs):
""" Start a server instance. This method blocks until the server terminates.
:param app: WSGI application or target string supported by
:func:`load_app`. (default: :func:`default_app`)
:param server: Server adapter to use. See :data:`server_names` keys
for valid names or pass a :class:`ServerAdapter` subclass.
(default: `wsgiref`)
:param host: Server address to bind to. Pass ``0.0.0.0`` to listens on
all interfaces including the external one. (default: 127.0.0.1)
:param port: Server port to bind to. Values below 1024 require root
privileges. (default: 8080)
:param reloader: Start auto-reloading server? (default: False)
:param interval: Auto-reloader interval in seconds (default: 1)
:param quiet: Suppress output to stdout and stderr? (default: False)
:param options: Options passed to the server adapter.
"""
if NORUN: return
if reloader and not os.environ.get('BOTTLE_CHILD'):
try:
lockfile = None
fd, lockfile = tempfile.mkstemp(prefix='bottle.', suffix='.lock')
os.close(fd) # We only need this file to exist. We never write to it
while os.path.exists(lockfile):
args = [sys.executable] + sys.argv
environ = os.environ.copy()
environ['BOTTLE_CHILD'] = 'true'
environ['BOTTLE_LOCKFILE'] = lockfile
p = subprocess.Popen(args, env=environ)
while p.poll() is None: # Busy wait...
os.utime(lockfile, None) # I am alive!
time.sleep(interval)
if p.poll() != 3:
if os.path.exists(lockfile): os.unlink(lockfile)
sys.exit(p.poll())
except KeyboardInterrupt:
pass
finally:
if os.path.exists(lockfile):
os.unlink(lockfile)
return
try:
if debug is not None: _debug(debug)
app = app or default_app()
if isinstance(app, basestring):
app = load_app(app)
if not callable(app):
raise ValueError("Application is not callable: %r" % app)
for plugin in plugins or []:
app.install(plugin)
if server in server_names:
server = server_names.get(server)
if isinstance(server, basestring):
server = load(server)
if isinstance(server, type):
server = server(host=host, port=port, **kargs)
if not isinstance(server, ServerAdapter):
raise ValueError("Unknown or unsupported server: %r" % server)
server.quiet = server.quiet or quiet
if not server.quiet:
_stderr("Bottle v%s server starting up (using %s)...\n" % (__version__, repr(server)))
_stderr("Listening on http://%s:%d/\n" % (server.host, server.port))
_stderr("Hit Ctrl-C to quit.\n\n")
if reloader:
lockfile = os.environ.get('BOTTLE_LOCKFILE')
bgcheck = FileCheckerThread(lockfile, interval)
with bgcheck:
server.run(app)
if bgcheck.status == 'reload':
sys.exit(3)
else:
server.run(app)
except KeyboardInterrupt:
pass
except (SystemExit, MemoryError):
raise
except:
if not reloader: raise
if not getattr(server, 'quiet', quiet):
print_exc()
time.sleep(interval)
sys.exit(3)
class FileCheckerThread(threading.Thread):
''' Interrupt main-thread as soon as a changed module file is detected,
the lockfile gets deleted or gets to old. '''
def __init__(self, lockfile, interval):
threading.Thread.__init__(self)
self.lockfile, self.interval = lockfile, interval
#: Is one of 'reload', 'error' or 'exit'
self.status = None
def run(self):
exists = os.path.exists
mtime = lambda path: os.stat(path).st_mtime
files = dict()
for module in list(sys.modules.values()):
path = getattr(module, '__file__', '')
if path[-4:] in ('.pyo', '.pyc'): path = path[:-1]
if path and exists(path): files[path] = mtime(path)
while not self.status:
if not exists(self.lockfile)\
or mtime(self.lockfile) < time.time() - self.interval - 5:
self.status = 'error'
thread.interrupt_main()
for path, lmtime in list(files.items()):
if not exists(path) or mtime(path) > lmtime:
self.status = 'reload'
thread.interrupt_main()
break
time.sleep(self.interval)
def __enter__(self):
self.start()
def __exit__(self, exc_type, exc_val, exc_tb):
if not self.status: self.status = 'exit' # silent exit
self.join()
return exc_type is not None and issubclass(exc_type, KeyboardInterrupt)
###############################################################################
# Template Adapters ############################################################
###############################################################################
class TemplateError(HTTPError):
def __init__(self, message):
HTTPError.__init__(self, 500, message)
class BaseTemplate(object):
""" Base class and minimal API for template adapters """
extensions = ['tpl','html','thtml','stpl']
settings = {} #used in prepare()
defaults = {} #used in render()
def __init__(self, source=None, name=None, lookup=[], encoding='utf8', **settings):
""" Create a new template.
If the source parameter (str or buffer) is missing, the name argument
is used to guess a template filename. Subclasses can assume that
self.source and/or self.filename are set. Both are strings.
The lookup, encoding and settings parameters are stored as instance
variables.
The lookup parameter stores a list containing directory paths.
The encoding parameter should be used to decode byte strings or files.
The settings parameter contains a dict for engine-specific settings.
"""
self.name = name
self.source = source.read() if hasattr(source, 'read') else source
self.filename = source.filename if hasattr(source, 'filename') else None
self.lookup = [os.path.abspath(x) for x in lookup]
self.encoding = encoding
self.settings = self.settings.copy() # Copy from class variable
self.settings.update(settings) # Apply
if not self.source and self.name:
self.filename = self.search(self.name, self.lookup)
if not self.filename:
raise TemplateError('Template %s not found.' % repr(name))
if not self.source and not self.filename:
raise TemplateError('No template specified.')
self.prepare(**self.settings)
@classmethod
def search(cls, name, lookup=[]):
""" Search name in all directories specified in lookup.
First without, then with common extensions. Return first hit. """
if not lookup:
depr('The template lookup path list should not be empty.') #0.12
lookup = ['.']
if os.path.isabs(name) and os.path.isfile(name):
depr('Absolute template path names are deprecated.') #0.12
return os.path.abspath(name)
for spath in lookup:
spath = os.path.abspath(spath) + os.sep
fname = os.path.abspath(os.path.join(spath, name))
if not fname.startswith(spath): continue
if os.path.isfile(fname): return fname
for ext in cls.extensions:
if os.path.isfile('%s.%s' % (fname, ext)):
return '%s.%s' % (fname, ext)
@classmethod
def global_config(cls, key, *args):
''' This reads or sets the global settings stored in class.settings. '''
if args:
cls.settings = cls.settings.copy() # Make settings local to class
cls.settings[key] = args[0]
else:
return cls.settings[key]
def prepare(self, **options):
""" Run preparations (parsing, caching, ...).
It should be possible to call this again to refresh a template or to
update settings.
"""
raise NotImplementedError
def render(self, *args, **kwargs):
""" Render the template with the specified local variables and return
a single byte or unicode string. If it is a byte string, the encoding
must match self.encoding. This method must be thread-safe!
Local variables may be provided in dictionaries (args)
or directly, as keywords (kwargs).
"""
raise NotImplementedError
class MakoTemplate(BaseTemplate):
def prepare(self, **options):
from mako.template import Template
from mako.lookup import TemplateLookup
options.update({'input_encoding':self.encoding})
options.setdefault('format_exceptions', bool(DEBUG))
lookup = TemplateLookup(directories=self.lookup, **options)
if self.source:
self.tpl = Template(self.source, lookup=lookup, **options)
else:
self.tpl = Template(uri=self.name, filename=self.filename, lookup=lookup, **options)
def render(self, *args, **kwargs):
for dictarg in args: kwargs.update(dictarg)
_defaults = self.defaults.copy()
_defaults.update(kwargs)
return self.tpl.render(**_defaults)
class CheetahTemplate(BaseTemplate):
def prepare(self, **options):
from Cheetah.Template import Template
self.context = threading.local()
self.context.vars = {}
options['searchList'] = [self.context.vars]
if self.source:
self.tpl = Template(source=self.source, **options)
else:
self.tpl = Template(file=self.filename, **options)
def render(self, *args, **kwargs):
for dictarg in args: kwargs.update(dictarg)
self.context.vars.update(self.defaults)
self.context.vars.update(kwargs)
out = str(self.tpl)
self.context.vars.clear()
return out
class Jinja2Template(BaseTemplate):
def prepare(self, filters=None, tests=None, globals={}, **kwargs):
from jinja2 import Environment, FunctionLoader
if 'prefix' in kwargs: # TODO: to be removed after a while
raise RuntimeError('The keyword argument `prefix` has been removed. '
'Use the full jinja2 environment name line_statement_prefix instead.')
self.env = Environment(loader=FunctionLoader(self.loader), **kwargs)
if filters: self.env.filters.update(filters)
if tests: self.env.tests.update(tests)
if globals: self.env.globals.update(globals)
if self.source:
self.tpl = self.env.from_string(self.source)
else:
self.tpl = self.env.get_template(self.filename)
def render(self, *args, **kwargs):
for dictarg in args: kwargs.update(dictarg)
_defaults = self.defaults.copy()
_defaults.update(kwargs)
return self.tpl.render(**_defaults)
def loader(self, name):
fname = self.search(name, self.lookup)
if not fname: return
with open(fname, "rb") as f:
return f.read().decode(self.encoding)
class SimpleTemplate(BaseTemplate):
def prepare(self, escape_func=html_escape, noescape=False, syntax=None, **ka):
self.cache = {}
enc = self.encoding
self._str = lambda x: touni(x, enc)
self._escape = lambda x: escape_func(touni(x, enc))
self.syntax = syntax
if noescape:
self._str, self._escape = self._escape, self._str
@cached_property
def co(self):
return compile(self.code, self.filename or '<string>', 'exec')
@cached_property
def code(self):
source = self.source
if not source:
with open(self.filename, 'rb') as f:
source = f.read()
try:
source, encoding = touni(source), 'utf8'
except UnicodeError:
depr('Template encodings other than utf8 are no longer supported.') #0.11
source, encoding = touni(source, 'latin1'), 'latin1'
parser = StplParser(source, encoding=encoding, syntax=self.syntax)
code = parser.translate()
self.encoding = parser.encoding
return code
def _rebase(self, _env, _name=None, **kwargs):
if _name is None:
depr('Rebase function called without arguments.'
' You were probably looking for {{base}}?', True) #0.12
_env['_rebase'] = (_name, kwargs)
def _include(self, _env, _name=None, **kwargs):
if _name is None:
depr('Rebase function called without arguments.'
' You were probably looking for {{base}}?', True) #0.12
env = _env.copy()
env.update(kwargs)
if _name not in self.cache:
self.cache[_name] = self.__class__(name=_name, lookup=self.lookup)
return self.cache[_name].execute(env['_stdout'], env)
def execute(self, _stdout, kwargs):
env = self.defaults.copy()
env.update(kwargs)
env.update({'_stdout': _stdout, '_printlist': _stdout.extend,
'include': functools.partial(self._include, env),
'rebase': functools.partial(self._rebase, env), '_rebase': None,
'_str': self._str, '_escape': self._escape, 'get': env.get,
'setdefault': env.setdefault, 'defined': env.__contains__ })
eval(self.co, env)
if env.get('_rebase'):
subtpl, rargs = env.pop('_rebase')
rargs['base'] = ''.join(_stdout) #copy stdout
del _stdout[:] # clear stdout
return self._include(env, subtpl, **rargs)
return env
def render(self, *args, **kwargs):
""" Render the template using keyword arguments as local variables. """
env = {}; stdout = []
for dictarg in args: env.update(dictarg)
env.update(kwargs)
self.execute(stdout, env)
return ''.join(stdout)
class StplSyntaxError(TemplateError): pass
class StplParser(object):
''' Parser for stpl templates. '''
_re_cache = {} #: Cache for compiled re patterns
# This huge pile of voodoo magic splits python code into 8 different tokens.
# 1: All kinds of python strings (trust me, it works)
_re_tok = '((?m)[urbURB]?(?:\'\'(?!\')|""(?!")|\'{6}|"{6}' \
'|\'(?:[^\\\\\']|\\\\.)+?\'|"(?:[^\\\\"]|\\\\.)+?"' \
'|\'{3}(?:[^\\\\]|\\\\.|\\n)+?\'{3}' \
'|"{3}(?:[^\\\\]|\\\\.|\\n)+?"{3}))'
_re_inl = _re_tok.replace('|\\n','') # We re-use this string pattern later
# 2: Comments (until end of line, but not the newline itself)
_re_tok += '|(#.*)'
# 3,4: Open and close grouping tokens
_re_tok += '|([\[\{\(])'
_re_tok += '|([\]\}\)])'
# 5,6: Keywords that start or continue a python block (only start of line)
_re_tok += '|^([ \\t]*(?:if|for|while|with|try|def|class)\\b)' \
'|^([ \\t]*(?:elif|else|except|finally)\\b)'
# 7: Our special 'end' keyword (but only if it stands alone)
_re_tok += '|((?:^|;)[ \\t]*end[ \\t]*(?=(?:%(block_close)s[ \\t]*)?\\r?$|;|#))'
# 8: A customizable end-of-code-block template token (only end of line)
_re_tok += '|(%(block_close)s[ \\t]*(?=$))'
# 9: And finally, a single newline. The 10th token is 'everything else'
_re_tok += '|(\\r?\\n)'
# Match the start tokens of code areas in a template
_re_split = '(?m)^[ \t]*(\\\\?)((%(line_start)s)|(%(block_start)s))(%%?)'
# Match inline statements (may contain python strings)
_re_inl = '%%(inline_start)s((?:%s|[^\'"\n]*?)+)%%(inline_end)s' % _re_inl
default_syntax = '<% %> % {{ }}'
def __init__(self, source, syntax=None, encoding='utf8'):
self.source, self.encoding = touni(source, encoding), encoding
self.set_syntax(syntax or self.default_syntax)
self.code_buffer, self.text_buffer = [], []
self.lineno, self.offset = 1, 0
self.indent, self.indent_mod = 0, 0
self.paren_depth = 0
def get_syntax(self):
''' Tokens as a space separated string (default: <% %> % {{ }}) '''
return self._syntax
def set_syntax(self, syntax):
self._syntax = syntax
self._tokens = syntax.split()
if not syntax in self._re_cache:
names = 'block_start block_close line_start inline_start inline_end'
etokens = map(re.escape, self._tokens)
pattern_vars = dict(zip(names.split(), etokens))
patterns = (self._re_split, self._re_tok, self._re_inl)
patterns = [re.compile(p%pattern_vars) for p in patterns]
self._re_cache[syntax] = patterns
self.re_split, self.re_tok, self.re_inl = self._re_cache[syntax]
syntax = property(get_syntax, set_syntax)
def translate(self):
if self.offset: raise RuntimeError('Parser is a one time instance.')
while True:
m = self.re_split.search(self.source[self.offset:])
if m:
text = self.source[self.offset:self.offset+m.start()]
self.text_buffer.append(text)
self.offset += m.end()
if m.group(1): # New escape syntax
line, sep, _ = self.source[self.offset:].partition('\n')
self.text_buffer.append(m.group(2)+m.group(5)+line+sep)
self.offset += len(line+sep)+1
continue
elif m.group(5): # Old escape syntax
depr('Escape code lines with a backslash.') #0.12
line, sep, _ = self.source[self.offset:].partition('\n')
self.text_buffer.append(m.group(2)+line+sep)
self.offset += len(line+sep)+1
continue
self.flush_text()
self.read_code(multiline=bool(m.group(4)))
else: break
self.text_buffer.append(self.source[self.offset:])
self.flush_text()
return ''.join(self.code_buffer)
def read_code(self, multiline):
code_line, comment = '', ''
while True:
m = self.re_tok.search(self.source[self.offset:])
if not m:
code_line += self.source[self.offset:]
self.offset = len(self.source)
self.write_code(code_line.strip(), comment)
return
code_line += self.source[self.offset:self.offset+m.start()]
self.offset += m.end()
_str, _com, _po, _pc, _blk1, _blk2, _end, _cend, _nl = m.groups()
if (code_line or self.paren_depth > 0) and (_blk1 or _blk2): # a if b else c
code_line += _blk1 or _blk2
continue
if _str: # Python string
code_line += _str
elif _com: # Python comment (up to EOL)
comment = _com
if multiline and _com.strip().endswith(self._tokens[1]):
multiline = False # Allow end-of-block in comments
elif _po: # open parenthesis
self.paren_depth += 1
code_line += _po
elif _pc: # close parenthesis
if self.paren_depth > 0:
# we could check for matching parentheses here, but it's
# easier to leave that to python - just check counts
self.paren_depth -= 1
code_line += _pc
elif _blk1: # Start-block keyword (if/for/while/def/try/...)
code_line, self.indent_mod = _blk1, -1
self.indent += 1
elif _blk2: # Continue-block keyword (else/elif/except/...)
code_line, self.indent_mod = _blk2, -1
elif _end: # The non-standard 'end'-keyword (ends a block)
self.indent -= 1
elif _cend: # The end-code-block template token (usually '%>')
if multiline: multiline = False
else: code_line += _cend
else: # \n
self.write_code(code_line.strip(), comment)
self.lineno += 1
code_line, comment, self.indent_mod = '', '', 0
if not multiline:
break
def flush_text(self):
text = ''.join(self.text_buffer)
del self.text_buffer[:]
if not text: return
parts, pos, nl = [], 0, '\\\n'+' '*self.indent
for m in self.re_inl.finditer(text):
prefix, pos = text[pos:m.start()], m.end()
if prefix:
parts.append(nl.join(map(repr, prefix.splitlines(True))))
if prefix.endswith('\n'): parts[-1] += nl
parts.append(self.process_inline(m.group(1).strip()))
if pos < len(text):
prefix = text[pos:]
lines = prefix.splitlines(True)
if lines[-1].endswith('\\\\\n'): lines[-1] = lines[-1][:-3]
elif lines[-1].endswith('\\\\\r\n'): lines[-1] = lines[-1][:-4]
parts.append(nl.join(map(repr, lines)))
code = '_printlist((%s,))' % ', '.join(parts)
self.lineno += code.count('\n')+1
self.write_code(code)
def process_inline(self, chunk):
if chunk[0] == '!': return '_str(%s)' % chunk[1:]
return '_escape(%s)' % chunk
def write_code(self, line, comment=''):
line, comment = self.fix_backward_compatibility(line, comment)
code = ' ' * (self.indent+self.indent_mod)
code += line.lstrip() + comment + '\n'
self.code_buffer.append(code)
def fix_backward_compatibility(self, line, comment):
parts = line.strip().split(None, 2)
if parts and parts[0] in ('include', 'rebase'):
depr('The include and rebase keywords are functions now.') #0.12
if len(parts) == 1: return "_printlist([base])", comment
elif len(parts) == 2: return "_=%s(%r)" % tuple(parts), comment
else: return "_=%s(%r, %s)" % tuple(parts), comment
if self.lineno <= 2 and not line.strip() and 'coding' in comment:
m = re.match(r"#.*coding[:=]\s*([-\w.]+)", comment)
if m:
depr('PEP263 encoding strings in templates are deprecated.') #0.12
enc = m.group(1)
self.source = self.source.encode(self.encoding).decode(enc)
self.encoding = enc
return line, comment.replace('coding','coding*')
return line, comment
def template(*args, **kwargs):
'''
Get a rendered template as a string iterator.
You can use a name, a filename or a template string as first parameter.
Template rendering arguments can be passed as dictionaries
or directly (as keyword arguments).
'''
tpl = args[0] if args else None
adapter = kwargs.pop('template_adapter', SimpleTemplate)
lookup = kwargs.pop('template_lookup', TEMPLATE_PATH)
tplid = (id(lookup), tpl)
if tplid not in TEMPLATES or DEBUG:
settings = kwargs.pop('template_settings', {})
if isinstance(tpl, adapter):
TEMPLATES[tplid] = tpl
if settings: TEMPLATES[tplid].prepare(**settings)
elif "\n" in tpl or "{" in tpl or "%" in tpl or '$' in tpl:
TEMPLATES[tplid] = adapter(source=tpl, lookup=lookup, **settings)
else:
TEMPLATES[tplid] = adapter(name=tpl, lookup=lookup, **settings)
if not TEMPLATES[tplid]:
abort(500, 'Template (%s) not found' % tpl)
for dictarg in args[1:]: kwargs.update(dictarg)
return TEMPLATES[tplid].render(kwargs)
mako_template = functools.partial(template, template_adapter=MakoTemplate)
cheetah_template = functools.partial(template, template_adapter=CheetahTemplate)
jinja2_template = functools.partial(template, template_adapter=Jinja2Template)
def view(tpl_name, **defaults):
''' Decorator: renders a template for a handler.
The handler can control its behavior like that:
- return a dict of template vars to fill out the template
- return something other than a dict and the view decorator will not
process the template, but return the handler result as is.
This includes returning a HTTPResponse(dict) to get,
for instance, JSON with autojson or other castfilters.
'''
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
if isinstance(result, (dict, DictMixin)):
tplvars = defaults.copy()
tplvars.update(result)
return template(tpl_name, **tplvars)
elif result is None:
return template(tpl_name, defaults)
return result
return wrapper
return decorator
mako_view = functools.partial(view, template_adapter=MakoTemplate)
cheetah_view = functools.partial(view, template_adapter=CheetahTemplate)
jinja2_view = functools.partial(view, template_adapter=Jinja2Template)
###############################################################################
# Constants and Globals ########################################################
###############################################################################
TEMPLATE_PATH = ['./', './views/']
TEMPLATES = {}
DEBUG = False
NORUN = False # If set, run() does nothing. Used by load_app()
#: A dict to map HTTP status codes (e.g. 404) to phrases (e.g. 'Not Found')
HTTP_CODES = httplib.responses
HTTP_CODES[418] = "I'm a teapot" # RFC 2324
HTTP_CODES[422] = "Unprocessable Entity" # RFC 4918
HTTP_CODES[428] = "Precondition Required"
HTTP_CODES[429] = "Too Many Requests"
HTTP_CODES[431] = "Request Header Fields Too Large"
HTTP_CODES[511] = "Network Authentication Required"
_HTTP_STATUS_LINES = dict((k, '%d %s'%(k,v)) for (k,v) in HTTP_CODES.items())
#: The default template used for error pages. Override with @error()
ERROR_PAGE_TEMPLATE = """
%%try:
%%from %s import DEBUG, HTTP_CODES, request, touni
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Error: {{e.status}}</title>
<style type="text/css">
html {background-color: #eee; font-family: sans;}
body {background-color: #fff; border: 1px solid #ddd;
padding: 15px; margin: 15px;}
pre {background-color: #eee; border: 1px solid #ddd; padding: 5px;}
</style>
</head>
<body>
<h1>Error: {{e.status}}</h1>
<p>Sorry, the requested URL <tt>{{repr(request.url)}}</tt>
caused an error:</p>
<pre>{{e.body}}</pre>
%%if DEBUG and e.exception:
<h2>Exception:</h2>
<pre>{{repr(e.exception)}}</pre>
%%end
%%if DEBUG and e.traceback:
<h2>Traceback:</h2>
<pre>{{e.traceback}}</pre>
%%end
</body>
</html>
%%except ImportError:
<b>ImportError:</b> Could not generate the error page. Please add bottle to
the import path.
%%end
""" % __name__
#: A thread-safe instance of :class:`LocalRequest`. If accessed from within a
#: request callback, this instance always refers to the *current* request
#: (even on a multithreaded server).
request = LocalRequest()
#: A thread-safe instance of :class:`LocalResponse`. It is used to change the
#: HTTP response for the *current* request.
response = LocalResponse()
#: A thread-safe namespace. Not used by Bottle.
local = threading.local()
# Initialize app stack (create first empty Bottle app)
# BC: 0.6.4 and needed for run()
app = default_app = AppStack()
app.push()
#: A virtual package that redirects import statements.
#: Example: ``import bottle.ext.sqlite`` actually imports `bottle_sqlite`.
ext = _ImportRedirect('bottle.ext' if __name__ == '__main__' else __name__+".ext", 'bottle_%s').module
if __name__ == '__main__':
opt, args, parser = _cmd_options, _cmd_args, _cmd_parser
if opt.version:
_stdout('Bottle %s\n'%__version__)
sys.exit(0)
if not args:
parser.print_help()
_stderr('\nError: No application specified.\n')
sys.exit(1)
sys.path.insert(0, '.')
sys.modules.setdefault('bottle', sys.modules['__main__'])
host, port = (opt.bind or 'localhost'), 8080
if ':' in host and host.rfind(']') < host.rfind(':'):
host, port = host.rsplit(':', 1)
host = host.strip('[]')
run(args[0], host=host, port=int(port), server=opt.server,
reloader=opt.reload, plugins=opt.plugin, debug=opt.debug)
# THE END
|
Added changelog.txt version [b2b4236d65].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# CHANGELOG OF GRAMMALECTE
## 0.0
Alpha version, similar to Lightproof (a grammar checker for LibreOffice)
## 0.1
Lexical analysis commands with disambiguation by pattern exclusion
Optional suggestions
Back reference groups within error messages
## 0.2
Bi-passes engine
Pass 1: paragraph by paragraph
Pass 2: sentence by sentence
Text preprocessor between the two passes
Error positioning (by group selection)
## 0.3
Multi-passes engine
Dictionary switcher
Text formatter
Lexicographer
French Conjugueur
## 0.4
Suggestion mechanisms
Simplier user options writing
Application Launcher
Author field edition
## 0.5
Grammalecte is an autonomous package, free from Hunspell and LibreOffice
Indexable binary dictionary (DAWG-FSA) generator
Disambiguator
Multi-actions rules (bi-passes engine again)
Simplier options for word boundaries
Unit tests
|
Added cli.py version [844acbe744].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
#!python3
import sys
import os.path
import argparse
import json
import grammalecte.fr as gce
import grammalecte.fr.lexicographe as lxg
import grammalecte.fr.textformatter as tf
import grammalecte.text as txt
import grammalecte.tokenizer as tkz
from grammalecte.echo import echo
_EXAMPLE = "Quoi ? Racontes ! Racontes-moi ! Bon sangg, parles ! Oui. Il y a des menteur partout. " \
"Je suit sidéré par la brutales arrogance de cette homme-là. Quelle salopard ! Un escrocs de la pire espece. " \
"Quant sera t’il châtiés pour ses mensonge ? Merde ! J’en aie marre."
_HELP = """
/help /h show this text
?word1 [word2] ... words analysis
/lopt /lo list options
/+ option1 [option2] ... activate grammar checking options
/- option1 [option2] ... deactivate grammar checking options
/lrules [pattern] /lr list rules
/--rule1 [rule2] ... deactivate grammar checking rule
/++rule1 [rule2] ... reactivate grammar checking rule
/quit /q exit
"""
def _getText (sInputText):
sText = input(sInputText)
if sText == "*":
return _EXAMPLE
if sys.platform == "win32":
# Apparently, the console transforms «’» in «'».
# So we reverse it to avoid many useless warnings.
sText = sText.replace("'", "’")
return sText
def _getErrors (sText, oTokenizer, oDict, bContext=False, bDebug=False):
"returns a tuple: (grammar errors, spelling errors)"
aGrammErrs = gce.parse(sText, "FR", bDebug=bDebug, bContext=bContext)
aSpellErrs = []
for dToken in oTokenizer.genTokens(sText):
if dToken['sType'] == "WORD" and not oDict.isValidToken(dToken['sValue']):
aSpellErrs.append(dToken)
return aGrammErrs, aSpellErrs
def generateText (sText, oTokenizer, oDict, bDebug=False, bEmptyIfNoErrors=False, nWidth=100):
aGrammErrs, aSpellErrs = _getErrors(sText, oTokenizer, oDict, False, bDebug)
if bEmptyIfNoErrors and not aGrammErrs and not aSpellErrs:
return ""
return txt.generateParagraph(sText, aGrammErrs, aSpellErrs, nWidth)
def generateJSON (iIndex, sText, oTokenizer, oDict, bContext=False, bDebug=False, bEmptyIfNoErrors=False, lLineSet=None, bReturnText=False):
aGrammErrs, aSpellErrs = _getErrors(sText, oTokenizer, oDict, bContext, bDebug)
aGrammErrs = list(aGrammErrs)
if bEmptyIfNoErrors and not aGrammErrs and not aSpellErrs:
return ""
if lLineSet:
aGrammErrs, aSpellErrs = txt.convertToXY(aGrammErrs, aSpellErrs, lLineSet)
return json.dumps({ "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False)
if bReturnText:
return json.dumps({ "iParagraph": iIndex, "sText": sText, "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False)
return json.dumps({ "iParagraph": iIndex, "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False)
def readfile (spf):
"generator: returns file line by line"
if os.path.isfile(spf):
with open(spf, "r", encoding="utf-8") as hSrc:
for sLine in hSrc:
yield sLine
else:
print("# Error: file not found.")
def readfileAndConcatLines (spf):
"generator: returns text by list of lines not separated by an empty line"
lLine = []
for i, sLine in enumerate(readfile(spf), 1):
if sLine.strip():
lLine.append((i, sLine))
elif lLine:
yield lLine
lLine = []
if lLine:
yield lLine
def output (sText, hDst=None):
if not hDst:
echo(sText, end="")
else:
hDst.write(sText)
def main ():
xParser = argparse.ArgumentParser()
xParser.add_argument("-f", "--file", help="parse file (UTF-8 required!) [on Windows, -f is similar to -ff]", type=str)
xParser.add_argument("-ff", "--file_to_file", help="parse file (UTF-8 required!) and create a result file (*.res.txt)", type=str)
xParser.add_argument("-owe", "--only_when_errors", help="display results only when there are errors", action="store_true")
xParser.add_argument("-j", "--json", help="generate list of errors in JSON (only with option --file or --file_to_file)", action="store_true")
xParser.add_argument("-cl", "--concat_lines", help="concatenate lines not separated by an empty paragraph (only with option --file or --file_to_file)", action="store_true")
xParser.add_argument("-tf", "--textformatter", help="auto-format text according to typographical rules (unavailable with option --concat_lines)", action="store_true")
xParser.add_argument("-tfo", "--textformatteronly", help="auto-format text and disable grammar checking (only with option --file or --file_to_file)", action="store_true")
xParser.add_argument("-ctx", "--context", help="return errors with context (only with option --json)", action="store_true")
xParser.add_argument("-w", "--width", help="width in characters (40 < width < 200; default: 100)", type=int, choices=range(40,201,10), default=100)
xParser.add_argument("-lo", "--list_options", help="list options", action="store_true")
xParser.add_argument("-lr", "--list_rules", nargs="?", help="list rules [regex pattern as filter]", const="*")
xParser.add_argument("-on", "--opt_on", nargs="+", help="activate options")
xParser.add_argument("-off", "--opt_off", nargs="+", help="deactivate options")
xParser.add_argument("-roff", "--rule_off", nargs="+", help="deactivate rules")
xParser.add_argument("-d", "--debug", help="debugging mode (only in interactive mode)", action="store_true")
xArgs = xParser.parse_args()
gce.load()
if not xArgs.json:
echo("Grammalecte v{}".format(gce.version))
oDict = gce.getDictionary()
oTokenizer = tkz.Tokenizer("fr")
oLexGraphe = lxg.Lexicographe(oDict)
if xArgs.textformatter or xArgs.textformatteronly:
oTF = tf.TextFormatter()
if xArgs.list_options or xArgs.list_rules:
if xArgs.list_options:
gce.displayOptions("fr")
if xArgs.list_rules:
gce.displayRules(None if xArgs.list_rules == "*" else xArgs.list_rules)
exit()
if not xArgs.json:
xArgs.context = False
gce.setOptions({"html": True, "latex": True})
if xArgs.opt_on:
gce.setOptions({ opt:True for opt in xArgs.opt_on if opt in gce.getOptions() })
if xArgs.opt_off:
gce.setOptions({ opt:False for opt in xArgs.opt_off if opt in gce.getOptions() })
if xArgs.rule_off:
for sRule in xArgs.rule_off:
gce.ignoreRule(sRule)
sFile = xArgs.file or xArgs.file_to_file
if sFile:
# file processing
hDst = open(sFile[:sFile.rfind(".")]+".res.txt", "w", encoding="utf-8", newline="\n") if xArgs.file_to_file or sys.platform == "win32" else None
bComma = False
if xArgs.json:
output('{ "grammalecte": "'+gce.version+'", "lang": "'+gce.lang+'", "data" : [\n', hDst)
if not xArgs.concat_lines:
# pas de concaténation des lignes
for i, sText in enumerate(readfile(sFile), 1):
if xArgs.textformatter or xArgs.textformatteronly:
sText = oTF.formatText(sText)
if xArgs.textformatteronly:
output(sText, hDst)
else:
if xArgs.json:
sText = generateJSON(i, sText, oTokenizer, oDict, bContext=xArgs.context, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, bReturnText=xArgs.textformatter)
else:
sText = generateText(sText, oTokenizer, oDict, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, nWidth=xArgs.width)
if sText:
if xArgs.json and bComma:
output(",\n", hDst)
output(sText, hDst)
bComma = True
if hDst:
echo("§ %d\r" % i, end="", flush=True)
else:
# concaténation des lignes non séparées par une ligne vide
for i, lLine in enumerate(readfileAndConcatLines(sFile), 1):
sText, lLineSet = txt.createParagraphWithLines(lLine)
if xArgs.json:
sText = generateJSON(i, sText, oTokenizer, oDict, bContext=xArgs.context, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, lLineSet=lLineSet)
else:
sText = generateText(sText, oTokenizer, oDict, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, nWidth=xArgs.width)
if sText:
if xArgs.json and bComma:
output(",\n", hDst)
output(sText, hDst)
bComma = True
if hDst:
echo("§ %d\r" % i, end="", flush=True)
if xArgs.json:
output("\n]}\n", hDst)
else:
# pseudo-console
sInputText = "\n~==========~ Enter your text [/h /q] ~==========~\n"
sText = _getText(sInputText)
while True:
if sText.startswith("?"):
for sWord in sText[1:].strip().split():
if sWord:
echo("* {}".format(sWord))
for sMorph in oDict.getMorph(sWord):
echo(" {:<32} {}".format(sMorph, oLexGraphe.formatTags(sMorph)))
elif sText.startswith("/+ "):
gce.setOptions({ opt:True for opt in sText[3:].strip().split() if opt in gce.getOptions() })
echo("done")
elif sText.startswith("/- "):
gce.setOptions({ opt:False for opt in sText[3:].strip().split() if opt in gce.getOptions() })
echo("done")
elif sText.startswith("/-- "):
for sRule in sText[3:].strip().split():
gce.ignoreRule(sRule)
echo("done")
elif sText.startswith("/++ "):
for sRule in sText[3:].strip().split():
gce.reactivateRule(sRule)
echo("done")
elif sText == "/debug" or sText == "/d":
xArgs.debug = not(xArgs.debug)
echo("debug mode on" if xArgs.debug else "debug mode off")
elif sText == "/textformatter" or sText == "/tf":
xArgs.textformatter = not(xArgs.textformatter)
echo("textformatter on" if xArgs.debug else "textformatter off")
elif sText == "/help" or sText == "/h":
echo(_HELP)
elif sText == "/lopt" or sText == "/l":
gce.displayOptions("fr")
elif sText.startswith("/lr"):
sText = sText.strip()
sFilter = sText[sText.find(" "):].strip() if sText != "/lr" and sText != "/rules" else None
gce.displayRules(sFilter)
elif sText == "/quit" or sText == "/q":
break
elif sText.startswith("/rl"):
# reload (todo)
pass
else:
for sParagraph in txt.getParagraph(sText):
if xArgs.textformatter:
sText = oTF.formatText(sText)
sRes = generateText(sText, oTokenizer, oDict, bDebug=xArgs.debug, bEmptyIfNoErrors=xArgs.only_when_errors, nWidth=xArgs.width)
if sRes:
echo("\n" + sRes)
else:
echo("\nNo error found.")
sText = _getText(sInputText)
if __name__ == '__main__':
main()
|
Added compile_rules.py version [7ac4ebe558].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 |
import re
import sys
import traceback
import copy
import json
from distutils import file_util
DEF = {}
FUNCTIONS = []
JSREGEXES = {}
WORDLIMITLEFT = r"(?<![\w.,–-])" # r"(?<![-.,—])\b" seems slower
WORDLIMITRIGHT = r"(?![\w–-])" # r"\b(?!-—)" seems slower
def prepareFunction (s):
s = s.replace("__also__", "bCondMemo")
s = s.replace("__else__", "not bCondMemo")
s = re.sub(r"(select|exclude)[(][\\](\d+)", '\\1(dDA, m.start(\\2), m.group(\\2)', s)
s = re.sub(r"define[(][\\](\d+)", 'define(dDA, m.start(\\1)', s)
s = re.sub(r"(morph|morphex|displayInfo)[(][\\](\d+)", '\\1((m.start(\\2), m.group(\\2))', s)
s = re.sub(r"(morph|morphex|displayInfo)[(]", '\\1(dDA, ', s)
s = re.sub(r"(sugg\w+|switch\w+)\(@", '\\1(m.group(i[4])', s)
s = re.sub(r"word\(\s*1\b", 'nextword1(s, m.end()', s) # word(1)
s = re.sub(r"word\(\s*-1\b", 'prevword1(s, m.start()', s) # word(-1)
s = re.sub(r"word\(\s*(\d)", 'nextword(s, m.end(), \\1', s) # word(n)
s = re.sub(r"word\(\s*-(\d)", 'prevword(s, m.start(), \\1', s) # word(-n)
s = re.sub(r"before\(\s*", 'look(s[:m.start()], ', s) # before(s)
s = re.sub(r"after\(\s*", 'look(s[m.end():], ', s) # after(s)
s = re.sub(r"textarea\(\s*", 'look(s, ', s) # textarea(s)
s = re.sub(r"before_chk1\(\s*", 'look_chk1(dDA, s[:m.start()], 0, ', s) # before_chk1(s)
s = re.sub(r"after_chk1\(\s*", 'look_chk1(dDA, s[m.end():], m.end(), ', s) # after_chk1(s)
s = re.sub(r"textarea_chk1\(\s*", 'look_chk1(dDA, s, 0, ', s) # textarea_chk1(s)
s = re.sub(r"/0", 'sx[m.start():m.end()]', s) # /0
s = re.sub(r"before0\(\s*", 'look(sx[:m.start()], ', s) # before0(s)
s = re.sub(r"after0\(\s*", 'look(sx[m.end():], ', s) # after0(s)
s = re.sub(r"textarea0\(\s*", 'look(sx, ', s) # textarea0(s)
s = re.sub(r"before0_chk1\(\s*", 'look_chk1(dDA, sx[:m.start()], 0, ', s) # before0_chk1(s)
s = re.sub(r"after0_chk1\(\s*", 'look_chk1(dDA, sx[m.end():], m.end(), ', s) # after0_chk1(s)
s = re.sub(r"textarea0_chk1\(\s*", 'look_chk1(dDA, sx, 0, ', s) # textarea0_chk1(s)
s = re.sub(r"isEndOfNG\(\s*\)", 'isEndOfNG(dDA, s[m.end():], m.end())', s) # isEndOfNG(s)
s = re.sub(r"isNextNotCOD\(\s*\)", 'isNextNotCOD(dDA, s[m.end():], m.end())', s) # isNextNotCOD(s)
s = re.sub(r"isNextVerb\(\s*\)", 'isNextVerb(dDA, s[m.end():], m.end())', s) # isNextVerb(s)
s = re.sub(r"\bspell *[(]", '_oDict.isValid(', s)
s = re.sub(r"[\\](\d+)", 'm.group(\\1)', s)
return s
def py2js (sCode):
"convert Python code to JavaScript code"
# Python 2.x unicode strings
sCode = re.sub('\\b[ur]"', '"', sCode)
sCode = re.sub("\\b[ur]'", "'", sCode)
# operators
sCode = sCode.replace(" and ", " && ")
sCode = sCode.replace(" or ", " || ")
sCode = re.sub("\\bnot\\b", "!", sCode)
sCode = re.sub("(.+) if (.+) else (.+)", "(\\2) ? \\1 : \\3", sCode)
# boolean
sCode = sCode.replace("False", "false")
sCode = sCode.replace("True", "true")
sCode = sCode.replace("bool", "Boolean")
# methods
sCode = sCode.replace(".__len__()", ".length")
sCode = sCode.replace(".endswith", ".endsWith")
sCode = sCode.replace(".find", ".indexOf")
sCode = sCode.replace(".startswith", ".startsWith")
sCode = sCode.replace(".lower", ".toLowerCase")
sCode = sCode.replace(".upper", ".toUpperCase")
sCode = sCode.replace(".isdigit", "._isDigit")
sCode = sCode.replace(".isupper", "._isUpperCase")
sCode = sCode.replace(".islower", "._isLowerCase")
sCode = sCode.replace(".istitle", "._isTitle")
sCode = sCode.replace(".capitalize", "._toCapitalize")
sCode = sCode.replace(".strip", "._trim")
sCode = sCode.replace(".lstrip", "._trimLeft")
sCode = sCode.replace(".rstrip", "._trimRight")
sCode = sCode.replace('.replace("."', ".replace(/\./g")
sCode = sCode.replace('.replace("..."', ".replace(/\.\.\./g")
sCode = re.sub('.replace\("([^"]+)" ?,', ".replace(/\\1/g,", sCode)
# regex
sCode = re.sub('re.search\("([^"]+)", *(m.group\(\\d\))\)', "(\\2.search(/\\1/) >= 0)", sCode)
sCode = re.sub(".search\\(/\\(\\?i\\)([^/]+)/\\) >= 0\\)", ".search(/\\1/i) >= 0)", sCode)
sCode = re.sub('(look\\(sx?[][.a-z:()]*), "\\(\\?i\\)([^"]+)"', "\\1, /\\2/i", sCode)
sCode = re.sub('(look\\(sx?[][.a-z:()]*), "([^"]+)"', "\\1, /\\2/", sCode)
sCode = re.sub('(look_chk1\\(dDA, sx?[][.a-z:()]*, [0-9a-z.()]+), "\\(\\?i\\)([^"]+)"', "\\1, /\\2/i", sCode)
sCode = re.sub('(look_chk1\\(dDA, sx?[][.a-z:()]*, [0-9a-z.()]+), "([^"]+)"', "\\1, /\\2/i", sCode)
sCode = sCode.replace("(?<!-)", "") # todo
# slices
sCode = sCode.replace("[:m.start()]", ".slice(0,m.index)")
sCode = sCode.replace("[m.end():]", ".slice(m.end[0])")
sCode = sCode.replace("[m.start():m.end()]", ".slice(m.index, m.end[0])")
sCode = re.sub("\\[(-?\\d+):(-?\\d+)\\]", ".slice(\\1,\\2)", sCode)
sCode = re.sub("\\[(-?\\d+):\\]", ".slice(\\1)", sCode)
sCode = re.sub("\\[:(-?\\d+)\\]", ".slice(0,\\1)", sCode)
# regex matches
sCode = sCode.replace(".end()", ".end[0]")
sCode = sCode.replace(".start()", ".index")
sCode = sCode.replace("m.group()", "m[0]")
sCode = re.sub("\\.start\\((\\d+)\\)", ".start[\\1]", sCode)
sCode = re.sub("m\\.group\\((\\d+)\\)", "m[\\1]", sCode)
# tuples -> lists
sCode = re.sub("\((m\.start\[\\d+\], m\[\\d+\])\)", "[\\1]", sCode)
# regex
sCode = sCode.replace("\w[\w-]+", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st][a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]+")
sCode = sCode.replace(r"/\w/", "/[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st]/")
sCode = sCode.replace(r"[\w-]", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]")
sCode = sCode.replace(r"[\w,]", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st,]")
return sCode
def uppercase (s, sLang):
"(flag i is not enough): converts regex to uppercase regex: 'foo' becomes '[Ff][Oo][Oo]', but 'Bar' becomes 'B[Aa][Rr]'."
sUp = ""
nState = 0
for i in range(0, len(s)):
c = s[i]
if c == "[":
nState = 1
if nState == 1 and c == "]":
nState = 0
if c == "<" and i > 3 and s[i-3:i] == "(?P":
nState = 2
if nState == 2 and c == ">":
nState = 0
if c == "?" and i > 0 and s[i-1:i] == "(" and s[i+1:i+2] != ":":
nState = 5
if nState == 5 and c == ")":
nState = 0
if c.isalpha() and c.islower() and nState == 0:
if c == "i" and (sLang == "tr" or sLang == "az"):
sUp += "[İ" + c + "]"
else:
sUp += "[" + c.upper() + c + "]"
elif c.isalpha() and c.islower() and nState == 1 and s[i+1:i+2] != "-":
if s[i-1:i] == "-" and s[i-2:i-1].islower(): # [a-z] -> [a-zA-Z]
sUp += c + s[i-2:i-1].upper() + "-" + c.upper()
elif c == "i" and (sLang == "tr" or sLang == "az"):
sUp += "İ" + c
else:
sUp += c.upper() + c
else:
sUp += c
if c == "\\":
nState = 4
elif nState == 4:
nState = 0
return sUp
def countGroupInRegex (sRegex):
try:
return re.compile(sRegex).groups
except:
traceback.print_exc()
print(sRegex)
return 0
def createRule (s, nIdLine, sLang, bParagraph, dOptPriority):
"returns rule as list [option name, regex, bCaseInsensitive, identifier, list of actions]"
global JSREGEXES
#### OPTIONS
sLineId = str(nIdLine) + ("p" if bParagraph else "s")
sRuleId = sLineId
sOption = False # False or [a-z0-9]+ name
nPriority = 4 # Default is 4, value must be between 0 and 9
tGroups = None # code for groups positioning (only useful for JavaScript)
cCaseMode = 'i' # i: case insensitive, s: case sensitive, u: uppercasing allowed
cWordLimitLeft = '[' # [: word limit, <: no specific limit
cWordLimitRight = ']' # ]: word limit, >: no specific limit
m = re.match("^__([[<]\\w[]>])(/[a-zA-Z0-9]+|)(\\(\\w+\\)|)(![0-9]|)__ *", s)
if m:
cWordLimitLeft = m.group(1)[0]
cCaseMode = m.group(1)[1]
cWordLimitRight = m.group(1)[2]
sOption = m.group(2)[1:] if m.group(2) else False
if m.group(3):
sRuleId = m.group(3)[1:-1]
nPriority = dOptPriority.get(sOption, 4)
if m.group(4):
nPriority = int(m.group(4)[1:])
s = s[m.end(0):]
else:
print("Warning. No option defined at line: " + sLineId)
#### REGEX TRIGGER
i = s.find(" <<-")
if i == -1:
print("# Error: no condition at line " + sLineId)
return None
sRegex = s[:i].strip()
s = s[i+4:]
# JS groups positioning codes
m = re.search("@@\\S+", sRegex)
if m:
tGroups = groupsPositioningCodeToList(sRegex[m.start()+2:])
sRegex = sRegex[:m.start()].strip()
# JS regex
m = re.search("<js>.+</js>i?", sRegex)
if m:
JSREGEXES[sLineId] = m.group(0)
sRegex = sRegex[:m.start()].strip()
if "<js>" in sRegex or "</js>" in sRegex:
print("# Error: JavaScript regex not delimited at line " + sLineId)
return None
# quotes ?
if sRegex.startswith('"') and sRegex.endswith('"'):
sRegex = sRegex[1:-1]
## definitions
for sDef, sRepl in DEF.items():
sRegex = sRegex.replace(sDef, sRepl)
## count number of groups (must be done before modifying the regex)
nGroup = countGroupInRegex(sRegex)
if nGroup > 0:
if not tGroups:
print("# warning: groups positioning code for JavaScript should be defined at line " + sLineId)
else:
if nGroup != len(tGroups):
print("# error: groups positioning code irrelevant at line " + sLineId)
## word limit
if cWordLimitLeft == '[' and not sRegex.startswith(("^", '’', "'", ",")):
sRegex = WORDLIMITLEFT + sRegex
if cWordLimitRight == ']' and not sRegex.endswith(("$", '’', "'", ",")):
sRegex = sRegex + WORDLIMITRIGHT
## casing mode
if cCaseMode == "i":
bCaseInsensitive = True
if not sRegex.startswith("(?i)"):
sRegex = "(?i)" + sRegex
elif cCaseMode == "s":
bCaseInsensitive = False
sRegex = sRegex.replace("(?i)", "")
elif cCaseMode == "u":
bCaseInsensitive = False
sRegex = sRegex.replace("(?i)", "")
sRegex = uppercase(sRegex, sLang)
else:
print("# Unknown case mode [" + cCaseMode + "] at line " + sLineId)
## check regex
try:
z = re.compile(sRegex)
except:
print("# Regex error at line ", nIdLine)
print(sRegex)
traceback.print_exc()
return None
## groups in non grouping parenthesis
for x in re.finditer("\(\?:[^)]*\([[\w -]", sRegex):
print("# Warning: groups inside non grouping parenthesis in regex at line " + sLineId)
#### PARSE ACTIONS
lActions = []
nAction = 1
for sAction in s.split(" <<- "):
t = createAction(sLineId + "_" + str(nAction), sAction, nGroup)
nAction += 1
if t:
lActions.append(t)
if not lActions:
return None
return [sOption, sRegex, bCaseInsensitive, sLineId, sRuleId, nPriority, lActions, tGroups]
def createAction (sIdAction, sAction, nGroup):
"returns an action to perform as a tuple (condition, action type, action[, iGroup [, message, URL ]])"
global FUNCTIONS
m = re.search(r"([-~=>])(\d*|)>>", sAction)
if not m:
print("# No action at line " + sIdAction)
return None
#### CONDITION
sCondition = sAction[:m.start()].strip()
if sCondition:
sCondition = prepareFunction(sCondition)
FUNCTIONS.append(("c"+sIdAction, sCondition))
for x in re.finditer("[.](?:group|start|end)[(](\d+)[)]", sCondition):
if int(x.group(1)) > nGroup:
print("# Error in groups in condition at line " + sIdAction + " ("+str(nGroup)+" groups only)")
if ".match" in sCondition:
print("# Error. JS compatibility. Don't use .match() in condition, use .search()")
sCondition = "c"+sIdAction
else:
sCondition = None
#### iGroup / positioning
iGroup = int(m.group(2)) if m.group(2) else 0
if iGroup > nGroup:
print("# Selected group > group number in regex at line " + sIdAction)
#### ACTION
sAction = sAction[m.end():].strip()
cAction = m.group(1)
if cAction == "-":
## error
iMsg = sAction.find(" # ")
sMsg = sAction[iMsg+3:].strip()
sAction = sAction[:iMsg].strip()
sURL = ""
mURL = re.search("[|] *(https?://.*)", sMsg)
if mURL:
sURL = mURL.group(1).strip()
sMsg = sMsg[:mURL.start(0)].strip()
if sMsg[0:1] == "=":
sMsg = prepareFunction(sMsg[1:])
FUNCTIONS.append(("m"+sIdAction, sMsg))
for x in re.finditer("group[(](\d+)[)]", sMsg):
if int(x.group(1)) > nGroup:
print("# error in groups in message at line " + sIdAction + " ("+str(nGroup)+" groups only)")
sMsg = "=m"+sIdAction
else:
for x in re.finditer(r"\\(\d+)", sMsg):
if int(x.group(1)) > nGroup:
print("# error in groups in message at line " + sIdAction + " ("+str(nGroup)+" groups only)")
if re.search("[.]\\w+[(]", sMsg):
print("# error in message at line " + sIdAction + ": This message looks like code. Line should begin with =")
if sAction[0:1] == "=" or cAction == "=":
if "define" in sAction and not re.search(r"define\(\\\d+ *, *\[.*\] *\)", sAction):
print("# error in action at line " + sIdAction + ": second argument for define must be a list of strings")
sAction = prepareFunction(sAction)
sAction = sAction.replace("m.group(i[4])", "m.group("+str(iGroup)+")")
for x in re.finditer("group[(](\d+)[)]", sAction):
if int(x.group(1)) > nGroup:
print("# error in groups in replacement at line " + sIdAction + " ("+str(nGroup)+" groups only)")
else:
for x in re.finditer(r"\\(\d+)", sAction):
if int(x.group(1)) > nGroup:
print("# error in groups in replacement at line " + sIdAction + " ("+str(nGroup)+" groups only)")
if re.search("[.]\\w+[(]", sAction):
print("# error in action at line " + sIdAction + ": This action looks like code. Line should begin with =")
if cAction == "-":
## error detected
if not sAction:
print("# error in action at line " + sIdAction + ": This action is empty.")
if sAction[0:1] == "=":
FUNCTIONS.append(("s"+sIdAction, sAction[1:]))
sAction = "=s"+sIdAction
elif sAction.startswith('"') and sAction.endswith('"'):
sAction = sAction[1:-1]
if not sMsg:
print("# error in action at line " + sIdAction + ": the message is empty.")
return [sCondition, cAction, sAction, iGroup, sMsg, sURL]
elif cAction == "~":
## text preprocessor
if not sAction:
print("# error in action at line " + sIdAction + ": This action is empty.")
if sAction[0:1] == "=":
FUNCTIONS.append(("p"+sIdAction, sAction[1:]))
sAction = "=p"+sIdAction
elif sAction.startswith('"') and sAction.endswith('"'):
sAction = sAction[1:-1]
return [sCondition, cAction, sAction, iGroup]
elif cAction == "=":
## disambiguator
if sAction[0:1] == "=":
sAction = sAction[1:]
if not sAction:
print("# error in action at line " + sIdAction + ": This action is empty.")
FUNCTIONS.append(("d"+sIdAction, sAction))
sAction = "d"+sIdAction
return [sCondition, cAction, sAction]
elif cAction == ">":
## no action, break loop if condition is False
return [sCondition, cAction, ""]
else:
print("# Unknown action at line " + sIdAction)
return None
def regex2js (sRegex):
"converts Python regex to JS regex and returns JS regex and list of negative lookbefore assertions"
# Latin letters: http://unicode-table.com/fr/
# 0-9 and _
# A-Z
# a-z
# À-Ö 00C0-00D6 (upper case)
# Ø-ß 00D8-00DF (upper case)
# à-ö 00E0-00F6 (lower case)
# ø-ÿ 00F8-00FF (lower case)
# Ā-ʯ 0100-02AF (mixed)
# -> a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ
bCaseInsensitive = False
if "(?i)" in sRegex:
sRegex = sRegex.replace("(?i)", "")
bCaseInsensitive = True
lNegLookBeforeRegex = []
if WORDLIMITLEFT in sRegex:
sRegex = sRegex.replace(WORDLIMITLEFT, "")
lNegLookBeforeRegex = ["[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ.,–-]$"]
sRegex = sRegex.replace("[\\w", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ")
sRegex = sRegex.replace("\\w", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ]")
sRegex = sRegex.replace("[.]", r"\.")
if not sRegex.startswith("<js>"):
sRegex = sRegex.replace("/", r"\/")
m = re.search(r"\(\?<!([^()]+)\)", sRegex) # Negative lookbefore assertion should always be at the beginning of regex
if m:
lNegLookBeforeRegex.append(m.group(1)+"$")
sRegex = sRegex.replace(m.group(0), "")
if "(?<" in sRegex:
print("# Warning. Lookbefore assertion not changed in:\n ")
print(sRegex)
if sRegex.startswith("<js>"):
sRegex = sRegex.replace('<js>', '/').replace('</js>i', '/ig').replace('</js>', '/g')
else:
sRegex = "/" + sRegex + "/g"
if bCaseInsensitive and not sRegex.endswith("/ig"):
sRegex = sRegex + "i"
if not lNegLookBeforeRegex:
lNegLookBeforeRegex = None
return (sRegex, lNegLookBeforeRegex)
def pyRuleToJS (lRule):
lRuleJS = copy.deepcopy(lRule)
del lRule[-1] # tGroups positioning codes are useless for Python
# error messages
for aAction in lRuleJS[6]:
if aAction[1] == "-":
aAction[4] = aAction[4].replace("« ", "« ").replace(" »", " »")
# js regexes
lRuleJS[1], lNegLookBehindRegex = regex2js( JSREGEXES.get(lRuleJS[3], lRuleJS[1]) )
lRuleJS.append(lNegLookBehindRegex)
return lRuleJS
def writeRulesToJSArray (lRules):
sArray = "[\n"
for sOption, aRuleGroup in lRules:
sArray += ' ["' + sOption + '", [\n' if sOption else " [false, [\n"
for sRegex, bCaseInsensitive, sLineId, sRuleId, nPriority, lActions, aGroups, aNegLookBehindRegex in aRuleGroup:
sArray += ' [' + sRegex + ", "
sArray += "true, " if bCaseInsensitive else "false, "
sArray += '"' + sLineId + '", '
sArray += '"' + sRuleId + '", '
sArray += str(nPriority) + ", "
sArray += json.dumps(lActions, ensure_ascii=False) + ", "
sArray += json.dumps(aGroups, ensure_ascii=False) + ", "
sArray += json.dumps(aNegLookBehindRegex, ensure_ascii=False) + "],\n"
sArray += " ]],\n"
sArray += "]"
return sArray
def groupsPositioningCodeToList (sGroupsPositioningCode):
if not sGroupsPositioningCode:
return None
return [ int(sCode) if sCode.isdigit() or (sCode[0:1] == "-" and sCode[1:].isdigit()) else sCode \
for sCode in sGroupsPositioningCode.split(",") ]
def _calcRulesStats (lRules):
d = {'=':0, '~': 0, '-': 0, '>': 0}
for aRule in lRules:
for aAction in aRule[6]:
d[aAction[1]] = d[aAction[1]] + 1
return (d, len(lRules))
def displayStats (lParagraphRules, lSentenceRules):
print(" {:>18} {:>18} {:>18} {:>18}".format("DISAMBIGUATOR", "TEXT PROCESSOR", "GRAMMAR CHECKING", "REGEX"))
d, nRule = _calcRulesStats(lParagraphRules)
print("§ {:>10} actions {:>10} actions {:>10} actions in {:>8} rules".format(d['='], d['~'], d['-'], nRule))
d, nRule = _calcRulesStats(lSentenceRules)
print("s {:>10} actions {:>10} actions {:>10} actions in {:>8} rules".format(d['='], d['~'], d['-'], nRule))
def mergeRulesByOption (lRules):
"returns a list of tuples [option, list of rules] keeping the rules order"
lFinal = []
lTemp = []
sOption = None
for aRule in lRules:
if aRule[0] != sOption:
if sOption != None:
lFinal.append([sOption, lTemp])
# new tuple
sOption = aRule[0]
lTemp = []
lTemp.append(aRule[1:])
lFinal.append([sOption, lTemp])
return lFinal
def prepareOptions (lOptionLines):
"returns a dictionary with data about options"
sLang = ""
lStructOpt = []
lOpt = []
dOptLabel = {}
dOptPriority = {}
for sLine in lOptionLines:
sLine = sLine.strip()
if sLine.startswith("OPTGROUP/"):
m = re.match("OPTGROUP/([a-z0-9]+):(.+)$", sLine)
lStructOpt.append( (m.group(1), list(map(str.split, m.group(2).split(",")))) )
elif sLine.startswith("OPTSOFTWARE:"):
lOpt = [ [s, {}] for s in sLine[12:].strip().split() ] # don’t use tuples (s, {}), because unknown to JS
elif sLine.startswith("OPT/"):
m = re.match("OPT/([a-z0-9]+):(.+)$", sLine)
for i, sOpt in enumerate(m.group(2).split()):
lOpt[i][1][m.group(1)] = eval(sOpt)
elif sLine.startswith("OPTPRIORITY/"):
m = re.match("OPTPRIORITY/([a-z0-9]+): *([0-9])$", sLine)
dOptPriority[m.group(1)] = int(m.group(2))
elif sLine.startswith("OPTLANG/"):
m = re.match("OPTLANG/([a-z][a-z](?:_[A-Z][A-Z]|)):(.+)$", sLine)
sLang = m.group(1)[:2]
dOptLabel[sLang] = { "__optiontitle__": m.group(2).strip() }
elif sLine.startswith("OPTLABEL/"):
m = re.match("OPTLABEL/([a-z0-9]+):(.+)$", sLine)
dOptLabel[sLang][m.group(1)] = list(map(str.strip, m.group(2).split("|"))) if "|" in m.group(2) else [m.group(2).strip(), ""]
else:
print("# Error. Wrong option line in:\n ")
print(sLine)
print(" options defined for: " + ", ".join([ t[0] for t in lOpt ]))
dOptions = { "lStructOpt": lStructOpt, "dOptLabel": dOptLabel }
dOptions.update({ "dOpt"+k: v for k, v in lOpt })
return dOptions, dOptPriority
def make (lRules, sLang, bJavaScript):
"compile rules"
# removing comments, zeroing empty lines, creating definitions, storing tests, merging rule lines
print(" parsing rules...")
global DEF
lLine = []
lRuleLine = []
lTest = []
lOpt = []
for i, sLine in enumerate(lRules, 1):
if sLine.startswith('#END'):
break
elif sLine.startswith("#"):
pass
elif sLine.startswith("DEF:"):
m = re.match("DEF: +([a-zA-Z_][a-zA-Z_0-9]*) +(.+)$", sLine.strip())
if m:
DEF["{"+m.group(1)+"}"] = m.group(2)
else:
print("Error in definition: ", end="")
print(sLine.strip())
elif sLine.startswith("TEST:"):
lTest.append("{:<8}".format(i) + " " + sLine[5:].lstrip())
elif sLine.startswith("TODO:"):
pass
elif sLine.startswith(("OPTGROUP/", "OPTSOFTWARE:", "OPT/", "OPTLANG/", "OPTLABEL/", "OPTPRIORITY/")):
lOpt.append(sLine)
elif re.match("[ \t]*$", sLine):
pass
elif sLine.startswith((" ", "\t")):
lRuleLine[len(lRuleLine)-1][1] += " " + sLine.strip()
else:
lRuleLine.append([i, sLine.strip()])
# generating options files
print(" parsing options...")
try:
dOptions, dOptPriority = prepareOptions(lOpt)
except:
traceback.print_exc()
exit()
# generating test files
print(" generating test files...")
with open("tests/"+sLang+"/gc_test.txt", "w", encoding="utf-8", newline="\n") as hDstPy, \
open("gc_lang/"+sLang+"/modules-js/tests_data.json", "w", encoding="utf-8", newline="\n") as hDstJS:
hDstPy.write("# TESTS FOR LANG ["+sLang+"]\n\n")
for sLine in lTest:
hDstPy.write(sLine)
hDstJS.write('{ "aData": ' + json.dumps(lTest, ensure_ascii=False) + " }\n")
# processing
print(" preparing rules...")
bParagraph = True
lParagraphRules = []
lSentenceRules = []
lParagraphRulesJS = []
lSentenceRulesJS = []
for nLine, sLine in lRuleLine:
if sLine:
if sLine == "[++]":
bParagraph = False
else:
aRule = createRule(sLine, nLine, sLang, bParagraph, dOptPriority)
if aRule:
if bParagraph:
lParagraphRules.append(aRule)
lParagraphRulesJS.append(pyRuleToJS(aRule))
else:
lSentenceRules.append(aRule)
lSentenceRulesJS.append(pyRuleToJS(aRule))
# creating file with all functions callable by rules
print(" creating callables...")
sPyCallables = "# generated code, do not edit\n"
sJSCallables = "// generated code, do not edit\nconst oEvalFunc = {\n"
for sFuncName, sReturn in FUNCTIONS:
cType = sFuncName[0:1]
if cType == "c": # condition
sParams = "s, sx, m, dDA, sCountry, bCondMemo"
elif cType == "m": # message
sParams = "s, m"
elif cType == "s": # suggestion
sParams = "s, m"
elif cType == "p": # preprocessor
sParams = "s, m"
elif cType == "d": # disambiguator
sParams = "s, m, dDA"
else:
print("# Unknown function type in [" + sFuncName + "]")
continue
sPyCallables += "def {} ({}):\n".format(sFuncName, sParams)
sPyCallables += " return " + sReturn + "\n"
sJSCallables += " {}: function ({})".format(sFuncName, sParams) + " {\n"
sJSCallables += " return " + py2js(sReturn) + ";\n"
sJSCallables += " },\n"
sJSCallables += "}\n"
displayStats(lParagraphRules, lSentenceRules)
d = { "callables": sPyCallables,
"callablesJS": sJSCallables,
"paragraph_rules": mergeRulesByOption(lParagraphRules),
"sentence_rules": mergeRulesByOption(lSentenceRules),
"paragraph_rules_JS": writeRulesToJSArray(mergeRulesByOption(lParagraphRulesJS)),
"sentence_rules_JS": writeRulesToJSArray(mergeRulesByOption(lSentenceRulesJS)) }
d.update(dOptions)
return d
|
Added dialog_bundled.py version [00d8c7ccc2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
# -*- encoding: UTF-8 -*-
import sys
import re
import os
comment = re.compile(r"[\n#]")
ids = re.compile(r"\w+:\s*\*?\w+(,\s*\*?\w+)*")
langu = re.compile(r"\[.+=.+\]\s*")
titl = re.compile(r"\w+\s*=\s*")
helptexts = []
# XDL file
xdl_header = """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="%s" dlg:left="101" dlg:top="52" dlg:width="196" dlg:height="72" dlg:closeable="true" dlg:moveable="true" dlg:withtitlebar="false">
<dlg:bulletinboard>
"""
xdl_footer = """</dlg:bulletinboard>
</dlg:window>
"""
xdl_group = '<dlg:fixedline dlg:id="%s" dlg:tab-index="%d" dlg:left="5" dlg:top="%d" dlg:width="240" dlg:height="10" dlg:value="&%s"/>\n'
xdl_item = '<dlg:checkbox dlg:id="%s" dlg:tab-index="%d" dlg:left="%d" dlg:top="%d" dlg:width="%d" dlg:height="10" dlg:value="&%s" dlg:checked="%s" %s/>\n'
# XCS file
xcs_header = """<?xml version="1.0" encoding="UTF-8"?>
<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
oor:name="%s" oor:package="org.openoffice" xml:lang="en-US">
<info>
<desc>Contains the options data used for the test extensions.</desc>
</info>
<templates>
"""
xcs_leaf_header = """
<group oor:name="%s">
<info>
<desc>The data for one leaf.</desc>
</info>
"""
xcs_leaf = """<prop oor:name="%s" oor:type="xs:string">
<value></value>
</prop>
"""
xcs_leaf_footer = """ </group>
"""
xcs_component_header = """ </templates>
<component>
<group oor:name="Leaves">
"""
xcs_component = """
<node-ref oor:name="%s" oor:node-type="%s"/>
"""
xcs_footer = """ </group>
</component>
</oor:component-schema>
"""
# XCU file
xcu_header = u"""<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
<oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<node oor:name="Nodes">
<!--<node oor:name="org.openoffice.lightproof" oor:op="fuse">
<prop oor:name="Label">
<value xml:lang="en">Dictionaries</value>
<value xml:lang="hu">Szótárak</value>
</prop>-->
<node oor:name="LanguageSettings" oor:op="fuse">
<prop oor:name="Label">
<value xml:lang="en-US">Language Settings</value>
<value xml:lang="fr-FR">Paramètres linguistiques</value>
</prop>
<node oor:name="Leaves">
"""
xcu_node_header = """
<node oor:name="org.openoffice.lightproof.%s" oor:op="fuse">
<prop oor:name="Id">
<!--<value>org.openoffice.comp.pyuno.lightproof.oxt.%s</value>-->
<value>French.linguistic.resources.from.Dicollecte.by.OlivierR</value>
</prop>
<prop oor:name="Label">
"""
xcu_node = """
<value xml:lang="%s">%s</value>
"""
xcu_node_footer = """
</prop>
<prop oor:name="OptionsPage">
<value>%%origin%%/%s.xdl</value>
</prop>
<prop oor:name="EventHandlerService">
<value>org.openoffice.comp.pyuno.LightproofOptionsEventHandler.%s</value>
</prop>
</node>
"""
xcu_footer = """
</node>
</node>
</node>
</oor:component-data>
"""
indexes = {}
indexes_def = {}
modules = {}
def create_xdl (pkg, lLineOptions, hZip, lang):
global indexes
global indexes_def
global modules
indexes[lang] = []
indexes_def[lang] = []
modules[lang] = []
f2 = ""
state = 0
f2n = "dialog/" + lang + ".xdl"
f2 = f2 + xdl_header%lang
k = 0
k2 = 0
lin = 0
ok = False
for i in lLineOptions:
i = i.strip()
if "=" in i and r"\n" in i:
helptexts.append(i.split("=")[0])
for i in lLineOptions:
i = i.strip().replace(r"\n", "@#@") + "\n"
lin = lin + 1
if not comment.match(i):
if state == 0:
ok = True
if ids.match(i.strip()):
j = i.strip().split(":")
f2 = f2 + xdl_group%(j[0].strip(), k, k2 * 10 + 5, j[0].strip())
for l in j[1].split(","):
k = k + 1
k2 = k2 + 1
l = l.strip()
la = l.split(" ")
l3 = 0
itemlen = int(240 / len(la))
for l2 in la:
if l2 != "-":
checked = "false"
if l2[0] == '*':
checked = "true"
l2 = l2[1:]
indexes_def[lang] += [l2]
indexes[lang] += [l2]
helptext = ""
if l2 in helptexts:
helptext = "dlg:help-text=\"&hlp_" + l2 + "\""
f2 = f2 + xdl_item%(l2, k, 10 + itemlen * l3, k2 * 10 + 5, itemlen, l2, checked, helptext)
l3 = l3 + 1
k = k + 1
k2 = k2 + 1
k = k + 1
else:
ok = False
if langu.match(i.strip()):
if "xdl" in f2n:
f2 = f2 + xdl_footer
hZip.writestr(f2n, f2)
f2 = ""
i = i.strip()
langname = i[1:i.find("=")]
modules[lang] += [langname[:langname.find("_")], i[i.find("=")+1:-1]]
f2n = "dialog/" + lang + "_" + langname + ".properties"
state = state + 1
if state == 1:
hZip.writestr("dialog/" + lang + "_" + langname + ".default", "")
elif titl.match(i.strip()):
hlp = i.encode("unicode-escape").decode('ascii').replace(r"\n","\n").replace(r"\t","\t").replace(r"\x","\\u00").split("@#@", 1)
if len(hlp) > 1:
helptexts.append(hlp[0].split("=")[0])
f2 = f2 + "hlp_" + hlp[0].split("=")[0] + "=" + hlp[1]
hlp[0] = hlp[0] + "\n"
f2 = f2 + hlp[0]
elif not ok:
print ("Syntax error in line %d: %s" %(lin, i))
if "xdl" in f2n:
f2 = f2 + xdl_footer
hZip.writestr(f2n, f2)
def c (sImplname, lLineOptions, hZip, sLang):
# create xdl dialog data files
create_xdl(sImplname, lLineOptions, hZip, sLang)
#print(indexes)
# create xcs file
s = xcs_header% ("Lightproof_" + sImplname)
for i in indexes:
s = s + xcs_leaf_header%i + \
xcs_leaf*len(indexes[i])%tuple(indexes[i]) + xcs_leaf_footer
s = s + xcs_component_header
for i in indexes:
s = s + xcs_component%(i,i)
hZip.writestr("dialog/OptionsDialog.xcs", s + xcs_footer)
# create xcu (bundled dialog in LO options)
s = ""
for i in indexes:
s = s + xcu_node_header%(sImplname, sImplname) + \
xcu_node*(len(modules[i])//2)%tuple(modules[i]) + \
xcu_node_footer%(i, sImplname)
hZip.writestr("dialog/OptionsDialog.xcu", (xcu_header + s + xcu_footer).encode("utf-8"))
# python resource file
s = "lopts = {}\nlopts_default = {}\n"
for i in indexes:
s = s + "lopts['" + i + "'] = " + str(indexes[i]) + "\n"
for i in indexes:
s = s + "lopts_default['" + i + "'] = " + str(indexes_def[i]) + "\n"
hZip.writestr("pythonpath/lightproof_opts_%s.py"%sImplname, s)
|
Added doc/API.txt version [74d38805d7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
= Grammalecte API =
Sorry, PEP8. CamelCase here. Writer legacy & JavaScript.
== grammalecte.ibdawg ==
.IBDAWG
.__init__(dic_name)
Loads the dictionary dic_name from the folder _dictionaries.
.lookup(word)
Returns True if word is in the dictionary else False.
.isValid(word)
Returns True if word is in the dictionary else False. Several casing tried.
.isValidToken(token)
Returns True if token (combination of words) is valid. Several casing tried.
.getMorph(word)
Returns the list of morphologies of word.
== grammalecte.fr ==
Grammar checker for French language
.load()
Initialize the grammar checker.
.parse(paragraph)
Returns a list of errors found in the paragraph.
.setOptions(dict_options)
Change the grammar checking options.
.getDictionary()
Returns the dictionary (IBDAWG)
== grammalecte.fr.conj ==
.isVerb(word)
Returns True is word exists in the list of verb (infinite form)
.getConj(verb, tense, who)
Returns conjugation of verb with subject who at tense (can be an empty string)
tense has to be:
:Y infinitif
:PQ participes passés et présent
:Ip indicatif présent
:Iq imparfait
:Is passé simple
:If futur
:K conditionnel
:Sp subjonctif présent
:Sq subjonctif imparfait
:E impératif
who has to be:
:P participe présent
:Q1 participe passé masculin singulier ou invariable
:Q2 participe passé masculin pluriel
:Q3 participe passé féminin singulier
:Q4 participe passé féminin pluriel
:1s première personne au singulier
(1ś pour une éventuelle forme interrogative spécifique)
:2s deuxième personne au singulier
:3s troisième personne au singulier
:1p première personne au pluriel
:2p deuxième personne au pluriel
:3p troisième personne au pluriel
Exception ValueError is raised if failed to retrieve information.
.hasConj(verb, tense, who)
Returns False if no conjugation with subject who at tense else True.
Exception ValueError is raised if failed to retrieve information.
.Verb
.__init__(verb)
.dConj
Attribute. Dictionary of all conjugations.
.sInfo
Attribute. Readable informations about the verb.
.infinitif(bPro, bNeg, bTpsCo, bInt, bFem)
.participePasse(sWho)
.participePresent(bPro, bNeg, bTpsCo, bInt, bFem)
.conjugue(sTemps, sWho, bPro, bNeg, bTpsCo, bInt, bFem)
.imperatif(sWho, bPro, bNeg, bTpsCo, bFem)
|
Added doc/build.txt version [a7ffc6f8bf].
Added doc/options.txt version [dc0618d03e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# 1. Copy this template to the data folder.
#
# 2. Define your group ids and option ids and the localized title
# texts (see later for the syntax).
#
# Syntax of the dialog data file:
#
# Options and title texts for the Settings and conditional rules
#
# Format of the dialog definition:
#
# GroupID: OptionID [OptionsInTheSameLines_or_hyphen_placeholder], OptionID ...
# Group2ID: OptionID, OptionID ...
# ...
# [Language_code=title of the window]
# GroupID=title of the group
# OptionID=title of the option [\n tooltip]
# Option2ID=title of the option [\n tooltip]
#
# The first language is the default language for the other locales
# (use en_US or the common language of your country)
#
# The OptionIDs are used in the rules, too. For example:
#
# foo <<- option("style") ->> bar # bar is far better
#
# or
#
# __[i]/style__ foo <<- ->> bar # bar is far better
#
# these rule depends from the state of the "style" option.
# options
spelling: comma, hyphen
proofreading: style, moregrammar
# titles
[en_US=Hungarian grammar checking]
spelling=Spelling
comma=Comma usage
hyphen=Check compound words with hyphen
proofreading=Proofreading
style=Style checking
moregrammar=Use grammar rules with ambiguous word analysis
[yourlocale=yourtitle]
spelling=...
wordpart=...
...
|
Added doc/syntax.txt version [ee9590ca86].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 |
WRITING RULES FOR GRAMMALECTE
= Principles =
Grammalecte is a multi-passes grammar checker engine. On the first pass, the
engine checks the text paragraph by paragraph. On the next passes, the engine
check the text sentence by sentence.
The command to add a new pass is:
[++]
You shoudn’t need more than two passes, but you can create as many passes as
you wish.
In each pass, you can write as many rules as you need.
A rule is defined by:
- a regex pattern trigger
- a list of actions (can’t be empty)
- [optional] flags “LCR” for the regex word boundaries and case sensitiveness
- [optional] user option name for activating/disactivating the rule
There is no limit to the number of actions and the type of actions a rule can
launch. Each action has its own condition to be triggered.
There are three kind of actions:
- Error warning, with a message and optionaly suggestions and optionally an URL
- Text transformation, modifying internally the checked text
- Disambigation action, setting tags on a position
The rules file for your language must be named “rules.grx”.
The options file must be named “option.txt”.
The settings file must be named “config.ini”.
All these files are simple utf-8 text file.
UTF-8 is mandatory.
= Rule syntax =
__LCR__ pattern
<<- condition ->> error_suggestions # message_error|http://awebsite.net...
<<- condition ~>> text_rewriting
<<- condition =>> commands_for_disambigation
...
Patterns are written with the Python syntax for regular expressions:
http://docs.python.org/library/re.html
There can be one or several actions for each rule, executed the order they are
written.
Conditions are optional, i.e.:
<<- ~>> replacement
LCR flags means:
- Left boundary for the regex
- Case sensitiveness
- Right boundary for the regex
Left boundary: [ word boundary or < no word boundary
right boundary: ] word boundary or > no word boundary
Case sensitiveness:
i: case insensitive
s: case sensitive
u: uppercase allowed for lowercased characters
i.e.: "Word" becomes "W[oO][rR][dD]"
Examples:
__[i]__ pattern
__<s]__ pattern
__[u>__ pattern
__<s>__ pattern
...
User option activating/disactivating is possible with an option name placed
just after the LCR flags, i.e.:
__[i]/useroption1__ pattern
__[u]/useroption2__ pattern
__[s>/useroption1__ pattern
__<u>/useroption3__ pattern
__<i>/useroption3__ pattern
...
The LCR flags are also optional. If you don’t set these flags, the default LCR
flags will be:
__[i]__
Example. Report “foo” in the text and suggest "bar":
foo <<- ->> bar # Use bar instead of foo.
Example. Recognize and suggest missing hyphen and rewrite internally the text
with the hyphen:
__[s]__ foo bar
<<- ->> foo-bar # Missing hyphen.
<<- ~>> foo-bar
== Simple-line or multi-line rules ==
Rules can be break to multiple lines by leading tabulators or spaces.
You should use 4 spaces.
Examples:
__<s>__ pattern <<- condition
->> replacement
# message
<<- condition ->> suggestion # message
<<- condition
~>> text_rewriting
<<- =>> disambiguation
__<s>__ pattern <<- condition ->> replacement # message
== Comments ==
Lines beginning with # are comments.
Example. No action done.
# pattern <<- ->> foo bar # message
== End of file ==
With the command:
#END
the compiler won’t go further. Whatever is written after will be considered
as comments.
== Whitespaces at the border of patterns or suggestions ==
Example. Recognize double or more spaces and suggests a single space:
__<s>__ " +" <<- ->> " " # Extra space(s).
ASCII " characters protect spaces in the pattern and in the replacement text.
== Pattern groups and back references ==
It is usually useful to retrieve parts of the matched pattern. We simply use
parenthesis in pattern to get groups with back references.
Example. Suggest a word with correct quotation marks:
\"(\w+)\" <<- ->> “\1” # Correct quotation marks.
Example. Suggest the missing space after the !, ? or . signs:
__<i]__ \b([?!.])([A-Z]+) <<- ->> \1 \2 # Missing space?
Example. Back reference in messages.
(fooo) bar <<- ->> foo bar # “\1” should be:
== Name definitions ==
Grammalecte supports name definitions to simplify the description of the
complex rules.
Example.
DEF: name pattern
Usage in the rules:
({name}) (\w+) ->> "\1-\2" # Missing hyphen?
== Multiple suggestions ==
Use | in the replacement text to add multiple suggestions:
Example 7. Foo, FOO, Bar and BAR suggestions for the input word "foo".
foo <<- ->> Foo|FOO|Bar|BAR # Did you mean:
== No suggestion ==
You can display message without making suggestions. For this purpose,
use a single character _ in the suggestion field.
Example. No suggestion.
foobar <<- ->> _ # Message
== Positioning ==
Positioning is valid only for error creation and text rewriting.
By default, the full pattern will be underlined with blue. You can shorten the
underlined text area by specifying a back reference group of the pattern.
Instead of writing ->>, write -n>> n being the number of a back reference
group. Actually, ->> is similar to -0>>
Example.
(ying) and yang <<- -1>> yin # Did you mean:
__[s]__ (Mr.) [A-Z]\w+ <<- ~1>> Mr
=== Comparison ===
Rule A:
ying and yang <<- ->> yin and yang # Did you mean:
Rule B:
(ying) and yang <<- -1>> yin # Did you mean:
With the rule A, the full pattern is underlined:
ying and yang
^^^^^^^^^^^^^
With the rule B, only the first group is underlined:
ying and yang
^^^^
== Longer explanations with URLs ==
Warning messages can contain optional URL for longer explanations separated by "|":
(your|her|our|their)['’]s
<<- ->> \1s
# Possessive pronoun:|http://en.wikipedia.org/wiki/Possessive_pronoun
= Text rewriting =
Example. Replacing a string by another
Mr. [A-Z]\w+ <<- ~>> Mister
WARNING: The replacing text must be shorter than the replaced text or have the
same length. Breaking this rule will misplace following error reports. You
have to ensure yourself the rules comply with this constraint, Grammalecte
won’t do it for you.
Specific commands for text rewriting
~>> *
replace by whitespaces
~>> @
replace by arobases, useful mostly at firt pass, where it is advised to
check usage of punctuations and whitespaces.
@ are automatically removed at the beginning of the second pass.
You can use positioning with text rewriting actions.
Mr(. [A-Z]\w+) <<- ~1>> *
You can also call Python expressions.
__[s]__ Mr. ([a-z]\w+) <<- ~1>> =\1.upper()
= Disambiguation =
When Grammalecte analyses a word with morph or morphex, before requesting the
POS tags to the dictionary, it checks if there is a stored marker for the
position where the word is. If there is a marker, Grammalecte uses the stored
data and don’t make request to the dictionary.
The disambigation commands store POS tags at the position of a word.
There is 3 commands for disambigation.
- select(n, pattern)
stores at position n only the POS tags of the word matching the pattern.
- exclude(n, pattern)
stores at position n the POS tags of the word, except those matching the
pattern.
- define(n, definition)
stores at position n the POS tags in definition.
Examples.
=>> select(\1, "po:noun is:pl")
=>> exclude(\1, "po:verb")
=>> define(\1, "po:adv")
=>> exclude(\1, "po:verb") and define(\2, "po:adv") and select(\3, "po:adv")
Note: select, exclude and define ALWAYS return True.
If select and exclude generate an empty list, no marker is set.
With define, you can set a list of POS tags. Example:
define(\1, "po:nom is:plur|po:adj is:sing|po:adv")
This will store a list of tags at the position of the first group:
["po:nom is:plur", "po:adj is:sing", "po:adv"]
= Conditions =
Conditions are Python expressions, they must return a value, which will be
evaluated as boolean. You can use the usual Python syntax and libraries.
You can call pattern subgroups via \0, \1, \2…
Example:
these (\w+)
<<- \1 == "man" -1>> men # Man is a singular noun. Use the plural form:
You can also apply functions to subgroups like:
\1.startswith("a")
\3.islower()
re.match("pattern", \2)
…
== Standard functions ==
word(n)
catches the nth next word after the pattern (separated only by white spaces).
returns None if no word catched
word(-n)
catches the nth next word before the pattern (separated only by white spaces).
returns None if no word catched
after(regex[, neg_regex])
checks if the text after the pattern matches the regex.
before(regex[, neg_regex])
checks if the text before the pattern matches the regex.
textarea(regex[, neg_regex])
checks if the full text of the checked area (paragraph or sentence) matches the regex.
morph(n, regex[, strict=True][, noword=False])
checks if all tags of the word in group n match the regex.
if strict = False, returns True only if one of tags matches the regex.
if there is no word at position n, returns the value of noword.
morphex(n, regex, neg_regex[, noword=False])
checks if one of the tags of the word in group n match the regex and
if no tags matches the neg_regex.
if there is no word at position n, returns the value of noword.
option(option_name)
returns True if option_name is activated else False
Note: the analysis is done on the preprocessed text.
== Default variables ==
sCountry
It contains the current country locale of the checked paragraph.
colour <<- sCountry == "US" ->> color # Use American English spelling.
= Expressions in the suggestions =
Suggestions (and warning messages) started by an equal sign are Python string expressions
extended with possible back references and named definitions:
Example:
foo\w+ ->> = '"' + \0.upper() + '"' # With uppercase letters and quoation marks
All words beginning with "foo" will be recognized, and the suggestion is
the uppercase form of the string with ASCII quoation marks: eg. foom ->> "FOOM".
//////////////////////////////// OLD ///////////////////////////////////////
= Text preprocessing and multi-passes checking =
On each pass, Lightproof uses rules written in the text preprocessor to modify
internally the text before checking the text.
The text preprocessor is useful to simplify texts and write simplier checking
rules.
For example, sentences with the same grammar mistake:
These “cats” are blacks.
These cats are “blacks”.
These cats are absolutely blacks.
These stupid “cats” are all blacks.
These unknown cats are as per usual blacks.
Instead of writting complex rules or several rules to find mistakes for all possible
cases, you can use the text preprocessor to simplify the text.
To remove the chars “”, write:
[“”] ->> *
The * means: replace text by whitespaces.
as per usual ->> *
Similarly to grammar rules, you can add conditions:
\w+ly <<- morph(\0, "adverb") ->> *
You can also remove a group reference:
these (\w+) (\w+) <<- morph(\1, "adjective") and morph(\2, "noun") -1>> *
(am|are|is|were|was) (all) -2>> *
With these rules, you get the following sentences:
These cats are blacks.
These cats are blacks .
These cats are blacks.
These cats are blacks.
These cats are blacks.
These grammar mistakes can be detected with one simple rule:
these +(\w+) +are +(\w+s)
<<- morph(\1, "noun") and morph(\2, "plural")
-2>> _ # Adjectives are invariable.
Instead of replacing text with whitespaces, you can replace text with @.
https?://\S+ ->> @
This is useful if at first pass you write rules to check successive whitespaces.
@ are automatically removed at the second pass.
You can also replace any text as you wish.
Mister ->> Mr
(Mrs?)[.] ->> \1
With the multi-passes checking and the text preprocessor, it is advised to
remove or simplify the text which has been checked on the previous pass.
= Typical problems =
== Pattern matching ==
Repeating pattern matching of a single rule continues after the previous matching, so
instead of general multiword patterns, like
(\w+) (\w+) <<- some_check(\1, \2) ->> \1, \2 # foo
use
(\w+) <<- some_check(\1, word(1)) ->> \1, # foo
|
Added gc_core/js/README.txt version [05ae253824].
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | = GRAMMALECTE = Grammar checker By Olivier R. Website: http://grammalecte.net License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html |
Added gc_core/js/helpers.js version [6c4ecd114f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
// HELPERS
"use strict";
// In Firefox, there is no console.log in PromiseWorker, but there is worker.log.
// In Thunderbird, you can’t access to console directly. So it’s required to pass a log function.
let funcOutput = null;
function setLogOutput (func) {
funcOutput = func;
}
function echo (obj) {
if (funcOutput !== null) {
funcOutput(obj);
} else {
console.log(obj);
}
return true;
}
function logerror (e, bStack=false) {
let sMsg = "\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message;
if (bStack) {
sMsg += "\n--- Stack ---\n" + e.stack;
}
if (funcOutput !== null) {
funcOutput(sMsg);
} else {
console.error(sMsg);
}
}
// load ressources in workers (suggested by Mozilla extensions reviewers)
// for more options have a look here: https://gist.github.com/Noitidart/ec1e6b9a593ec7e3efed
// if not in workers, use sdk/data.load() instead
function loadFile (spf) {
try {
let xRequest;
if (typeof XMLHttpRequest !== "undefined") {
xRequest = new XMLHttpRequest();
}
else {
// JS bullshit again… necessary for Thunderbird
let { Cc, Ci } = require("chrome");
xRequest = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
xRequest.QueryInterface(Ci.nsIXMLHttpRequest);
}
xRequest.open('GET', spf, false); // 3rd arg is false for synchronous, sync is acceptable in workers
xRequest.send();
return xRequest.responseText;
}
catch (e) {
logerror(e);
return null
}
}
// conversions
function objectToMap (obj) {
let m = new Map();
for (let param in obj) {
//console.log(param + " " + obj[param]);
m.set(param, obj[param]);
}
return m;
}
function mapToObject (m) {
let obj = {};
for (let [k, v] of m) {
obj[k] = v;
}
return obj;
}
exports.echo = echo;
exports.logerror = logerror;
exports.objectToMap = objectToMap;
exports.mapToObject = mapToObject;
exports.setLogOutput = setLogOutput;
exports.loadFile = loadFile;
|
Added gc_core/js/ibdawg.js version [2d42754063].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 |
//// IBDAWG
"use strict";
const st = require("resource://grammalecte/str_transform.js");
const helpers = require("resource://grammalecte/helpers.js");
// String
// Don’t remove. Necessary in TB.
${string}
class IBDAWG {
// INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH
constructor (sDicName) {
try {
const dict = JSON.parse(helpers.loadFile("resource://grammalecte/_dictionaries/"+sDicName));
Object.assign(this, dict);
//const dict = require("resource://grammalecte/"+sLang+"/dictionary.js");
//Object.assign(this, dict.dictionary);
}
catch (e) {
throw Error("# Error. File not found or not loadable.\n" + e.message + "\n");
}
/*
Properties:
sName, nVersion, sHeader, lArcVal, nArcVal, byDic, sLang, nChar, nBytesArc, nBytesNodeAddress,
nEntries, nNode, nArc, nAff, cStemming, nTag, dChar, _arcMask, _finalNodeMask, _lastArcMask, _addrBitMask, nBytesOffset,
*/
if (!this.sHeader.startsWith("/pyfsa/")) {
throw TypeError("# Error. Not a pyfsa binary dictionary. Header: " + this.sHeader);
}
if (!(this.nVersion == "1" || this.nVersion == "2" || this.nVersion == "3")) {
throw RangeError("# Error. Unknown dictionary version: " + this.nVersion);
}
this.dChar = helpers.objectToMap(this.dChar);
//this.byDic = new Uint8Array(this.byDic); // not quicker, even slower
if (this.cStemming == "S") {
this.funcStemming = st.getStemFromSuffixCode;
} else if (this.cStemming == "A") {
this.funcStemming = st.getStemFromAffixCode;
} else {
this.funcStemming = st.noStemming;
}
// Configuring DAWG functions according to nVersion
switch (this.nVersion) {
case 1:
this.morph = this._morph1;
this.stem = this._stem1;
this._lookupArcNode = this._lookupArcNode1;
this._writeNodes = this._writeNodes1;
break;
case 2:
this.morph = this._morph2;
this.stem = this._stem2;
this._lookupArcNode = this._lookupArcNode2;
this._writeNodes = this._writeNodes2;
break;
case 3:
this.morph = this._morph3;
this.stem = this._stem3;
this._lookupArcNode = this._lookupArcNode3;
this._writeNodes = this._writeNodes3;
break;
default:
throw ValueError("# Error: unknown code: " + this.nVersion);
}
//console.log(this.getInfo());
this.bOptNumSigle = true;
this.bOptNumAtLast = false;
};
getInfo () {
return ` Language: ${this.sLang} Version: ${this.nVersion} Stemming: ${this.cStemming}FX\n` +
` Arcs values: ${this.nArcVal} = ${this.nChar} characters, ${this.nAff} affixes, ${this.nTag} tags\n` +
` Dictionary: ${this.nEntries} entries, ${this.nNode} nodes, ${this.nArc} arcs\n` +
` Address size: ${this.nBytesNodeAddress} bytes, Arc size: ${this.nBytesArc} bytes\n`;
};
isValidToken (sToken) {
// checks if sToken is valid (if there is hyphens in sToken, sToken is split, each part is checked)
if (this.isValid(sToken)) {
return true;
}
if (sToken.includes("-")) {
if (sToken._count("-") > 4) {
return true;
}
return sToken.split("-").every(sWord => this.isValid(sWord));
}
return false;
};
isValid (sWord) {
// checks if sWord is valid (different casing tested if the first letter is a capital)
if (!sWord) {
return null;
}
if (sWord.includes("’")) { // ugly hack
sWord = sWord.replace("’", "'");
}
if (this.lookup(sWord)) {
return true;
}
if (sWord.charAt(0)._isUpperCase()) {
if (sWord.length > 1) {
if (sWord._isTitle()) {
return !!this.lookup(sWord.toLowerCase());
}
if (sWord._isUpperCase()) {
if (this.bOptNumSigle) {
return true;
}
return !!(this.lookup(sWord.toLowerCase()) || this.lookup(sWord._toCapitalize()));
}
return !!this.lookup(sWord.slice(0, 1).toLowerCase() + sWord.slice(1));
} else {
return !!this.lookup(sWord.toLowerCase());
}
}
return false;
};
_convBytesToInteger (aBytes) {
// Byte order = Big Endian (bigger first)
let nVal = 0;
let nWeight = (aBytes.length - 1) * 8;
for (let n of aBytes) {
nVal += n << nWeight;
nWeight = nWeight - 8;
}
return nVal;
};
lookup (sWord) {
// returns true if sWord in dictionary (strict verification)
let iAddr = 0;
for (let c of sWord) {
if (!this.dChar.has(c)) {
return false;
}
iAddr = this._lookupArcNode(this.dChar.get(c), iAddr);
if (iAddr === null) {
return false;
}
}
return Boolean(this._convBytesToInteger(this.byDic.slice(iAddr, iAddr+this.nBytesArc)) & this._finalNodeMask);
};
getMorph (sWord) {
// retrieves morphologies list, different casing allowed
let l = this.morph(sWord);
if (sWord[0]._isUpperCase()) {
l = l.concat(this.morph(sWord.toLowerCase()));
if (sWord._isUpperCase() && sWord.length > 1) {
l = l.concat(this.morph(sWord._toCapitalize()));
}
}
return l;
};
// morph (sWord) {
// is defined in constructor
// };
// VERSION 1
_morph1 (sWord) {
// returns morphologies of sWord
let iAddr = 0;
for (let c of sWord) {
if (!this.dChar.has(c)) {
return [];
}
iAddr = this._lookupArcNode(this.dChar.get(c), iAddr);
if (iAddr === null) {
return [];
}
}
if (this._convBytesToInteger(this.byDic.slice(iAddr, iAddr+this.nBytesArc)) & this._finalNodeMask) {
let l = [];
let nRawArc = 0;
while (!(nRawArc & this._lastArcMask)) {
var iEndArcAddr = iAddr + this.nBytesArc;
nRawArc = this._convBytesToInteger(this.byDic.slice(iAddr, iEndArcAddr));
var nArc = nRawArc & this._arcMask;
if (nArc >= this.nChar) {
// This value is not a char, this is a stemming code
var sStem = ">" + this.funcStemming(sWord, this.lArcVal[nArc]);
// Now , we go to the next node and retrieve all following arcs values, all of them are tags
var iAddr2 = this._convBytesToInteger(this.byDic.slice(iEndArcAddr, iEndArcAddr+this.nBytesNodeAddress));
var nRawArc2 = 0;
while (!(nRawArc2 & this._lastArcMask)) {
var iEndArcAddr2 = iAddr2 + this.nBytesArc;
nRawArc2 = this._convBytesToInteger(this.byDic.slice(iAddr2, iEndArcAddr2));
l.push(sStem + " " + this.lArcVal[nRawArc2 & this._arcMask]);
iAddr2 = iEndArcAddr2+this.nBytesNodeAddress;
}
}
iAddr = iEndArcAddr + this.nBytesNodeAddress;
}
return l;
}
return [];
};
_stem1 (sWord) {
// returns stems list of sWord
let iAddr = 0;
for (let c of sWord) {
if (!this.dChar.has(c)) {
return [];
}
iAddr = this._lookupArcNode(this.dChar.get(c), iAddr);
if (iAddr === null) {
return [];
}
}
if (this._convBytesToInteger(this.byDic.slice(iAddr, iAddr+this.nBytesArc)) & this._finalNodeMask) {
let l = [];
let nRawArc = 0;
while (!(nRawArc & this._lastArcMask)) {
var iEndArcAddr = iAddr + this.nBytesArc;
nRawArc = this._convBytesToInteger(this.byDic.slice(iAddr, iEndArcAddr));
var nArc = nRawArc & this._arcMask;
if (nArc >= this.nChar) {
// This value is not a char, this is a stemming code
l.push(this.funcStemming(sWord, this.lArcVal[nArc]));
}
iAddr = iEndArcAddr + this.nBytesNodeAddress;
}
return l;
}
return [];
};
_lookupArcNode1 (nVal, iAddr) {
// looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None
while (true) {
let iEndArcAddr = iAddr+this.nBytesArc;
let nRawArc = this._convBytesToInteger(this.byDic.slice(iAddr, iEndArcAddr));
if (nVal == (nRawArc & this._arcMask)) {
// the value we are looking for
// we return the address of the next node
return this._convBytesToInteger(this.byDic.slice(iEndArcAddr, iEndArcAddr+this.nBytesNodeAddress));
}
else {
// value not found
if (nRawArc & this._lastArcMask) {
return null;
}
iAddr = iEndArcAddr + this.nBytesNodeAddress;
}
}
};
// VERSION 2
_morph2 (sWord) {
// to do
};
_stem2 (sWord) {
// to do
};
_lookupArcNode2 (nVal, iAddr) {
// to do
};
// VERSION 3
_morph3 (sWord) {
// to do
};
_stem3 (sWord) {
// to do
};
_lookupArcNode3 (nVal, iAddr) {
// to do
};
}
exports.IBDAWG = IBDAWG;
|
Added gc_core/js/jsex_map.js version [975706110f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
// Map
Map.prototype._shallowCopy = function () {
let oNewMap = new Map();
for (let [key, val] of this.entries()) {
oNewMap.set(key, val);
}
return oNewMap;
}
Map.prototype._get = function (key, defaultValue) {
let res = this.get(key);
if (res !== undefined) {
return res;
}
return defaultValue;
}
Map.prototype._toString = function () {
// Default .toString() gives nothing useful
let sRes = "{ ";
for (let [k, v] of this.entries()) {
sRes += (typeof k === "string") ? '"' + k + '": ' : k.toString() + ": ";
sRes += (typeof v === "string") ? '"' + v + '", ' : v.toString() + ", ";
}
sRes = sRes.slice(0, -2) + " }"
return sRes;
}
Map.prototype._update = function (dDict) {
for (let [k, v] of dDict.entries()) {
this.set(k, v);
}
}
Map.prototype._updateOnlyExistingKeys = function (dDict) {
for (let [k, v] of dDict.entries()) {
if (this.has(k)){
this.set(k, v);
}
}
}
|
Added gc_core/js/jsex_regex.js version [35ff67872c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
// regex
RegExp.prototype._exec2 = function (sText, aGroupsPos, aNegLookBefore=null) {
let m;
while ((m = this.exec(sText)) !== null) {
// we have to iterate over sText here too
// because first match doesn’t imply it’s a valid match according to negative lookbefore assertions,
// and even if first match is finally invalid, it doesn’t mean the following eligible matchs would be invalid too.
if (aNegLookBefore !== null) {
// check negative look before assertions
if ( !aNegLookBefore.some(sRegEx => (RegExp.leftContext.search(sRegEx) >= 0)) ) {
break;
}
} else {
break;
}
}
if (m === null) {
return null;
}
let codePos;
let iPos = 0;
m.start = [m.index];
m.end = [this.lastIndex];
if (m.length > 1) {
// there is subgroup(s)
if (aGroupsPos !== null) {
// aGroupsPos is defined
for (let i = 1; i <= m.length-1; i++) {
codePos = aGroupsPos[i-1];
if (typeof codePos === "number") {
// position as a number
m.start.push(m.index + codePos);
m.end.push(m.index + codePos + m[i].length);
} else if (codePos === "$") {
// at the end of the pattern
m.start.push(this.lastIndex - m[i].length);
m.end.push(this.lastIndex);
} else if (codePos === "w") {
// word in the middle of the pattern
iPos = m[0].search("[ ~’,()«»“”]"+m[i]+"[ ,’~()«»“”]") + 1 + m.index
m.start.push(iPos);
m.end.push(iPos + m[i].length)
} else if (codePos === "*") {
// anywhere
iPos = m[0].indexOf(m[i]) + m.index;
m.start.push(iPos);
m.end.push(iPos + m[i].length)
} else if (codePos === "**") {
// anywhere after previous group
iPos = m[0].indexOf(m[i], m.end[i-1]-m.index) + m.index;
m.start.push(iPos);
m.end.push(iPos + m[i].length)
} else if (codePos.startsWith(">")) {
// >x:_
// todo: look in substring x
iPos = m[0].indexOf(m[i]) + m.index;
m.start.push(iPos);
m.end.push(iPos + m[i].length);
} else {
console.error("# Error: unknown positioning code in regex [" + this.source + "], for group[" + i.toString() +"], code: [" + codePos + "]");
}
}
} else {
// no aGroupsPos
for (let subm of m.slice(1)) {
iPos = m[0].indexOf(subm) + m.index;
m.start.push(iPos);
m.end.push(iPos + subm.length);
}
}
}
return m;
}
|
Added gc_core/js/jsex_string.js version [c771aa921e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
// String
String.prototype._count = function (sSearch, bOverlapping) {
// http://jsperf.com/string-ocurrence-split-vs-match/8
if (sSearch.length <= 0) {
return this.length + 1;
}
let nOccur = 0;
let iPos = 0;
let nStep = (bOverlapping) ? 1 : sSearch.length;
while ((iPos = this.indexOf(sSearch, iPos)) >= 0) {
nOccur++;
iPos += nStep;
}
return nOccur;
}
String.prototype._isDigit = function () {
return (this.search(/^[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]+$/) !== -1);
}
String.prototype._isLowerCase = function () {
return (this.search(/^[a-zà-öø-ÿ0-9-]+$/) !== -1);
}
String.prototype._isUpperCase = function () {
return (this.search(/^[A-ZÀ-ÖØ-ߌ0-9-]+$/) !== -1);
}
String.prototype._isTitle = function () {
return (this.search(/^[A-ZÀ-ÖØ-ߌ][a-zà-öø-ÿ'’-]+$/) !== -1);
}
String.prototype._toCapitalize = function () {
return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
}
String.prototype._expand = function (oMatch) {
let sNew = this;
for (let i = 0; i < oMatch.length ; i++) {
let z = new RegExp("\\\\"+parseInt(i), "g");
sNew = sNew.replace(z, oMatch[i]);
}
return sNew;
}
String.prototype._trimRight = function (sChars) {
let z = new RegExp("["+sChars+"]+$");
return this.replace(z, "");
}
String.prototype._trimLeft = function (sChars) {
let z = new RegExp("^["+sChars+"]+");
return this.replace(z, "");
}
String.prototype._trim = function (sChars) {
let z1 = new RegExp("^["+sChars+"]+");
let z2 = new RegExp("["+sChars+"]+$");
return this.replace(z1, "").replace(z2, "");
}
|
Added gc_core/js/lang_core/gc_engine.js version [b4d754f9e9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 |
// Grammar checker engine
${string}
${regex}
${map}
function capitalizeArray (aArray) {
// can’t map on user defined function??
let aNew = [];
for (let i = 0; i < aArray.length; i = i + 1) {
aNew[i] = aArray[i]._toCapitalize();
}
return aNew;
}
const ibdawg = require("resource://grammalecte/ibdawg.js");
const helpers = require("resource://grammalecte/helpers.js");
const gc_options = require("resource://grammalecte/${lang}/gc_options.js");
const cr = require("resource://grammalecte/${lang}/cregex.js");
const text = require("resource://grammalecte/text.js");
const echo = require("resource://grammalecte/helpers.js").echo;
const lang = "${lang}";
const locales = ${loc};
const pkg = "${implname}";
const name = "${name}";
const version = "${version}";
const author = "${author}";
// commons regexes
const _zEndOfSentence = new RegExp ('([.?!:;…][ .?!… »”")]*|.$)', "g");
const _zBeginOfParagraph = new RegExp ("^[- –—.,;?!…]*", "ig");
const _zEndOfParagraph = new RegExp ("[- .,;?!…–—]*$", "ig");
// grammar rules and dictionary
//const _rules = require("./gc_rules.js");
const _rules = require("resource://grammalecte/${lang}/gc_rules.js");
let _dOptions = gc_options.dOpt._shallowCopy(); // duplication necessary, to be able to reset to default
let _aIgnoredRules = new Set();
let _oDict = null;
let _dAnalyses = new Map(); // cache for data from dictionary
///// Parsing
function parse (sText, sCountry="${country_default}", bDebug=false, bContext=false) {
// analyses the paragraph sText and returns list of errors
let dErrors;
let errs;
let sAlt = sText;
let dDA = new Map(); // Disamnbiguator
let dPriority = new Map(); // Key = position; value = priority
let sNew = "";
// parse paragraph
try {
[sNew, dErrors] = _proofread(sText, sAlt, 0, true, dDA, dPriority, sCountry, bDebug, bContext);
if (sNew) {
sText = sNew;
}
}
catch (e) {
helpers.logerror(e);
}
// cleanup
if (sText.includes(" ")) {
sText = sText.replace(/ /g, ' '); // nbsp
}
if (sText.includes(" ")) {
sText = sText.replace(/ /g, ' '); // snbsp
}
if (sText.includes("'")) {
sText = sText.replace(/'/g, "’");
}
if (sText.includes("‑")) {
sText = sText.replace(/‑/g, "-"); // nobreakdash
}
// parse sentence
for (let [iStart, iEnd] of _getSentenceBoundaries(sText)) {
if (4 < (iEnd - iStart) < 2000) {
dDA.clear();
//echo(sText.slice(iStart, iEnd));
try {
[_, errs] = _proofread(sText.slice(iStart, iEnd), sAlt.slice(iStart, iEnd), iStart, false, dDA, dPriority, sCountry, bDebug, bContext);
dErrors._update(errs);
}
catch (e) {
helpers.logerror(e);
}
}
}
return Array.from(dErrors.values());
}
function* _getSentenceBoundaries (sText) {
let mBeginOfSentence = _zBeginOfParagraph.exec(sText)
let iStart = _zBeginOfParagraph.lastIndex;
let m;
while ((m = _zEndOfSentence.exec(sText)) !== null) {
yield [iStart, _zEndOfSentence.lastIndex];
iStart = _zEndOfSentence.lastIndex;
}
}
function _proofread (s, sx, nOffset, bParagraph, dDA, dPriority, sCountry, bDebug, bContext) {
let dErrs = new Map();
let bChange = false;
let bIdRule = option('idrule');
let m;
let bCondMemo;
let nErrorStart;
for (let [sOption, lRuleGroup] of _getRules(bParagraph)) {
if (!sOption || option(sOption)) {
for (let [zRegex, bUppercase, sLineId, sRuleId, nPriority, lActions, lGroups, lNegLookBefore] of lRuleGroup) {
if (!_aIgnoredRules.has(sRuleId)) {
while ((m = zRegex._exec2(s, lGroups, lNegLookBefore)) !== null) {
bCondMemo = null;
/*if (bDebug) {
echo(">>>> Rule # " + sLineId + " - Text: " + s + " opt: "+ sOption);
}*/
for (let [sFuncCond, cActionType, sWhat, ...eAct] of lActions) {
// action in lActions: [ condition, action type, replacement/suggestion/action[, iGroup[, message, URL]] ]
try {
//echo(oEvalFunc[sFuncCond]);
bCondMemo = (!sFuncCond || oEvalFunc[sFuncCond](s, sx, m, dDA, sCountry, bCondMemo))
if (bCondMemo) {
switch (cActionType) {
case "-":
// grammar error
//echo("-> error detected in " + sLineId + "\nzRegex: " + zRegex.source);
nErrorStart = nOffset + m.start[eAct[0]];
if (!dErrs.has(nErrorStart) || nPriority > dPriority.get(nErrorStart)) {
dErrs.set(nErrorStart, _createError(s, sx, sWhat, nOffset, m, eAct[0], sLineId, sRuleId, bUppercase, eAct[1], eAct[2], bIdRule, sOption, bContext));
dPriority.set(nErrorStart, nPriority);
}
break;
case "~":
// text processor
//echo("-> text processor by " + sLineId + "\nzRegex: " + zRegex.source);
s = _rewrite(s, sWhat, eAct[0], m, bUppercase);
bChange = true;
if (bDebug) {
echo("~ " + s + " -- " + m[eAct[0]] + " # " + sLineId);
}
break;
case "=":
// disambiguation
//echo("-> disambiguation by " + sLineId + "\nzRegex: " + zRegex.source);
oEvalFunc[sWhat](s, m, dDA);
if (bDebug) {
echo("= " + m[0] + " # " + sLineId + "\nDA: " + dDA._toString());
}
break;
case ">":
// we do nothing, this test is just a condition to apply all following actions
break;
default:
echo("# error: unknown action at " + sLineId);
}
} else {
if (cActionType == ">") {
break;
}
}
}
catch (e) {
echo(s);
echo("# id-rule:" + sLineId);
helpers.logerror(e);
}
}
}
}
}
}
}
if (bChange) {
return [s, dErrs];
}
return [false, dErrs];
}
function _createError (s, sx, sRepl, nOffset, m, iGroup, sLineId, sRuleId, bUppercase, sMsg, sURL, bIdRule, sOption, bContext) {
let oErr = {};
oErr["nStart"] = nOffset + m.start[iGroup];
oErr["nEnd"] = nOffset + m.end[iGroup];
oErr["sLineId"] = sLineId;
oErr["sRuleId"] = sRuleId;
oErr["sType"] = (sOption) ? sOption : "notype";
// suggestions
if (sRepl[0] === "=") {
let sugg = oEvalFunc[sRepl.slice(1)](s, m);
if (sugg) {
if (bUppercase && m[iGroup].slice(0,1)._isUpperCase()) {
oErr["aSuggestions"] = capitalizeArray(sugg.split("|"));
} else {
oErr["aSuggestions"] = sugg.split("|");
}
} else {
oErr["aSuggestions"] = [];
}
} else if (sRepl == "_") {
oErr["aSuggestions"] = [];
} else {
if (bUppercase && m[iGroup].slice(0,1)._isUpperCase()) {
oErr["aSuggestions"] = capitalizeArray(sRepl._expand(m).split("|"));
} else {
oErr["aSuggestions"] = sRepl._expand(m).split("|");
}
}
// Message
if (sMsg[0] === "=") {
sMessage = oEvalFunc[sMsg.slice(1)](s, m)
} else {
sMessage = sMsg._expand(m);
}
if (bIdRule) {
sMessage += " #" + sLineId + " #" + sRuleId;
}
oErr["sMessage"] = sMessage;
// URL
oErr["URL"] = sURL || "";
// Context
if (bContext) {
oErr["sUnderlined"] = sx.slice(m.start[iGroup], m.end[iGroup]);
oErr["sBefore"] = sx.slice(Math.max(0, m.start[iGroup]-80), m.start[iGroup]);
oErr["sAfter"] = sx.slice(m.end[iGroup], m.end[iGroup]+80);
}
return oErr;
}
function _rewrite (s, sRepl, iGroup, m, bUppercase) {
// text processor: write sRepl in s at iGroup position"
let ln = m.end[iGroup] - m.start[iGroup];
let sNew = "";
if (sRepl === "*") {
sNew = " ".repeat(ln);
} else if (sRepl === ">" || sRepl === "_" || sRepl === "~") {
sNew = sRepl + " ".repeat(ln-1);
} else if (sRepl === "@") {
sNew = "@".repeat(ln);
} else if (sRepl.slice(0,1) === "=") {
sNew = oEvalFunc[sRepl.slice(1)](s, m);
sNew = sNew + " ".repeat(ln-sNew.length);
if (bUppercase && m[iGroup].slice(0,1)._isUpperCase()) {
sNew = sNew._toCapitalize();
}
} else {
sNew = sRepl._expand(m);
sNew = sNew + " ".repeat(ln-sNew.length);
}
//echo("\n"+s+"\nstart: "+m.start[iGroup]+" end:"+m.end[iGroup])
return s.slice(0, m.start[iGroup]) + sNew + s.slice(m.end[iGroup]);
}
function ignoreRule (sRuleId) {
_aIgnoredRules.add(sRuleId);
}
function resetIgnoreRules () {
_aIgnoredRules.clear();
}
function reactivateRule (sRuleId) {
_aIgnoredRules.delete(sRuleId);
}
function listRules (sFilter=null) {
// generator: returns tuple (sOption, sLineId, sRuleId)
try {
for ([sOption, lRuleGroup] of _getRules(true)) {
for ([_, _, sLineId, sRuleId, _, _] of lRuleGroup) {
if (!sFilter || sRuleId.test(sFilter)) {
yield [sOption, sLineId, sRuleId];
}
}
}
for ([sOption, lRuleGroup] of _getRules(false)) {
for ([_, _, sLineId, sRuleId, _, _] of lRuleGroup) {
if (!sFilter || sRuleId.test(sFilter)) {
yield [sOption, sLineId, sRuleId];
}
}
}
}
catch (e) {
helpers.logerror(e);
}
}
//////// init
function load () {
try {
_oDict = new ibdawg.IBDAWG("${js_binary_dic}");
}
catch (e) {
helpers.logerror(e);
}
}
function setOption (sOpt, bVal) {
if (_dOptions.has(sOpt)) {
_dOptions.set(sOpt, bVal);
}
}
function setOptions (dOpt) {
_dOptions._updateOnlyExistingKeys(dOpt);
}
function getOptions () {
return _dOptions;
}
function getDefaultOptions () {
return gc_options.dOpt._shallowCopy();
}
function resetOptions () {
_dOptions = gc_options.dOpt._shallowCopy();
}
function getDictionary () {
return _oDict;
}
function _getRules (bParagraph) {
if (!bParagraph) {
return _rules.lSentenceRules;
}
return _rules.lParagraphRules;
}
//////// common functions
function option (sOpt) {
// return true if option sOpt is active
return _dOptions.get(sOpt);
}
function displayInfo (dDA, aWord) {
// for debugging: info of word
if (!aWord) {
echo("> nothing to find");
return true;
}
if (!_dAnalyses.has(aWord[1]) && !_storeMorphFromFSA(aWord[1])) {
echo("> not in FSA");
return true;
}
if (dDA.has(aWord[0])) {
echo("DA: " + dDA.get(aWord[0]));
}
echo("FSA: " + _dAnalyses.get(aWord[1]));
return true;
}
function _storeMorphFromFSA (sWord) {
// retrieves morphologies list from _oDict -> _dAnalyses
//echo("register: "+sWord + " " + _oDict.getMorph(sWord).toString())
_dAnalyses.set(sWord, _oDict.getMorph(sWord));
return !!_dAnalyses.get(sWord);
}
function morph (dDA, aWord, sPattern, bStrict=true, bNoWord=false) {
// analyse a tuple (position, word), return true if sPattern in morphologies (disambiguation on)
if (!aWord) {
//echo("morph: noword, returns " + bNoWord);
return bNoWord;
}
//echo("aWord: "+aWord.toString());
if (!_dAnalyses.has(aWord[1]) && !_storeMorphFromFSA(aWord[1])) {
return false;
}
let lMorph = dDA.has(aWord[0]) ? dDA.get(aWord[0]) : _dAnalyses.get(aWord[1]);
//echo("lMorph: "+lMorph.toString());
if (lMorph.length === 0) {
return false;
}
//echo("***");
if (bStrict) {
return lMorph.every(s => (s.search(sPattern) !== -1));
}
return lMorph.some(s => (s.search(sPattern) !== -1));
}
function morphex (dDA, aWord, sPattern, sNegPattern, bNoWord=false) {
// analyse a tuple (position, word), returns true if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation on)
if (!aWord) {
//echo("morph: noword, returns " + bNoWord);
return bNoWord;
}
//echo("aWord: "+aWord.toString());
if (!_dAnalyses.has(aWord[1]) && !_storeMorphFromFSA(aWord[1])) {
return false;
}
let lMorph = dDA.has(aWord[0]) ? dDA.get(aWord[0]) : _dAnalyses.get(aWord[1]);
//echo("lMorph: "+lMorph.toString());
if (lMorph.length === 0) {
return false;
}
//echo("***");
// check negative condition
if (lMorph.some(s => (s.search(sNegPattern) !== -1))) {
return false;
}
// search sPattern
return lMorph.some(s => (s.search(sPattern) !== -1));
}
function analyse (sWord, sPattern, bStrict=true) {
// analyse a word, return true if sPattern in morphologies (disambiguation off)
if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) {
return false;
}
if (bStrict) {
return _dAnalyses.get(sWord).every(s => (s.search(sPattern) !== -1));
}
return _dAnalyses.get(sWord).some(s => (s.search(sPattern) !== -1));
}
function analysex (sWord, sPattern, sNegPattern) {
// analyse a word, returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation off)
if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) {
return false;
}
// check negative condition
if (_dAnalyses.get(sWord).some(s => (s.search(sNegPattern) !== -1))) {
return false;
}
// search sPattern
return _dAnalyses.get(sWord).some(s => (s.search(sPattern) !== -1));
}
function stem (sWord) {
// returns a list of sWord's stems
if (!sWord) {
return [];
}
if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) {
return [];
}
return [ for (s of _dAnalyses.get(sWord)) s.slice(1, s.indexOf(" ")) ];
}
//// functions to get text outside pattern scope
// warning: check compile_rules.py to understand how it works
function nextword (s, iStart, n) {
// get the nth word of the input string or empty string
let z = new RegExp("^( +[a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+){" + (n-1).toString() + "} +([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+)", "i");
let m = z.exec(s.slice(iStart));
if (!m) {
return null;
}
return [iStart + RegExp.lastIndex - m[2].length, m[2]];
}
function prevword (s, iEnd, n) {
// get the (-)nth word of the input string or empty string
let z = new RegExp("([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+) +([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+ +){" + (n-1).toString() + "}$", "i");
let m = z.exec(s.slice(0, iEnd));
if (!m) {
return null;
}
return [m.index, m[1]];
}
const _zNextWord = new RegExp ("^ +([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_][a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_-]*)", "i");
const _zPrevWord = new RegExp ("([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_][a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_-]*) +$", "i");
function nextword1 (s, iStart) {
// get next word (optimization)
let m = _zNextWord.exec(s.slice(iStart));
if (!m) {
return null;
}
return [iStart + RegExp.lastIndex - m[1].length, m[1]];
}
function prevword1 (s, iEnd) {
// get previous word (optimization)
//echo("prev1, s:"+s);
//echo("prev1, s.slice(0, iEnd):"+s.slice(0, iEnd));
let m = _zPrevWord.exec(s.slice(0, iEnd));
//echo("prev1, m:"+m);
if (!m) {
return null;
}
//echo("prev1: " + m.index + " " + m[1]);
return [m.index, m[1]];
}
function look (s, zPattern, zNegPattern=null) {
// seek zPattern in s (before/after/fulltext), if antipattern zNegPattern not in s
try {
if (zNegPattern && zNegPattern.test(s)) {
return false;
}
return zPattern.test(s);
}
catch (e) {
helpers.logerror(e);
}
return false;
}
function look_chk1 (dDA, s, nOffset, zPattern, sPatternGroup1, sNegPatternGroup1=null) {
// returns True if s has pattern zPattern and m.group(1) has pattern sPatternGroup1
let m = zPattern._exec2(s, null);
if (!m) {
return false;
}
try {
let sWord = m[1];
let nPos = m.start[1] + nOffset;
if (sNegPatternGroup1) {
return morphex(dDA, [nPos, sWord], sPatternGroup1, sNegPatternGroup1);
}
return morph(dDA, [nPos, sWord], sPatternGroup1, false);
}
catch (e) {
helpers.logerror(e);
return false;
}
}
//////// Disambiguator
function select (dDA, nPos, sWord, sPattern, lDefault=null) {
if (!sWord) {
return true;
}
if (dDA.has(nPos)) {
return true;
}
if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) {
return true;
}
//echo("morph: "+_dAnalyses.get(sWord).toString());
if (_dAnalyses.get(sWord).length === 1) {
return true;
}
let lSelect = [ for (sMorph of _dAnalyses.get(sWord)) if (sMorph.search(sPattern) !== -1) sMorph ];
//echo("lSelect: "+lSelect.toString());
if (lSelect.length > 0) {
if (lSelect.length != _dAnalyses.get(sWord).length) {
dDA.set(nPos, lSelect);
}
} else if (lDefault) {
dDA.set(nPos, lDefaul);
}
return true;
}
function exclude (dDA, nPos, sWord, sPattern, lDefault=null) {
if (!sWord) {
return true;
}
if (dDA.has(nPos)) {
return true;
}
if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) {
return true;
}
if (_dAnalyses.get(sWord).length === 1) {
return true;
}
let lSelect = [ for (sMorph of _dAnalyses.get(sWord)) if (sMorph.search(sPattern) === -1) sMorph ];
//echo("lSelect: "+lSelect.toString());
if (lSelect.length > 0) {
if (lSelect.length != _dAnalyses.get(sWord).length) {
dDA.set(nPos, lSelect);
}
} else if (lDefault) {
dDA.set(nPos, lDefault);
}
return true;
}
function define (dDA, nPos, lMorph) {
dDA.set(nPos, lMorph);
return true;
}
//////// GRAMMAR CHECKER PLUGINS
${pluginsJS}
${callablesJS}
exports.load = load;
exports.parse = parse;
exports.lang = lang;
exports.version = version;
exports.getDictionary = getDictionary;
exports.setOption = setOption;
exports.setOptions = setOptions;
exports.getOptions = getOptions;
exports.getDefaultOptions = getDefaultOptions;
exports.resetOptions = resetOptions;
exports.ignoreRule = ignoreRule;
exports.reactivateRule = reactivateRule;
exports.resetIgnoreRules = resetIgnoreRules;
exports.listRules = listRules;
|
Added gc_core/js/lang_core/gc_options.js version [3105c2862f].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Options for Grammalecte
${map}
const lStructOpt = ${lStructOpt};
const dOpt = new Map (${dOptJavaScript});
const dOptLabel = ${dOptLabel};
exports.lStructOpt = lStructOpt;
exports.dOpt = dOpt;
exports.dOptLabel = dOptLabel;
|
Added gc_core/js/lang_core/gc_rules.js version [c85bd666a1].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Grammar checker rules
"use strict";
${string}
${regex}
const lParagraphRules = ${paragraph_rules_JS};
const lSentenceRules = ${sentence_rules_JS};
exports.lParagraphRules = lParagraphRules;
exports.lSentenceRules = lSentenceRules;
|
Added gc_core/js/str_transform.js version [572c35f46a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
//// STRING TRANSFORMATION
var dSimilarChars = new Map ([
["a", "aàâáä"],
["à", "aàâáä"],
["â", "aàâáä"],
["á", "aàâáä"],
["ä", "aàâáä"],
["c", "cç"],
["ç", "cç"],
["e", "eéêèë"],
["é", "eéêèë"],
["ê", "eéêèë"],
["è", "eéêèë"],
["ë", "eéêèë"],
["i", "iîïíì"],
["î", "iîïíì"],
["ï", "iîïíì"],
["í", "iîïíì"],
["ì", "iîïíì"],
["o", "oôóòö"],
["ô", "oôóòö"],
["ó", "oôóòö"],
["ò", "oôóòö"],
["ö", "oôóòö"],
["u", "uûùüú"],
["û", "uûùüú"],
["ù", "uûùüú"],
["ü", "uûùüú"],
["ú", "uûùüú"]
]);
// Note: 48 is the ASCII code for "0"
// Suffix only
function getStemFromSuffixCode (sFlex, sSfxCode) {
if (sSfxCode == "0") {
return sFlex;
}
return sSfxCode[0] == '0' ? sFlex + sSfxCode.slice(1) : sFlex.slice(0, -(sSfxCode.charCodeAt(0)-48)) + sSfxCode.slice(1);
}
// Prefix and suffix
function getStemFromAffixCode (sFlex, sAffCode) {
if (sAffCode == "0") {
return sFlex;
}
if (!sAffCode.includes("/")) {
return "# error #";
}
var [sPfxCode, sSfxCode] = sAffCode.split('/');
sFlex = sPfxCode.slice(1) + sFlex.slice(sPfxCode.charCodeAt(0)-48);
return sSfxCode[0] == '0' ? sFlex + sSfxCode.slice(1) : sFlex.slice(0, -(sSfxCode.charCodeAt(0)-48)) + sSfxCode.slice(1);
}
exports.getStemFromSuffixCode = getStemFromSuffixCode;
exports.getStemFromAffixCode = getStemFromAffixCode;
|
Added gc_core/js/tests.js version [1893d7a17d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
// JavaScript
"use strict";
const helpers = require("resource://grammalecte/helpers.js");
class TestGrammarChecking {
constructor (gce) {
this.gce = gce;
this._aRuleTested = new Set();
};
* testParse (bDebug=false) {
const t0 = Date.now();
const aData = JSON.parse(helpers.loadFile("resource://grammalecte/"+this.gce.lang+"/tests_data.json")).aData;
//const aData = require("resource://grammalecte/"+this.gce.lang+"/tests_data.js").aData;
let nInvalid = 0
let nTotal = 0
let sErrorText;
let sSugg;
let sExpectedErrors;
let sTextToCheck;
let sFoundErrors;
let sListErr;
let sLineNum;
let i = 1;
let sUntestedRules = "";
let bShowUntested = false;
let zOption = /^__([a-zA-Z0-9]+)__ /;
let sOption;
let m;
yield "Tests [" + this.gce.lang + "]: " + aData.length.toString();
try {
for (let sLine of aData) {
sLineNum = sLine.slice(0,10).trim();
sLine = sLine.slice(10).trim();
if (sLine.length > 0 && !sLine.startsWith("#")) {
sOption = false;
m = zOption.exec(sLine);
if (m) {
sLine = sLine.slice(sLine.indexOf(" ")+1);
sOption = m[1];
}
if (sLine.includes("->>")) {
[sErrorText, sSugg] = sLine.split("->>");
sErrorText = sErrorText.trim();
sSugg = sSugg.trim();
} else {
sErrorText = sLine.trim();
}
sExpectedErrors = this._getExpectedErrors(sErrorText);
sTextToCheck = sErrorText.replace(/\{\{/g, "").replace(/\}\}/g, "");
[sFoundErrors, sListErr] = this._getFoundErrors(sTextToCheck, bDebug, sOption);
if (sExpectedErrors !== sFoundErrors) {
yield "\n" + i.toString() +
"\n# Line num: " + sLineNum +
"\n> to check: " + sTextToCheck +
"\n expected: " + sExpectedErrors +
"\n found: " + sFoundErrors +
"\n errors: \n" + sListErr;
nInvalid = nInvalid + 1
}
nTotal = nTotal + 1;
}
i = i + 1;
if (i % 100 === 0) {
yield i.toString();
}
}
bShowUntested = true;
}
catch (e) {
helpers.logerror(e);
}
if (bShowUntested) {
i = 0;
for (let [sOpt, sLineId, sRuleId] of gce.listRules()) {
if (!this._aRuleTested.has(sLineId) && !/^[0-9]+[sp]$/.test(sRuleId)) {
sUntestedRules += sRuleId + ", ";
i += 1;
}
}
if (i > 0) {
yield sUntestedRules + "\n[" + i.toString() + " untested rules]";
}
}
const t1 = Date.now();
yield "Tests parse finished in " + ((t1-t0)/1000).toString()
+ " s\nTotal errors: " + nInvalid.toString() + " / " + nTotal.toString();
};
_getExpectedErrors (sLine) {
try {
let sRes = " ".repeat(sLine.length);
let z = /\{\{.+?\}\}/g;
let m;
let i = 0;
while ((m = z.exec(sLine)) !== null) {
let nStart = m.index - (4 * i);
let nEnd = m.index + m[0].length - (4 * (i+1));
sRes = sRes.slice(0, nStart) + "~".repeat(nEnd - nStart) + sRes.slice(nEnd, -4);
i = i + 1;
// Warning! JS sucks: infinite loop if writing directly /\{\{.+?\}\}/g.exec(sLine)
// lines below to remove when I know why.
if (i > 10) {
console.log("\ninfinite loop?\nline:"+sLine+"\nm: "+ m.toString());
break;
}
}
return sRes;
}
catch (e) {
helpers.logerror(e);
}
return " ".repeat(sLine.length);
};
_getFoundErrors (sLine, bDebug, sOption) {
try {
let aErrs = [];
if (sOption) {
gce.setOption(sOption, true);
aErrs = this.gce.parse(sLine, "FR", bDebug);
gce.setOption(sOption, false);
} else {
aErrs = this.gce.parse(sLine, "FR", bDebug);
}
let sRes = " ".repeat(sLine.length);
let sListErr = "";
for (let dErr of aErrs) {
sRes = sRes.slice(0, dErr["nStart"]) + "~".repeat(dErr["nEnd"] - dErr["nStart"]) + sRes.slice(dErr["nEnd"]);
sListErr += " * {" + dErr['sLineId'] + " / " + dErr['sRuleId'] + "} at " + dErr['nStart'] + ":" + dErr['nEnd'] + "\n";
this._aRuleTested.add(dErr["sLineId"]);
}
return [sRes, sListErr];
}
catch (e) {
helpers.logerror(e);
}
return [" ".repeat(sLine.length), ""];
};
}
exports.TestGrammarChecking = TestGrammarChecking;
|
Added gc_core/js/text.js version [0a62428d8c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
// JavaScript
"use strict";
const helpers = require("resource://grammalecte/helpers.js");
function* getParagraph (sText) {
// generator: returns paragraphs of text
let iStart = 0;
let iEnd = 0;
sText = sText.replace("\r", "");
while ((iEnd = sText.indexOf("\n", iStart)) !== -1) {
yield sText.slice(iStart, iEnd);
iStart = iEnd + 1;
}
yield sText.slice(iStart);
}
function* wrap (sText, nWidth=80) {
// generator: returns text line by line
while (sText) {
if (sText.length >= nWidth) {
let nEnd = sText.lastIndexOf(" ", nWidth) + 1;
if (nEnd > 0) {
yield sText.slice(0, nEnd);
sText = sText.slice(nEnd);
} else {
yield sText.slice(0, nWidth);
sText = sText.slice(nWidth);
}
} else {
break;
}
}
yield sText;
}
function getReadableError (oErr) {
// Returns an error oErr as a readable error
try {
let s = "\n* " + oErr['nStart'] + ":" + oErr['nEnd'] + " # " + oErr['sRuleId']+" : ";
s += oErr["sMessage"];
if (oErr["aSuggestions"].length > 0) {
s += "\n > Suggestions : " + oErr["aSuggestions"].join(" | ");
}
if (oErr["URL"] !== "") {
s += "\n > URL: " + oErr["URL"];
}
return s;
}
catch (e) {
helpers.logerror(e);
return "\n# Error. Data: " + oErr.toString();
}
}
function addHtmlEntities (sParagraph) {
if (sParagraph.includes("&")) {
sParagraph = sParagraph.replace(/&/g, "&");
}
if (sParagraph.includes("<")) {
sParagraph = sParagraph.replace(/</g, "<").replace(/>/g, ">");
}
return sParagraph;
}
function createHTMLBlock (sParagraph, iParagraph) {
let sClassName = (sParagraph.includes('<u id="err')) ? " softred" : "";
return '<p id="paragr'+iParagraph.toString()+'" class="paragraph' + sClassName + '" lang="fr" spellcheck="false">' + sParagraph + '</p>\n'
+ '<div class="actions"><div id="end'+iParagraph.toString()+'" class="button red">×</div>'
+ '<div id="edit'+iParagraph.toString()+'" class="button">Éditer</div>'
+ '<div id="check'+iParagraph.toString()+'" class="button green">Réanalyser</div> </div>\n';
}
function tagParagraph (sParagraph, iParagraph, aGrammErr, aSpellErr, bDebug=false) {
// Returns a text with with underlined errors and messages in tooltip
try {
if (aGrammErr.length === 0 && aSpellErr.length === 0) {
return sParagraph;
}
aGrammErr.push(...aSpellErr);
aGrammErr.sort(function (a, b) {
if (a["nStart"] < b["nStart"])
return 1;
if (a["nStart"] > b["nStart"])
return -1;
return 0;
});
let nErr = aGrammErr.length - 1; // we count errors to give them an identifier
let nStartLastErr = sParagraph.length;
for (let oErr of aGrammErr) {
let sErrId = iParagraph.toString() + "_" + nErr.toString();
let nStart = oErr["nStart"];
let nEnd = oErr["nEnd"];
if (nEnd <= nStartLastErr) {
oErr["sId"] = sErrId;
if (oErr['sType'] !== 'WORD') {
// Grammar Error
sParagraph = sParagraph.slice(0, nStart)
+ '<u id="err' + sErrId + '" class="error '+oErr['sType']+'" href="#" onclick="return false;">'
+ sParagraph.slice(nStart, nEnd)
+ '<span id="tooltip' + sErrId + '" class="tooltip" contenteditable="false">'
+ getGrammarErrorHTML(oErr, bDebug) + '</span>'
+ "</u><!-- err_end -->" + sParagraph.slice(nEnd);
} else {
// Spelling error
sParagraph = sParagraph.slice(0, nStart)
+ '<u id="err' + sErrId + '" class="error spell" href="#" onclick="return false;">'
+ sParagraph.slice(nStart, nEnd)
+ '<span id="tooltip' + sErrId + '" class="tooltip" contenteditable="false">'
+ getSpellingErrorHTML(oErr) + '</span>'
+ "</u><!-- err_end -->" + sParagraph.slice(nEnd);
}
nStartLastErr = nStart;
}
nErr -= 1;
}
return sParagraph;
}
catch (e) {
helpers.logerror(e);
return "# Error.";
}
}
function getGrammarErrorHTML (oErr, bDebug=false) {
// Returns an error oErr as a readable error in HTML
try {
let sErr = '';
if (bDebug) {
sErr += '<em class="debug">'
+ '<i id="data'+oErr['sId']+'" class="data" hidden>'
+ oErr['nStart'] + ":" + oErr['nEnd'] + ' · #' + oErr['sRuleId'] + " </i>+</em>";
}
sErr += oErr["sMessage"];
sErr += ' <a id="ignore'+oErr['sId']+'" class="ignore" href="#" onclick="return false;">IGNORER</a>';
if (oErr["URL"] !== "") {
sErr += ' <a href="' + oErr["URL"] + '" onclick="return false;">Infos…</a>';
}
if (oErr["aSuggestions"].length > 0) {
sErr += '<br/><s>Suggestions :</s><br/>';
let iSugg = 0;
for (let sSugg of oErr["aSuggestions"]) {
sErr += '<a id="sugg' + oErr['sId'] + "-" + iSugg + '" class="sugg" href="#" onclick="return false;">' + sSugg + '</a> ';
iSugg += 1;
}
}
return sErr;
}
catch (e) {
helpers.logerror(e);
return '# Error. Data: ' + oErr.toString();
}
}
function getSpellingErrorHTML (oErr) {
// Returns an error oErr as a readable error in HTML
try {
let sErr = 'Mot inconnu du dictionnaire.';
sErr += ' <a id="ignore' + oErr['sId'] + '" class="ignore" href="#" onclick="return false;">IGNORER</a>';
sErr += '<br/><s>Suggestions :</s><br/>';
return sErr;
}
catch (e) {
helpers.logerror(e);
return '# Error. Data: ' + oErr.toString();
}
}
exports.getParagraph = getParagraph;
exports.addHtmlEntities = addHtmlEntities;
exports.createHTMLBlock = createHTMLBlock;
exports.tagParagraph = tagParagraph;
exports.getReadableError = getReadableError;
|
Added gc_core/js/tokenizer.js version [d06151ccd7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
// JavaScript
// Very simple tokenizer
"use strict";
const helpers = require("resource://grammalecte/helpers.js");
const aPatterns = {
// All regexps must start with ^.
"default":
[
[/^[ \t]+/, 'SPACE'],
[/^[,.;:!?…«»“”"()/·]+/, 'SEPARATOR'],
[/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.])[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_.\/?&!%=+*"'@$#-]+/, 'LINK'],
[/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_-]+/, 'TAG'],
[/^<[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+.*?>|<\/[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+ *>/, 'HTML'],
[/^\[\/?[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+\]/, 'PSEUDOHTML'],
[/^&\w+;(?:\w+;|)/, 'HTMLENTITY'],
[/^\d\d?h\d\d\b/, 'HOUR'],
[/^-?\d+(?:[.,]\d+|)/, 'NUM'],
[/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+)*/, 'WORD']
],
"fr":
[
[/^[ \t]+/, 'SPACE'],
[/^[,.;:!?…«»“”"()/·]+/, 'SEPARATOR'],
[/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.])[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_.\/?&!%=+*"'@$#-]+/, 'LINK'],
[/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_-]+/, 'TAG'],
[/^<[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+.*?>|<\/[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+ *>/, 'HTML'],
[/^\[\/?[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+\]/, 'PSEUDOHTML'],
[/^&\w+;(?:\w+;|)/, 'HTMLENTITY'],
[/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`]/i, 'ELPFX'],
[/^\d\d?[hm]\d\d\b/, 'HOUR'],
[/^\d+(?:er|nd|e|de|ième|ème|eme)\b/, 'ORDINAL'],
[/^-?\d+(?:[.,]\d+|)/, 'NUM'],
[/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+)*/, 'WORD']
]
}
class Tokenizer {
constructor (sLang) {
this.sLang = sLang;
if (!aPatterns.hasOwnProperty(sLang)) {
this.sLang = "default";
}
this.aRules = aPatterns[sLang];
};
* genTokens (sText) {
let m;
let i = 0;
while (sText) {
let nCut = 1;
for (let [zRegex, sType] of this.aRules) {
try {
if ((m = zRegex.exec(sText)) !== null) {
yield { "sType": sType, "sValue": m[0], "nStart": i, "nEnd": i + m[0].length }
nCut = m[0].length;
break;
}
}
catch (e) {
helpers.logerror(e);
}
}
i += nCut;
sText = sText.slice(nCut);
}
}
}
exports.Tokenizer = Tokenizer;
|
Added gc_core/py/README.txt version [ffaeafbfd2].
> > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
= GRAMMALECTE =
Grammar checker
By Olivier R.
Website: http://grammalecte.net
License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html
Grammalecte is a fork of Lightproof
from László Németh (nemeth /at/ numbertext /dot/ org)
http://cgit.freedesktop.org/libreoffice/lightproof/
Required : Python 3.3
|
Added gc_core/py/__init__.py version [a7ffc6f8bf].
Added gc_core/py/dawg.py version [a9c487538f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 |
#!python3
# FSA DICTIONARY BUILDER
#
# by Olivier R.
# License: MPL 2
#
# This tool encodes lexicon into an indexable binary dictionary
# Input files MUST be encoded in UTF-8.
import sys
import os
import collections
from . import str_transform as st
from .progressbar import ProgressBar
class DAWG:
"""DIRECT ACYCLIC WORD GRAPH"""
# This code is inspired from Steve Hanov’s DAWG, 2011. (http://stevehanov.ca/blog/index.php?id=115)
# We store suffix/affix codes and tags within the graph after the “real” word.
# A word is a list of numbers [ c1, c2, c3 . . . cN, iAffix, iTags]
# Each arc is an index in self.lArcVal, where are stored characters, suffix/affix codes for stemming and tags.
# Important: As usual, the last node (after ‘iTags’) is tagged final, AND the node after ‘cN’ is ALSO tagged final.
def __init__ (self, spfSrc, sLangName, cStemming):
print("===== Direct Acyclic Word Graph - Minimal Acyclic Finite State Automaton =====")
cStemming = cStemming.upper()
if cStemming == "A":
funcStemmingGen = st.defineAffixCode
elif cStemming == "S":
funcStemmingGen = st.defineSuffixCode
elif cStemming == "N":
funcStemmingGen = st.noStemming
else:
print("# Error code: {}".format(cStemming))
exit()
lEntry = []
lChar = ['']; dChar = {}; nChar = 1; dCharOccur = {}
lAff = []; dAff = {}; nAff = 0; dAffOccur = {}
lTag = []; dTag = {}; nTag = 0; dTagOccur = {}
nErr = 0
# read lexicon
with open(spfSrc, 'r', encoding='utf-8') as hSrc:
print(" > Reading lexicon: " + spfSrc + " ...")
for line in hSrc:
line = line.strip()
if not (line.startswith('#') or line == ''):
try:
flex, stem, tag = line.split("\t")
except:
nErr += 1
continue
# chars
for c in flex:
if c not in dChar:
dChar[c] = nChar
lChar.append(c)
nChar += 1
dCharOccur[c] = dCharOccur.get(c, 0) + 1
# affixes to find stem from flexion
aff = funcStemmingGen(flex, stem)
if aff not in dAff:
dAff[aff] = nAff
lAff.append(aff)
nAff += 1
dAffOccur[aff] = dCharOccur.get(aff, 0) + 1
# tags
if tag not in dTag:
dTag[tag] = nTag
lTag.append(tag)
nTag += 1
dTagOccur[tag] = dTagOccur.get(tag, 0) + 1
lEntry.append((flex, dAff[aff], dTag[tag]))
hSrc.close()
if nErr:
print(" # Lines ignored: {:>10}".format(nErr))
if not(lEntry):
print(" # Empty lexicon")
exit()
# Preparing DAWG
print(" > Preparing list of words")
lVal = lChar + lAff + lTag
lWord = [ [dChar[c] for c in sFlex] + [iAff+nChar] + [iTag+nChar+nAff] for sFlex, iAff, iTag in lEntry ]
lEntry = None
# Dictionary of arc values occurrency, to sort arcs of each node
dValOccur = dict( [ (dChar[c], dCharOccur[c]) for c in dChar ] \
+ [ (dAff[aff]+nChar, dAffOccur[aff]) for aff in dAff ] \
+ [ (dTag[tag]+nChar+nAff, dTagOccur[tag]) for tag in dTag ] )
#with open(spfSrc[:-8]+".valuesfreq.txt", 'w', encoding='utf-8') as hFreqDst: # DEBUG
# for iKey, nOcc in sorted(dValOccur.items(), key=lambda t: t[1], reverse=True):
# hFreqDst.write("{}: {}\n".format(lVal[iKey], nOcc))
# hFreqDst.close()
self.sFile = spfSrc
self.sLang = sLangName
self.nEntry = len(lWord)
self.previousWord = []
DawgNode.resetNextId()
self.root = DawgNode()
self.uncheckedNodes = [] # list of nodes that have not been checked for duplication.
self.minimizedNodes = {} # list of unique nodes that have been checked for duplication.
self.sortedNodes = [] # version 2 and 3
self.nNode = 0
self.nArc = 0
self.dChar = dChar
self.nChar = len(dChar)
self.nAff = nAff
self.lArcVal = lVal
self.nArcVal = len(lVal)
self.nTag = self.nArcVal - self.nChar - nAff
self.cStemming = cStemming.upper()
if cStemming == "A":
self.funcStemming = st.getStemFromAffixCode
elif cStemming == "S":
self.funcStemming = st.getStemFromSuffixCode
else:
self.funcStemming = st.noStemming
# build
lWord.sort()
oProgBar = ProgressBar(0, len(lWord))
for word in lWord:
self.insert(word)
oProgBar.increment(1)
oProgBar.done()
self.finish()
self.countNodes()
self.countArcs()
self.sortNodes()
self.sortNodeArcs(dValOccur)
self.displayInfo()
# BUILD DAWG
def insert (self, word):
if word < self.previousWord:
sys.exit("# Error: Words must be inserted in alphabetical order.")
# find common prefix between word and previous word
commonPrefix = 0
for i in range(min(len(word), len(self.previousWord))):
if word[i] != self.previousWord[i]:
break
commonPrefix += 1
# Check the uncheckedNodes for redundant nodes, proceeding from last
# one down to the common prefix size. Then truncate the list at that point.
self._minimize(commonPrefix)
# add the suffix, starting from the correct node mid-way through the graph
if len(self.uncheckedNodes) == 0:
oNode = self.root
else:
oNode = self.uncheckedNodes[-1][2]
iChar = commonPrefix
for c in word[commonPrefix:]:
oNextNode = DawgNode()
oNode.arcs[c] = oNextNode
self.uncheckedNodes.append((oNode, c, oNextNode))
if iChar == (len(word) - 2):
oNode.final = True
iChar += 1
oNode = oNextNode
oNode.final = True
self.previousWord = word
def finish (self):
"minimize unchecked nodes"
self._minimize(0)
def _minimize (self, downTo):
# proceed from the leaf up to a certain point
for i in range( len(self.uncheckedNodes)-1, downTo-1, -1 ):
(parent, char, child) = self.uncheckedNodes[i]
if child in self.minimizedNodes:
# replace the child with the previously encountered one
parent.arcs[char] = self.minimizedNodes[child]
else:
# add the state to the minimized nodes.
self.minimizedNodes[child] = child
self.uncheckedNodes.pop()
def countNodes (self):
self.nNode = len(self.minimizedNodes)
def countArcs (self):
self.nArc = 0
for node in self.minimizedNodes:
self.nArc += len(node.arcs)
def sortNodeArcs (self, dValOccur):
print(" > Sort node arcs")
self.root.sortArcs(dValOccur)
for oNode in self.minimizedNodes:
oNode.sortArcs(dValOccur)
def sortNodes (self):
print(" > Sort nodes")
for oNode in self.root.arcs.values():
self._parseNodes(oNode)
def _parseNodes (self, oNode):
# Warning: recursive method
if oNode.pos > 0:
return
oNode.setPos()
self.sortedNodes.append(oNode)
for oNextNode in oNode.arcs.values():
self._parseNodes(oNextNode)
def lookup (self, sWord):
oNode = self.root
for c in sWord:
if self.dChar.get(c, '') not in oNode.arcs:
return False
oNode = oNode.arcs[self.dChar[c]]
return oNode.final
def morph (self, sWord):
oNode = self.root
for c in sWord:
if self.dChar.get(c, '') not in oNode.arcs:
return ''
oNode = oNode.arcs[self.dChar[c]]
if oNode.final:
s = "* "
for arc in oNode.arcs:
if arc >= self.nChar:
s += " [" + self.funcStemming(sWord, self.lArcVal[arc])
oNode2 = oNode.arcs[arc]
for arc2 in oNode2.arcs:
s += " / " + self.lArcVal[arc2]
s += "]"
return s
return ''
def displayInfo (self):
print(" * {:<12} {:>16,}".format("Entries:", self.nEntry))
print(" * {:<12} {:>16,}".format("Characters:", self.nChar))
print(" * {:<12} {:>16,}".format("Affixes:", self.nAff))
print(" * {:<12} {:>16,}".format("Tags:", self.nTag))
print(" * {:<12} {:>16,}".format("Arc values:", self.nArcVal))
print(" * {:<12} {:>16,}".format("Nodes:", self.nNode))
print(" * {:<12} {:>16,}".format("Arcs:", self.nArc))
print(" * {:<12} {:>16}".format("Stemming:", self.cStemming + "FX"))
def getArcStats (self):
d = {}
for oNode in self.minimizedNodes:
n = len(oNode.arcs)
d[n] = d.get(n, 0) + 1
s = " * Nodes:\n"
for n in d:
s = s + " {:>9} nodes have {:>3} arcs\n".format(d[n], n)
return s
def writeInfo (self, sPathFile):
print(" > Write informations")
with open(sPathFile, 'w', encoding='utf-8', newline="\n") as hDst:
hDst.write(self.getArcStats())
hDst.write("\n * Values:\n")
for i, s in enumerate(self.lArcVal):
hDst.write(" {:>6}. {}\n".format(i, s))
hDst.close()
# BINARY CONVERSION
def createBinary (self, sPathFile, nMethod, bDebug=False):
print(" > Write DAWG as an indexable binary dictionary [method: %d]" % nMethod)
if nMethod == 1:
self.nBytesArc = ( ( (self.nArcVal).bit_length() + 2 ) // 8 ) + 1 # We add 2 bits. See DawgNode.convToBytes1()
self._calcNumBytesNodeAddress()
self._calcNodesAddress1()
elif nMethod == 2:
self.nBytesArc = ( ( (self.nArcVal).bit_length() + 3 ) // 8 ) + 1 # We add 3 bits. See DawgNode.convToBytes2()
self._calcNumBytesNodeAddress()
self._calcNodesAddress2()
elif nMethod == 3:
self.nBytesArc = ( ( (self.nArcVal).bit_length() + 3 ) // 8 ) + 1 # We add 3 bits. See DawgNode.convToBytes3()
self.nBytesOffset = 1
self.nMaxOffset = (2 ** (self.nBytesOffset * 8)) - 1
self._calcNumBytesNodeAddress()
self._calcNodesAddress3()
else:
print(" # Error: unknown compression method")
print(" Arc values (chars, affixes and tags): {} -> {} bytes".format( self.nArcVal, len("\t".join(self.lArcVal).encode("utf-8")) ))
print(" Arc size: {} bytes, Address size: {} bytes -> {} * {} = {} bytes".format( self.nBytesArc, self.nBytesNodeAddress, \
self.nBytesArc+self.nBytesNodeAddress, self.nArc, \
(self.nBytesArc+self.nBytesNodeAddress)*self.nArc ))
self._writeBinary(sPathFile, nMethod)
if bDebug:
self._writeNodes(sPathFile, nMethod)
def _calcNumBytesNodeAddress (self):
"how many bytes needed to store all nodes/arcs in the binary dictionary"
self.nBytesNodeAddress = 1
while ((self.nBytesArc + self.nBytesNodeAddress) * self.nArc) > (2 ** (self.nBytesNodeAddress * 8)):
self.nBytesNodeAddress += 1
def _calcNodesAddress1 (self):
nBytesNode = self.nBytesArc + self.nBytesNodeAddress
iAddr = len(self.root.arcs) * nBytesNode
for oNode in self.minimizedNodes:
oNode.addr = iAddr
iAddr += max(len(oNode.arcs), 1) * nBytesNode
def _calcNodesAddress2 (self):
nBytesNode = self.nBytesArc + self.nBytesNodeAddress
iAddr = len(self.root.arcs) * nBytesNode
for oNode in self.sortedNodes:
oNode.addr = iAddr
iAddr += max(len(oNode.arcs), 1) * nBytesNode
for oNextNode in oNode.arcs.values():
if (oNode.pos + 1) == oNextNode.pos:
iAddr -= self.nBytesNodeAddress
#break
def _calcNodesAddress3 (self):
nBytesNode = self.nBytesArc + self.nBytesNodeAddress
# theorical nodes size if only addresses and no offset
self.root.size = len(self.root.arcs) * nBytesNode
for oNode in self.sortedNodes:
oNode.size = max(len(oNode.arcs), 1) * nBytesNode
# rewind and calculate dropdown from the end, several times
nDiff = self.nBytesNodeAddress - self.nBytesOffset
bEnd = False
while not bEnd:
bEnd = True
# recalculate addresses
iAddr = self.root.size
for oNode in self.sortedNodes:
oNode.addr = iAddr
iAddr += oNode.size
# rewind and calculate dropdown from the end, several times
for i in range(self.nNode-1, -1, -1):
nSize = max(len(self.sortedNodes[i].arcs), 1) * nBytesNode
for oNextNode in self.sortedNodes[i].arcs.values():
if 1 < (oNextNode.addr - self.sortedNodes[i].addr) < self.nMaxOffset:
nSize -= nDiff
if self.sortedNodes[i].size != nSize:
self.sortedNodes[i].size = nSize
bEnd = False
def _writeBinary (self, sPathFile, nMethod):
"""
Format of the binary indexable dictionary:
Each section is separated with 4 bytes of \0
- Section Header:
/pyfsa/[version]
* version is an ASCII string
- Section Informations:
/[tag_lang]
/[number of chars]
/[number of bytes for each arc]
/[number of bytes for each address node]
/[number of entries]
/[number of nodes]
/[number of arcs]
/[number of affixes]
* each field is a ASCII string
/[stemming code]
* "S" means stems are generated by /suffix_code/, "A" means they are generated by /affix_code/
See defineSuffixCode() and defineAffixCode() for details.
"N" means no stemming
- Section Values:
* a list of strings encoded in binary from utf-8, each value separated with a tabulation
- Section Word Graph (nodes / arcs)
* A list of nodes which are a list of arcs with an address of the next node.
See DawgNode.convToBytes() for details.
"""
if not sPathFile.endswith(".bdic"):
sPathFile += "."+str(nMethod)+".bdic"
with open(sPathFile, 'wb') as hDst:
# header
hDst.write("/pyfsa/{}/".format(nMethod).encode("utf-8"))
hDst.write(b"\0\0\0\0")
# infos
hDst.write("{}/{}/{}/{}/{}/{}/{}/{}/{}".format(self.sLang, self.nChar, self.nBytesArc, self.nBytesNodeAddress, \
self.nEntry, self.nNode, self.nArc, self.nAff, self.cStemming).encode("utf-8"))
hDst.write(b"\0\0\0\0")
# lArcVal
hDst.write("\t".join(self.lArcVal).encode("utf-8"))
hDst.write(b"\0\0\0\0")
# DAWG: nodes / arcs
if nMethod == 1:
hDst.write(self.root.convToBytes1(self.nBytesArc, self.nBytesNodeAddress))
for oNode in self.minimizedNodes:
hDst.write(oNode.convToBytes1(self.nBytesArc, self.nBytesNodeAddress))
elif nMethod == 2:
hDst.write(self.root.convToBytes2(self.nBytesArc, self.nBytesNodeAddress))
for oNode in self.sortedNodes:
hDst.write(oNode.convToBytes2(self.nBytesArc, self.nBytesNodeAddress))
elif nMethod == 3:
hDst.write(self.root.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset))
for oNode in self.sortedNodes:
hDst.write(oNode.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset))
hDst.close()
def _writeNodes (self, sPathFile, nMethod):
"for debugging only"
print(" > Write nodes")
with open(sPathFile+".nodes."+str(nMethod)+".txt", 'w', encoding='utf-8', newline="\n") as hDst:
if nMethod == 1:
hDst.write(self.root.getTxtRepr1(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n")
#hDst.write( ''.join( [ "%02X " % z for z in self.root.convToBytes1(self.nBytesArc, self.nBytesNodeAddress) ] ).strip() )
for oNode in self.minimizedNodes:
hDst.write(oNode.getTxtRepr1(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n")
if nMethod == 2:
hDst.write(self.root.getTxtRepr2(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n")
for oNode in self.sortedNodes:
hDst.write(oNode.getTxtRepr2(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n")
if nMethod == 3:
hDst.write(self.root.getTxtRepr3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset, self.lArcVal)+"\n")
#hDst.write( ''.join( [ "%02X " % z for z in self.root.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset) ] ).strip() )
for oNode in self.sortedNodes:
hDst.write(oNode.getTxtRepr3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset, self.lArcVal)+"\n")
hDst.close()
def writeResults (self, sPathFile):
bFileExits = os.path.isfile("_lexicons.res.txt")
with open("_lexicons.res.txt", "a", encoding='utf-8', newline="\n") as hDst:
sFormat1 = "{:<12} {:>12} {:>5} {:>8} {:>8} {:>6} {:>8} {:>9} {:>9} {:>15} {:>12} {:>12}\n"
sFormat2 = "{:<12} {:>12,} {:>5,} {:>8,} {:>8} {:>6,} {:>8,} {:>9,} {:>9,} {:>15,} {:>12,} {:>12,}\n"
if not bFileExits:
hDst.write(sFormat1.format("Lexicon", "Entries", "Chars", "Affixes", "Stemming", "Tags", "Values", "Nodes", "Arcs", "Lexicon (Kb)", "Dict (Kb)", "LT Dict (Kb)"))
hDst.write(sFormat2.format(self.sLang, self.nEntry, self.nChar, self.nAff, self.cStemming + "FX", self.nTag, self.nArcVal, \
self.nNode, self.nArc, os.path.getsize(self.sFile), os.path.getsize(sPathFile), \
os.path.getsize("cfsa/dict/{}.dict".format(self.sLang)) if os.path.isfile("cfsa/dict/{}.dict".format(self.sLang)) else 0))
hDst.close()
class DawgNode:
NextId = 0
NextPos = 1 # (version 2)
def __init__ (self):
self.i = DawgNode.NextId
DawgNode.NextId += 1
self.final = False
self.arcs = {} # key: arc value; value: a node
self.addr = 0 # address in the binary dictionary
self.pos = 0 # position in the binary dictionary (version 2)
self.size = 0 # size of node in bytes (version 3)
@classmethod
def resetNextId (cls):
cls.NextId = 0
def setPos (self): # version 2
self.pos = DawgNode.NextPos
DawgNode.NextPos += 1
def __str__ (self):
# Caution! this function is used for hashing and comparison!
l = []
if self.final:
l.append("1")
else:
l.append("0")
for (key, node) in self.arcs.items():
l.append(str(key))
l.append(str(node.i))
return "_".join(l)
def __hash__ (self):
# Used as a key in a python dictionary.
return self.__str__().__hash__()
def __eq__ (self, other):
# Used as a key in a python dictionary.
# Nodes are equivalent if they have identical arcs, and each identical arc leads to identical states.
return self.__str__() == other.__str__()
def sortArcs (self, dValOccur):
self.arcs = collections.OrderedDict(sorted(self.arcs.items(), key=lambda t: dValOccur[t[0]], reverse=True))
# VERSION 1 =====================================================================================================
def convToBytes1 (self, nBytesArc, nBytesNodeAddress):
"""
Node scheme:
- Arc length is defined by nBytesArc
- Address length is defined by nBytesNodeAddress
| Arc | Address of next node |
| | |
/---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
\---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/
[...]
/---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
\---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/
^ ^
| |
| |
| \___ if 1, last arc of this node
\_____ if 1, this node is final (only on the first arc)
"""
nArc = len(self.arcs)
nFinalNodeMask = 1 << ((nBytesArc*8)-1)
nFinalArcMask = 1 << ((nBytesArc*8)-2)
if len(self.arcs) == 0:
val = nFinalNodeMask | nFinalArcMask
by = val.to_bytes(nBytesArc, byteorder='big')
by += (0).to_bytes(nBytesNodeAddress, byteorder='big')
return by
by = b""
for i, arc in enumerate(self.arcs, 1):
val = arc
if i == 1 and self.final:
val = val | nFinalNodeMask
if i == nArc:
val = val | nFinalArcMask
by += val.to_bytes(nBytesArc, byteorder='big')
by += self.arcs[arc].addr.to_bytes(nBytesNodeAddress, byteorder='big')
return by
def getTxtRepr1 (self, nBytesArc, nBytesNodeAddress, lVal):
nArc = len(self.arcs)
nFinalNodeMask = 1 << ((nBytesArc*8)-1)
nFinalArcMask = 1 << ((nBytesArc*8)-2)
s = "i{:_>10} -- #{:_>10}\n".format(self.i, self.addr)
if len(self.arcs) == 0:
s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format("", bin(nFinalNodeMask | nFinalArcMask)[2:], "0", "0")
return s
for i, arc in enumerate(self.arcs, 1):
val = arc
if i == 1 and self.final:
val = val | nFinalNodeMask
if i == nArc:
val = val | nFinalArcMask
s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr)
return s
# VERSION 2 =====================================================================================================
def convToBytes2 (self, nBytesArc, nBytesNodeAddress):
"""
Node scheme:
- Arc length is defined by nBytesArc
- Address length is defined by nBytesNodeAddress
| Arc | Address of next node |
| | |
/---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
\---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/
[...]
/---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
\---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/
^ ^ ^
| | |
| | \_ if 1, caution, no address: next node is the following node
| \___ if 1, last arc of this node
\_____ if 1, this node is final (only on the first arc)
"""
nArc = len(self.arcs)
nFinalNodeMask = 1 << ((nBytesArc*8)-1)
nFinalArcMask = 1 << ((nBytesArc*8)-2)
nNextNodeMask = 1 << ((nBytesArc*8)-3)
if len(self.arcs) == 0:
val = nFinalNodeMask | nFinalArcMask
by = val.to_bytes(nBytesArc, byteorder='big')
by += (0).to_bytes(nBytesNodeAddress, byteorder='big')
return by
by = b""
for i, arc in enumerate(self.arcs, 1):
val = arc
if i == 1 and self.final:
val = val | nFinalNodeMask
if i == nArc:
val = val | nFinalArcMask
if (self.pos + 1) == self.arcs[arc].pos and self.i != 0:
val = val | nNextNodeMask
by += val.to_bytes(nBytesArc, byteorder='big')
else:
by += val.to_bytes(nBytesArc, byteorder='big')
by += self.arcs[arc].addr.to_bytes(nBytesNodeAddress, byteorder='big')
return by
def getTxtRepr2 (self, nBytesArc, nBytesNodeAddress, lVal):
nArc = len(self.arcs)
nFinalNodeMask = 1 << ((nBytesArc*8)-1)
nFinalArcMask = 1 << ((nBytesArc*8)-2)
nNextNodeMask = 1 << ((nBytesArc*8)-3)
s = "i{:_>10} -- #{:_>10}\n".format(self.i, self.addr)
if nArc == 0:
s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format("", bin(nFinalNodeMask | nFinalArcMask)[2:], "0", "0")
return s
for i, arc in enumerate(self.arcs, 1):
val = arc
if i == 1 and self.final:
val = val | nFinalNodeMask
if i == nArc:
val = val | nFinalArcMask
if (self.pos + 1) == self.arcs[arc].pos and self.i != 0:
val = val | nNextNodeMask
s += " {:<20} {:0>16}\n".format(lVal[arc], bin(val)[2:], "")
else:
s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr)
return s
# VERSION 3 =====================================================================================================
def convToBytes3 (self, nBytesArc, nBytesNodeAddress, nBytesOffset):
"""
Node scheme:
- Arc length is defined by nBytesArc
- Address length is defined by nBytesNodeAddress
- Offset length is defined by nBytesOffset
| Arc | Address of next node or offset to next node |
| | |
/---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\
|1|0|0| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
\---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/
[...]
/---------------\ /---------------\ /---------------\
|0|0|1| | | | | | | | | | | | | | | | | | | | | | | | Offsets are shorter than addresses
\---------------/ \---------------/ \---------------/
/---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\
|0|1|0| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
\---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/
^ ^ ^
| | |
| | \_ if 1, offset instead of address of next node
| \___ if 1, last arc of this node
\_____ if 1, this node is final (only on the first arc)
"""
nArc = len(self.arcs)
nFinalNodeMask = 1 << ((nBytesArc*8)-1)
nFinalArcMask = 1 << ((nBytesArc*8)-2)
nNextNodeMask = 1 << ((nBytesArc*8)-3)
nMaxOffset = (2 ** (nBytesOffset * 8)) - 1
if nArc == 0:
val = nFinalNodeMask | nFinalArcMask
by = val.to_bytes(nBytesArc, byteorder='big')
by += (0).to_bytes(nBytesNodeAddress, byteorder='big')
return by
by = b""
for i, arc in enumerate(self.arcs, 1):
val = arc
if i == 1 and self.final:
val = val | nFinalNodeMask
if i == nArc:
val = val | nFinalArcMask
if 1 < (self.arcs[arc].addr - self.addr) < nMaxOffset and self.i != 0:
val = val | nNextNodeMask
by += val.to_bytes(nBytesArc, byteorder='big')
by += (self.arcs[arc].addr-self.addr).to_bytes(nBytesOffset, byteorder='big')
else:
by += val.to_bytes(nBytesArc, byteorder='big')
by += self.arcs[arc].addr.to_bytes(nBytesNodeAddress, byteorder='big')
return by
def getTxtRepr3 (self, nBytesArc, nBytesNodeAddress, nBytesOffset, lVal):
nArc = len(self.arcs)
nFinalNodeMask = 1 << ((nBytesArc*8)-1)
nFinalArcMask = 1 << ((nBytesArc*8)-2)
nNextNodeMask = 1 << ((nBytesArc*8)-3)
nMaxOffset = (2 ** (nBytesOffset * 8)) - 1
s = "i{:_>10} -- #{:_>10} ({})\n".format(self.i, self.addr, self.size)
if nArc == 0:
s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format("", bin(nFinalNodeMask | nFinalArcMask)[2:], "0", "0")
return s
for i, arc in enumerate(self.arcs, 1):
val = arc
if i == 1 and self.final:
val = val | nFinalNodeMask
if i == nArc:
val = val | nFinalArcMask
if 1 < (self.arcs[arc].addr - self.addr) < nMaxOffset and self.i != 0:
val = val | nNextNodeMask
s += " {:<20} {:0>16} i{:_>10} +{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr - self.addr)
else:
s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr)
return s
|
Added gc_core/py/echo.py version [6d11a5dda8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#!python3
# The most boring yet indispensable function: print!
import sys
_CHARMAP = str.maketrans({ 'œ': 'ö', 'Œ': 'Ö', 'ʳ': "r", 'ᵉ': "e", '…': "_", \
'“': '"', '”': '"', '„': '"', '‘': "'", '’': "'", \
'ā': 'â', 'Ā': 'Â', 'ē': 'ê', 'Ē': 'Ê', 'ī': 'î', 'Ī': 'Î', \
'ō': 'ô', 'Ō': 'Ô', 'ū': 'û', 'Ū': 'Û', 'Ÿ': 'Y', \
'ś': 's', 'ŝ': 's', \
'—': '-', '–': '-'
})
def echo (obj, sep=' ', end='\n', file=sys.stdout, flush=False):
""" Print for Windows to avoid Python crashes.
Encoding depends on Windows locale. No useful standard.
Always returns True (useful for debugging)."""
if sys.platform != "win32":
print(obj, sep=sep, end=end, file=file, flush=flush)
return True
try:
print(str(obj).translate(_CHARMAP), sep=sep, end=end, file=file, flush=flush)
except:
print(str(obj).encode('ascii', 'replace').decode('ascii', 'replace'), sep=sep, end=end, file=file, flush=flush)
return True
|
Added gc_core/py/ibdawg.py version [9ce1ce821d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
#!python3
# -*- coding: UTF-8 -*-
import os
import traceback
import pkgutil
from . import str_transform as st
from .echo import echo
class IBDAWG:
"""INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH"""
def __init__ (self, sDicName):
self.by = pkgutil.get_data(__package__, "_dictionaries/" + sDicName)
if not self.by:
raise OSError("# Error. File not found or not loadable: "+sDicName)
if self.by[0:7] != b"/pyfsa/":
raise TypeError("# Error. Not a pyfsa binary dictionary. Header: {}".format(self.by[0:9]))
if not(self.by[7:8] == b"1" or self.by[7:8] == b"2" or self.by[7:8] == b"3"):
raise ValueError("# Error. Unknown dictionary version: {}".format(self.by[7:8]))
try:
header, info, values, bdic = self.by.split(b"\0\0\0\0", 3)
except Exception:
raise Exception
self.sName = sDicName
self.nVersion = int(self.by[7:8].decode("utf-8"))
self.sHeader = header.decode("utf-8")
self.lArcVal = values.decode("utf-8").split("\t")
self.nArcVal = len(self.lArcVal)
self.byDic = bdic
l = info.decode("utf-8").split("/")
self.sLang = l[0]
self.nChar = int(l[1])
self.nBytesArc = int(l[2])
self.nBytesNodeAddress = int(l[3])
self.nEntries = int(l[4])
self.nNode = int(l[5])
self.nArc = int(l[6])
self.nAff = int(l[7])
self.cStemming = l[8]
if self.cStemming == "S":
self.funcStemming = st.getStemFromSuffixCode
elif self.cStemming == "A":
self.funcStemming = st.getStemFromAffixCode
else:
self.funcStemming = st.noStemming
self.nTag = self.nArcVal - self.nChar - self.nAff
self.dChar = {}
for i in range(1, self.nChar):
self.dChar[self.lArcVal[i]] = i
self._arcMask = (2 ** ((self.nBytesArc * 8) - 3)) - 1
self._finalNodeMask = 1 << ((self.nBytesArc * 8) - 1)
self._lastArcMask = 1 << ((self.nBytesArc * 8) - 2)
self._addrBitMask = 1 << ((self.nBytesArc * 8) - 3) # version 2
self.nBytesOffset = 1 # version 3
# Configuring DAWG functions according to nVersion
if self.nVersion == 1:
self.morph = self._morph1
self.stem = self._stem1
self._lookupArcNode = self._lookupArcNode1
self._writeNodes = self._writeNodes1
elif self.nVersion == 2:
self.morph = self._morph2
self.stem = self._stem2
self._lookupArcNode = self._lookupArcNode2
self._writeNodes = self._writeNodes2
elif self.nVersion == 3:
self.morph = self._morph3
self.stem = self._stem3
self._lookupArcNode = self._lookupArcNode3
self._writeNodes = self._writeNodes3
else:
raise ValueError(" # Error: unknown code: {}".format(self.nVersion))
self.bOptNumSigle = False
self.bOptNumAtLast = False
def getInfo (self):
return " Language: {0.sLang:>10} Version: {0.nVersion:>2} Stemming: {0.cStemming}FX\n" \
" Arcs values: {0.nArcVal:>10,} = {0.nChar:>5,} characters, {0.nAff:>6,} affixes, {0.nTag:>6,} tags\n" \
" Dictionary: {0.nEntries:>12,} entries, {0.nNode:>11,} nodes, {0.nArc:>11,} arcs\n" \
" Address size: {0.nBytesNodeAddress:>1} bytes, Arc size: {0.nBytesArc:>1} bytes\n".format(self)
def writeAsJSObject (self, spfDest, bInJSModule=False):
"write IBDAWG as a JavaScript object in a JavaScript module"
import json
with open(spfDest, "w", encoding="utf-8", newline="\n") as hDst:
if bInJSModule:
hDst.write('// JavaScript\n// Generated data (do not edit)\n\n"use strict";\n\nconst dictionary = ')
hDst.write(json.dumps({
"sName": self.sName,
"nVersion": self.nVersion,
"sHeader": self.sHeader,
"lArcVal": self.lArcVal,
"nArcVal": self.nArcVal,
"byDic": [ e for e in self.byDic ],
"sLang": self.sLang,
"nChar": self.nChar,
"nBytesArc": self.nBytesArc,
"nBytesNodeAddress": self.nBytesNodeAddress,
"nEntries": self.nEntries,
"nNode": self.nNode,
"nArc": self.nArc,
"nAff": self.nAff,
"cStemming": self.cStemming,
"nTag": self.nTag,
"dChar": self.dChar,
"_arcMask": self._arcMask,
"_finalNodeMask": self._finalNodeMask,
"_lastArcMask": self._lastArcMask,
"_addrBitMask": self._addrBitMask,
"nBytesOffset": self.nBytesOffset
}, ensure_ascii=False))
if bInJSModule:
hDst.write(";\n\nexports.dictionary = dictionary;\n")
def isValidToken (self, sToken):
"checks if sToken is valid (if there is hyphens in sToken, sToken is split, each part is checked)"
if self.isValid(sToken):
return True
if "-" in sToken:
if sToken.count("-") > 4:
return True
return all(self.isValid(sWord) for sWord in sToken.split("-"))
return False
def isValid (self, sWord):
"checks if sWord is valid (different casing tested if the first letter is a capital)"
if not sWord:
return None
if "’" in sWord: # ugly hack
sWord = sWord.replace("’", "'")
if self.lookup(sWord):
return True
if sWord[0:1].isupper():
if len(sWord) > 1:
if sWord.istitle():
return bool(self.lookup(sWord.lower()))
if sWord.isupper():
if self.bOptNumSigle:
return True
return bool(self.lookup(sWord.lower()) or self.lookup(sWord.capitalize()))
return bool(self.lookup(sWord[:1].lower() + sWord[1:]))
else:
return bool(self.lookup(sWord.lower()))
return False
def lookup (self, sWord):
"returns True if sWord in dictionary (strict verification)"
iAddr = 0
for c in sWord:
if c not in self.dChar:
return False
iAddr = self._lookupArcNode(self.dChar[c], iAddr)
if iAddr == None:
return False
return int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask
def getSugg (self, sWord, iAddr=0, sNewWord=""):
"not finished"
# RECURSIVE FUNCTION
if not sWord:
if int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask:
return [sNewWord]
return []
lSugg = []
lArc = self._getSimilarArcs(sWord[0:1], iAddr)
if lArc:
for t in lArc:
lSugg.extend(self._lookupAndSuggest(sWord[1:], t[1], sNewWord+t[0]))
else:
pass
return lSugg
def _getSimilarArcs (self, cChar, iAddr):
lArc = []
for c in st.dSimilarChars.get(cChar, cChar):
jAddr = self._lookupArcNode(self.dChar[c], iAddr)
if jAddr:
lArc.append((c, iAddr))
return lArc
def getMorph (self, sWord):
"retrieves morphologies list, different casing allowed"
l = self.morph(sWord)
if sWord[0:1].isupper():
l.extend(self.morph(sWord.lower()))
if sWord.isupper() and len(sWord) > 1:
l.extend(self.morph(sWord.capitalize()))
return l
# def morph (self, sWord):
# is defined in __init__
# VERSION 1
def _morph1 (self, sWord):
"returns morphologies of sWord"
iAddr = 0
for c in sWord:
if c not in self.dChar:
return []
iAddr = self._lookupArcNode(self.dChar[c], iAddr)
if iAddr == None:
return []
if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask):
l = []
nRawArc = 0
while not (nRawArc & self._lastArcMask):
iEndArcAddr = iAddr + self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if nArc >= self.nChar:
# This value is not a char, this is a stemming code
sStem = ">" + self.funcStemming(sWord, self.lArcVal[nArc])
# Now , we go to the next node and retrieve all following arcs values, all of them are tags
iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
nRawArc2 = 0
while not (nRawArc2 & self._lastArcMask):
iEndArcAddr2 = iAddr2 + self.nBytesArc
nRawArc2 = int.from_bytes(self.byDic[iAddr2:iEndArcAddr2], byteorder='big')
l.append(sStem + " " + self.lArcVal[nRawArc2 & self._arcMask])
iAddr2 = iEndArcAddr2+self.nBytesNodeAddress
iAddr = iEndArcAddr+self.nBytesNodeAddress
return l
return []
def _stem1 (self, sWord):
"returns stems list of sWord"
iAddr = 0
for c in sWord:
if c not in self.dChar:
return []
iAddr = self._lookupArcNode(self.dChar[c], iAddr)
if iAddr == None:
return []
if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask):
l = []
nRawArc = 0
while not (nRawArc & self._lastArcMask):
iEndArcAddr = iAddr + self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if nArc >= self.nChar:
# This value is not a char, this is a stemming code
l.append(self.funcStemming(sWord, self.lArcVal[nArc]))
iAddr = iEndArcAddr+self.nBytesNodeAddress
return l
return []
def _lookupArcNode1 (self, nVal, iAddr):
"looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None"
while True:
iEndArcAddr = iAddr+self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
if nVal == (nRawArc & self._arcMask):
# the value we are looking for
# we return the address of the next node
return int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
else:
# value not found
if (nRawArc & self._lastArcMask):
return None
iAddr = iEndArcAddr+self.nBytesNodeAddress
def _writeNodes1 (self, spfDest):
"for debugging only"
print(" > Write binary nodes")
with codecs.open(spfDest, 'w', 'utf-8', newline="\n") as hDst:
iAddr = 0
hDst.write("i{:_>10} -- #{:_>10}\n".format("0", iAddr))
while iAddr < len(self.byDic):
iEndArcAddr = iAddr+self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
hDst.write(" {:<20} {:0>16} i{:>10} #{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", \
int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], \
byteorder='big')))
iAddr = iEndArcAddr+self.nBytesNodeAddress
if (nRawArc & self._lastArcMask) and iAddr < len(self.byDic):
hDst.write("\ni{:_>10} -- #{:_>10}\n".format("?", iAddr))
hDst.close()
# VERSION 2
def _morph2 (self, sWord):
"returns morphologies of sWord"
iAddr = 0
for c in sWord:
if c not in self.dChar:
return []
iAddr = self._lookupArcNode(self.dChar[c], iAddr)
if iAddr == None:
return []
if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask):
l = []
nRawArc = 0
while not (nRawArc & self._lastArcMask):
iEndArcAddr = iAddr + self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if nArc >= self.nChar:
# This value is not a char, this is a stemming code
sStem = ">" + self.funcStemming(sWord, self.lArcVal[nArc])
# Now , we go to the next node and retrieve all following arcs values, all of them are tags
if not (nRawArc & self._addrBitMask):
iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
else:
# we go to the end of the node
iAddr2 = iEndArcAddr
while not (nRawArc & self._lastArcMask):
nRawArc = int.from_bytes(self.byDic[iAddr2:iAddr2+self.nBytesArc], byteorder='big')
iAddr2 += self.nBytesArc + self.nBytesNodeAddress
nRawArc2 = 0
while not (nRawArc2 & self._lastArcMask):
iEndArcAddr2 = iAddr2 + self.nBytesArc
nRawArc2 = int.from_bytes(self.byDic[iAddr2:iEndArcAddr2], byteorder='big')
l.append(sStem + " " + self.lArcVal[nRawArc2 & self._arcMask])
iAddr2 = iEndArcAddr2+self.nBytesNodeAddress if not (nRawArc2 & self._addrBitMask) else iEndArcAddr2
iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr
return l
return []
def _stem2 (self, sWord):
"returns stems list of sWord"
iAddr = 0
for c in sWord:
if c not in self.dChar:
return []
iAddr = self._lookupArcNode(self.dChar[c], iAddr)
if iAddr == None:
return []
if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask):
l = []
nRawArc = 0
while not (nRawArc & self._lastArcMask):
iEndArcAddr = iAddr + self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if nArc >= self.nChar:
# This value is not a char, this is a stemming code
l.append(self.funcStemming(sWord, self.lArcVal[nArc]))
# Now , we go to the next node
if not (nRawArc & self._addrBitMask):
iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
else:
# we go to the end of the node
iAddr2 = iEndArcAddr
while not (nRawArc & self._lastArcMask):
nRawArc = int.from_bytes(self.byDic[iAddr2:iAddr2+self.nBytesArc], byteorder='big')
iAddr2 += self.nBytesArc + self.nBytesNodeAddress
iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr
return l
return []
def _lookupArcNode2 (self, nVal, iAddr):
"looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None"
while True:
iEndArcAddr = iAddr+self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
if nVal == (nRawArc & self._arcMask):
# the value we are looking for
if not (nRawArc & self._addrBitMask):
# we return the address of the next node
return int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
else:
# we go to the end of the node
iAddr = iEndArcAddr
while not (nRawArc & self._lastArcMask):
nRawArc = int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big')
iAddr += self.nBytesArc + self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else self.nBytesArc
return iAddr
else:
# value not found
if (nRawArc & self._lastArcMask):
return None
iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr
def _writeNodes2 (self, spfDest):
"for debugging only"
print(" > Write binary nodes")
with codecs.open(spfDest, 'w', 'utf-8', newline="\n") as hDst:
iAddr = 0
hDst.write("i{:_>10} -- #{:_>10}\n".format("0", iAddr))
while iAddr < len(self.byDic):
iEndArcAddr = iAddr+self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if not (nRawArc & self._addrBitMask):
iNextNodeAddr = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
hDst.write(" {:<20} {:0>16} i{:>10} #{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", iNextNodeAddr))
iAddr = iEndArcAddr+self.nBytesNodeAddress
else:
hDst.write(" {:<20} {:0>16}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:]))
iAddr = iEndArcAddr
if (nRawArc & self._lastArcMask):
hDst.write("\ni{:_>10} -- #{:_>10}\n".format("?", iAddr))
hDst.close()
# VERSION 3
def _morph3 (self, sWord):
"returns morphologies of sWord"
iAddr = 0
for c in sWord:
if c not in self.dChar:
return []
iAddr = self._lookupArcNode(self.dChar[c], iAddr)
if iAddr == None:
return []
if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask):
l = []
nRawArc = 0
iAddrNode = iAddr
while not (nRawArc & self._lastArcMask):
iEndArcAddr = iAddr + self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if nArc >= self.nChar:
# This value is not a char, this is a stemming code
sStem = ">" + self.funcStemming(sWord, self.lArcVal[nArc])
# Now , we go to the next node and retrieve all following arcs values, all of them are tags
if not (nRawArc & self._addrBitMask):
iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
else:
iAddr2 = iAddrNode + int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesOffset], byteorder='big')
nRawArc2 = 0
while not (nRawArc2 & self._lastArcMask):
iEndArcAddr2 = iAddr2 + self.nBytesArc
nRawArc2 = int.from_bytes(self.byDic[iAddr2:iEndArcAddr2], byteorder='big')
l.append(sStem + " " + self.lArcVal[nRawArc2 & self._arcMask])
iAddr2 = iEndArcAddr2+self.nBytesNodeAddress if not (nRawArc2 & self._addrBitMask) else iEndArcAddr2+self.nBytesOffset
iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr+self.nBytesOffset
return l
return []
def _stem3 (self, sWord):
"returns stems list of sWord"
iAddr = 0
for c in sWord:
if c not in self.dChar:
return []
iAddr = self._lookupArcNode(self.dChar[c], iAddr)
if iAddr == None:
return []
if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask):
l = []
nRawArc = 0
iAddrNode = iAddr
while not (nRawArc & self._lastArcMask):
iEndArcAddr = iAddr + self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if nArc >= self.nChar:
# This value is not a char, this is a stemming code
l.append(self.funcStemming(sWord, self.lArcVal[nArc]))
iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr+self.nBytesOffset
return l
return []
def _lookupArcNode3 (self, nVal, iAddr):
"looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None"
iAddrNode = iAddr
while True:
iEndArcAddr = iAddr+self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
if nVal == (nRawArc & self._arcMask):
# the value we are looking for
if not (nRawArc & self._addrBitMask):
return int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
else:
return iAddrNode + int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesOffset], byteorder='big')
else:
# value not found
if (nRawArc & self._lastArcMask):
return None
iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr+self.nBytesOffset
def _writeNodes3 (self, spfDest):
"for debugging only"
print(" > Write binary nodes")
with codecs.open(spfDest, 'w', 'utf-8', newline="\n") as hDst:
iAddr = 0
hDst.write("i{:_>10} -- #{:_>10}\n".format("0", iAddr))
while iAddr < len(self.byDic):
iEndArcAddr = iAddr+self.nBytesArc
nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big')
nArc = nRawArc & self._arcMask
if not (nRawArc & self._addrBitMask):
iNextNodeAddr = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big')
hDst.write(" {:<20} {:0>16} i{:>10} #{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", iNextNodeAddr))
iAddr = iEndArcAddr+self.nBytesNodeAddress
else:
iNextNodeAddr = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesOffset], byteorder='big')
hDst.write(" {:<20} {:0>16} i{:>10} +{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", iNextNodeAddr))
iAddr = iEndArcAddr+self.nBytesOffset
if (nRawArc & self._lastArcMask):
hDst.write("\ni{:_>10} -- #{:_>10}\n".format("?", iAddr))
hDst.close()
|
Added gc_core/py/lang_core/__init__.py version [0ee899897d].
> > | 1 2 | from .gc_engine import * |
Added gc_core/py/lang_core/gc_engine.py version [e65591d48d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 |
# Grammalecte
# Grammar checker engine
import re
import sys
import os
import traceback
#import unicodedata
from itertools import chain
from ..ibdawg import IBDAWG
from ..echo import echo
from . import gc_options
__all__ = [ "lang", "locales", "pkg", "name", "version", "author", \
"load", "parse", "getDictionary", \
"setOption", "setOptions", "getOptions", "getDefaultOptions", "getOptionsLabels", "resetOptions", "displayOptions", \
"ignoreRule", "resetIgnoreRules", "reactivateRule", "listRules", "displayRules" ]
__version__ = "${version}"
lang = "${lang}"
locales = ${loc}
pkg = "${implname}"
name = "${name}"
version = "${version}"
author = "${author}"
# grammar rules and dictionary
_rules = None
_dOptions = dict(gc_options.dOpt) # duplication necessary, to be able to reset to default
_aIgnoredRules = set()
_oDict = None
_dAnalyses = {} # cache for data from dictionary
#### Parsing
def parse (sText, sCountry="${country_default}", bDebug=False, dOptions=None, bContext=False):
"analyses the paragraph sText and returns list of errors"
#sText = unicodedata.normalize("NFC", sText)
aErrors = None
sAlt = sText
dDA = {} # Disambiguisator. Key = position; value = list of morphologies
dPriority = {} # Key = position; value = priority
dOpt = _dOptions if not dOptions else dOptions
# parse paragraph
try:
sNew, aErrors = _proofread(sText, sAlt, 0, True, dDA, dPriority, sCountry, dOpt, bDebug, bContext)
if sNew:
sText = sNew
except:
raise
# cleanup
if " " in sText:
sText = sText.replace(" ", ' ') # nbsp
if " " in sText:
sText = sText.replace(" ", ' ') # nnbsp
if "'" in sText:
sText = sText.replace("'", "’")
if "‑" in sText:
sText = sText.replace("‑", "-") # nobreakdash
# parse sentences
for iStart, iEnd in _getSentenceBoundaries(sText):
if 4 < (iEnd - iStart) < 2000:
dDA.clear()
try:
_, errs = _proofread(sText[iStart:iEnd], sAlt[iStart:iEnd], iStart, False, dDA, dPriority, sCountry, dOpt, bDebug, bContext)
aErrors.update(errs)
except:
raise
return aErrors.values() # this is a view (iterable)
def _getSentenceBoundaries (sText):
iStart = _zBeginOfParagraph.match(sText).end()
for m in _zEndOfSentence.finditer(sText):
yield (iStart, m.end())
iStart = m.end()
def _proofread (s, sx, nOffset, bParagraph, dDA, dPriority, sCountry, dOptions, bDebug, bContext):
dErrs = {}
bChange = False
bIdRule = option('idrule')
for sOption, lRuleGroup in _getRules(bParagraph):
if not sOption or dOptions.get(sOption, False):
for zRegex, bUppercase, sLineId, sRuleId, nPriority, lActions in lRuleGroup:
if sRuleId not in _aIgnoredRules:
for m in zRegex.finditer(s):
bCondMemo = None
for sFuncCond, cActionType, sWhat, *eAct in lActions:
# action in lActions: [ condition, action type, replacement/suggestion/action[, iGroup[, message, URL]] ]
try:
bCondMemo = not sFuncCond or globals()[sFuncCond](s, sx, m, dDA, sCountry, bCondMemo)
if bCondMemo:
if cActionType == "-":
# grammar error
nErrorStart = nOffset + m.start(eAct[0])
if nErrorStart not in dErrs or nPriority > dPriority[nErrorStart]:
dErrs[nErrorStart] = _createError(s, sx, sWhat, nOffset, m, eAct[0], sLineId, sRuleId, bUppercase, eAct[1], eAct[2], bIdRule, sOption, bContext)
dPriority[nErrorStart] = nPriority
elif cActionType == "~":
# text processor
s = _rewrite(s, sWhat, eAct[0], m, bUppercase)
bChange = True
if bDebug:
echo("~ " + s + " -- " + m.group(eAct[0]) + " # " + sLineId)
elif cActionType == "=":
# disambiguation
globals()[sWhat](s, m, dDA)
if bDebug:
echo("= " + m.group(0) + " # " + sLineId + "\nDA: " + str(dDA))
elif cActionType == ">":
# we do nothing, this test is just a condition to apply all following actions
pass
else:
echo("# error: unknown action at " + sLineId)
elif cActionType == ">":
break
except Exception as e:
raise Exception(str(e), sLineId)
if bChange:
return (s, dErrs)
return (False, dErrs)
def _createWriterError (s, sx, sRepl, nOffset, m, iGroup, sLineId, sRuleId, bUppercase, sMsg, sURL, bIdRule, sOption, bContext):
"error for Writer (LO/OO)"
xErr = SingleProofreadingError()
#xErr = uno.createUnoStruct( "com.sun.star.linguistic2.SingleProofreadingError" )
xErr.nErrorStart = nOffset + m.start(iGroup)
xErr.nErrorLength = m.end(iGroup) - m.start(iGroup)
xErr.nErrorType = PROOFREADING
xErr.aRuleIdentifier = sRuleId
# suggestions
if sRepl[0:1] == "=":
sugg = globals()[sRepl[1:]](s, m)
if sugg:
if bUppercase and m.group(iGroup)[0:1].isupper():
xErr.aSuggestions = tuple(map(str.capitalize, sugg.split("|")))
else:
xErr.aSuggestions = tuple(sugg.split("|"))
else:
xErr.aSuggestions = ()
elif sRepl == "_":
xErr.aSuggestions = ()
else:
if bUppercase and m.group(iGroup)[0:1].isupper():
xErr.aSuggestions = tuple(map(str.capitalize, m.expand(sRepl).split("|")))
else:
xErr.aSuggestions = tuple(m.expand(sRepl).split("|"))
# Message
if sMsg[0:1] == "=":
sMessage = globals()[sMsg[1:]](s, m)
else:
sMessage = m.expand(sMsg)
xErr.aShortComment = sMessage # sMessage.split("|")[0] # in context menu
xErr.aFullComment = sMessage # sMessage.split("|")[-1] # in dialog
if bIdRule:
xErr.aShortComment += " # " + sLineId + " # " + sRuleId
# URL
if sURL:
p = PropertyValue()
p.Name = "FullCommentURL"
p.Value = sURL
xErr.aProperties = (p,)
else:
xErr.aProperties = ()
return xErr
def _createDictError (s, sx, sRepl, nOffset, m, iGroup, sLineId, sRuleId, bUppercase, sMsg, sURL, bIdRule, sOption, bContext):
"error as a dictionary"
dErr = {}
dErr["nStart"] = nOffset + m.start(iGroup)
dErr["nEnd"] = nOffset + m.end(iGroup)
dErr["sLineId"] = sLineId
dErr["sRuleId"] = sRuleId
dErr["sType"] = sOption if sOption else "notype"
# suggestions
if sRepl[0:1] == "=":
sugg = globals()[sRepl[1:]](s, m)
if sugg:
if bUppercase and m.group(iGroup)[0:1].isupper():
dErr["aSuggestions"] = list(map(str.capitalize, sugg.split("|")))
else:
dErr["aSuggestions"] = sugg.split("|")
else:
dErr["aSuggestions"] = ()
elif sRepl == "_":
dErr["aSuggestions"] = ()
else:
if bUppercase and m.group(iGroup)[0:1].isupper():
dErr["aSuggestions"] = list(map(str.capitalize, m.expand(sRepl).split("|")))
else:
dErr["aSuggestions"] = m.expand(sRepl).split("|")
# Message
if sMsg[0:1] == "=":
sMessage = globals()[sMsg[1:]](s, m)
else:
sMessage = m.expand(sMsg)
dErr["sMessage"] = sMessage
if bIdRule:
dErr["sMessage"] += " # " + sLineId + " # " + sRuleId
# URL
dErr["URL"] = sURL if sURL else ""
# Context
if bContext:
dErr['sUnderlined'] = sx[m.start(iGroup):m.end(iGroup)]
dErr['sBefore'] = sx[max(0,m.start(iGroup)-80):m.start(iGroup)]
dErr['sAfter'] = sx[m.end(iGroup):m.end(iGroup)+80]
return dErr
def _rewrite (s, sRepl, iGroup, m, bUppercase):
"text processor: write sRepl in s at iGroup position"
nLen = m.end(iGroup) - m.start(iGroup)
if sRepl == "*":
sNew = " " * nLen
elif sRepl == ">" or sRepl == "_" or sRepl == "~":
sNew = sRepl + " " * (nLen-1)
elif sRepl == "@":
sNew = "@" * nLen
elif sRepl[0:1] == "=":
sNew = globals()[sRepl[1:]](s, m)
sNew = sNew + " " * (nLen-len(sNew))
if bUppercase and m.group(iGroup)[0:1].isupper():
sNew = sNew.capitalize()
else:
sNew = m.expand(sRepl)
sNew = sNew + " " * (nLen-len(sNew))
return s[0:m.start(iGroup)] + sNew + s[m.end(iGroup):]
def ignoreRule (sRuleId):
_aIgnoredRules.add(sRuleId)
def resetIgnoreRules ():
_aIgnoredRules.clear()
def reactivateRule (sRuleId):
_aIgnoredRules.discard(sRuleId)
def listRules (sFilter=None):
"generator: returns typle (sOption, sLineId, sRuleId)"
if sFilter:
try:
zFilter = re.compile(sFilter)
except:
echo("# Error. List rules: wrong regex.")
sFilter = None
for sOption, lRuleGroup in chain(_getRules(True), _getRules(False)):
for _, _, sLineId, sRuleId, _, _ in lRuleGroup:
if not sFilter or zFilter.search(sRuleId):
yield (sOption, sLineId, sRuleId)
def displayRules (sFilter=None):
echo("List of rules. Filter: << " + str(sFilter) + " >>")
for sOption, sLineId, sRuleId in listRules(sFilter):
echo("{:<10} {:<10} {}".format(sOption, sLineId, sRuleId))
#### init
try:
# LibreOffice / OpenOffice
from com.sun.star.linguistic2 import SingleProofreadingError
from com.sun.star.text.TextMarkupType import PROOFREADING
from com.sun.star.beans import PropertyValue
#import lightproof_handler_${implname} as opt
_createError = _createWriterError
except ImportError:
_createError = _createDictError
def load ():
global _oDict
try:
_oDict = IBDAWG("${py_binary_dic}")
except:
traceback.print_exc()
def setOption (sOpt, bVal):
if sOpt in _dOptions:
_dOptions[sOpt] = bVal
def setOptions (dOpt):
for sKey, bVal in dOpt.items():
if sKey in _dOptions:
_dOptions[sKey] = bVal
def getOptions ():
return _dOptions
def getDefaultOptions ():
return dict(gc_options.dOpt)
def getOptionsLabels (sLang):
return gc_options.getUI(sLang)
def displayOptions (sLang):
echo("List of options")
echo("\n".join( [ k+":\t"+str(v)+"\t"+gc_options.getUI(sLang).get(k, ("?", ""))[0] for k, v in sorted(_dOptions.items()) ] ))
echo("")
def resetOptions ():
global _dOptions
_dOptions = dict(gc_options.dOpt)
def getDictionary ():
return _oDict
def _getRules (bParagraph):
try:
if not bParagraph:
return _rules.lSentenceRules
return _rules.lParagraphRules
except:
_loadRules()
if not bParagraph:
return _rules.lSentenceRules
return _rules.lParagraphRules
def _loadRules ():
from . import gc_rules
global _rules
_rules = gc_rules
# compile rules regex
for lRuleGroup in chain(_rules.lParagraphRules, _rules.lSentenceRules):
for rule in lRuleGroup[1]:
try:
rule[0] = re.compile(rule[0])
except:
echo("Bad regular expression in # " + str(rule[2]))
rule[0] = "(?i)<Grammalecte>"
def _getPath ():
return os.path.join(os.path.dirname(sys.modules[__name__].__file__), __name__ + ".py")
#### common functions
# common regexes
_zEndOfSentence = re.compile('([.?!:;…][ .?!… »”")]*|.$)')
_zBeginOfParagraph = re.compile("^\W*")
_zEndOfParagraph = re.compile("\W*$")
_zNextWord = re.compile(" +(\w[\w-]*)")
_zPrevWord = re.compile("(\w[\w-]*) +$")
def option (sOpt):
"return True if option sOpt is active"
return _dOptions.get(sOpt, False)
def displayInfo (dDA, tWord):
"for debugging: retrieve info of word"
if not tWord:
echo("> nothing to find")
return True
if tWord[1] not in _dAnalyses and not _storeMorphFromFSA(tWord[1]):
echo("> not in FSA")
return True
if tWord[0] in dDA:
echo("DA: " + str(dDA[tWord[0]]))
echo("FSA: " + str(_dAnalyses[tWord[1]]))
return True
def _storeMorphFromFSA (sWord):
"retrieves morphologies list from _oDict -> _dAnalyses"
global _dAnalyses
_dAnalyses[sWord] = _oDict.getMorph(sWord)
return True if _dAnalyses[sWord] else False
def morph (dDA, tWord, sPattern, bStrict=True, bNoWord=False):
"analyse a tuple (position, word), return True if sPattern in morphologies (disambiguation on)"
if not tWord:
return bNoWord
if tWord[1] not in _dAnalyses and not _storeMorphFromFSA(tWord[1]):
return False
lMorph = dDA[tWord[0]] if tWord[0] in dDA else _dAnalyses[tWord[1]]
if not lMorph:
return False
p = re.compile(sPattern)
if bStrict:
return all(p.search(s) for s in lMorph)
return any(p.search(s) for s in lMorph)
def morphex (dDA, tWord, sPattern, sNegPattern, bNoWord=False):
"analyse a tuple (position, word), returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation on)"
if not tWord:
return bNoWord
if tWord[1] not in _dAnalyses and not _storeMorphFromFSA(tWord[1]):
return False
lMorph = dDA[tWord[0]] if tWord[0] in dDA else _dAnalyses[tWord[1]]
# check negative condition
np = re.compile(sNegPattern)
if any(np.search(s) for s in lMorph):
return False
# search sPattern
p = re.compile(sPattern)
return any(p.search(s) for s in lMorph)
def analyse (sWord, sPattern, bStrict=True):
"analyse a word, return True if sPattern in morphologies (disambiguation off)"
if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord):
return False
if not _dAnalyses[sWord]:
return False
p = re.compile(sPattern)
if bStrict:
return all(p.search(s) for s in _dAnalyses[sWord])
return any(p.search(s) for s in _dAnalyses[sWord])
def analysex (sWord, sPattern, sNegPattern):
"analyse a word, returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation off)"
if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord):
return False
# check negative condition
np = re.compile(sNegPattern)
if any(np.search(s) for s in _dAnalyses[sWord]):
return False
# search sPattern
p = re.compile(sPattern)
return any(p.search(s) for s in _dAnalyses[sWord])
def stem (sWord):
"returns a list of sWord's stems"
if not sWord:
return []
if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord):
return []
return [ s[1:s.find(" ")] for s in _dAnalyses[sWord] ]
## functions to get text outside pattern scope
# warning: check compile_rules.py to understand how it works
def nextword (s, iStart, n):
"get the nth word of the input string or empty string"
m = re.match("( +[\\w%-]+){" + str(n-1) + "} +([\\w%-]+)", s[iStart:])
if not m:
return None
return (iStart+m.start(2), m.group(2))
def prevword (s, iEnd, n):
"get the (-)nth word of the input string or empty string"
m = re.search("([\\w%-]+) +([\\w%-]+ +){" + str(n-1) + "}$", s[:iEnd])
if not m:
return None
return (m.start(1), m.group(1))
def nextword1 (s, iStart):
"get next word (optimization)"
m = _zNextWord.match(s[iStart:])
if not m:
return None
return (iStart+m.start(1), m.group(1))
def prevword1 (s, iEnd):
"get previous word (optimization)"
m = _zPrevWord.search(s[:iEnd])
if not m:
return None
return (m.start(1), m.group(1))
def look (s, sPattern, sNegPattern=None):
"seek sPattern in s (before/after/fulltext), if sNegPattern not in s"
if sNegPattern and re.search(sNegPattern, s):
return False
if re.search(sPattern, s):
return True
return False
def look_chk1 (dDA, s, nOffset, sPattern, sPatternGroup1, sNegPatternGroup1=None):
"returns True if s has pattern sPattern and m.group(1) has pattern sPatternGroup1"
m = re.search(sPattern, s)
if not m:
return False
try:
sWord = m.group(1)
nPos = m.start(1) + nOffset
except:
return False
if sNegPatternGroup1:
return morphex(dDA, (nPos, sWord), sPatternGroup1, sNegPatternGroup1)
return morph(dDA, (nPos, sWord), sPatternGroup1, False)
#### Disambiguator
def select (dDA, nPos, sWord, sPattern, lDefault=None):
if not sWord:
return True
if nPos in dDA:
return True
if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord):
return True
if len(_dAnalyses[sWord]) == 1:
return True
lSelect = [ sMorph for sMorph in _dAnalyses[sWord] if re.search(sPattern, sMorph) ]
if lSelect:
if len(lSelect) != len(_dAnalyses[sWord]):
dDA[nPos] = lSelect
#echo("= "+sWord+" "+str(dDA.get(nPos, "null")))
elif lDefault:
dDA[nPos] = lDefault
#echo("= "+sWord+" "+str(dDA.get(nPos, "null")))
return True
def exclude (dDA, nPos, sWord, sPattern, lDefault=None):
if not sWord:
return True
if nPos in dDA:
return True
if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord):
return True
if len(_dAnalyses[sWord]) == 1:
return True
lSelect = [ sMorph for sMorph in _dAnalyses[sWord] if not re.search(sPattern, sMorph) ]
if lSelect:
if len(lSelect) != len(_dAnalyses[sWord]):
dDA[nPos] = lSelect
#echo("= "+sWord+" "+str(dDA.get(nPos, "null")))
elif lDefault:
dDA[nPos] = lDefault
#echo("= "+sWord+" "+str(dDA.get(nPos, "null")))
return True
def define (dDA, nPos, lMorph):
dDA[nPos] = lMorph
#echo("= "+str(nPos)+" "+str(dDA[nPos]))
return True
#### GRAMMAR CHECKER PLUGINS
${plugins}
${callables}
|
Added gc_core/py/lang_core/gc_options.py version [383a99acb3].
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 |
# generated code, do not edit
def getUI (sLang):
if sLang in _dOptLabel:
return _dOptLabel[sLang]
return _dOptLabel["fr"]
lStructOpt = ${lStructOpt}
dOpt = ${dOptPython}
_dOptLabel = ${dOptLabel}
|
Added gc_core/py/lang_core/gc_rules.py version [3cf95f4a21].
> > > > > | 1 2 3 4 5 |
# generated code, do not edit
lParagraphRules = ${paragraph_rules}
lSentenceRules = ${sentence_rules}
|
Added gc_core/py/oxt/Grammalecte.py version [f962117745].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# -*- encoding: UTF-8 -*-
# Grammalecte for Writer
# License: MPL 2
# A derivative work of Lightproof from László Németh (http://cgit.freedesktop.org/libreoffice/lightproof/)
import uno
import unohelper
import sys
import traceback
from collections import deque
from com.sun.star.linguistic2 import XProofreader, XSupportedLocales
from com.sun.star.linguistic2 import ProofreadingResult
from com.sun.star.lang import XServiceInfo, XServiceName, XServiceDisplayName
from com.sun.star.lang import Locale
import grammalecte.${lang} as gce
#import lightproof_handler_${implname} as opt_handler
import Options
class Grammalecte (unohelper.Base, XProofreader, XServiceInfo, XServiceName, XServiceDisplayName, XSupportedLocales):
def __init__ (self, ctx, *args):
self.ctx = ctx
self.ServiceName = "com.sun.star.linguistic2.Proofreader"
self.ImplementationName = "org.openoffice.comp.pyuno.Lightproof." + gce.pkg
self.SupportedServiceNames = (self.ServiceName, )
self.locales = []
for i in gce.locales:
l = gce.locales[i]
self.locales.append(Locale(l[0], l[1], l[2]))
self.locales = tuple(self.locales)
xCurCtx = uno.getComponentContext()
# init
gce.load()
# GC options
# opt_handler.load(xCurCtx)
dOpt = Options.load(xCurCtx)
gce.setOptions(dOpt)
# store for results of big paragraphs
self.dResult = {}
self.nMaxRes = 1500
self.lLastRes = deque(maxlen=self.nMaxRes)
self.nRes = 0
# XServiceName method implementations
def getServiceName (self):
return self.ImplementationName
# XServiceInfo method implementations
def getImplementationName (self):
return self.ImplementationName
def supportsService (self, ServiceName):
return (ServiceName in self.SupportedServiceNames)
def getSupportedServiceNames (self):
return self.SupportedServiceNames
# XSupportedLocales
def hasLocale (self, aLocale):
if aLocale in self.locales:
return True
for i in self.locales:
if (i.Country == aLocale.Country or i.Country == "") and aLocale.Language == i.Language:
return True
return False
def getLocales (self):
return self.locales
# XProofreader
def isSpellChecker (self):
return False
def doProofreading (self, nDocId, rText, rLocale, nStartOfSentencePos, nSuggestedSentenceEndPos, rProperties):
xRes = ProofreadingResult()
#xRes = uno.createUnoStruct("com.sun.star.linguistic2.ProofreadingResult")
xRes.aDocumentIdentifier = nDocId
xRes.aText = rText
xRes.aLocale = rLocale
xRes.nStartOfSentencePosition = nStartOfSentencePos
xRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos
xRes.aProperties = ()
xRes.xProofreader = self
xRes.aErrors = ()
# PATCH FOR LO 4
# Fix for http://nabble.documentfoundation.org/Grammar-checker-Undocumented-change-in-the-API-for-LO-4-td4030639.html
if nStartOfSentencePos != 0:
return xRes
xRes.nStartOfNextSentencePosition = len(rText)
# END OF PATCH
# WORKAROUND FOR AVOIDING REPEATED ACTIONS ON HEAVY PARAGRAPHS
if xRes.nStartOfNextSentencePosition > 3000:
nHashedVal = hash(rText)
if nHashedVal in self.dResult:
return self.dResult[nHashedVal]
# WORKAROUND ->>>
xRes.nBehindEndOfSentencePosition = xRes.nStartOfNextSentencePosition
try:
xRes.aErrors = tuple(gce.parse(rText, rLocale.Country))
# ->>> WORKAROUND
if xRes.nStartOfNextSentencePosition > 3000:
self.dResult[nHashedVal] = xRes
self.nRes += 1
if self.nRes > self.nMaxRes:
del self.dResult[self.lLastRes.popleft()]
self.nRes = self.nMaxRes
self.lLastRes.append(nHashedVal)
# END OF WORKAROUND
except Exception as e:
if sys.version_info.major == 3:
traceback.print_exc()
return xRes
def ignoreRule (self, rid, aLocale):
gce.ignoreRule(rid)
def resetIgnoreRules (self):
gce.resetIgnoreRules()
# XServiceDisplayName
def getServiceDisplayName (self, aLocale):
return gce.name
# Grammalecte
def getDictionary (self):
return gce.getDictionary()
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(Grammalecte, "org.openoffice.comp.pyuno.Lightproof."+gce.pkg, ("com.sun.star.linguistic2.Proofreader",),)
# g_ImplementationHelper.addImplementation( opt_handler.LightproofOptionsEventHandler, \
# "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + gce.pkg, ("com.sun.star.awt.XContainerWindowEventHandler",),)
|
Added gc_core/py/oxt/Linguistic.xcu version [ff91c8d07f].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data oor:name="Linguistic"
oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<node oor:name="ServiceManager">
<node oor:name="GrammarCheckers">
<node oor:name="org.openoffice.comp.pyuno.Lightproof.${implname}" oor:op="fuse">
<prop oor:name="Locales" oor:type="oor:string-list">
<value>${locales}</value>
</prop>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_core/py/oxt/Options.py version [f3a8765730].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# -*- coding: utf8 -*-
# Options Dialog
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import traceback
from com.sun.star.awt import XActionListener
from com.sun.star.beans import PropertyValue
import helpers
import op_strings
try:
import grammalecte.${lang} as gce
except:
traceback.print_exc()
options = {}
def load (ctx):
try:
oGCO = GC_Options(ctx)
oGCO.load("${lang}")
except:
print("# Error. Unable to load options of language: ${lang}")
return options
class GC_Options (unohelper.Base, XActionListener):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.xContainer = None
#self.xNode = helpers.getConfigSetting("/org.openoffice.Lightproof_%s/Leaves"%pkg, True)
self.xNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Leaves", True)
self.nSecret = 0
def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
xWidget.Name = name
xWidget.PositionX = x
xWidget.PositionY = y
xWidget.Width = w
xWidget.Height = h
for k, w in kwargs.items():
setattr(xWidget, k, w)
self.xDialog.insertByName(name, xWidget)
return xWidget
def run (self, sUI):
try:
dUI = op_strings.getUI(sUI)
dUI2 = gce.gc_options.getUI(sUI)
# fonts
xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDTitle.Height = 9
xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDTitle.Name = "Verdana"
xFDBut = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDBut.Height = 10
xFDBut.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDBut.Name = "Verdana"
# dialog
self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.xDialog.Width = 300
self.xDialog.Height = 400
self.xDialog.Title = dUI.get('title', "#err")
# build
y = 0
nWidth = self.xDialog.Width - 20
nHeight = 10
self.lxOptions = []
for t in gce.gc_options.lStructOpt:
x = 10
y += 10
self._addWidget(t[0], 'FixedLine', x, y, nWidth, nHeight, Label = dUI2.get(t[0], "#err")[0], FontDescriptor= xFDTitle)
y += 3
for lOptLine in t[1]:
x = 15
y += 10
n = len(lOptLine)
for sOpt in lOptLine:
w = self._addWidget(sOpt, 'CheckBox', x, y, nWidth/n, nHeight, State = options.get(sOpt, False), \
Label = dUI2.get(sOpt, "#err")[0], HelpText = dUI2.get(sOpt, "#err")[1])
self.lxOptions.append(w)
x += nWidth / n
self.xDialog.Height = y + 40
xWindowSize = helpers.getWindowSize()
self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
but0 = self._addWidget('default', 'Button', 10, self.xDialog.Height-20, 50, 14, \
Label = dUI.get('default', "#err"), FontDescriptor = xFDBut, TextColor = 0x000044)
but1 = self._addWidget('apply', 'Button', self.xDialog.Width-115, self.xDialog.Height-20, 50, 14, \
Label = dUI.get('apply', "#err"), FontDescriptor = xFDBut, TextColor = 0x004400)
but2 = self._addWidget('cancel', 'Button', self.xDialog.Width-60, self.xDialog.Height-20, 50, 14,
Label = dUI.get('cancel', "#err"), FontDescriptor = xFDBut, TextColor = 0x440000)
# container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.xDialog)
self.xContainer.getControl('default').addActionListener(self)
self.xContainer.getControl('default').setActionCommand('Default')
self.xContainer.getControl('apply').addActionListener(self)
self.xContainer.getControl('apply').setActionCommand('Apply')
self.xContainer.getControl('cancel').addActionListener(self)
self.xContainer.getControl('cancel').setActionCommand('Cancel')
self.xContainer.setVisible(False)
xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(xToolkit, None)
self.xContainer.execute()
except:
traceback.print_exc()
# XActionListener
def actionPerformed (self, xActionEvent):
try:
if xActionEvent.ActionCommand == 'Default':
self._setDefault()
elif xActionEvent.ActionCommand == 'Apply':
self._save("fr")
self.xContainer.endExecute()
elif xActionEvent.ActionCommand == 'Cancel':
self.xContainer.endExecute()
else:
print("Wrong command: " + xActionEvent.ActionCommand)
except:
traceback.print_exc()
def _setDefault (self):
for w in self.lxOptions:
w.State = gce.gc_options.dOpt.get(w.Name, False)
def load (self, sLang):
try:
xChild = self.xNode.getByName(sLang)
for sKey in gce.gc_options.dOpt:
sValue = xChild.getPropertyValue(sKey)
if sValue == '':
if gce.gc_options.dOpt[sKey]:
sValue = 1
else:
sValue = 0
options[sKey] = bool(int(sValue))
except:
traceback.print_exc()
def _save (self, sLang):
try:
xChild = self.xNode.getByName(sLang)
for w in self.lxOptions:
sKey = w.Name
bValue = w.State
xChild.setPropertyValue(sKey, str(bValue))
options[sKey] = bValue
gce.setOptions(options)
self.xNode.commitChanges()
except:
traceback.print_exc()
|
Added gc_core/py/oxt/OptionsDialog.xcs version [bfbbfee5a6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-schema
oor:name="Lightproof_${implname}" oor:package="org.openoffice" xml:lang="en-US"
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<info>
<desc>Contains the options data used for the extension.</desc>
</info>
<templates>
<group oor:name="${lang}">
<info>
<desc>The data for one leaf.</desc>
</info>
${xcs_options}
</group>
</templates>
<component>
<group oor:name="Leaves">
<node-ref oor:name="${lang}" oor:node-type="${lang}" />
</group>
</component>
</oor:component-schema>
|
Added gc_core/py/oxt/OptionsDialog.xcu version [91cca1fa1e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
<oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office"
xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<node oor:name="Nodes">
<!--<node oor:name="org.openoffice.lightproof" oor:op="fuse">
<prop oor:name="Label">
<value xml:lang="en">Dictionaries</value>
<value xml:lang="hu">Szótárak</value>
</prop>-->
<node oor:name="LanguageSettings" oor:op="fuse">
<prop oor:name="Label">
<value xml:lang="en-US">Language Settings</value>
<value xml:lang="fr-FR">Paramètres linguistiques</value>
</prop>
<node oor:name="Leaves">
<node oor:name="org.openoffice.lightproof.${implname}" oor:op="fuse">
<prop oor:name="Id">
<!--<value>org.openoffice.comp.pyuno.lightproof.oxt.${implname}</value>-->
<value>${oxt_identifier}</value>
</prop>
<prop oor:name="Label">
${xcu_label_values}
</prop>
<prop oor:name="OptionsPage">
<value>%origin%/options_page.xdl</value>
</prop>
<prop oor:name="EventHandlerService">
<value>org.openoffice.comp.pyuno.LightproofOptionsEventHandler.${implname}</value>
</prop>
</node>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_core/py/oxt/description.xml version [53ef60ca5d].
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/description/2006"
xmlns:d="http://openoffice.org/extensions/description/2006"
xmlns:l="http://libreoffice.org/extensions/description/2011"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!--<identifier value="org.openoffice.comp.pyuno.lightproof.oxt.${implname}" />-->
<identifier value="${oxt_identifier}" />
<display-name>
<name lang="en-US">${name} (pack)</name>
</display-name>
<version value="${oxt_version}" />
<publisher>
<name lang="en" xlink:href="${link}">${provider}</name>
</publisher>
<icon>
<default xlink:href="${logo}" />
</icon>
<dependencies>
<l:LibreOffice-minimal-version value="4.2" l:name="LibreOffice 4.2" />
<!--<d:OpenOffice.org-minimal-version value="4.0" d:name="OpenOffice.org 4.0" />-->
</dependencies>
<!--<update-information>
<src xlink:href="http://www.dicollecte.org/grammalecte/oxt/grammalecte.update03.xml" />
</update-information>-->
</description>
|
Added gc_core/py/oxt/lightproof_handler_grammalecte.py version [f322664f2e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
import uno
import unohelper
import lightproof_opts_${implname} as lp_opt
from gc_engine_${implname} import pkg
from com.sun.star.lang import XServiceInfo
from com.sun.star.awt import XContainerWindowEventHandler
options = {}
def load (context):
try:
l = LightproofOptionsEventHandler(context)
for sLang in lp_opt.lopts:
l.load(sLang)
except:
pass
class LightproofOptionsEventHandler (unohelper.Base, XServiceInfo, XContainerWindowEventHandler):
def __init__ (self, ctx):
p = uno.createUnoStruct("com.sun.star.beans.PropertyValue")
p.Name = "nodepath"
p.Value = "/org.openoffice.Lightproof_%s/Leaves"%pkg
self.xConfig = ctx.ServiceManager.createInstance('com.sun.star.configuration.ConfigurationProvider')
self.node = self.xConfig.createInstanceWithArguments('com.sun.star.configuration.ConfigurationUpdateAccess', (p, ))
self.service = "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg
self.ImplementationName = self.service
self.services = (self.service, )
# XContainerWindowEventHandler
def callHandlerMethod (self, aWindow, aEventObject, sMethod):
if sMethod == "external_event":
return self._handleExternalEvent(aWindow, aEventObject)
def getSupportedMethodNames (self):
return ("external_event", )
def _handleExternalEvent (self, aWindow, aEventObject):
#aEventObject = str(aEventObject) # unnecessary in Python
if aEventObject == "ok":
self._saveData(aWindow)
elif aEventObject == "back" or aEventObject == "initialize":
self._loadData(aWindow)
return True
def load (self, sWindowName):
child = self.getChild(sWindowName)
for i in lp_opt.lopts[sWindowName]:
sValue = child.getPropertyValue(i)
if sValue == '':
if i in lp_opt.lopts_default[sWindowName]:
sValue = 1
else:
sValue = 0
options[i] = bool(int(sValue))
def _loadData (self, aWindow):
sWindowName = self.getWindowName(aWindow)
if (sWindowName == None):
return
child = self.getChild(sWindowName)
for i in lp_opt.lopts[sWindowName]:
sValue = child.getPropertyValue(i)
if sValue == '':
if i in lp_opt.lopts_default[sWindowName]:
sValue = 1
else:
sValue = 0
xControl = aWindow.getControl(i)
xControl.State = sValue
options[i] = bool(int(sValue))
def _saveData (self, aWindow):
sWindowName = self.getWindowName(aWindow)
if (sWindowName == None):
return
child = self.getChild(sWindowName)
for i in lp_opt.lopts[sWindowName]:
xControl = aWindow.getControl(i)
sValue = xControl.State
child.setPropertyValue(i, str(sValue))
options[i] = bool(int(sValue))
self.commitChanges()
def getWindowName (self, aWindow):
sName = aWindow.getModel().Name
if sName in lp_opt.lopts:
return sName
return None
# XServiceInfo
def getImplementationName (self):
return self.ImplementationName
def supportsService (self, ServiceName):
return (ServiceName in self.services)
def getSupportedServiceNames (self):
return self.services
def getChild (self, name):
return self.node.getByName(name)
def commitChanges (self):
self.node.commitChanges()
return True
|
Added gc_core/py/oxt/manifest.xml version [a65b8c3dc8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
<!-- Dictionaries -->
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
manifest:full-path="dictionaries.xcu"/>
<!-- Grammalecte -->
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-schema"
manifest:full-path="dialog/OptionsDialog.xcs"/>
<!--<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
manifest:full-path="dialog/OptionsDialog.xcu"/>-->
<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python"
manifest:full-path="Grammalecte.py"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
manifest:full-path="Linguistic.xcu"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.package-bundle-description"
manifest:full-path="package-description.txt"/>
<!-- Application laucher -->
<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python"
manifest:full-path="AppLauncher.py"/>
<!-- Context Menu -->
<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python"
manifest:full-path="ContextMenu.py"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
manifest:full-path="config/jobs.xcu"/>
<!-- common -->
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
manifest:full-path="addons.xcu"/>
</manifest:manifest>
|
Added gc_core/py/oxt/op_strings.py version [7b0a214eba].
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# -*- encoding: UTF-8 -*-
def getUI (sLang):
if sLang in dStrings:
return dStrings[sLang]
return dStrings["fr"]
dStrings = {
"fr": {
"title": u"Grammalecte · Options du contrôle grammatical",
"default": u"Par ~défaut",
"apply": u"~OK",
"cancel": u"~Annuler"
},
"en": {
"title": u"Grammalecte · Grammar checking options",
"default": u"~Default",
"apply": u"~OK",
"cancel": u"~Cancel"
}
}
|
Added gc_core/py/oxt/options_page.xdl version [b5343d8dd9].
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<dlg:window
xmlns:dlg="http://openoffice.org/2000/dialog"
xmlns:script="http://openoffice.org/2000/script"
dlg:id="${lang}" dlg:left="101" dlg:top="52" dlg:width="196" dlg:height="72" dlg:closeable="true" dlg:moveable="true" dlg:withtitlebar="false">
<dlg:bulletinboard>
${xdl_dialog_options}
</dlg:bulletinboard>
</dlg:window>
|
Added gc_core/py/progressbar.py version [5def72a6ce].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# Textual progressbar
# by Olivier R.
# License: MPL 2
import time
class ProgressBar:
"Textual progressbar"
def __init__ (self, nMin=0, nMax=100, nWidth=78):
"initiate with minimum nMin to maximum nMax"
self.nMin = nMin
self.nMax = nMax
self.nSpan = nMax - nMin
self.nWidth = nWidth-9
self.nAdvance = -1
self.nCurVal = nMin
self.startTime = time.time()
self._update()
def _update (self):
fDone = ((self.nCurVal - self.nMin) / self.nSpan)
nAdvance = int(fDone * self.nWidth)
if (nAdvance > self.nAdvance):
self.nAdvance = nAdvance
print("\r[ {}{} {}% ] ".format('>'*nAdvance, ' '*(self.nWidth-nAdvance), round(fDone*100)), end="")
def increment (self, n=1):
"increment value by n (1 by default)"
self.nCurVal += n
self._update()
def done (self):
"to call when it’s finished"
print("\r[ task done in {:.1f} s ] ".format(time.time() - self.startTime))
|
Added gc_core/py/str_transform.py version [e86906e5ce].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
#!python3
# -*- coding: UTF-8 -*-
dSimilarChars = {
"a": "aàâáä",
"à": "aàâáä",
"â": "aàâáä",
"á": "aàâáä",
"ä": "aàâáä",
"c": "cç",
"ç": "cç",
"e": "eéêèë",
"é": "eéêèë",
"ê": "eéêèë",
"è": "eéêèë",
"ë": "eéêèë",
"i": "iîïíì",
"î": "iîïíì",
"ï": "iîïíì",
"í": "iîïíì",
"ì": "iîïíì",
"o": "oôóòö",
"ô": "oôóòö",
"ó": "oôóòö",
"ò": "oôóòö",
"ö": "oôóòö",
"u": "uûùüú",
"û": "uûùüú",
"ù": "uûùüú",
"ü": "uûùüú",
"ú": "uûùüú",
}
## No stemming
def noStemming (sFlex, sStem):
return sStem
def rebuildWord (sFlex, cmd1, cmd2):
if cmd1 == "_":
return sFlex
n, c = cmd1.split(":")
s = s[:n] + c + s[n:]
if cmd2 == "_":
return s
n, c = cmd2.split(":")
return s[:n] + c + s[n:]
## Define affixes for stemming
# Note: 48 is the ASCII code for "0"
# Suffix only
def defineSuffixCode (sFlex, sStem):
""" Returns a string defining how to get stem from flexion
"n(sfx)"
with n: a char with numeric meaning, "0" = 0, "1" = 1, ... ":" = 10, etc. (See ASCII table.) Says how many letters to strip from flexion.
sfx [optional]: string to add on flexion
Examples:
"0": strips nothing, adds nothing
"1er": strips 1 letter, adds "er"
"2": strips 2 letters, adds nothing
"""
if sFlex == sStem:
return "0"
jSfx = 0
for i in range(min(len(sFlex), len(sStem))):
if sFlex[i] != sStem[i]:
break
jSfx += 1
return chr(len(sFlex)-jSfx+48) + sStem[jSfx:]
def getStemFromSuffixCode (sFlex, sSfxCode):
if sSfxCode == "0":
return sFlex
return sFlex[:-(ord(sSfxCode[0])-48)] + sSfxCode[1:] if sSfxCode[0] != '0' else sFlex + sSfxCode[1:]
# Prefix and suffix
def defineAffixCode (sFlex, sStem):
""" Returns a string defining how to get stem from flexion. Examples:
"0" if stem = flexion
"stem" if no common substring
"n(pfx)/m(sfx)"
with n and m: chars with numeric meaning, "0" = 0, "1" = 1, ... ":" = 10, etc. (See ASCII table.) Says how many letters to strip from flexion.
pfx [optional]: string to add before the flexion
sfx [optional]: string to add after the flexion
"""
if sFlex == sStem:
return "0"
# is stem a substring of flexion?
n = sFlex.find(sStem)
if n >= 0:
return "{}/{}".format(chr(n+48), chr(len(sFlex)-(len(sStem)+n)+48))
# no, so we are looking for common substring
sSubs = longestCommonSubstring(sFlex, sStem)
if len(sSubs) > 1:
iPos = sStem.find(sSubs)
sPfx = sStem[:iPos]
sSfx = sStem[iPos+len(sSubs):]
n = sFlex.find(sSubs)
m = len(sFlex) - (len(sSubs)+n)
sAff = "{}/".format(chr(n+48)) if not sPfx else "{}{}/".format(chr(n+48), sPfx)
sAff += chr(m+48) if not sSfx else "{}{}".format(chr(m+48), sSfx)
return sAff
return sStem
def longestCommonSubstring (s1, s2):
# http://en.wikipedia.org/wiki/Longest_common_substring_problem
# http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring
M = [ [0]*(1+len(s2)) for i in range(1+len(s1)) ]
longest, x_longest = 0, 0
for x in range(1, 1+len(s1)):
for y in range(1, 1+len(s2)):
if s1[x-1] == s2[y-1]:
M[x][y] = M[x-1][y-1] + 1
if M[x][y] > longest:
longest = M[x][y]
x_longest = x
else:
M[x][y] = 0
return s1[x_longest-longest : x_longest]
def getStemFromAffixCode (sFlex, sAffCode):
if sAffCode == "0":
return sFlex
if '/' not in sAffCode:
return "# error #"
sPfxCode, sSfxCode = sAffCode.split('/')
sFlex = sPfxCode[1:] + sFlex[(ord(sPfxCode[0])-48):]
return sFlex[:-(ord(sSfxCode[0])-48)] + sSfxCode[1:] if sSfxCode[0] != '0' else sFlex + sSfxCode[1:]
|
Added gc_core/py/text.py version [af72c36707].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
#!python3
import textwrap
from itertools import chain
def getParagraph (sText):
"generator: returns paragraphs of text"
iStart = 0
iEnd = sText.find("\n", iStart)
while iEnd != -1:
yield sText[iStart:iEnd]
iStart = iEnd + 1
iEnd = sText.find("\n", iStart)
yield sText[iStart:]
def wrap (sText, nWidth=80):
"generator: returns text line by line"
sText = sText.rstrip("\r\n")
while sText:
if len(sText) > nWidth:
nEnd = sText.rfind(" ", 0, nWidth) + 1
if nEnd > 0:
yield sText[0:nEnd]
sText = sText[nEnd:]
else:
yield sText[0:nWidth]
sText = sText[nWidth:]
else:
break
yield sText
def generateParagraph (sParagraph, aGrammErrs, aSpellErrs, nWidth=100):
"Returns a text with readable errors"
if not sParagraph:
return ""
lGrammErrs = sorted(aGrammErrs, key=lambda d: d["nStart"])
lSpellErrs = sorted(aSpellErrs, key=lambda d: d['nStart'])
sText = ""
nOffset = 0
for sLine in wrap(sParagraph, nWidth): # textwrap.wrap(sParagraph, nWidth, drop_whitespace=False)
sText += sLine + "\n"
ln = len(sLine)
sErrLine = ""
nLenErrLine = 0
nGrammErr = 0
nSpellErr = 0
for dErr in lGrammErrs:
nStart = dErr["nStart"] - nOffset
if nStart < ln:
nGrammErr += 1
if nStart >= nLenErrLine:
sErrLine += " " * (nStart - nLenErrLine) + "^" * (dErr["nEnd"] - dErr["nStart"])
nLenErrLine = len(sErrLine)
else:
break
for dErr in lSpellErrs:
nStart = dErr['nStart'] - nOffset
if nStart < ln:
nSpellErr += 1
nEnd = dErr['nEnd'] - nOffset
if nEnd > len(sErrLine):
sErrLine += " " * (nEnd - len(sErrLine))
sErrLine = sErrLine[:nStart] + "°" * (nEnd - nStart) + sErrLine[nEnd:]
else:
break
if sErrLine:
sText += sErrLine + "\n"
if nGrammErr:
for dErr in lGrammErrs[:nGrammErr]:
sMsg, *others = getReadableError(dErr).split("\n")
sText += "\n".join(textwrap.wrap(sMsg, nWidth, subsequent_indent=" ")) + "\n"
for arg in others:
sText += "\n".join(textwrap.wrap(arg, nWidth, subsequent_indent=" ")) + "\n"
sText += "\n"
del lGrammErrs[0:nGrammErr]
if nSpellErr:
del lSpellErrs[0:nSpellErr]
nOffset += ln
return sText
def getReadableError (dErr):
"Returns an error dErr as a readable error"
try:
s = u"* {nStart}:{nEnd} # {sLineId} / {sRuleId} : ".format(**dErr)
s += dErr.get("sMessage", "# error : message not found")
if dErr.get("aSuggestions", None):
s += "\n > Suggestions : " + " | ".join(dErr.get("aSuggestions", "# error : suggestions not found"))
if dErr.get("URL", None):
s += "\n > URL: " + dErr["URL"]
return s
except KeyError:
return u"* Non-compliant error: {}".format(dErr)
def createParagraphWithLines (lLine):
"Returns a text as merged lines and a set of data about lines (line_number_y, start_x, end_x)"
sText = ""
lLineSet = []
nLine = 1
n = 0
for iLineNumber, sLine in lLine:
sLine = sLine.rstrip("\r\n")
if nLine < len(lLine) and not sLine.endswith((" ", " ", "-", "–", "—")):
sLine += " "
lLineSet.append((iLineNumber, n, n + len(sLine)))
n += len(sLine)
sText += sLine
nLine += 1
return sText, lLineSet
def convertToXY (aGrammErrs, aSpellErrs, lLineSet):
"""Converts errors position as an y and x position in a text (y is line number, x is row number).
lLineSet is a list of sets (line_number_y, start_x, end_x) describing how the paragraph is divided."""
for dErr in chain(aGrammErrs, aSpellErrs):
for i, elem in enumerate(lLineSet, 1):
if dErr['nEnd'] <= elem[2]:
dErr['nEndY'] = elem[0]
dErr['nEndX'] = dErr['nEnd'] - elem[1]
break
for elem in reversed(lLineSet[:i]):
if dErr['nStart'] >= elem[1]:
dErr['nStartY'] = elem[0]
dErr['nStartX'] = dErr['nStart'] - elem[1]
break
del dErr['nStart']
del dErr['nEnd']
return aGrammErrs, aSpellErrs
|
Added gc_core/py/tokenizer.py version [27b6fefad2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# Very simple tokenizer
import re
_PATTERNS = {
"default":
(
r'(?P<PUNC>[.,?!:;…«»“”"()/·]+)',
r'(?P<LINK>(?:https?://|www[.]|\w+[@.]\w+[@.])[\w./?&!%=+*"\'@$#-]+)',
r'(?P<HASHTAG>[#@][\w-]+)',
r'(?P<HTML><\w+.*?>|</\w+ *>)',
r'(?P<PSEUDOHTML>\[/?\w+\])',
r'(?P<HOUR>\d\d?h\d\d\b)',
r'(?P<NUM>-?\d+(?:[.,]\d+))',
r"(?P<WORD>\w+(?:[’'`-]\w+)*)"
),
"fr":
(
r'(?P<PUNC>[.,?!:;…«»“”"()/·]+)',
r'(?P<LINK>(?:https?://|www[.]|\w+[@.]\w+[@.])[\w./?&!%=+*"\'@$#-]+)',
r'(?P<HASHTAG>[#@][\w-]+)',
r'(?P<HTML><\w+.*?>|</\w+ *>)',
r'(?P<PSEUDOHTML>\[/?\w+\])',
r"(?P<ELPFX>(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`])",
r'(?P<ORDINAL>\d+(?:er|nd|e|de|ième|ème|eme)\b)',
r'(?P<HOUR>\d\d?h\d\d\b)',
r'(?P<NUM>-?\d+(?:[.,]\d+|))',
r"(?P<WORD>\w+(?:[’'`-]\w+)*)"
)
}
class Tokenizer:
def __init__ (self, sLang):
self.sLang = sLang
if sLang not in _PATTERNS:
self.sLang = "default"
self.zToken = re.compile( "(?i)" + '|'.join(sRegex for sRegex in _PATTERNS[sLang]) )
def genTokens (self, sText):
for m in self.zToken.finditer(sText):
yield { "sType": m.lastgroup, "sValue": m.group(), "nStart": m.start(), "nEnd": m.end() }
|
Added gc_lang/fr/README_fr.txt version [459df4560b].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
GRAMMALECTE
Correcteur grammatical pour le français
version ${version}
_______________________________________________________________________________
Basé sur Lightproof
de László Németh
http://numbertext.org/lightproof/
Modifications de Lightproof et règles grammaticales :
Olivier R. - olivier<at>grammalecte<dot>net
Dicollecte : http://www.dicollecte.org/
Certaines des règles grammaticales sont reprises du correcteur
LanguageTool, notamment celles de Dominique Pellé.
Licence :
GPL : GNU General Public License
version 3 ou supérieure -- http://www.gnu.org/licenses/gpl-3.0.html
Ce correcteur emploie le dictionnaire Hunspell créé par Dicollecte :
http://www.dicollecte.org/home.php?prj=fr
|
Added gc_lang/fr/build_data.py version [5eaa962f47].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 |
#!python3
# FRENCH DATA BUILDER
#
# by Olivier R.
# License: MPL 2
import json
import os
import grammalecte.ibdawg as ibdawg
from grammalecte.echo import echo
from grammalecte.str_transform import defineSuffixCode
class cd:
"""Context manager for changing the current working directory"""
def __init__ (self, newPath):
self.newPath = os.path.expanduser(newPath)
def __enter__ (self):
self.savedPath = os.getcwd()
os.chdir(self.newPath)
def __exit__ (self, etype, value, traceback):
os.chdir(self.savedPath)
def makeDictionaries (sp, sVersion):
with cd(sp+"/dictionnaire"):
os.system("genfrdic.py -s -v "+sVersion)
def makeConj (sp, bJS=False):
print("> Conjugaisons ", end="")
print("(Python et JavaScript)" if bJS else "(Python seulement)")
dVerb = {}
lVtyp = []; dVtyp = {}; nVtyp = 0
lTags = []; dTags = {}; nTags = 0
dPatternList = { ":PQ": [], ":Ip": [], ":Iq": [], ":Is": [], ":If": [], ":K": [], ":Sp": [], ":Sq": [], ":E": [] }
dTrad = { "infi": ":Y", "ppre": ":PQ", "ppas": ":PQ",
"ipre": ":Ip", "iimp": ":Iq", "ipsi": ":Is", "ifut": ":If",
"spre": ":Sp", "simp": ":Sq",
"cond": ":K", "impe": ":E",
"1sg": ":1s", "2sg": ":2s", "3sg": ":3s", "1pl": ":1p", "2pl": ":2p", "3pl": ":3p", "1isg": ":1ś",
"mas sg": ":Q1", "mas pl": ":Q2", "mas inv": ":Q1", "fem sg": ":Q3", "fem pl": ":Q4", "epi inv": ":Q1"
}
# read lexicon
with open(sp+"/data/dictConj.txt", 'r', encoding='utf-8') as hSrc:
nStop = 0
for n, line in enumerate(hSrc.readlines()):
line = line.strip()
nTab = line.count("\t")
if nTab == 1:
# new entry
sLemma, sVtyp = line.split("\t")
dConj = { ":PQ": { ":P": "", ":Q1": "", ":Q2": "", ":Q3": "", ":Q4": ""},
":Ip": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "", ":1ś": "" },
":Iq": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" },
":Is": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" },
":If": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" },
":K": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" },
":Sp": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "", ":1ś": "" },
":Sq": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "", ":1ś": "" },
":E": { ":2s": "", ":1p": "", ":2p": "" }
}
if sVtyp not in lVtyp:
dVtyp[sVtyp] = nVtyp
lVtyp.append(sVtyp)
nVtyp += 1
elif nTab == 2:
# flexion
_, sTag, sFlex = line.split("\t")
if sTag.count(" ") == 0:
if sTag == "ppre":
dConj[":PQ"][":P"] = defineSuffixCode(sLemma, sFlex)
else:
mode, g = sTag.split(maxsplit=1)
try:
mode = dTrad[mode]
g = dTrad[g]
if dConj[mode][g] == "":
dConj[mode][g] = defineSuffixCode(sLemma, sFlex)
else:
# comment gérer les autres graphies ?
pass
except:
print(sLemma.encode("utf-8").decode("ascii"), " - non géré: ", mode, " / ", g)
elif line == "$":
# we store the dictionary of rules for this lemma
if dConj[":Ip"][":1ś"] == "2è":
dConj[":Ip"][":1ś"] = "2é"
elif sLemma == "pouvoir":
dConj[":Ip"][":1ś"] = "6uis"
lConjTags = []
for key in [":PQ", ":Ip", ":Iq", ":Is", ":If", ":K", ":Sp", ":Sq", ":E"]:
bFound = False
for i, d in enumerate(dPatternList[key]):
if dConj[key] == d:
bFound = True
lConjTags.append(i)
break
if not bFound:
lConjTags.append(len(dPatternList[key]))
dPatternList[key].append(dConj[key])
tConjTags = tuple(lConjTags)
if tConjTags not in lTags:
dTags[tConjTags] = nTags
lTags.append(tConjTags)
nTags += 1
dVerb[sLemma] = (dVtyp[sVtyp], dTags[tConjTags])
else:
print("# Error - unknown line #", n)
# convert tuples to bytes string
# si ça merde, toute la partie conversion peut être supprimée
# lBytesTags = []
# for t in lTags:
# b = b""
# for n in t:
# if n > 255:
# print("Erreur : l'indice ne peut être supérieur à 256 pour utiliser des chaînes d'octets (bytes strings)")
# exit()
# b += n.to_bytes(1, byteorder="big")
# lBytesTags.append(b)
# lTags = lBytesTags
# for key in dVerb.keys():
# b = b""
# for n in dVerb[key]:
# if n > 255:
# print("Erreur : l'indice ne peut être supérieur à 256 pour utiliser des chaînes d'octets (bytes strings)")
# exit()
# b += n.to_bytes(1, byteorder="big")
# dVerb[key] = b
# end conversion
## write file for Python
sCode = "## generated data (do not edit)\n\n" + \
"# Informations about verbs\n" + \
"lVtyp = " + str(lVtyp) + "\n\n" + \
"# indexes of tenses in _dPatternConj\n" + \
"lTags = " + str(lTags) + "\n\n" + \
"# lists of affix codes to generate inflected forms\n" + \
"dPatternConj = " + str(dPatternList) + "\n\n" + \
"# dictionary of verbs : (index of Vtyp, index of Tags)\n" + \
"dVerb = " + str(dVerb) + "\n"
open(sp+"/modules/conj_data.py", "w", encoding="utf-8", newline="\n").write(sCode)
if bJS:
## write file for JavaScript
with open(sp+"/modules-js/conj_data.json", "w", encoding="utf-8", newline="\n") as hDst:
hDst.write("{\n")
hDst.write(' "lVtyp": ' + json.dumps(lVtyp, ensure_ascii=False) + ",\n")
hDst.write(' "lTags": ' + json.dumps(lTags, ensure_ascii=False) + ",\n")
hDst.write(' "dPatternConj": ' + json.dumps(dPatternList, ensure_ascii=False) + ",\n")
hDst.write(' "dVerb": ' + json.dumps(dVerb, ensure_ascii=False) + "\n")
hDst.write("}\n")
def makeMfsp (sp, bJS=False):
print("> Pluriel/singulier/masculin/féminin ", end="")
print("(Python et JavaScript)" if bJS else "(Python seulement)")
aPlurS = set()
dTag = {}
lTagMasForm = []
lTagMiscPlur = []
dMiscPlur = {}
dMasForm = {}
# read lexicon
with open(sp+"/data/dictDecl.txt", 'r', encoding='utf-8') as hSrc:
lTag = []
lTagMasPl = []
for n, line in enumerate(hSrc.readlines()):
line = line.strip()
nTab = line.count("\t")
if nTab == 1:
# new entry
lTag.clear()
lTagMasPl.clear()
sLemma, sFlags = line.split("\t")
if sFlags.startswith("S"):
cType = "s"
elif sFlags.startswith("X"):
cType = "p"
elif sFlags.startswith("A"):
cType = "p"
elif sFlags.startswith("I"):
cType = "p"
elif sFlags.startswith("F"):
cType = "m"
elif sFlags.startswith("W"):
cType = "m"
else:
cType = "?"
print(" > inconnu : " + sFlags)
elif nTab == 2:
if cType == "s":
continue
_, sFlexTags, sFlex = line.split("\t")
if cType == "p":
if sFlexTags.endswith("pl"):
lTag.append(defineSuffixCode(sLemma, sFlex))
elif cType == "m":
if sFlexTags.endswith("mas sg") or sFlexTags.endswith("mas inv"):
lTag.append(defineSuffixCode(sLemma, sFlex))
if sFlexTags.endswith("mas pl"):
lTagMasPl.append(defineSuffixCode(sLemma, sFlex))
else:
print("erreur: " + cType)
elif line == "$":
if cType == "s":
aPlurS.add(sLemma)
elif cType == "p":
sTag = "|".join(lTag)
if sTag not in dTag:
dTag[sTag] = len(lTagMiscPlur)
lTagMiscPlur.append(sTag)
dMiscPlur[sLemma] = dTag[sTag]
elif cType == "m":
sTag = "|".join(lTag)
if lTagMasPl:
sTag += "/" + "|".join(lTagMasPl)
if sTag not in dTag:
dTag[sTag] = len(lTagMasForm)
lTagMasForm.append(sTag)
dMasForm[sLemma] = dTag[sTag]
else:
print("unknown tag: " + ctype)
else:
print("# Error - unknown line #", n)
## write file for Python
sCode = "# generated data (do not edit)\n\n" + \
"# list of affix codes\n" + \
"lTagMiscPlur = " + str(lTagMiscPlur) + "\n" + \
"lTagMasForm = " + str(lTagMasForm) + "\n\n" + \
"# dictionary of words with uncommon plurals (-x, -ux, english, latin and italian plurals) and tags to generate them\n" + \
"dMiscPlur = " + str(dMiscPlur) + "\n\n" + \
"# dictionary of feminine forms and tags to generate masculine forms (singular and plural)\n" + \
"dMasForm = " + str(dMasForm) + "\n"
open(sp+"/modules/mfsp_data.py", "w", encoding="utf-8", newline="\n").write(sCode)
if bJS:
## write file for JavaScript
sCode = '{\n' + \
' "lTagMiscPlur": ' + json.dumps(lTagMiscPlur, ensure_ascii=False) + ",\n" + \
' "lTagMasForm": ' + json.dumps(lTagMasForm, ensure_ascii=False) + ",\n" + \
' "dMiscPlur": ' + json.dumps(dMiscPlur, ensure_ascii=False) + ",\n" + \
' "dMasForm": ' + json.dumps(dMasForm, ensure_ascii=False) + "\n}"
open(sp+"/modules-js/mfsp_data.json", "w", encoding="utf-8", newline="\n").write(sCode)
def makePhonetTable (sp, bJS=False):
print("> Correspondances phonétiques ", end="")
print("(Python et JavaScript)" if bJS else "(Python seulement)")
try:
oDict = ibdawg.IBDAWG("French.bdic")
except:
traceback.print_exc()
return
with open(sp+"/data/phonet_simil.txt", 'r', encoding='utf-8') as hSrc:
# set of homophonic words
lSet = []
for sLine in hSrc.readlines():
if not sLine.startswith("#") and sLine.strip():
lSet.append(sorted(sLine.strip().split()))
# dictionary of words
dWord = {}
for i, aSet in enumerate(lSet):
for sWord in aSet:
if oDict.lookup(sWord):
dWord[sWord] = i # warning, what if word in several sets?
else:
echo("Mot inconnu : " + sWord)
# dictionary of morphologies
dMorph = {}
for sWord in dWord:
dMorph[sWord] = oDict.getMorph(sWord)
# write file for Python
sCode = "# generated data (do not edit)\n\n" + \
"dWord = " + str(dWord) + "\n\n" + \
"lSet = " + str(lSet) + "\n\n" + \
"dMorph = " + str(dMorph) + "\n"
open(sp+"/modules/phonet_data.py", "w", encoding="utf-8", newline="\n").write(sCode)
if bJS:
## write file for JavaScript
sCode = "{\n" + \
' "dWord": ' + json.dumps(dWord, ensure_ascii=False) + ",\n" + \
' "lSet": ' + json.dumps(lSet, ensure_ascii=False) + ",\n" + \
' "dMorph": ' + json.dumps(dMorph, ensure_ascii=False) + "\n}"
open(sp+"/modules-js/phonet_data.json", "w", encoding="utf-8", newline="\n").write(sCode)
def before (spLaunch, dVars, bJS=False):
print("========== Build Hunspell dictionaries ==========")
makeDictionaries(spLaunch, dVars['oxt_version'])
def after (spLaunch, dVars, bJS=False):
print("========== Build French data ==========")
makeMfsp(spLaunch, bJS)
makeConj(spLaunch, bJS)
makePhonetTable(spLaunch, bJS)
|
Added gc_lang/fr/config.ini version [af08a98257].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | [args] lang = fr lang_name = French locales = fr_FR fr_BE fr_CA fr_CH fr_LU fr_MC fr_BF fr_CI fr_SN fr_ML fr_NE fr_TG fr_BJ country_default = FR name = Grammalecte implname = grammalecte version = 0.5.16 author = Olivier R. provider = Dicollecte link = http://grammalecte.net description = Correcteur grammatical pour le français. extras = README_fr.txt logo = logo.png # lexicon source lexicon_src = lexicons/French.lex # binary dictionary name py_binary_dic = French.bdic js_binary_dic = French.json # Finite state automaton compression: 1, 2 (experimental) or 3 (experimental) fsa_method = 1 # stemming method: S for suffixes only, A for prefixes and suffixes stemming_method = S # LibreOffice unopkg = C:/Program Files/LibreOffice 5/program/unopkg.com oxt_version = 6.0.3 oxt_identifier = French.linguistic.resources.from.Dicollecte.by.OlivierR # Firefox fx_identifier = French-GC@grammalecte.net fx_name = Grammalecte [fr] # Thunderbird tb_identifier = French-GC-TB@grammalecte.net tb_name = Grammalecte [fr] tb_debug_extension_path = _build/tb-debug.profile/extensions/French-GC-TB@grammalecte.net # Set Thunderbird folder in your PATH variable # Create a local profile: # thunderbird -CreateProfile "debug _build\tb-debug.profile" # Or you can use the GUI with: # thunderbird -P # To launch Thunderbird with the profile debug, type: # thunderbird -P debug # Then, install the extension (.xpi) the first time. # Then, you can build Grammalecte and launch Thunderbird automatically with `make.py [lang] -js -tb` [oxt] # the following files must be in your project folder, files will be copied into the zip archive rules.grx = fr-rules.txt oxt/addons.xcu = addons.xcu oxt/package-description.txt = package-description.txt # images oxt/_img/logo100.png = img/logo100.png oxt/_img/LaMouette_small.png = img/LaMouette_small.png oxt/_img/grammalecte_16.bmp = img/grammalecte_16.bmp oxt/_img/french_flag_16.bmp = img/french_flag_16.bmp # AppLauncher oxt/AppLauncher.py = AppLauncher.py oxt/helpers.py = pythonpath/helpers.py # About oxt/About/About.py = pythonpath/About.py oxt/About/ab_strings.py = pythonpath/ab_strings.py # Dictionaries oxt/Dictionnaires/dictionaries = dictionaries oxt/Dictionnaires/dictionaries.xcu = dictionaries.xcu oxt/Dictionnaires/DictionarySwitcher.py = pythonpath/DictionarySwitcher.py oxt/Dictionnaires/ds_strings.py = pythonpath/ds_strings.py # ContextMenu oxt/ContextMenu/ContextMenu.py = ContextMenu.py oxt/ContextMenu/jobs.xcu = config/jobs.xcu # TextFormatter oxt/TextFormatter/TextFormatter.py = pythonpath/TextFormatter.py oxt/TextFormatter/tf_strings.py = pythonpath/tf_strings.py oxt/TextFormatter/tf_options.py = pythonpath/tf_options.py # Conjugueur oxt/Conjugueur/Conjugueur.py = pythonpath/Conjugueur.py # Modify author oxt/ChangeAuthor/Author.py = pythonpath/Author.py oxt/ChangeAuthor/ca_strings.py = pythonpath/ca_strings.py |
Added gc_lang/fr/data/dictConj.txt version [72c1a37e0e].
more than 10,000 changes
Added gc_lang/fr/data/dictDecl.txt version [b83c3ed7ca].
more than 10,000 changes
Added gc_lang/fr/data/phonet_simil.txt version [316dba4c75].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 | # Homophonies a as à ha ah abaisse abaisses abaissent abbesse abbesses abord abord abhorre abhorres abhorrent accueil accueils accueille accueilles accueillent acre acres âcre âcres adhérant adhérent adhérents ai ait aie aies aient ais hé eh es haie haies hais est et air airs aire aires ère ères hère hères erre erres errent ers haire haires ail aille ailles aillent aïe aile ailes elle elles aller allers allée allées allé allés allez allais allait allaient amen amène amènes amènent an ans en antre antres entre entres entrent appareil appareils appareille appareilles appareillent appel appels appelle appelles appellent appui appuis appuie appuies appuient archée archées archer archers archet archets arête arêtes arrête arrêtes arrêtent assassinat assassinats assassina assassinas assassinât assignat assignats assigna assignas assignât assimilat assimilats assimila assimilas assimilât atèle atèles attelle attelles attellent attentat attentats attenta attentas attentât attribut attributs attribue attribues attribuent au aux ô eau eaux haut hauts auteur auteurs auteure auteures hauteur hauteurs avait avais avaient avez avé aval avals avale avales avalent bail baille bailles baillent bâille bâilles bâillent bâillent baye bayes bayent bâillon bâillons baillons bayons bal bals balle balles balai balais balaie balaies balaient ballet ballets bar bars barre barres barrent bard bards bas bât bâts bah bassinet bassinets bassiner bassinais bassinait bassinaient bassinez basilic basilics basilique basiliques beau beaux baux beur beurs beurre beurre beurrent bit bits bite bites bitent bitte bittes bittent bloc blocs bloque bloques bloquent bois boit boîte boîtes boite boite boitent boss bosse bosses bossent bourg bourgs bourre bourres bourrent bous boue boues bout bouts box boxe boxes boxent bric brick bricks brique briques briquent bure bures burent but buts bute butes butent butte buttes buttent bûtes cal cals cale cales calent calcul calculs calcule calcules calculent camouflet camouflets camoufler camouflais camouflaient camouflez camp camps quand quant khan khans cap caps cape capes cache caches cachent cash cachet cachets cacher cachais cachait cachaient cachez cadran cadrans cadrant caret carets carré carrés carrais carrait carraient carrez ce se céleri céleris sellerie selleries celle celles sel sels selle selles sellent cèle cèles cèlent scelle scelles scellent cendre cendres sandre sandres cène saine saines scène scènes senne sennes sen Seine centon centons santon santons sentons cerf cerfs serre serres serrent sers sert serf serfs ces ses sais sait cet cette sept set sets chant chants champ champs chaud chauds chaux show shows chaut chic chics chique chiques chiquent choc chocs choque choques choquent choix choie choies choient choral chorals chorale chorales corral corrals ci si scie scies scient six sis cilice cilices silice silices cire cires cirent sire sires cirre cirres cirrhe cirrhes cite cites citent site sites scythe scythes clair clairs claire claires clerc clercs clic clics clique cliques cliquent cliquet cliquets cliquer cliquais cliquait cliquaient cliquez coffret coffrets coffrer coffrais coffrait coffraient coffrez coïncidant coïncident coïncidents col cols colle colles collent khôl khôls collet collets coller collais collait collaient collez combinat combinats combina combinas combinât communicant communicants communiquant complet complets complais complait complaît connexion connexions connections conseil conseils conseille conseilles conseillent conseiller conseillers conseiller conseillais conseillait conseillaient conseillez consonne consonnes consone consones consonent contact contacts contacte contactes contactent conte contes content compte comptes comptent comte comtes continu continus continue continues continuent convaincant convaincants convainquant convergeant convergent convergents convoi convois convoie convoies convoient cool cools coule coules coulent coq coqs coque coques coke cokes cote cotes cotent côte côtes cotte cottes coter coté cotais cotait cotaient côté côtés cou cous coût coûts coup coups coud couds couplet couplets coupler couplais couplait couplaient couplez cour cours court courts coure coures courent courre crachat crachats cracha crachas crachât crack cracks craque craques craquent krak kraks crac créer créé créés créée créées crée crées créent créais créait créaient créez crème crèmes chrême chrêmes creuset creusets creuser creusais creusait creusaient creusez cri cris crie cries crient crois croit croient croîs croît croix cuir cuirs cuire cumul cumuls cumule cumules cumulent cumulet cumulets cumuler cumulais cumulait cumulaient cumulez cygne cygnes signe signes signent dans dent dents danse danses dansent dense denses dé dés dès dais des deal deals deale deales dealent défi défis défie défies défient dégel dégels dégèle dégèles dégèlent délégant délégants déléguant dépens dépends dépend desceller déceler desseller désir désirs désire désires désirent détail détails détaille détailles détaillent diagnostic diagnostics diagnostique diagnostiques diagnostiquent différant différent différents dîne dînes dînent dyne dynes dis dit dît dix divergeant divergent divergents doigt doigts dois doit don dons dont doublet doublets doubler doublais doublait doublaient doublez du dû dus due dues dialysat dialysats dialysa dialysas dialysât éclair éclairs éclaire éclaires éclairent égal égale égales éjaculat éjaculats éjacula éjaculas éjaculât élisais élisait élisaient élisez Élysée Élysées emploi emplois emploie emploies emploient empreinte empreintes emprunte empruntes empruntent ennui ennuis ennuie ennuies ennuient entretien entretiens entretient entrée entrées entrer entrais entrait entrez entraient envoi envois envoie envoies envoient envol envols envole envoles envolent épais épée épées équivalant équivalent équivalents essai essais essaie essaies essaient essaye essayes essayent étai étais était étaient été étés étain étains éteint éteins étal étals étale étales étalent étang étangs étant étends étend être êtres hêtre hêtres eusse eusses eussent us éveil éveils éveille éveilles éveillent excellant excellent excellents exsudat exsudats exsuda exsudas exsudât extravagant extravagants extravaguant fabriquant fabricant fabricants face faces fasse fasses fassent fasce fasces faire fer fers ferre ferres ferrent faisan faisans faisant fait faits fée fées far fard fards phare phares fatigant fatigants fatiguant fausse fausses faussent fosses fosses fausset faussets fossé fossés fausser faussais faussait faussaient faussez faux faut faîte faîtes fait faits faite faites fête fêtes fêtent fèces fesse fesses fessent feuillet feuillets feuillée feuillées fi fis fit fît fief fiefs fieffe fieffes fieffent fil fils file files filent filet filets filer filais filait filaient filez film films filme filmes filment filtrat filtrats filtra filtras filtrât fin fins faim faims feins feint flan flan flanc flancs flic flics flique fliques fliquent flou flous floue floues flouent foi fois foie foies font fonts fond fonds forçat forçats força forças forçât foret forets forer forais forait foraient forêt forêts format formats forma formas formât fort forts for fore fores forent fors fou fous fout four fours fourre fourres fourrent fumée fumées fumet fumets fumer fumais fumait fumaient fumez fus fut fût gal gals gale gales galle galles gang gangs gangue gangues garantie garanties garantis garantit gaule gaules goal goals gaz gaze gazes gazent gel gels gèle gèles gèlent gène gènes gêne gênes gênent golf golfs golfe golfes golfent gosse gosses gausse gausses gaussent gauss Gauss goulet goulets goulée goulées gré grès guère guerre guerres hâle hâles halle halles hall halls haltère haltères altère altères altèrent harde hardes arde ardes ardent hausse hausses haussent os haute hautes hôte hôtes hotte hotte ôte ôtes ôtent héro héros héraut hérauts heur heure heures heurt heurts hochet hochets hocher hochais hochait hochaient hochez homme hommes ohm ohms heaume heaumes hydrolysat hydrolysats hydrolysa hydrolysas hydrolysât hyène hyènes yen yens i y il ils île îles incarnat incarnats incarna incarnas incarnât indic indics indique indiques indiquent infiltrat infiltrats infiltra infiltras infiltrât institut instituts institue institues instituent internat internats interna internas internât intriguant intrigant intrigants jar jars jard jards jarre jarres jardinet jardinets jardiner jardinais jardinait jardinaient jardinez jet jets jette jettes jettent jeune jeunes jeûne jeûnes jeûnent joue joues jouent joug jougs jouer jouais jouait jouaient jouet jouets jouez kermès kermesse kermesses la là las lac lacs laque laques laquent lacet lacets lacer laçais laçait laçaient lacez lasser lassais lassait lassaient lassez legs lègue lègues lèguent les laid laids lait laits laie laies lai levée levées lever levers levais levait levaient levez lieu lieux lieue lieues lice lices lisse lisses lissent lys lis lit lits lie lies lient lire lires lyre lyres livret livrets livrer livrais livrait livraient livrez loch lochs loque loques loir loirs Loir Loire loup loups loue loues louent luth luths luttes luttes luttent lut lute lutes lutent lyophilisat lyophilisats lyophilisa lyophilisas lyophilisât ma mas mât mâts macro macros maquereau maquereaux magazine magazines magasine magasines magasinent mai mais mes met mets main mains maint maints maintien maintiens maintient maire maires mer mers mère mères maison maisons méson mésons maître maîtres mètre mètres mettre mal mâle mâles malle malles mante mantes mente mentes mentent menthe menthes marais marée marées marrais marrait marraient marché marchés marcher marchais marchait marchez marchaient mare mares marre marres marrent marc marcs mark marks marque marques marquent mec mecs Mecque mél mêle mêles mêlent mess messe messes meurs meurt mœurs mi mie mies mis mit mît mir mirs mire mires myrrhe myrrhes mite mites mythe mythes mol mols mole moles molle molles môle môles mon mont monts monitorat monitorats monitora monitoras monitorât mort morts mors mords mord maure maures mot mots maux moi mois mou mous moult moût moûts mouds moud moue moues mur murs mûr mûrs mûre mûres mure mures murent muret murets murer murais murait muraient murez mu mus mû mue mues muent nais nait nez navigant navigants naviguant négligeant négligent négligents ni nid nids nie nies nient noix noie noies noient notre nôtre nôtres nous noue noues nouent nui nuis nuit nuits octroi octrois octroie octroies octroient on ont or ors hors ou où houx houe houes hou oubli oublis oublie oublies oublient pain pains pin pins peins peint pair pairs paire paires père pères perds perd pers paix pet pets paie paies paient pal pals pale pales pâle pâles palier paliers pallier palliais palliait palliez palliaient pan pans pend pends panse panses pansent pense penses pensent pansé pansés pansée pansées pensé pensés pensée pensées penser pensais pensait pensaient pensez pansais pensez pansait pansaient par part parts par pare pares parent pars parait paraît parais parer parez parant parent parents parc parcs parque parques parquent Parque Parques parquet parquets parquer parquais parquait parquaient parquez pari paris parie paries parient Paris parquet parquets parquer parquais parquait parquaient parquez parti partis partit partie parties pause pauses pose poses posent peau peaux pot pots Po Pau pêche pêches pèche pèches pèchent péché péchés pêcher pêchers péchais péchait péchaient pêchais pêchait pêchaient peine peines peinent penne pennes pêne pênes pèle pèles pèlent pelle pelles pellent pellet pellets peler pelait pelais pelaient peller pellait pellais pellaient pensionnat pensionnats pensionna pensionnas pensionnât peu peux peut pic pics pique piques piquent pinson pinsons pinçons piquer piquais piquait piquaient piqué piqués piquée piquées piquet piquets pissat pissats pissa pissas pissât plagiat plagiats plagia plagias plagiât plaid plaids plaide plaides plaident plain plains plaint plaints plein pleins plais plaît plaie plaies plan plans plant plants pli plis plie plies plient police polices policent polisse polisses polissent poêle poêles poil poils poignée poignées poignet poignets poids pois poix pouah point points poing poings polissoir polissoirs polissoire polissoires porc porcs port ports pore pores pool pools poule poules post poste postes postent pou poux pouls pouf poufs pouffe pouffes pouffent pouce pouces pousse pousses poussent précédant précédent précédents prêt prêts près pré prés primat primats prima primas primât prix pris prit prît prie pries prient profil profils profile profiles profilent pronostic pronostics pronostique pronostiques pronostiquent provoc provocs provoque provoques provoquent provocant provocants provoquant pu pue pues pus put puce puces pucent pusse pusses pussent puis puits quadruplet quadruplets quadrupler quadruplais quadruplait quadruplaient quadruplez quintuplet quintuplets quintupler quintuplais quintuplait quintuplaient quintuplez rappel rappels rappelle rappelles rappellent racket rackets raquette raquettes rackette rackettes rackettent raffinat raffinats raffina raffinas raffinât rauque rauques roc rocs roque roques roquent recel recels recèle recèles recèlent recueil recueils recueille recueilles recueillent recul reculs recule recules reculent régal régals régale régale régalent reine reines renne rennes rêne rênes relai relais relaye relayes relayent remblai remblais remblaie remblaies remblaient renvoi renvois renvoie renvoies renvoient ressenti ressentis ressentit restaurant restaurants restaurent résultat résultats résulta résultât réveil réveils réveille réveilles réveillent ris rit rient rie ries riz roue roues rouent roux sac sacs saque saques saquent sachet sachets sachez sacret sacrets sacré sacrés sacrée sacrées sacrer sacrais sacrait sacraient sacrez salariat salariats salaria salarias salariât sale sales salent salles salles salut saluts salue salues saluent sang sangs sans cent cents sens sent cens saoul saouls saoule saoules saoulent soûl soûls soûle soûles soûlent soul souls soule soules soulent saké sakés saquer saquais saquait saquaient saquez satire satires satyre satyres saut sauts sot sots sceau sceaux seau seaux saute sautes sautent sotte sottes savon savons sein seins saint saints sain sains ceins ceint ceints ses ces sais sait shoot shoots shoote shootes shootent sifflet sifflets siffler sifflais sifflait sifflaient sifflez signal signale signales signalent signet signets signer signais signait signaient signez soi soie soies soit sois soient sol sols sole soles saule saules somme sommes somment sommeil sommeils sommeille sommeilles sommeillent sommet sommets sommer sommais sommait sommaient sommez son sons sont sonnet sonnets sonner sonnais sonnait sonnaient sonnez sors sort sorts sortie sorties sortis sortit souci soucis soucie soucies soucient soutien soutiens soutient soufflet soufflets soufflé soufflés souffler soufflais soufflait soufflaient soufflez soufre soufres souffre souffres souffrent stress stresse stresses stressent substitut substituts substitue substitues substituent sui suis suit suie suies survie survies survis survit survol survols survole survoles survolent ta tas taie taies tes thé thés tain teint teints thym thyms tin tins tint teins tant temps tends tend tante tantes tente tentes tentent tapis tapit tapît tare tares tard teinte teintes teintent tinte tintes tintent test tests teste testes testent tête têtes tète tètes tètent tic tics tique tiques tiquent tir tirs tire tires tirent tien tiens tient toc toque toques toquent toi toit toits ton tons thon thons tond tonds tort torts tore tores taure taures tord tords tors tournoi tournois tournoie tournoies tournoient tout toux tous tousse tousses toussent trafic trafics trafique trafiques trafiquent tram trams trame trames trament travail travaille travailles travaillent treuil treuils treuille treuilles treuillent tri tris trie tries trient triplet triplets tripler triplais triplait triplaient triplez troc trocs troque troques troquent troquet troquets troquer troquais troquait troquaient troquez troll trolls trolle trolles trollent troller trolley trolleys trollais trollait trollaient trollez trou trous troue troues trouent truc trucs truque truques truquent tu tus tue tues tuent tutorat tutorats tutora tutoras tutorât usa usas USA vacant vacants vaquant vais vé vés vain vains vin vins vint vingt vaincs vainc val vals valent valet valets valais valait valaient valez vallée vallées vaux vaut vau veau veaux vos vent vents vend vends van vans ver vers verre verres vert verts vair verrat verrats verra verras verset versets verser versais versait versaient versez veule veules veulent veux veut vœu vœux vil vils vile viles ville villes vie vies vis vit vis vice vices visse visses vissent viol viols viole violes violent violant violent violents violat violats viola violas violât violet violets violer violais violait violaient violez violé violés violée violées voix voie voies voient vois voit voir voire vol vols vole voles volent volet volets voler volais volait volaient volez vomi vomis vomit vous voue voues vouent zigzagant zigzagants zigzaguant |
Added gc_lang/fr/dictionnaire/_templates/moz-snapshot.png version [8dc8870d7e].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/moz/install.rdf version [349100bbce].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<!-- https://developer.mozilla.org/en-US/docs/Install_Manifests -->
<em:id>${mozId}@dictionaries.addons.mozilla.org</em:id>
<em:version>${version}</em:version>
<em:unpack>true</em:unpack>
<em:type>64</em:type> <!-- dictionary -->
<!-- Front End MetaData -->
<em:name>Dictionnaire français</em:name>
<em:description>${description}</em:description>
<em:creator>Olivier R.</em:creator>
<em:contributor>Olivier R.</em:contributor>
<em:contributor>Sylvain P.</em:contributor>
<em:contributor>Jean-Luc T.</em:contributor>
<em:contributor>Laurent Dubois</em:contributor>
<em:contributor>Dominique Pellé</em:contributor>
<em:contributor>Pierre Poisson</em:contributor>
<em:contributor>Pierre-Yves</em:contributor>
<em:contributor>Renouvo</em:contributor>
<em:homepageURL>http://www.dicollecte.org/</em:homepageURL>
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!-- Firefox -->
<em:minVersion>14.0</em:minVersion>
<em:maxVersion>*</em:maxVersion>
</Description>
</em:targetApplication>
<em:targetApplication>
<Description>
<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> <!-- Thunderbird -->
<em:minVersion>14.0</em:minVersion>
<em:maxVersion>53.*</em:maxVersion>
</Description>
</em:targetApplication>
<em:targetApplication>
<Description>
<em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id> <!-- SeaMonkey -->
<em:minVersion>2.12</em:minVersion>
<em:maxVersion>*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
|
Added gc_lang/fr/dictionnaire/_templates/ooo/DictionarySwitcher.py version [9680ccdc4b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# -*- coding: utf8 -*-
# French Dictionary Switcher
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import re
import traceback
import ds_strings
from com.sun.star.task import XJobExecutor
from com.sun.star.awt import XActionListener
from com.sun.star.beans import PropertyValue
def getWindowSize ():
"return main window size"
xCurCtx = uno.getComponentContext()
xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx)
xContainerWindow = xDesktop.getCurrentComponent().CurrentController.Frame.ContainerWindow
xWindowSize = xContainerWindow.convertSizeToLogic(xContainerWindow.Size, uno.getConstantByName("com.sun.star.util.MeasureUnit.POINT"))
#print(xContainerWindow.Size.Width, ">", xWindowSize.Width)
#print(xContainerWindow.Size.Height, ">", xWindowSize.Height)
xWindowSize.Width = xWindowSize.Width * 0.666
xWindowSize.Height = xWindowSize.Height * 0.666
return xWindowSize
class FrenchDictionarySwitcher (unohelper.Base, XActionListener, XJobExecutor):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.xContainer = None
self.dialog = None
self.xRB_m = None
self.xRB_c = None
self.xRB_r = None
self.xRB_f = None
self.sCurrentDic = ''
self.sSelectedDic = ''
# In this extension, French is default language.
# It is assumed that those who need to use the French dictionaries understand French and may not understand English.
xSettings = getConfigSetting("/org.openoffice.Setup/L10N", False)
sLocale = xSettings.getByName("ooLocale") # Note: look at ooSetupSystemLocale value ?
if sLocale[0:2] in ds_strings.dStrings:
self.dUI = ds_strings.dStrings[sLocale[0:2]]
else:
self.dUI = ds_strings.dStrings["fr"]
def addWidget (self, name, wtype, x, y, w, h, **kwargs):
xWidget = self.dialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
xWidget.Name = name
xWidget.PositionX = x
xWidget.PositionY = y
xWidget.Width = w
xWidget.Height = h
for k, w in kwargs.items():
setattr(xWidget, k, w)
self.dialog.insertByName(name, xWidget)
return xWidget
def run (self):
# what is the current dictionary
xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", False)
xLocations = xSettings.getByName("Locations")
m = re.search(r"fr-(\w*)\.(?:dic|aff)", xLocations[0])
self.sCurrentDic = m.group(1)
# dialog
self.dialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.dialog.Width = 200
self.dialog.Height = 290
self.dialog.Title = self.dUI.get('title', "#title#")
xWindowSize = getWindowSize()
self.dialog.PositionX = int((xWindowSize.Width / 2) - (self.dialog.Width / 2))
self.dialog.PositionY = int((xWindowSize.Height / 2) - (self.dialog.Height / 2))
# xWidgets
padding = 10
hspace = 60
posY1 = 20; posY2 = posY1 + hspace; posY3 = posY2 + hspace; posY4 = posY3 + hspace; posY5 = posY4 + hspace + 10;
nLblWidth = 170
nLblHeight = 20
nDescWidth = 170
nDescHeight = 40
xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD1.Height = 12
xFD1.Name = "Verdana"
xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD2.Height = 11
xFD2.Name = "Verdana"
xFD3 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD3.Height = 10
xFD3.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFD3.Name = "Verdana"
gbm = self.addWidget('groupbox', 'GroupBox', 5, 5, 190, 260, Label = self.dUI.get('choose', "#choose#"), FontDescriptor = xFD1, FontRelief = 1, TextColor = 0xAA2200)
# Note: the only way to group RadioButtons is to create them successively
rbm_m = self.addWidget('rb-moderne', 'RadioButton', padding, posY1, nLblWidth, nLblHeight, Label = self.dUI.get('moderne', "#moderne#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_m = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_m.setModel(rbm_m)
rbm_c = self.addWidget('rb-classique', 'RadioButton', padding, posY2, nLblWidth, nLblHeight, Label = self.dUI.get('classique', "#classique#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_c = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_c.setModel(rbm_c)
rbm_r = self.addWidget('rb-reforme1990', 'RadioButton', padding, posY3, nLblWidth, nLblHeight, Label = self.dUI.get('reforme1990', "#reforme1990#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_r = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_r.setModel(rbm_r)
rbm_t = self.addWidget('rb-toutesvariantes', 'RadioButton', padding, posY4, nLblWidth, nLblHeight, Label = self.dUI.get('toutesvariantes', "#toutesvariantes#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_t = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_t.setModel(rbm_t)
label_m = self.addWidget('label_m', 'FixedText', 20, posY1+10, nDescWidth, nDescHeight, Label = self.dUI.get('descModern', "#descModern#"), MultiLine = True)
label_c = self.addWidget('label_c', 'FixedText', 20, posY2+10, nDescWidth, nDescHeight, Label = self.dUI.get('descClassic', "#descClassic#"), MultiLine = True)
label_r = self.addWidget('label_r', 'FixedText', 20, posY3+10, nDescWidth, nDescHeight, Label = self.dUI.get('descReform', "#descReform#"), MultiLine = True)
label_t = self.addWidget('label_t', 'FixedText', 20, posY4+10, nDescWidth, nDescHeight, Label = self.dUI.get('descAllvar', "#descAllvar#"), MultiLine = True)
if self.sCurrentDic:
self.setRadioButton(self.sCurrentDic)
sMsgLabel = self.dUI.get('restart', "#restart#")
bButtonActive = True
else:
sMsgLabel = self.dUI.get('error', "#error#")
bButtonActive = False
label_info = self.addWidget('label_info', 'FixedText', 10, posY4+50, 180, 10, Label = sMsgLabel, TextColor = 0xAA2200, MultiLine = True)
button = self.addWidget('select', 'Button', padding+40, posY5, 100, 14, Label = self.dUI.get('select', "#select#"), FontDescriptor = xFD3, TextColor = 0x004400, Enabled = bButtonActive)
# container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.dialog)
self.xContainer.getControl('select').addActionListener(self)
self.xContainer.setVisible(False)
toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(toolkit, None)
self.xContainer.execute()
def setRadioButton (self, sDic):
if sDic == 'moderne':
self.xRB_m.setState(True)
elif sDic == 'classique':
self.xRB_c.setState(True)
elif sDic == 'reforme1990':
self.xRB_r.setState(True)
elif sDic == 'toutesvariantes':
self.xRB_t.setState(True)
else:
pass
def actionPerformed (self, actionEvent):
try:
if self.xRB_m.getState():
self.sSelectedDic = 'moderne'
elif self.xRB_c.getState():
self.sSelectedDic = 'classique'
elif self.xRB_r.getState():
self.sSelectedDic = 'reforme1990'
elif self.xRB_t.getState():
self.sSelectedDic = 'toutesvariantes'
else:
# no dictionary selected
pass
self.xContainer.endExecute()
except:
traceback.print_exc()
def trigger (self, args):
try:
dialog = FrenchDictionarySwitcher(self.ctx)
dialog.run()
if dialog.sSelectedDic and dialog.sSelectedDic != dialog.sCurrentDic :
# Modify the registry
xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True)
xLocations = xSettings.getByName("Locations")
v1 = xLocations[0].replace(dialog.sCurrentDic, dialog.sSelectedDic)
v2 = xLocations[1].replace(dialog.sCurrentDic, dialog.sSelectedDic)
#xSettings.replaceByName("Locations", xLocations) # doesn't work, see line below
uno.invoke(xSettings, "replaceByName", ("Locations", uno.Any("[]string", (v1, v2))))
xSettings.commitChanges()
except:
traceback.print_exc()
def getConfigSetting (sNodeConfig, bUpdate):
# get a configuration node
# example: aSettings = getConfigSetting( "/org.openoffice.Office.Common/Path/Current", false)
xSvMgr = uno.getComponentContext().ServiceManager
xConfigProvider = xSvMgr.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider", uno.getComponentContext())
xPropertyValue = PropertyValue()
xPropertyValue.Name = "nodepath"
xPropertyValue.Value = sNodeConfig
if bUpdate:
sService = "com.sun.star.configuration.ConfigurationUpdateAccess"
else:
sService = "com.sun.star.configuration.ConfigurationAccess"
xSettings = xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,))
return xSettings
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(FrenchDictionarySwitcher, 'dicollecte.FrenchDictionarySwitcher', ('com.sun.star.task.Job',))
|
Added gc_lang/fr/dictionnaire/_templates/ooo/DictionarySwitcher.save.py version [8b30bb88f9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
# -*- coding: utf8 -*-
# French Dictionary Switcher
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import sys
import re
#import os.path
from com.sun.star.task import XJobExecutor
from com.sun.star.awt import XActionListener
from com.sun.star.awt import WindowDescriptor
from com.sun.star.awt.WindowClass import MODALTOP
from com.sun.star.awt.VclWindowPeerAttribute import OK, OK_CANCEL, YES_NO, YES_NO_CANCEL, RETRY_CANCEL, DEF_OK, DEF_CANCEL, DEF_RETRY, DEF_YES, DEF_NO
from com.sun.star.beans import PropertyValue
# XRay - API explorer
from com.sun.star.uno import RuntimeException as _rtex
def xray(myObject):
try:
sm = uno.getComponentContext().ServiceManager
mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
scriptPro = mspf.createScriptProvider("")
xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application")
xScript.invoke((myObject,), (), ())
return
except:
raise _rtex("\nBasic library Xray is not installed", uno.getComponentContext())
# END Xray
DEBUG = False
if DEBUG and sys.platform.startswith('win'):
import codecs
sys.stdout = codecs.open("C:\_multidict_stdout.txt", "w", "utf-8")
def handleException (ctx=None):
import traceback
'''Display exception in a message dialog'''
s = '\n'.join(traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
if not sys.platform.startswith('win'):
# also print trace on stdout/stderr on non-Windows platform
traceback.print_exc()
else:
# no default stdout/stderr on Windows
print(s)
if not ctx:
return
xSvMgr = ctx.ServiceManager
xDesktop = xSvMgr.createInstanceWithContext('com.sun.star.frame.Desktop', ctx)
xDoc = xDesktop.getCurrentComponent()
xWindow = xDoc.CurrentController.Frame.ContainerWindow
MessageBox(xWindow, s, 'Exception', 'errorbox')
def MessageBox (xParentWin, sMsg, sTitle, sBoxType="messbox", MsgButtons=OK):
if sBoxType not in ("messbox", "infobox", "errorbox", "warningbox", "querybox"):
sBoxType = "messbox"
# window properties
aDescriptor = WindowDescriptor()
aDescriptor.Type = MODALTOP
aDescriptor.WindowServiceName = sBoxType
aDescriptor.ParentIndex = -1
aDescriptor.Parent = xParentWin
#aDescriptor.Bounds = Rectangle()
aDescriptor.WindowAttributes = MsgButtons
xTK = xParentWin.getToolkit()
msgbox = xTK.createWindow(aDescriptor)
msgbox.setMessageText(sMsg)
msgbox.setCaptionText(sTitle)
return msgbox.execute()
LABELDICT = { "moderne": u"Moderne", "classique": u"Classique", "reforme1990": u"Réforme 1990", "toutesvariantes": u"Toutes variantes" }
class FrenchDictionarySwitcher (unohelper.Base, XActionListener, XJobExecutor):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.container = None
self.dialog = None
self.xRB_m = None
self.xRB_c = None
self.xRB_r = None
self.xRB_f = None
self.sCurrentDic = ''
self.sSelectedDic = ''
def addWidget (self, name, wtype, x, y, w, h, **kwargs):
widget = self.dialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
widget.Name = name
widget.PositionX = x
widget.PositionY = y
widget.Width = w
widget.Height = h
for k, w in kwargs.items():
setattr(widget, k, w)
self.dialog.insertByName(name, widget)
return widget
def run (self):
# what is the current dictionary
xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True)
xLocations = xSettings.getByName("Locations")
m = re.search(r"fr-(\w*)\.(?:dic|aff)", xLocations[0])
self.sCurrentDic = m.group(1)
# dialog
self.dialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.dialog.Width = 200
self.dialog.Height = 280
self.dialog.Title = u"Orthographe française"
# blabla
sSubTitle = u"Choisissez un dictionnaire"
sDicLabel_m = u"“Moderne”"
sDicDescr_m = u"Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot."
sDicLabel_c = u"“Classique” (recommandé)"
sDicDescr_c = u"Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle."
sDicLabel_r = u"“Réforme 1990”"
sDicDescr_r = u"Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”."
sDicLabel_t = u"“Toutes variantes”"
sDicDescr_t = u"Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française."
# widgets
padding = 10
hspace = 60
posY1 = 20; posY2 = posY1 + hspace; posY3 = posY2 + hspace; posY4 = posY3 + hspace; posY5 = posY4 + hspace;
wwidth = 170
wheight = 20
wwidthdescr = 170
wheightdescr = 40
xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD1.Height = 12
xFD1.Name = "Verdana"
xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD2.Height = 11
xFD2.Name = "Verdana"
gbm = self.addWidget('groupbox', 'GroupBox', 5, 5, 190, 250, Label = sSubTitle, FontDescriptor = xFD1)
# Note: the only way to group RadioButtons is to create them successively
rbm_m = self.addWidget('rb-moderne', 'RadioButton', padding, posY1, wwidth, wheight, Label = sDicLabel_m, FontDescriptor = xFD2)
self.xRB_m = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_m.setModel(rbm_m)
rbm_c = self.addWidget('rb-classique', 'RadioButton', padding, posY2, wwidth, wheight, Label = sDicLabel_c, FontDescriptor = xFD2)
self.xRB_c = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_c.setModel(rbm_c)
rbm_r = self.addWidget('rb-reforme1990', 'RadioButton', padding, posY3, wwidth, wheight, Label = sDicLabel_r, FontDescriptor = xFD2)
self.xRB_r = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_r.setModel(rbm_r)
rbm_t = self.addWidget('rb-toutesvariantes', 'RadioButton', padding, posY4, wwidth, wheight, Label = sDicLabel_t, FontDescriptor = xFD2)
self.xRB_t = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_t.setModel(rbm_t)
label_m = self.addWidget('label_m', 'FixedText', 20, posY1+10, wwidthdescr, wheightdescr, Label = sDicDescr_m, MultiLine = True)
label_c = self.addWidget('label_c', 'FixedText', 20, posY2+10, wwidthdescr, wheightdescr, Label = sDicDescr_c, MultiLine = True)
label_r = self.addWidget('label_r', 'FixedText', 20, posY3+10, wwidthdescr, wheightdescr, Label = sDicDescr_r, MultiLine = True)
label_t = self.addWidget('label_t', 'FixedText', 20, posY4+10, wwidthdescr, wheightdescr, Label = sDicDescr_t, MultiLine = True)
self.setRadioButton(self.sCurrentDic)
button = self.addWidget('select', 'Button', padding+50, posY5, 80, 14, Label = 'Utiliser ce dictionnaire')
# container
self.container = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.container.setModel(self.dialog)
self.container.getControl('select').addActionListener(self)
# if self.sCurrentDic != "moderne":
# self.container.getControl('rb-moderne').addActionListener(self)
# if self.sCurrentDic != "classique":
# self.container.getControl('rb-classique').addActionListener(self)
# if self.sCurrentDic != "reforme1990":
# self.container.getControl('rb-reforme1990').addActionListener(self)
# if self.sCurrentDic != "toutesvariantes":
# self.container.getControl('rb-toutesvariantes').addActionListener(self)
self.container.setVisible(False)
toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.container.createPeer(toolkit, None)
self.container.execute()
def setRadioButton (self, sDic):
if sDic == 'moderne':
self.xRB_m.setState(True)
elif sDic == 'classique':
self.xRB_c.setState(True)
elif sDic == 'reforme1990':
self.xRB_r.setState(True)
elif sDic == 'toutesvariantes':
self.xRB_t.setState(True)
else:
pass
def actionPerformed (self, actionEvent):
try:
if self.xRB_m.getState():
self.sSelectedDic = 'moderne'
elif self.xRB_c.getState():
self.sSelectedDic = 'classique'
elif self.xRB_r.getState():
self.sSelectedDic = 'reforme1990'
elif self.xRB_t.getState():
self.sSelectedDic = 'toutesvariantes'
else:
# no dictionary selected
pass
self.container.endExecute()
except:
handleException(self.ctx)
def trigger (self, args):
try:
dialog = FrenchDictionarySwitcher(self.ctx)
dialog.run()
if dialog.sSelectedDic and dialog.sCurrentDic != dialog.sSelectedDic:
xSvMgr = uno.getComponentContext().ServiceManager
xDesktop = xSvMgr.createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx)
xDoc = xDesktop.getCurrentComponent()
xWindow = xDoc.CurrentController.Frame.ContainerWindow
if dialog.sCurrentDic:
# Modify the registry
xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True)
xLocations = xSettings.getByName("Locations")
v1 = xLocations[0].replace(dialog.sCurrentDic, dialog.sSelectedDic)
v2 = xLocations[1].replace(dialog.sCurrentDic, dialog.sSelectedDic)
#xSettings.replaceByName("Locations", xLocations) # ERROR, see line below
uno.invoke(xSettings, "replaceByName", ("Locations", uno.Any("[]string", (v1, v2))))
xSettings.commitChanges()
# message box
sMsg = u"Vous avez choisi un nouveau dictionnaire\northographique pour la langue française.\n\n“%s” ⇒ “%s”\n\nFermez le logiciel (y compris le démarrage rapide)\net relancez-le." % (LABELDICT[dialog.sCurrentDic], LABELDICT[dialog.sSelectedDic])
MessageBox(xWindow, sMsg, u"Sélection d’un nouveau dictionnaire", "infobox")
# # get package location (URL of this extension)
# xCompCtx = uno.getComponentContext()
# xPackageInformationProvider = xCompCtx.getByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
# sURL = xPackageInformationProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR")
# sDstFile = sURL + '/dictionaries.xcu'
# sDstFile = sDstFile.replace('file:///', '').replace('%20', ' ')
# sDstFile = os.path.normpath(sDstFile)
# sTplFile = sDstFile + '.tpl.xml'
#
# # rewrite dictionaries.xcu
# if os.path.isfile(sTplFile) and os.path.isfile(sDstFile):
# with open(sTplFile, 'r') as hFile:
# content = hFile.read()
# hFile.close()
# content = content.replace('{{dictionaryName}}', dialog.sSelectedDic)
# with open(sDstFile, 'w') as hFile:
# hFile.write(content)
# hFile.close()
# else:
# sErrMsg = ""
# if not os.path.isfile(sTplFile):
# sErrMsg += u"File not found: %s\n" % sTplFile
# if not os.path.isfile(sDstFile):
# sErrMsg += u"File not found: %s\n" % sDstFile
# if sErrMsg:
# MessageBox(xWindow, sErrMsg, "ERROR", "error")
else:
MessageBox(xWindow, u"Couldn’t retrieve informations\nabout the current dictionary.", "ERROR", "errorbox")
# xSpellChecker = xSvMgr.createInstanceWithContext('com.sun.star.linguistic2.SpellChecker', self.ctx)
# xLocale = uno.createUnoStruct('com.sun.star.lang.Locale')
# xLocale.Language = "fr"
# xLocale.Country = "FR"
# l = xSpellChecker.getSupportedServiceNames()
# MessageBox(xWindow, " ".join(l), "DEBUG", "infobox")
except:
handleException(self.ctx)
def getConfigSetting (sNodeConfig, bForUpdate):
if bForUpdate:
sService = "com.sun.star.configuration.ConfigurationUpdateAccess"
else:
sService = "com.sun.star.configuration.ConfigurationAccess"
xConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
xPropertyValue = PropertyValue()
xPropertyValue.Name = "nodepath"
xPropertyValue.Value = sNodeConfig
xSettings = xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,))
return xSettings
def createUnoService (serviceName):
xSvMgr = uno.getComponentContext().ServiceManager
return xSvMgr.createInstanceWithContext(serviceName, uno.getComponentContext())
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(FrenchDictionarySwitcher, 'dicollecte.FrenchDictionarySwitcher', ('com.sun.star.task.Job',))
|
Added gc_lang/fr/dictionnaire/_templates/ooo/README_fr.txt version [74069c5cbf].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
_______________________________________________________________________________
RESSOURCES LINGUISTIQUES POUR LE FRANÇAIS
version ${version}
Olivier R. - dicollecte<at>free<dot>fr
Dicollecte : http://www.dicollecte.org/
_______________________________________________________________________________
Cette extension contient plusieurs dictionnaires :
- des dictionnaires orthographiques,
- un thésaurus (dictionnaire des synonymes),
- une table des règles de division des mots.
Ces dictionnaires sont fournis sous des licences différentes. Lisez les
différents fichiers README dans le répertoire /dictionaries pour en
prendre connaissance.
Pour participer à l’amélioration des dictionnaires, allez sur :
http://www.dicollecte.org/home.php?prj=fr
_______________________________________________________________________________
|
Added gc_lang/fr/dictionnaire/_templates/ooo/addons.xcu version [c46cc36987].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
oor:package="org.openoffice.Office"
oor:name="Addons">
<node oor:name="AddonUI">
<node oor:name="OfficeMenuBarMerging">
<node oor:name="org.openoffice.Office.addon.FrenchDictionarySwitcher" oor:op="replace">
<node oor:name="S1" oor:op="replace">
<prop oor:name="MergePoint">
<value>.uno:ToolsMenu\.uno:LanguageMenu\.uno:Hyphenate</value>
</prop>
<prop oor:name="MergeCommand">
<value>AddAfter</value>
</prop>
<prop oor:name="MergeFallback">
<value>AddPath</value>
</prop>
<node oor:name="MenuItems">
<node oor:name="M1" oor:op="replace">
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">French spelling dictionaries…</value>
<value xml:lang="fr">Dictionnaires orthographiques français…</value>
<value xml:lang="ar">قواميس الهجاء الفرنسية</value>
<value xml:lang="be">Французскія слоўнікі правапісу…</value>
<value xml:lang="cs">Francouzské hláskování slovníky…</value>
<value xml:lang="de">Französisch Rechtschreibwörterbücher…</value>
<value xml:lang="eo">Franca ortografio vortaroj…</value>
<value xml:lang="es">Diccionarios ortográfico francés…</value>
<value xml:lang="da">Franske stavemåde ordbøger…</value>
<value xml:lang="el">Γαλλικά λεξικά ορθογραφίας…</value>
<value xml:lang="et">Prantsuse keele sõnastikud…</value>
<value xml:lang="fi">Ranskan oikeinkirjoitus sanakirjoja…</value>
<value xml:lang="he">מילוני איות צרפתים</value>
<value xml:lang="hi">फ्रांसीसी वर्तनी शब्दकोशों</value>
<value xml:lang="hu">French helyesírási szótárak…</value>
<value xml:lang="id">Perancis ejaan kamus…</value>
<value xml:lang="is">Franska orðabækur stafsetningu…</value>
<value xml:lang="it">Dizionari ortografici francesi…</value>
<value xml:lang="ko">프랑스어 맞춤법 사전</value>
<value xml:lang="lv">Franču pareizrakstības vārdnīcas…</value>
<value xml:lang="lt">Prancūzijos rašybos žodynai…</value>
<value xml:lang="ja">フランス語のスペルチェック辞書</value>
<value xml:lang="ms">Ejaan kamus Perancis…</value>
<value xml:lang="nl">Franse spellingwoordenboeken…</value>
<value xml:lang="no">Franske stavemåten ordbøker…</value>
<value xml:lang="pl">Francuskie słowniki ortograficzne…</value>
<value xml:lang="pt">Franceses dicionários de ortografia…</value>
<value xml:lang="ro">Dicționare de ortografie franceză…</value>
<value xml:lang="ru">Французские словари правописания…</value>
<value xml:lang="sr">Француски правопис речници…</value>
<value xml:lang="sv">Franska stavningsordlistor…</value>
<value xml:lang="sw">Kifaransa spelling kamusi…</value>
<value xml:lang="ta">பிரஞ்சு எழுத்துப்பிழை அகராதிகள்</value>
<value xml:lang="th">พจนานุกรมการสะกดภาษาฝรั่งเศส</value>
<value xml:lang="tr">Fransızca yazım denetimi sözlükleri…</value>
<value xml:lang="uk">Французькі словники правопису…</value>
<value xml:lang="vi">Pháp chính tả từ điển…</value>
<value xml:lang="zh">法语拼写字典</value>
</prop>
<prop oor:name="URL" oor:type="xs:string">
<value>service:dicollecte.FrenchDictionarySwitcher</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="ImageIdentifier" oor:type="xs:string">
<value>%origin%/ui/french_flag_16.bmp</value>
</prop>
</node>
</node>
</node>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_lang/fr/dictionnaire/_templates/ooo/description.xml version [3615b9d98b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:d="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- http://wiki.services.openoffice.org/wiki/Extension_Dictionaries -->
<!--<registration>
<simple-license accept-by="admin" suppress-on-update="false" >
<license-text xlink:href="dictionaries/README_fr.txt" lang="fr" />
</simple-license>
</registration>-->
<version value="${version}" />
<identifier value="French.linguistic.resources.from.Dicollecte.by.OlivierR" />
<display-name>
<name lang="fr">Dictionnaires français.</name>
</display-name>
<platform value="all" />
<dependencies>
<OpenOffice.org-minimal-version value="3.2" d:name="OpenOffice.org 3.2" />
</dependencies>
<icon>
<default xlink:href="french_flag.png" />
</icon>
<publisher>
<name xlink:href="http://www.dicollecte.org/" lang="fr">Dicollecte</name>
</publisher>
<!--<update-information>
<src xlink:href="http://www.dicollecte.org/grammalecte/oxt/dictionaries.update.xml" />
</update-information>-->
</description>
|
Added gc_lang/fr/dictionnaire/_templates/ooo/dictionaries.xcu version [fb466201bf].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Linguistic" oor:package="org.openoffice.Office">
<node oor:name="ServiceManager">
<node oor:name="Dictionaries">
<node oor:name="HunSpellDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/fr-classique.aff %origin%/dictionaries/fr-classique.dic</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_SPELL</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
<!-- France, Belgique, Canada, Suisse, Luxembourg, Monaco -->
<!-- Burkina Faso, Côte d’Ivoire, Sénégal, Mali, Niger, Togo, Benin -->
</prop>
</node>
<node oor:name="HyphDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/hyph_fr.dic</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_HYPH</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
</prop>
</node>
<node oor:name="ThesDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/thes_fr.dat %origin%/dictionaries/thes_fr.idx</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_THES</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
</prop>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_lang/fr/dictionnaire/_templates/ooo/dictionaries.xcu.tpl.xml version [240ddc48f8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Linguistic" oor:package="org.openoffice.Office">
<node oor:name="ServiceManager">
<node oor:name="Dictionaries">
<node oor:name="HunSpellDic_fr-multidict" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/fr-{{dictionaryName}}.aff %origin%/dictionaries/fr-{{dictionaryName}}.dic</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_SPELL</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
<!-- France, Belgique, Canada, Suisse, Luxembourg, Monaco -->
<!-- Burkina Faso, Côte d’Ivoire, Sénégal, Mali, Niger, Togo, Benin -->
</prop>
</node>
<node oor:name="HyphDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/hyph_fr.dic</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_HYPH</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
</prop>
</node>
<node oor:name="ThesDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/thes_fr.dat %origin%/dictionaries/thes_fr.idx</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_THES</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
</prop>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_lang/fr/dictionnaire/_templates/ooo/ds_strings.py version [b148ee2b72].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# -*- encoding: UTF-8 -*-
dStrings = {
"fr": {
"title": u"Orthographe française",
"choose": u"Choisissez un dictionnaire",
"select": u"Utiliser ce dictionnaire",
"moderne": u"“Moderne”",
"classique": u"“Classique” (recommandé)",
"reforme1990": u"“Réforme 1990”",
"toutesvariantes": u"“Toutes variantes”",
"descModern": u"Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot.",
"descClassic": u"Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle.",
"descReform": u"Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”.",
"descAllvar": u"Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française.",
"restart": u"Le changement ne sera effectif qu’après le redémarrage du logiciel.",
"error": u"Erreur : impossible de savoir quel dictionnaire est actif."
},
"en": {
"title": u"French spelling",
"choose": u"Choose a dictionary",
"select": u"Use this dictionary",
"moderne": u"“Modern”",
"classique": u"“Classic” (recommended)",
"reforme1990": u"“Reform 1990”",
"toutesvariantes": u"“All variants”",
"descModern": u"This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word.",
"descClassic": u"This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language.",
"descReform": u"With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erronous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary.",
"descAllvar": u"This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who doesn’t know very well the French language.",
"restart": u"The modification will be effective only after restarting the software.",
"error": u"Error: enable to retrieve information about the current dictionary."
}
}
|
Added gc_lang/fr/dictionnaire/_templates/ooo/french_flag.png version [960f4814b1].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/ooo/french_flag_16.bmp version [f86cbbe4c8].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/ooo/french_flag_16.png version [d1c910d71d].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/ooo/manifest.xml version [d52a9a2be4].
> > > > > > > > | 1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="dictionaries.xcu"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.package-bundle-description" manifest:full-path="package-description.txt"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="ui/addons.xcu"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="DictionarySwitcher.py"/>
</manifest:manifest>
|
Added gc_lang/fr/dictionnaire/_templates/ooo/package-description.txt version [00d0e64611].
> > > | 1 2 3 |
Dictionnaires ${version} • Synonymes 2.3 • Césures 3.0
Quatre dictionnaires orthographiques existent : “Moderne”, “Classique”, “Réforme 1990”, “Toutes variantes”. Pour changer de dictionnaire, allez dans le menu Outils > Langue > Dictionnaires français.
|
Added gc_lang/fr/dictionnaire/césures/README_hyph_fr-2.9.txt version [ffc9ffe80a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
_____________________________________________________________________________
Motifs de division des mots pour le français (fr)
Version 2.9
Licence : GNU LGPL.
Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*,
version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11)
pour la cohérence avec d'autres fichiers de motifs de division
de la collection hyph-utf8. Voir http://tug.org/tex-hyphen
pour plus d'informations.
Les motifs de division de TeX sont publiés sous la licence LaTeX
Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt
Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence
GNU Lesser General Public License (LGPL)
version 2.1 ou supérieure -- http://www.gnu.org/licenses/
Auteurs :
2.9 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Journal :
2.9 Nouvelle version révisée et augmentée :
+ Traitement des noms composés à trait d'union
+ Redressement de motifs altérés
2.0 Traitement des mots avec apostrophe
1.0 Première conversion
Ce dictionnaire devrait être conforme à toutes les variantes régionales du
français.
_____________________________________________________________________
French word hyphenation patterns
Version 2.9
Language: French (fr).
License: GNU LGPL.
Origin: Based on the TeX hyphenation tables *hyph-fr.tex*,
renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11)
for consistency with other files with hyphenation patterns
in hyph-utf8 package. See http://tug.org/tex-hyphen for more details.
The TeX hyphenation tables are released under the LaTeX Project
Public License (LPPL) -- http://www.latex-project.org/lppl.txt
License: OpenOffice.org adaptions of this package are licensed under the
GNU Lesser General Public License (LGPL)
version 2.1 or higher -- http://www.gnu.org/licenses/
Authors:
2.9 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Log:
2.9 New revised and expanded version:
+ Processing of hyphenated compounds
+ Correction of altered patterns
2.0 Fix for words with apostrophe
1.0 First conversion
This dictionary is based on syllable matching patterns and therefore should
be usable under other variations of French.
|
Added gc_lang/fr/dictionnaire/césures/README_hyph_fr-3.0.txt version [b9b9e15d66].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
_____________________________________________________________________________
Motifs de division des mots pour le français (fr)
Version 3.0.1
Licence : GNU LGPL.
Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*,
version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11)
pour la cohérence avec d'autres fichiers de motifs de division
de la collection hyph-utf8. Voir http://tug.org/tex-hyphen
pour plus d'informations.
Les motifs de division de TeX sont publiés sous la licence LaTeX
Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt
Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence
GNU Lesser General Public License (LGPL)
version 2.1 ou supérieure -- http://www.gnu.org/licenses/
Auteurs :
3.0 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Journal :
3.0.1 Correction d’un bug: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN
3.0 Nouvelle version révisée et augmentée :
+ Conversion au format de codage Unicode UTF-8
+ Traitement des noms composés à trait d'union
+ Redressement de motifs altérés
2.0 Traitement des mots avec apostrophe
1.0 Première conversion
Ce dictionnaire devrait être conforme à toutes les variantes régionales du
français.
_____________________________________________________________________
French word hyphenation patterns
Version 3.0
Language: French (fr).
License: GNU LGPL.
Origin: Based on the TeX hyphenation tables *hyph-fr.tex*,
renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11)
for consistency with other files with hyphenation patterns
in hyph-utf8 package. See http://tug.org/tex-hyphen for more details.
The TeX hyphenation tables are released under the LaTeX Project
Public License (LPPL) -- http://www.latex-project.org/lppl.txt
License: OpenOffice.org adaptions of this package are licensed under the
GNU Lesser General Public License (LGPL)
version 2.1 or higher -- http://www.gnu.org/licenses/
Authors:
3.0 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Log:
3.0.1 Bug fix: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN
3.0 New revised and expanded version:
+ Conversion to UTF-8 Unicode encoding
+ Processing of hyphenated compounds
+ Correction of altered patterns
2.0 Fix for words with apostrophe
1.0 First conversion
This dictionary is based on syllable matching patterns and therefore should
be usable under other variations of French.
|
Added gc_lang/fr/dictionnaire/césures/frhyph.tex version [c1857b37d2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 |
% frhyph.tex % French hyphenation patterns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is available for free and can used and redistributed
% asis for free. Modified versions should have another name.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% *BEFORE* using this file *PLEASE* run checksum on it: %
% checksum -v frhyph.tex %
% to make sure that it hasn't been damaged. %
% Then if you notice anything wrong in french hyphenation please report to %
% R. Bastian, D. Flipo, B. Gaulle at the email address: %
% cesure-l@gutenberg.eu.org %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% checksum = "37208 1458 3078 34821"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% The most famous good guys who worked hard to obtain something usable.
% Jacques Desarmenien, Universite de Strasbourg :
% - << how to run TeX in a French environment: hyphenation, fonts,
% typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference
% - << La division par ordinateur des mots francais :
% application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-
% Gauthier-Villars
% Norman Buckle, UQAH (nb; many additions)
% Michael Ferguson, INRS-Telecommunications (mjf) June 1988
% Justin Bur, Universite de Montreal (jbb; checked against original list)
% all patterns including apostrophe missing from nb list
% after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle
% did their best effort to improve the list of patterns.
%
% -----------------------------------------------------------------
%
% Adaption of these patterns for
% - TeX Version 3.x and MLTeX 3.x (2.x)
% and
% - all fonts in T1/`Cork' and/or CM/OT1 encoding
% by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex'
% as of 1994-02-13 maintained by Bernd Raichle).
% (An adaption for the old MLTeX 2.x exists but can not be
% tested in lack of an executable.)
%
% -----------------------------------------------------------------
%
% The LaTeX2e identification of this file is done with the
% \ProvidesFile declaration. The group and \expandafter
% constructions keep \ProvidesFile undefined if this file
% is not used with LaTeX2e.
%
\begingroup \expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname ProvidesFile\endcsname\relax \else
% unfortnately Babel 3.6 destroys standard LaTeX \ProvidesFile command
% thus i check if it's still the good one. --bg 97/04/08
\def\PFnormaldef#1{%
\begingroup
\catcode`\ 10 %
\@makeother\/%
\@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}
\ifx\PFnormaldef\ProvidesFile
\ProvidesFile{frhyph.tex}[2002/12/11 %
French hyphenation patterns v2.12]
\fi
\fi
%
% Next we define some commands which are used inside the patterns.
% To keep them local, we enclose the rest of the file in a group
% (The \patterns command globally changes the hyphenation trie!).
%
\begingroup
%
% Make sure that neither quote nor doublequote are active:
\catcode`\'=12 \catcode`\"=12
%
%
% Because ^^e4 is used in the following macros which is read by
% TeX 2.x as ^^e or %, the comment character of TeX, some trick
% has to be found to avoid this problem. The same is true for
% the normally illegal character ^^? in the TeX 2.x code.
% Therefore in the code the exclamationmark ! is used instead of
% the circumflex ^ and its \catcode is set appropriately
% (normally \catcode`\!=12, in the code \catcode`\!=7).
%
% The following \catcode, \lccode assignments and macro definitions
% are defined in such a way that the following \pattern{...} list
% can be used for both, (ML)TeX 2.x and (ML)TeX 3.x.
% To implement this, distinguish version 2.x and 3.x of TeX:
%
\ifnum`\@=`\^^40 % true => TeX 3.x
%
% Assign appropriate \catcode and \lccode values for all
% accented characters used in the patterns:
\catcode"E0=11 \lccode"E0="E0 % \`a
\catcode"E2=11 \lccode"E2="E2 % \^a
\catcode"E7=11 \lccode"E7="E7 % \c{c}
\catcode"E8=11 \lccode"E8="E8 % \`e
\catcode"E9=11 \lccode"E9="E9 % \'e
\catcode"EA=11 \lccode"EA="EA % \^e
\catcode"EB=11 \lccode"EB="EB % \"e (*unused*)
\catcode"EE=11 \lccode"EE="EE % \^{\i}
\catcode"EF=11 \lccode"EF="EF % \"{\i}
\catcode"F4=11 \lccode"F4="F4 % \^o
\catcode"F7=11 \lccode"F7="F7 % \oe{}
\catcode"F9=11 \lccode"F9="F9 % \`u (*unused*)
\catcode"FB=11 \lccode"FB="FB % \^u
\catcode"FC=11 \lccode"FC="FC % \"u (*unused*)
\catcode"B8=11 \lccode"B8="B8 % \"y (*unused*)
%
\catcode`\!=7 % use !!xy instead of ^^xy
%
% Define the accent macros in such a way that they
% expand to single letters in font encoding T1.
\def\E{\errmessage{Hyphenation pattern file corrupted}}
\def\`#1{\ifx#1a!!e0\else \ifx#1e!!e8\else \E \fi\fi}
\def\'#1{\ifx#1e!!e9\else \E \fi}
\def\^#1{\ifx#1a!!e2\else \ifx#1e!!ea%
\else \ifx#1i!!ee\else \ifx#1o!!f4%
\else \ifx#1u!!fb\else \E \fi\fi\fi\fi\fi}
\def\"#1{\ifx#1i!!ef\else \ifx#1e!!eb%
\else \ifx#1o!!f6\else \E \fi\fi\fi}
\def\c#1{\ifx#1c!!e7\else \E \fi}
\def\oe{!!f7}% T1 encoded \oe
% For \oe which exists in T1 _and_ OT1 encoded fonts but with
% different glyph codes, patterns for both glyphs are included.
% Thus you can use either T1 encoded fonts, or OT1 encoded fonts
% and MLTeX's character substitution definition.
\def\n#1{#1}
\catcode'33=11 \lccode'33='33 % \oe
\def\oeOT{!![}% OT1 encoded \oe %{]} brace hack
%
\catcode`\!=12
%
\else % TeX 2
%
\expandafter\ifx\csname starthyph\endcsname\relax % MLTeX 2.x?
\message{This is TeX version 2.x without the MLTeX extensions.}
\message{I'm sorry, you cannot use these hyphenation patterns.}
\message{To process the french hyphenation patterns you need either}
\message{TeX version 3.x, MLTeX 3.x, or MLTeX based on TeX 2.x.}
\errmessage{I will ignore the hyphenation patterns.}
\endgroup \csname fi\endcsname\csname fi\endcsname\endinput
\fi
%
% Untested macros for MLTeX v2.x replaced by the following message:
\message{This is MLTeX based on TeX version 2.x. To use these}
\message{patterns please get in contact with the maintainers}
\message{mentioned in the comment at the top of this file.}
\errmessage{I will ignore the hyphenation patterns.}
\endgroup \csname fi\endcsname\endinput
%
\fi
%
\lccode`\'=`\'
%
\patterns{
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%*
2'2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%a
.a4
'a4
.\^a4
'\^a4
ab2h % df-bg 1998/02/07 for abhorrer
.ab3r\'ea
'ab3r\'ea
ad2h % df-bg 1998/02/07 for adh\`esion & co
a1\`e2dre
.ae3s4ch
'ae3s4ch
1alcool
a2l1algi
.amino1a2c
'amino1a2c
.ana3s4tr
'ana3s4tr
1a2nesth\'esi
.anti1a2
'anti1a2
.anti1e2
'anti1e2
.anti1\'e2
.anti2enne
'anti2enne
'anti1\'e2
.anti1s2
'anti1s2
.apo2s3ta
'apo2s3ta
apo2s3tr
archi1\'e2pis
.as2ta
'as2ta
a2s3tro
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%b
1ba
1b\^a
.bai2se3main % hyphen disappeared from french 5/2/94
1be
1b\'e
1b\`e
1b\^e
4be.
4bes.
2bent. % mute syllable: tombent (df) 22/02/94
1bi
1b\^i
.bi1a2c
.bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93
.bi1au
.bio1a2
.bi2s1a2
.bi1u2
1b2l
4ble.
4bles.
2blent. % mute syllable: troublent (df) 28/02/94
1bo
1b\^o
1b2r
4bre.
4bres.
2brent. % mute syllable: palabrent (df) 28/02/94
1bu
1b\^u
1by
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%c
1\c{c}
1ca
1c\^a
ca3ou3t2 % for caoutchou... added 3/1/94 df-bg
1ce
1c\'e
1c\`e
1c\^e
4ce.
4ces.
% words ending with -cent (df) 22/02/94
2cent.
ja3cent.
ac3cent.
\'e3cent.
munifi3cent.
r\'eti3cent.
privatdo3cent.
inno3cent.
es3cent.
acquies4cent.
is3cent.
immis4cent.
%
.ch4
1c2h
4ch.
2chb
4che.
4ches.
2chent. % mute syllable: touchent (df) 22/02/94
.ch\`e2vre3feuille % hyphen disappeared from french 5/2/94
2chg
ch2l
4chle.
4chles.
chlo2r3a2c
chlo2r3\'e2t
2chm
2chn
2chp
ch2r
4chre.
4chres.
2chs
2cht
2chw
1ci
1c\^i
.ci2s1alp
1c2k
4ck.
2ckb
4cke.
4ckes.
2ckent. % mute syllable: stockent (df) 22/02/94
2ckf
2ckg
2ck3h
2ckp
2cks
2ckt
1c2l
4cle.
4cles.
2clent. % mute syllable: encerclent (df) 28/02/94
1co
1c\^o
co1acc
co1acq
co1a2d
co1ap
co1ar
co1assoc
co1assur
co1au
co1ax
1c\oe0 % final zero essential to terminate cs
\n{1c\oeOT} % for \oe in OT1 _and_ T1 font encoding
co1\'e2
co1ef
co1en
co1ex
.con4 % missing from nb list
.cons4 % missing from nb list
.contre1s2c
.contre3ma\^itre % hyphen disappeared from french 5/2/94
co2nurb
.co1o2
.co2o3lie
1c2r
4cre.
4cres.
2crent. % mute syllable: massacrent (df) 28/02/94
1cu
1c\^u
1cy
.cul4 % -- as .con4 .cons4 (march 92)
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%d
1d'
1da
1d\^a
.dacryo1a2
d1d2h
1de
1d\'e
1d\`e
1d\^e
4de.
4des.
% words ending with -dent (df) 22/02/94
2dent.
d\'eca3dent.
\'e3dent.
cci3dent.
inci3dent.
confi3dent.
tri3dent.
dissi3dent.
chien3dent.
.ar3dent.
impu3dent.
pru3dent.
%
.d\'e1a2
.d\'e1io
.d\'e1o2
.d\'e2s % originaly in JD file
%.d\'e2s1a2 removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e3s2a3cr
.d\'es2a3m % .d\'es2a2mi introduced 09/17/92 bec. i
% can't see why d\'esamidonner ran in JD.
% Moved to .d\'es2a3m df 12/27/93.
.d\'e3s2a3tell
.d\'e3s2astr
.d\'e3s2c % 1 moved 3 due to .d\'e2s 09/17/92
%.d\'e2s1e2 removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e2s1\'e2
.d\'e3s2\'e3gr
.d\'e3s2ensib
.d\'e3s2ert
.d\'e3s2exu
%.d\'e2s3h removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e2s1i2
.d\'e3s2i3d
.d\'e3s2i3gn
.d\'e3s2i3li
.d\'e3s2i3nen
.d\'e3s2invo
.d\'e3s2i3r
.d\'e3s2ist
%.d\'e2s1o2 removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e3s2o3d\'e
.d\'e2s1\oe0 % final zero essential to terminate cs
\n{.d\'e2s1\oeOT} % for \oe in OT1 _and_ T1 font encoding
.d\'e3s2o3l
.d\'e3s2o3pil
.d\'e3s2orm
.d\'e3s2orp
.d\'e3s2oufr
.d\'e3s2p % 1 moved 3 due to .d\'e2s 09/17/92
.d\'e3s2t % 1 moved 3 due to .d\'e2s 09/17/92
.d\'e2s1u2n
3d2hal
3d2houd
1di
1d\^i
di2s3cop
.di1a2c\'e
.di1a2cid
.di1ald
.di1a2mi
.di1a2tom
.di1e2n
.di2s3h
2dlent. % mute syllable: jodlent (df) 28/02/94
1do
1d\^o
1d2r
4dre.
4dres.
2drent. % mute syllable: engendrent (df) 28/02/94
d1s2
1du
1d\^u
1dy
.dy2s3
.dy2s1a2
.dy2s1i2
.dy2s1o2 % missing from nb list
.dy2s1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%e
.e4
'e4
.\^e4
'\^e4
.\'e4
'\'e4
.\`e4
'\`e4
\'ed2hi % df-bg 1998/02/07 for r\'edhibitoire
1\'e2drie
1\'e2drique
1\'e2lectr
1\'e2l\'ement
.en1a2
'en1a2
1\'e2nerg
e2n1i2vr
.en1o2
'en1o2
\'epi2s3cop
\'epi3s4cope
e2s3cop
.eu2r1a2
'eu2r1a2
eu1s2tat
extra1
extra2c
extra2i
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%f
1fa
1f\^a
1fe
1f\'e
1f\`e
1f\^e
4fe.
4fes.
2fent. % mute syllable: agrafent chauffent (df) 22/02/94
%
1fi
1f\^i
1f2l
4fle.
4fles.
2flent. % mute syllable: gonflent (df) 28/02/94
1fo
1f\^o
1f2r
4fre.
4fres.
2frent. % mute syllable: balafrent (df) 28/02/94
f1s2
1fu
1f\^u
1fy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%g
1ga
1g\^a
1ge
1g\'e
1g\`e
1g\^e
4ge.
4ges.
% words ending with -gent (df) 22/02/94
2gent.
r\'e3gent.
entre3gent.
indi3gent.
dili3gent.
intelli3gent.
indul3gent.
tan3gent.
rin3gent.
contin3gent.
.ar3gent.
'ar3gent.
ser3gent.
ter3gent.
r\'esur3gent.
%
1g2ha
1g2he
1g2hi
1g2ho
1g2hy
1gi
1g\^i
1g2l
4gle.
4gles.
2glent. % mute syllable: meuglent (df) 28/02/94
1g2n
'a2g3nat % (df) 16/01/02
.a2g3nat % (df) 16/01/02
a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted)
co2g3niti % (df) 16/01/02
'i2g3n\'e % (df) 16/01/02
.i2g3n\'e % (df) 16/01/02
'i2g3ni % (df) 16/01/02
.i2g3ni % (df) 16/01/02
.ma2g3nicide % (df) 16/01/02
.ma2g3nificat % (df) 16/01/02
.ma2g3num % (df) 16/01/02
o2g3nomoni % (df) 16/01/02
o2g3nosi % (df) 16/01/02
.pro2g3nath % (df) 16/01/02
pu2g3nable % (df) 16/01/02
pu2g3nac % (df) 16/01/02
.sta2g3n
.syn2g3nath % (df) 16/01/02
wa2g3n
4gne.
4gnes.
2gnent. % mute syllable: accompagnent (df) 28/02/94
1go
1g\^o
1g2r
4gre.
4gres.
2grent. % mute syllable: immigrent (df) 28/02/94
1gu
1g\^u
g1s2
4gue.
4gues.
% words ending with -guent (df) 22/02/94
2guent.
.on3guent.
'on3guent.
%
1gy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%h
1ha
1h\^a
1he
1h\'e
1h\`e
1h\^e
h\'emi1\'e
h\'emo1p2t
4he.
4hes.
1hi
1h\^i
1ho
1h\^o
1hu
1h\^u
1hy
hypera2
hypere2
hyper\'e2
hyperi2
hypero2
hypers2
hype4r1
hyperu2
hypo1a2
hypo1e2 % missing from nb list
hypo1\'e2
hypo1i2
hypo1o2
hypo1s2
hypo1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%i
.i4
'i4
.\^i4
'\^i4
i1algi
i1arthr
i1\`e2dre
% ill patterns missing from nb list
il2l
cil3l
rcil4l
ucil4l
vacil4l
gil3l
hil3l
lil3l
l3lion
mil3l
mil4let
\'emil4l
semil4l
rmil4l
armil5l
capil3l
papil3la
papil3le
papil3li
papil3lom
pupil3l
piril3l
thril3l
cyril3l
ibril3l
pusil3l
.stil3l
distil3l
instil3l
fritil3l
boutil3l
vanil3lin
vanil3lis
vil3l
avil4l
chevil4l
uevil4l
uvil4l
xil3l
% end of ill patterns
1informat % missing from nb list
.in1a2
'in1a2
.in2a3nit
'in2a3nit
.in2augur
'in2augur
.in1e2
'in1e2
.in1\'e2
'in1\'e2
.in2effab % missing from nb list
'in2effab
.in2\'e3lucta
'in2\'e3lucta
.in2\'e3narra
'in2\'e3narra
.in2ept
'in2ept
.in2er
'in2er
.in2exora % missing from nb list
'in2exora
.in1i2
'in1i2
.in2i3miti
'in2i3miti
.in2i3q
'in2i3q
.in2i3t
'in2i3t
.in1o2
'in1o2
.in2o3cul
'in2o3cul
.in2ond
'in2ond
.in1s2tab
'in1s2tab
'inte4r3
.intera2
'intera2
.intere2
'intere2
.inter\'e2
'inter\'e2
.interi2
'interi2
.intero2
'intero2
.inte4r3
.interu2
'interu2
.inters2
'inters2
.in1u2
'in1u2
.in2uit
'in2uit
.in2u3l
'in2u3l
io1a2ct
i1oxy
i1s2tat
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%j
1j
2jk
4je.
4jes.
2jent. % mute syllable: gal\`ejent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%k
1ka
1k\^a
1ke
1k\'e
1k\`e
1k\^e
4ke.
4kes.
2kent. % mute syllable: jerkent (df) 22/02/94
1k2h
4kh.
.kh4
1ki
1k\^i
1ko
1k\^o
1k2r
1ku
1k\^u
1ky
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%l
1la
1l\^a
1l\`a
la2w3re
1le
1l\'e
1l\`e
1l\^e
4le.
4les.
% words ending with -lent (df) 22/02/94
2lent.
.ta3lent.
iva3lent.
\'equiva4lent.
monova3lent.
polyva3lent.
re3lent.
.do3lent.
indo3lent.
inso3lent.
turbu3lent.
succu3lent.
f\'ecu3lent.
trucu3lent.
opu3lent.
corpu3lent.
ru3lent.
sporu4lent.
%
1li
1l\^i
1lo
1l\^o
l1s2t
1lu
1l\^u
1ly
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%m
1ma
1m\^a
.ma2c3k
.macro1s2c
.ma2l1a2dres
.ma2l1a2dro
.ma2l1ais\'e
.ma2l1ap
.ma2l1a2v
.ma2l1en
.ma2l1int
.ma2l1oc
.ma2l1o2d
.ma2r1x % nb (jbb: ?)
1me
1m\'e
1m\`e
1m\^e
.m\'e2g1oh
.m\'e2sa % missing from nb list
.m\'e3san % missing from nb list
.m\'e2s1es
.m\'e2s1i
.m\'e2s1u2s
.m\'eta1s2ta
4me.
4mes.
% words ending with -ment (df) 22/02/94
\^a2ment.
da2ment.
fa2ment.
amalga2ment.
cla2ment.
ra2ment.
temp\'era3ment.
ta2ment.
testa3ment.
qua2ment.
\`e2ment.
car\^e2ment.
diaphrag2ment.
ryth2ment.
ai2ment.
rai3ment.
ab\^i2ment.
\'eci2ment.
vidi2ment.
subli2ment.
\'eli2ment.
reli2ment.
mi2ment.
ani2ment.
veni2ment.
ri2ment.
d\'etri3ment.
nutri3ment.
inti2ment.
esti2ment.
l2ment.
flam2ment.
gram2ment.
.gem2ment.
om2ment.
.com3ment.
\^o2ment.
slalo2ment.
chro2ment.
to2ment.
ar2ment.
.sar3ment.
er2ment.
antifer3ment.
.ser3ment.
fir2ment.
or2ment.
as2ment.
au2ment.
\'ecu2ment.
fu2ment.
hu2ment.
fichu3ment.
llu2ment.
plu2ment.
bou2ment.
bru2ment.
su2ment.
tu2ment.
%
1mi
1m\^i
.milli1am
1m2n\'emo
1m2n\`es
1m2n\'esi
1mo
1m\^o
1m\oe0 % final zero essential to terminate cs
\n{1m\oeOT} % for \oe in OT1 _and_ T1 font encoding
.mono1a2
.mono1e2
.mono1\'e2
.mono1i2
.mono1\"i2d\'e
.mono1o2
.mono1u2
.mono1s2
mon2t3r\'eal % missing from nb list
m1s2
1mu
1m\^u
1my
moye2n1\^a2g
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%n
1na
1n\^a
1ne
1n\'e
1n\`e
1n\^e
4ne.
4nes.
% words ending with -nent (df) 22/02/94
2nent. % fric-tionnent - syllable muette - bg 27/12/93
r\'ema3nent.
imma3nent.
perma3nent.
.\'emi3nent.
pr\'e\'emi3nent.
pro\'emi3nent.
sur\'emi3nent.
immi3nent.
conti3nent.
perti3nent.
absti3nent.
%
1ni
1n\^i
1no
1n\^o
1n\oe0 % final zero essential to terminate cs
\n{1n\oeOT} % for \oe in OT1 _and_ T1 font encoding
.no2n1obs
1nu
1n\^u
n3s2at.
n3s2ats.
n1x
1ny
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%o
.o4
'o4
'\^o4
.\^o4
%'\"o2 % mjf % deleted 3/1/94 df-bg
o2b3long
1octet % missing from nb list
o1d2l
o1\`e2dre
o1ioni
ombud2s3
omni1s2
o1s2tas
o1s2tat
o1s2t\'ero
o1s2tim
o1s2tom
o1s2trad
o1s2tratu
o1s2triction
.oua1ou
'oua1ou
.ovi1s2c
'ovi1s2c
oxy1a2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%p
1pa
1p\^a
pal\'eo1\'e2
.pa2n1a2f
.pa2n1a2m\'e
.pa2n1a2ra
.pa2n1is
.pa2n1o2ph
.pa2n1opt
.pa2r1a2che
.pa2r1a2ch\`e
.para1s2
.pa2r3h\'e
1pe
1p\'e
1p\`e
1p\^e
4pe.
4pes.
% words ending with -pent (df) 22/02/94
2pent.
re3pent.
.ar3pent.
'ar3pent.
ser3pent.
%
.pen2ta % pent- or penta- but never pen-ta bg 12/27/93
per3h
p\'e2nul % p\'e2n1ul moved back 09/17/92 to JD def.
.pe4r
.per1a2
.per1e2
.per1\'e2
.per1i2
.per1o2
.per1u2
p\'e1r2\'e2q % 2r1 moved 09/17/92 to 1r2(it was a typo)
.p\'eri1os
.p\'eri1s2
.p\'eri2s3s
.p\'eri2s3ta
.p\'eri1u2
1p2h
.ph4
4ph.
.phalan3s2t
4phe.
4phes.
2phent. % mute syllable: triomphent (df) 22/02/94
ph2l
4phle.
4phles.
2phn
photo1s2
ph2r
4phre.
4phres.
2phs
2pht
3ph2tal\'e
3ph2tis
%%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94
%%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92
%%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94
1pi
1p\^i
1p2l
4ple.
4ples.
2plent. % mute syllable: accouplent (df) 28/02/94
.pluri1a
1p2n\'e
1p2neu
1po
1p\^o
po1astre
poly1a2
poly1e2
poly1\'e2
poly1\`e2
poly1i2
poly1o2
poly1s2
poly1u2
.pon2tet % JD hypenated it asis 09/17/92, exception
.pos2t3h
.pos2t1in
.pos2t1o2
.pos2t3r
.post1s2
1p2r
4pre.
4pres.
2prent. % mute syllable: empourprent (df) 28/02/94
.pr\'e1a2
.pr\'e2a3la % missing from nb list
.pr\'e2au
.pr\'e1\'e2
.pr\'e1e2
.pr\'e1i2
.pr\'e1o2
.pr\'e1u2
.pr\'e1s2
.pro1\'e2
.pro1s2c\'e
pro2s3tat
.prou3d2h
1p2sych
.psycho1a2n
1p2t\`er
1p2t\'er
1pu
.pud1d2l
1p\^u
1py
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%q
1q
4que.
4ques.
% words ending with -quent (df) 22/02/94
2quent.
\'e3quent.
\'elo3quent.
grandilo3quent.
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%r
1ra
1r\^a
radio1a2 % missing from nb list
1re
1r\'e
1r\`e
1r\^e
.r\'e1a2
.r\'e2a3le
.r\'e2a3lis
.r\'e2a3lit
.r\'e2aux
.r\'e1\'e2
.r\'e1e2
.r\'e2el
.r\'e2er
.r\'e2\`er
.r\'e1i2
.r\'e2i3fi
.r\'e1o2
.re1s2
.re2s3cap
.re2s3cisi % for res-cision 09/17/92 (missing from nb)
.re2s3ciso % for res-cisoire 09/17/92(missing from nb)
.re2s3cou
.re2s3cri
.re2s3pect
.re2s3pir
.re2s3plend
.re2s3pons
.re2s3quil
.re2s3s
.re2s3t
.re3s4tab
.re3s4tag
.re3s4tand
.re3s4tat
.re3s4t\'en
.re3s4t\'er
.re3s4tim
.re3s4tip
.re3s4toc
.re3s4top
.re3s4tr
.re4s5trein
.re4s5trict
.re4s5trin
.re3s4tu
.re3s4ty
.r\'eu2 %.r\'e1u2 % pattern rejected 12/2/92
% (don't hyphenate as r\'e-union nor r\'eu-nion)
.r\'e2uss
.r\'etro1a2
4re.
4res.
% words ending with -rent (df) 22/02/94
2rent. % es-p\`erent - syllable muette - bg 27/12/93
.pa3rent.
appa3rent.
transpa3rent.
\'e3rent.
tor3rent.
cur3rent.
%
1r2h
4rhe.
4rhes.
2r3heur
2r3hydr
1ri
1r\^i
1ro
1r\^o
1ru
1r\^u
1ry
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%s
1sa
1s\^a
.sch4
1s2caph
1s2cl\'er
1s2cop
1s2ch
e2s3ch
i2s3ch\'e
i2s3chia
i2s3chio
4sch.
4sche.
4sches.
2schs
1se
1s\'e
1s\`e
1s\^e
sesqui1a2
4se.
4ses.
% words ending with -sent (df) 22/02/94
2sent. % massent - syllable muette - bg 27/12/93
ab3sent.
pr\'e3sent.
.res3sent.
%
.seu2le % jbb
.sh4
1s2h
4sh.
4she.
4shes.
2shent. % mute syllable: smashent (df) 22/02/94
2shm
2s3hom
2shr
2shs
1si
1s\^i
1s2lav
1s2lov
1so
1s\^o
1s\oe0 % final zero essential to terminate cs
\n{1s\oeOT} % for \oe in OT1 _and_ T1 font encoding
1s2patia
1s2perm
1s2por
1s2ph\`er
1s2ph\'er
1s2piel
1s2piros
1s2tandard
1s2tein
st\'er\'eo1s2
1s2tigm
1s2tock
1s2tomos
1s2troph
1s2tructu
1s2tyle
1su
1s\^u
.su2b1a2
.su3b2alt
.su2b1\'e2
.su3b2\'e3r
.su2b1in
.su2b3limin
.su2b3lin
.su2b3lu
sub1s2
.su2b1ur
supero2
supe4r1
supers2
.su2r1a2
su3r2ah
.su3r2a3t
.su2r1e2
.su3r2eau
.su3r2ell
.su3r2et
.su2r1\'e2
.su2r3h
.su2r1i2m
.su2r1inf
.su2r1int
.su2r1of
.su2r1ox
1sy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%t
1ta
1t\^a
1t\`a
tachy1a2
tchin3t2
1te
1t\'e
1t\`e
1t\^e
t\'el\'e1e2
t\'el\'e1i2
t\'el\'e1o2b
t\'el\'e1o2p
t\'el\'e1s2
4te.
4tes.
% words ending with -tent (df) 22/02/94
2tent. % mentent - syllable muette - bg 27/12/93
.la3tent.
.pa3tent.
comp\'e3tent.
\'eni3tent.
m\'econ3tent.
omnipo3tent.
ventripo3tent.
\'equipo3tent.
impo3tent.
mit3tent.
%
.th4
1t2h
4th.
4the.
4thes.
thermo1s2
2t3heur
2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93
2thm
2thn
th2r
4thre.
4thres.
2ths
1ti
1t\^i
1to
1t\^o
1t2r
tran2s1a2
tran3s2act
tran3s2ats
tran2s3h
tran2s1o2
tran2s3p
tran2s1u2
4tre.
4tres.
2trent. % mute syllable: infiltrent (df) 28/02/94
.tri1a2c
.tri1a2n
.tri1a2t
.tri1o2n
t1t2l
1tu
1t\^u
tung2s3
1ty
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%u
.u4
'u4
.\^u4
'\^u4
uni1o2v
uni1a2x
u2s3tr
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%v
1va
1v\^a
1ve
1v\'e
1v\`e
1v\^e
v\'elo1s2ki
4ve.
4ves.
% words ending with -vent (df) 22/02/94
2vent.
conni3vent.
.sou3vent.
%
1vi
1v\^i
1vo
1v\^o
vol2t1amp
1v2r
4vre.
4vres.
2vrent. % mute syllable: recouvrent (df) 28/02/94
1vu
1v\^u
1vy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%w
1wa
1we
4we.
4wes.
2went. % mute syllable: interviewent (df) 22/02/94
1wi
1wo
1wu
1w2r
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%x
2xent. % mute syllable: malaxent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%y
.y4
'y4
y1asth
y1s2tom
y1algi
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%z
1za
1ze
1z\'e
1z\`e
4ze.
4zes.
% words ending with -zent (df) 22/02/94
2zent.
privatdo3zent.
%
1zi
1zo
1zu
1zy
}
\endgroup
\endinput
%%
%% End of file `frhyph.tex'.
|
Added gc_lang/fr/dictionnaire/césures/hyph-fr.tex version [394d4d9505].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 |
% This file is part of hyph-utf8 package and resulted from
% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
%
% Source: frhyph.tex <2006-10-20>
% Author: R. Bastian, D. Flipo, B. Gaulle <cesure-l at gutenberg.eu.org>
%
% The above mentioned file should become obsolete,
% and the author of the original file should preferaby modify this file instead.
%
% Modificatios were needed in order to support native UTF-8 engines,
% but functionality (hopefully) didn't change in any way, at least not intentionally.
% This file is no longer stand-alone; at least for 8-bit engines
% you probably want to use loadhyph-foo.tex (which will load this file) instead.
%
% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
% with help & support from:
% - Karl Berry, who gave us free hands and all resources
% - Taco Hoekwater, with useful macros
% - Hans Hagen, who did the unicodifisation of patterns already long before
% and helped with testing, suggestions and bug reports
% - Norbert Preining, who tested & integrated patterns into TeX Live
%
% However, the "copyright/copyleft" owner of patterns remains the original author.
%
% The copyright statement of this file is thus:
%
% Do with this file whatever needs to be done in future for the sake of
% "a better world" as long as you respect the copyright of original file.
% If you're the original author of patterns or taking over a new revolution,
% plese remove all of the TUG comments & credits that we added here -
% you are the Queen / the King, we are only the servants.
%
% If you want to change this file, rather than uploading directly to CTAN,
% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
% or ask for credentials for SVN repository and commit it yourself;
% we will then upload the whole "package" to CTAN.
%
% Before a new "pattern-revolution" starts,
% please try to follow some guidelines if possible:
%
% - \lccode is *forbidden*, and I really mean it
% - all the patterns should be in UTF-8
% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
% and if you really cannot do without, also \input and \message
% - in particular, please no \catcode or \lccode changes,
% they belong to loadhyph-foo.tex,
% and no \lefthyphenmin and \righthyphenmin,
% they have no influence here and belong elsewhere
% - \begingroup and/or \endinput is not needed
% - feel free to do whatever you want inside comments
%
% We know that TeX is extremely powerful, but give a stupid parser
% at least a chance to read your patterns.
%
% For more unformation see
%
% http://tug.org/tex-hyphen
%
%------------------------------------------------------------------------------
%
% French hyphenation patterns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is available for free and can used and redistributed
% asis for free. Modified versions should have another name.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% *BEFORE* using this file *PLEASE* run checksum on it: %
% checksum -v frhyph.tex %
% to make sure that it hasn't been damaged. %
% Then if you notice anything wrong in french hyphenation please report to %
% R. Bastian, D. Flipo, B. Gaulle at the email address: %
% cesure-l@gutenberg.eu.org %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% checksum = "37208 1458 3078 34821"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% The most famous good guys who worked hard to obtain something usable.
% Jacques Desarmenien, Universite de Strasbourg :
% - << how to run TeX in a French environment: hyphenation, fonts,
% typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference
% - << La division par ordinateur des mots francais :
% application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-
% Gauthier-Villars
% Norman Buckle, UQAH (nb; many additions)
% Michael Ferguson, INRS-Telecommunications (mjf) June 1988
% Justin Bur, Universite de Montreal (jbb; checked against original list)
% all patterns including apostrophe missing from nb list
% after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle
% did their best effort to improve the list of patterns.
%
% -----------------------------------------------------------------
%
% Adaption of these patterns for
% - TeX Version 3.x and MLTeX 3.x (2.x)
% and
% - all fonts in T1/`Cork' and/or CM/OT1 encoding
% by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex'
% as of 1994-02-13 maintained by Bernd Raichle).
% (An adaption for the old MLTeX 2.x exists but can not be
% tested in lack of an executable.)
%
% -----------------------------------------------------------------
%
\patterns{
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%*
2'2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%a
.a4
'a4
.â4
'â4
ab2h % df-bg 1998/02/07 for abhorrer
.ab3réa
'ab3réa
ad2h % df-bg 1998/02/07 for adhèsion & co
a1è2dre
.ae3s4ch
'ae3s4ch
1alcool
a2l1algi
.amino1a2c
'amino1a2c
.ana3s4tr
'ana3s4tr
1a2nesthési
.anti1a2
'anti1a2
.anti1e2
'anti1e2
.anti1é2
.anti2enne
'anti2enne
'anti1é2
.anti1s2
'anti1s2
.apo2s3ta
'apo2s3ta
apo2s3tr
archi1é2pis
.as2ta
'as2ta
a2s3tro
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%b
1ba
1bâ
.bai2se3main % hyphen disappeared from french 5/2/94
1be
1bé
1bè
1bê
4be.
4bes.
2bent. % mute syllable: tombent (df) 22/02/94
1bi
1bî
.bi1a2c
.bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93
.bi1au
.bio1a2
.bi2s1a2
.bi1u2
1b2l
4ble.
4bles.
2blent. % mute syllable: troublent (df) 28/02/94
1bo
1bô
1b2r
4bre.
4bres.
2brent. % mute syllable: palabrent (df) 28/02/94
1bu
1bû
1by
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%c
1ç
1ca
1câ
ca3ou3t2 % for caoutchou... added 3/1/94 df-bg
1ce
1cé
1cè
1cê
4ce.
4ces.
% words ending with -cent (df) 22/02/94
2cent.
ja3cent.
ac3cent.
é3cent.
munifi3cent.
réti3cent.
privatdo3cent.
inno3cent.
es3cent.
acquies4cent.
is3cent.
immis4cent.
%
.ch4
1c2h
4ch.
2chb
4che.
4ches.
2chent. % mute syllable: touchent (df) 22/02/94
.chè2vre3feuille % hyphen disappeared from french 5/2/94
2chg
ch2l
4chle.
4chles.
chlo2r3a2c
chlo2r3é2t
2chm
2chn
2chp
ch2r
4chre.
4chres.
2chs
2cht
2chw
1ci
1cî
.ci2s1alp
1c2k
4ck.
2ckb
4cke.
4ckes.
2ckent. % mute syllable: stockent (df) 22/02/94
2ckf
2ckg
2ck3h
2ckp
2cks
2ckt
1c2l
4cle.
4cles.
2clent. % mute syllable: encerclent (df) 28/02/94
1co
1cô
co1acc
co1acq
co1a2d
co1ap
co1ar
co1assoc
co1assur
co1au
co1ax
1cœ
co1é2
co1ef
co1en
co1ex
.con4 % missing from nb list
.cons4 % missing from nb list
.contre1s2c
.contre3maître % hyphen disappeared from french 5/2/94
co2nurb
.co1o2
.co2o3lie
1c2r
4cre.
4cres.
2crent. % mute syllable: massacrent (df) 28/02/94
1cu
1cû
1cy
.cul4 % -- as .con4 .cons4 (march 92)
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%d
1d'
1da
1dâ
.dacryo1a2
d1d2h
1de
1dé
1dè
1dê
4de.
4des.
% words ending with -dent (df) 22/02/94
2dent.
déca3dent.
é3dent.
cci3dent.
inci3dent.
confi3dent.
tri3dent.
dissi3dent.
chien3dent.
.ar3dent.
impu3dent.
pru3dent.
%
.dé1a2
.dé1io
.dé1o2
.dé2s % originaly in JD file
%.dé2s1a2 removed 09/17/92 because wrong for the
% original JD 500 words test
.dé3s2a3cr
.dés2a3m % .dés2a2mi introduced 09/17/92 bec. i
% can't see why désamidonner ran in JD.
% Moved to .dés2a3m df 12/27/93.
.dé3s2a3tell
.dé3s2astr
.dé3s2c % 1 moved 3 due to .dé2s 09/17/92
%.dé2s1e2 removed 09/17/92 because wrong for the
% original JD 500 words test
.dé2s1é2
.dé3s2é3gr
.dé3s2ensib
.dé3s2ert
.dé3s2exu
%.dé2s3h removed 09/17/92 because wrong for the
% original JD 500 words test
.dé2s1i2
.dé3s2i3d
.dé3s2i3gn
.dé3s2i3li
.dé3s2i3nen
.dé3s2invo
.dé3s2i3r
.dé3s2ist
%.dé2s1o2 removed 09/17/92 because wrong for the
% original JD 500 words test
.dé3s2o3dé
.dé2s1œ
.dé3s2o3l
.dé3s2o3pil
.dé3s2orm
.dé3s2orp
.dé3s2oufr
.dé3s2p % 1 moved 3 due to .dé2s 09/17/92
.dé3s2t % 1 moved 3 due to .dé2s 09/17/92
.dé2s1u2n
3d2hal
3d2houd
1di
1dî
di2s3cop
.di1a2cé
.di1a2cid
.di1ald
.di1a2mi
.di1a2tom
.di1e2n
.di2s3h
2dlent. % mute syllable: jodlent (df) 28/02/94
1do
1dô
1d2r
4dre.
4dres.
2drent. % mute syllable: engendrent (df) 28/02/94
d1s2
1du
1dû
1dy
.dy2s3
.dy2s1a2
.dy2s1i2
.dy2s1o2 % missing from nb list
.dy2s1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%e
.e4
'e4
.ê4
'ê4
.é4
'é4
.è4
'è4
éd2hi % df-bg 1998/02/07 for rédhibitoire
1é2drie
1é2drique
1é2lectr
1é2lément
.en1a2
'en1a2
1é2nerg
e2n1i2vr
.en1o2
'en1o2
épi2s3cop
épi3s4cope
e2s3cop
.eu2r1a2
'eu2r1a2
eu1s2tat
extra1
extra2c
extra2i
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%f
1fa
1fâ
1fe
1fé
1fè
1fê
4fe.
4fes.
2fent. % mute syllable: agrafent chauffent (df) 22/02/94
%
1fi
1fî
1f2l
4fle.
4fles.
2flent. % mute syllable: gonflent (df) 28/02/94
1fo
1fô
1f2r
4fre.
4fres.
2frent. % mute syllable: balafrent (df) 28/02/94
f1s2
1fu
1fû
1fy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%g
1ga
1gâ
1ge
1gé
1gè
1gê
4ge.
4ges.
% words ending with -gent (df) 22/02/94
2gent.
ré3gent.
entre3gent.
indi3gent.
dili3gent.
intelli3gent.
indul3gent.
tan3gent.
rin3gent.
contin3gent.
.ar3gent.
'ar3gent.
ser3gent.
ter3gent.
résur3gent.
%
1g2ha
1g2he
1g2hi
1g2ho
1g2hy
1gi
1gî
1g2l
4gle.
4gles.
2glent. % mute syllable: meuglent (df) 28/02/94
1g2n
'a2g3nat % (df) 16/01/02
.a2g3nat % (df) 16/01/02
a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted)
co2g3niti % (df) 16/01/02
'i2g3né % (df) 16/01/02
.i2g3né % (df) 16/01/02
'i2g3ni % (df) 16/01/02
.i2g3ni % (df) 16/01/02
.ma2g3nicide % (df) 16/01/02
.ma2g3nificat % (df) 16/01/02
.ma2g3num % (df) 16/01/02
o2g3nomoni % (df) 16/01/02
o2g3nosi % (df) 16/01/02
.pro2g3nath % (df) 16/01/02
pu2g3nable % (df) 16/01/02
pu2g3nac % (df) 16/01/02
.sta2g3n
.syn2g3nath % (df) 16/01/02
wa2g3n
4gne.
4gnes.
2gnent. % mute syllable: accompagnent (df) 28/02/94
1go
1gô
1g2r
4gre.
4gres.
2grent. % mute syllable: immigrent (df) 28/02/94
1gu
1gû
g1s2
4gue.
4gues.
% words ending with -guent (df) 22/02/94
2guent.
.on3guent.
'on3guent.
%
1gy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%h
1ha
1hâ
1he
1hé
1hè
1hê
hémi1é
hémo1p2t
4he.
4hes.
1hi
1hî
1ho
1hô
1hu
1hû
1hy
hypera2
hypere2
hyperé2
hyperi2
hypero2
hypers2
hype4r1
hyperu2
hypo1a2
hypo1e2 % missing from nb list
hypo1é2
hypo1i2
hypo1o2
hypo1s2
hypo1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%i
.i4
'i4
.î4
'î4
i1algi
i1arthr
i1è2dre
% ill patterns missing from nb list
il2l
cil3l
rcil4l
ucil4l
vacil4l
gil3l
hil3l
lil3l
l3lion
mil3l
mil4let
émil4l
semil4l
rmil4l
armil5l
capil3l
papil3la
papil3le
papil3li
papil3lom
pupil3l
piril3l
thril3l
cyril3l
ibril3l
pusil3l
.stil3l
distil3l
instil3l
fritil3l
boutil3l
vanil3lin
vanil3lis
vil3l
avil4l
chevil4l
uevil4l
uvil4l
xil3l
% end of ill patterns
1informat % missing from nb list
.in1a2
'in1a2
.in2a3nit
'in2a3nit
.in2augur
'in2augur
.in1e2
'in1e2
.in1é2
'in1é2
.in2effab % missing from nb list
'in2effab
.in2é3lucta
'in2é3lucta
.in2é3narra
'in2é3narra
.in2ept
'in2ept
.in2er
'in2er
.in2exora % missing from nb list
'in2exora
.in1i2
'in1i2
.in2i3miti
'in2i3miti
.in2i3q
'in2i3q
.in2i3t
'in2i3t
.in1o2
'in1o2
.in2o3cul
'in2o3cul
.in2ond
'in2ond
.in1s2tab
'in1s2tab
'inte4r3
.intera2
'intera2
.intere2
'intere2
.interé2
'interé2
.interi2
'interi2
.intero2
'intero2
.inte4r3
.interu2
'interu2
.inters2
'inters2
.in1u2
'in1u2
.in2uit
'in2uit
.in2u3l
'in2u3l
io1a2ct
i1oxy
i1s2tat
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%j
1j
2jk
4je.
4jes.
2jent. % mute syllable: galèjent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%k
1ka
1kâ
1ke
1ké
1kè
1kê
4ke.
4kes.
2kent. % mute syllable: jerkent (df) 22/02/94
1k2h
4kh.
.kh4
1ki
1kî
1ko
1kô
1k2r
1ku
1kû
1ky
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%l
1la
1lâ
1là
la2w3re
1le
1lé
1lè
1lê
4le.
4les.
% words ending with -lent (df) 22/02/94
2lent.
.ta3lent.
iva3lent.
équiva4lent.
monova3lent.
polyva3lent.
re3lent.
.do3lent.
indo3lent.
inso3lent.
turbu3lent.
succu3lent.
fécu3lent.
trucu3lent.
opu3lent.
corpu3lent.
ru3lent.
sporu4lent.
%
1li
1lî
1lo
1lô
l1s2t
1lu
1lû
1ly
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%m
1ma
1mâ
.ma2c3k
.macro1s2c
.ma2l1a2dres
.ma2l1a2dro
.ma2l1aisé
.ma2l1ap
.ma2l1a2v
.ma2l1en
.ma2l1int
.ma2l1oc
.ma2l1o2d
.ma2r1x % nb (jbb: ?)
1me
1mé
1mè
1mê
.mé2g1oh
.mé2sa % missing from nb list
.mé3san % missing from nb list
.mé2s1es
.mé2s1i
.mé2s1u2s
.méta1s2ta
4me.
4mes.
% words ending with -ment (df) 22/02/94
â2ment.
da2ment.
fa2ment.
amalga2ment.
cla2ment.
ra2ment.
tempéra3ment.
ta2ment.
testa3ment.
qua2ment.
è2ment.
carê2ment.
diaphrag2ment.
ryth2ment.
ai2ment.
rai3ment.
abî2ment.
éci2ment.
vidi2ment.
subli2ment.
éli2ment.
reli2ment.
mi2ment.
ani2ment.
veni2ment.
ri2ment.
détri3ment.
nutri3ment.
inti2ment.
esti2ment.
l2ment.
flam2ment.
gram2ment.
.gem2ment.
om2ment.
.com3ment.
ô2ment.
slalo2ment.
chro2ment.
to2ment.
ar2ment.
.sar3ment.
er2ment.
antifer3ment.
.ser3ment.
fir2ment.
or2ment.
as2ment.
au2ment.
écu2ment.
fu2ment.
hu2ment.
fichu3ment.
llu2ment.
plu2ment.
bou2ment.
bru2ment.
su2ment.
tu2ment.
%
1mi
1mî
.milli1am
1m2némo
1m2nès
1m2nési
1mo
1mô
1mœ
.mono1a2
.mono1e2
.mono1é2
.mono1i2
.mono1ï2dé
.mono1o2
.mono1u2
.mono1s2
mon2t3réal % missing from nb list
m1s2
1mu
1mû
1my
moye2n1â2g
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%n
1na
1nâ
1ne
1né
1nè
1nê
4ne.
4nes.
% words ending with -nent (df) 22/02/94
2nent. % fric-tionnent - syllable muette - bg 27/12/93
réma3nent.
imma3nent.
perma3nent.
.émi3nent.
préémi3nent.
proémi3nent.
surémi3nent.
immi3nent.
conti3nent.
perti3nent.
absti3nent.
%
1ni
1nî
1no
1nô
1nœ
.no2n1obs
1nu
1nû
n3s2at.
n3s2ats.
n1x
1ny
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%o
.o4
'o4
'ô4
.ô4
%'\"o2 % mjf % deleted 3/1/94 df-bg
o2b3long
1octet % missing from nb list
o1d2l
o1è2dre
o1ioni
ombud2s3
omni1s2
o1s2tas
o1s2tat
o1s2téro
o1s2tim
o1s2tom
o1s2trad
o1s2tratu
o1s2triction
.oua1ou
'oua1ou
.ovi1s2c
'ovi1s2c
oxy1a2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%p
1pa
1pâ
paléo1é2
.pa2n1a2f
.pa2n1a2mé
.pa2n1a2ra
.pa2n1is
.pa2n1o2ph
.pa2n1opt
.pa2r1a2che
.pa2r1a2chè
.para1s2
.pa2r3hé
1pe
1pé
1pè
1pê
4pe.
4pes.
% words ending with -pent (df) 22/02/94
2pent.
re3pent.
.ar3pent.
'ar3pent.
ser3pent.
%
.pen2ta % pent- or penta- but never pen-ta bg 12/27/93
per3h
pé2nul % pé2n1ul moved back 09/17/92 to JD def.
.pe4r
.per1a2
.per1e2
.per1é2
.per1i2
.per1o2
.per1u2
pé1r2é2q % 2r1 moved 09/17/92 to 1r2(it was a typo)
.péri1os
.péri1s2
.péri2s3s
.péri2s3ta
.péri1u2
1p2h
.ph4
4ph.
.phalan3s2t
4phe.
4phes.
2phent. % mute syllable: triomphent (df) 22/02/94
ph2l
4phle.
4phles.
2phn
photo1s2
ph2r
4phre.
4phres.
2phs
2pht
3ph2talé
3ph2tis
%%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94
%%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92
%%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94
1pi
1pî
1p2l
4ple.
4ples.
2plent. % mute syllable: accouplent (df) 28/02/94
.pluri1a
1p2né
1p2neu
1po
1pô
po1astre
poly1a2
poly1e2
poly1é2
poly1è2
poly1i2
poly1o2
poly1s2
poly1u2
.pon2tet % JD hypenated it asis 09/17/92, exception
.pos2t3h
.pos2t1in
.pos2t1o2
.pos2t3r
.post1s2
1p2r
4pre.
4pres.
2prent. % mute syllable: empourprent (df) 28/02/94
.pré1a2
.pré2a3la % missing from nb list
.pré2au
.pré1é2
.pré1e2
.pré1i2
.pré1o2
.pré1u2
.pré1s2
.pro1é2
.pro1s2cé
pro2s3tat
.prou3d2h
1p2sych
.psycho1a2n
1p2tèr
1p2tér
1pu
.pud1d2l
1pû
1py
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%q
1q
4que.
4ques.
% words ending with -quent (df) 22/02/94
2quent.
é3quent.
élo3quent.
grandilo3quent.
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%r
1ra
1râ
radio1a2 % missing from nb list
1re
1ré
1rè
1rê
.ré1a2
.ré2a3le
.ré2a3lis
.ré2a3lit
.ré2aux
.ré1é2
.ré1e2
.ré2el
.ré2er
.ré2èr
.ré1i2
.ré2i3fi
.ré1o2
.re1s2
.re2s3cap
.re2s3cisi % for res-cision 09/17/92 (missing from nb)
.re2s3ciso % for res-cisoire 09/17/92(missing from nb)
.re2s3cou
.re2s3cri
.re2s3pect
.re2s3pir
.re2s3plend
.re2s3pons
.re2s3quil
.re2s3s
.re2s3t
.re3s4tab
.re3s4tag
.re3s4tand
.re3s4tat
.re3s4tén
.re3s4tér
.re3s4tim
.re3s4tip
.re3s4toc
.re3s4top
.re3s4tr
.re4s5trein
.re4s5trict
.re4s5trin
.re3s4tu
.re3s4ty
.réu2 %.ré1u2 % pattern rejected 12/2/92
% (don't hyphenate as ré-union nor réu-nion)
.ré2uss
.rétro1a2
4re.
4res.
% words ending with -rent (df) 22/02/94
2rent. % es-pèrent - syllable muette - bg 27/12/93
.pa3rent.
appa3rent.
transpa3rent.
é3rent.
tor3rent.
cur3rent.
%
1r2h
4rhe.
4rhes.
2r3heur
2r3hydr
1ri
1rî
1ro
1rô
1ru
1rû
1ry
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%s
1sa
1sâ
.sch4
1s2caph
1s2clér
1s2cop
1s2ch
e2s3ch
i2s3ché
i2s3chia
i2s3chio
4sch.
4sche.
4sches.
2schs
1se
1sé
1sè
1sê
sesqui1a2
4se.
4ses.
% words ending with -sent (df) 22/02/94
2sent. % massent - syllable muette - bg 27/12/93
ab3sent.
pré3sent.
.res3sent.
%
.seu2le % jbb
.sh4
1s2h
4sh.
4she.
4shes.
2shent. % mute syllable: smashent (df) 22/02/94
2shm
2s3hom
2shr
2shs
1si
1sî
1s2lav
1s2lov
1so
1sô
1sœ
1s2patia
1s2perm
1s2por
1s2phèr
1s2phér
1s2piel
1s2piros
1s2tandard
1s2tein
stéréo1s2
1s2tigm
1s2tock
1s2tomos
1s2troph
1s2tructu
1s2tyle
1su
1sû
.su2b1a2
.su3b2alt
.su2b1é2
.su3b2é3r
.su2b1in
.su2b3limin
.su2b3lin
.su2b3lu
sub1s2
.su2b1ur
supero2
supe4r1
supers2
.su2r1a2
su3r2ah
.su3r2a3t
.su2r1e2
.su3r2eau
.su3r2ell
.su3r2et
.su2r1é2
.su2r3h
.su2r1i2m
.su2r1inf
.su2r1int
.su2r1of
.su2r1ox
1sy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%t
1ta
1tâ
1tà
tachy1a2
tchin3t2
1te
1té
1tè
1tê
télé1e2
télé1i2
télé1o2b
télé1o2p
télé1s2
4te.
4tes.
% words ending with -tent (df) 22/02/94
2tent. % mentent - syllable muette - bg 27/12/93
.la3tent.
.pa3tent.
compé3tent.
éni3tent.
mécon3tent.
omnipo3tent.
ventripo3tent.
équipo3tent.
impo3tent.
mit3tent.
%
.th4
1t2h
4th.
4the.
4thes.
thermo1s2
2t3heur
2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93
2thm
2thn
th2r
4thre.
4thres.
2ths
1ti
1tî
1to
1tô
1t2r
tran2s1a2
tran3s2act
tran3s2ats
tran2s3h
tran2s1o2
tran2s3p
tran2s1u2
4tre.
4tres.
2trent. % mute syllable: infiltrent (df) 28/02/94
.tri1a2c
.tri1a2n
.tri1a2t
.tri1o2n
t1t2l
1tu
1tû
tung2s3
1ty
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%u
.u4
'u4
.û4
'û4
uni1o2v
uni1a2x
u2s3tr
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%v
1va
1vâ
1ve
1vé
1vè
1vê
vélo1s2ki
4ve.
4ves.
% words ending with -vent (df) 22/02/94
2vent.
conni3vent.
.sou3vent.
%
1vi
1vî
1vo
1vô
vol2t1amp
1v2r
4vre.
4vres.
2vrent. % mute syllable: recouvrent (df) 28/02/94
1vu
1vû
1vy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%w
1wa
1we
4we.
4wes.
2went. % mute syllable: interviewent (df) 22/02/94
1wi
1wo
1wu
1w2r
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%x
2xent. % mute syllable: malaxent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%y
.y4
'y4
y1asth
y1s2tom
y1algi
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%z
1za
1ze
1zé
1zè
4ze.
4zes.
% words ending with -zent (df) 22/02/94
2zent.
privatdo3zent.
%
1zi
1zo
1zu
1zy
}
|
Added gc_lang/fr/dictionnaire/césures/hyph_fr.dic version [dcb79e8ef8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 | UTF-8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LEFTHYPHENMIN 2 RIGHTHYPHENMIN 2 COMPOUNDLEFTHYPHENMIN 2 COMPOUNDRIGHTHYPHENMIN 2 %%% Do not remove the following line %%% NEXTLEVEL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2'2 .a4 'a4 .â4 'â4 ab2h a1bî abî1me abî2ment. .a1b2r 'a1b2r .ab1ré 'ab1ré .ab3réa 'ab3réa ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h aè1d2r a1è2d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. â1me â2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1hé 1a2nesthé1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 'anti1é2 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archié1pi archi1é2pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1bâ .bai1se .baise1ma .bai2se3main 1be 1bé 1bè 1bê 4be. 2bent. 4bes. 1bi .1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1bô bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 ca1pi capil3l ca1rê carê1me carê2ment. c1ci cci1de cci3dent. 1ce 1cé 1cè 1cê 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1hè 4c4he. 2chent. 4c4hes. che1vi chevil4l .chè1v2r .chèv1re .chèvre1fe .chèvrefeuil2l .chè2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1ré chlo2r3é2t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1cî cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1cô co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1pé compé1te compé3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contremaî1t2r .cont1re3maît1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1cû .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1dâ .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1dé .1dé 1dè 1dê 4de. .dé1a2 dé1ca déca1de déca3dent. .dé1io 2dent. .dé1o2 .dé2s 4des. .dé1sa .dé3s2a3c2r .dés2a3m .dé3s2as1t2r .désa1te .dé3s2a3tell .dé3s2c .dé1se .dé2s1é2 .dé3s2é3g2r .désen1si .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3g2n .dé3s2i3li .dési1ne .dé3s2i3nen .dé3s2in1vo .dé3s2i3r .dé3s2ist .dé1so .1dé3s2o3dé .dé2s1œ .dé3s2o3l .déso1pi .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2ou1f2r .dé3s2p .dé3s2t .dé1su .dé2s1u2n dé1t2r dét1ri détri1me détri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1dî .di1a2cé .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1dô .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1dû 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .é4 'é4 .è4 'è4 .ê4 'ê4 é1ce é3cent. é1ci éci1me éci2ment. é1cu écu1me écu2ment. é1de é3dent. éd2hi é1d2r éd1ri 1é2drie édri1q 1é2drique é1le é1lé 1é2lec1t2r élé1me 1é2lément é1li éli1me éli2ment. é1lo élo1q élo3quent. è1me è2ment. é1mi .é1mi émil4l .émi1ne .émi3nent. .e1n1a2 'e1n1a2 é1ne 1é2nerg e1ni é1ni éni1te éni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. é1pi épis1co épi2s3cop épi3s4co1pe é1q é3quent. équi1po équipo1te équipo3tent. équi1va équiva1le équiva4lent. é1re é3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1fâ fa1me fa2ment. 1fe 1fé 1fè 1fê 4fe. fé1cu fécu1le fécu3lent. 2fent. 4fes. 1fi 1fî fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1fô 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1fû fu1me fu2ment. 1fy 1ga 1gâ 1ge .1ge 1gé 1gè 1gê 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1gô 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1gû 4gue. 2guent. 4gues. 1gy 1ha 1hâ 1he 1hé 1hè 1hê 4he. hé1mi hémi1é hé1mo hémo1p2t 4hes. 1hi 1hî hil3l 1ho 1hô 1hu 1hû hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1ré2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .î4 'î4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l iè1d2r i1è2d1re .i1g2n 'i1g2n .i2g3né 'i2g3né .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n1é2 'i1n1é2 .inef1fa 'inef1fa .in2effab 'in2effab .iné1lu 'iné1lu .in2é3luc1ta 'in2é3luc1ta .iné1na 'iné1na .in2é3nar1ra 'in2é3nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1ré2 'inte1ré2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1hé isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la .1la 1là 1lâ .la1te .la3tent. la1w2r la2w3re 1le 1lé 1lè 1lê 4le. 2lent. 4les. 1li 1lî lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1lô l1s2t 1lu 1lû 1ly 1ma .1ma 1mâ .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1sé .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé .1mé 1mè 1mê 4me. mé1co mécon1te mécon3tent. .mé1go .mé2g1oh 4mes. .mé2sa .mé3san .mé1se .mé2s1es .mé2s1i .mé1su .mé2s1u2s .mé1ta .mé1ta1s2ta 1mi .1mi 1mî mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1né m1nè 1m2né1mo 1m2nès 1m2né1si 1mo .1mo 1mô 1mœ mo1no .mo1no .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1ré mon2t3réal moye1nâ moye2n1â2g m1s2 1mu 1mû mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1nâ 1ne 1né 1nè 1nê 4ne. 2nent. 4nes. 1ni 1nî 1no .1no 1nô 1nœ .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1nû nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .ô4 'ô4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l oè1d2r o1è2d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 ô1me ô2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1té o1s2té1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1pâ pa1lé paléo1é2 .pa1na .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1hè .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3hé .pa1te .pa3tent. 1pe .1pe 1pé .1pé 1pè 1pê 4pe. 2pent. .pen2ta pé1nu pé2nul .pe4r .pe1r1a2 pé1ré .pe1r1e2 .pe1r1é2 pé1r2é2q pe1r3h .pé1ri .pe1r1i2 .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1lé ph1ti 3ph2tis 1pi 1pî pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2né 1p2neu 1po .1po 1pô poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1ré .p1ré 4p4re. .pré1a2 .pré2a3la .pré2au .pré1e2 .pré1é2 préé1mi préémi1ne préémi3nent. .pré1i2 2p2rent. .pré1o2 .pré1s2 4p4res. pré1se pré3sent. .pré1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro1é2 proé1mi proémi1ne proémi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2cé pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1té p1tè 1p2tér 1p2tèr 1pu .1pu 1pû .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1râ ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1ré .1ré 1rè 1rê 4re. .ré1a2 .ré2a3le .réa1li .ré2a3lis .ré2a3lit .ré2aux .ré1e2 .ré1é2 .ré2el .ré2er .ré2èr ré1ge ré3gent. .ré1i2 .ré2i3fi re1le re3lent. re1li reli1me reli2ment. ré1ma réma1ne réma3nent. 2rent. .ré1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1té .re3s4tén .re3s4tér .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty ré1su résur1ge résur3gent. ré1ti réti1ce réti3cent. .ré1t2r .rét1ro .rétro1a2 .réu2 .ré2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1rî ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1rô 1ru 1rû ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1sâ .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1lé 1s2clér s1co 1s2cop 1se .1se 1sé 1sè 1sê 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1sî s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1sô 1sœ .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1hé sp1hè 1s2phér 1s2phèr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1té 1s2tein sté1ré stéréo1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1ré .su2r1e2 .su2r1é2 .su3r2eau .su3r2ell suré1mi surémi1ne surémi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1tà 1tâ ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1té 1tè 1tê 4te. té1lé télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 tem1pé tempé1ra tempéra1me tempéra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1tî 1to 1tô to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1tû tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .û4 'û4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1vâ va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1vé 1vè 1vê 4ve. vé1lo vélo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1vî vi1di vidi1me vidi2ment. vil3l 1vo 1vô vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1vû 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1zé 1zè 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 2’2 ’a4 4a- .á4 'á4 ’á4 4á- .à4 'à4 ’à4 4à- ’â4 4â- .å4 'å4 ’å4 4å- .ä4 'ä4 ’ä4 4ä- .ã4 'ã4 ’ã4 4ã- -5a4 -5á4 -5à4 -5â4 -5å4 -5ä4 -5ã4 abî2ment- ’a1b2r -5a1b2r ’ab1ré -5ab1ré ’ab3réa -5ab3réa ab3sent- absti3nent- ac3cent- acquies4cent- .æ4 'æ4 ’æ4 4æ- -5æ4 ’ae3s4c2h -5ae3s4c2h ’a1g2n -5a1g2n ’ag1na -5ag1na ’a2g3nat -5a2g3nat ai2ment- amalga2ment- â2ment- ’a1mi -5a1mi ’ami1no -5ami1no ’amino1a2c -5amino1a2c ’a1na -5a1na ’ana3s4t2r -5ana3s4t2r ani2ment- ’an1ti -5an1ti ’anti1a2 -5anti1a2 ’anti1e2 ’anti1é2 -5anti1e2 -5anti1é2 ’anti2en1ne -5anti2en1ne antifer3ment- ’anti1s2 -5anti1s2 ’a1po -5a1po ’apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ’ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ’ar3gent- ’ar3gent. -5ar3gent. ar2ment- ’ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ’ar3pent- ’ar3pent. -5ar3pent. as2ment- ’as2ta -5as2ta au2ment- .b4 'b4 ’b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 ’c4 4c- .ç4 'ç4 ’ç4 4ç- -5c4 -5ç4 carê2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1hè 2chent- 4c4hes- -5chè1v2r -5chèv1re -5chèvre1fe -5chèvrefeuil2l -5chè2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. compé3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contremaî1t2r -5cont1re3maît1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d2’2 .d4 'd4 ’d4 4d- .ð4 'ð4 ’ð4 4ð- -5d4 -5ð4 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5dé1a2 déca3dent- -5dé1io 2dent- -5dé1o2 4des- -5dé2s -5dé1sa -5dé3s2a3c2r -5dés2a3m -5dé3s2as1t2r -5désa1te -5dé3s2a3tell -5dé3s2c -5dé1se -5dé2s1é2 -5dé3s2é3g2r -5désen1si -5dé3s2ensib -5dé3s2ert -5dé3s2exu -5dé2s1i2 -5dé3s2i3d -5dé3s2i3g2n -5dé3s2i3li -5dési1ne -5dé3s2i3nen -5dé3s2in1vo -5dé3s2i3r -5dé3s2ist -5dé1so -5dé2s1œ -5dé3s2o3l -5déso1pi -5dé3s2o3pil -5dé3s2orm -5dé3s2orp -5dé3s2ou1f2r -5dé3s2p -5dé3s2t -5dé1su -5dé2s1u2n détri3ment- -5di1a2cé -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 ’e4 4e- ’é4 4é- ’è4 4è- ’ê4 4ê- .ë4 'ë4 ’ë4 4ë- -5e4 -5é4 -5è4 -5ê4 -5ë4 é3cent- éci2ment- écu2ment- é3dent- éli2ment- élo3quent- è2ment- -5é1mi -5émi1ne -émi3nent- .émi3nent- -5émi3nent. ’e1n1a2 -5e1n1a2 éni3tent- ’e1n1o2 -5e1n1o2 entre3gent- é3quent- équipo3tent- équiva4lent- é3rent- er2ment- es3cent- esti2ment- ’eu2r1a2 -5eu2r1a2 .f4 'f4 ’f4 4f- -5f4 fa2ment- 4fe- fécu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 ’g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 ’h4 4h- -5h4 4he- 4hes- hu2ment- ’i4 4i- .í4 'í4 ’í4 4í- .ì4 'ì4 ’ì4 4ì- ’î4 4î- .ï4 'ï4 ’ï4 4ï- -5i4 -5í4 -5ì4 -5î4 -5ï4 ’i1g2n -5i1g2n ’i2g3né -5i2g3né ’i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- ’i1n1a2 -5i1n1a2 ’ina1ni -5ina1ni ’in2a3nit -5in2a3nit ’inau1gu -5inau1gu ’in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- ’i1n1e2 ’i1n1é2 -5i1n1e2 -5i1n1é2 ’inef1fa -5inef1fa ’in2effab -5in2effab ’iné1lu -5iné1lu ’in2é3luc1ta -5in2é3luc1ta ’iné1na -5iné1na ’in2é3nar1ra -5in2é3nar1ra ’in2ept -5in2ept ’in2er -5in2er ’in2exo1ra -5in2exo1ra ’i1n1i2 -5i1n1i2 ’ini1mi -5ini1mi ’in2i3mi1ti -5in2i3mi1ti ’in2i3q -5in2i3q ’in2i3t -5in2i3t inno3cent- ’i1n1o2 -5i1n1o2 ’ino1cu -5ino1cu ’in2o3cul -5in2o3cul ’in2ond -5in2ond inso3lent- ’ins1ta -5ins1ta ’in1s2tab -5in1s2tab ’in1te -5in1te intelli3gent- ’inte4r3 -5inte4r3 ’inte1ra2 -5inte1ra2 ’inte1re2 ’inte1ré2 -5inte1re2 -5inte1ré2 ’inte1ri2 -5inte1ri2 ’inte1ro2 -5inte1ro2 ’inters2 -5inters2 ’inte1ru2 -5inte1ru2 inti2ment- ’i1n1u2 -5i1n1u2 ’in2uit -5in2uit ’in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 ’j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 ’k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 ’l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 ’m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1sé -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mécon3tent- -5mé1go -5mé2g1oh 4mes- -5mé2sa -5mé3san -5mé1se -5mé2s1es -5mé2s1i -5mé1su -5mé2s1u2s -5mé1ta -5mé1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono1é2 -5mono1i2 -5mono1ï2dé -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 ’n4 4n- .ñ4 'ñ4 ’ñ4 4ñ- -5n4 -5ñ4 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- ’o4 4o- .ó4 'ó4 ’ó4 4ó- .ò4 'ò4 ’ò4 4ò- ’ô4 4ô- .õ4 'õ4 ’õ4 4õ- .ø4 'ø4 ’ø4 4ø- -5o4 -5ó4 -5ò4 -5ô4 -5õ4 -5ø4 .œ4 'œ4 ’œ4 4œ- -5œ4 ô2ment- om2ment- omnipo3tent- ’on1gu -5on1gu -on3guent- .on3guent- 'on3guent- ’on3guent- ’on3guent. -5on3guent. opu3lent- or2ment- ’oua1ou -5oua1ou ’o1vi -5o1vi ’ovi1s2c -5ovi1s2c .p4 'p4 ’p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2mé -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1hè -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3hé -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r1é2 -5pé1ri -5pe1r1i2 -5péri1os -5péri1s2 -5péri2s3s -5péri2s3ta -5péri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1ré -5pré1a2 -5pré2a3la -5pré2au -5pré1e2 -5pré1é2 préémi3nent- -5pré1i2 2p2rent- -5pré1o2 4p4res- -5pré1s2 pré3sent- -5pré1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro1é2 proémi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2cé -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 ’q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 ’r4 4r- -5r4 rai3ment- ra2ment- 4re- -5ré1a2 -5ré2a3le -5réa1li -5ré2a3lis -5ré2a3lit -5ré2aux -5ré1e2 -5ré1é2 -5ré2el -5ré2er -5ré2èr ré3gent- -5ré1i2 -5ré2i3fi re3lent- reli2ment- réma3nent- 2rent- -5ré1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1té -5re3s4tén -5re3s4tér -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty résur3gent- réti3cent- -5ré1t2r -5rét1ro -5rétro1a2 -5réu2 -5ré2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 ’s4 4s- .š4 'š4 ’š4 4š- -5s4 -5š4 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b1é2 -5su3b2é3r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r1é2 -5su3r2eau -5su3r2ell surémi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 ’t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempéra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .þ4 'þ4 ’þ4 4þ- -5þ4 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- ’u4 4u- .ú4 'ú4 ’ú4 4ú- .ù4 'ù4 ’ù4 4ù- ’û4 4û- .ü4 'ü4 ’ü4 4ü- -5u4 -5ú4 -5ù4 -5û4 -5ü4 .v4 'v4 ’v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 ’w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 ’x4 4x- -5x4 2xent- ’y4 4y- .ý4 'ý4 ’ý4 4ý- .ÿ4 'ÿ4 ’ÿ4 4ÿ- -5y4 -5ý4 -5ÿ4 .z4 'z4 ’z4 4z- .ž4 'ž4 ’ž4 4ž- -5z4 -5ž4 4ze- 2zent- 4zes- |
Added gc_lang/fr/dictionnaire/césures/hyph_fr.iso8859-1.dic version [ffb0b705c5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 | ISO8859-1 2'2 .a4 'a4 .4 '4 ab2h a1b ab1me ab2ment. .a1b2r 'a1b2r .ab1r 'ab1r .ab3ra 'ab3ra ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h a1d2r a12d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. 1me 2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1h 1a2nesth1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti12 'anti12 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archi1pi archi12pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1b .bai1se .baise1ma .bai2se3main 1be 1b 1b 1b 4be. 2bent. 4bes. 1bi .1bi 1b .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1b bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1b 1by 1 1ca 1c ca3ou3t2 ca1pi capil3l ca1r car1me car2ment. c1ci cci1de cci3dent. 1ce 1c 1c 1c 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1h 4c4he. 2chent. 4c4hes. che1vi chevil4l .ch1v2r .chv1re .chvre1fe .chvrefeuil2l .ch2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1r chlo2r32t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1c cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1c co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1c co12 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1p comp1te comp3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contrema1t2r .cont1re3mat1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1c .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1d .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1d .1d 1d 1d 4de. .d1a2 d1ca dca1de dca3dent. .d1io 2dent. .d1o2 .d2s 4des. .d1sa .d3s2a3c2r .ds2a3m .d3s2as1t2r .dsa1te .d3s2a3tell .d3s2c .d1se .d2s12 .d3s23g2r .dsen1si .d3s2ensib .d3s2ert .d3s2exu .d2s1i2 .d3s2i3d .d3s2i3g2n .d3s2i3li .dsi1ne .d3s2i3nen .d3s2in1vo .d3s2i3r .d3s2ist .d1so .1d3s2o3d .d2s1 .d3s2o3l .dso1pi .d3s2o3pil .d3s2orm .d3s2orp .d3s2ou1f2r .d3s2p .d3s2t .d1su .d2s1u2n d1t2r dt1ri dtri1me dtri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1d .di1a2c .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1d .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1d 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .4 '4 .4 '4 .4 '4 1ce 3cent. 1ci ci1me ci2ment. 1cu cu1me cu2ment. 1de 3dent. d2hi 1d2r d1ri 12drie dri1q 12drique 1le 1l 12lec1t2r l1me 12lment 1li li1me li2ment. 1lo lo1q lo3quent. 1me 2ment. 1mi .1mi mil4l .mi1ne .mi3nent. .e1n1a2 'e1n1a2 1ne 12nerg e1ni 1ni ni1te ni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. 1pi pis1co pi2s3cop pi3s4co1pe 1q 3quent. qui1po quipo1te quipo3tent. qui1va quiva1le quiva4lent. 1re 3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1f fa1me fa2ment. 1fe 1f 1f 1f 4fe. f1cu fcu1le fcu3lent. 2fent. 4fes. 1fi 1f fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1f 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1f fu1me fu2ment. 1fy 1ga 1g 1ge .1ge 1g 1g 1g 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1g gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1g 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1g 4gue. 2guent. 4gues. 1gy 1ha 1h 1he 1h 1h 1h 4he. h1mi hmi1 h1mo hmo1p2t 4hes. 1hi 1h hil3l 1ho 1h 1hu 1h hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1r2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo12 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .4 '4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l i1d2r i12d1re .i1g2n 'i1g2n .i2g3n 'i2g3n .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n12 'i1n12 .inef1fa 'inef1fa .in2effab 'in2effab .in1lu 'in1lu .in23luc1ta 'in23luc1ta .in1na 'in1na .in23nar1ra 'in23nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1r2 'inte1r2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1h isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1k 1ke 1k 1k 1k 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1k 1ko 1k 1k2r 1ku 1k 1ky 1la .1la 1l 1l .la1te .la3tent. la1w2r la2w3re 1le 1l 1l 1l 4le. 2lent. 4les. 1li 1l lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1l l1s2t 1lu 1l 1ly 1ma .1ma 1m .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1s .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1m .1m 1m 1m 4me. m1co mcon1te mcon3tent. .m1go .m2g1oh 4mes. .m2sa .m3san .m1se .m2s1es .m2s1i .m1su .m2s1u2s .m1ta .m1ta1s2ta 1mi .1mi 1m mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1n m1n 1m2n1mo 1m2ns 1m2n1si 1mo .1mo 1m 1m mo1no .mo1no .mono1a2 .mono1e2 .mono12 .mono1i2 .mono12d .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1r mon2t3ral moye1n moye2n12g m1s2 1mu 1m mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1n 1ne 1n 1n 1n 4ne. 2nent. 4nes. 1ni 1n 1no .1no 1n 1n .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1n nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .4 '4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l o1d2r o12d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 1me 2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1t o1s2t1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1p pa1l palo12 .pa1na .pa2n1a2f .pa2n1a2m .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1h .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3h .pa1te .pa3tent. 1pe .1pe 1p .1p 1p 1p 4pe. 2pent. .pen2ta p1nu p2nul .pe4r .pe1r1a2 p1r .pe1r1e2 .pe1r12 p1r22q pe1r3h .p1ri .pe1r1i2 .pri1os .pri1s2 .pri2s3s .pri2s3ta .pri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1l ph1ti 3ph2tis 1pi 1p pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2n 1p2neu 1po .1po 1p poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly12 poly12 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1r .p1r 4p4re. .pr1a2 .pr2a3la .pr2au .pr1e2 .pr12 pr1mi prmi1ne prmi3nent. .pr1i2 2p2rent. .pr1o2 .pr1s2 4p4res. pr1se pr3sent. .pr1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro12 pro1mi promi1ne promi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2c pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1t p1t 1p2tr 1p2tr 1pu .1pu 1p .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1r ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1r .1r 1r 1r 4re. .r1a2 .r2a3le .ra1li .r2a3lis .r2a3lit .r2aux .r1e2 .r12 .r2el .r2er .r2r r1ge r3gent. .r1i2 .r2i3fi re1le re3lent. re1li reli1me reli2ment. r1ma rma1ne rma3nent. 2rent. .r1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1t .re3s4tn .re3s4tr .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty r1su rsur1ge rsur3gent. r1ti rti1ce rti3cent. .r1t2r .rt1ro .rtro1a2 .ru2 .r2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1r ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1r 1ru 1r ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1s .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1l 1s2clr s1co 1s2cop 1se .1se 1s 1s 1s 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1s s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1s 1s .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1h sp1h 1s2phr 1s2phr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1t 1s2tein st1r stro1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1s .su2b1a2 .su3b2alt .su2b12 .su3b23r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1r .su2r1e2 .su2r12 .su3r2eau .su3r2ell sur1mi surmi1ne surmi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1t 1t ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1t 1t 1t 4te. t1l tl1e2 tl1i2 tl1o2b tl1o2p tl1s2 tem1p temp1ra tempra1me tempra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1t 1to 1t to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1t tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .4 '4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1v va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1v 1v 1v 4ve. v1lo vlo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1v vi1di vidi1me vidi2ment. vil3l 1vo 1v vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1v 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1z 1z 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 22 a4 4a- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- .4 '4 4 4- -5a4 -54 -54 -54 -54 -54 -54 ab2ment- a1b2r -5a1b2r ab1r -5ab1r ab3ra -5ab3ra ab3sent- absti3nent- ac3cent- acquies4cent- .4 '4 4 4- -54 ae3s4c2h -5ae3s4c2h a1g2n -5a1g2n ag1na -5ag1na a2g3nat -5a2g3nat ai2ment- amalga2ment- 2ment- a1mi -5a1mi ami1no -5ami1no amino1a2c -5amino1a2c a1na -5a1na ana3s4t2r -5ana3s4t2r ani2ment- an1ti -5an1ti anti1a2 -5anti1a2 anti1e2 anti12 -5anti1e2 -5anti12 anti2en1ne -5anti2en1ne antifer3ment- anti1s2 -5anti1s2 a1po -5a1po apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ar3gent- ar3gent. -5ar3gent. ar2ment- ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ar3pent- ar3pent. -5ar3pent. as2ment- as2ta -5as2ta au2ment- .b4 'b4 b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 c4 4c- .4 '4 4 4- -5c4 -54 car2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1h 2chent- 4c4hes- -5ch1v2r -5chv1re -5chvre1fe -5chvrefeuil2l -5ch2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. comp3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contrema1t2r -5cont1re3mat1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d22 .d4 'd4 d4 4d- .4 '4 4 4- -5d4 -54 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5d1a2 dca3dent- -5d1io 2dent- -5d1o2 4des- -5d2s -5d1sa -5d3s2a3c2r -5ds2a3m -5d3s2as1t2r -5dsa1te -5d3s2a3tell -5d3s2c -5d1se -5d2s12 -5d3s23g2r -5dsen1si -5d3s2ensib -5d3s2ert -5d3s2exu -5d2s1i2 -5d3s2i3d -5d3s2i3g2n -5d3s2i3li -5dsi1ne -5d3s2i3nen -5d3s2in1vo -5d3s2i3r -5d3s2ist -5d1so -5d2s1 -5d3s2o3l -5dso1pi -5d3s2o3pil -5d3s2orm -5d3s2orp -5d3s2ou1f2r -5d3s2p -5d3s2t -5d1su -5d2s1u2n dtri3ment- -5di1a2c -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 e4 4e- 4 4- 4 4- 4 4- .4 '4 4 4- -5e4 -54 -54 -54 -54 3cent- ci2ment- cu2ment- 3dent- li2ment- lo3quent- 2ment- -51mi -5mi1ne -mi3nent- .mi3nent- -5mi3nent. e1n1a2 -5e1n1a2 ni3tent- e1n1o2 -5e1n1o2 entre3gent- 3quent- quipo3tent- quiva4lent- 3rent- er2ment- es3cent- esti2ment- eu2r1a2 -5eu2r1a2 .f4 'f4 f4 4f- -5f4 fa2ment- 4fe- fcu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 h4 4h- -5h4 4he- 4hes- hu2ment- i4 4i- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5i4 -54 -54 -54 -54 i1g2n -5i1g2n i2g3n -5i2g3n i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- i1n1a2 -5i1n1a2 ina1ni -5ina1ni in2a3nit -5in2a3nit inau1gu -5inau1gu in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- i1n1e2 i1n12 -5i1n1e2 -5i1n12 inef1fa -5inef1fa in2effab -5in2effab in1lu -5in1lu in23luc1ta -5in23luc1ta in1na -5in1na in23nar1ra -5in23nar1ra in2ept -5in2ept in2er -5in2er in2exo1ra -5in2exo1ra i1n1i2 -5i1n1i2 ini1mi -5ini1mi in2i3mi1ti -5in2i3mi1ti in2i3q -5in2i3q in2i3t -5in2i3t inno3cent- i1n1o2 -5i1n1o2 ino1cu -5ino1cu in2o3cul -5in2o3cul in2ond -5in2ond inso3lent- ins1ta -5ins1ta in1s2tab -5in1s2tab in1te -5in1te intelli3gent- inte4r3 -5inte4r3 inte1ra2 -5inte1ra2 inte1re2 inte1r2 -5inte1re2 -5inte1r2 inte1ri2 -5inte1ri2 inte1ro2 -5inte1ro2 inters2 -5inters2 inte1ru2 -5inte1ru2 inti2ment- i1n1u2 -5i1n1u2 in2uit -5in2uit in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1s -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mcon3tent- -5m1go -5m2g1oh 4mes- -5m2sa -5m3san -5m1se -5m2s1es -5m2s1i -5m1su -5m2s1u2s -5m1ta -5m1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono12 -5mono1i2 -5mono12d -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 n4 4n- .4 '4 4 4- -5n4 -54 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- o4 4o- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- -5o4 -54 -54 -54 -54 -54 .4 '4 4 4- -54 2ment- om2ment- omnipo3tent- on1gu -5on1gu -on3guent- .on3guent- 'on3guent- on3guent- on3guent. -5on3guent. opu3lent- or2ment- oua1ou -5oua1ou o1vi -5o1vi ovi1s2c -5ovi1s2c .p4 'p4 p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2m -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1h -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3h -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r12 -5p1ri -5pe1r1i2 -5pri1os -5pri1s2 -5pri2s3s -5pri2s3ta -5pri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1r -5pr1a2 -5pr2a3la -5pr2au -5pr1e2 -5pr12 prmi3nent- -5pr1i2 2p2rent- -5pr1o2 4p4res- -5pr1s2 pr3sent- -5pr1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro12 promi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2c -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 r4 4r- -5r4 rai3ment- ra2ment- 4re- -5r1a2 -5r2a3le -5ra1li -5r2a3lis -5r2a3lit -5r2aux -5r1e2 -5r12 -5r2el -5r2er -5r2r r3gent- -5r1i2 -5r2i3fi re3lent- reli2ment- rma3nent- 2rent- -5r1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1t -5re3s4tn -5re3s4tr -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty rsur3gent- rti3cent- -5r1t2r -5rt1ro -5rtro1a2 -5ru2 -5r2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 s4 4s- .4 '4 4 4- -5s4 -54 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b12 -5su3b23r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r12 -5su3r2eau -5su3r2ell surmi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .4 '4 4 4- -54 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- u4 4u- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5u4 -54 -54 -54 -54 .v4 'v4 v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 x4 4x- -5x4 2xent- y4 4y- .4 '4 4 4- .4 '4 4 4- -5y4 -54 -54 .z4 'z4 z4 4z- .4 '4 4 4- -5z4 -54 4ze- 2zent- 4zes- |
Added gc_lang/fr/dictionnaire/genfrdic.py version [d35ae27b29].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 |
#!python3
__author__ = "Olivier R."
__license__ = "MPL 2"
import os
import sys
import time
import re
import collections
import zipfile
import math
import argparse
from enum import Enum
from distutils import dir_util
from distutils import file_util
from string import Template
import metagraphe
import metaphone2
# Dictionnaire des caractères pour le tri naturel.
# Ordre souhaitable, mais pose problème pour la recherche, car engendre des égalités de lemmes différents.
# Il faut donc travailler sur un dictionnaire trié *numériquement* et le sauvegarder selon le tri *naturel*
CHARMAP = str.maketrans({ 'à': 'a', 'À': 'A', 'â': 'a', 'Â': 'A', 'ä': 'a', 'Ä': 'A', 'å': 'a', 'Å': 'A', 'ā': 'a', 'Ā': 'A',
'ç': 'c', 'Ç': 'C',
'é': 'e', 'É': 'E', 'è': 'e', 'È': 'E', 'ê': 'e', 'Ê': 'E', 'ë': 'e', 'Ë': 'E', 'ē': 'e', 'Ē': 'E',
'î': 'i', 'Î': 'I', 'ï': 'i', 'Ï': 'I', 'ī': 'i', 'Ī': 'I',
'ñ': 'n',
'ô': 'o', 'Ô': 'O', 'ö': 'o', 'Ö': 'O', 'ō': 'o', 'Ō': 'O',
'ù': 'u', 'Ù': 'U', 'û': 'u', 'Û': 'U', 'ü': 'u', 'Ü': 'U', 'ū': 'u', 'Ū': 'U',
'ÿ': 'y',
'æ': 'ae', 'Æ': 'AE', 'œ':'oe', 'Œ': 'OE',
'-': None, '.': None, "'": None })
# Les dictionnaires
dSUBDIC = { '*': 'Commun',
'R': 'Réforme1990',
'M': 'Moderne',
'C': 'Classique',
'A': 'Annexe',
'P': 'Multimots',
'X': 'Contributeurs' }
dMODERNE = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “MODERNE”',
'shortname': '“Moderne”',
'asciiName': 'fr-moderne',
'mozAsciiName': 'fr-FR-modern',
'subDicts': '*MX',
'mozId': 'fr-dicollecte-moderne',
'description': "Dictionnaire français “Moderne”" }
dCLASSIQUE = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE”',
'shortname': '“Classique”',
'asciiName': 'fr-classique',
'mozAsciiName': 'fr-FR-classic',
'subDicts': '*MCX',
'mozId': 'fr-dicollecte-classique',
'description': "Dictionnaire français “Classique”" }
dCLASSIQUEX = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE ÉTENDU”',
'shortname': '“Classique étendu”',
'asciiName': 'fr-classique-ext',
'mozAsciiName': 'fr-FR-classic-ext',
'subDicts': '*MCX',
'mozId': 'fr-dicollecte-classique-ext',
'description': "Dictionnaire français “Classique étendu”" }
dREFORME1990 = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “RÉFORME 1990”',
'shortname': '“Réforme 1990”',
'asciiName': 'fr-reforme1990',
'mozAsciiName': 'fr-FR-reform',
'subDicts': '*RX',
'mozId': 'fr-dicollecte-reforme1990',
'description': "Dictionnaire français “Réforme 1990”" }
dTOUTESVAR = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “TOUTES VARIANTES”',
'shortname': '“Toutes variantes”',
'asciiName': 'fr-toutesvariantes',
'mozAsciiName': 'fr-FR-classic-reform',
'subDicts': '*MCRAX',
'mozId': 'fr-dicollecte-toutesvariantes',
'description': "Dictionnaire français “Toutes variantes”" }
dMOZEXT = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS',
'mozId': 'fr-dicollecte',
'description': "Dictionnaire orthographique de la langue française" }
BUILD_PATH = '_build'
PREFIX_DICT_PATH = 'hunspell-french-dictionaries-v'
EXT_PREFIX_OOO = 'lo-oo-ressources-linguistiques-fr-v'
EXT_PREFIX_MOZ = 'moz-hunspell-fr-dicollecte-v'
LEX_PREFIX = 'lexique-dicollecte-fr-v'
STATS_NAME = 'statistiques-v'
MPLHEADER = "# This Source Code Form is subject to the terms of the Mozilla Public\n" + \
"# License, v. 2.0. If a copy of the MPL was not distributed with this\n" + \
"# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n"
def echo (obj, sep=' ', end='\n', file=sys.stdout, flush=False):
""" Print for Windows to avoid Python crashes.
Encoding depends on Windows locale. No useful standard.
Always returns True (useful for debugging)."""
if sys.platform != "win32":
print(obj, sep=sep, end=end, file=file, flush=flush)
return True
try:
print(str(obj).replace("œ", "oe"), sep=sep, end=end, file=file, flush=flush)
except:
try:
print(str(obj).translate(CHARMAP), sep=sep, end=end, file=file, flush=flush)
except:
print(str(obj).encode('ascii', 'replace').decode('ascii', 'replace'), sep=sep, end=end, file=file, flush=flush)
return True
def makeLongFlags (sFlags):
"renvoie la liste des drapeaux, créés à partir de la chaîne"
if len(sFlags) % 2 != 0:
echo(">| erreur: %s" % sFlags)
sFlags = sFlags + ' '
return [ sFlags[i:i+2] for i in range(0, len(sFlags), 2) ]
def makeNumFlags (sFlags):
return sFlags.split(',')
def makeOneCharFlags (sFlags):
return list(sFlags)
def fieldToHunspell (sFieldName, sFieldValue):
"renvoie le texte pour Hunspell de la valeur d’un champ"
sSep = ' ' + sFieldName + ':'
return sSep + sFieldValue.replace(' ', sSep)
def getListNgrams (sWord, n):
return [ sWord[i:i+n] for i in range(len(sWord)-n-1) ]
def createZipFiles (spSrc, spDst, zipFileName):
echo(' > Zip [ {} ]'.format(spSrc))
def _addDir (_spSrc, _subPath, _zipFile):
for _fileToZip in os.listdir(_spSrc):
if os.path.isdir(_spSrc+'/'+_fileToZip):
_addDir(_spSrc+'/'+_fileToZip, _fileToZip, _zipFile)
else:
zipFile.write(_spSrc+'/'+_fileToZip, _subPath+'/'+_fileToZip)
#
zipFile = zipfile.ZipFile(spDst+'/'+zipFileName, 'w', zipfile.ZIP_DEFLATED)
for fileToZip in os.listdir(spSrc):
if os.path.isdir(spSrc+'/'+fileToZip):
_addDir(spSrc+'/'+fileToZip, fileToZip, zipFileName)
else:
zipFile.write(spSrc+'/'+fileToZip, fileToZip)
zipFile.close()
def copyTemplate (spSrc, spDst, spf, dVars):
if spf.endswith('xml') or spf.endswith('rdf'):
for key in dVars:
dVars[key] = dVars[key].replace('&', '&')
xTemplate = Template( open(spSrc+'/'+spf, 'r', encoding='utf-8').read() )
open(spDst+'/'+spf, 'w', encoding='utf-8', newline="\n").write(xTemplate.safe_substitute(dVars))
def getIfq (f):
"renvoie l’indice de fréquence (un caractère)"
if f == 0: return '0'
if f < 0.00000001: return '1'
if f < 0.0000001: return '2'
if f < 0.000001: return '3'
if f < 0.00001: return '4'
if f < 0.0001: return '5'
if f < 0.001: return '6'
if f < 0.01: return '7'
if f < 0.1: return '8'
return '9'
def getVerbMultiMorph (s):
"renvoie la liste des morphologies fusionnées"
lTag = s.split()
lRes = []
for n, sTag in enumerate(lTag, 1):
if not sTag[0].isdigit():
sMorph = sTag
for sTag2 in lTag[n:]:
if sTag2[0].isdigit():
lRes.append(sMorph + " " + sTag2)
else:
break
return lRes
def readfile (spf):
"generator: returns file line by line"
if os.path.isfile(spf):
with open(spf, "r", encoding="utf-8") as hSrc:
for sLine in hSrc:
yield sLine
else:
print("# Error: file not found.")
class Dictionnaire:
def __init__ (self, version, name):
# Dictionary
self.sName = name
self.lEntry = []
self.nEntry = 0
self.sVersion = version
# Affixes
self.sSettings = '' # enregistre tout avant la ligne # END
self.dFlags = collections.OrderedDict()
self.bShortenTags = False
self.dAM = collections.OrderedDict() # étiquettes morphologiques
self.dAF = collections.OrderedDict() # étiquettes drapeaux
# Flexions
self.lFlexions = [] # liste des flexions avec lemme, morphologie et occurrences
self.lStatsLex = []
self.nTotOccurRecognizedWords = 0
self.aFlexions = None
def readDictionary (self, spf):
"Lecture du dictionnaire"
echo('Dictionnaire << [ {} ]'.format(spf), end=' ')
for sLine in readfile(spf):
sLine = sLine.strip()
if not sLine.isdigit() and not sLine.startswith("#"):
self.lEntry.append(Entree(sLine))
self.nEntry = len(self.lEntry)
echo('- {} entrées'.format(self.nEntry))
def readAffixes (self, spf):
"Lecture du fichier des affixes"
echo("Dictionnaire << [ {} ]".format(spf))
bSettings = True
for sLine in readfile(spf):
if sLine.startswith("# END"):
bSettings = False
elif sLine.startswith("#"):
pass
elif sLine.startswith(("PFX", "SFX")):
sLine = re.sub(" *#.*$", "", sLine.rstrip(" \n"))
lElem = sLine.split()
if len(lElem) >= 4:
if lElem[1] not in self.dFlags:
# nouveau drapeau
oFlag = Flag(lElem[0], lElem[1], lElem[2])
self.dFlags[lElem[1]] = oFlag
else:
# nouvelle règle
oFlag.addAffixRule(sLine)
else:
echo(" # erreur de lecture: {}".format(sLine))
elif bSettings:
# toutes les lignes non-commentaires avant # END sont enregistrées dans self.sSettings
self.sSettings += sLine
def defineAbreviatedTags (self, nMode, spDst):
"Abrégé des étiquettes grammaticales et des drapeaux"
echo(" * Dictionnaire - compression Hunspell... ")
self.bShortenTags = True
dAF = {}
dAM = {}
for oFlag in self.dFlags.values():
for oRule in oFlag.lRules:
if oRule.flags:
dAF[oRule.flags] = dAF.get(oRule.flags, 0) + 1
sMorph = oRule.getMorph(nMode).strip()
if sMorph:
dAM[sMorph] = dAM.get(sMorph, 0) + 1
for oEntry in self.lEntry:
if oEntry.flags:
dAF[oEntry.flags] = dAF.get(oEntry.flags, 0) + 1
sMorph = oEntry.getMorph(nMode).strip()
if sMorph:
dAM[sMorph] = dAM.get(sMorph, 0) + 1
lAF = sorted(dAF.items(), key = lambda x: (x[1], x[0]), reverse=True)
lAM = sorted(dAM.items(), key = lambda x: (x[1], x[0]), reverse=True)
with open(spDst, 'a', encoding='utf-8', newline="\n") as hDst:
hDst.write("\n\nDrapeaux :\n")
for nAF, elem in enumerate(lAF, 1):
self.dAF[elem[0]] = str(nAF)
hDst.write(" > {0[1]:>8} : {0[0]}\n".format(elem))
hDst.write("\n\nMorphologies :\n")
for nAM, elem in enumerate(lAM, 1):
self.dAM[elem[0]] = str(nAM)
hDst.write(" > {0[1]:>8} : {0[0]}\n".format(elem))
def writeDictionary (self, spDst, dTplVars, nMode, bSimplified):
"Écrire le fichier dictionnaire (.dic)"
echo(' * Dictionnaire >> [ {}.dic ] ({})'.format(dTplVars['asciiName'], dTplVars['subDicts']))
nEntry = 0
for oEntry in self.lEntry:
if oEntry.di in dTplVars['subDicts']:
nEntry += 1
with open(spDst+'/'+dTplVars['asciiName']+'.dic', 'w', encoding='utf-8', newline="\n") as hDst:
hDst.write(str(nEntry)+"\n")
for oEntry in self.lEntry:
if oEntry.di in dTplVars['subDicts']:
hDst.write(oEntry.getEntryLine(self, nMode, bSimplified))
def writeAffixes (self, spDst, dTplVars, nMode, bSimplified):
"Écrire le fichier des affixes (.aff)"
echo(' * Dictionnaire >> [ {}.aff ]'.format(dTplVars['asciiName']))
info = "# This Source Code Form is subject to the terms of the Mozilla Public\n" + \
"# License, v. 2.0. If a copy of the MPL was not distributed with this\n" + \
"# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n" + \
"# AFFIXES DU {} v{}\n".format(dTplVars['name'], self.sVersion) + \
"# par Olivier R. -- licence MPL 2.0\n" + \
"# Généré le " + time.strftime("%d-%m-%Y à %H:%M") + "\n" \
"# Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/\n\n"
with open(spDst+'/'+dTplVars['asciiName']+'.aff', 'w', encoding='utf-8', newline="\n") as hDst:
hDst.write(info)
hDst.write(self.sSettings + "\n")
if self.bShortenTags:
hDst.write("AM {}\n".format(len(self.dAM)))
for item in self.dAM.items():
hDst.write("AM {}\n".format(item[0]))
hDst.write("\n")
hDst.write("AF {}\n".format(len(self.dAF)))
for item in self.dAF.items():
hDst.write("AF {}\n".format(item[0]))
hDst.write("\n")
for oFlag in self.dFlags.values():
hDst.write(oFlag.getFlag(dTplVars['subDicts'], self, nMode, bSimplified))
def sortEntriesNatural (self):
echo(' * Dictionnaire - Tri naturel des entrées...')
self.lEntry = sorted(self.lEntry, key=Entree.keyTriNat)
def sortEntriesNumerical (self):
echo(' * Dictionnaire - Tri numérique des entrées...')
self.lEntry = sorted(self.lEntry, key=Entree.keyTriNum)
def sortLexiconByFlexion (self):
echo(' * Dictionnaire - tri du lexique (par flexion)...')
self.lFlexions = sorted(self.lFlexions, key=Flexion.keyFlexion)
def sortLexiconByFreq (self):
echo(' * Dictionnaire - tri du lexique (par fréquence)...')
self.lFlexions = sorted(self.lFlexions, key=Flexion.keyFreq)
def sortLexiconByIdx (self):
echo(' * Dictionnaire - tri du lexique (par index)...')
self.lFlexions = sorted(self.lFlexions, key=Flexion.keyIdx)
def checkEntries (self):
echo(' * Dictionnaire - contrôle des entrées...')
for e in self.lEntry:
e.check()
def generateFlexions (self):
echo(' * Lexique - genèse des formes fléchies...')
for oEntry in self.lEntry:
oEntry.generateFlexions(self.dFlags)
self.lFlexions.extend(oEntry.lFlexions)
# Count flexions in multiple entries
d = {}
for oFlex in self.lFlexions:
if oFlex.sFlexion in d:
if oFlex.oEntry not in d[oFlex.sFlexion]:
d[oFlex.sFlexion].append(oFlex.oEntry)
else:
d[oFlex.sFlexion] = [oFlex.oEntry]
for oFlex in self.lFlexions:
oFlex.lMulti = list(d[oFlex.sFlexion])
oFlex.nMulti = len(oFlex.lMulti)
for oFlex in self.lFlexions:
oFlex.lMulti.remove(oFlex.oEntry)
oFlex.nMulti -= 1
def setTagsFrom (self, other):
echo(' * Dictionnaire - copie des tags...')
for i in range(self.nEntry):
for oEntry in other.lEntry:
if self.lEntry[i].lemma == oEntry.lemma and self.lEntry[i].flags == oEntry.flags:
self.lEntry[i].setTagsFrom(oEntry)
def calculateStats (self, oStatsLex, spfDst):
echo(" * Dictionnaire - calculs...")
with open(spfDst, 'w', encoding='utf-8', newline="\n") as hDst:
# Occurrences brutes des formes fléchies
echo(" comptage des occurrences...")
hDst.write(oStatsLex.getInfo())
for oFlex in self.lFlexions:
oFlex.setOccur(oStatsLex.getFlexionOccur(oFlex.sFlexion))
self.nTotOccurRecognizedWords = 0
for oFlex in self.lFlexions:
oFlex.calcOccur()
self.nTotOccurRecognizedWords += oFlex.nOccur
# Report des occurrences
echo(" report des occurrences des formes fléchies multiples...")
hDst.write("Report des occurrences des formes fléchies multiples :\n")
hDst.write(" Légende :\n")
hDst.write(" >> le nombre d’occurrences de la flexion est ramené à la moyenne.\n")
hDst.write(" +> le nombre d’occurrences de la flexion est augmenté avec le surplus d’occurrences des flexions ramenées à la moyenne.\n")
hDst.write(" %> le nombre d’occurrences de la flexion est pondéré avec le poids de la moyenne de l’entrée.\n\n")
for oEntry in self.lEntry:
oEntry.calcOccurFromFlexions()
oEntry.calcAverageKnownOccurrence()
oEntry.solveOccurMultipleFlexions(hDst, oStatsLex)
oEntry.calcOccurFromFlexions()
# Fréquences
echo(" calcul des fréquences et indices de fréquence...")
for oFlex in self.lFlexions:
oFlex.calcFreq(self.nTotOccurRecognizedWords)
for oEntry in self.lEntry:
oEntry.calcFreq(self.nTotOccurRecognizedWords)
# Entrées, statistiques
echo(" statistiques...")
hDst.write("\n\nNatures grammaticales :\n")
d = {}
for oEntry in self.lEntry:
po = re.sub("(?<=v[0-3])[itnpqrmaezx_]+", "", oEntry.po)
d[po] = d.get(po, 0) + 1
for e in sorted(d.items(), key = lambda x: (x[1], x[0]), reverse=True):
hDst.write(" * {0[1]:<15} : {0[0]}\n".format(e))
hDst.write("\n\nVentilation des entrées par indice de fréquence :\n")
d1 = {}
d2 = {}
for oEntry in self.lEntry:
d1[oEntry.fq] = d1.get(oEntry.fq, 0) + 1
d2[oEntry.fq] = d2.get(oEntry.fq, 0) + oEntry.fFreq
for k in sorted(d1.keys()):
hDst.write(" * {} : {} entrées ({:.2f} %) → {:.9f} %\n".format(k, d1[k], (d1[k]*100)/self.nEntry, d2[k]))
hDst.write("\n\nRépartition des entrées par sous-dictionnaire :\n")
d = {}
for oEntry in self.lEntry:
d[oEntry.di] = d.get(oEntry.di, 0) + 1
for sKey, nVal in d.items():
hDst.write(" * {0:<15} : {1} entrées ({2:.2f} %)\n".format(dSUBDIC[sKey], nVal, (nVal*100)/self.nEntry))
# Occurrences des lettres
echo(" occurrences des lettres...")
d = {}
for oFlex in self.lFlexions:
for c in oFlex.sFlexion:
d[c] = d.get(c, 0) + oFlex.nOccur
nTot = 0
for k in d:
nTot += d[k]
hDst.write("\n\nOccurrences des lettres dans le corpus :\n")
for sKey, nVal in sorted(d.items(), key = lambda x: (x[1], x[0]), reverse=True):
hDst.write(" {} : {:>16,.0f} / {:.8f} %\n".format(sKey, nVal, nVal*100/nTot))
# Mots par nombre de lettres
echo(" Nombre de lettres dans les mots...")
if not self.aFlexions:
self.aFlexions = set([e.sFlexion for e in self.lFlexions])
d = {}
for sFlex in self.aFlexions:
n = len(sFlex)
d[n] = d.get(n, 0) + 1
hDst.write("\n\nNombre de lettres dans les graphies :\n")
for sKey, nVal in sorted(d.items()):
hDst.write(" {:>2} lettres : {:>8} graphies\n".format(sKey, nVal))
hDst.write("\n\nNombre de formes fléchies : {}\n".format(len(self.lFlexions)))
hDst.write("\n\nNombre de graphies : {}\n".format(len(self.aFlexions)))
def calcMetagraphe (self):
echo(" * Lexique - Metagraphe")
for oFlex in self.lFlexions:
oFlex.calcMetagraphe()
def calcMetaphone2 (self):
echo(" * Lexique - Metaphone 2")
for oFlex in self.lFlexions:
oFlex.calcMetaphone2()
def createNgrams (self, spDest, n):
echo(" * Lexique - Ngrams " + str(n))
if n < 2:
echo("erreur: n = " + str(n))
return
dOccur = {} # ngram:n
dRefW = {} # ngram:set(idx)
dWords = {} # word:idx
for oFlex in self.lFlexions:
for sNgram in getListNgrams(oFlex.sFlexion, n):
# words list
if oFlex.sFlexion not in dWords:
dWords[oFlex.sFlexion] = len(dWords)
idx = dWords[oFlex.sFlexion]
# ngram occurrence
dOccur[sNgram] = dOccur.get(sNgram, 0) + 1
if sNgram not in dRefW:
dRefW[sNgram] = set()
# ngram word reference
dRefW[sNgram].add(idx)
with open(spDest+"/ngrams-%d.txt"%n, 'w', encoding='utf-8', newline="\n") as hDst:
for key, value in dWords.items():
hDst.write("%d: %s\n"% (value, key))
for key, value in dOccur.items():
if value > 1:
hDst.write("%s: %d -- "% (key, value))
hDst.write(str(dRefW[key]))
hDst.write("\n")
def writeLexicon (self, spfDst, version, oStatsLex):
echo(' * Lexique >> [ {} ] '.format(spfDst))
with open(spfDst, 'w', encoding='utf-8', newline="\n") as hDst:
hDst.write(MPLHEADER)
hDst.write("# Lexique des formes fléchies du français - Dicollecte v{}\n# Licence : MPL v2.0\n\n".format(version))
hDst.write(oStatsLex.getInfo())
hDst.write(Flexion.header(oStatsLex))
for oFlex in self.lFlexions:
hDst.write(oFlex.__str__(oStatsLex))
def writeGrammarCheckerLexicon (self, spfDst, version):
echo(' * Lexique simplifié >> [ {} ] '.format(spfDst))
with open(spfDst[:-4]+".lex", 'w', encoding='utf-8', newline="\n") as hDst:
hDst.write(MPLHEADER)
hDst.write("# Lexique simplifié pour Grammalecte - Dicollecte v{}\n# Licence : MPL v2.0\n\n".format(version))
hDst.write(Flexion.simpleHeader())
for oFlex in self.lFlexions:
hDst.write(oFlex.getGrammarCheckerRepr())
def createFiles (self, spDst, lDictVars, nMode, bSimplified):
sDicName = PREFIX_DICT_PATH + self.sVersion
spDic = spDst + '/' + sDicName
dir_util.mkpath(spDic)
for dVars in lDictVars:
# template vars
dVars['version'] = self.sVersion
# Dictionaries files (.dic) (.aff)
self.writeAffixes(spDic, dVars, nMode, bSimplified)
self.writeDictionary(spDic, dVars, nMode, bSimplified)
copyTemplate('orthographe', spDic, 'README_dict_fr.txt', dVars)
createZipFiles(spDic, spDst, sDicName + '.zip')
def createLibreOfficeExtension (self, spBuild, dTplVars, lDictVars, spGL):
# LibreOffice extension
echo(" * Dictionnaire >> extension pour LibreOffice")
dTplVars['version'] = self.sVersion
sExtensionName = EXT_PREFIX_OOO + self.sVersion
spExt = spBuild + '/' + sExtensionName
dir_util.mkpath(spExt+'/META-INF')
dir_util.mkpath(spExt+'/ui')
dir_util.mkpath(spExt+'/dictionaries')
dir_util.mkpath(spExt+'/pythonpath')
file_util.copy_file('_templates/ooo/manifest.xml', spExt+'/META-INF')
file_util.copy_file('_templates/ooo/DictionarySwitcher.py', spExt)
file_util.copy_file('_templates/ooo/ds_strings.py', spExt+'/pythonpath')
file_util.copy_file('_templates/ooo/addons.xcu', spExt+'/ui')
file_util.copy_file('_templates/ooo/french_flag.png', spExt)
file_util.copy_file('_templates/ooo/french_flag_16.bmp', spExt+'/ui')
copyTemplate('_templates/ooo', spExt, 'description.xml', dTplVars)
copyTemplate('_templates/ooo', spExt, 'dictionaries.xcu', dTplVars)
#file_util.copy_file('_templates/ooo/dictionaries.xcu.tpl.xml', spExt)
copyTemplate('_templates/ooo', spExt, 'package-description.txt', dTplVars)
for dVars in lDictVars:
dicPath = spBuild + '/' + PREFIX_DICT_PATH + self.sVersion
file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.dic', spExt+'/dictionaries/'+dVars['asciiName']+'.dic')
file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.aff', spExt+'/dictionaries/'+dVars['asciiName']+'.aff')
copyTemplate('orthographe', spExt+'/dictionaries', 'README_dict_fr.txt', dTplVars)
# thesaurus
file_util.copy_file('thesaurus/thes_fr.dat', spExt+'/dictionaries')
file_util.copy_file('thesaurus/thes_fr.idx', spExt+'/dictionaries')
file_util.copy_file('thesaurus/README_thes_fr.txt', spExt+'/dictionaries')
# hyphenation
file_util.copy_file('césures/hyph_fr.dic', spExt+'/dictionaries')
file_util.copy_file('césures/hyph_fr.iso8859-1.dic', spExt+'/dictionaries')
file_util.copy_file('césures/frhyph.tex', spExt+'/dictionaries')
file_util.copy_file('césures/hyph-fr.tex', spExt+'/dictionaries')
file_util.copy_file('césures/README_hyph_fr-3.0.txt', spExt+'/dictionaries')
file_util.copy_file('césures/README_hyph_fr-2.9.txt', spExt+'/dictionaries')
# zip
createZipFiles(spExt, spBuild, sExtensionName + '.oxt')
# copy to Grammalecte Project
if spGL:
echo(" extension copiée dans Grammalecte...")
dir_util.copy_tree(spExt+'/dictionaries', spGL)
def createMozillaExtensions (self, spBuild, dTplVars, lDictVars, spDestGL):
# Mozilla extension 1
echo(" * Dictionnaire >> extension pour Mozilla")
dTplVars['version'] = self.sVersion
sExtensionName = EXT_PREFIX_MOZ + self.sVersion
spExt = spBuild + '/' + sExtensionName
dir_util.mkpath(spExt+'/dictionaries')
copyTemplate('_templates/moz', spExt, 'install.rdf', dTplVars)
spDict = spBuild + '/' + PREFIX_DICT_PATH + self.sVersion
file_util.copy_file(spDict+'/fr-classique.dic', spExt+'/dictionaries/fr-classic.dic')
file_util.copy_file(spDict+'/fr-classique.aff', spExt+'/dictionaries/fr-classic.aff')
copyTemplate('orthographe', spExt, 'README_dict_fr.txt', dTplVars)
createZipFiles(spExt, spBuild, sExtensionName + '.xpi')
# Grammalecte
echo(" * Dictionnaire >> copie des dicos dans Grammalecte")
for dVars in lDictVars:
file_util.copy_file(spDict+'/'+dVars['asciiName']+'.dic', spDestGL+'/'+dVars['mozAsciiName']+"/"+dVars['mozAsciiName']+'.dic')
file_util.copy_file(spDict+'/'+dVars['asciiName']+'.aff', spDestGL+'/'+dVars['mozAsciiName']+"/"+dVars['mozAsciiName']+'.aff')
def createFileIfqForDB (self, spBuild):
echo(" * Dictionnaire >> indices de fréquence pour la DB...")
with open(spBuild+'/dictIdxIfq-'+self.sVersion+'.diff.txt', 'w', encoding='utf-8', newline="\n") as hDiff, \
open(spBuild+'/dictIdxIfq-'+self.sVersion+'.notes.txt', 'w', encoding='utf-8', newline="\n") as hNotes:
for oEntry in self.lEntry:
if oEntry.fq != oEntry.oldFq:
hDiff.write("{0.iD}\t{0.fq}\n".format(oEntry))
hNotes.write("{0.lemma}/{0.flags}\t{0.oldFq} > {0.fq}\n".format(oEntry))
def createLexiconPackages (self, spBuild, version, oStatsLex, spLexGL):
sLexName = LEX_PREFIX + version
spLex = spBuild + '/' + sLexName
dir_util.mkpath(spLex)
# write Dicollecte lexicon
self.sortLexiconByFreq()
self.writeLexicon(spLex + '/' + sLexName + '.txt', version, oStatsLex)
self.writeGrammarCheckerLexicon(spBuild + '/' + sLexName + '.lex', version)
copyTemplate('lexique', spLex, 'README_lexique.txt', {'version': version})
# zip
createZipFiles(spLex, spBuild, sLexName + '.zip')
# copy GC lexicon to Grammalecte
file_util.copy_file(spBuild + '/' + sLexName + '.lex', spLexGL + '/French.lex')
file_util.copy_file('lexique/French.tagset.txt', spLexGL)
def createDictConj (self, spBuild, spCopy):
echo(" * Dictionnaire >> fichier de conjugaison...")
with open(spBuild+'/dictConj.txt', 'w', encoding='utf-8', newline="\n") as hDst:
for oEntry in self.lEntry:
if oEntry.po.startswith("v"):
hDst.write(oEntry.getConjugation())
echo(" Fichier de conjugaison copié dans Grammalecte...")
file_util.copy_file(spBuild+'/dictConj.txt', spCopy)
def createDictDecl (self, spBuild, spCopy):
echo(" * Dictionnaire >> fichier de déclinaison...")
with open(spBuild+'/dictDecl.txt', 'w', encoding='utf-8', newline="\n") as hDst:
for oEntry in self.lEntry:
if re.match("[SXFWIA]", oEntry.flags) and (oEntry.po.startswith("nom") or oEntry.po.startswith("adj")):
hDst.write(oEntry.getDeclination())
echo(" Fichier de déclinaison copié dans Grammalecte...")
file_util.copy_file(spBuild+'/dictDecl.txt', spCopy)
def generateSpellVariants (self, nReq, spBuild):
if nReq < 1: nReq = 1
if nReq > 2: nReq = 2
echo(" * Lexique >> variantes par suppression... n = " + str(nReq))
with open(spBuild+'/dictSpellVariants-'+str(nReq)+'.txt', 'w', encoding='utf-8', newline="\n") as hDst:
for oFlex in frozenset(self.lFlexions):
hDst.write(oFlex.sFlexion+"\t_\t_\n")
if len(oFlex.sFlexion) <= 2:
n = 0
elif len(oFlex.sFlexion) <= 5:
n = 1
else:
n = nReq
#lTup = self._generatePhonetVariants(oFlex.sFlexion)
lTup = self._generateDeleteVariants(oFlex.sFlexion, oFlex.sFlexion, n)
for t in lTup:
sTag = t[1] if "\t" in t[1] else t[1]+"\t_"
hDst.write(t[0]+"\t"+sTag+"\n")
_lTupPhonet = [ ("ph", "f"), ("qu", "k"), ("ss", "c"), ("ss", "ç"), ("ct", "x"),
("oe", "œ"), ("ae", "æ"), ("ei", "é"), ("ai", "é"), ("au", "o"), ("eau", "o"),
]
def _generatePhonetVariants (self, s):
l = []
for torep, rep in self._lTupPhonet():
for m in torep.finditer(s):
l.append( (s[:m.start(0)] + rep + s[m.end(0):], str(m.start(0))+":"+str(m.start(0)+len(rep))+">"+torep) )
return l
def _generateDeleteVariants (self, sWord0, sWordCur, n):
"renvoie une liste de tuples : (forme dégradée de sWord, code de genèse de sWord)"
# caution: recursive function
if n == 0:
return []
lTup = []
for i in range(len(sWordCur)):
sNew = sWordCur[0:i]+sWordCur[i+1:]
lTup.append( ( sNew, self._generateAddCode(sWord0, sNew) ) )
lTup += self._generateDeleteVariants(sWord0, sNew, n-1)
return lTup
def _generateAddCode (self, sWord, sCrippled):
"returns addCode to generate sWord from sCrippled"
sAdd = ""
for i in range(len(sWord)):
if sWord[i] != sCrippled[i:i+1]:
sCrippled = sCrippled[:i] + sWord[i] + sCrippled[i:]
if sAdd:
sAdd += "\t"
sAdd += str(i)+"+"+sWord[i]
return sAdd if sAdd else "0"
class Entree:
def __init__ (self, sLine):
self.lemma = ''
self.flags = ''
# champs morphologiques Hunspell
self.po = ''
self.iz = ''
self.ds = ''
self.ts = ''
self.ip = ''
self.dp = ''
self.tp = ''
self.sp = ''
self.pa = ''
self.st = ''
self.al = ''
self.ph = ''
# champs annexes
self.lx = ''
self.se = ''
self.et = ''
self.di = '*'
self.fq = ''
self.iD = '0'
# autres
self.comment = ''
self.err = ''
self.nFlexions = 0
self.lFlexions = []
self.sRadical = ''
self.nOccur = 0
self.nAKO = -1 # Average known occurrences
self.fFreq = 0
self.oldFq = ''
sLine = sLine.rstrip(" \n")
# commentaire
if '#' in sLine:
sLine, comment = sLine.split('#', 1)
self.comment = comment.strip()
# éléments de la ligne
elems = sLine.split()
nElems = len(elems)
# lemme et drapeaux
firstElems = elems[0].split('/')
self.lemma = firstElems[0]
self.flags = firstElems[1] if len(firstElems) > 1 else ''
# morph
for i in range(1, nElems):
if len(elems[i]) > 3 and elems[i][2] == ':':
fields = elems[i].split(':', 1)
if fields[0] == 'po':
self.po = fields[1] if self.po == '' else self.po + ' ' + fields[1]
elif fields[0] == 'is':
self.iz = fields[1] if self.iz == '' else self.iz + ' ' + fields[1]
elif fields[0] == 'ds':
self.ds = fields[1] if self.ds == '' else self.ds + ' ' + fields[1]
elif fields[0] == 'ts':
self.ts = fields[1] if self.ts == '' else self.ts + ' ' + fields[1]
elif fields[0] == 'ip':
self.ip = fields[1] if self.ip == '' else self.ip + ' ' + fields[1]
elif fields[0] == 'dp':
self.dp = fields[1] if self.dp == '' else self.dp + ' ' + fields[1]
elif fields[0] == 'tp':
self.tp = fields[1] if self.tp == '' else self.tp + ' ' + fields[1]
elif fields[0] == 'sp':
self.sp = fields[1] if self.sp == '' else self.sp + ' ' + fields[1]
elif fields[0] == 'pa':
self.pa = fields[1] if self.pa == '' else self.pa + ' ' + fields[1]
elif fields[0] == 'st':
self.st = fields[1] if self.st == '' else self.st + ' ' + fields[1]
elif fields[0] == 'al':
self.al = fields[1] if self.al == '' else self.al + ' ' + fields[1]
elif fields[0] == 'ph':
self.ph = fields[1] if self.ph == '' else self.ph + ' ' + fields[1]
elif fields[0] == 'lx':
self.lx = fields[1] if self.lx == '' else self.lx + ' ' + fields[1]
elif fields[0] == 'se':
self.se = fields[1] if self.se == '' else self.se + ' ' + fields[1]
elif fields[0] == 'et':
self.et = fields[1] if self.et == '' else self.et + ' ' + fields[1]
elif fields[0] == 'di':
self.di = fields[1]
elif fields[0] == 'fq':
self.fq = fields[1]
elif fields[0] == 'id':
self.iD = fields[1]
else:
echo(' ## Champ inconnu: {} dans {}/{}'.format(fields[0], self.lemma, self.flags))
else:
self.err = self.err + elems[i]
if self.err:
echo("\n## Erreur dans le dictionnaire : {}".format(self.err))
echo(" dans : " + self.lemma)
def __str__ (self):
return "{0.lemma}/{0.flags} {1}".format(self, self.getMorph(2))
def display (self):
echo(self.__str__())
def check (self):
sErr = ''
if self.lemma == '':
sErr += 'lemme vide'
if not re.match(r"[a-zA-ZéÉôÔàâÂîÎïèÈêÊÜœŒæÆçÇ0-9µåÅΩ&αβγδεζηθικλμνξοπρστυφχψωΔℓΩ_]", self.lemma):
sErr += 'premier caractère inconnu: ' + self.lemma[0]
if re.search(r"\s$", self.lemma):
sErr += 'espace en fin de lemme'
if re.match(r"v[0123]", self.po) and not re.match(r"[ea_][ix_][tx_][nx_][pqrex_][mx_][ex_z][ax_z]", self.po[2:10]):
sErr += 'verbe inconnu: ' + self.po
if (re.match(r"S[*.]", self.flags) and re.search("[sxz]$", self.lemma)) or (re.match(r"X[*.]", self.flags) and not re.search("[ul]$", self.lemma)):
sErr += 'drapeau inutile'
if self.iz == '' and re.match(r"[SXAI](?!=)", self.flags) and self.po:
sErr += '[is]'
if re.match(r"pl|sg|inv", self.iz):
sErr += '[is]'
if re.match(r"[FW]", self.flags) and re.search(r"epi|mas|fem|inv|sg|pl", self.iz):
sErr += '[is]'
if re.match(r"[FW]", self.flags) and re.search(r"[^eë]$", self.lemma):
sErr += "fin de lemme inapproprié"
if re.match(r".\*", self.flags) and re.match(r"[bcdfgjklmnpqrstvwxz]", self.lemma):
sErr += 'drapeau pour lemme commençant par une voyelle'
if re.search(r"pl|sg|inv", self.iz) and re.match(r"[SXAIFW](?!=)", self.flags):
sErr += '[is]'
if re.search(r"nom|adj", self.po) and re.match(r"(?i)[aâàäáeéèêëiîïíìoôöóòuûüúù]", self.lemma) and re.match("[SFWXAI][.]", self.flags) \
and "pel" not in self.lx:
sErr += 'le drapeau derait finir avec *'
if not self.flags and self.iz.endswith(("mas", "fem", "epi")):
sErr += '[is] incomplet'
if sErr:
echo(' error - id: ' + self.iD, end = "")
echo(' ' + sErr + ' in ' + self.__str__())
def setTagsFrom (self, oEnt):
self.po = oEnt.po
self.iz = oEnt.iz
self.ds = oEnt.ds
self.ts = oEnt.ts
self.ip = oEnt.ip
self.dp = oEnt.dp
self.tp = oEnt.tp
self.sp = oEnt.sp
self.pa = oEnt.pa
self.st = oEnt.st
self.al = oEnt.al
self.ph = oEnt.ph
self.lx = oEnt.lx
self.se = oEnt.se
self.et = oEnt.et
self.di = oEnt.di
self.fq = oEnt.fq
def keyTriNat (self):
return (self.lemma.translate(CHARMAP), self.flags, self.po)
def keyTriNum (self):
return (self.lemma, self.flags, self.po)
def getEntryLine (self, oDict, nMode, bSimplified=False):
sLine = self.lemma
if self.flags:
sLine += '/'
sLine += self.flags if not oDict.bShortenTags or bSimplified else oDict.dAF[self.flags]
if bSimplified:
return sLine.replace("()", "") + "\n"
if nMode > 0:
sMorph = self.getMorph(nMode)
if sMorph:
sLine += sMorph if not oDict.bShortenTags else "\t" + oDict.dAM[sMorph.strip()]
return sLine + "\n"
def getMorph (self, nMode):
txt = ''
if self.po: txt += fieldToHunspell('po', self.po)
if self.iz: txt += fieldToHunspell('is', self.iz)
if self.ds: txt += fieldToHunspell('ds', self.ds)
if self.ts: txt += fieldToHunspell('ts', self.ts)
if self.ip: txt += fieldToHunspell('ip', self.ip)
if self.dp: txt += fieldToHunspell('dp', self.dp)
if self.tp: txt += fieldToHunspell('tp', self.tp)
if self.sp: txt += fieldToHunspell('sp', self.sp)
if self.pa: txt += fieldToHunspell('pa', self.pa)
if self.al: txt += fieldToHunspell('al', self.al)
if self.st: txt += fieldToHunspell('st', self.st)
if self.ph: txt += fieldToHunspell('ph', self.ph)
if nMode > 1:
if self.lx: txt += fieldToHunspell('lx', self.lx)
if self.se: txt += fieldToHunspell('se', self.se)
if self.et: txt += fieldToHunspell('et', self.et)
if self.fq: txt += ' fq:' + self.fq
if self.di != '*': txt += ' di:' + self.di
return txt
def getShortDescr (self):
txt = self.lemma
if self.flags:
txt += '/' + self.flags
if self.di != '*':
txt += ' di:' + self.di
return txt
def generateFlexions (self, dFlags):
lTuples = self._flechir(dFlags)
# création des objects flexions
self.nFlexions = 0
self.lFlexions = []
sReject = ""
for sFlex, sMorph, sDic in lTuples:
if '+' not in sMorph:
sMorph = self.clean(sMorph)
if not sMorph.endswith((" mas", " fem", " epi")):
self.lFlexions.append( Flexion(self, sFlex, sMorph, sDic) )
self.nFlexions += 1
else:
#echo(sFlex + " " + sMorph + ", ")
pass
# Drapeaux dont le lemme féminin doit être remplacé par le masculin dans la gestion des formes fléchies
if self.flags.startswith(("F.", "F*", "W.", "W*")):
# recherche de la forme masculine
for t in lTuples:
sMorph = self.clean(t[1])
if sMorph.endswith('mas') or sMorph.endswith('mas sg') or sMorph.endswith('mas inv'):
self.sRadical = t[0]
else:
self.sRadical = self.lemma
# Tag duplicates
d = {}
for oFlex in self.lFlexions:
d[oFlex.sFlexion] = d.get(oFlex.sFlexion, 0) + 1
for oFlex in self.lFlexions:
oFlex.nDup = d[oFlex.sFlexion]
def _flechir (self, dFlags, morph='', iPR=0):
# recursive function!
"renvoie une liste de tuples (déclinaisons, morphologie), formes fléchies du lemme"
if iPR == 2:
return []
if iPR == 0:
morph = self.lexMorph()
lFlexions = [(self.lemma, morph, self.di)] if iPR == 0 and not self.flags.endswith('()') else []
lFlexPrefix = []
lFlexSuffix = []
for sFlag in makeLongFlags(self.flags):
if sFlag not in dFlags:
if sFlag not in ['**', '()', '||', '--']:
lFlexions.append( (self.lemma, '[unknown flag: {}]'.format(sFlag)) )
echo("ERROR: " + self.lemma + ' - unknown flag: ' + sFlag)
else:
oFlag = dFlags[sFlag]
if not oFlag.bSfx:
# cas des préfixes
for oRule in oFlag.lRules:
if oRule.motif.search(self.lemma):
ruleMorph = oRule.lexMorph()
if oRule.cut == '0':
flexion = (oRule.add+self.lemma, ruleMorph+morph, oRule.di)
if oFlag.bMix:
lFlexPrefix.append(flexion)
for flex in lFlexSuffix:
lFlexions.append( (oRule.add+flex[0], flex[1]+ruleMorph) )
else:
lFlexions.append(flexion)
else:
flexion = (self.lemma.replace(oRule.cut, oRule.add, 1), ruleMorph+morph, oRule.di)
if oFlag.bMix:
lFlexPrefix.append(flexion)
for flex in lFlexSuffix:
lFlexions.append( (flex[0].replace(oRule.cut, oRule.add, 1), flex[1]+ruleMorph) )
else:
lFlexions.append(flexion)
if oRule.flags != '' and oRule.flags != '**':
lFlexions.extend(Entree(flexion[0]+'/'+oRule.flags)._flechir(dFlags, flexion[1], iPR+1))
else:
# cas des suffixes
for oRule in oFlag.lRules:
if oRule.motif.search(self.lemma):
ruleMorph = oRule.lexMorph()
if not oRule.flags.endswith('**') or oRule.flags == '**':
# règle ordinaire, pas de circumfix
if oRule.cut == '0':
flexion = (self.lemma+oRule.add, morph+ruleMorph, oRule.di)
if oFlag.bMix:
lFlexSuffix.append(flexion)
for flex in lFlexPrefix:
lFlexions.append( (flex[0]+oRule.add, flex[1]+ruleMorph) )
else:
lFlexions.append(flexion)
else:
nCut = len(oRule.cut)
flexion = (self.lemma[:-nCut]+oRule.add, morph+ruleMorph, oRule.di)
if oFlag.bMix:
lFlexSuffix.append(flexion)
for flex in lFlexPrefix:
lFlexions.append( (flex[0][:-nCut]+oRule.add, flex[1]+ruleMorph) )
else:
lFlexions.append(flexion)
if oRule.flags != '' and oRule.flags != '**':
lFlexions.extend(Entree(flexion[0]+'/'+oRule.flags)._flechir(dFlags, flexion[1], iPR+1))
else:
# la règle impose un circumfix
if oRule.cut == '0':
flexion = (self.lemma+oRule.add, morph+ruleMorph, oRule.di)
else:
flexion = (self.lemma[:-len(oRule.cut)]+oRule.add, morph+ruleMorph, oRule.di)
lFlexions.extend(Entree(flexion[0]+'/'+oRule.flags)._flechir(dFlags, flexion[1], iPR+1))
lFlexions = lFlexions + lFlexPrefix + lFlexSuffix
return lFlexions
def clean (self, s):
return s.replace(' ', ' ').strip(' ')
def lexMorph (self):
# morphology for lexicon
txt = ' '
if self.po: txt += self.po + ' '
if self.iz: txt += self.iz + ' '
if self.ds: txt += self.ds + ' '
if self.ts: txt += self.ts + ' '
if self.ip: txt += self.ip + ' '
if self.dp: txt += self.dp + ' '
if self.tp: txt += self.tp + ' '
if self.sp: txt += self.sp + ' '
return txt
def getConjugation (self):
sRes = self.lemma + "\t" + self.po[1:10] + "\n"
for oFlex in self.lFlexions:
sMorph = oFlex.sMorph[11:].rstrip("!").replace("ppas adj", "ppas").replace("ppas 1jsg", "ppas")
if not sMorph.startswith("ppas") and sMorph.find(" ") > 1:
# complex tags
for s in getVerbMultiMorph(sMorph):
sRes += "_\t" + s + "\t" + oFlex.sFlexion + "\n"
else:
sRes += "_\t" + sMorph + "\t" + oFlex.sFlexion + "\n"
return sRes + "$\n"
def getDeclination (self):
sRes = self.lemma + "\t" + self.flags + "\n"
for oFlex in self.lFlexions:
if "ppas" in oFlex.sMorph:
sMorph = oFlex.sMorph.replace("ppas adj", "adj").replace("ppas 1jsg", "adj")
sRes += "_\t" + sMorph + "\t" + oFlex.sFlexion + "\n"
elif "adj" in oFlex.sMorph or "nom" in oFlex.sMorph:
sRes += "_\t" + oFlex.sMorph + "\t" + oFlex.sFlexion + "\n"
return sRes + "$\n"
def calcOccurFromFlexions (self):
self.nOccur = 0
for o in self.lFlexions:
self.nOccur += o.nOccur
def calcAverageKnownOccurrence (self):
# nous calculons la moyenne des occurrences des formes fléchies
# qui n’ont pas d’équivalent dans les autres entrées (nMulti = 0)
nOccur = 0
nFlex = 0
for oFlex in self.lFlexions:
if oFlex.nMulti == 0:
nOccur += oFlex.nOccur
nFlex += 1
# moyenne des formes fléchies sans équivalent ou -1
self.nAKO = math.ceil(nOccur / nFlex) if nFlex > 0 else -1
def solveOccurMultipleFlexions (self, hDst, oStatsLex):
sBlank = " "
if self.nAKO >= 0:
for oFlex in self.lFlexions:
if oFlex.nMulti > 0 and not oFlex.bFixed:
# on trie les entrées avec AKO et sans AKO
lEntWithAKO = []
lEntNoAKO = []
for oEntry in oFlex.lMulti:
if oEntry.nAKO >= 0:
lEntWithAKO.append(oEntry)
else:
lEntNoAKO.append(oEntry)
if lEntNoAKO:
# on calcule la différence totale occasionnée par du passage des flexions appartenant à des entrées avec AKO au niveau AKO
nDiff = (oFlex.nOccur - self.nAKO) * oFlex.nDup
for oEntry in lEntWithAKO:
for oFlexM in oEntry.lFlexions:
if oFlex.sFlexion == oFlexM.sFlexion:
nDiff += oFlexM.nOccur - oEntry.nAKO
if nDiff > 0:
# on peut passer à les formes fléchies à AKO
hDst.write(" * {0.sFlexion}\n".format(oFlex))
hDst.write(" moyenne connue\n")
for oFlexD in self.lFlexions:
if oFlex.sFlexion == oFlexD.sFlexion:
hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} >> {1:>10}\n".format(oFlexD, self.nAKO, self.getShortDescr()))
oFlexD.setOccur(self.nAKO)
for oEntry in lEntWithAKO:
hDst.write(" moyenne connue\n")
for oFlexM in oEntry.lFlexions:
if oFlex.sFlexion == oFlexM.sFlexion:
hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} >> {1:>10}\n".format(oFlexM, oEntry.nAKO, oEntry.getShortDescr()))
oFlexM.setOccur(oEntry.nAKO)
# on répercute nDiff sur les flexions sans AKO
for oEntry in lEntNoAKO:
hDst.write(" sans moyenne connue\n")
for oFlexM in oEntry.lFlexions:
if oFlex.sFlexion == oFlexM.sFlexion:
nNewOccur = oFlexM.nOccur + math.ceil((nDiff / len(lEntNoAKO)) / oFlexM.nDup)
hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} +> {1:>10}\n".format(oFlexM, nNewOccur, oEntry.getShortDescr()))
oFlexM.setOccur(nNewOccur)
else:
# Toutes les entrées sont avec AKO : on pondère
nFlexOccur = oStatsLex.getFlexionOccur(oFlex.sFlexion)
nTotAKO = self.nAKO
for oEnt in oFlex.lMulti:
nTotAKO += oEnt.nAKO
hDst.write(" = {0.sFlexion}\n".format(oFlex))
hDst.write(" moyennes connues\n")
for oFlexD in self.lFlexions:
if oFlex.sFlexion == oFlexD.sFlexion:
nNewOccur = math.ceil((nFlexOccur * (self.nAKO / nTotAKO)) / oFlexD.nDup) if nTotAKO else 0
hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} %> {1:>10}\n".format(oFlexD, nNewOccur, self.getShortDescr()))
oFlexD.setOccur(nNewOccur)
for oEntry in oFlex.lMulti:
for oFlexM in oEntry.lFlexions:
if oFlex.sFlexion == oFlexM.sFlexion:
nNewOccur = math.ceil((nFlexOccur * (oEntry.nAKO / nTotAKO)) / oFlexM.nDup) if nTotAKO else 0
hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} %> {1:>10}\n".format(oFlexM, nNewOccur, oEntry.getShortDescr()))
oFlexM.setOccur(nNewOccur)
def calcFreq (self, nTot):
self.fFreq = (self.nOccur * 100) / nTot
self.oldFq = self.fq
self.fq = getIfq(self.fFreq)
class Flexion:
def __init__ (self, oEntry, sFlex='', sMorph='', cDic=''):
self.oEntry = oEntry
self.sFlexion = sFlex
self.sMorph = sMorph
self.cDic = cDic
self.nOccur = 0
self.bFixed = False
self.nDup = 0 # duplicates in the same entry
self.nMulti = 0 # duplicates with other entries
self.lMulti = [] # list of similar flexions
self.fFreq = 0
self.cFq = ''
self.metagfx = '' # métagraphe
self.metaph2 = '' # métaphone 2
def setOccur (self, n):
self.nOccur = n
self.bFixed = True
def calcOccur (self):
self.nOccur = math.ceil((self.nOccur / (self.nMulti+1)) / self.nDup)
def calcFreq (self, nTot):
self.fFreq = (self.nOccur * 100) / nTot
self.cFq = getIfq(self.fFreq)
def calcMetagraphe (self):
t = metagraphe.getMetagraphe(self.sFlexion, self.sMorph)
self.metagfx = t[0] if not t[1] else t[0]+"/"+t[1]
def calcMetaphone2 (self):
t = metaphone2.dm(self.sFlexion)
self.metaph2 = t[0] if not t[1] else t[0]+"/"+t[1]
@classmethod
def header (cls, oStatsLex):
sOccurs = ''
for t in oStatsLex.lLex:
sOccurs += t[1] + "\t"
return "id\tFlexion\tLemme\tÉtiquettes\tMétagraphe (β)\tMetaphone2\tNotes\tSémantique\tÉtymologie\tSous-dictionnaire\t" + sOccurs + "Total occurrences\tDoublons\tMultiples\tFréquence\tIndice de fréquence\n"
def __str__ (self, oStatsLex):
sOccurs = ''
for v in oStatsLex.dFlexions[self.sFlexion]:
sOccurs += str(v) + "\t"
return "{0.oEntry.iD}\t{0.sFlexion}\t{0.oEntry.sRadical}\t{0.sMorph}\t{0.metagfx}\t{0.metaph2}\t{0.oEntry.lx}\t{0.oEntry.se}\t{0.oEntry.et}\t{0.oEntry.di}{2}\t{1}{0.nOccur}\t{0.nDup}\t{0.nMulti}\t{0.fFreq:.15f}\t{0.cFq}\n".format(self, sOccurs, "/"+self.cDic if self.cDic != "*" else "")
def display (self):
echo(self.__str__())
@classmethod
def simpleHeader (cls):
return "# :POS ;LEX ~SEM =FQ /DIC\n"
def getGrammarCheckerRepr (self):
return "{0.sFlexion}\t{0.oEntry.lemma}\t{1}\n".format(self, self._getSimpleTags())
_dTagReplacement = {
# POS
"nom": ":N", "adj": ":A", "adv": ":W", "negadv": ":X", "mg": ":G", "nb": ":B",
"loc.nom": ":Ñ", "loc.adj": ":Â", "loc.adv": ":Ŵ", "loc.verb": ":Ṽ",
"interj": ":J", "loc.interj": ":Ĵ", "titr": ":T",
"mas": ":m", "fem": ":f", "epi": ":e", "sg": ":s", "pl": ":p", "inv": ":i",
"infi": ":Y",
"ppre": ":P", "ppas": ":Q",
"ipre": ":Ip", "iimp": ":Iq", "ipsi": ":Is", "ifut": ":If",
"spre": ":Sp", "simp": ":Sq", "cond": ":K", "impe": ":E",
"1sg": ":1s", "1isg": ":1ś", "1jsg": ":1ŝ", "2sg": ":2s", "3sg": ":3s", "1pl": ":1p", "2pl": ":2p", "3pl": ":3p", "3pl!": ":3p!",
"prepv": ":Rv", "prep": ":R", "loc.prep": ":Ŕ",
"detpos": ":Dp", "detdem": ":Dd", "detind": ":Di", "detneg": ":Dn", "detex": ":De", "det": ":D",
"advint": ":U",
"prodem": ":Od", "proind": ":Oi", "proint": ":Ot", "proneg": ":On", "prorel": ":Or", "proadv": ":Ow",
"properobj": ":Oo", "propersuj": ":Os", "1pe": ":O1", "2pe": ":O2", "3pe": ":O3",
"cjco": ":Cc", "cjsub": ":Cs", "cj": ":C", "loc.cj": ":Ĉ", "loc.cjsub": ":Ĉs",
"prn": ":M1", "patr": ":M2", "npr": ":MP", "nompr": ":NM",
"pfx": ":Zp", "sfx": ":Zs",
"div": ":H",
"err": ":#",
# LEX
"symb": ";S"
}
def _getSimpleTags (self):
s = ""
# POS
for sTag in self.sMorph.split():
if sTag.startswith("v"):
s += ":V" + sTag[1:]
else:
if sTag in self._dTagReplacement:
s += self._dTagReplacement[sTag]
else:
echo(" # unknown tag: " + sTag + " on: " + self.oEntry.lemma)
# LEX
for sTag in self.oEntry.lx.split():
if sTag in self._dTagReplacement:
s += self._dTagReplacement[sTag]
# SEM
#s += "~" + self.oEntry.se if self.oEntry.se and self.oEntry.se != "@" else ""
# ETY
#s += "<" + self.oEntry.et if self.oEntry.et and self.oEntry.et != "@" else ""
# IFQ
#s += "=" + self.cFq
# DIC
s += "/" + self.cDic
return s
def keyTriNat (self):
return (self.sFlexion.translate(CHARMAP), self.sMorph)
def keyFreq (self):
return (100-self.fFreq, self.oEntry.sRadical, self.sFlexion)
def keyOcc (self):
return (self.nOccur, self.oEntry.sRadical, self.sFlexion)
def keyIdx (self):
return self.oEntry.iD
def keyFlexion (self):
return self.sFlexion
class Flag:
def __init__ (self, sFlagType, sFlagName, sMix):
self.sFlagName = sFlagName
self.bSfx = True if sFlagType == 'SFX' else False
self.bMix = True if sMix == 'Y' else False
self.lRules = []
self.nRules = 0
self.nOccur = 0
def addAffixRule (self, line):
"ajoute une règle au drapeau"
oRule = AffixRule(line)
self.lRules.append(oRule)
self.nRules += 1
def getFlag (self, subDicts, oDict, nMode, bSimplified):
nRules = 0
sRules = ''
for oRule in self.lRules:
if oRule.di in subDicts:
if not (bSimplified and oRule.isReplicationRule()):
sRules += oRule.getRuleLine(oDict, nMode, bSimplified)
nRules += 1
if nRules:
txt = "\n"
txt += 'SFX' if self.bSfx else 'PFX'
txt += ' ' + self.sFlagName + ' '
txt += 'Y' if self.bMix else 'N'
txt += ' ' + str(nRules) + "\n"
txt += sRules
return txt
else:
return ''
class AffixRule:
def __init__ (self, sLine):
self.sFlagName = ''
self.bSfx = True
self.comment = ''
# Règle
self.cut = ''
self.add = ''
self.flags = ''
self.cond = ''
self.motif = ''
# champs morphologiques de Hunspell
self.po = ''
self.iz = ''
self.ds = ''
self.ts = ''
self.ip = ''
self.dp = ''
self.tp = ''
self.sp = ''
self.pa = ''
self.ph = ''
# champs de Dicollecte
self.lx = ''
self.di = '*'
# erreurs
self.err = ''
# autres champs
self.nOccur = 0
sLine = sLine.rstrip(" \n")
# commentaire
if '#' in sLine:
sLine, comment = sLine.split('#', 1)
self.comment = comment.strip()
# éléments de la ligne
elems = sLine.split()
nElems = len(elems)
# type et nom
self.bSfx = True if elems[0] == "SFX" else False
self.sFlagName = elems[1]
# lemme et drapeaux
self.cut = elems[2]
if '/' in elems[3]:
self.add, self.flags = elems[3].split('/')
else:
self.add = elems[3]
self.flags = ''
if self.add == '0':
self.add = ''
self.cond = elems[4]
try:
self.motif = re.compile(self.cond+'$') if self.bSfx else re.compile('^'+self.cond)
except:
echo("error:"+self.cond)
# morph
for i in range(5, nElems):
if len(elems[i]) > 3 and elems[i][2] == ':':
fields = elems[i].split(':',1)
if fields[0] == 'po':
self.po = fields[1] if self.po == '' else self.po + ' ' + fields[1]
elif fields[0] == 'is':
self.iz = fields[1] if self.iz == '' else self.iz + ' ' + fields[1]
elif fields[0] == 'ds':
self.ds = fields[1] if self.ds == '' else self.ds + ' ' + fields[1]
elif fields[0] == 'ts':
self.ts = fields[1] if self.ts == '' else self.ts + ' ' + fields[1]
elif fields[0] == 'ip':
self.ip = fields[1] if self.ip == '' else self.ip + ' ' + fields[1]
elif fields[0] == 'dp':
self.dp = fields[1] if self.dp == '' else self.dp + ' ' + fields[1]
elif fields[0] == 'tp':
self.tp = fields[1] if self.tp == '' else self.tp + ' ' + fields[1]
elif fields[0] == 'sp':
self.sp = fields[1] if self.sp == '' else self.sp + ' ' + fields[1]
elif fields[0] == 'pa':
self.pa = fields[1] if self.pa == '' else self.pa + ' ' + fields[1]
elif fields[0] == 'ph':
self.ph = fields[1] if self.pa == '' else self.pa + ' ' + fields[1]
elif fields[0] == 'lx':
self.lx = fields[1] if self.lx == '' else self.lx + ' ' + fields[1]
elif fields[0] == 'di':
self.di = fields[1]
else:
echo('Champ inconnu: {} dans {}'.format(fields[0], self.sFlagName))
else:
echo(" # Erreur affixe : {}".format(line))
def isReplicationRule (self):
"is this rule used for replication of a virtual lemma"
return self.flags == "" and ((self.cut == "0" and self.add == "") or self.cut == self.add)
def getRuleLine (self, oDict, nMode, bSimplified=False):
sLine = 'SFX' if self.bSfx else 'PFX'
sLine += ' ' + self.sFlagName + ' ' + self.cut + ' '
sLine += self.add if self.add else '0'
if self.flags != '':
sLine += '/'
sLine += self.flags if not oDict.bShortenTags or bSimplified else oDict.dAF[self.flags]
if bSimplified:
sLine = sLine.replace("()", "")
sLine += ' ' + self.cond
if not bSimplified and nMode > 0:
sMorph = self.getMorph(nMode)
if sMorph:
sLine += sMorph if not oDict.bShortenTags or bSimplified else ' ' + oDict.dAM[sMorph.strip()]
return sLine + "\n"
def getMorph (self, nMode):
# morphology for Hunspell
txt = ''
if self.po: txt += fieldToHunspell('po', self.po)
if self.iz: txt += fieldToHunspell('is', self.iz)
if self.ds: txt += fieldToHunspell('ds', self.ds)
if self.ts: txt += fieldToHunspell('ts', self.ts)
if self.ip: txt += fieldToHunspell('ip', self.ip)
if self.dp: txt += fieldToHunspell('dp', self.dp)
if self.tp: txt += fieldToHunspell('tp', self.tp)
if self.sp: txt += fieldToHunspell('sp', self.sp)
if self.pa: txt += fieldToHunspell('pa', self.pa)
if self.ph: txt += fieldToHunspell('ph', self.ph)
if nMode > 1:
if self.lx: txt += fieldToHunspell('lx', self.lx)
if self.di != '*': txt += ' di:' + self.di
return txt
def lexMorph (self):
# morphology for lexicon
txt = ' '
if self.po: txt += self.po + ' '
if self.iz: txt += self.iz + ' '
if self.ds: txt += self.ds + ' '
if self.ts: txt += self.ts + ' '
if self.ip: txt += self.ip + ' '
if self.dp: txt += self.dp + ' '
if self.tp: txt += self.tp + ' '
if self.sp: txt += self.sp + ' '
return txt
class StatsLex:
def __init__ (self, oDict):
echo("Lexique statistique")
self.dFlexions = { oFlex.sFlexion: [] for oFlex in oDict.lFlexions }
self.lLex = []
def addLexFromFile (self, sPathFile, cLexID, sLexName):
if not os.path.isfile(sPathFile):
echo(' * Lexique statistique - fichier {} introuvable'.format(sPathFile))
return None
if len(cLexID) != 1:
echo(' * Lexique statistique - fichier {} - identifiant incorrect, 1 caractère requis'.format(sPathFile))
return None
echo(" * Lexique statistique << [ {} ]".format(sPathFile))
nTotKnownOccur = 0
nTotOccur = 0
for sLine in readfile(sPathFile):
sWord, sVal = sLine.rstrip().split()
n = int(sVal)
if sWord in self.dFlexions:
self.dFlexions[sWord].append(n)
nTotKnownOccur += n
nTotOccur += n
self.lLex.append((cLexID, sLexName, nTotKnownOccur, nTotOccur))
# we fill gaps
nLex = len(self.lLex)
for sFlex in self.dFlexions:
if len(self.dFlexions[sFlex]) < nLex:
self.dFlexions[sFlex].append(0)
def getFlexionOccur (self, sFlex):
return sum(self.dFlexions[sFlex])
def getInfo (self):
nKnownTot = 0
nTot = 0
s = "Corpus :\n"
for t in self.lLex:
s += " * {:<20} -> {:>18,} mots reconnus / {:>18,}\n".format(t[1], t[2], t[3])
nKnownTot += t[2]
nTot += t[3]
s += "\n * {:<20} -> {:>18,} mots reconnus / {:>18,}\n\n".format('TOTAL', nKnownTot, nTot)
return s
def write (self, sPathFile):
with open(sPathFile, 'w', encoding='utf-8', newline="\n") as hDst:
for t in self.lLex:
hDst.write(str(t)+"\n")
for e in self.dFlexions.items():
hDst.write("{} - {}\n".format(e[0], e[1]))
def main ():
xParser = argparse.ArgumentParser()
xParser.add_argument("-v", "--verdic", help="set dictionary version, i.e. 5.4", type=str, default="X.Y.z")
xParser.add_argument("-m", "--mode", help="0: no tags, 1: Hunspell tags (default), 2: All tags", type=int, choices=[0, 1, 2], default=1)
xParser.add_argument("-u", "--uncompress", help="do not use Hunspell compression", action="store_true")
xParser.add_argument("-s", "--simplify", help="no virtual lemmas", action="store_true")
xParser.add_argument("-sv", "--spellvariants", help="generate spell variants", action="store_true")
xArgs = xParser.parse_args()
if xArgs.simplify:
xArgs.mode = 0
xArgs.uncompress = True
echo("Python: " + sys.version)
echo("Version: " + xArgs.verdic)
echo("Simplify: " + str(xArgs.simplify))
echo("Mode: " + str(xArgs.mode))
echo("Compression: " + str(not(xArgs.uncompress)))
### création du répertoire
spBuild = BUILD_PATH + '/' + xArgs.verdic
dir_util.mkpath(spBuild)
### Lecture des fichiers et création du dictionnaire
oFrenchDict = Dictionnaire(xArgs.verdic, "French dictionary")
for sFile in ['orthographe/FRANCAIS.dic']:
oFrenchDict.readDictionary(sFile)
oFrenchDict.readAffixes('orthographe/FRANCAIS_5.aff')
### Contrôle
oFrenchDict.sortEntriesNatural()
oFrenchDict.checkEntries()
### Lexique
oFrenchDict.generateFlexions()
oFrenchDict.calcMetagraphe()
oFrenchDict.calcMetaphone2()
#oFrenchDict.createNgrams(spBuild, 3)
if xArgs.spellvariants:
oFrenchDict.generateSpellVariants(1, spBuild)
### Statistiques
spfStats = spBuild+'/'+STATS_NAME+xArgs.verdic+'.txt'
oStatsLex = StatsLex(oFrenchDict)
oStatsLex.addLexFromFile('lexique/corpus_data/stats_google_ngram_1.txt', 'G', 'Google 1-grams')
oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwiki.txt', 'W', 'Wikipédia')
oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwikisource.txt', 'S', 'Wikisource')
oStatsLex.addLexFromFile('lexique/corpus_data/stats_litterature.txt', 'L', 'Littérature')
oStatsLex.write(spBuild+'/test_lex.txt')
oFrenchDict.calculateStats(oStatsLex, spfStats)
### écriture des paquets
echo("Création des paquets...")
if not xArgs.uncompress:
oFrenchDict.defineAbreviatedTags(xArgs.mode, spfStats)
oFrenchDict.createFiles(spBuild, [dMODERNE, dTOUTESVAR, dCLASSIQUE, dREFORME1990], xArgs.mode, xArgs.simplify)
oFrenchDict.createLibreOfficeExtension(spBuild, dMOZEXT, [dMODERNE, dTOUTESVAR, dCLASSIQUE, dREFORME1990], "../oxt/Dictionnaires/dictionaries")
oFrenchDict.createMozillaExtensions(spBuild, dMOZEXT, [dMODERNE, dTOUTESVAR, dCLASSIQUE, dREFORME1990], "../xpi/data/dictionaries")
oFrenchDict.createLexiconPackages(spBuild, xArgs.verdic, oStatsLex, "../../../lexicons")
oFrenchDict.createFileIfqForDB(spBuild)
oFrenchDict.createDictConj(spBuild, "../data")
oFrenchDict.createDictDecl(spBuild, "../data")
if __name__ == '__main__':
main()
|
Added gc_lang/fr/dictionnaire/lexique/README_lexique.txt version [bafa49243b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
_______________________________________________________________________________
LEXIQUE FRANÇAIS, LISTE DES FORMES FLÉCHIES
version ${version}
Olivier R. - dicollecte<at>free<dot>fr
Dicollecte: http://www.dicollecte.org/
Licence :
* MPL : Mozilla Public License
version 2.0 -- http://www.mozilla.org/MPL/2.0/
Pour participer à l’amélioration du lexique, allez sur :
http://www.dicollecte.org/home.php?prj=fr
_______________________________________________________________________________
NOTE
_______________________________________________________________________________
Ce lexique a été généré à partir de la base de données de Dicollecte.
Il contient les nouvelles et les anciennes graphies des mots concernés
par les rectifications de l’orthographe proposées en 1990 par le Conseil
supérieur à la langue française et par l’Académie française.
À propos de la réforme orthographique de 1990 :
http://www.renouvo.org/regles.php
http://www.orthographe-recommandee.info/
_______________________________________________________________________________
|
Added gc_lang/fr/dictionnaire/lexique/corpus_data/_README.txt version [f31acc9237].
> > > > > > | 1 2 3 4 5 6 | Les fichiers de ce dossier sont non versionnés. Préservez leurs noms pour éviter l’inflation du dépôt. frwiki: 2026-10-20 frwikisource: 2016-10-20 Google Ngram 1: 2012 |
Added gc_lang/fr/dictionnaire/lexique/french.tagset.txt version [3f7ce78984].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
ÉTIQUETTES DE GRAMMALECTE
http://www.dicollecte.org/grammalecte
_______________________________________________________________________________
// NOMS ET ADJECTIFS
Nom :N (Loc: Ñ)
Adjectif :A (loc: Â)
Prénom :M1
Patronyme :M2
Nom propre :MP
Nom propre (avec article) :NM
[genre] masculin :m [nombre] singulier :s
féminin :f pluriel :p
épicène :e invariable :i
// DIVERS
Adverbe :W (loc: Ŵ)
Adverbe de négation :X
Interjection :J (loc: Ĵ)
Nombre cardinal :B
Titre :T
// VERBES
Verbe :V 0 e i t n p m e a (loc: Ṽ)
1 a x x x q x x x
2 _ _ _ _ r _ _ _
3 s
u
e
x
_
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
groupe (0 = être ou avoir) ____/ | | | | | | | |
type de verbe (être, avoir, autre) _______/ | | | | | | |
verbe intransifif ? __________/ | | | | | |
verbe transitif direct ? _____________/ | | | | |
verbe transitif indirect ? ________________/ | | | |
verbe pronominal ? ___________________/ | | |
p: toujours, r: réciproque, e: avec pronom “en” | | |
accord? q: possiblement, s: toujours, u: jamais | | |
verbe impersonnel ? ______________________/ | |
avec verbe auxilaire être ? _________________________/ |
avec verbe auxilaire avoir ? ____________________________/
Infinitif :Y
Participe présent :P
Participe passé :Q
Indicatif présent :Ip 1re personne du singulier :1s (forme interrogative: 1ś ou 1ŝ)
Indicatif imparfait :Iq 2e personne du singulier :2s
Indicatif passé simple :Is 3e personne du singulier :3s
Indicatif futur :If 1re personne du pluriel :1p
2e personne du pluriel :2p
Subjonctif présent :Sp 3e personne du pluriel :3p
Subjonctif imparfait :Sq
Conditionnel :K
Impératif :E
// MOTS GRAMMATICAUX
Mot grammatical :G
préposition :R (loc: Ŕ)
préposition verbale :Rv
conjonction :C (loc: Ĉ)
conjonction de coordination :Cc
conjonction de subordination :Cs (loc: Ĉs)
déterminant :D
déterminant possessif :Dp
déterminant démonstratif :Dd
déterminant indéterminé :Di
Adverbe interrogatif :U
pronom :O
pronom démonstratif :Od
pronom indéterminé :Oi
pronom interrogatif :Oj
pronom relatif :Or
pronom de négation :On
pronom adverbial :Ow
pronom personnel sujet :Os
pronom personnel objet :Oo
// AUTRES
Préfixe :Zp
Suffixe :Zs
========== MÉMO ==========
:A Adjectif
:B Nombre cardinal
:C Conjonction
:D Déterminant
:E Impératif (verbe)
:F
:G Mot grammatical
:H <Hors-norme>
:I Indicatif (verbe)
:J Interjection
:K Conditionnel (verbe)
:L Locution
:M Nom propre (sans article)
:N Nom
:O Pronom
:P Participe présent (verbe)
:Q Participe passé (verbe)
:R Préposition
:S Subjonctif (verbe)
:T Titre
:U Adverbe interrogatif
:V Verbe (quelle que soit la forme)
:W Adverbe
:X Adverbe de négation
:Y Infinitif (verbe)
:Z Préfixe ou suffixe
:1 1re personne (verbe)
:2 2e personne (verbe)
:3 3e personne (verbe)
:e épicène
:f féminin
:i invariable
:m masculin
:p pluriel
:s singulier
|
Added gc_lang/fr/dictionnaire/metagraphe.py version [47f74994c2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
#! python3
#
# Metagraphe
#
# By Olivier R. - 2013
import re
import unicodedata
# Dictionnaire des caractères pour la phonétique
PHMAP = str.maketrans({ 'à': 'a', 'â': 'a', 'ä': 'a', 'å': 'a', 'ā': 'a',
'ç': 'S',
'é': 'é', 'è': 'é', 'ê': 'é', 'ë': 'é', 'ē': 'é',
'î': 'i', 'ï': 'i', 'ī': 'i',
'ñ': 'ni',
'ô': 'o', 'ö': 'o', 'ō': 'o',
'ù': 'u', 'û': 'u', 'ü': 'u', 'ū': 'u',
'ÿ': 'i',
'æ': 'é' })
def getPhonex (s, sMorph):
"returns a simplified phonetic string"
s = s.lower().translate(PHMAP)
if re.match("[A-Z0-9]+$", s) or len(s) == 1:
return s
else:
s = re.sub("sc(?=[eéiy])", "S", s)
s = re.sub("x[cs](?=[eéiy])", "kS", s)
s = re.sub("c(?=[eéiy])", "S", s)
s = re.sub("c(?=[auoœ])", "k", s)
s = re.sub("ge(?=[ao])", "j", s)
s = re.sub("g(?=[ieéy])", "j", s)
s = re.sub("gue", "ge", s)
s = re.sub("am(?=[bp])", "â", s)
s = re.sub("om(?=[bpt])", "ô", s)
s = re.sub("omp(?=t)", "ô", s)
s = re.sub("[iy]m(?=[bp])", "1", s)
s = re.sub("eill", "éY", s)
s = re.sub("aill", "aY", s)
s = re.sub("[ae]y(?=[aeéi])", "éY", s)
s = re.sub("^s", "S", s)
s = re.sub("(?<=[aeioéu])s(?=[aeioéu])", "z", s)
if sMorph.startswith("v"):
s = re.sub("aient$", "é", s)
s = re.sub("ent$", "", s)
s = re.sub("ant$", "â", s)
s = re.sub("a[st]$", "a", s)
s = re.sub("ai[ets]$", "é", s)
s = re.sub("ez$", "é", s)
s = re.sub("on[st]?$", "ô", s)
s = re.sub("es?$", "", s)
s = re.sub("ée?s?$", "é", s)
s = re.sub("ie?s?$", "i", s)
s = re.sub("ue?s?$", "u", s)
s = re.sub("ui[ts]$", "ui", s)
s = re.sub("aut$", "o", s)
s = re.sub("ut$", "u", s)
s = re.sub("it?s?$", "i", s)
if sMorph.startswith("nom") or sMorph.startswith("adj"):
if "pl" in sMorph:
s = re.sub("[sx]$", "", s)
s = re.sub("tion$", "Siô", s)
s = re.sub("ent$", "â", s)
s = re.sub("eux$", "2", s)
s = re.sub("eaux$", "o", s)
s = re.sub("e[rt]$", "é", s)
s = re.sub("[ea]ine$", "én", s)
s = re.sub("at$", "a", s)
s = re.sub("on(?=[bcdfghjklmpqrsStvwxz])", "ô", s)
s = re.sub("an[st]?$", "â", s)
s = re.sub("an(?=[bcdfghjklmpqrsStvwxz])", "â", s)
s = re.sub("iens?$", "i1", s)
s = re.sub("(?<!i)ens?$", "â", s)
s = re.sub("en(?=[bcdfghjklmpqrsStvwxz])", "â", s)
s = re.sub("uns?$", "1", s)
s = re.sub("un(?=[bcdfghjklmpqrsStvwxz])", "1", s)
s = re.sub("ins?$", "1", s)
s = re.sub("a?in(?=[bcdfghjklmpqrsStvwxz])", "1", s)
s = re.sub("œu?", "2", s)
s = re.sub("eux?$", "2", s)
s = re.sub("eu(?=[bcdfghjklmpqrsStvwxz])", "2", s)
s = re.sub("e(?=ss|tt|rr|ll|ff)", "é", s)
s = re.sub("enne$", "én", s)
s = re.sub("e?au", "o", s)
s = re.sub("che$", "ç", s)
s = re.sub("[ae]i", "é", s)
s = s.replace("ou", "û")
s = s.replace("ss", "S")
s = s.replace("dj", "j")
s = s.replace("th", "t")
s = re.sub("[qc]u?", "k", s)
s = s.replace("ch", "k")
s = s.replace("ph", "f")
s = s.replace("h", "")
s = s.replace("y", "i")
s = s.replace("æ", "é")
s = s.replace("x", "ks")
if len(s) > 3: s = re.sub("es$", "", s)
if len(s) > 2: s = re.sub("e$", "", s)
s = re.sub("(\\w)\\1", "\\1", s)
return s
def getGraphix (s):
"returns a simplified spelling"
return ''
def getMetagraphe (s, sMorph):
return (getPhonex(s, sMorph), getGraphix(s))
if __name__ == '__main__':
import doctest
doctest.testmod()
|
Added gc_lang/fr/dictionnaire/metaphone2.py version [c35df7b737].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 |
#! python3
# -*- coding: UTF-8 -*-
# This script implements the Double Metaphone algorithm (c) 1998, 1999 by Lawrence Philips
# it was translated to Python from the C source written by Kevin Atkinson (http://aspell.net/metaphone/)
# By Andrew Collins - January 12, 2007 who claims no rights to this work
# http://atomboy.isa-geek.com/plone/Members/acoil/programing/double-metaphone
# Tested with Python 2.4.3
# Updated Feb 14, 2007 - Found a typo in the 'gh' section
# Updated Dec 17, 2007 - Bugs fixed in 'S', 'Z', and 'J' sections. Thanks Chris Leong!
# Updated 2009-03-05 by Matthew Somerville - Various bug fixes against the reference C++ implementation.
"""
>>> dm(u'aubrey')
('APR', '')
>>> dm(u'richard')
('RXRT', 'RKRT')
>>> dm(u'katherine') == dm(u'catherine')
True
>>> dm(u'Bartoš'), dm(u'Bartosz'), dm(u'Bartosch'), dm(u'Bartos')
(('PRT', ''), ('PRTS', 'PRTX'), ('PRTX', ''), ('PRTS', ''))
"""
import unicodedata
def dm (st):
"""dm(string) -> (string, string or '')
returns the double metaphone codes for given string - always a tuple
there are no checks done on the input string, but it should be a single word or name."""
vowels = ['A', 'E', 'I', 'O', 'U', 'Y']
st = ''.join((c for c in unicodedata.normalize('NFD', st) if unicodedata.category(c) != 'Mn'))
st = st.upper() # st is short for string. I usually prefer descriptive over short, but this var is used a lot!
is_slavo_germanic = (st.find('W') > -1 or st.find('K') > -1 or st.find('CZ') > -1 or st.find('WITZ') > -1)
length = len(st)
first = 2
st = '-' * first + st + '------' # so we can index beyond the begining and end of the input string
last = first + length - 1
pos = first # pos is short for position
pri = sec = '' # primary and secondary metaphone codes
# skip these silent letters when at start of word
if st[first:first + 2] in ["GN", "KN", "PN", "WR", "PS"]:
pos += 1
# Initial 'X' is pronounced 'Z' e.g. 'Xavier'
if st[first] == 'X':
pri = sec = 'S' # 'Z' maps to 'S'
pos += 1
# main loop through chars in st
while pos <= last:
#print str(pos) + '\t' + st[pos]
ch = st[pos] # ch is short for character
# nxt (short for next characters in metaphone code) is set to a tuple of the next characters in
# the primary and secondary codes and how many characters to move forward in the string.
# the secondary code letter is given only when it is different than the primary.
# This is just a trick to make the code easier to write and read.
nxt = (None, 1) # default action is to add nothing and move to next char
if ch in vowels:
nxt = (None, 1)
if pos == first: # all init vowels now map to 'A'
nxt = ('A', 1)
elif ch == 'B':
#"-mb", e.g", "dumb", already skipped over... see 'M' below
if st[pos + 1] == 'B':
nxt = ('P', 2)
else:
nxt = ('P', 1)
elif ch == 'C':
# various germanic
if pos > first + 1 and st[pos - 2] not in vowels and st[pos - 1:pos + 2] == 'ACH' and \
st[pos + 2] not in ['I'] and (st[pos + 2] not in ['E'] or st[pos - 2:pos + 4] in ['BACHER', 'MACHER']):
nxt = ('K', 2)
# special case 'CAESAR'
elif pos == first and st[first:first + 6] == 'CAESAR':
nxt = ('S', 2)
elif st[pos:pos + 4] == 'CHIA': # italian 'chianti'
nxt = ('K', 2)
elif st[pos:pos + 2] == 'CH':
# find 'michael'
if pos > first and st[pos:pos + 4] == 'CHAE':
nxt = ('K', 'X', 2)
elif pos == first and (st[pos + 1:pos + 6] in ['HARAC', 'HARIS'] or \
st[pos + 1:pos + 4] in ["HOR", "HYM", "HIA", "HEM"]) and st[first:first + 5] != 'CHORE':
nxt = ('K', 2)
#germanic, greek, or otherwise 'ch' for 'kh' sound
elif st[first:first + 4] in ['VAN ', 'VON '] or st[first:first + 3] == 'SCH' \
or st[pos - 2:pos + 4] in ["ORCHES", "ARCHIT", "ORCHID"] \
or st[pos + 2] in ['T', 'S'] \
or ((st[pos - 1] in ["A", "O", "U", "E"] or pos == first) \
and st[pos + 2] in ["L", "R", "N", "M", "B", "H", "F", "V", "W"]):
nxt = ('K', 2)
else:
if pos > first:
if st[first:first + 2] == 'MC':
nxt = ('K', 2)
else:
nxt = ('X', 'K', 2)
else:
nxt = ('X', 2)
# e.g, 'czerny'
elif st[pos:pos + 2] == 'CZ' and st[pos - 2:pos + 2] != 'WICZ':
nxt = ('S', 'X', 2)
# e.g., 'focaccia'
elif st[pos + 1:pos + 4] == 'CIA':
nxt = ('X', 3)
# double 'C', but not if e.g. 'McClellan'
elif st[pos:pos + 2] == 'CC' and not (pos == (first + 1) and st[first] == 'M'):
#'bellocchio' but not 'bacchus'
if st[pos + 2] in ["I", "E", "H"] and st[pos + 2:pos + 4] != 'HU':
# 'accident', 'accede' 'succeed'
if (pos == (first + 1) and st[first] == 'A') or \
st[pos - 1:pos + 4] in ['UCCEE', 'UCCES']:
nxt = ('KS', 3)
# 'bacci', 'bertucci', other italian
else:
nxt = ('X', 3)
else:
nxt = ('K', 2)
elif st[pos:pos + 2] in ["CK", "CG", "CQ"]:
nxt = ('K', 2)
elif st[pos:pos + 2] in ["CI", "CE", "CY"]:
# italian vs. english
if st[pos:pos + 3] in ["CIO", "CIE", "CIA"]:
nxt = ('S', 'X', 2)
else:
nxt = ('S', 2)
else:
# name sent in 'mac caffrey', 'mac gregor
if st[pos + 1:pos + 3] in [" C", " Q", " G"]:
nxt = ('K', 3)
else:
if st[pos + 1] in ["C", "K", "Q"] and st[pos + 1:pos + 3] not in ["CE", "CI"]:
nxt = ('K', 2)
else: # default for 'C'
nxt = ('K', 1)
elif ch == u'\xc7': # will never get here with st.encode('ascii', 'replace') above
# \xc7 is UTF-8 encoding of Ç
nxt = ('S', 1)
elif ch == 'D':
if st[pos:pos + 2] == 'DG':
if st[pos + 2] in ['I', 'E', 'Y']: # e.g. 'edge'
nxt = ('J', 3)
else:
nxt = ('TK', 2)
elif st[pos:pos + 2] in ['DT', 'DD']:
nxt = ('T', 2)
else:
nxt = ('T', 1)
elif ch == 'F':
if st[pos + 1] == 'F':
nxt = ('F', 2)
else:
nxt = ('F', 1)
elif ch == 'G':
if st[pos + 1] == 'H':
if pos > first and st[pos - 1] not in vowels:
nxt = ('K', 2)
elif pos < (first + 3):
if pos == first: # 'ghislane', ghiradelli
if st[pos + 2] == 'I':
nxt = ('J', 2)
else:
nxt = ('K', 2)
# Parker's rule (with some further refinements) - e.g., 'hugh'
elif (pos > (first + 1) and st[pos - 2] in ['B', 'H', 'D']) \
or (pos > (first + 2) and st[pos - 3] in ['B', 'H', 'D']) \
or (pos > (first + 3) and st[pos - 3] in ['B', 'H']):
nxt = (None, 2)
else:
# e.g., 'laugh', 'McLaughlin', 'cough', 'gough', 'rough', 'tough'
if pos > (first + 2) and st[pos - 1] == 'U' \
and st[pos - 3] in ["C", "G", "L", "R", "T"]:
nxt = ('F', 2)
else:
if pos > first and st[pos - 1] != 'I':
nxt = ('K', 2)
elif st[pos + 1] == 'N':
if pos == (first + 1) and st[first] in vowels and not is_slavo_germanic:
nxt = ('KN', 'N', 2)
else:
# not e.g. 'cagney'
if st[pos + 2:pos + 4] != 'EY' and st[pos + 1] != 'Y' and not is_slavo_germanic:
nxt = ('N', 'KN', 2)
else:
nxt = ('KN', 2)
# 'tagliaro'
elif st[pos + 1:pos + 3] == 'LI' and not is_slavo_germanic:
nxt = ('KL', 'L', 2)
# -ges-,-gep-,-gel-, -gie- at beginning
elif pos == first and (st[pos + 1] == 'Y' \
or st[pos + 1:pos + 3] in ["ES", "EP", "EB", "EL", "EY", "IB", "IL", "IN", "IE", "EI", "ER"]):
nxt = ('K', 'J', 2)
# -ger-, -gy-
elif (st[pos + 1:pos + 3] == 'ER' or st[pos + 1] == 'Y') \
and st[first:first + 6] not in ["DANGER", "RANGER", "MANGER"] \
and st[pos - 1] not in ['E', 'I'] and st[pos - 1:pos + 2] not in ['RGY', 'OGY']:
nxt = ('K', 'J', 2)
# italian e.g, 'biaggi'
elif st[pos + 1] in ['E', 'I', 'Y'] or st[pos - 1:pos + 3] in ["AGGI", "OGGI"]:
# obvious germanic
if st[first:first + 4] in ['VON ', 'VAN '] or st[first:first + 3] == 'SCH' \
or st[pos + 1:pos + 3] == 'ET':
nxt = ('K', 2)
else:
# always soft if french ending
if st[pos + 1:pos + 5] == 'IER ':
nxt = ('J', 2)
else:
nxt = ('J', 'K', 2)
elif st[pos + 1] == 'G':
nxt = ('K', 2)
else:
nxt = ('K', 1)
elif ch == 'H':
# only keep if first & before vowel or btw. 2 vowels
if (pos == first or st[pos - 1] in vowels) and st[pos + 1] in vowels:
nxt = ('H', 2)
else: # (also takes care of 'HH')
nxt = (None, 1)
elif ch == 'J':
# obvious spanish, 'jose', 'san jacinto'
if st[pos:pos + 4] == 'JOSE' or st[first:first + 4] == 'SAN ':
if (pos == first and st[pos + 4] == ' ') or st[first:first + 4] == 'SAN ':
nxt = ('H', )
else:
nxt = ('J', 'H')
elif pos == first and st[pos:pos + 4] != 'JOSE':
nxt = ('J', 'A') # Yankelovich/Jankelowicz
else:
# spanish pron. of e.g. 'bajador'
if st[pos - 1] in vowels and not is_slavo_germanic \
and st[pos + 1] in ['A', 'O']:
nxt = ('J', 'H')
else:
if pos == last:
nxt = ('J', ' ')
else:
if st[pos + 1] not in ["L", "T", "K", "S", "N", "M", "B", "Z"] \
and st[pos - 1] not in ["S", "K", "L"]:
nxt = ('J', )
else:
nxt = (None, )
if st[pos + 1] == 'J':
nxt = nxt + (2, )
else:
nxt = nxt + (1, )
elif ch == 'K':
if st[pos + 1] == 'K':
nxt = ('K', 2)
else:
nxt = ('K', 1)
elif ch == 'L':
if st[pos + 1] == 'L':
# spanish e.g. 'cabrillo', 'gallegos'
if (pos == (last - 2) and st[pos - 1:pos + 3] in ["ILLO", "ILLA", "ALLE"]) \
or ((st[last - 1:last + 1] in ["AS", "OS"] or st[last] in ["A", "O"]) \
and st[pos - 1:pos + 3] == 'ALLE'):
nxt = ('L', ' ', 2)
else:
nxt = ('L', 2)
else:
nxt = ('L', 1)
elif ch == 'M':
if (st[pos + 1:pos + 4] == 'UMB' \
and (pos + 1 == last or st[pos + 2:pos + 4] == 'ER')) \
or st[pos + 1] == 'M':
nxt = ('M', 2)
else:
nxt = ('M', 1)
elif ch == 'N':
if st[pos + 1] == 'N':
nxt = ('N', 2)
else:
nxt = ('N', 1)
elif ch == u'\xd1': # UTF-8 encoding of ト
nxt = ('N', 1)
elif ch == 'P':
if st[pos + 1] == 'H':
nxt = ('F', 2)
elif st[pos + 1] in ['P', 'B']: # also account for "campbell", "raspberry"
nxt = ('P', 2)
else:
nxt = ('P', 1)
elif ch == 'Q':
if st[pos + 1] == 'Q':
nxt = ('K', 2)
else:
nxt = ('K', 1)
elif ch == 'R':
# french e.g. 'rogier', but exclude 'hochmeier'
if pos == last and not is_slavo_germanic \
and st[pos - 2:pos] == 'IE' and st[pos - 4:pos - 2] not in ['ME', 'MA']:
nxt = ('', 'R')
else:
nxt = ('R', )
if st[pos + 1] == 'R':
nxt = nxt + (2, )
else:
nxt = nxt + (1, )
elif ch == 'S':
# special cases 'island', 'isle', 'carlisle', 'carlysle'
if st[pos - 1:pos + 2] in ['ISL', 'YSL']:
nxt = (None, 1)
# special case 'sugar-'
elif pos == first and st[first:first + 5] == 'SUGAR':
nxt = ('X', 'S', 1)
elif st[pos:pos + 2] == 'SH':
# germanic
if st[pos + 1:pos + 5] in ["HEIM", "HOEK", "HOLM", "HOLZ"]:
nxt = ('S', 2)
else:
nxt = ('X', 2)
# italian & armenian
elif st[pos:pos + 3] in ["SIO", "SIA"] or st[pos:pos + 4] == 'SIAN':
if not is_slavo_germanic:
nxt = ('S', 'X', 3)
else:
nxt = ('S', 3)
# german & anglicisations, e.g. 'smith' match 'schmidt', 'snider' match 'schneider'
# also, -sz- in slavic language altho in hungarian it is pronounced 's'
elif (pos == first and st[pos + 1] in ["M", "N", "L", "W"]) or st[pos + 1] == 'Z':
nxt = ('S', 'X')
if st[pos + 1] == 'Z':
nxt = nxt + (2, )
else:
nxt = nxt + (1, )
elif st[pos:pos + 2] == 'SC':
# Schlesinger's rule
if st[pos + 2] == 'H':
# dutch origin, e.g. 'school', 'schooner'
if st[pos + 3:pos + 5] in ["OO", "ER", "EN", "UY", "ED", "EM"]:
# 'schermerhorn', 'schenker'
if st[pos + 3:pos + 5] in ['ER', 'EN']:
nxt = ('X', 'SK', 3)
else:
nxt = ('SK', 3)
else:
if pos == first and st[first + 3] not in vowels and st[first + 3] != 'W':
nxt = ('X', 'S', 3)
else:
nxt = ('X', 3)
elif st[pos + 2] in ['I', 'E', 'Y']:
nxt = ('S', 3)
else:
nxt = ('SK', 3)
# french e.g. 'resnais', 'artois'
elif pos == last and st[pos - 2:pos] in ['AI', 'OI']:
nxt = ('', 'S', 1)
else:
nxt = ('S', )
if st[pos + 1] in ['S', 'Z']:
nxt = nxt + (2, )
else:
nxt = nxt + (1, )
elif ch == 'T':
if st[pos:pos + 4] == 'TION':
nxt = ('X', 3)
elif st[pos:pos + 3] in ['TIA', 'TCH']:
nxt = ('X', 3)
elif st[pos:pos + 2] == 'TH' or st[pos:pos + 3] == 'TTH':
# special case 'thomas', 'thames' or germanic
if st[pos + 2:pos + 4] in ['OM', 'AM'] or st[first:first + 4] in ['VON ', 'VAN '] \
or st[first:first + 3] == 'SCH':
nxt = ('T', 2)
else:
nxt = ('0', 'T', 2)
elif st[pos + 1] in ['T', 'D']:
nxt = ('T', 2)
else:
nxt = ('T', 1)
elif ch == 'V':
if st[pos + 1] == 'V':
nxt = ('F', 2)
else:
nxt = ('F', 1)
elif ch == 'W':
# can also be in middle of word
if st[pos:pos + 2] == 'WR':
nxt = ('R', 2)
elif pos == first and (st[pos + 1] in vowels or st[pos:pos + 2] == 'WH'):
# Wasserman should match Vasserman
if st[pos + 1] in vowels:
nxt = ('A', 'F', 1)
else:
nxt = ('A', 1)
# Arnow should match Arnoff
elif (pos == last and st[pos - 1] in vowels) \
or st[pos - 1:pos + 4] in ["EWSKI", "EWSKY", "OWSKI", "OWSKY"] \
or st[first:first + 3] == 'SCH':
nxt = ('', 'F', 1)
# polish e.g. 'filipowicz'
elif st[pos:pos + 4] in ["WICZ", "WITZ"]:
nxt = ('TS', 'FX', 4)
else: # default is to skip it
nxt = (None, 1)
elif ch == 'X':
# french e.g. breaux
nxt = (None, )
if not(pos == last and (st[pos - 3:pos] in ["IAU", "EAU"] \
or st[pos - 2:pos] in ['AU', 'OU'])):
nxt = ('KS', )
if st[pos + 1] in ['C', 'X']:
nxt = nxt + (2, )
else:
nxt = nxt + (1, )
elif ch == 'Z':
# chinese pinyin e.g. 'zhao'
if st[pos + 1] == 'H':
nxt = ('J', )
elif st[pos + 1:pos + 3] in ["ZO", "ZI", "ZA"] \
or (is_slavo_germanic and pos > first and st[pos - 1] != 'T'):
nxt = ('S', 'TS')
else:
nxt = ('S', )
if st[pos + 1] == 'Z' or st[pos + 1] == 'H':
nxt = nxt + (2, )
else:
nxt = nxt + (1, )
# ----------------------------------
# --- end checking letters------
# ----------------------------------
#print str(nxt)
if len(nxt) == 2:
if nxt[0]:
pri += nxt[0]
sec += nxt[0]
pos += nxt[1]
elif len(nxt) == 3:
if nxt[0]:
pri += nxt[0]
if nxt[1]:
sec += nxt[1]
pos += nxt[2]
if pri == sec:
return (pri, '')
else:
return (pri, sec)
if __name__ == '__main__':
import doctest
doctest.testmod()
|
Added gc_lang/fr/dictionnaire/metaphone3.java version [949c1c21a9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 |
/*
Copyright 2010, Lawrence Philips
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* A request from the author: Please comment and sign any changes you make to the Metaphone 3 reference implementation.
*/
/**
* Metaphone 3<br>
* VERSION 2.1.3
*
* by Lawrence Philips<br>
*
* Metaphone 3 is designed to return an *approximate* phonetic key (and an alternate
* approximate phonetic key when appropriate) that should be the same for English
* words, and most names familiar in the United States, that are pronounced *similarly*.
* The key value is *not* intended to be an *exact* phonetic, or even phonemic,
* representation of the word. This is because a certain degree of 'fuzziness' has
* proven to be useful in compensating for variations in pronunciation, as well as
* misheard pronunciations. For example, although americans are not usually aware of it,
* the letter 's' is normally pronounced 'z' at the end of words such as "sounds".<br><br>
*
* The 'approximate' aspect of the encoding is implemented according to the following rules:<br><br>
*
* (1) All vowels are encoded to the same value - 'A'. If the parameter encodeVowels
* is set to false, only *initial* vowels will be encoded at all. If encodeVowels is set
* to true, 'A' will be encoded at all places in the word that any vowels are normally
* pronounced. 'W' as well as 'Y' are treated as vowels. Although there are differences in
* the pronunciation of 'W' and 'Y' in different circumstances that lead to their being
* classified as vowels under some circumstances and as consonants in others, for the purposes
* of the 'fuzziness' component of the Soundex and Metaphone family of algorithms they will
* be always be treated here as vowels.<br><br>
*
* (2) Voiced and un-voiced consonant pairs are mapped to the same encoded value. This
* means that:<br>
* 'D' and 'T' -> 'T'<br>
* 'B' and 'P' -> 'P'<br>
* 'G' and 'K' -> 'K'<br>
* 'Z' and 'S' -> 'S'<br>
* 'V' and 'F' -> 'F'<br><br>
*
* - In addition to the above voiced/unvoiced rules, 'CH' and 'SH' -> 'X', where 'X'
* represents the "-SH-" and "-CH-" sounds in Metaphone 3 encoding.<br><br>
*
* - Also, the sound that is spelled as "TH" in English is encoded to '0' (zero symbol). (Although
* Americans are not usually aware of it, "TH" is pronounced in a voiced (e.g. "that") as
* well as an unvoiced (e.g. "theater") form, which are naturally mapped to the same encoding.)<br><br>
*
* The encodings in this version of Metaphone 3 are according to pronunciations common in the
* United States. This means that they will be inaccurate for consonant pronunciations that
* are different in the United Kingdom, for example "tube" -> "CHOOBE" -> XAP rather than american TAP.<br><br>
*
* Metaphone 3 was preceded by by Soundex, patented in 1919, and Metaphone and Double Metaphone,
* developed by Lawrence Philips. All of these algorithms resulted in a significant number of
* incorrect encodings. Metaphone3 was tested against a database of about 100 thousand English words,
* names common in the United States, and non-English words found in publications in the United States,
* with an emphasis on words that are commonly mispronounced, prepared by the Moby Words website,
* but with the Moby Words 'phonetic' encodings algorithmically mapped to Double Metaphone encodings.
* Metaphone3 increases the accuracy of encoding of english words, common names, and non-English
* words found in american publications from the 89% for Double Metaphone, to over 98%.<br><br>
*
* DISCLAIMER:
* Anthropomorphic Software LLC claims only that Metaphone 3 will return correct encodings,
* within the 'fuzzy' definition of correct as above, for a very high percentage of correctly
* spelled English and commonly recognized non-English words. Anthropomorphic Software LLC
* warns the user that a number of words remain incorrectly encoded, that misspellings may not
* be encoded 'properly', and that people often have differing ideas about the pronunciation
* of a word. Therefore, Metaphone 3 is not guaranteed to return correct results every time, and
* so a desired target word may very well be missed. Creators of commercial products should
* keep in mind that systems like Metaphone 3 produce a 'best guess' result, and should
* condition the expectations of end users accordingly.<br><br>
*
* METAPHONE3 IS PROVIDED "AS IS" WITHOUT
* WARRANTY OF ANY KIND. LAWRENCE PHILIPS AND ANTHROPOMORPHIC SOFTWARE LLC
* MAKE NO WARRANTIES, EXPRESS OR IMPLIED, THAT IT IS FREE OF ERROR,
* OR ARE CONSISTENT WITH ANY PARTICULAR STANDARD OF MERCHANTABILITY,
* OR THAT IT WILL MEET YOUR REQUIREMENTS FOR ANY PARTICULAR APPLICATION.
* LAWRENCE PHILIPS AND ANTHROPOMORPHIC SOFTWARE LLC DISCLAIM ALL LIABILITY
* FOR DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES RESULTING FROM USE
* OF THIS SOFTWARE.
*
* @author Lawrence Philips
*
* Metaphone 3 is designed to return an <i>approximate</i> phonetic key (and an alternate
* approximate phonetic key when appropriate) that should be the same for English
* words, and most names familiar in the United States, that are pronounced "similarly".
* The key value is <i>not</i> intended to be an exact phonetic, or even phonemic,
* representation of the word. This is because a certain degree of 'fuzziness' has
* proven to be useful in compensating for variations in pronunciation, as well as
* misheard pronunciations. For example, although americans are not usually aware of it,
* the letter 's' is normally pronounced 'z' at the end of words such as "sounds".<br><br>
*
* The 'approximate' aspect of the encoding is implemented according to the following rules:<br><br>
*
* (1) All vowels are encoded to the same value - 'A'. If the parameter encodeVowels
* is set to false, only *initial* vowels will be encoded at all. If encodeVowels is set
* to true, 'A' will be encoded at all places in the word that any vowels are normally
* pronounced. 'W' as well as 'Y' are treated as vowels. Although there are differences in
* the pronunciation of 'W' and 'Y' in different circumstances that lead to their being
* classified as vowels under some circumstances and as consonants in others, for the purposes
* of the 'fuzziness' component of the Soundex and Metaphone family of algorithms they will
* be always be treated here as vowels.<br><br>
*
* (2) Voiced and un-voiced consonant pairs are mapped to the same encoded value. This
* means that:<br>
* 'D' and 'T' -> 'T'<br>
* 'B' and 'P' -> 'P'<br>
* 'G' and 'K' -> 'K'<br>
* 'Z' and 'S' -> 'S'<br>
* 'V' and 'F' -> 'F'<br><br>
*
* - In addition to the above voiced/unvoiced rules, 'CH' and 'SH' -> 'X', where 'X'
* represents the "-SH-" and "-CH-" sounds in Metaphone 3 encoding.<br><br>
*
* - Also, the sound that is spelled as "TH" in English is encoded to '0' (zero symbol). (Although
* americans are not usually aware of it, "TH" is pronounced in a voiced (e.g. "that") as
* well as an unvoiced (e.g. "theater") form, which are naturally mapped to the same encoding.)<br><br>
*
* In the "Exact" encoding, voiced/unvoiced pairs are <i>not</i> mapped to the same encoding, except
* for the voiced and unvoiced versions of 'TH', sounds such as 'CH' and 'SH', and for 'S' and 'Z',
* so that the words whose metaph keys match will in fact be closer in pronunciation that with the
* more approximate setting. Keep in mind that encoding settings for search strings should always
* be exactly the same as the encoding settings of the stored metaph keys in your database!
* Because of the considerably increased accuracy of Metaphone3, it is now possible to use this
* setting and have a very good chance of getting a correct encoding.
* <br><br>
* In the Encode Vowels encoding, all non-initial vowels and diphthongs will be encoded to
* 'A', and there will only be one such vowel encoding character between any two consonants.
* It turns out that there are some surprising wrinkles to encoding non-initial vowels in
* practice, pre-eminently in inversions between spelling and pronunciation such as e.g.
* "wrinkle" => 'RANKAL', where the last two sounds are inverted when spelled.
* <br><br>
* The encodings in this version of Metaphone 3 are according to pronunciations common in the
* United States. This means that they will be inaccurate for consonant pronunciations that
* are different in the United Kingdom, for example "tube" -> "CHOOBE" -> XAP rather than american TAP.
* <br><br>
*
*/
package com.google.refine.clustering.binning;
public class Metaphone3 {
/** Length of word sent in to be encoded, as
* measured at beginning of encoding. */
int m_length;
/** Length of encoded key string. */
int m_metaphLength;
/** Flag whether or not to encode non-initial vowels. */
boolean m_encodeVowels;
/** Flag whether or not to encode consonants as exactly
* as possible. */
boolean m_encodeExact;
/** Internal copy of word to be encoded, allocated separately
* from string pointed to in incoming parameter. */
String m_inWord;
/** Running copy of primary key. */
StringBuffer m_primary;
/** Running copy of secondary key. */
StringBuffer m_secondary;
/** Index of character in m_inWord currently being
* encoded. */
int m_current;
/** Index of last character in m_inWord. */
int m_last;
/** Flag that an AL inversion has already been done. */
boolean flag_AL_inversion;
/** Default size of key storage allocation */
int MAX_KEY_ALLOCATION = 32;
/** Default maximum length of encoded key. */
int DEFAULT_MAX_KEY_LENGTH = 8;
////////////////////////////////////////////////////////////////////////////////
// Metaphone3 class definition
////////////////////////////////////////////////////////////////////////////////
/**
* Constructor, default. This constructor is most convenient when
* encoding more than one word at a time. New words to encode can
* be set using SetWord(char *).
*
*/
Metaphone3()
{
m_primary = new StringBuffer();
m_secondary = new StringBuffer();
m_metaphLength = DEFAULT_MAX_KEY_LENGTH;
m_encodeVowels = false;
m_encodeExact = false;
}
/**
* Constructor, parameterized. The Metaphone3 object will
* be initialized with the incoming string, and can be called
* on to encode this string. This constructor is most convenient
* when only one word needs to be encoded.
*
* @param in pointer to char string of word to be encoded.
*
*/
Metaphone3(String in)
{
this();
SetWord(in);
}
/**
* Sets word to be encoded.
*
* @param in pointer to EXTERNALLY ALLOCATED char string of
* the word to be encoded.
*
*/
void SetWord(String in)
{
m_inWord = in.toUpperCase();;
m_length = m_inWord.length();
}
/**
* Sets length allocated for output keys.
* If incoming number is greater than maximum allowable
* length returned by GetMaximumKeyLength(), set key length
* to maximum key length and return false; otherwise, set key
* length to parameter value and return true.
*
* @param inKeyLength new length of key.
* @return true if able to set key length to requested value.
*
*/
boolean SetKeyLength(int inKeyLength)
{
if(inKeyLength < 1)
{
// can't have that -
// no room for terminating null
inKeyLength = 1;
}
if(inKeyLength > MAX_KEY_ALLOCATION)
{
m_metaphLength = MAX_KEY_ALLOCATION;
return false;
}
m_metaphLength = inKeyLength;
return true;
}
/**
* Adds an encoding character to the encoded key value string - one parameter version.
*
* @param main primary encoding character to be added to encoded key string.
*/
void MetaphAdd(String in)
{
if(!(in.equals("A")
&& (m_primary.length() > 0)
&& (m_primary.charAt(m_primary.length() - 1) == 'A')))
{
m_primary.append(in);
}
if(!(in.equals("A")
&& (m_secondary.length() > 0)
&& (m_secondary.charAt(m_secondary.length() - 1) == 'A')))
{
m_secondary.append(in);
}
}
/**
* Adds an encoding character to the encoded key value string - two parameter version
*
* @param main primary encoding character to be added to encoded key string
* @param alt alternative encoding character to be added to encoded alternative key string
*
*/
void MetaphAdd(String main, String alt)
{
if(!(main.equals("A")
&& (m_primary.length() > 0)
&& (m_primary.charAt(m_primary.length() - 1) == 'A')))
{
m_primary.append(main);
}
if(!(alt.equals("A")
&& (m_secondary.length() > 0)
&& (m_secondary.charAt(m_secondary.length() - 1) == 'A')))
{
if(!alt.isEmpty())
{
m_secondary.append(alt);
}
}
}
/**
* Adds an encoding character to the encoded key value string - Exact/Approx version
*
* @param mainExact primary encoding character to be added to encoded key string if
* m_encodeExact is set
*
* @param altExact alternative encoding character to be added to encoded alternative
* key string if m_encodeExact is set
*
* @param main primary encoding character to be added to encoded key string
*
* @param alt alternative encoding character to be added to encoded alternative key string
*
*/
void MetaphAddExactApprox(String mainExact, String altExact, String main, String alt)
{
if(m_encodeExact)
{
MetaphAdd(mainExact, altExact);
}
else
{
MetaphAdd(main, alt);
}
}
/**
* Adds an encoding character to the encoded key value string - Exact/Approx version
*
* @param mainExact primary encoding character to be added to encoded key string if
* m_encodeExact is set
*
* @param main primary encoding character to be added to encoded key string
*
*/
void MetaphAddExactApprox(String mainExact, String main)
{
if(m_encodeExact)
{
MetaphAdd(mainExact);
}
else
{
MetaphAdd(main);
}
}
/** Retrieves maximum number of characters currently allocated for encoded key.
*
* @return short integer representing the length allowed for the key.
*/
int GetKeyLength(){return m_metaphLength;}
/** Retrieves maximum number of characters allowed for encoded key.
*
* @return short integer representing the length of allocated storage for the key.
*/
int GetMaximumKeyLength(){return (int)MAX_KEY_ALLOCATION;}
/** Sets flag that causes Metaphone3 to encode non-initial vowels. However, even
* if there are more than one vowel sound in a vowel sequence (i.e.
* vowel diphthong, etc.), only one 'A' will be encoded before the next consonant or the
* end of the word.
*
* @param inEncodeVowels Non-initial vowels encoded if true, not if false.
*/
void SetEncodeVowels(boolean inEncodeVowels){m_encodeVowels = inEncodeVowels;}
/** Retrieves setting determining whether or not non-initial vowels will be encoded.
*
* @return true if the Metaphone3 object has been set to encode non-initial vowels, false if not.
*/
boolean GetEncodeVowels(){return m_encodeVowels;}
/** Sets flag that causes Metaphone3 to encode consonants as exactly as possible.
* This does not include 'S' vs. 'Z', since americans will pronounce 'S' at the
* at the end of many words as 'Z', nor does it include "CH" vs. "SH". It does cause
* a distinction to be made between 'B' and 'P', 'D' and 'T', 'G' and 'K', and 'V'
* and 'F'.
*
* @param inEncodeExact consonants to be encoded "exactly" if true, not if false.
*/
void SetEncodeExact(boolean inEncodeExact){m_encodeExact = inEncodeExact;}
/** Retrieves setting determining whether or not consonants will be encoded "exactly".
*
* @return true if the Metaphone3 object has been set to encode "exactly", false if not.
*/
boolean GetEncodeExact(){return m_encodeExact;}
/** Retrieves primary encoded key.
*
* @return a character pointer to the primary encoded key
*/
String GetMetaph()
{
String primary = new String(m_primary);
return primary;
}
/** Retrieves alternate encoded key, if any.
*
* @return a character pointer to the alternate encoded key
*/
String GetAlternateMetaph()
{
String secondary = new String(m_secondary);
return secondary;
}
/**
* Test for close front vowels
*
* @return true if close front vowel
*/
boolean Front_Vowel(int at)
{
if(((CharAt(at) == 'E') || (CharAt(at) == 'I') || (CharAt(at) == 'Y')))
{
return true;
}
return false;
}
/**
* Detect names or words that begin with spellings
* typical of german or slavic words, for the purpose
* of choosing alternate pronunciations correctly
*
*/
boolean SlavoGermanic()
{
if(StringAt(0, 3, "SCH", "")
|| StringAt(0, 2, "SW", "")
|| (CharAt(0) == 'J')
|| (CharAt(0) == 'W'))
{
return true;
}
return false;
}
/**
* Tests if character is a vowel
*
* @param inChar character to be tested in string to be encoded
* @return true if character is a vowel, false if not
*
*/
boolean IsVowel(char inChar)
{
if((inChar == 'A')
|| (inChar == 'E')
|| (inChar == 'I')
|| (inChar == 'O')
|| (inChar == 'U')
|| (inChar == 'Y')
|| (inChar == 'À')
|| (inChar == 'Á')
|| (inChar == 'Â')
|| (inChar == 'Ã')
|| (inChar == 'Ä')
|| (inChar == 'Å')
|| (inChar == 'Æ')
|| (inChar == 'È')
|| (inChar == 'É')
|| (inChar == 'Ê')
|| (inChar == 'Ë')
|| (inChar == 'Ì')
|| (inChar == 'Í')
|| (inChar == 'Î')
|| (inChar == 'Ï')
|| (inChar == 'Ò')
|| (inChar == 'Ó')
|| (inChar == 'Ô')
|| (inChar == 'Õ')
|| (inChar == 'Ö')
|| (inChar == 'Œ')
|| (inChar == 'Ø')
|| (inChar == 'Ù')
|| (inChar == 'Ú')
|| (inChar == 'Û')
|| (inChar == 'Ü')
|| (inChar == 'Ý')
|| (inChar == 'Ÿ'))
{
return true;
}
return false;
}
/**
* Tests if character in the input string is a vowel
*
* @param at position of character to be tested in string to be encoded
* @return true if character is a vowel, false if not
*
*/
boolean IsVowel(int at)
{
if((at < 0) || (at >= m_length))
{
return false;
}
char it = CharAt(at);
if(IsVowel(it))
{
return true;
}
return false;
}
/**
* Skips over vowels in a string. Has exceptions for skipping consonants that
* will not be encoded.
*
* @param at position, in string to be encoded, of character to start skipping from
*
* @return position of next consonant in string to be encoded
*/
int SkipVowels(int at)
{
if(at < 0)
{
return 0;
}
if(at >= m_length)
{
return m_length;
}
char it = CharAt(at);
while(IsVowel(it) || (it == 'W'))
{
if(StringAt(at, 4, "WICZ", "WITZ", "WIAK", "")
|| StringAt((at - 1), 5, "EWSKI", "EWSKY", "OWSKI", "OWSKY", "")
|| (StringAt(at, 5, "WICKI", "WACKI", "") && ((at + 4) == m_last)))
{
break;
}
at++;
if(((CharAt(at - 1) == 'W') && (CharAt(at) == 'H'))
&& !(StringAt(at, 3, "HOP", "")
|| StringAt(at, 4, "HIDE", "HARD", "HEAD", "HAWK", "HERD", "HOOK", "HAND", "HOLE", "")
|| StringAt(at, 5, "HEART", "HOUSE", "HOUND", "")
|| StringAt(at, 6, "HAMMER", "")))
{
at++;
}
if(at > (m_length - 1))
{
break;
}
it = CharAt(at);
}
return at;
}
/**
* Advanced counter m_current so that it indexes the next character to be encoded
*
* @param ifNotEncodeVowels number of characters to advance if not encoding internal vowels
* @param ifEncodeVowels number of characters to advance if encoding internal vowels
*
*/
void AdvanceCounter(int ifNotEncodeVowels, int ifEncodeVowels)
{
if(!m_encodeVowels)
{
m_current += ifNotEncodeVowels;
}
else
{
m_current += ifEncodeVowels;
}
}
/**
* Subscript safe .charAt()
*
* @param at index of character to access
* @return null if index out of bounds, .charAt() otherwise
*/
char CharAt(int at)
{
// check substring bounds
if((at < 0)
|| (at > (m_length - 1)))
{
return '\0';
}
return m_inWord.charAt(at);
}
/**
* Tests whether the word is the root or a regular english inflection
* of it, e.g. "ache", "achy", "aches", "ached", "aching", "achingly"
* This is for cases where we want to match only the root and corresponding
* inflected forms, and not completely different words which may have the
* same substring in them.
*/
boolean RootOrInflections(String inWord, String root)
{
int len = root.length();
String test;
test = root + "S";
if((inWord.equals(root))
|| (inWord.equals(test)))
{
return true;
}
if(root.charAt(len - 1) != 'E')
{
test = root + "ES";
}
if(inWord.equals(test))
{
return true;
}
if(root.charAt(len - 1) != 'E')
{
test = root + "ED";
}
else
{
test = root + "D";
}
if(inWord.equals(test))
{
return true;
}
if(root.charAt(len - 1) == 'E')
{
root = root.substring(0, len - 1);
}
test = root + "ING";
if(inWord.equals(test))
{
return true;
}
test = root + "INGLY";
if(inWord.equals(test))
{
return true;
}
test = root + "Y";
if(inWord.equals(test))
{
return true;
}
return false;
}
/**
* Determines if one of the substrings sent in is the same as
* what is at the specified position in the string being encoded.
*
* @param start
* @param length
* @param compareStrings
* @return
*/
boolean StringAt(int start, int length, String... compareStrings)
{
// check substring bounds
if((start < 0)
|| (start > (m_length - 1))
|| ((start + length - 1) > (m_length - 1)))
{
return false;
}
String target = m_inWord.substring(start, (start + length));
for(String strFragment : compareStrings)
{
if(target.equals(strFragment))
{
return true;
}
}
return false;
}
/**
* Encodes input string to one or two key values according to Metaphone 3 rules.
*
*/
void Encode()
{
flag_AL_inversion = false;
m_current = 0;
m_primary.setLength(0);
m_secondary.setLength(0);
if(m_length < 1)
{
return;
}
//zero based index
m_last = m_length - 1;
///////////main loop//////////////////////////
while(!(m_primary.length() > m_metaphLength) && !(m_secondary.length() > m_metaphLength))
{
if(m_current >= m_length)
{
break;
}
switch(CharAt(m_current))
{
case 'B':
Encode_B();
break;
case 'ß':
case 'Ç':
MetaphAdd("S");
m_current++;
break;
case 'C':
Encode_C();
break;
case 'D':
Encode_D();
break;
case 'F':
Encode_F();
break;
case 'G':
Encode_G();
break;
case 'H':
Encode_H();
break;
case 'J':
Encode_J();
break;
case 'K':
Encode_K();
break;
case 'L':
Encode_L();
break;
case 'M':
Encode_M();
break;
case 'N':
Encode_N();
break;
case 'Ñ':
MetaphAdd("N");
m_current++;
break;
case 'P':
Encode_P();
break;
case 'Q':
Encode_Q();
break;
case 'R':
Encode_R();
break;
case 'S':
Encode_S();
break;
case 'T':
Encode_T();
break;
case 'Ð': // eth
case 'Þ': // thorn
MetaphAdd("0");
m_current++;
break;
case 'V':
Encode_V();
break;
case 'W':
Encode_W();
break;
case 'X':
Encode_X();
break;
case 'Š':
MetaphAdd("X");
m_current++;
break;
case 'Ž':
MetaphAdd("S");
m_current++;
break;
case 'Z':
Encode_Z();
break;
default:
if(IsVowel(CharAt(m_current)))
{
Encode_Vowels();
break;
}
m_current++;
}
}
//only give back m_metaphLength number of chars in m_metaph
if(m_primary.length() > m_metaphLength)
{
m_primary.setLength(m_metaphLength);
}
if(m_secondary.length() > m_metaphLength)
{
m_secondary.setLength(m_metaphLength);
}
// it is possible for the two metaphs to be the same
// after truncation. lose the second one if so
if((m_primary.toString()).equals(m_secondary.toString()))
{
m_secondary.setLength(0);
}
}
/**
* Encodes all initial vowels to A.
*
* Encodes non-initial vowels to A if m_encodeVowels is true
*
*
*/
void Encode_Vowels()
{
if(m_current == 0)
{
// all init vowels map to 'A'
// as of Double Metaphone
MetaphAdd("A");
}
else if(m_encodeVowels)
{
if(CharAt(m_current) != 'E')
{
if(Skip_Silent_UE())
{
return;
}
if (O_Silent())
{
m_current++;
return;
}
// encode all vowels and
// diphthongs to the same value
MetaphAdd("A");
}
else
{
Encode_E_Pronounced();
}
}
if(!(!IsVowel(m_current - 2) && StringAt((m_current - 1), 4, "LEWA", "LEWO", "LEWI", "")))
{
m_current = SkipVowels(m_current);
}
else
{
m_current++;
}
}
/**
* Encodes cases where non-initial 'e' is pronounced, taking
* care to detect unusual cases from the greek.
*
* Only executed if non initial vowel encoding is turned on
*
*
*/
void Encode_E_Pronounced()
{
// special cases with two pronunciations
// 'agape' 'lame' 'resume'
if((StringAt(0, 4, "LAME", "SAKE", "PATE", "") && (m_length == 4))
|| (StringAt(0, 5, "AGAPE", "") && (m_length == 5))
|| ((m_current == 5) && StringAt(0, 6, "RESUME", "")))
{
MetaphAdd("", "A");
return;
}
// special case "inge" => 'INGA', 'INJ'
if(StringAt(0, 4, "INGE", "")
&& (m_length == 4))
{
MetaphAdd("A", "");
return;
}
// special cases with two pronunciations
// special handling due to the difference in
// the pronunciation of the '-D'
if((m_current == 5) && StringAt(0, 7, "BLESSED", "LEARNED", ""))
{
MetaphAddExactApprox("D", "AD", "T", "AT");
m_current += 2;
return;
}
// encode all vowels and diphthongs to the same value
if((!E_Silent()
&& !flag_AL_inversion
&& !Silent_Internal_E())
|| E_Pronounced_Exceptions())
{
MetaphAdd("A");
}
// now that we've visited the vowel in question
flag_AL_inversion = false;
}
/**
* Tests for cases where non-initial 'o' is not pronounced
* Only executed if non initial vowel encoding is turned on
*
* @return true if encoded as silent - no addition to m_metaph key
*
*/
boolean O_Silent()
{
// if "iron" at beginning or end of word and not "irony"
if ((CharAt(m_current) == 'O')
&& StringAt((m_current - 2), 4, "IRON", ""))
{
if ((StringAt(0, 4, "IRON", "")
|| (StringAt((m_current - 2), 4, "IRON", "")
&& (m_last == (m_current + 1))))
&& !StringAt((m_current - 2), 6, "IRONIC", ""))
{
return true;
}
}
return false;
}
/**
* Tests and encodes cases where non-initial 'e' is never pronounced
* Only executed if non initial vowel encoding is turned on
*
* @return true if encoded as silent - no addition to m_metaph key
*
*/
boolean E_Silent()
{
if(E_Pronounced_At_End())
{
return false;
}
// 'e' silent when last letter, altho
if((m_current == m_last)
// also silent if before plural 's'
// or past tense or participle 'd', e.g.
// 'grapes' and 'banished' => PNXT
|| ((StringAt(m_last, 1, "S", "D", "")
&& (m_current > 1)
&& ((m_current + 1) == m_last)
// and not e.g. "nested", "rises", or "pieces" => RASAS
&& !(StringAt((m_current - 1), 3, "TED", "SES", "CES", "")
|| StringAt(0, 9, "ANTIPODES", "ANOPHELES", "")
|| StringAt(0, 8, "MOHAMMED", "MUHAMMED", "MOUHAMED", "")
|| StringAt(0, 7, "MOHAMED", "")
|| StringAt(0, 6, "NORRED", "MEDVED", "MERCED", "ALLRED", "KHALED", "RASHED", "MASJED", "")
|| StringAt(0, 5, "JARED", "AHMED", "HAMED", "JAVED", "")
|| StringAt(0, 4, "ABED", "IMED", ""))))
// e.g. 'wholeness', 'boneless', 'barely'
|| (StringAt((m_current + 1), 4, "NESS", "LESS", "") && ((m_current + 4) == m_last))
|| (StringAt((m_current + 1), 2, "LY", "") && ((m_current + 2) == m_last)
&& !StringAt(0, 6, "CICELY", "")))
{
return true;
}
return false;
}
/**
* Tests for words where an 'E' at the end of the word
* is pronounced
*
* special cases, mostly from the greek, spanish, japanese,
* italian, and french words normally having an acute accent.
* also, pronouns and articles
*
* Many Thanks to ali, QuentinCompson, JeffCO, ToonScribe, Xan,
* Trafalz, and VictorLaszlo, all of them atriots from the Eschaton,
* for all their fine contributions!
*
* @return true if 'E' at end is pronounced
*
*/
boolean E_Pronounced_At_End()
{
if((m_current == m_last)
&& (StringAt((m_current - 6), 7, "STROPHE", "")
// if a vowel is before the 'E', vowel eater will have eaten it.
//otherwise, consonant + 'E' will need 'E' pronounced
|| (m_length == 2)
|| ((m_length == 3) && !IsVowel(0))
// these german name endings can be relied on to have the 'e' pronounced
|| (StringAt((m_last - 2), 3, "BKE", "DKE", "FKE", "KKE", "LKE",
"NKE", "MKE", "PKE", "TKE", "VKE", "ZKE", "")
&& !StringAt(0, 5, "FINKE", "FUNKE", "")
&& !StringAt(0, 6, "FRANKE", ""))
|| StringAt((m_last - 4), 5, "SCHKE", "")
|| (StringAt(0, 4, "ACME", "NIKE", "CAFE", "RENE", "LUPE", "JOSE", "ESME", "") && (m_length == 4))
|| (StringAt(0, 5, "LETHE", "CADRE", "TILDE", "SIGNE", "POSSE", "LATTE", "ANIME", "DOLCE", "CROCE",
"ADOBE", "OUTRE", "JESSE", "JAIME", "JAFFE", "BENGE", "RUNGE",
"CHILE", "DESME", "CONDE", "URIBE", "LIBRE", "ANDRE", "") && (m_length == 5))
|| (StringAt(0, 6, "HECATE", "PSYCHE", "DAPHNE", "PENSKE", "CLICHE", "RECIPE",
"TAMALE", "SESAME", "SIMILE", "FINALE", "KARATE", "RENATE", "SHANTE",
"OBERLE", "COYOTE", "KRESGE", "STONGE", "STANGE", "SWAYZE", "FUENTE",
"SALOME", "URRIBE", "") && (m_length == 6))
|| (StringAt(0, 7, "ECHIDNE", "ARIADNE", "MEINEKE", "PORSCHE", "ANEMONE", "EPITOME",
"SYNCOPE", "SOUFFLE", "ATTACHE", "MACHETE", "KARAOKE", "BUKKAKE",
"VICENTE", "ELLERBE", "VERSACE", "") && (m_length == 7))
|| (StringAt(0, 8, "PENELOPE", "CALLIOPE", "CHIPOTLE", "ANTIGONE", "KAMIKAZE", "EURIDICE",
"YOSEMITE", "FERRANTE", "") && (m_length == 8))
|| (StringAt(0, 9, "HYPERBOLE", "GUACAMOLE", "XANTHIPPE", "") && (m_length == 9))
|| (StringAt(0, 10, "SYNECDOCHE", "") && (m_length == 10))))
{
return true;
}
return false;
}
/**
* Detect internal silent 'E's e.g. "roseman",
* "firestone"
*
*/
boolean Silent_Internal_E()
{
// 'olesen' but not 'olen' RAKE BLAKE
if((StringAt(0, 3, "OLE", "")
&& E_Silent_Suffix(3) && !E_Pronouncing_Suffix(3))
|| (StringAt(0, 4, "BARE", "FIRE", "FORE", "GATE", "HAGE", "HAVE",
"HAZE", "HOLE", "CAPE", "HUSE", "LACE", "LINE",
"LIVE", "LOVE", "MORE", "MOSE", "MORE", "NICE",
"RAKE", "ROBE", "ROSE", "SISE", "SIZE", "WARE",
"WAKE", "WISE", "WINE", "")
&& E_Silent_Suffix(4) && !E_Pronouncing_Suffix(4))
|| (StringAt(0, 5, "BLAKE", "BRAKE", "BRINE", "CARLE", "CLEVE", "DUNNE",
"HEDGE", "HOUSE", "JEFFE", "LUNCE", "STOKE", "STONE",
"THORE", "WEDGE", "WHITE", "")
&& E_Silent_Suffix(5) && !E_Pronouncing_Suffix(5))
|| (StringAt(0, 6, "BRIDGE", "CHEESE", "")
&& E_Silent_Suffix(6) && !E_Pronouncing_Suffix(6))
|| StringAt((m_current - 5), 7, "CHARLES", ""))
{
return true;
}
return false;
}
/**
* Detect conditions required
* for the 'E' not to be pronounced
*
*/
boolean E_Silent_Suffix(int at)
{
if((m_current == (at - 1))
&& (m_length > (at + 1))
&& (IsVowel((at + 1))
|| (StringAt(at, 2, "ST", "SL", "")
&& (m_length > (at + 2)))))
{
return true;
}
return false;
}
/**
* Detect endings that will
* cause the 'e' to be pronounced
*
*/
boolean E_Pronouncing_Suffix(int at)
{
// e.g. 'bridgewood' - the other vowels will get eaten
// up so we need to put one in here
if((m_length == (at + 4)) && StringAt(at, 4, "WOOD", ""))
{
return true;
}
// same as above
if((m_length == (at + 5)) && StringAt(at, 5, "WATER", "WORTH", ""))
{
return true;
}
// e.g. 'bridgette'
if((m_length == (at + 3)) && StringAt(at, 3, "TTE", "LIA", "NOW", "ROS", "RAS", ""))
{
return true;
}
// e.g. 'olena'
if((m_length == (at + 2)) && StringAt(at, 2, "TA", "TT", "NA", "NO", "NE",
"RS", "RE", "LA", "AU", "RO", "RA", ""))
{
return true;
}
// e.g. 'bridget'
if((m_length == (at + 1)) && StringAt(at, 1, "T", "R", ""))
{
return true;
}
return false;
}
/**
* Exceptions where 'E' is pronounced where it
* usually wouldn't be, and also some cases
* where 'LE' transposition rules don't apply
* and the vowel needs to be encoded here
*
* @return true if 'E' pronounced
*
*/
boolean E_Pronounced_Exceptions()
{
// greek names e.g. "herakles" or hispanic names e.g. "robles", where 'e' is pronounced, other exceptions
if((((m_current + 1) == m_last)
&& (StringAt((m_current - 3), 5, "OCLES", "ACLES", "AKLES", "")
|| StringAt(0, 4, "INES", "")
|| StringAt(0, 5, "LOPES", "ESTES", "GOMES", "NUNES", "ALVES", "ICKES",
"INNES", "PERES", "WAGES", "NEVES", "BENES", "DONES", "")
|| StringAt(0, 6, "CORTES", "CHAVES", "VALDES", "ROBLES", "TORRES", "FLORES", "BORGES",
"NIEVES", "MONTES", "SOARES", "VALLES", "GEDDES", "ANDRES", "VIAJES",
"CALLES", "FONTES", "HERMES", "ACEVES", "BATRES", "MATHES", "")
|| StringAt(0, 7, "DELORES", "MORALES", "DOLORES", "ANGELES", "ROSALES", "MIRELES", "LINARES",
"PERALES", "PAREDES", "BRIONES", "SANCHES", "CAZARES", "REVELES", "ESTEVES",
"ALVARES", "MATTHES", "SOLARES", "CASARES", "CACERES", "STURGES", "RAMIRES",
"FUNCHES", "BENITES", "FUENTES", "PUENTES", "TABARES", "HENTGES", "VALORES", "")
|| StringAt(0, 8, "GONZALES", "MERCEDES", "FAGUNDES", "JOHANNES", "GONSALES", "BERMUDES",
"CESPEDES", "BETANCES", "TERRONES", "DIOGENES", "CORRALES", "CABRALES",
"MARTINES", "GRAJALES", "")
|| StringAt(0, 9, "CERVANTES", "FERNANDES", "GONCALVES", "BENEVIDES", "CIFUENTES", "SIFUENTES",
"SERVANTES", "HERNANDES", "BENAVIDES", "")
|| StringAt(0, 10, "ARCHIMEDES", "CARRIZALES", "MAGALLANES", "")))
|| StringAt(m_current - 2, 4, "FRED", "DGES", "DRED", "GNES", "")
|| StringAt((m_current - 5), 7, "PROBLEM", "RESPLEN", "")
|| StringAt((m_current - 4), 6, "REPLEN", "")
|| StringAt((m_current - 3), 4, "SPLE", ""))
{
return true;
}
return false;
}
/**
* Encodes "-UE".
*
* @return true if encoding handled in this routine, false if not
*/
boolean Skip_Silent_UE()
{
// always silent except for cases listed below
if((StringAt((m_current - 1), 3, "QUE", "GUE", "")
&& !StringAt(0, 8, "BARBEQUE", "PALENQUE", "APPLIQUE", "")
// '-que' cases usually french but missing the acute accent
&& !StringAt(0, 6, "RISQUE", "")
&& !StringAt((m_current - 3), 5, "ARGUE", "SEGUE", "")
&& !StringAt(0, 7, "PIROGUE", "ENRIQUE", "")
&& !StringAt(0, 10, "COMMUNIQUE", ""))
&& (m_current > 1)
&& (((m_current + 1) == m_last)
|| StringAt(0, 7, "JACQUES", "")))
{
m_current = SkipVowels(m_current);
return true;
}
return false;
}
/**
* Encodes 'B'
*
*
*/
void Encode_B()
{
if(Encode_Silent_B())
{
return;
}
// "-mb", e.g", "dumb", already skipped over under
// 'M', altho it should really be handled here...
MetaphAddExactApprox("B", "P");
if((CharAt(m_current + 1) == 'B')
|| ((CharAt(m_current + 1) == 'P')
&& ((m_current + 1 < m_last) && (CharAt(m_current + 2) != 'H'))))
{
m_current += 2;
}
else
{
m_current++;
}
}
/**
* Encodes silent 'B' for cases not covered under "-mb-"
*
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_B()
{
//'debt', 'doubt', 'subtle'
if(StringAt((m_current - 2), 4, "DEBT", "")
|| StringAt((m_current - 2), 5, "SUBTL", "")
|| StringAt((m_current - 2), 6, "SUBTIL", "")
|| StringAt((m_current - 3), 5, "DOUBT", ""))
{
MetaphAdd("T");
m_current += 2;
return true;
}
return false;
}
/**
* Encodes 'C'
*
*/
void Encode_C()
{
if(Encode_Silent_C_At_Beginning()
|| Encode_CA_To_S()
|| Encode_CO_To_S()
|| Encode_CH()
|| Encode_CCIA()
|| Encode_CC()
|| Encode_CK_CG_CQ()
|| Encode_C_Front_Vowel()
|| Encode_Silent_C()
|| Encode_CZ()
|| Encode_CS())
{
return;
}
//else
if(!StringAt((m_current - 1), 1, "C", "K", "G", "Q", ""))
{
MetaphAdd("K");
}
//name sent in 'mac caffrey', 'mac gregor
if(StringAt((m_current + 1), 2, " C", " Q", " G", ""))
{
m_current += 2;
}
else
{
if(StringAt((m_current + 1), 1, "C", "K", "Q", "")
&& !StringAt((m_current + 1), 2, "CE", "CI", ""))
{
m_current += 2;
// account for combinations such as Ro-ckc-liffe
if(StringAt((m_current), 1, "C", "K", "Q", "")
&& !StringAt((m_current + 1), 2, "CE", "CI", ""))
{
m_current++;
}
}
else
{
m_current++;
}
}
}
/**
* Encodes cases where 'C' is silent at beginning of word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_C_At_Beginning()
{
//skip these when at start of word
if((m_current == 0)
&& StringAt(m_current, 2, "CT", "CN", ""))
{
m_current += 1;
return true;
}
return false;
}
/**
* Encodes exceptions where "-CA-" should encode to S
* instead of K including cases where the cedilla has not been used
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CA_To_S()
{
// Special case: 'caesar'.
// Also, where cedilla not used, as in "linguica" => LNKS
if(((m_current == 0) && StringAt(m_current, 4, "CAES", "CAEC", "CAEM", ""))
|| StringAt(0, 8, "FRANCAIS", "FRANCAIX", "LINGUICA", "")
|| StringAt(0, 6, "FACADE", "")
|| StringAt(0, 9, "GONCALVES", "PROVENCAL", ""))
{
MetaphAdd("S");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encodes exceptions where "-CO-" encodes to S instead of K
* including cases where the cedilla has not been used
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CO_To_S()
{
// e.g. 'coelecanth' => SLKN0
if((StringAt(m_current, 4, "COEL", "")
&& (IsVowel(m_current + 4) || ((m_current + 3) == m_last)))
|| StringAt(m_current, 5, "COENA", "COENO", "")
|| StringAt(0, 8, "FRANCOIS", "MELANCON", "")
|| StringAt(0, 6, "GARCON", ""))
{
MetaphAdd("S");
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encode "-CH-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CH()
{
if(StringAt(m_current, 2, "CH", ""))
{
if(Encode_CHAE()
|| Encode_CH_To_H()
|| Encode_Silent_CH()
|| Encode_ARCH()
// Encode_CH_To_X() should be
// called before the germanic
// and greek encoding functions
|| Encode_CH_To_X()
|| Encode_English_CH_To_K()
|| Encode_Germanic_CH_To_K()
|| Encode_Greek_CH_Initial()
|| Encode_Greek_CH_Non_Initial())
{
return true;
}
if(m_current > 0)
{
if(StringAt(0, 2, "MC", "")
&& (m_current == 1))
{
//e.g., "McHugh"
MetaphAdd("K");
}
else
{
MetaphAdd("X", "K");
}
}
else
{
MetaphAdd("X");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encodes "-CHAE-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CHAE()
{
// e.g. 'michael'
if(((m_current > 0) && StringAt((m_current + 2), 2, "AE", "")))
{
if(StringAt(0, 7, "RACHAEL", ""))
{
MetaphAdd("X");
}
else if(!StringAt((m_current - 1), 1, "C", "K", "G", "Q", ""))
{
MetaphAdd("K");
}
AdvanceCounter(4, 2);
return true;
}
return false;
}
/**
* Encdoes transliterations from the hebrew where the
* sound 'kh' is represented as "-CH-". The normal pronounciation
* of this in english is either 'h' or 'kh', and alternate
* spellings most often use "-H-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CH_To_H()
{
// hebrew => 'H', e.g. 'channukah', 'chabad'
if(((m_current == 0)
&& (StringAt((m_current + 2), 3, "AIM", "ETH", "ELM", "")
|| StringAt((m_current + 2), 4, "ASID", "AZAN", "")
|| StringAt((m_current + 2), 5, "UPPAH", "UTZPA", "ALLAH", "ALUTZ", "AMETZ", "")
|| StringAt((m_current + 2), 6, "ESHVAN", "ADARIM", "ANUKAH", "")
|| StringAt((m_current + 2), 7, "ALLLOTH", "ANNUKAH", "AROSETH", "")))
// and an irish name with the same encoding
|| StringAt((m_current - 3), 7, "CLACHAN", ""))
{
MetaphAdd("H");
AdvanceCounter(3, 2);
return true;
}
return false;
}
/**
* Encodes cases where "-CH-" is not pronounced
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_CH()
{
// '-ch-' not pronounced
if(StringAt((m_current - 2), 7, "FUCHSIA", "")
|| StringAt((m_current - 2), 5, "YACHT", "")
|| StringAt(0, 8, "STRACHAN", "")
|| StringAt(0, 8, "CRICHTON", "")
|| (StringAt((m_current - 3), 6, "DRACHM", ""))
&& !StringAt((m_current - 3), 7, "DRACHMA", ""))
{
m_current += 2;
return true;
}
return false;
}
/**
* Encodes "-CH-" to X
* English language patterns
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CH_To_X()
{
// e.g. 'approach', 'beach'
if((StringAt((m_current - 2), 4, "OACH", "EACH", "EECH", "OUCH", "OOCH", "MUCH", "SUCH", "")
&& !StringAt((m_current - 3), 5, "JOACH", ""))
// e.g. 'dacha', 'macho'
|| (((m_current + 2) == m_last ) && StringAt((m_current - 1), 4, "ACHA", "ACHO", ""))
|| (StringAt(m_current, 4, "CHOT", "CHOD", "CHAT", "") && ((m_current + 3) == m_last))
|| ((StringAt((m_current - 1), 4, "OCHE", "") && ((m_current + 2) == m_last))
&& !StringAt((m_current - 2), 5, "DOCHE", ""))
|| StringAt((m_current - 4), 6, "ATTACH", "DETACH", "KOVACH", "")
|| StringAt((m_current - 5), 7, "SPINACH", "")
|| StringAt(0, 6, "MACHAU", "")
|| StringAt((m_current - 4), 8, "PARACHUT", "")
|| StringAt((m_current - 5), 8, "MASSACHU", "")
|| (StringAt((m_current - 3), 5, "THACH", "") && !StringAt((m_current - 1), 4, "ACHE", ""))
|| StringAt((m_current - 2), 6, "VACHON", "") )
{
MetaphAdd("X");
m_current += 2;
return true;
}
return false;
}
/**
* Encodes "-CH-" to K in contexts of
* initial "A" or "E" follwed by "CH"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_English_CH_To_K()
{
//'ache', 'echo', alternate spelling of 'michael'
if(((m_current == 1) && RootOrInflections(m_inWord, "ACHE"))
|| (((m_current > 3) && RootOrInflections(m_inWord.substring(m_current - 1), "ACHE"))
&& (StringAt(0, 3, "EAR", "")
|| StringAt(0, 4, "HEAD", "BACK", "")
|| StringAt(0, 5, "HEART", "BELLY", "TOOTH", "")))
|| StringAt((m_current - 1), 4, "ECHO", "")
|| StringAt((m_current - 2), 7, "MICHEAL", "")
|| StringAt((m_current - 4), 7, "JERICHO", "")
|| StringAt((m_current - 5), 7, "LEPRECH", ""))
{
MetaphAdd("K", "X");
m_current += 2;
return true;
}
return false;
}
/**
* Encodes "-CH-" to K in mostly germanic context
* of internal "-ACH-", with exceptions
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Germanic_CH_To_K()
{
// various germanic
// "<consonant><vowel>CH-"implies a german word where 'ch' => K
if(((m_current > 1)
&& !IsVowel(m_current - 2)
&& StringAt((m_current - 1), 3, "ACH", "")
&& !StringAt((m_current - 2), 7, "MACHADO", "MACHUCA", "LACHANC", "LACHAPE", "KACHATU", "")
&& !StringAt((m_current - 3), 7, "KHACHAT", "")
&& ((CharAt(m_current + 2) != 'I')
&& ((CharAt(m_current + 2) != 'E')
|| StringAt((m_current - 2), 6, "BACHER", "MACHER", "MACHEN", "LACHER", "")) )
// e.g. 'brecht', 'fuchs'
|| (StringAt((m_current + 2), 1, "T", "S", "")
&& !(StringAt(0, 11, "WHICHSOEVER", "") || StringAt(0, 9, "LUNCHTIME", "") ))
// e.g. 'andromache'
|| StringAt(0, 4, "SCHR", "")
|| ((m_current > 2) && StringAt((m_current - 2), 5, "MACHE", ""))
|| ((m_current == 2) && StringAt((m_current - 2), 4, "ZACH", ""))
|| StringAt((m_current - 4), 6, "SCHACH", "")
|| StringAt((m_current - 1), 5, "ACHEN", "")
|| StringAt((m_current - 3), 5, "SPICH", "ZURCH", "BUECH", "")
|| (StringAt((m_current - 3), 5, "KIRCH", "JOACH", "BLECH", "MALCH", "")
// "kirch" and "blech" both get 'X'
&& !(StringAt((m_current - 3), 8, "KIRCHNER", "") || ((m_current + 1) == m_last)))
|| (((m_current + 1) == m_last) && StringAt((m_current - 2), 4, "NICH", "LICH", "BACH", ""))
|| (((m_current + 1) == m_last)
&& StringAt((m_current - 3), 5, "URICH", "BRICH", "ERICH", "DRICH", "NRICH", "")
&& !StringAt((m_current - 5), 7, "ALDRICH", "")
&& !StringAt((m_current - 6), 8, "GOODRICH", "")
&& !StringAt((m_current - 7), 9, "GINGERICH", "")))
|| (((m_current + 1) == m_last) && StringAt((m_current - 4), 6, "ULRICH", "LFRICH", "LLRICH",
"EMRICH", "ZURICH", "EYRICH", ""))
// e.g., 'wachtler', 'wechsler', but not 'tichner'
|| ((StringAt((m_current - 1), 1, "A", "O", "U", "E", "") || (m_current == 0))
&& StringAt((m_current + 2), 1, "L", "R", "N", "M", "B", "H", "F", "V", "W", " ", "")))
{
// "CHR/L-" e.g. 'chris' do not get
// alt pronunciation of 'X'
if(StringAt((m_current + 2), 1, "R", "L", "")
|| SlavoGermanic())
{
MetaphAdd("K");
}
else
{
MetaphAdd("K", "X");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-ARCH-". Some occurances are from greek roots and therefore encode
* to 'K', others are from english words and therefore encode to 'X'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_ARCH()
{
if(StringAt((m_current - 2), 4, "ARCH", ""))
{
// "-ARCH-" has many combining forms where "-CH-" => K because of its
// derivation from the greek
if(((IsVowel(m_current + 2) && StringAt((m_current - 2), 5, "ARCHA", "ARCHI", "ARCHO", "ARCHU", "ARCHY", ""))
|| StringAt((m_current - 2), 6, "ARCHEA", "ARCHEG", "ARCHEO", "ARCHET", "ARCHEL", "ARCHES", "ARCHEP",
"ARCHEM", "ARCHEN", "")
|| (StringAt((m_current - 2), 4, "ARCH", "") && (((m_current + 1) == m_last)))
|| StringAt(0, 7, "MENARCH", ""))
&& (!RootOrInflections(m_inWord, "ARCH")
&& !StringAt((m_current - 4), 6, "SEARCH", "POARCH", "")
&& !StringAt(0, 9, "ARCHENEMY", "ARCHIBALD", "ARCHULETA", "ARCHAMBAU", "")
&& !StringAt(0, 6, "ARCHER", "ARCHIE", "")
&& !((((StringAt((m_current - 3), 5, "LARCH", "MARCH", "PARCH", "")
|| StringAt((m_current - 4), 6, "STARCH", ""))
&& !(StringAt(0, 6, "EPARCH", "")
|| StringAt(0, 7, "NOMARCH", "")
|| StringAt(0, 8, "EXILARCH", "HIPPARCH", "MARCHESE", "")
|| StringAt(0, 9, "ARISTARCH", "")
|| StringAt(0, 9, "MARCHETTI", "")) )
|| RootOrInflections(m_inWord, "STARCH"))
&& (!StringAt((m_current - 2), 5, "ARCHU", "ARCHY", "")
|| StringAt(0, 7, "STARCHY", "")))))
{
MetaphAdd("K", "X");
}
else
{
MetaphAdd("X");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-CH-" to K when from greek roots
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Greek_CH_Initial()
{
// greek roots e.g. 'chemistry', 'chorus', ch at beginning of root
if((StringAt(m_current, 6, "CHAMOM", "CHARAC", "CHARIS", "CHARTO", "CHARTU", "CHARYB", "CHRIST", "CHEMIC", "CHILIA", "")
|| (StringAt(m_current, 5, "CHEMI", "CHEMO", "CHEMU", "CHEMY", "CHOND", "CHONA", "CHONI", "CHOIR", "CHASM",
"CHARO", "CHROM", "CHROI", "CHAMA", "CHALC", "CHALD", "CHAET","CHIRO", "CHILO", "CHELA", "CHOUS",
"CHEIL", "CHEIR", "CHEIM", "CHITI", "CHEOP", "")
&& !(StringAt(m_current, 6, "CHEMIN", "") || StringAt((m_current - 2), 8, "ANCHONDO", "")))
|| (StringAt(m_current, 5, "CHISM", "CHELI", "")
// exclude spanish "machismo"
&& !(StringAt(0, 8, "MACHISMO", "")
// exclude some french words
|| StringAt(0, 10, "REVANCHISM", "")
|| StringAt(0, 9, "RICHELIEU", "")
|| (StringAt(0, 5, "CHISM", "") && (m_length == 5))
|| StringAt(0, 6, "MICHEL", "")))
// include e.g. "chorus", "chyme", "chaos"
|| (StringAt(m_current, 4, "CHOR", "CHOL", "CHYM", "CHYL", "CHLO", "CHOS", "CHUS", "CHOE", "")
&& !StringAt(0, 6, "CHOLLO", "CHOLLA", "CHORIZ", ""))
// "chaos" => K but not "chao"
|| (StringAt(m_current, 4, "CHAO", "") && ((m_current + 3) != m_last))
// e.g. "abranchiate"
|| (StringAt(m_current, 4, "CHIA", "") && !(StringAt(0, 10, "APPALACHIA", "") || StringAt(0, 7, "CHIAPAS", "")))
// e.g. "chimera"
|| StringAt(m_current, 7, "CHIMERA", "CHIMAER", "CHIMERI", "")
// e.g. "chameleon"
|| ((m_current == 0) && StringAt(m_current, 5, "CHAME", "CHELO", "CHITO", "") )
// e.g. "spirochete"
|| ((((m_current + 4) == m_last) || ((m_current + 5) == m_last)) && StringAt((m_current - 1), 6, "OCHETE", "")))
// more exceptions where "-CH-" => X e.g. "chortle", "crocheter"
&& !((StringAt(0, 5, "CHORE", "CHOLO", "CHOLA", "") && (m_length == 5))
|| StringAt(m_current, 5, "CHORT", "CHOSE", "")
|| StringAt((m_current - 3), 7, "CROCHET", "")
|| StringAt(0, 7, "CHEMISE", "CHARISE", "CHARISS", "CHAROLE", "")) )
{
// "CHR/L-" e.g. 'christ', 'chlorine' do not get
// alt pronunciation of 'X'
if(StringAt((m_current + 2), 1, "R", "L", ""))
{
MetaphAdd("K");
}
else
{
MetaphAdd("K", "X");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode a variety of greek and some german roots where "-CH-" => K
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Greek_CH_Non_Initial()
{
//greek & other roots e.g. 'tachometer', 'orchid', ch in middle or end of root
if(StringAt((m_current - 2), 6, "ORCHID", "NICHOL", "MECHAN", "LICHEN", "MACHIC", "PACHEL", "RACHIF", "RACHID",
"RACHIS", "RACHIC", "MICHAL", "")
|| StringAt((m_current - 3), 5, "MELCH", "GLOCH", "TRACH", "TROCH", "BRACH", "SYNCH", "PSYCH",
"STICH", "PULCH", "EPOCH", "")
|| (StringAt((m_current - 3), 5, "TRICH", "") && !StringAt((m_current - 5), 7, "OSTRICH", ""))
|| (StringAt((m_current - 2), 4, "TYCH", "TOCH", "BUCH", "MOCH", "CICH", "DICH", "NUCH", "EICH", "LOCH",
"DOCH", "ZECH", "WYCH", "")
&& !(StringAt((m_current - 4), 9, "INDOCHINA", "") || StringAt((m_current - 2), 6, "BUCHON", "")))
|| StringAt((m_current - 2), 5, "LYCHN", "TACHO", "ORCHO", "ORCHI", "LICHO", "")
|| (StringAt((m_current - 1), 5, "OCHER", "ECHIN", "ECHID", "") && ((m_current == 1) || (m_current == 2)))
|| StringAt((m_current - 4), 6, "BRONCH", "STOICH", "STRYCH", "TELECH", "PLANCH", "CATECH", "MANICH", "MALACH",
"BIANCH", "DIDACH", "")
|| (StringAt((m_current - 1), 4, "ICHA", "ICHN","") && (m_current == 1))
|| StringAt((m_current - 2), 8, "ORCHESTR", "")
|| StringAt((m_current - 4), 8, "BRANCHIO", "BRANCHIF", "")
|| (StringAt((m_current - 1), 5, "ACHAB", "ACHAD", "ACHAN", "ACHAZ", "")
&& !StringAt((m_current - 2), 7, "MACHADO", "LACHANC", ""))
|| StringAt((m_current - 1), 6, "ACHISH", "ACHILL", "ACHAIA", "ACHENE", "")
|| StringAt((m_current - 1), 7, "ACHAIAN", "ACHATES", "ACHIRAL", "ACHERON", "")
|| StringAt((m_current - 1), 8, "ACHILLEA", "ACHIMAAS", "ACHILARY", "ACHELOUS", "ACHENIAL", "ACHERNAR", "")
|| StringAt((m_current - 1), 9, "ACHALASIA", "ACHILLEAN", "ACHIMENES", "")
|| StringAt((m_current - 1), 10, "ACHIMELECH", "ACHITOPHEL", "")
// e.g. 'inchoate'
|| (((m_current - 2) == 0) && (StringAt((m_current - 2), 6, "INCHOA", "")
// e.g. 'ischemia'
|| StringAt(0, 4, "ISCH", "")) )
// e.g. 'ablimelech', 'antioch', 'pentateuch'
|| (((m_current + 1) == m_last) && StringAt((m_current - 1), 1, "A", "O", "U", "E", "")
&& !(StringAt(0, 7, "DEBAUCH", "")
|| StringAt((m_current - 2), 4, "MUCH", "SUCH", "KOCH", "")
|| StringAt((m_current - 5), 7, "OODRICH", "ALDRICH", ""))))
{
MetaphAdd("K", "X");
m_current += 2;
return true;
}
return false;
}
/**
* Encodes reliably italian "-CCIA-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CCIA()
{
//e.g., 'focaccia'
if(StringAt((m_current + 1), 3, "CIA", ""))
{
MetaphAdd("X", "S");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-CC-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CC()
{
//double 'C', but not if e.g. 'McClellan'
if(StringAt(m_current, 2, "CC", "") && !((m_current == 1) && (CharAt(0) == 'M')))
{
// exception
if (StringAt((m_current - 3), 7, "FLACCID", ""))
{
MetaphAdd("S");
AdvanceCounter(3, 2);
return true;
}
//'bacci', 'bertucci', other italian
if((((m_current + 2) == m_last) && StringAt((m_current + 2), 1, "I", ""))
|| StringAt((m_current + 2), 2, "IO", "")
|| (((m_current + 4) == m_last) && StringAt((m_current + 2), 3, "INO", "INI", "")))
{
MetaphAdd("X");
AdvanceCounter(3, 2);
return true;
}
//'accident', 'accede' 'succeed'
if(StringAt((m_current + 2), 1, "I", "E", "Y", "")
//except 'bellocchio','bacchus', 'soccer' get K
&& !((CharAt(m_current + 2) == 'H')
|| StringAt((m_current - 2), 6, "SOCCER", "")))
{
MetaphAdd("KS");
AdvanceCounter(3, 2);
return true;
}
else
{
//Pierce's rule
MetaphAdd("K");
m_current += 2;
return true;
}
}
return false;
}
/**
* Encode cases where the consonant following "C" is redundant
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CK_CG_CQ()
{
if(StringAt(m_current, 2, "CK", "CG", "CQ", ""))
{
// eastern european spelling e.g. 'gorecki' == 'goresky'
if(StringAt(m_current, 3, "CKI", "CKY", "")
&& ((m_current + 2) == m_last)
&& (m_length > 6))
{
MetaphAdd("K", "SK");
}
else
{
MetaphAdd("K");
}
m_current += 2;
if(StringAt(m_current, 1, "K", "G", "Q", ""))
{
m_current++;
}
return true;
}
return false;
}
/**
* Encode cases where "C" preceeds a front vowel such as "E", "I", or "Y".
* These cases most likely => S or X
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_C_Front_Vowel()
{
if(StringAt(m_current, 2, "CI", "CE", "CY", ""))
{
if(Encode_British_Silent_CE()
|| Encode_CE()
|| Encode_CI()
|| Encode_Latinate_Suffixes())
{
AdvanceCounter(2, 1);
return true;
}
MetaphAdd("S");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_British_Silent_CE()
{
// english place names like e.g.'gloucester' pronounced glo-ster
if((StringAt((m_current + 1), 5, "ESTER", "") && ((m_current + 5) == m_last))
|| StringAt((m_current + 1), 10, "ESTERSHIRE", ""))
{
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CE()
{
// 'ocean', 'commercial', 'provincial', 'cello', 'fettucini', 'medici'
if((StringAt((m_current + 1), 3, "EAN", "") && IsVowel(m_current - 1))
// e.g. 'rosacea'
|| (StringAt((m_current - 1), 4, "ACEA", "")
&& ((m_current + 2) == m_last)
&& !StringAt(0, 7, "PANACEA", ""))
// e.g. 'botticelli', 'concerto'
|| StringAt((m_current + 1), 4, "ELLI", "ERTO", "EORL", "")
// some italian names familiar to americans
|| (StringAt((m_current - 3), 5, "CROCE", "") && ((m_current + 1) == m_last))
|| StringAt((m_current - 3), 5, "DOLCE", "")
// e.g. 'cello'
|| (StringAt((m_current + 1), 4, "ELLO", "")
&& ((m_current + 4) == m_last)))
{
MetaphAdd("X", "S");
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CI()
{
// with consonant before C
// e.g. 'fettucini', but exception for the americanized pronunciation of 'mancini'
if(((StringAt((m_current + 1), 3, "INI", "") && !StringAt(0, 7, "MANCINI", "")) && ((m_current + 3) == m_last))
// e.g. 'medici'
|| (StringAt((m_current - 1), 3, "ICI", "") && ((m_current + 1) == m_last))
// e.g. "commercial', 'provincial', 'cistercian'
|| StringAt((m_current - 1), 5, "RCIAL", "NCIAL", "RCIAN", "UCIUS", "")
// special cases
|| StringAt((m_current - 3), 6, "MARCIA", "")
|| StringAt((m_current - 2), 7, "ANCIENT", ""))
{
MetaphAdd("X", "S");
return true;
}
// with vowel before C (or at beginning?)
if(((StringAt(m_current, 3, "CIO", "CIE", "CIA", "")
&& IsVowel(m_current - 1))
// e.g. "ciao"
|| StringAt((m_current + 1), 3, "IAO", ""))
&& !StringAt((m_current - 4), 8, "COERCION", ""))
{
if((StringAt(m_current, 4, "CIAN", "CIAL", "CIAO", "CIES", "CIOL", "CION", "")
// exception - "glacier" => 'X' but "spacier" = > 'S'
|| StringAt((m_current - 3), 7, "GLACIER", "")
|| StringAt(m_current, 5, "CIENT", "CIENC", "CIOUS", "CIATE", "CIATI", "CIATO", "CIABL", "CIARY", "")
|| (((m_current + 2) == m_last) && StringAt(m_current, 3, "CIA", "CIO", ""))
|| (((m_current + 3) == m_last) && StringAt(m_current, 3, "CIAS", "CIOS", "")))
// exceptions
&& !(StringAt((m_current - 4), 11, "ASSOCIATION", "")
|| StringAt(0, 4, "OCIE", "")
// exceptions mostly because these names are usually from
// the spanish rather than the italian in america
|| StringAt((m_current - 2), 5, "LUCIO", "")
|| StringAt((m_current - 2), 6, "MACIAS", "")
|| StringAt((m_current - 3), 6, "GRACIE", "GRACIA", "")
|| StringAt((m_current - 2), 7, "LUCIANO", "")
|| StringAt((m_current - 3), 8, "MARCIANO", "")
|| StringAt((m_current - 4), 7, "PALACIO", "")
|| StringAt((m_current - 4), 9, "FELICIANO", "")
|| StringAt((m_current - 5), 8, "MAURICIO", "")
|| StringAt((m_current - 7), 11, "ENCARNACION", "")
|| StringAt((m_current - 4), 8, "POLICIES", "")
|| StringAt((m_current - 2), 8, "HACIENDA", "")
|| StringAt((m_current - 6), 9, "ANDALUCIA", "")
|| StringAt((m_current - 2), 5, "SOCIO", "SOCIE", "")))
{
MetaphAdd("X", "S");
}
else
{
MetaphAdd("S", "X");
}
return true;
}
// exception
if(StringAt((m_current - 4), 8, "COERCION", ""))
{
MetaphAdd("J");
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Latinate_Suffixes()
{
if(StringAt((m_current + 1), 4, "EOUS", "IOUS", ""))
{
MetaphAdd("X", "S");
return true;
}
return false;
}
/**
* Encodes some exceptions where "C" is silent
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_C()
{
if(StringAt((m_current + 1), 1, "T", "S", ""))
{
if (StringAt(0, 11, "CONNECTICUT", "")
|| StringAt(0, 6, "INDICT", "TUCSON", ""))
{
m_current++;
return true;
}
}
return false;
}
/**
* Encodes slavic spellings or transliterations
* written as "-CZ-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CZ()
{
if(StringAt((m_current + 1), 1, "Z", "")
&& !StringAt((m_current - 1), 6, "ECZEMA", ""))
{
if(StringAt(m_current, 4, "CZAR", ""))
{
MetaphAdd("S");
}
// otherwise most likely a czech word...
else
{
MetaphAdd("X");
}
m_current += 2;
return true;
}
return false;
}
/**
* "-CS" special cases
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_CS()
{
// give an 'etymological' 2nd
// encoding for "kovacs" so
// that it matches "kovach"
if(StringAt(0, 6, "KOVACS", ""))
{
MetaphAdd("KS", "X");
m_current += 2;
return true;
}
if(StringAt((m_current - 1), 3, "ACS", "")
&& ((m_current + 1) == m_last)
&& !StringAt((m_current - 4), 6, "ISAACS", ""))
{
MetaphAdd("X");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-D-"
*
*/
void Encode_D()
{
if(Encode_DG()
|| Encode_DJ()
|| Encode_DT_DD()
|| Encode_D_To_J()
|| Encode_DOUS()
|| Encode_Silent_D())
{
return;
}
if(m_encodeExact)
{
// "final de-voicing" in this case
// e.g. 'missed' == 'mist'
if((m_current == m_last)
&& StringAt((m_current - 3), 4, "SSED", ""))
{
MetaphAdd("T");
}
else
{
MetaphAdd("D");
}
}
else
{
MetaphAdd("T");
}
m_current++;
}
/**
* Encode "-DG-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_DG()
{
if(StringAt(m_current, 2, "DG", ""))
{
// excludes exceptions e.g. 'edgar',
// or cases where 'g' is first letter of combining form
// e.g. 'handgun', 'waldglas'
if(StringAt((m_current + 2), 1, "A", "O", "")
// e.g. "midgut"
|| StringAt((m_current + 1), 3, "GUN", "GUT", "")
// e.g. "handgrip"
|| StringAt((m_current + 1), 4, "GEAR", "GLAS", "GRIP", "GREN", "GILL", "GRAF", "")
// e.g. "mudgard"
|| StringAt((m_current + 1), 5, "GUARD", "GUILT", "GRAVE", "GRASS", "")
// e.g. "woodgrouse"
|| StringAt((m_current + 1), 6, "GROUSE", ""))
{
MetaphAddExactApprox("DG", "TK");
}
else
{
//e.g. "edge", "abridgment"
MetaphAdd("J");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-DJ-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_DJ()
{
// e.g. "adjacent"
if(StringAt(m_current, 2, "DJ", ""))
{
MetaphAdd("J");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-DD-" and "-DT-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_DT_DD()
{
// eat redundant 'T' or 'D'
if(StringAt(m_current, 2, "DT", "DD", ""))
{
if(StringAt(m_current, 3, "DTH", ""))
{
MetaphAddExactApprox("D0", "T0");
m_current += 3;
}
else
{
if(m_encodeExact)
{
// devoice it
if(StringAt(m_current, 2, "DT", ""))
{
MetaphAdd("T");
}
else
{
MetaphAdd("D");
}
}
else
{
MetaphAdd("T");
}
m_current += 2;
}
return true;
}
return false;
}
/**
* Encode cases where "-DU-" "-DI-", and "-DI-" => J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_D_To_J()
{
// e.g. "module", "adulate"
if((StringAt(m_current, 3, "DUL", "")
&& (IsVowel(m_current - 1) && IsVowel(m_current + 3)))
// e.g. "soldier", "grandeur", "procedure"
|| (((m_current + 3) == m_last)
&& StringAt((m_current - 1) , 5, "LDIER", "NDEUR", "EDURE", "RDURE", ""))
|| StringAt((m_current - 3), 7, "CORDIAL", "")
// e.g. "pendulum", "education"
|| StringAt((m_current - 1), 5, "NDULA", "NDULU", "EDUCA", "")
// e.g. "individual", "individual", "residuum"
|| StringAt((m_current - 1), 4, "ADUA", "IDUA", "IDUU", ""))
{
MetaphAddExactApprox("J", "D", "J", "T");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode latinate suffix "-DOUS" where 'D' is pronounced as J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_DOUS()
{
// e.g. "assiduous", "arduous"
if(StringAt((m_current + 1), 4, "UOUS", ""))
{
MetaphAddExactApprox("J", "D", "J", "T");
AdvanceCounter(4, 1);
return true;
}
return false;
}
/**
* Encode silent "-D-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_D()
{
// silent 'D' e.g. 'wednesday', 'handsome'
if(StringAt((m_current - 2), 9, "WEDNESDAY", "")
|| StringAt((m_current - 3), 7, "HANDKER", "HANDSOM", "WINDSOR", "")
// french silent D at end in words or names familiar to americans
|| StringAt((m_current - 5), 6, "PERNOD", "ARTAUD", "RENAUD", "")
|| StringAt((m_current - 6), 7, "RIMBAUD", "MICHAUD", "BICHAUD", ""))
{
m_current++;
return true;
}
return false;
}
/**
* Encode "-F-"
*
*/
void Encode_F()
{
// Encode cases where "-FT-" => "T" is usually silent
// e.g. 'often', 'soften'
// This should really be covered under "T"!
if(StringAt((m_current - 1), 5, "OFTEN", ""))
{
MetaphAdd("F", "FT");
m_current += 2;
return;
}
// eat redundant 'F'
if(CharAt(m_current + 1) == 'F')
{
m_current += 2;
}
else
{
m_current++;
}
MetaphAdd("F");
}
/**
* Encode "-G-"
*
*/
void Encode_G()
{
if(Encode_Silent_G_At_Beginning()
|| Encode_GG()
|| Encode_GK()
|| Encode_GH()
|| Encode_Silent_G()
|| Encode_GN()
|| Encode_GL()
|| Encode_Initial_G_Front_Vowel()
|| Encode_NGER()
|| Encode_GER()
|| Encode_GEL()
|| Encode_Non_Initial_G_Front_Vowel()
|| Encode_GA_To_J())
{
return;
}
if(!StringAt((m_current - 1), 1, "C", "K", "G", "Q", ""))
{
MetaphAddExactApprox("G", "K");
}
m_current++;
}
/**
* Encode cases where 'G' is silent at beginning of word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_G_At_Beginning()
{
//skip these when at start of word
if((m_current == 0)
&& StringAt(m_current, 2, "GN", ""))
{
m_current += 1;
return true;
}
return false;
}
/**
* Encode "-GG-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GG()
{
if(CharAt(m_current + 1) == 'G')
{
// italian e.g, 'loggia', 'caraveggio', also 'suggest' and 'exaggerate'
if(StringAt((m_current - 1), 5, "AGGIA", "OGGIA", "AGGIO", "EGGIO", "EGGIA", "IGGIO", "")
// 'ruggiero' but not 'snuggies'
|| (StringAt((m_current - 1), 5, "UGGIE", "") && !(((m_current + 3) == m_last) || ((m_current + 4) == m_last)))
|| (((m_current + 2) == m_last) && StringAt((m_current - 1), 4, "AGGI", "OGGI", ""))
|| StringAt((m_current - 2), 6, "SUGGES", "XAGGER", "REGGIE", ""))
{
// expection where "-GG-" => KJ
if (StringAt((m_current - 2), 7, "SUGGEST", ""))
{
MetaphAddExactApprox("G", "K");
}
MetaphAdd("J");
AdvanceCounter(3, 2);
}
else
{
MetaphAddExactApprox("G", "K");
m_current += 2;
}
return true;
}
return false;
}
/**
* Encode "-GK-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GK()
{
// 'gingko'
if(CharAt(m_current + 1) == 'K')
{
MetaphAdd("K");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-GH-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GH()
{
if(CharAt(m_current + 1) == 'H')
{
if(Encode_GH_After_Consonant()
|| Encode_Initial_GH()
|| Encode_GH_To_J()
|| Encode_GH_To_H()
|| Encode_UGHT()
|| Encode_GH_H_Part_Of_Other_Word()
|| Encode_Silent_GH()
|| Encode_GH_To_F())
{
return true;
}
MetaphAddExactApprox("G", "K");
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GH_After_Consonant()
{
// e.g. 'burgher', 'bingham'
if((m_current > 0)
&& !IsVowel(m_current - 1)
// not e.g. 'greenhalgh'
&& !(StringAt((m_current - 3), 5, "HALGH", "")
&& ((m_current + 1) == m_last)))
{
MetaphAddExactApprox("G", "K");
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Initial_GH()
{
if(m_current < 3)
{
// e.g. "ghislane", "ghiradelli"
if(m_current == 0)
{
if(CharAt(m_current + 2) == 'I')
{
MetaphAdd("J");
}
else
{
MetaphAddExactApprox("G", "K");
}
m_current += 2;
return true;
}
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GH_To_J()
{
// e.g., 'greenhalgh', 'dunkenhalgh', english names
if(StringAt((m_current - 2), 4, "ALGH", "") && ((m_current + 1) == m_last))
{
MetaphAdd("J", "");
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GH_To_H()
{
// special cases
// e.g., 'donoghue', 'donaghy'
if((StringAt((m_current - 4), 4, "DONO", "DONA", "") && IsVowel(m_current + 2))
|| StringAt((m_current - 5), 9, "CALLAGHAN", ""))
{
MetaphAdd("H");
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_UGHT()
{
//e.g. "ought", "aught", "daughter", "slaughter"
if(StringAt((m_current - 1), 4, "UGHT", ""))
{
if ((StringAt((m_current - 3), 5, "LAUGH", "")
&& !(StringAt((m_current - 4), 7, "SLAUGHT", "")
|| StringAt((m_current - 3), 7, "LAUGHTO", "")))
|| StringAt((m_current - 4), 6, "DRAUGH", ""))
{
MetaphAdd("FT");
}
else
{
MetaphAdd("T");
}
m_current += 3;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GH_H_Part_Of_Other_Word()
{
// if the 'H' is the beginning of another word or syllable
if (StringAt((m_current + 1), 4, "HOUS", "HEAD", "HOLE", "HORN", "HARN", ""))
{
MetaphAddExactApprox("G", "K");
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_GH()
{
//Parker's rule (with some further refinements) - e.g., 'hugh'
if(((((m_current > 1) && StringAt((m_current - 2), 1, "B", "H", "D", "G", "L", "") )
//e.g., 'bough'
|| ((m_current > 2)
&& StringAt((m_current - 3), 1, "B", "H", "D", "K", "W", "N", "P", "V", "")
&& !StringAt(0, 6, "ENOUGH", ""))
//e.g., 'broughton'
|| ((m_current > 3) && StringAt((m_current - 4), 1, "B", "H", "") )
//'plough', 'slaugh'
|| ((m_current > 3) && StringAt((m_current - 4), 2, "PL", "SL", "") )
|| ((m_current > 0)
// 'sigh', 'light'
&& ((CharAt(m_current - 1) == 'I')
|| StringAt(0, 4, "PUGH", "")
// e.g. 'MCDONAGH', 'MURTAGH', 'CREAGH'
|| (StringAt((m_current - 1), 3, "AGH", "")
&& ((m_current + 1) == m_last))
|| StringAt((m_current - 4), 6, "GERAGH", "DRAUGH", "")
|| (StringAt((m_current - 3), 5, "GAUGH", "GEOGH", "MAUGH", "")
&& !StringAt(0, 9, "MCGAUGHEY", ""))
// exceptions to 'tough', 'rough', 'lough'
|| (StringAt((m_current - 2), 4, "OUGH", "")
&& (m_current > 3)
&& !StringAt((m_current - 4), 6, "CCOUGH", "ENOUGH", "TROUGH", "CLOUGH", "")))))
// suffixes starting w/ vowel where "-GH-" is usually silent
&& (StringAt((m_current - 3), 5, "VAUGH", "FEIGH", "LEIGH", "")
|| StringAt((m_current - 2), 4, "HIGH", "TIGH", "")
|| ((m_current + 1) == m_last)
|| (StringAt((m_current + 2), 2, "IE", "EY", "ES", "ER", "ED", "TY", "")
&& ((m_current + 3) == m_last)
&& !StringAt((m_current - 5), 9, "GALLAGHER", ""))
|| (StringAt((m_current + 2), 1, "Y", "") && ((m_current + 2) == m_last))
|| (StringAt((m_current + 2), 3, "ING", "OUT", "") && ((m_current + 4) == m_last))
|| (StringAt((m_current + 2), 4, "ERTY", "") && ((m_current + 5) == m_last))
|| (!IsVowel(m_current + 2)
|| StringAt((m_current - 3), 5, "GAUGH", "GEOGH", "MAUGH", "")
|| StringAt((m_current - 4), 8, "BROUGHAM", ""))))
// exceptions where '-g-' pronounced
&& !(StringAt(0, 6, "BALOGH", "SABAGH", "")
|| StringAt((m_current - 2), 7, "BAGHDAD", "")
|| StringAt((m_current - 3), 5, "WHIGH", "")
|| StringAt((m_current - 5), 7, "SABBAGH", "AKHLAGH", "")))
{
// silent - do nothing
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GH_Special_Cases()
{
boolean handled = false;
// special case: 'hiccough' == 'hiccup'
if(StringAt((m_current - 6), 8, "HICCOUGH", ""))
{
MetaphAdd("P");
handled = true;
}
// special case: 'lough' alt spelling for scots 'loch'
else if(StringAt(0, 5, "LOUGH", ""))
{
MetaphAdd("K");
handled = true;
}
// hungarian
else if(StringAt(0, 6, "BALOGH", ""))
{
MetaphAddExactApprox("G", "", "K", "");
handled = true;
}
// "maclaughlin"
else if(StringAt((m_current - 3), 8, "LAUGHLIN", "COUGHLAN", "LOUGHLIN", ""))
{
MetaphAdd("K", "F");
handled = true;
}
else if(StringAt((m_current - 3), 5, "GOUGH", "")
|| StringAt((m_current - 7), 9, "COLCLOUGH", ""))
{
MetaphAdd("", "F");
handled = true;
}
if(handled)
{
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GH_To_F()
{
// the cases covered here would fall under
// the GH_To_F rule below otherwise
if(Encode_GH_Special_Cases())
{
return true;
}
else
{
//e.g., 'laugh', 'cough', 'rough', 'tough'
if((m_current > 2)
&& (CharAt(m_current - 1) == 'U')
&& IsVowel(m_current - 2)
&& StringAt((m_current - 3), 1, "C", "G", "L", "R", "T", "N", "S", "")
&& !StringAt((m_current - 4), 8, "BREUGHEL", "FLAUGHER", ""))
{
MetaphAdd("F");
m_current += 2;
return true;
}
}
return false;
}
/**
* Encode some contexts where "g" is silent
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_G()
{
// e.g. "phlegm", "apothegm", "voigt"
if((((m_current + 1) == m_last)
&& (StringAt((m_current - 1), 3, "EGM", "IGM", "AGM", "")
|| StringAt(m_current, 2, "GT", "")))
|| (StringAt(0, 5, "HUGES", "") && (m_length == 5)))
{
m_current++;
return true;
}
// vietnamese names e.g. "Nguyen" but not "Ng"
if(StringAt(0, 2, "NG", "") && (m_current != m_last))
{
m_current++;
return true;
}
return false;
}
/**
* ENcode "-GN-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GN()
{
if(CharAt(m_current + 1) == 'N')
{
// 'align' 'sign', 'resign' but not 'resignation'
// also 'impugn', 'impugnable', but not 'repugnant'
if(((m_current > 1)
&& ((StringAt((m_current - 1), 1, "I", "U", "E", "")
|| StringAt((m_current - 3), 9, "LORGNETTE", "")
|| StringAt((m_current - 2), 9, "LAGNIAPPE", "")
|| StringAt((m_current - 2), 6, "COGNAC", "")
|| StringAt((m_current - 3), 7, "CHAGNON", "")
|| StringAt((m_current - 5), 9, "COMPAGNIE", "")
|| StringAt((m_current - 4), 6, "BOLOGN", ""))
// Exceptions: following are cases where 'G' is pronounced
// in "assign" 'g' is silent, but not in "assignation"
&& !(StringAt((m_current + 2), 5, "ATION", "")
|| StringAt((m_current + 2), 4, "ATOR", "")
|| StringAt((m_current + 2), 3, "ATE", "ITY", "")
// exception to exceptions, not pronounced:
|| (StringAt((m_current + 2), 2, "AN", "AC", "IA", "UM", "")
&& !(StringAt((m_current - 3), 8, "POIGNANT", "")
|| StringAt((m_current - 2), 6, "COGNAC", "")))
|| StringAt(0, 7, "SPIGNER", "STEGNER", "")
|| (StringAt(0, 5, "SIGNE", "") && (m_length == 5))
|| StringAt((m_current - 2), 5, "LIGNI", "LIGNO", "REGNA", "DIGNI", "WEGNE",
"TIGNE", "RIGNE", "REGNE", "TIGNO", "")
|| StringAt((m_current - 2), 6, "SIGNAL", "SIGNIF", "SIGNAT", "")
|| StringAt((m_current - 1), 5, "IGNIT", ""))
&& !StringAt((m_current - 2), 6, "SIGNET", "LIGNEO", "") ))
//not e.g. 'cagney', 'magna'
|| (((m_current + 2) == m_last)
&& StringAt(m_current, 3, "GNE", "GNA", "")
&& !StringAt((m_current - 2), 5, "SIGNA", "MAGNA", "SIGNE", "")))
{
MetaphAddExactApprox("N", "GN", "N", "KN");
}
else
{
MetaphAddExactApprox("GN", "KN");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-GL-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GL()
{
//'tagliaro', 'puglia' BUT add K in alternative
// since americans sometimes do this
if(StringAt((m_current + 1), 3, "LIA", "LIO", "LIE", "")
&& IsVowel(m_current - 1))
{
MetaphAddExactApprox("L", "GL", "L", "KL");
m_current += 2;
return true;
}
return false;
}
/**
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Initial_G_Soft()
{
if(((StringAt((m_current + 1), 2, "EL", "EM", "EN", "EO", "ER", "ES", "IA", "IN", "IO", "IP", "IU", "YM", "YN", "YP", "YR", "EE", "")
|| StringAt((m_current + 1), 3, "IRA", "IRO", ""))
// except for smaller set of cases where => K, e.g. "gerber"
&& !(StringAt((m_current + 1), 3, "ELD", "ELT", "ERT", "INZ", "ERH", "ITE", "ERD", "ERL", "ERN",
"INT", "EES", "EEK", "ELB", "EER", "")
|| StringAt((m_current + 1), 4, "ERSH", "ERST", "INSB", "INGR", "EROW", "ERKE", "EREN", "")
|| StringAt((m_current + 1), 5, "ELLER", "ERDIE", "ERBER", "ESUND", "ESNER", "INGKO", "INKGO",
"IPPER", "ESELL", "IPSON", "EEZER", "ERSON", "ELMAN", "")
|| StringAt((m_current + 1), 6, "ESTALT", "ESTAPO", "INGHAM", "ERRITY", "ERRISH", "ESSNER", "ENGLER", "")
|| StringAt((m_current + 1), 7, "YNAECOL", "YNECOLO", "ENTHNER", "ERAGHTY", "")
|| StringAt((m_current + 1), 8, "INGERICH", "EOGHEGAN", "")))
||(IsVowel(m_current + 1)
&& (StringAt((m_current + 1), 3, "EE ", "EEW", "")
|| (StringAt((m_current + 1), 3, "IGI", "IRA", "IBE", "AOL", "IDE", "IGL", "")
&& !StringAt((m_current + 1), 5, "IDEON", "") )
|| StringAt((m_current + 1), 4, "ILES", "INGI", "ISEL", "")
|| (StringAt((m_current + 1), 5, "INGER", "") && !StringAt((m_current + 1), 8, "INGERICH", ""))
|| StringAt((m_current + 1), 5, "IBBER", "IBBET", "IBLET", "IBRAN", "IGOLO", "IRARD", "IGANT", "")
|| StringAt((m_current + 1), 6, "IRAFFE", "EEWHIZ","")
|| StringAt((m_current + 1), 7, "ILLETTE", "IBRALTA", ""))))
{
return true;
}
return false;
}
/**
* Encode cases where 'G' is at start of word followed
* by a "front" vowel e.g. 'E', 'I', 'Y'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Initial_G_Front_Vowel()
{
// 'g' followed by vowel at beginning
if((m_current == 0) && Front_Vowel(m_current + 1))
{
// special case "gila" as in "gila monster"
if(StringAt((m_current + 1), 3, "ILA", "")
&& (m_length == 4))
{
MetaphAdd("H");
}
else if(Initial_G_Soft())
{
MetaphAddExactApprox("J", "G", "J", "K");
}
else
{
// only code alternate 'J' if front vowel
if((m_inWord.charAt(m_current + 1) == 'E') || (m_inWord.charAt(m_current + 1) == 'I'))
{
MetaphAddExactApprox("G", "J", "K", "J");
}
else
{
MetaphAddExactApprox("G", "K");
}
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode "-NGER-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_NGER()
{
if((m_current > 1)
&& StringAt((m_current - 1), 4, "NGER", ""))
{
// default 'G' => J such as 'ranger', 'stranger', 'manger', 'messenger', 'orangery', 'granger'
// 'boulanger', 'challenger', 'danger', 'changer', 'harbinger', 'lounger', 'ginger', 'passenger'
// except for these the following
if(!(RootOrInflections(m_inWord, "ANGER")
|| RootOrInflections(m_inWord, "LINGER")
|| RootOrInflections(m_inWord, "MALINGER")
|| RootOrInflections(m_inWord, "FINGER")
|| (StringAt((m_current - 3), 4, "HUNG", "FING", "BUNG", "WING", "RING", "DING", "ZENG",
"ZING", "JUNG", "LONG", "PING", "CONG", "MONG", "BANG",
"GANG", "HANG", "LANG", "SANG", "SING", "WANG", "ZANG", "")
// exceptions to above where 'G' => J
&& !(StringAt((m_current - 6), 7, "BOULANG", "SLESING", "KISSING", "DERRING", "")
|| StringAt((m_current - 8), 9, "SCHLESING", "")
|| StringAt((m_current - 5), 6, "SALING", "BELANG", "")
|| StringAt((m_current - 6), 7, "BARRING", "")
|| StringAt((m_current - 6), 9, "PHALANGER", "")
|| StringAt((m_current - 4), 5, "CHANG", "")))
|| StringAt((m_current - 4), 5, "STING", "YOUNG", "")
|| StringAt((m_current - 5), 6, "STRONG", "")
|| StringAt(0, 3, "UNG", "ENG", "ING", "")
|| StringAt(m_current, 6, "GERICH", "")
|| StringAt(0, 6, "SENGER", "")
|| StringAt((m_current - 3), 6, "WENGER", "MUNGER", "SONGER", "KINGER", "")
|| StringAt((m_current - 4), 7, "FLINGER", "SLINGER", "STANGER", "STENGER", "KLINGER", "CLINGER", "")
|| StringAt((m_current - 5), 8, "SPRINGER", "SPRENGER", "")
|| StringAt((m_current - 3), 7, "LINGERF", "")
|| StringAt((m_current - 2), 7, "ANGERLY", "ANGERBO", "INGERSO", "") ))
{
MetaphAddExactApprox("J", "G", "J", "K");
}
else
{
MetaphAddExactApprox("G", "J", "K", "J");
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode "-GER-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GER()
{
if((m_current > 0)
&& StringAt((m_current + 1), 2, "ER", ""))
{
// Exceptions to 'GE' where 'G' => K
// e.g. "JAGER", "TIGER", "LIGER", "LAGER", "LUGER", "AUGER", "EAGER", "HAGER", "SAGER"
if((((m_current == 2) && IsVowel(m_current - 1) && !IsVowel(m_current - 2)
&& !(StringAt((m_current - 2), 5, "PAGER", "WAGER", "NIGER", "ROGER", "LEGER", "CAGER", ""))
|| StringAt((m_current - 2), 5, "AUGER", "EAGER", "INGER", "YAGER", ""))
|| StringAt((m_current - 3), 6, "SEEGER", "JAEGER", "GEIGER", "KRUGER", "SAUGER", "BURGER",
"MEAGER", "MARGER", "RIEGER", "YAEGER", "STEGER", "PRAGER", "SWIGER",
"YERGER", "TORGER", "FERGER", "HILGER", "ZEIGER", "YARGER",
"COWGER", "CREGER", "KROGER", "KREGER", "GRAGER", "STIGER", "BERGER", "")
// 'berger' but not 'bergerac'
|| (StringAt((m_current - 3), 6, "BERGER", "") && ((m_current + 2) == m_last))
|| StringAt((m_current - 4), 7, "KREIGER", "KRUEGER", "METZGER", "KRIEGER", "KROEGER", "STEIGER",
"DRAEGER", "BUERGER", "BOERGER", "FIBIGER", "")
// e.g. 'harshbarger', 'winebarger'
|| (StringAt((m_current - 3), 6, "BARGER", "") && (m_current > 4))
// e.g. 'weisgerber'
|| (StringAt(m_current, 6, "GERBER", "") && (m_current > 0))
|| StringAt((m_current - 5), 8, "SCHWAGER", "LYBARGER", "SPRENGER", "GALLAGER", "WILLIGER", "")
|| StringAt(0, 4, "HARGER", "")
|| (StringAt(0, 4, "AGER", "EGER", "") && (m_length == 4))
|| StringAt((m_current - 1), 6, "YGERNE", "")
|| StringAt((m_current - 6), 9, "SCHWEIGER", ""))
&& !(StringAt((m_current - 5), 10, "BELLIGEREN", "")
|| StringAt(0, 7, "MARGERY", "")
|| StringAt((m_current - 3), 8, "BERGERAC", "")))
{
if(SlavoGermanic())
{
MetaphAddExactApprox("G", "K");
}
else
{
MetaphAddExactApprox("G", "J", "K", "J");
}
}
else
{
MetaphAddExactApprox("J", "G", "J", "K");
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* ENcode "-GEL-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GEL()
{
// more likely to be "-GEL-" => JL
if(StringAt((m_current + 1), 2, "EL", "")
&& (m_current > 0))
{
// except for
// "BAGEL", "HEGEL", "HUGEL", "KUGEL", "NAGEL", "VOGEL", "FOGEL", "PAGEL"
if(((m_length == 5)
&& IsVowel(m_current - 1)
&& !IsVowel(m_current - 2)
&& !StringAt((m_current - 2), 5, "NIGEL", "RIGEL", ""))
// or the following as combining forms
|| StringAt((m_current - 2), 5, "ENGEL", "HEGEL", "NAGEL", "VOGEL", "")
|| StringAt((m_current - 3), 6, "MANGEL", "WEIGEL", "FLUGEL", "RANGEL", "HAUGEN", "RIEGEL", "VOEGEL", "")
|| StringAt((m_current - 4), 7, "SPEIGEL", "STEIGEL", "WRANGEL", "SPIEGEL", "")
|| StringAt((m_current - 4), 8, "DANEGELD", ""))
{
if(SlavoGermanic())
{
MetaphAddExactApprox("G", "K");
}
else
{
MetaphAddExactApprox("G", "J", "K", "J");
}
}
else
{
MetaphAddExactApprox("J", "G", "J", "K");
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode "-G-" followed by a vowel when non-initial leter.
* Default for this is a 'J' sound, so check exceptions where
* it is pronounced 'G'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Non_Initial_G_Front_Vowel()
{
// -gy-, gi-, ge-
if(StringAt((m_current + 1), 1, "E", "I", "Y", ""))
{
// '-ge' at end
// almost always 'j 'sound
if(StringAt(m_current, 2, "GE", "") && (m_current == (m_last - 1)))
{
if(Hard_GE_At_End())
{
if(SlavoGermanic())
{
MetaphAddExactApprox("G", "K");
}
else
{
MetaphAddExactApprox("G", "J", "K", "J");
}
}
else
{
MetaphAdd("J");
}
}
else
{
if(Internal_Hard_G())
{
// don't encode KG or KK if e.g. "mcgill"
if(!((m_current == 2) && StringAt(0, 2, "MC", ""))
|| ((m_current == 3) && StringAt(0, 3, "MAC", "")))
{
if(SlavoGermanic())
{
MetaphAddExactApprox("G", "K");
}
else
{
MetaphAddExactApprox("G", "J", "K", "J");
}
}
}
else
{
MetaphAddExactApprox("J", "G", "J", "K");
}
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/*
* Detect german names and other words that have
* a 'hard' 'g' in the context of "-ge" at end
*
* @return true if encoding handled in this routine, false if not
*/
boolean Hard_GE_At_End()
{
if(StringAt(0, 6, "RENEGE", "STONGE", "STANGE", "PRANGE", "KRESGE", "")
|| StringAt(0, 5, "BYRGE", "BIRGE", "BERGE", "HAUGE", "")
|| StringAt(0, 4, "HAGE", "")
|| StringAt(0, 5, "LANGE", "SYNGE", "BENGE", "RUNGE", "HELGE", "")
|| StringAt(0, 4, "INGE", "LAGE", ""))
{
return true;
}
return false;
}
/**
* Exceptions to default encoding to 'J':
* encode "-G-" to 'G' in "-g<frontvowel>-" words
* where we are not at "-GE" at the end of the word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Internal_Hard_G()
{
// if not "-GE" at end
if(!(((m_current + 1) == m_last) && (CharAt(m_current + 1) == 'E') )
&& (Internal_Hard_NG()
|| Internal_Hard_GEN_GIN_GET_GIT()
|| Internal_Hard_G_Open_Syllable()
|| Internal_Hard_G_Other()))
{
return true;
}
return false;
}
/**
* Detect words where "-ge-" or "-gi-" get a 'hard' 'g'
* even though this is usually a 'soft' 'g' context
*
* @return true if 'hard' 'g' detected
*
*/
boolean Internal_Hard_G_Other()
{
if((StringAt(m_current, 4, "GETH", "GEAR", "GEIS", "GIRL", "GIVI", "GIVE", "GIFT",
"GIRD", "GIRT", "GILV", "GILD", "GELD", "")
&& !StringAt((m_current - 3), 6, "GINGIV", "") )
// "gish" but not "largish"
|| (StringAt((m_current + 1), 3, "ISH", "") && (m_current > 0) && !StringAt(0, 4, "LARG", ""))
|| (StringAt((m_current - 2), 5, "MAGED", "MEGID", "") && !((m_current + 2) == m_last))
|| StringAt(m_current, 3, "GEZ", "")
|| StringAt(0, 4, "WEGE", "HAGE", "")
|| (StringAt((m_current - 2), 6, "ONGEST", "UNGEST", "")
&& ((m_current + 3) == m_last)
&& !StringAt((m_current - 3), 7, "CONGEST", ""))
|| StringAt(0, 5, "VOEGE", "BERGE", "HELGE", "")
|| (StringAt(0, 4, "ENGE", "BOGY", "") && (m_length == 4))
|| StringAt(m_current, 6, "GIBBON", "")
|| StringAt(0, 10, "CORREGIDOR", "")
|| StringAt(0, 8, "INGEBORG", "")
|| (StringAt(m_current, 4, "GILL", "")
&& (((m_current + 3) == m_last) || ((m_current + 4) == m_last))
&& !StringAt(0, 8, "STURGILL", "")))
{
return true;
}
return false;
}
/**
* Detect words where "-gy-", "-gie-", "-gee-",
* or "-gio-" get a 'hard' 'g' even though this is
* usually a 'soft' 'g' context
*
* @return true if 'hard' 'g' detected
*
*/
boolean Internal_Hard_G_Open_Syllable()
{
if(StringAt((m_current + 1), 3, "EYE", "")
|| StringAt((m_current - 2), 4, "FOGY", "POGY", "YOGI", "")
|| StringAt((m_current - 2), 5, "MAGEE", "MCGEE", "HAGIO", "")
|| StringAt((m_current - 1), 4, "RGEY", "OGEY", "")
|| StringAt((m_current - 3), 5, "HOAGY", "STOGY", "PORGY", "")
|| StringAt((m_current - 5), 8, "CARNEGIE", "")
|| (StringAt((m_current - 1), 4, "OGEY", "OGIE", "") && ((m_current + 2) == m_last)))
{
return true;
}
return false;
}
/**
* Detect a number of contexts, mostly german names, that
* take a 'hard' 'g'.
*
* @return true if 'hard' 'g' detected, false if not
*
*/
boolean Internal_Hard_GEN_GIN_GET_GIT()
{
if((StringAt((m_current - 3), 6, "FORGET", "TARGET", "MARGIT", "MARGET", "TURGEN",
"BERGEN", "MORGEN", "JORGEN", "HAUGEN", "JERGEN",
"JURGEN", "LINGEN", "BORGEN", "LANGEN", "KLAGEN", "STIGER", "BERGER", "")
&& !StringAt(m_current, 7, "GENETIC", "GENESIS", "")
&& !StringAt((m_current - 4), 8, "PLANGENT", ""))
|| (StringAt((m_current - 3), 6, "BERGIN", "FEAGIN", "DURGIN", "") && ((m_current + 2) == m_last))
|| (StringAt((m_current - 2), 5, "ENGEN", "") && !StringAt((m_current + 3), 3, "DER", "ETI", "ESI", ""))
|| StringAt((m_current - 4), 7, "JUERGEN", "")
|| StringAt(0, 5, "NAGIN", "MAGIN", "HAGIN", "")
|| (StringAt(0, 5, "ENGIN", "DEGEN", "LAGEN", "MAGEN", "NAGIN", "") && (m_length == 5))
|| (StringAt((m_current - 2), 5, "BEGET", "BEGIN", "HAGEN", "FAGIN",
"BOGEN", "WIGIN", "NTGEN", "EIGEN",
"WEGEN", "WAGEN", "")
&& !StringAt((m_current - 5), 8, "OSPHAGEN", "")))
{
return true;
}
return false;
}
/**
* Detect a number of contexts of '-ng-' that will
* take a 'hard' 'g' despite being followed by a
* front vowel.
*
* @return true if 'hard' 'g' detected, false if not
*
*/
boolean Internal_Hard_NG()
{
if((StringAt((m_current - 3), 4, "DANG", "FANG", "SING", "")
// exception to exception
&& !StringAt((m_current - 5), 8, "DISINGEN", "") )
|| StringAt(0, 5, "INGEB", "ENGEB", "")
|| (StringAt((m_current - 3), 4, "RING", "WING", "HANG", "LONG", "")
&& !(StringAt((m_current - 4), 5, "CRING", "FRING", "ORANG", "TWING", "CHANG", "PHANG", "")
|| StringAt((m_current - 5), 6, "SYRING", "")
|| StringAt((m_current - 3), 7, "RINGENC", "RINGENT", "LONGITU", "LONGEVI", "")
// e.g. 'longino', 'mastrangelo'
|| (StringAt(m_current, 4, "GELO", "GINO", "") && ((m_current + 3) == m_last))))
|| (StringAt((m_current - 1), 3, "NGY", "")
// exceptions to exception
&& !(StringAt((m_current - 3), 5, "RANGY", "MANGY", "MINGY", "")
|| StringAt((m_current - 4), 6, "SPONGY", "STINGY", ""))))
{
return true;
}
return false;
}
/**
* Encode special case where "-GA-" => J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_GA_To_J()
{
// 'margary', 'margarine'
if((StringAt((m_current - 3), 7, "MARGARY", "MARGARI", "")
// but not in spanish forms such as "margatita"
&& !StringAt((m_current - 3), 8, "MARGARIT", ""))
|| StringAt(0, 4, "GAOL", "")
|| StringAt((m_current - 2), 5, "ALGAE", ""))
{
MetaphAddExactApprox("J", "G", "J", "K");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode 'H'
*
*
*/
void Encode_H()
{
if(Encode_Initial_Silent_H()
|| Encode_Initial_HS()
|| Encode_Initial_HU_HW()
|| Encode_Non_Initial_Silent_H())
{
return;
}
//only keep if first & before vowel or btw. 2 vowels
if(!Encode_H_Pronounced())
{
//also takes care of 'HH'
m_current++;
}
}
/**
* Encode cases where initial 'H' is not pronounced (in American)
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Initial_Silent_H()
{
//'hour', 'herb', 'heir', 'honor'
if(StringAt((m_current + 1), 3, "OUR", "ERB", "EIR", "")
|| StringAt((m_current + 1), 4, "ONOR", "")
|| StringAt((m_current + 1), 5, "ONOUR", "ONEST", ""))
{
// british pronounce H in this word
// americans give it 'H' for the name,
// no 'H' for the plant
if((m_current == 0) && StringAt(m_current, 4, "HERB", ""))
{
if(m_encodeVowels)
{
MetaphAdd("HA", "A");
}
else
{
MetaphAdd("H", "A");
}
}
else if((m_current == 0) || m_encodeVowels)
{
MetaphAdd("A");
}
m_current++;
// don't encode vowels twice
m_current = SkipVowels(m_current);
return true;
}
return false;
}
/**
* Encode "HS-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Initial_HS()
{
// old chinese pinyin transliteration
// e.g., 'HSIAO'
if ((m_current == 0) && StringAt(0, 2, "HS", ""))
{
MetaphAdd("X");
m_current += 2;
return true;
}
return false;
}
/**
* Encode cases where "HU-" is pronounced as part of a vowel dipthong
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Initial_HU_HW()
{
// spanish spellings and chinese pinyin transliteration
if (StringAt(0, 3, "HUA", "HUE", "HWA", ""))
{
if(!StringAt(m_current, 4, "HUEY", ""))
{
MetaphAdd("A");
if(!m_encodeVowels)
{
m_current += 3;
}
else
{
m_current++;
// don't encode vowels twice
while(IsVowel(m_current) || (CharAt(m_current) == 'W'))
{
m_current++;
}
}
return true;
}
}
return false;
}
/**
* Encode cases where 'H' is silent between vowels
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Non_Initial_Silent_H()
{
//exceptions - 'h' not pronounced
// "PROHIB" BUT NOT "PROHIBIT"
if(StringAt((m_current - 2), 5, "NIHIL", "VEHEM", "LOHEN", "NEHEM",
"MAHON", "MAHAN", "COHEN", "GAHAN", "")
|| StringAt((m_current - 3), 6, "GRAHAM", "PROHIB", "FRAHER",
"TOOHEY", "TOUHEY", "")
|| StringAt((m_current - 3), 5, "TOUHY", "")
|| StringAt(0, 9, "CHIHUAHUA", ""))
{
if(!m_encodeVowels)
{
m_current += 2;
}
else
{
m_current++;
// don't encode vowels twice
m_current = SkipVowels(m_current);
}
return true;
}
return false;
}
/**
* Encode cases where 'H' is pronounced
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_H_Pronounced()
{
if((((m_current == 0)
|| IsVowel(m_current - 1)
|| ((m_current > 0)
&& (CharAt(m_current - 1) == 'W')))
&& IsVowel(m_current + 1))
// e.g. 'alWahhab'
|| ((CharAt(m_current + 1) == 'H') && IsVowel(m_current + 2)))
{
MetaphAdd("H");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode 'J'
*
*/
void Encode_J()
{
if(Encode_Spanish_J()
|| Encode_Spanish_OJ_UJ())
{
return;
}
Encode_Other_J();
}
/**
* Encode cases where initial or medial "j" is in a spanish word or name
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Spanish_J()
{
//obvious spanish, e.g. "jose", "san jacinto"
if((StringAt((m_current + 1), 3, "UAN", "ACI", "ALI", "EFE", "ICA", "IME", "OAQ", "UAR", "")
&& !StringAt(m_current, 8, "JIMERSON", "JIMERSEN", ""))
|| (StringAt((m_current + 1), 3, "OSE", "") && ((m_current + 3) == m_last))
|| StringAt((m_current + 1), 4, "EREZ", "UNTA", "AIME", "AVIE", "AVIA", "")
|| StringAt((m_current + 1), 6, "IMINEZ", "ARAMIL", "")
|| (((m_current + 2) == m_last) && StringAt((m_current - 2), 5, "MEJIA", ""))
|| StringAt((m_current - 2), 5, "TEJED", "TEJAD", "LUJAN", "FAJAR", "BEJAR", "BOJOR", "CAJIG",
"DEJAS", "DUJAR", "DUJAN", "MIJAR", "MEJOR", "NAJAR",
"NOJOS", "RAJED", "RIJAL", "REJON", "TEJAN", "UIJAN", "")
|| StringAt((m_current - 3), 8, "ALEJANDR", "GUAJARDO", "TRUJILLO", "")
|| (StringAt((m_current - 2), 5, "RAJAS", "") && (m_current > 2))
|| (StringAt((m_current - 2), 5, "MEJIA", "") && !StringAt((m_current - 2), 6, "MEJIAN", ""))
|| StringAt((m_current - 1), 5, "OJEDA", "")
|| StringAt((m_current - 3), 5, "LEIJA", "MINJA", "")
|| StringAt((m_current - 3), 6, "VIAJES", "GRAJAL", "")
|| StringAt(m_current, 8, "JAUREGUI", "")
|| StringAt((m_current - 4), 8, "HINOJOSA", "")
|| StringAt(0, 4, "SAN ", "")
|| (((m_current + 1) == m_last)
&& (CharAt(m_current + 1) == 'O')
// exceptions
&& !(StringAt(0, 4, "TOJO", "")
|| StringAt(0, 5, "BANJO", "")
|| StringAt(0, 6, "MARYJO", ""))))
{
// americans pronounce "juan" as 'wan'
// and "marijuana" and "tijuana" also
// do not get the 'H' as in spanish, so
// just treat it like a vowel in these cases
if(!(StringAt(m_current, 4, "JUAN", "") || StringAt(m_current, 4, "JOAQ", "")))
{
MetaphAdd("H");
}
else
{
if(m_current == 0)
{
MetaphAdd("A");
}
}
AdvanceCounter(2, 1);
return true;
}
// Jorge gets 2nd HARHA. also JULIO, JESUS
if(StringAt((m_current + 1), 4, "ORGE", "ULIO", "ESUS", "")
&& !StringAt(0, 6, "JORGEN", ""))
{
// get both consonants for "jorge"
if(((m_current + 4) == m_last) && StringAt((m_current + 1), 4, "ORGE", ""))
{
if(m_encodeVowels)
{
MetaphAdd("JARJ", "HARHA");
}
else
{
MetaphAdd("JRJ", "HRH");
}
AdvanceCounter(5, 5);
return true;
}
MetaphAdd("J", "H");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode cases where 'J' is clearly in a german word or name
* that americans pronounce in the german fashion
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_German_J()
{
if(StringAt((m_current + 1), 2, "AH", "")
|| (StringAt((m_current + 1), 5, "OHANN", "") && ((m_current + 5) == m_last))
|| (StringAt((m_current + 1), 3, "UNG", "") && !StringAt((m_current + 1), 4, "UNGL", ""))
|| StringAt((m_current + 1), 3, "UGO", ""))
{
MetaphAdd("A");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode "-JOJ-" and "-JUJ-" as spanish words
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Spanish_OJ_UJ()
{
if(StringAt((m_current + 1), 5, "OJOBA", "UJUY ", ""))
{
if(m_encodeVowels)
{
MetaphAdd("HAH");
}
else
{
MetaphAdd("HH");
}
AdvanceCounter(4, 3);
return true;
}
return false;
}
/**
* Encode 'J' => J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_J_To_J()
{
if(IsVowel(m_current + 1))
{
if((m_current == 0)
&& Names_Beginning_With_J_That_Get_Alt_Y())
{
// 'Y' is a vowel so encode
// is as 'A'
if(m_encodeVowels)
{
MetaphAdd("JA", "A");
}
else
{
MetaphAdd("J", "A");
}
}
else
{
if(m_encodeVowels)
{
MetaphAdd("JA");
}
else
{
MetaphAdd("J");
}
}
m_current++;
m_current = SkipVowels(m_current);
return false;
}
else
{
MetaphAdd("J");
m_current++;
return true;
}
// return false;
}
/**
* Encode 'J' toward end in spanish words
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Spanish_J_2()
{
// spanish forms e.g. "brujo", "badajoz"
if((((m_current - 2) == 0)
&& StringAt((m_current - 2), 4, "BOJA", "BAJA", "BEJA", "BOJO", "MOJA", "MOJI", "MEJI", ""))
|| (((m_current - 3) == 0)
&& StringAt((m_current - 3), 5, "FRIJO", "BRUJO", "BRUJA", "GRAJE", "GRIJA", "LEIJA", "QUIJA", ""))
|| (((m_current + 3) == m_last)
&& StringAt((m_current - 1), 5, "AJARA", ""))
|| (((m_current + 2) == m_last)
&& StringAt((m_current - 1), 4, "AJOS", "EJOS", "OJAS", "OJOS", "UJON", "AJOZ", "AJAL", "UJAR", "EJON", "EJAN", ""))
|| (((m_current + 1) == m_last)
&& (StringAt((m_current - 1), 3, "OJA", "EJA", "") && !StringAt(0, 4, "DEJA", ""))))
{
MetaphAdd("H");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode 'J' as vowel in some exception cases
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_J_As_Vowel()
{
if(StringAt(m_current, 5, "JEWSK", ""))
{
MetaphAdd("J", "");
return true;
}
// e.g. "stijl", "sejm" - dutch, scandanavian, and eastern european spellings
if((StringAt((m_current + 1), 1, "L", "T", "K", "S", "N", "M", "")
// except words from hindi and arabic
&& !StringAt((m_current + 2), 1, "A", ""))
|| StringAt(0, 9, "HALLELUJA", "LJUBLJANA", "")
|| StringAt(0, 4, "LJUB", "BJOR", "")
|| StringAt(0, 5, "HAJEK", "")
|| StringAt(0, 3, "WOJ", "")
// e.g. 'fjord'
|| StringAt(0, 2, "FJ", "")
// e.g. 'rekjavik', 'blagojevic'
|| StringAt(m_current, 5, "JAVIK", "JEVIC", "")
|| (((m_current + 1) == m_last) && StringAt(0, 5, "SONJA", "TANJA", "TONJA", "")))
{
return true;
}
return false;
}
/**
* Call routines to encode 'J', in proper order
*
*/
void Encode_Other_J()
{
if(m_current == 0)
{
if(Encode_German_J())
{
return;
}
else
{
if(Encode_J_To_J())
{
return;
}
}
}
else
{
if(Encode_Spanish_J_2())
{
return;
}
else if(!Encode_J_As_Vowel())
{
MetaphAdd("J");
}
//it could happen! e.g. "hajj"
// eat redundant 'J'
if(CharAt(m_current + 1) == 'J')
{
m_current += 2;
}
else
{
m_current++;
}
}
}
/**
* Encode 'K'
*
*
*/
void Encode_K()
{
if(!Encode_Silent_K())
{
MetaphAdd("K");
// eat redundant 'K's and 'Q's
if((CharAt(m_current + 1) == 'K')
|| (CharAt(m_current + 1) == 'Q'))
{
m_current += 2;
}
else
{
m_current++;
}
}
}
/**
* Encode cases where 'K' is not pronounced
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_K()
{
//skip this except for special cases
if((m_current == 0)
&& StringAt(m_current, 2, "KN", ""))
{
if(!(StringAt((m_current + 2), 5, "ESSET", "IEVEL", "") || StringAt((m_current + 2), 3, "ISH", "") ))
{
m_current += 1;
return true;
}
}
// e.g. "know", "knit", "knob"
if((StringAt((m_current + 1), 3, "NOW", "NIT", "NOT", "NOB", "")
// exception, "slipknot" => SLPNT but "banknote" => PNKNT
&& !StringAt(0, 8, "BANKNOTE", ""))
|| StringAt((m_current + 1), 4, "NOCK", "NUCK", "NIFE", "NACK", "")
|| StringAt((m_current + 1), 5, "NIGHT", ""))
{
// N already encoded before
// e.g. "penknife"
if ((m_current > 0) && CharAt(m_current - 1) == 'N')
{
m_current += 2;
}
else
{
m_current++;
}
return true;
}
return false;
}
/**
* Encode 'L'
*
* Includes special vowel transposition
* encoding, where 'LE' => AL
*
*/
void Encode_L()
{
// logic below needs to know this
// after 'm_current' variable changed
int save_current = m_current;
Interpolate_Vowel_When_Cons_L_At_End();
if(Encode_LELY_To_L()
|| Encode_COLONEL()
|| Encode_French_AULT()
|| Encode_French_EUIL()
|| Encode_French_OULX()
|| Encode_Silent_L_In_LM()
|| Encode_Silent_L_In_LK_LV()
|| Encode_Silent_L_In_OULD())
{
return;
}
if(Encode_LL_As_Vowel_Cases())
{
return;
}
Encode_LE_Cases(save_current);
}
/**
* Cases where an L follows D, G, or T at the
* end have a schwa pronounced before the L
*
*/
void Interpolate_Vowel_When_Cons_L_At_End()
{
if(m_encodeVowels == true)
{
// e.g. "ertl", "vogl"
if((m_current == m_last)
&& StringAt((m_current - 1), 1, "D", "G", "T", ""))
{
MetaphAdd("A");
}
}
}
/**
* Catch cases where 'L' spelled twice but pronounced
* once, e.g., 'DOCILELY' => TSL
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_LELY_To_L()
{
// e.g. "agilely", "docilely"
if(StringAt((m_current - 1), 5, "ILELY", "")
&& ((m_current + 3) == m_last))
{
MetaphAdd("L");
m_current += 3;
return true;
}
return false;
}
/**
* Encode special case "colonel" => KRNL. Can somebody tell
* me how this pronounciation came to be?
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_COLONEL()
{
if(StringAt((m_current - 2), 7, "COLONEL", ""))
{
MetaphAdd("R");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-AULT-", found in a french names
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_French_AULT()
{
// e.g. "renault" and "foucault", well known to americans, but not "fault"
if((m_current > 3)
&& (StringAt((m_current - 3), 5, "RAULT", "NAULT", "BAULT", "SAULT", "GAULT", "CAULT", "")
|| StringAt((m_current - 4), 6, "REAULT", "RIAULT", "NEAULT", "BEAULT", ""))
&& !(RootOrInflections(m_inWord, "ASSAULT")
|| StringAt((m_current - 8), 10, "SOMERSAULT","")
|| StringAt((m_current - 9), 11, "SUMMERSAULT", "")))
{
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-EUIL-", always found in a french word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_French_EUIL()
{
// e.g. "auteuil"
if(StringAt((m_current - 3), 4, "EUIL", "") && (m_current == m_last))
{
m_current++;
return true;
}
return false;
}
/**
* Encode "-OULX", always found in a french word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_French_OULX()
{
// e.g. "proulx"
if(StringAt((m_current - 2), 4, "OULX", "") && ((m_current + 1) == m_last))
{
m_current += 2;
return true;
}
return false;
}
/**
* Encodes contexts where 'L' is not pronounced in "-LM-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_L_In_LM()
{
if(StringAt(m_current, 2, "LM", "LN", ""))
{
// e.g. "lincoln", "holmes", "psalm", "salmon"
if((StringAt((m_current - 2), 4, "COLN", "CALM", "BALM", "MALM", "PALM", "")
|| (StringAt((m_current - 1), 3, "OLM", "") && ((m_current + 1) == m_last))
|| StringAt((m_current - 3), 5, "PSALM", "QUALM", "")
|| StringAt((m_current - 2), 6, "SALMON", "HOLMES", "")
|| StringAt((m_current - 1), 6, "ALMOND", "")
|| ((m_current == 1) && StringAt((m_current - 1), 4, "ALMS", "") ))
&& (!StringAt((m_current + 2), 1, "A", "")
&& !StringAt((m_current - 2), 5, "BALMO", "")
&& !StringAt((m_current - 2), 6, "PALMER", "PALMOR", "BALMER", "")
&& !StringAt((m_current - 3), 5, "THALM", "")))
{
m_current++;
return true;
}
else
{
MetaphAdd("L");
m_current++;
return true;
}
}
return false;
}
/**
* Encodes contexts where '-L-' is silent in 'LK', 'LV'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_L_In_LK_LV()
{
if((StringAt((m_current - 2), 4, "WALK", "YOLK", "FOLK", "HALF", "TALK", "CALF", "BALK", "CALK", "")
|| (StringAt((m_current - 2), 4, "POLK", "")
&& !StringAt((m_current - 2), 5, "POLKA", "WALKO", ""))
|| (StringAt((m_current - 2), 4, "HALV", "")
&& !StringAt((m_current - 2), 5, "HALVA", "HALVO", ""))
|| (StringAt((m_current - 3), 5, "CAULK", "CHALK", "BAULK", "FAULK", "")
&& !StringAt((m_current - 4), 6, "SCHALK", ""))
|| (StringAt((m_current - 2), 5, "SALVE", "CALVE", "")
|| StringAt((m_current - 2), 6, "SOLDER", ""))
// exceptions to above cases where 'L' is usually pronounced
&& !StringAt((m_current - 2), 6, "SALVER", "CALVER", ""))
&& !StringAt((m_current - 5), 9, "GONSALVES", "GONCALVES", "")
&& !StringAt((m_current - 2), 6, "BALKAN", "TALKAL", "")
&& !StringAt((m_current - 3), 5, "PAULK", "CHALF", ""))
{
m_current++;
return true;
}
return false;
}
/**
* Encode 'L' in contexts of "-OULD-" where it is silent
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_L_In_OULD()
{
//'would', 'could'
if(StringAt((m_current - 3), 5, "WOULD", "COULD", "")
|| (StringAt((m_current - 4), 6, "SHOULD", "")
&& !StringAt((m_current - 4), 8, "SHOULDER", "")))
{
MetaphAddExactApprox("D", "T");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-ILLA-" and "-ILLE-" in spanish and french
* contexts were americans know to pronounce it as a 'Y'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_LL_As_Vowel_Special_Cases()
{
if(StringAt((m_current - 5), 8, "TORTILLA", "")
|| StringAt((m_current - 8), 11, "RATATOUILLE", "")
// e.g. 'guillermo', "veillard"
|| (StringAt(0, 5, "GUILL", "VEILL", "GAILL", "")
// 'guillotine' usually has '-ll-' pronounced as 'L' in english
&& !(StringAt((m_current - 3), 7, "GUILLOT", "GUILLOR", "GUILLEN", "")
|| (StringAt(0, 5, "GUILL", "") && (m_length == 5))))
// e.g. "brouillard", "gremillion"
|| StringAt(0, 7, "BROUILL", "GREMILL", "ROBILL", "")
// e.g. 'mireille'
|| (StringAt((m_current - 2), 5, "EILLE", "")
&& ((m_current + 2) == m_last)
// exception "reveille" usually pronounced as 're-vil-lee'
&& !StringAt((m_current - 5), 8, "REVEILLE", "")))
{
m_current += 2;
return true;
}
return false;
}
/**
* Encode other spanish cases where "-LL-" is pronounced as 'Y'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_LL_As_Vowel()
{
//spanish e.g. "cabrillo", "gallegos" but also "gorilla", "ballerina" -
// give both pronounciations since an american might pronounce "cabrillo"
// in the spanish or the american fashion.
if((((m_current + 3) == m_length)
&& StringAt((m_current - 1), 4, "ILLO", "ILLA", "ALLE", ""))
|| (((StringAt((m_last - 1), 2, "AS", "OS", "")
|| StringAt(m_last, 2, "AS", "OS", "")
|| StringAt(m_last, 1, "A", "O", ""))
&& StringAt((m_current - 1), 2, "AL", "IL", ""))
&& !StringAt((m_current - 1), 4, "ALLA", ""))
|| StringAt(0, 5, "VILLE", "VILLA", "")
|| StringAt(0, 8, "GALLARDO", "VALLADAR", "MAGALLAN", "CAVALLAR", "BALLASTE", "")
|| StringAt(0, 3, "LLA", ""))
{
MetaphAdd("L", "");
m_current += 2;
return true;
}
return false;
}
/**
* Call routines to encode "-LL-", in proper order
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_LL_As_Vowel_Cases()
{
if(CharAt(m_current + 1) == 'L')
{
if(Encode_LL_As_Vowel_Special_Cases())
{
return true;
}
else if(Encode_LL_As_Vowel())
{
return true;
}
m_current += 2;
}
else
{
m_current++;
}
return false;
}
/**
* Encode vowel-encoding cases where "-LE-" is pronounced "-EL-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Vowel_LE_Transposition(int save_current)
{
// transposition of vowel sound and L occurs in many words,
// e.g. "bristle", "dazzle", "goggle" => KAKAL
if(m_encodeVowels
&& (save_current > 1)
&& !IsVowel(save_current - 1)
&& (CharAt(save_current + 1) == 'E')
&& (CharAt(save_current - 1) != 'L')
&& (CharAt(save_current - 1) != 'R')
// lots of exceptions to this:
&& !IsVowel(save_current + 2)
&& !StringAt(0, 7, "ECCLESI", "COMPLEC", "COMPLEJ", "ROBLEDO", "")
&& !StringAt(0, 5, "MCCLE", "MCLEL", "")
&& !StringAt(0, 6, "EMBLEM", "KADLEC", "")
&& !(((save_current + 2) == m_last) && StringAt(save_current, 3, "LET", ""))
&& !StringAt(save_current, 7, "LETTING", "")
&& !StringAt(save_current, 6, "LETELY", "LETTER", "LETION", "LETIAN", "LETING", "LETORY", "")
&& !StringAt(save_current, 5, "LETUS", "LETIV", "")
&& !StringAt(save_current, 4, "LESS", "LESQ", "LECT", "LEDG", "LETE", "LETH", "LETS", "LETT", "")
&& !StringAt(save_current, 3, "LEG", "LER", "LEX", "")
// e.g. "complement" !=> KAMPALMENT
&& !(StringAt(save_current, 6, "LEMENT", "")
&& !(StringAt((m_current - 5), 6, "BATTLE", "TANGLE", "PUZZLE", "RABBLE", "BABBLE", "")
|| StringAt((m_current - 4), 5, "TABLE", "")))
&& !(((save_current + 2) == m_last) && StringAt((save_current - 2), 5, "OCLES", "ACLES", "AKLES", ""))
&& !StringAt((save_current - 3), 5, "LISLE", "AISLE", "")
&& !StringAt(0, 4, "ISLE", "")
&& !StringAt(0, 6, "ROBLES", "")
&& !StringAt((save_current - 4), 7, "PROBLEM", "RESPLEN", "")
&& !StringAt((save_current - 3), 6, "REPLEN", "")
&& !StringAt((save_current - 2), 4, "SPLE", "")
&& (CharAt(save_current - 1) != 'H')
&& (CharAt(save_current - 1) != 'W'))
{
MetaphAdd("AL");
flag_AL_inversion = true;
// eat redundant 'L'
if(CharAt(save_current + 2) == 'L')
{
m_current = save_current + 3;
}
return true;
}
return false;
}
/**
* Encode special vowel-encoding cases where 'E' is not
* silent at the end of a word as is the usual case
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Vowel_Preserve_Vowel_After_L(int save_current)
{
// an example of where the vowel would NOT need to be preserved
// would be, say, "hustled", where there is no vowel pronounced
// between the 'l' and the 'd'
if(m_encodeVowels
&& !IsVowel(save_current - 1)
&& (CharAt(save_current + 1) == 'E')
&& (save_current > 1)
&& ((save_current + 1) != m_last)
&& !(StringAt((save_current + 1), 2, "ES", "ED", "")
&& ((save_current + 2) == m_last))
&& !StringAt((save_current - 1), 5, "RLEST", "") )
{
MetaphAdd("LA");
m_current = SkipVowels(m_current);
return true;
}
return false;
}
/**
* Call routines to encode "-LE-", in proper order
*
* @param save_current index of actual current letter
*
*/
void Encode_LE_Cases(int save_current)
{
if(Encode_Vowel_LE_Transposition(save_current))
{
return;
}
else
{
if(Encode_Vowel_Preserve_Vowel_After_L(save_current))
{
return;
}
else
{
MetaphAdd("L");
}
}
}
/**
* Encode "-M-"
*
*/
void Encode_M()
{
if(Encode_Silent_M_At_Beginning()
|| Encode_MR_And_MRS()
|| Encode_MAC()
|| Encode_MPT())
{
return;
}
// Silent 'B' should really be handled
// under 'B", not here under 'M'!
Encode_MB();
MetaphAdd("M");
}
/**
* Encode cases where 'M' is silent at beginning of word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_M_At_Beginning()
{
//skip these when at start of word
if((m_current == 0)
&& StringAt(m_current, 2, "MN", ""))
{
m_current += 1;
return true;
}
return false;
}
/**
* Encode special cases "Mr." and "Mrs."
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_MR_And_MRS()
{
if((m_current == 0) && StringAt(m_current, 2, "MR", ""))
{
// exceptions for "mr." and "mrs."
if((m_length == 2) && StringAt(m_current, 2, "MR", ""))
{
if(m_encodeVowels)
{
MetaphAdd("MASTAR");
}
else
{
MetaphAdd("MSTR");
}
m_current += 2;
return true;
}
else if((m_length == 3) && StringAt(m_current, 3, "MRS", ""))
{
if(m_encodeVowels)
{
MetaphAdd("MASAS");
}
else
{
MetaphAdd("MSS");
}
m_current += 3;
return true;
}
}
return false;
}
/**
* Encode "Mac-" and "Mc-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_MAC()
{
// should only find irish and
// scottish names e.g. 'macintosh'
if((m_current == 0)
&& (StringAt(0, 7, "MACIVER", "MACEWEN", "")
|| StringAt(0, 8, "MACELROY", "MACILROY", "")
|| StringAt(0, 9, "MACINTOSH", "")
|| StringAt(0, 2, "MC", "") ))
{
if(m_encodeVowels)
{
MetaphAdd("MAK");
}
else
{
MetaphAdd("MK");
}
if(StringAt(0, 2, "MC", ""))
{
if(StringAt((m_current + 2), 1, "K", "G", "Q", "")
// watch out for e.g. "McGeorge"
&& !StringAt((m_current + 2), 4, "GEOR", ""))
{
m_current += 3;
}
else
{
m_current += 2;
}
}
else
{
m_current += 3;
}
return true;
}
return false;
}
/**
* Encode silent 'M' in context of "-MPT-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_MPT()
{
if(StringAt((m_current - 2), 8, "COMPTROL", "")
|| StringAt((m_current - 4), 7, "ACCOMPT", ""))
{
MetaphAdd("N");
m_current += 2;
return true;
}
return false;
}
/**
* Test if 'B' is silent in these contexts
*
* @return true if 'B' is silent in this context
*
*/
boolean Test_Silent_MB_1()
{
// e.g. "LAMB", "COMB", "LIMB", "DUMB", "BOMB"
// Handle combining roots first
if (((m_current == 3)
&& StringAt((m_current - 3), 5, "THUMB", ""))
|| ((m_current == 2)
&& StringAt((m_current - 2), 4, "DUMB", "BOMB", "DAMN", "LAMB", "NUMB", "TOMB", "") ))
{
return true;
}
return false;
}
/**
* Test if 'B' is pronounced in this context
*
* @return true if 'B' is pronounced in this context
*
*/
boolean Test_Pronounced_MB()
{
if (StringAt((m_current - 2), 6, "NUMBER", "")
|| (StringAt((m_current + 2), 1, "A", "")
&& !StringAt((m_current - 2), 7, "DUMBASS", ""))
|| StringAt((m_current + 2), 1, "O", "")
|| StringAt((m_current - 2), 6, "LAMBEN", "LAMBER", "LAMBET", "TOMBIG", "LAMBRE", ""))
{
return true;
}
return false;
}
/**
* Test whether "-B-" is silent in these contexts
*
* @return true if 'B' is silent in this context
*
*/
boolean Test_Silent_MB_2()
{
// 'M' is the current letter
if ((CharAt(m_current + 1) == 'B') && (m_current > 1)
&& (((m_current + 1) == m_last)
// other situations where "-MB-" is at end of root
// but not at end of word. The tests are for standard
// noun suffixes.
// e.g. "climbing" => KLMNK
|| StringAt((m_current + 2), 3, "ING", "ABL", "")
|| StringAt((m_current + 2), 4, "LIKE", "")
|| ((CharAt(m_current + 2) == 'S') && ((m_current + 2) == m_last))
|| StringAt((m_current - 5), 7, "BUNCOMB", "")
// e.g. "bomber",
|| (StringAt((m_current + 2), 2, "ED", "ER", "")
&& ((m_current + 3) == m_last)
&& (StringAt(0, 5, "CLIMB", "PLUMB", "")
// e.g. "beachcomber"
|| !StringAt((m_current - 1), 5, "IMBER", "AMBER", "EMBER", "UMBER", ""))
// exceptions
&& !StringAt((m_current - 2), 6, "CUMBER", "SOMBER", "") ) ) )
{
return true;
}
return false;
}
/**
* Test if 'B' is pronounced in these "-MB-" contexts
*
* @return true if "-B-" is pronounced in these contexts
*
*/
boolean Test_Pronounced_MB_2()
{
// e.g. "bombastic", "umbrage", "flamboyant"
if (StringAt((m_current - 1), 5, "OMBAS", "OMBAD", "UMBRA", "")
|| StringAt((m_current - 3), 4, "FLAM", "") )
{
return true;
}
return false;
}
/**
* Tests for contexts where "-N-" is silent when after "-M-"
*
* @return true if "-N-" is silent in these contexts
*
*/
boolean Test_MN()
{
if ((CharAt(m_current + 1) == 'N')
&& (((m_current + 1) == m_last)
// or at the end of a word but followed by suffixes
|| (StringAt((m_current + 2), 3, "ING", "EST", "") && ((m_current + 4) == m_last))
|| ((CharAt(m_current + 2) == 'S') && ((m_current + 2) == m_last))
|| (StringAt((m_current + 2), 2, "LY", "ER", "ED", "")
&& ((m_current + 3) == m_last))
|| StringAt((m_current - 2), 9, "DAMNEDEST", "")
|| StringAt((m_current - 5), 9, "GODDAMNIT", "") ))
{
return true;
}
return false;
}
/**
* Call routines to encode "-MB-", in proper order
*
*/
void Encode_MB()
{
if(Test_Silent_MB_1())
{
if(Test_Pronounced_MB())
{
m_current++;
}
else
{
m_current += 2;
}
}
else if(Test_Silent_MB_2())
{
if(Test_Pronounced_MB_2())
{
m_current++;
}
else
{
m_current += 2;
}
}
else if(Test_MN())
{
m_current += 2;
}
else
{
// eat redundant 'M'
if (CharAt(m_current + 1) == 'M')
{
m_current += 2;
}
else
{
m_current++;
}
}
}
/**
* Encode "-N-"
*
*/
void Encode_N()
{
if(Encode_NCE())
{
return;
}
// eat redundant 'N'
if(CharAt(m_current + 1) == 'N')
{
m_current += 2;
}
else
{
m_current++;
}
if (!StringAt((m_current - 3), 8, "MONSIEUR", "")
// e.g. "aloneness",
&& !StringAt((m_current - 3), 6, "NENESS", ""))
{
MetaphAdd("N");
}
}
/**
* Encode "-NCE-" and "-NSE-"
* "entrance" is pronounced exactly the same as "entrants"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_NCE()
{
//'acceptance', 'accountancy'
if(StringAt((m_current + 1), 1, "C", "S", "")
&& StringAt((m_current + 2), 1, "E", "Y", "I", "")
&& (((m_current + 2) == m_last)
|| (((m_current + 3) == m_last))
&& (CharAt(m_current + 3) == 'S')))
{
MetaphAdd("NTS");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-P-"
*
*/
void Encode_P()
{
if(Encode_Silent_P_At_Beginning()
|| Encode_PT()
|| Encode_PH()
|| Encode_PPH()
|| Encode_RPS()
|| Encode_COUP()
|| Encode_PNEUM()
|| Encode_PSYCH()
|| Encode_PSALM())
{
return;
}
Encode_PB();
MetaphAdd("P");
}
/**
* Encode cases where "-P-" is silent at the start of a word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_P_At_Beginning()
{
//skip these when at start of word
if((m_current == 0)
&& StringAt(m_current, 2, "PN", "PF", "PS", "PT", ""))
{
m_current += 1;
return true;
}
return false;
}
/**
* Encode cases where "-P-" is silent before "-T-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_PT()
{
// 'pterodactyl', 'receipt', 'asymptote'
if((CharAt(m_current + 1) == 'T'))
{
if (((m_current == 0) && StringAt(m_current, 5, "PTERO", ""))
|| StringAt((m_current - 5), 7, "RECEIPT", "")
|| StringAt((m_current - 4), 8, "ASYMPTOT", ""))
{
MetaphAdd("T");
m_current += 2;
return true;
}
}
return false;
}
/**
* Encode "-PH-", usually as F, with exceptions for
* cases where it is silent, or where the 'P' and 'T'
* are pronounced seperately because they belong to
* two different words in a combining form
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_PH()
{
if(CharAt(m_current + 1) == 'H')
{
// 'PH' silent in these contexts
if (StringAt(m_current, 9, "PHTHALEIN", "")
|| ((m_current == 0) && StringAt(m_current, 4, "PHTH", ""))
|| StringAt((m_current - 3), 10, "APOPHTHEGM", ""))
{
MetaphAdd("0");
m_current += 4;
}
// combining forms
//'sheepherd', 'upheaval', 'cupholder'
else if((m_current > 0)
&& (StringAt((m_current + 2), 3, "EAD", "OLE", "ELD", "ILL", "OLD", "EAP", "ERD",
"ARD", "ANG", "ORN", "EAV", "ART", "")
|| StringAt((m_current + 2), 4, "OUSE", "")
|| (StringAt((m_current + 2), 2, "AM", "") && !StringAt((m_current -1), 5, "LPHAM", ""))
|| StringAt((m_current + 2), 5, "AMMER", "AZARD", "UGGER", "")
|| StringAt((m_current + 2), 6, "OLSTER", ""))
&& !StringAt((m_current - 3), 5, "LYMPH", "NYMPH", ""))
{
MetaphAdd("P");
AdvanceCounter(3, 2);
}
else
{
MetaphAdd("F");
m_current += 2;
}
return true;
}
return false;
}
/**
* Encode "-PPH-". I don't know why the greek poet's
* name is transliterated this way...
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_PPH()
{
// 'sappho'
if((CharAt(m_current + 1) == 'P')
&& ((m_current + 2) < m_length) && (CharAt(m_current + 2) == 'H'))
{
MetaphAdd("F");
m_current += 3;
return true;
}
return false;
}
/**
* Encode "-CORPS-" where "-PS-" not pronounced
* since the cognate is here from the french
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_RPS()
{
//'-corps-', 'corpsman'
if(StringAt((m_current - 3), 5, "CORPS", "")
&& !StringAt((m_current - 3), 6, "CORPSE", ""))
{
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-COUP-" where "-P-" is not pronounced
* since the word is from the french
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_COUP()
{
//'coup'
if((m_current == m_last)
&& StringAt((m_current - 3), 4, "COUP", "")
&& !StringAt((m_current - 5), 6, "RECOUP", ""))
{
m_current++;
return true;
}
return false;
}
/**
* Encode 'P' in non-initial contexts of "-PNEUM-"
* where is also silent
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_PNEUM()
{
//'-pneum-'
if(StringAt((m_current + 1), 4, "NEUM", ""))
{
MetaphAdd("N");
m_current += 2;
return true;
}
return false;
}
/**
* Encode special case "-PSYCH-" where two encodings need to be
* accounted for in one syllable, one for the 'PS' and one for
* the 'CH'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_PSYCH()
{
//'-psych-'
if(StringAt((m_current + 1), 4, "SYCH", ""))
{
if(m_encodeVowels)
{
MetaphAdd("SAK");
}
else
{
MetaphAdd("SK");
}
m_current += 5;
return true;
}
return false;
}
/**
* Encode 'P' in context of "-PSALM-", where it has
* become silent
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_PSALM()
{
//'-psalm-'
if(StringAt((m_current + 1), 4, "SALM", ""))
{
// go ahead and encode entire word
if(m_encodeVowels)
{
MetaphAdd("SAM");
}
else
{
MetaphAdd("SM");
}
m_current += 5;
return true;
}
return false;
}
/**
* Eat redundant 'B' or 'P'
*
*/
void Encode_PB()
{
// e.g. "campbell", "raspberry"
// eat redundant 'P' or 'B'
if(StringAt((m_current + 1), 1, "P", "B", ""))
{
m_current += 2;
}
else
{
m_current++;
}
}
/**
* Encode "-Q-"
*
*/
void Encode_Q()
{
// current pinyin
if(StringAt(m_current, 3, "QIN", ""))
{
MetaphAdd("X");
m_current++;
return;
}
// eat redundant 'Q'
if(CharAt(m_current + 1) == 'Q')
{
m_current += 2;
}
else
{
m_current++;
}
MetaphAdd("K");
}
/**
* Encode "-R-"
*
*/
void Encode_R()
{
if(Encode_RZ())
{
return;
}
if(!Test_Silent_R())
{
if(!Encode_Vowel_RE_Transposition())
{
MetaphAdd("R");
}
}
// eat redundant 'R'; also skip 'S' as well as 'R' in "poitiers"
if((CharAt(m_current + 1) == 'R') || StringAt((m_current - 6), 8, "POITIERS", ""))
{
m_current += 2;
}
else
{
m_current++;
}
}
/**
* Encode "-RZ-" according
* to american and polish pronunciations
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_RZ()
{
if(StringAt((m_current - 2), 4, "GARZ", "KURZ", "MARZ", "MERZ", "HERZ", "PERZ", "WARZ", "")
|| StringAt(m_current, 5, "RZANO", "RZOLA", "")
|| StringAt((m_current - 1), 4, "ARZA", "ARZN", ""))
{
return false;
}
// 'yastrzemski' usually has 'z' silent in
// united states, but should get 'X' in poland
if(StringAt((m_current - 4), 11, "YASTRZEMSKI", ""))
{
MetaphAdd("R", "X");
m_current += 2;
return true;
}
// 'BRZEZINSKI' gets two pronunciations
// in the united states, neither of which
// are authentically polish
if(StringAt((m_current - 1), 10, "BRZEZINSKI", ""))
{
MetaphAdd("RS", "RJ");
// skip over 2nd 'Z'
m_current += 4;
return true;
}
// 'z' in 'rz after voiceless consonant gets 'X'
// in alternate polish style pronunciation
else if(StringAt((m_current - 1), 3, "TRZ", "PRZ", "KRZ", "")
|| (StringAt(m_current, 2, "RZ", "")
&& (IsVowel(m_current - 1) || (m_current == 0))))
{
MetaphAdd("RS", "X");
m_current += 2;
return true;
}
// 'z' in 'rz after voiceled consonant, vowel, or at
// beginning gets 'J' in alternate polish style pronunciation
else if(StringAt((m_current - 1), 3, "BRZ", "DRZ", "GRZ", ""))
{
MetaphAdd("RS", "J");
m_current += 2;
return true;
}
return false;
}
/**
* Test whether 'R' is silent in this context
*
* @return true if 'R' is silent in this context
*
*/
boolean Test_Silent_R()
{
// test cases where 'R' is silent, either because the
// word is from the french or because it is no longer pronounced.
// e.g. "rogier", "monsieur", "surburban"
if(((m_current == m_last)
// reliably french word ending
&& StringAt((m_current - 2), 3, "IER", "")
// e.g. "metier"
&& (StringAt((m_current - 5), 3, "MET", "VIV", "LUC", "")
// e.g. "cartier", "bustier"
|| StringAt((m_current - 6), 4, "CART", "DOSS", "FOUR", "OLIV", "BUST", "DAUM", "ATEL",
"SONN", "CORM", "MERC", "PELT", "POIR", "BERN", "FORT", "GREN",
"SAUC", "GAGN", "GAUT", "GRAN", "FORC", "MESS", "LUSS", "MEUN",
"POTH", "HOLL", "CHEN", "")
// e.g. "croupier"
|| StringAt((m_current - 7), 5, "CROUP", "TORCH", "CLOUT", "FOURN", "GAUTH", "TROTT",
"DEROS", "CHART", "")
// e.g. "chevalier"
|| StringAt((m_current - 8), 6, "CHEVAL", "LAVOIS", "PELLET", "SOMMEL", "TREPAN", "LETELL", "COLOMB", "")
|| StringAt((m_current - 9), 7, "CHARCUT", "")
|| StringAt((m_current - 10), 8, "CHARPENT", "")))
|| StringAt((m_current - 2), 7, "SURBURB", "WORSTED", "")
|| StringAt((m_current - 2), 9, "WORCESTER", "")
|| StringAt((m_current - 7), 8, "MONSIEUR", "")
|| StringAt((m_current - 6), 8, "POITIERS", "") )
{
return true;
}
return false;
}
/**
* Encode '-re-" as 'AR' in contexts
* where this is the correct pronunciation
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Vowel_RE_Transposition()
{
// -re inversion is just like
// -le inversion
// e.g. "fibre" => FABAR or "centre" => SANTAR
if((m_encodeVowels)
&& (CharAt(m_current + 1) == 'E')
&& (m_length > 3)
&& !StringAt(0, 5, "OUTRE", "LIBRE", "ANDRE", "")
&& !(StringAt(0, 4, "FRED", "TRES", "") && (m_length == 4))
&& !StringAt((m_current - 2), 5, "LDRED", "LFRED", "NDRED", "NFRED", "NDRES", "TRES", "IFRED", "")
&& !IsVowel(m_current - 1)
&& (((m_current + 1) == m_last)
|| (((m_current + 2) == m_last)
&& StringAt((m_current + 2), 1, "D", "S", ""))))
{
MetaphAdd("AR");
return true;
}
return false;
}
/**
* Encode "-S-"
*
*/
void Encode_S()
{
if(Encode_SKJ()
|| Encode_Special_SW()
|| Encode_SJ()
|| Encode_Silent_French_S_Final()
|| Encode_Silent_French_S_Internal()
|| Encode_ISL()
|| Encode_STL()
|| Encode_Christmas()
|| Encode_STHM()
|| Encode_ISTEN()
|| Encode_Sugar()
|| Encode_SH()
|| Encode_SCH()
|| Encode_SUR()
|| Encode_SU()
|| Encode_SSIO()
|| Encode_SS()
|| Encode_SIA()
|| Encode_SIO()
|| Encode_Anglicisations()
|| Encode_SC()
|| Encode_SEA_SUI_SIER()
|| Encode_SEA())
{
return;
}
MetaphAdd("S");
if(StringAt((m_current + 1), 1, "S", "Z", "")
&& !StringAt((m_current + 1), 2, "SH", ""))
{
m_current += 2;
}
else
{
m_current++;
}
}
/**
* Encode a couple of contexts where scandinavian, slavic
* or german names should get an alternate, native
* pronunciation of 'SV' or 'XV'
*
* @return true if handled
*
*/
boolean Encode_Special_SW()
{
if(m_current == 0)
{
//
if(Names_Beginning_With_SW_That_Get_Alt_SV())
{
MetaphAdd("S", "SV");
m_current += 2;
return true;
}
//
if(Names_Beginning_With_SW_That_Get_Alt_XV())
{
MetaphAdd("S", "XV");
m_current += 2;
return true;
}
}
return false;
}
/**
* Encode "-SKJ-" as X ("sh"), since americans pronounce
* the name Dag Hammerskjold as "hammer-shold"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SKJ()
{
// scandinavian
if(StringAt(m_current, 4, "SKJO", "SKJU", "")
&& IsVowel(m_current + 3))
{
MetaphAdd("X");
m_current += 3;
return true;
}
return false;
}
/**
* Encode initial swedish "SJ-" as X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SJ()
{
if(StringAt(0, 2, "SJ", ""))
{
MetaphAdd("X");
m_current += 2;
return true;
}
return false;
}
/**
* Encode final 'S' in words from the french, where they
* are not pronounced
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_French_S_Final()
{
// "louis" is an exception because it gets two pronuncuations
if(StringAt(0, 5, "LOUIS", "") && (m_current == m_last))
{
MetaphAdd("S", "");
m_current++;
return true;
}
// french words familiar to americans where final s is silent
if((m_current == m_last)
&& (StringAt(0, 4, "YVES", "")
|| (StringAt(0, 4, "HORS", "") && (m_current == 3))
|| StringAt((m_current - 4), 5, "CAMUS", "YPRES", "")
|| StringAt((m_current - 5), 6, "MESNES", "DEBRIS", "BLANCS", "INGRES", "CANNES", "")
|| StringAt((m_current - 6), 7, "CHABLIS", "APROPOS", "JACQUES", "ELYSEES", "OEUVRES",
"GEORGES", "DESPRES", "")
|| StringAt(0, 8, "ARKANSAS", "FRANCAIS", "CRUDITES", "BRUYERES", "")
|| StringAt(0, 9, "DESCARTES", "DESCHUTES", "DESCHAMPS", "DESROCHES", "DESCHENES", "")
|| StringAt(0, 10, "RENDEZVOUS", "")
|| StringAt(0, 11, "CONTRETEMPS", "DESLAURIERS", ""))
|| ((m_current == m_last)
&& StringAt((m_current - 2), 2, "AI", "OI", "UI", "")
&& !StringAt(0, 4, "LOIS", "LUIS", "")))
{
m_current++;
return true;
}
return false;
}
/**
* Encode non-final 'S' in words from the french where they
* are not pronounced.
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_French_S_Internal()
{
// french words familiar to americans where internal s is silent
if(StringAt((m_current - 2), 9, "DESCARTES", "")
|| StringAt((m_current - 2), 7, "DESCHAM", "DESPRES", "DESROCH", "DESROSI", "DESJARD", "DESMARA",
"DESCHEN", "DESHOTE", "DESLAUR", "")
|| StringAt((m_current - 2), 6, "MESNES", "")
|| StringAt((m_current - 5), 8, "DUQUESNE", "DUCHESNE", "")
|| StringAt((m_current - 7), 10, "BEAUCHESNE", "")
|| StringAt((m_current - 3), 7, "FRESNEL", "")
|| StringAt((m_current - 3), 9, "GROSVENOR", "")
|| StringAt((m_current - 4), 10, "LOUISVILLE", "")
|| StringAt((m_current - 7), 10, "ILLINOISAN", ""))
{
m_current++;
return true;
}
return false;
}
/**
* Encode silent 'S' in context of "-ISL-"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_ISL()
{
//special cases 'island', 'isle', 'carlisle', 'carlysle'
if((StringAt((m_current - 2), 4, "LISL", "LYSL", "AISL", "")
&& !StringAt((m_current - 3), 7, "PAISLEY", "BAISLEY", "ALISLAM", "ALISLAH", "ALISLAA", ""))
|| ((m_current == 1)
&& ((StringAt((m_current - 1), 4, "ISLE", "")
|| StringAt((m_current - 1), 5, "ISLAN", ""))
&& !StringAt((m_current - 1), 5, "ISLEY", "ISLER", ""))))
{
m_current++;
return true;
}
return false;
}
/**
* Encode "-STL-" in contexts where the 'T' is silent. Also
* encode "-USCLE-" in contexts where the 'C' is silent
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_STL()
{
//'hustle', 'bustle', 'whistle'
if((StringAt(m_current, 4, "STLE", "STLI", "")
&& !StringAt((m_current + 2), 4, "LESS", "LIKE", "LINE", ""))
|| StringAt((m_current - 3), 7, "THISTLY", "BRISTLY", "GRISTLY", "")
// e.g. "corpuscle"
|| StringAt((m_current - 1), 5, "USCLE", ""))
{
// KRISTEN, KRYSTLE, CRYSTLE, KRISTLE all pronounce the 't'
// also, exceptions where "-LING" is a nominalizing suffix
if(StringAt(0, 7, "KRISTEN", "KRYSTLE", "CRYSTLE", "KRISTLE", "")
|| StringAt(0, 11, "CHRISTENSEN", "CHRISTENSON", "")
|| StringAt((m_current - 3), 9, "FIRSTLING", "")
|| StringAt((m_current - 2), 8, "NESTLING", "WESTLING", ""))
{
MetaphAdd("ST");
m_current += 2;
}
else
{
if(m_encodeVowels
&& (CharAt(m_current + 3) == 'E')
&& (CharAt(m_current + 4) != 'R')
&& !StringAt((m_current + 3), 4, "ETTE", "ETTA", "")
&& !StringAt((m_current + 3), 2, "EY", ""))
{
MetaphAdd("SAL");
flag_AL_inversion = true;
}
else
{
MetaphAdd("SL");
}
m_current += 3;
}
return true;
}
return false;
}
/**
* Encode "christmas". Americans always pronounce this as "krissmuss"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Christmas()
{
//'christmas'
if(StringAt((m_current - 4), 8, "CHRISTMA", ""))
{
MetaphAdd("SM");
m_current += 3;
return true;
}
return false;
}
/**
* Encode "-STHM-" in contexts where the 'TH'
* is silent.
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_STHM()
{
//'asthma', 'isthmus'
if(StringAt(m_current, 4, "STHM", ""))
{
MetaphAdd("SM");
m_current += 4;
return true;
}
return false;
}
/**
* Encode "-ISTEN-" and "-STNT-" in contexts
* where the 'T' is silent
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_ISTEN()
{
// 't' is silent in verb, pronounced in name
if(StringAt(0, 8, "CHRISTEN", ""))
{
// the word itself
if(RootOrInflections(m_inWord, "CHRISTEN")
|| StringAt(0, 11, "CHRISTENDOM", ""))
{
MetaphAdd("S", "ST");
}
else
{
// e.g. 'christenson', 'christene'
MetaphAdd("ST");
}
m_current += 2;
return true;
}
//e.g. 'glisten', 'listen'
if(StringAt((m_current - 2), 6, "LISTEN", "RISTEN", "HASTEN", "FASTEN", "MUSTNT", "")
|| StringAt((m_current - 3), 7, "MOISTEN", ""))
{
MetaphAdd("S");
m_current += 2;
return true;
}
return false;
}
/**
* Encode special case "sugar"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Sugar()
{
//special case 'sugar-'
if(StringAt(m_current, 5, "SUGAR", ""))
{
MetaphAdd("X");
m_current++;
return true;
}
return false;
}
/**
* Encode "-SH-" as X ("sh"), except in cases
* where the 'S' and 'H' belong to different combining
* roots and are therefore pronounced seperately
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SH()
{
if(StringAt(m_current, 2, "SH", ""))
{
// exception
if(StringAt((m_current - 2), 8, "CASHMERE", ""))
{
MetaphAdd("J");
m_current += 2;
return true;
}
//combining forms, e.g. 'clotheshorse', 'woodshole'
if((m_current > 0)
// e.g. "mishap"
&& ((StringAt((m_current + 1), 3, "HAP", "") && ((m_current + 3) == m_last))
// e.g. "hartsheim", "clothshorse"
|| StringAt((m_current + 1), 4, "HEIM", "HOEK", "HOLM", "HOLZ", "HOOD", "HEAD", "HEID",
"HAAR", "HORS", "HOLE", "HUND", "HELM", "HAWK", "HILL", "")
// e.g. "dishonor"
|| StringAt((m_current + 1), 5, "HEART", "HATCH", "HOUSE", "HOUND", "HONOR", "")
// e.g. "mishear"
|| (StringAt((m_current + 2), 3, "EAR", "") && ((m_current + 4) == m_last))
// e.g. "hartshorn"
|| (StringAt((m_current + 2), 3, "ORN", "") && !StringAt((m_current - 2), 7, "UNSHORN", ""))
// e.g. "newshour" but not "bashour", "manshour"
|| (StringAt((m_current + 1), 4, "HOUR", "")
&& !(StringAt(0, 7, "BASHOUR", "") || StringAt(0, 8, "MANSHOUR", "") || StringAt(0, 6, "ASHOUR", "") ))
// e.g. "dishonest", "grasshopper"
|| StringAt((m_current + 2), 5, "ARMON", "ONEST", "ALLOW", "OLDER", "OPPER", "EIMER", "ANDLE", "ONOUR", "")
// e.g. "dishabille", "transhumance"
|| StringAt((m_current + 2), 6, "ABILLE", "UMANCE", "ABITUA", "")))
{
if (!StringAt((m_current - 1), 1, "S", ""))
MetaphAdd("S");
}
else
{
MetaphAdd("X");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-SCH-" in cases where the 'S' is pronounced
* seperately from the "CH", in words from the dutch, italian,
* and greek where it can be pronounced SK, and german words
* where it is pronounced X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SCH()
{
// these words were combining forms many centuries ago
if(StringAt((m_current + 1), 2, "CH", ""))
{
if((m_current > 0)
// e.g. "mischief", "escheat"
&& (StringAt((m_current + 3), 3, "IEF", "EAT", "")
// e.g. "mischance"
|| StringAt((m_current + 3), 4, "ANCE", "ARGE", "")
// e.g. "eschew"
|| StringAt(0, 6, "ESCHEW", "")))
{
MetaphAdd("S");
m_current++;
return true;
}
//Schlesinger's rule
//dutch, danish, italian, greek origin, e.g. "school", "schooner", "schiavone", "schiz-"
if((StringAt((m_current + 3), 2, "OO", "ER", "EN", "UY", "ED", "EM", "IA", "IZ", "IS", "OL", "")
&& !StringAt(m_current, 6, "SCHOLT", "SCHISL", "SCHERR", ""))
|| StringAt((m_current + 3), 3, "ISZ", "")
|| (StringAt((m_current - 1), 6, "ESCHAT", "ASCHIN", "ASCHAL", "ISCHAE", "ISCHIA", "")
&& !StringAt((m_current - 2), 8, "FASCHING", ""))
|| (StringAt((m_current - 1), 5, "ESCHI", "") && ((m_current + 3) == m_last))
|| (CharAt(m_current + 3) == 'Y'))
{
// e.g. "schermerhorn", "schenker", "schistose"
if(StringAt((m_current + 3), 2, "ER", "EN", "IS", "")
&& (((m_current + 4) == m_last)
|| StringAt((m_current + 3), 3, "ENK", "ENB", "IST", "")))
{
MetaphAdd("X", "SK");
}
else
{
MetaphAdd("SK");
}
m_current += 3;
return true;
}
else
{
MetaphAdd("X");
m_current += 3;
return true;
}
}
return false;
}
/**
* Encode "-SUR<E,A,Y>-" to J, unless it is at the beginning,
* or preceeded by 'N', 'K', or "NO"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SUR()
{
// 'erasure', 'usury'
if(StringAt((m_current + 1), 3, "URE", "URA", "URY", ""))
{
//'sure', 'ensure'
if ((m_current == 0)
|| StringAt((m_current - 1), 1, "N", "K", "")
|| StringAt((m_current - 2), 2, "NO", ""))
{
MetaphAdd("X");
}
else
{
MetaphAdd("J");
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode "-SU<O,A>-" to X ("sh") unless it is preceeded by
* an 'R', in which case it is encoded to S, or it is
* preceeded by a vowel, in which case it is encoded to J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SU()
{
//'sensuous', 'consensual'
if(StringAt((m_current + 1), 2, "UO", "UA", "") && (m_current != 0))
{
// exceptions e.g. "persuade"
if(StringAt((m_current - 1), 4, "RSUA", ""))
{
MetaphAdd("S");
}
// exceptions e.g. "casual"
else if(IsVowel(m_current - 1))
{
MetaphAdd("J", "S");
}
else
{
MetaphAdd("X", "S");
}
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encodes "-SSIO-" in contexts where it is pronounced
* either J or X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SSIO()
{
if(StringAt((m_current + 1), 4, "SION", ""))
{
//"abcission"
if (StringAt((m_current - 2), 2, "CI", ""))
{
MetaphAdd("J");
}
//'mission'
else
{
if (IsVowel(m_current - 1))
{
MetaphAdd("X");
}
}
AdvanceCounter(4, 2);
return true;
}
return false;
}
/**
* Encode "-SS-" in contexts where it is pronounced X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SS()
{
// e.g. "russian", "pressure"
if(StringAt((m_current - 1), 5, "USSIA", "ESSUR", "ISSUR", "ISSUE", "")
// e.g. "hessian", "assurance"
|| StringAt((m_current - 1), 6, "ESSIAN", "ASSURE", "ASSURA", "ISSUAB", "ISSUAN", "ASSIUS", ""))
{
MetaphAdd("X");
AdvanceCounter(3, 2);
return true;
}
return false;
}
/**
* Encodes "-SIA-" in contexts where it is pronounced
* as X ("sh"), J, or S
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SIA()
{
// e.g. "controversial", also "fuchsia", "ch" is silent
if(StringAt((m_current - 2), 5, "CHSIA", "")
|| StringAt((m_current - 1), 5, "RSIAL", ""))
{
MetaphAdd("X");
AdvanceCounter(3, 1);
return true;
}
// names generally get 'X' where terms, e.g. "aphasia" get 'J'
if((StringAt(0, 6, "ALESIA", "ALYSIA", "ALISIA", "STASIA", "")
&& (m_current == 3)
&& !StringAt(0, 9, "ANASTASIA", ""))
|| StringAt((m_current - 5), 9, "DIONYSIAN", "")
|| StringAt((m_current - 5), 8, "THERESIA", ""))
{
MetaphAdd("X", "S");
AdvanceCounter(3, 1);
return true;
}
if((StringAt(m_current, 3, "SIA", "") && ((m_current + 2) == m_last))
|| (StringAt(m_current, 4, "SIAN", "") && ((m_current + 3) == m_last))
|| StringAt((m_current - 5), 9, "AMBROSIAL", ""))
{
if ((IsVowel(m_current - 1) || StringAt((m_current - 1), 1, "R", ""))
// exclude compounds based on names, or french or greek words
&& !(StringAt(0, 5, "JAMES", "NICOS", "PEGAS", "PEPYS", "")
|| StringAt(0, 6, "HOBBES", "HOLMES", "JAQUES", "KEYNES", "")
|| StringAt(0, 7, "MALTHUS", "HOMOOUS", "")
|| StringAt(0, 8, "MAGLEMOS", "HOMOIOUS", "")
|| StringAt(0, 9, "LEVALLOIS", "TARDENOIS", "")
|| StringAt((m_current - 4), 5, "ALGES", "") ))
{
MetaphAdd("J");
}
else
{
MetaphAdd("S");
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encodes "-SIO-" in contexts where it is pronounced
* as J or X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SIO()
{
// special case, irish name
if(StringAt(0, 7, "SIOBHAN", ""))
{
MetaphAdd("X");
AdvanceCounter(3, 1);
return true;
}
if(StringAt((m_current + 1), 3, "ION", ""))
{
// e.g. "vision", "version"
if (IsVowel(m_current - 1) || StringAt((m_current - 2), 2, "ER", "UR", ""))
{
MetaphAdd("J");
}
else // e.g. "declension"
{
MetaphAdd("X");
}
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encode cases where "-S-" might well be from a german name
* and add encoding of german pronounciation in alternate m_metaph
* so that it can be found in a genealogical search
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Anglicisations()
{
//german & anglicisations, e.g. 'smith' match 'schmidt', 'snider' match 'schneider'
//also, -sz- in slavic language altho in hungarian it is pronounced 's'
if(((m_current == 0)
&& StringAt((m_current + 1), 1, "M", "N", "L", ""))
|| StringAt((m_current + 1), 1, "Z", ""))
{
MetaphAdd("S", "X");
// eat redundant 'Z'
if(StringAt((m_current + 1), 1, "Z", ""))
{
m_current += 2;
}
else
{
m_current++;
}
return true;
}
return false;
}
/**
* Encode "-SC<vowel>-" in contexts where it is silent,
* or pronounced as X ("sh"), S, or SK
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SC()
{
if(StringAt(m_current, 2, "SC", ""))
{
// exception 'viscount'
if(StringAt((m_current - 2), 8, "VISCOUNT", ""))
{
m_current += 1;
return true;
}
// encode "-SC<front vowel>-"
if(StringAt((m_current + 2), 1, "I", "E", "Y", ""))
{
// e.g. "conscious"
if(StringAt((m_current + 2), 4, "IOUS", "")
// e.g. "prosciutto"
|| StringAt((m_current + 2), 3, "IUT", "")
|| StringAt((m_current - 4), 9, "OMNISCIEN", "")
// e.g. "conscious"
|| StringAt((m_current - 3), 8, "CONSCIEN", "CRESCEND", "CONSCION", "")
|| StringAt((m_current - 2), 6, "FASCIS", ""))
{
MetaphAdd("X");
}
else if(StringAt(m_current, 7, "SCEPTIC", "SCEPSIS", "")
|| StringAt(m_current, 5, "SCIVV", "SCIRO", "")
// commonly pronounced this way in u.s.
|| StringAt(m_current, 6, "SCIPIO", "")
|| StringAt((m_current - 2), 10, "PISCITELLI", ""))
{
MetaphAdd("SK");
}
else
{
MetaphAdd("S");
}
m_current += 2;
return true;
}
MetaphAdd("SK");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-S<EA,UI,IER>-" in contexts where it is pronounced
* as J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SEA_SUI_SIER()
{
// "nausea" by itself has => NJ as a more likely encoding. Other forms
// using "nause-" (see Encode_SEA()) have X or S as more familiar pronounciations
if((StringAt((m_current - 3), 6, "NAUSEA", "") && ((m_current + 2) == m_last))
// e.g. "casuistry", "frasier", "hoosier"
|| StringAt((m_current - 2), 5, "CASUI", "")
|| (StringAt((m_current - 1), 5, "OSIER", "ASIER", "")
&& !(StringAt(0, 6, "EASIER","")
|| StringAt(0, 5, "OSIER","")
|| StringAt((m_current - 2), 6, "ROSIER", "MOSIER", ""))))
{
MetaphAdd("J", "X");
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encode cases where "-SE-" is pronounced as X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_SEA()
{
if((StringAt(0, 4, "SEAN", "") && ((m_current + 3) == m_last))
|| (StringAt((m_current - 3), 6, "NAUSEO", "")
&& !StringAt((m_current - 3), 7, "NAUSEAT", "")))
{
MetaphAdd("X");
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encode "-T-"
*
*/
void Encode_T()
{
if(Encode_T_Initial()
|| Encode_TCH()
|| Encode_Silent_French_T()
|| Encode_TUN_TUL_TUA_TUO()
|| Encode_TUE_TEU_TEOU_TUL_TIE()
|| Encode_TUR_TIU_Suffixes()
|| Encode_TI()
|| Encode_TIENT()
|| Encode_TSCH()
|| Encode_TZSCH()
|| Encode_TH_Pronounced_Separately()
|| Encode_TTH()
|| Encode_TH())
{
return;
}
// eat redundant 'T' or 'D'
if(StringAt((m_current + 1), 1, "T", "D", ""))
{
m_current += 2;
}
else
{
m_current++;
}
MetaphAdd("T");
}
/**
* Encode some exceptions for initial 'T'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_T_Initial()
{
if(m_current == 0)
{
// americans usually pronounce "tzar" as "zar"
if (StringAt((m_current + 1), 3, "SAR", "ZAR", ""))
{
m_current++;
return true;
}
// old 'École française d'Extrême-Orient' chinese pinyin where 'ts-' => 'X'
if (((m_length == 3) && StringAt((m_current + 1), 2, "SO", "SA", "SU", ""))
|| ((m_length == 4) && StringAt((m_current + 1), 3, "SAO", "SAI", ""))
|| ((m_length == 5) && StringAt((m_current + 1), 4, "SING", "SANG", "")))
{
MetaphAdd("X");
AdvanceCounter(3, 2);
return true;
}
// "TS<vowel>-" at start can be pronounced both with and without 'T'
if (StringAt((m_current + 1), 1, "S", "") && IsVowel(m_current + 2))
{
MetaphAdd("TS", "S");
AdvanceCounter(3, 2);
return true;
}
// e.g. "Tjaarda"
if (StringAt((m_current + 1), 1, "J", ""))
{
MetaphAdd("X");
AdvanceCounter(3, 2);
return true;
}
// cases where initial "TH-" is pronounced as T and not 0 ("th")
if ((StringAt((m_current + 1), 2, "HU", "") && (m_length == 3))
|| StringAt((m_current + 1), 3, "HAI", "HUY", "HAO", "")
|| StringAt((m_current + 1), 4, "HYME", "HYMY", "HANH", "")
|| StringAt((m_current + 1), 5, "HERES", ""))
{
MetaphAdd("T");
AdvanceCounter(3, 2);
return true;
}
}
return false;
}
/**
* Encode "-TCH-", reliably X ("sh", or in this case, "ch")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TCH()
{
if(StringAt((m_current + 1), 2, "CH", ""))
{
MetaphAdd("X");
m_current += 3;
return true;
}
return false;
}
/**
* Encode the many cases where americans are aware that a certain word is
* french and know to not pronounce the 'T'
*
* @return true if encoding handled in this routine, false if not
* TOUCHET CHABOT BENOIT
*/
boolean Encode_Silent_French_T()
{
// french silent T familiar to americans
if(((m_current == m_last) && StringAt((m_current - 4), 5, "MONET", "GENET", "CHAUT", ""))
|| StringAt((m_current - 2), 9, "POTPOURRI", "")
|| StringAt((m_current - 3), 9, "BOATSWAIN", "")
|| StringAt((m_current - 3), 8, "MORTGAGE", "")
|| (StringAt((m_current - 4), 5, "BERET", "BIDET", "FILET", "DEBUT", "DEPOT", "PINOT", "TAROT", "")
|| StringAt((m_current - 5), 6, "BALLET", "BUFFET", "CACHET", "CHALET", "ESPRIT", "RAGOUT", "GOULET",
"CHABOT", "BENOIT", "")
|| StringAt((m_current - 6), 7, "GOURMET", "BOUQUET", "CROCHET", "CROQUET", "PARFAIT", "PINCHOT",
"CABARET", "PARQUET", "RAPPORT", "TOUCHET", "COURBET", "DIDEROT", "")
|| StringAt((m_current - 7), 8, "ENTREPOT", "CABERNET", "DUBONNET", "MASSENET", "MUSCADET", "RICOCHET", "ESCARGOT", "")
|| StringAt((m_current - 8), 9, "SOBRIQUET", "CABRIOLET", "CASSOULET", "OUBRIQUET", "CAMEMBERT", ""))
&& !StringAt((m_current + 1), 2, "AN", "RY", "IC", "OM", "IN", ""))
{
m_current++;
return true;
}
return false;
}
/**
* Encode "-TU<N,L,A,O>-" in cases where it is pronounced
* X ("sh", or in this case, "ch")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TUN_TUL_TUA_TUO()
{
// e.g. "fortune", "fortunate"
if(StringAt((m_current - 3), 6, "FORTUN", "")
// e.g. "capitulate"
|| (StringAt(m_current, 3, "TUL", "")
&& (IsVowel(m_current - 1) && IsVowel(m_current + 3)))
// e.g. "obituary", "barbituate"
|| StringAt((m_current - 2), 5, "BITUA", "BITUE", "")
// e.g. "actual"
|| ((m_current > 1) && StringAt(m_current, 3, "TUA", "TUO", "")))
{
MetaphAdd("X", "T");
m_current++;
return true;
}
return false;
}
/**
* Encode "-T<vowel>-" forms where 'T' is pronounced as X
* ("sh", or in this case "ch")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TUE_TEU_TEOU_TUL_TIE()
{
// 'constituent', 'pasteur'
if(StringAt((m_current + 1), 4, "UENT", "")
|| StringAt((m_current - 4), 9, "RIGHTEOUS", "")
|| StringAt((m_current - 3), 7, "STATUTE", "")
|| StringAt((m_current - 3), 7, "AMATEUR", "")
// e.g. "blastula", "pasteur"
|| (StringAt((m_current - 1), 5, "NTULE", "NTULA", "STULE", "STULA", "STEUR", ""))
// e.g. "statue"
|| (((m_current + 2) == m_last) && StringAt(m_current, 3, "TUE", ""))
// e.g. "constituency"
|| StringAt(m_current, 5, "TUENC", "")
// e.g. "statutory"
|| StringAt((m_current - 3), 8, "STATUTOR", "")
// e.g. "patience"
|| (((m_current + 5) == m_last) && StringAt(m_current, 6, "TIENCE", "")))
{
MetaphAdd("X", "T");
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode "-TU-" forms in suffixes where it is usually
* pronounced as X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TUR_TIU_Suffixes()
{
// 'adventure', 'musculature'
if((m_current > 0) && StringAt((m_current + 1), 3, "URE", "URA", "URI", "URY", "URO", "IUS", ""))
{
// exceptions e.g. 'tessitura', mostly from romance languages
if ((StringAt((m_current + 1), 3, "URA", "URO", "")
//&& !StringAt((m_current + 1), 4, "URIA", "")
&& ((m_current + 3) == m_last))
&& !StringAt((m_current - 3), 7, "VENTURA", "")
// e.g. "kachaturian", "hematuria"
|| StringAt((m_current + 1), 4, "URIA", ""))
{
MetaphAdd("T");
}
else
{
MetaphAdd("X", "T");
}
AdvanceCounter(2, 1);
return true;
}
return false;
}
/**
* Encode "-TI<O,A,U>-" as X ("sh"), except
* in cases where it is part of a combining form,
* or as J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TI()
{
// '-tio-', '-tia-', '-tiu-'
// except combining forms where T already pronounced e.g 'rooseveltian'
if((StringAt((m_current + 1), 2, "IO", "") && !StringAt((m_current - 1), 5, "ETIOL", ""))
|| StringAt((m_current + 1), 3, "IAL", "")
|| StringAt((m_current - 1), 5, "RTIUM", "ATIUM", "")
|| ((StringAt((m_current + 1), 3, "IAN", "") && (m_current > 0))
&& !(StringAt((m_current - 4), 8, "FAUSTIAN", "")
|| StringAt((m_current - 5), 9, "PROUSTIAN", "")
|| StringAt((m_current - 2), 7, "TATIANA", "")
||(StringAt((m_current - 3), 7, "KANTIAN", "GENTIAN", "")
|| StringAt((m_current - 8), 12, "ROOSEVELTIAN", "")))
|| (((m_current + 2) == m_last)
&& StringAt(m_current, 3, "TIA", "")
// exceptions to above rules where the pronounciation is usually X
&& !(StringAt((m_current - 3), 6, "HESTIA", "MASTIA", "")
|| StringAt((m_current - 2), 5, "OSTIA", "")
|| StringAt(0, 3, "TIA", "")
|| StringAt((m_current - 5), 8, "IZVESTIA", "")))
|| StringAt((m_current + 1), 4, "IATE", "IATI", "IABL", "IATO", "IARY", "")
|| StringAt((m_current - 5), 9, "CHRISTIAN", "")))
{
if(((m_current == 2) && StringAt(0, 4, "ANTI", ""))
|| StringAt(0, 5, "PATIO", "PITIA", "DUTIA", ""))
{
MetaphAdd("T");
}
else if(StringAt((m_current - 4), 8, "EQUATION", ""))
{
MetaphAdd("J");
}
else
{
if(StringAt(m_current, 4, "TION", ""))
{
MetaphAdd("X");
}
else if(StringAt(0, 5, "KATIA", "LATIA", ""))
{
MetaphAdd("T", "X");
}
else
{
MetaphAdd("X", "T");
}
}
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encode "-TIENT-" where "TI" is pronounced X ("sh")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TIENT()
{
// e.g. 'patient'
if(StringAt((m_current + 1), 4, "IENT", ""))
{
MetaphAdd("X", "T");
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encode "-TSCH-" as X ("ch")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TSCH()
{
//'deutsch'
if(StringAt(m_current, 4, "TSCH", "")
// combining forms in german where the 'T' is pronounced seperately
&& !StringAt((m_current - 3), 4, "WELT", "KLAT", "FEST", ""))
{
// pronounced the same as "ch" in "chit" => X
MetaphAdd("X");
m_current += 4;
return true;
}
return false;
}
/**
* Encode "-TZSCH-" as X ("ch")
*
* "Neitzsche is peachy"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TZSCH()
{
//'neitzsche'
if(StringAt(m_current, 5, "TZSCH", ""))
{
MetaphAdd("X");
m_current += 5;
return true;
}
return false;
}
/**
* Encodes cases where the 'H' in "-TH-" is the beginning of
* another word in a combining form, special cases where it is
* usually pronounced as 'T', and a special case where it has
* become pronounced as X ("sh", in this case "ch")
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TH_Pronounced_Separately()
{
//'adulthood', 'bithead', 'apartheid'
if(((m_current > 0)
&& StringAt((m_current + 1), 4, "HOOD", "HEAD", "HEID", "HAND", "HILL", "HOLD",
"HAWK", "HEAP", "HERD", "HOLE", "HOOK", "HUNT",
"HUMO", "HAUS", "HOFF", "HARD", "")
&& !StringAt((m_current - 3), 5, "SOUTH", "NORTH", ""))
|| StringAt((m_current + 1), 5, "HOUSE", "HEART", "HASTE", "HYPNO", "HEQUE", "")
// watch out for greek root "-thallic"
|| (StringAt((m_current + 1), 4, "HALL", "")
&& ((m_current + 4) == m_last)
&& !StringAt((m_current - 3), 5, "SOUTH", "NORTH", ""))
|| (StringAt((m_current + 1), 3, "HAM", "")
&& ((m_current + 3) == m_last)
&& !(StringAt(0, 6, "GOTHAM", "WITHAM", "LATHAM", "")
|| StringAt(0, 7, "BENTHAM", "WALTHAM", "WORTHAM", "")
|| StringAt(0, 8, "GRANTHAM", "")))
|| (StringAt((m_current + 1), 5, "HATCH", "")
&& !((m_current == 0) || StringAt((m_current - 2), 8, "UNTHATCH", "")))
|| StringAt((m_current - 3), 7, "WARTHOG", "")
// and some special cases where "-TH-" is usually pronounced 'T'
|| StringAt((m_current - 2), 6, "ESTHER", "")
|| StringAt((m_current - 3), 6, "GOETHE", "")
|| StringAt((m_current - 2), 8, "NATHALIE", ""))
{
// special case
if (StringAt((m_current - 3), 7, "POSTHUM", ""))
{
MetaphAdd("X");
}
else
{
MetaphAdd("T");
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode the "-TTH-" in "matthew", eating the redundant 'T'
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TTH()
{
// 'matthew' vs. 'outthink'
if(StringAt(m_current, 3, "TTH", ""))
{
if (StringAt((m_current - 2), 5, "MATTH", ""))
{
MetaphAdd("0");
}
else
{
MetaphAdd("T0");
}
m_current += 3;
return true;
}
return false;
}
/**
* Encode "-TH-". 0 (zero) is used in Metaphone to encode this sound
* when it is pronounced as a dipthong, either voiced or unvoiced
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_TH()
{
if(StringAt(m_current, 2, "TH", "") )
{
//'-clothes-'
if(StringAt((m_current - 3), 7, "CLOTHES", ""))
{
// vowel already encoded so skip right to S
m_current += 3;
return true;
}
//special case "thomas", "thames", "beethoven" or germanic words
if(StringAt((m_current + 2), 4, "OMAS", "OMPS", "OMPK", "OMSO", "OMSE",
"AMES", "OVEN", "OFEN", "ILDA", "ILDE", "")
|| (StringAt(0, 4, "THOM", "") && (m_length == 4))
|| (StringAt(0, 5, "THOMS", "") && (m_length == 5))
|| StringAt(0, 4, "VAN ", "VON ", "")
|| StringAt(0, 3, "SCH", ""))
{
MetaphAdd("T");
}
else
{
// give an 'etymological' 2nd
// encoding for "smith"
if(StringAt(0, 2, "SM", ""))
{
MetaphAdd("0", "T");
}
else
{
MetaphAdd("0");
}
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-V-"
*
*/
void Encode_V()
{
// eat redundant 'V'
if(CharAt(m_current + 1) == 'V')
{
m_current += 2;
}
else
{
m_current++;
}
MetaphAddExactApprox("V", "F");
}
/**
* Encode "-W-"
*
*/
void Encode_W()
{
if(Encode_Silent_W_At_Beginning()
|| Encode_WITZ_WICZ()
|| Encode_WR()
|| Encode_Initial_W_Vowel()
|| Encode_WH()
|| Encode_Eastern_European_W())
{
return;
}
// e.g. 'zimbabwe'
if(m_encodeVowels
&& StringAt(m_current, 2, "WE", "")
&& ((m_current + 1) == m_last))
{
MetaphAdd("A");
}
//else skip it
m_current++;
}
/**
* Encode cases where 'W' is silent at beginning of word
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Silent_W_At_Beginning()
{
//skip these when at start of word
if((m_current == 0)
&& StringAt(m_current, 2, "WR", ""))
{
m_current += 1;
return true;
}
return false;
}
/**
* Encode polish patronymic suffix, mapping
* alternate spellings to the same encoding,
* and including easern european pronounciation
* to the american so that both forms can
* be found in a genealogy search
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_WITZ_WICZ()
{
//polish e.g. 'filipowicz'
if(((m_current + 3) == m_last) && StringAt(m_current, 4, "WICZ", "WITZ", ""))
{
if(m_encodeVowels)
{
if((m_primary.length() > 0)
&& m_primary.charAt(m_primary.length() - 1) == 'A')
{
MetaphAdd("TS", "FAX");
}
else
{
MetaphAdd("ATS", "FAX");
}
}
else
{
MetaphAdd("TS", "FX");
}
m_current += 4;
return true;
}
return false;
}
/**
* Encode "-WR-" as R ('W' always effectively silent)
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_WR()
{
//can also be in middle of word
if(StringAt(m_current, 2, "WR", ""))
{
MetaphAdd("R");
m_current += 2;
return true;
}
return false;
}
/**
* Encode "W-", adding central and eastern european
* pronounciations so that both forms can be found
* in a genealogy search
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Initial_W_Vowel()
{
if((m_current == 0) && IsVowel(m_current + 1))
{
//Witter should match Vitter
if(Germanic_Or_Slavic_Name_Beginning_With_W())
{
if(m_encodeVowels)
{
MetaphAddExactApprox("A", "VA", "A", "FA");
}
else
{
MetaphAddExactApprox("A", "V", "A", "F");
}
}
else
{
MetaphAdd("A");
}
m_current++;
// don't encode vowels twice
m_current = SkipVowels(m_current);
return true;
}
return false;
}
/**
* Encode "-WH-" either as H, or close enough to 'U' to be
* considered a vowel
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_WH()
{
if(StringAt(m_current, 2, "WH", ""))
{
// cases where it is pronounced as H
// e.g. 'who', 'whole'
if((CharAt(m_current + 2) == 'O')
// exclude cases where it is pronounced like a vowel
&& !(StringAt((m_current + 2), 4, "OOSH", "")
|| StringAt((m_current + 2), 3, "OOP", "OMP", "ORL", "ORT", "")
|| StringAt((m_current + 2), 2, "OA", "OP", "")))
{
MetaphAdd("H");
AdvanceCounter(3, 2);
return true;
}
else
{
// combining forms, e.g. 'hollowhearted', 'rawhide'
if(StringAt((m_current + 2), 3, "IDE", "ARD", "EAD", "AWK", "ERD",
"OOK", "AND", "OLE", "OOD", "")
|| StringAt((m_current + 2), 4, "EART", "OUSE", "OUND", "")
|| StringAt((m_current + 2), 5, "AMMER", ""))
{
MetaphAdd("H");
m_current += 2;
return true;
}
else if(m_current == 0)
{
MetaphAdd("A");
m_current += 2;
// don't encode vowels twice
m_current = SkipVowels(m_current);
return true;
}
}
m_current += 2;
return true;
}
return false;
}
/**
* Encode "-W-" when in eastern european names, adding
* the eastern european pronounciation to the american so
* that both forms can be found in a genealogy search
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Eastern_European_W()
{
//Arnow should match Arnoff
if(((m_current == m_last) && IsVowel(m_current - 1))
|| StringAt((m_current - 1), 5, "EWSKI", "EWSKY", "OWSKI", "OWSKY", "")
|| (StringAt(m_current, 5, "WICKI", "WACKI", "") && ((m_current + 4) == m_last))
|| StringAt(m_current, 4, "WIAK", "") && ((m_current + 3) == m_last)
|| StringAt(0, 3, "SCH", ""))
{
MetaphAddExactApprox("", "V", "", "F");
m_current++;
return true;
}
return false;
}
/**
* Encode "-X-"
*
*/
void Encode_X()
{
if(Encode_Initial_X()
|| Encode_Greek_X()
|| Encode_X_Special_Cases()
|| Encode_X_To_H()
|| Encode_X_Vowel()
|| Encode_French_X_Final())
{
return;
}
// eat redundant 'X' or other redundant cases
if(StringAt((m_current + 1), 1, "X", "Z", "S", "")
// e.g. "excite", "exceed"
|| StringAt((m_current + 1), 2, "CI", "CE", ""))
{
m_current += 2;
}
else
{
m_current++;
}
}
/**
* Encode initial X where it is usually pronounced as S
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Initial_X()
{
// current chinese pinyin spelling
if(StringAt(0, 3, "XIA", "XIO", "XIE", "")
|| StringAt(0, 2, "XU", ""))
{
MetaphAdd("X");
m_current++;
return true;
}
// else
if((m_current == 0))
{
MetaphAdd("S");
m_current++;
return true;
}
return false;
}
/**
* Encode X when from greek roots where it is usually pronounced as S
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_Greek_X()
{
// 'xylophone', xylem', 'xanthoma', 'xeno-'
if(StringAt((m_current + 1), 3, "YLO", "YLE", "ENO", "")
|| StringAt((m_current + 1), 4, "ANTH", ""))
{
MetaphAdd("S");
m_current++;
return true;
}
return false;
}
/**
* Encode special cases, "LUXUR-", "Texeira"
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_X_Special_Cases()
{
// 'luxury'
if(StringAt((m_current - 2), 5, "LUXUR", ""))
{
MetaphAddExactApprox("GJ", "KJ");
m_current++;
return true;
}
// 'texeira' portuguese/galician name
if(StringAt(0, 7, "TEXEIRA", "")
|| StringAt(0, 8, "TEIXEIRA", ""))
{
MetaphAdd("X");
m_current++;
return true;
}
return false;
}
/**
* Encode special case where americans know the
* proper mexican indian pronounciation of this name
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_X_To_H()
{
// TODO: look for other mexican indian words
// where 'X' is usually pronounced this way
if(StringAt((m_current - 2), 6, "OAXACA", "")
|| StringAt((m_current - 3), 7, "QUIXOTE", ""))
{
MetaphAdd("H");
m_current++;
return true;
}
return false;
}
/**
* Encode "-X-" in vowel contexts where it is usually
* pronounced KX ("ksh")
* account also for BBC pronounciation of => KS
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_X_Vowel()
{
// e.g. "sexual", "connexion" (british), "noxious"
if(StringAt((m_current + 1), 3, "UAL", "ION", "IOU", ""))
{
MetaphAdd("KX", "KS");
AdvanceCounter(3, 1);
return true;
}
return false;
}
/**
* Encode cases of "-X", encoding as silent when part
* of a french word where it is not pronounced
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_French_X_Final()
{
//french e.g. "breaux", "paix"
if(!((m_current == m_last)
&& (StringAt((m_current - 3), 3, "IAU", "EAU", "IEU", "")
|| StringAt((m_current - 2), 2, "AI", "AU", "OU", "OI", "EU", ""))) )
{
MetaphAdd("KS");
}
return false;
}
/**
* Encode "-Z-"
*
*/
void Encode_Z()
{
if(Encode_ZZ()
|| Encode_ZU_ZIER_ZS()
|| Encode_French_EZ()
|| Encode_German_Z())
{
return;
}
if(Encode_ZH())
{
return;
}
else
{
MetaphAdd("S");
}
// eat redundant 'Z'
if(CharAt(m_current + 1) == 'Z')
{
m_current += 2;
}
else
{
m_current++;
}
}
/**
* Encode cases of "-ZZ-" where it is obviously part
* of an italian word where "-ZZ-" is pronounced as TS
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_ZZ()
{
// "abruzzi", 'pizza'
if((CharAt(m_current + 1) == 'Z')
&& ((StringAt((m_current + 2), 1, "I", "O", "A", "")
&& ((m_current + 2) == m_last))
|| StringAt((m_current - 2), 9, "MOZZARELL", "PIZZICATO", "PUZZONLAN", "")))
{
MetaphAdd("TS", "S");
m_current += 2;
return true;
}
return false;
}
/**
* Encode special cases where "-Z-" is pronounced as J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_ZU_ZIER_ZS()
{
if(((m_current == 1) && StringAt((m_current - 1), 4, "AZUR", ""))
|| (StringAt(m_current, 4, "ZIER", "")
&& !StringAt((m_current - 2), 6, "VIZIER", ""))
|| StringAt(m_current, 3, "ZSA", ""))
{
MetaphAdd("J", "S");
if(StringAt(m_current, 3, "ZSA", ""))
{
m_current += 2;
}
else
{
m_current++;
}
return true;
}
return false;
}
/**
* Encode cases where americans recognize "-EZ" as part
* of a french word where Z not pronounced
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_French_EZ()
{
if(((m_current == 3) && StringAt((m_current - 3), 4, "CHEZ", ""))
|| StringAt((m_current - 5), 6, "RENDEZ", ""))
{
m_current++;
return true;
}
return false;
}
/**
* Encode cases where "-Z-" is in a german word
* where Z => TS in german
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_German_Z()
{
if(((m_current == 2) && ((m_current + 1) == m_last) && StringAt((m_current - 2), 4, "NAZI", ""))
|| StringAt((m_current - 2), 6, "NAZIFY", "MOZART", "")
|| StringAt((m_current - 3), 4, "HOLZ", "HERZ", "MERZ", "FITZ", "")
|| (StringAt((m_current - 3), 4, "GANZ", "") && !IsVowel(m_current + 1))
|| StringAt((m_current - 4), 5, "STOLZ", "PRINZ", "")
|| StringAt((m_current - 4), 7, "VENEZIA", "")
|| StringAt((m_current - 3), 6, "HERZOG", "")
// german words beginning with "sch-" but not schlimazel, schmooze
|| (m_inWord.contains("SCH") && !(StringAt((m_last - 2), 3, "IZE", "OZE", "ZEL", "")))
|| ((m_current > 0) && StringAt(m_current, 4, "ZEIT", ""))
|| StringAt((m_current - 3), 4, "WEIZ", ""))
{
if((m_current > 0) && m_inWord.charAt(m_current - 1) == 'T')
{
MetaphAdd("S");
}
else
{
MetaphAdd("TS");
}
m_current++;
return true;
}
return false;
}
/**
* Encode "-ZH-" as J
*
* @return true if encoding handled in this routine, false if not
*
*/
boolean Encode_ZH()
{
//chinese pinyin e.g. 'zhao', also english "phonetic spelling"
if(CharAt(m_current + 1) == 'H')
{
MetaphAdd("J");
m_current += 2;
return true;
}
return false;
}
/**
* Test for names derived from the swedish,
* dutch, or slavic that should get an alternate
* pronunciation of 'SV' to match the native
* version
*
* @return true if swedish, dutch, or slavic derived name
*/
boolean Names_Beginning_With_SW_That_Get_Alt_SV()
{
if(StringAt(0, 7, "SWANSON", "SWENSON", "SWINSON", "SWENSEN",
"SWOBODA", "")
|| StringAt(0, 9, "SWIDERSKI", "SWARTHOUT", "")
|| StringAt(0, 10, "SWEARENGIN", ""))
{
return true;
}
return false;
}
/**
* Test for names derived from the german
* that should get an alternate pronunciation
* of 'XV' to match the german version spelled
* "schw-"
*
* @return true if german derived name
*/
boolean Names_Beginning_With_SW_That_Get_Alt_XV()
{
if(StringAt(0, 5, "SWART", "")
|| StringAt(0, 6, "SWARTZ", "SWARTS", "SWIGER", "")
|| StringAt(0, 7, "SWITZER", "SWANGER", "SWIGERT",
"SWIGART", "SWIHART", "")
|| StringAt(0, 8, "SWEITZER", "SWATZELL", "SWINDLER", "")
|| StringAt(0, 9, "SWINEHART", "")
|| StringAt(0, 10, "SWEARINGEN", ""))
{
return true;
}
return false;
}
/**
* Test whether the word in question
* is a name of germanic or slavic origin, for
* the purpose of determining whether to add an
* alternate encoding of 'V'
*
* @return true if germanic or slavic name
*/
boolean Germanic_Or_Slavic_Name_Beginning_With_W()
{
if(StringAt(0, 3, "WEE", "WIX", "WAX", "")
|| StringAt(0, 4, "WOLF", "WEIS", "WAHL", "WALZ", "WEIL", "WERT",
"WINE", "WILK", "WALT", "WOLL", "WADA", "WULF",
"WEHR", "WURM", "WYSE", "WENZ", "WIRT", "WOLK",
"WEIN", "WYSS", "WASS", "WANN", "WINT", "WINK",
"WILE", "WIKE", "WIER", "WELK", "WISE", "")
|| StringAt(0, 5, "WIRTH", "WIESE", "WITTE", "WENTZ", "WOLFF", "WENDT",
"WERTZ", "WILKE", "WALTZ", "WEISE", "WOOLF", "WERTH",
"WEESE", "WURTH", "WINES", "WARGO", "WIMER", "WISER",
"WAGER", "WILLE", "WILDS", "WAGAR", "WERTS", "WITTY",
"WIENS", "WIEBE", "WIRTZ", "WYMER", "WULFF", "WIBLE",
"WINER", "WIEST", "WALKO", "WALLA", "WEBRE", "WEYER",
"WYBLE", "WOMAC", "WILTZ", "WURST", "WOLAK", "WELKE",
"WEDEL", "WEIST", "WYGAN", "WUEST", "WEISZ", "WALCK",
"WEITZ", "WYDRA", "WANDA", "WILMA", "WEBER", "")
|| StringAt(0, 6, "WETZEL", "WEINER", "WENZEL", "WESTER", "WALLEN", "WENGER",
"WALLIN", "WEILER", "WIMMER", "WEIMER", "WYRICK", "WEGNER",
"WINNER", "WESSEL", "WILKIE", "WEIGEL", "WOJCIK", "WENDEL",
"WITTER", "WIENER", "WEISER", "WEXLER", "WACKER", "WISNER",
"WITMER", "WINKLE", "WELTER", "WIDMER", "WITTEN", "WINDLE",
"WASHER", "WOLTER", "WILKEY", "WIDNER", "WARMAN", "WEYANT",
"WEIBEL", "WANNER", "WILKEN", "WILTSE", "WARNKE", "WALSER",
"WEIKEL", "WESNER", "WITZEL", "WROBEL", "WAGNON", "WINANS",
"WENNER", "WOLKEN", "WILNER", "WYSONG", "WYCOFF", "WUNDER",
"WINKEL", "WIDMAN", "WELSCH", "WEHNER", "WEIGLE", "WETTER",
"WUNSCH", "WHITTY", "WAXMAN", "WILKER", "WILHAM", "WITTIG",
"WITMAN", "WESTRA", "WEHRLE", "WASSER", "WILLER", "WEGMAN",
"WARFEL", "WYNTER", "WERNER", "WAGNER", "WISSER", "")
|| StringAt(0, 7, "WISEMAN", "WINKLER", "WILHELM", "WELLMAN", "WAMPLER", "WACHTER",
"WALTHER", "WYCKOFF", "WEIDNER", "WOZNIAK", "WEILAND", "WILFONG",
"WIEGAND", "WILCHER", "WIELAND", "WILDMAN", "WALDMAN", "WORTMAN",
"WYSOCKI", "WEIDMAN", "WITTMAN", "WIDENER", "WOLFSON", "WENDELL",
"WEITZEL", "WILLMAN", "WALDRUP", "WALTMAN", "WALCZAK", "WEIGAND",
"WESSELS", "WIDEMAN", "WOLTERS", "WIREMAN", "WILHOIT", "WEGENER",
"WOTRING", "WINGERT", "WIESNER", "WAYMIRE", "WHETZEL", "WENTZEL",
"WINEGAR", "WESTMAN", "WYNKOOP", "WALLICK", "WURSTER", "WINBUSH",
"WILBERT", "WALLACH", "WYNKOOP", "WALLICK", "WURSTER", "WINBUSH",
"WILBERT", "WALLACH", "WEISSER", "WEISNER", "WINDERS", "WILLMON",
"WILLEMS", "WIERSMA", "WACHTEL", "WARNICK", "WEIDLER", "WALTRIP",
"WHETSEL", "WHELESS", "WELCHER", "WALBORN", "WILLSEY", "WEINMAN",
"WAGAMAN", "WOMMACK", "WINGLER", "WINKLES", "WIEDMAN", "WHITNER",
"WOLFRAM", "WARLICK", "WEEDMAN", "WHISMAN", "WINLAND", "WEESNER",
"WARTHEN", "WETZLER", "WENDLER", "WALLNER", "WOLBERT", "WITTMER",
"WISHART", "WILLIAM", "")
|| StringAt(0, 8, "WESTPHAL", "WICKLUND", "WEISSMAN", "WESTLUND", "WOLFGANG", "WILLHITE",
"WEISBERG", "WALRAVEN", "WOLFGRAM", "WILHOITE", "WECHSLER", "WENDLING",
"WESTBERG", "WENDLAND", "WININGER", "WHISNANT", "WESTRICK", "WESTLING",
"WESTBURY", "WEITZMAN", "WEHMEYER", "WEINMANN", "WISNESKI", "WHELCHEL",
"WEISHAAR", "WAGGENER", "WALDROUP", "WESTHOFF", "WIEDEMAN", "WASINGER",
"WINBORNE", "")
|| StringAt(0, 9, "WHISENANT", "WEINSTEIN", "WESTERMAN", "WASSERMAN", "WITKOWSKI", "WEINTRAUB",
"WINKELMAN", "WINKFIELD", "WANAMAKER", "WIECZOREK", "WIECHMANN", "WOJTOWICZ",
"WALKOWIAK", "WEINSTOCK", "WILLEFORD", "WARKENTIN", "WEISINGER", "WINKLEMAN",
"WILHEMINA", "")
|| StringAt(0, 10, "WISNIEWSKI", "WUNDERLICH", "WHISENHUNT", "WEINBERGER", "WROBLEWSKI",
"WAGUESPACK", "WEISGERBER", "WESTERVELT", "WESTERLUND", "WASILEWSKI",
"WILDERMUTH", "WESTENDORF", "WESOLOWSKI", "WEINGARTEN", "WINEBARGER",
"WESTERBERG", "WANNAMAKER", "WEISSINGER", "")
|| StringAt(0, 11, "WALDSCHMIDT", "WEINGARTNER", "WINEBRENNER", "")
|| StringAt(0, 12, "WOLFENBARGER", "")
|| StringAt(0, 13, "WOJCIECHOWSKI", ""))
{
return true;
}
return false;
}
/**
* Test whether the word in question
* is a name starting with 'J' that should
* match names starting with a 'Y' sound.
* All forms of 'John', 'Jane', etc, get
* and alt to match e.g. 'Ian', 'Yana'. Joelle
* should match 'Yael', 'Joseph' should match
* 'Yusef'. German and slavic last names are
* also included.
*
* @return true if name starting with 'J' that
* should get an alternate encoding as a vowel
*/
boolean Names_Beginning_With_J_That_Get_Alt_Y()
{
if(StringAt(0, 3, "JAN", "JON", "JAN", "JIN", "JEN", "")
|| StringAt(0, 4, "JUHL", "JULY", "JOEL", "JOHN", "JOSH",
"JUDE", "JUNE", "JONI", "JULI", "JENA",
"JUNG", "JINA", "JANA", "JENI", "JOEL",
"JANN", "JONA", "JENE", "JULE", "JANI",
"JONG", "JOHN", "JEAN", "JUNG", "JONE",
"JARA", "JUST", "JOST", "JAHN", "JACO",
"JANG", "JUDE", "JONE", "")
|| StringAt(0, 5, "JOANN", "JANEY", "JANAE", "JOANA", "JUTTA",
"JULEE", "JANAY", "JANEE", "JETTA", "JOHNA",
"JOANE", "JAYNA", "JANES", "JONAS", "JONIE",
"JUSTA", "JUNIE", "JUNKO", "JENAE", "JULIO",
"JINNY", "JOHNS", "JACOB", "JETER", "JAFFE",
"JESKE", "JANKE", "JAGER", "JANIK", "JANDA",
"JOSHI", "JULES", "JANTZ", "JEANS", "JUDAH",
"JANUS", "JENNY", "JENEE", "JONAH", "JONAS",
"JACOB", "JOSUE", "JOSEF", "JULES", "JULIE",
"JULIA", "JANIE", "JANIS", "JENNA", "JANNA",
"JEANA", "JENNI", "JEANE", "JONNA", "")
|| StringAt(0, 6, "JORDAN", "JORDON", "JOSEPH", "JOSHUA", "JOSIAH",
"JOSPEH", "JUDSON", "JULIAN", "JULIUS", "JUNIOR",
"JUDITH", "JOESPH", "JOHNIE", "JOANNE", "JEANNE",
"JOANNA", "JOSEFA", "JULIET", "JANNIE", "JANELL",
"JASMIN", "JANINE", "JOHNNY", "JEANIE", "JEANNA",
"JOHNNA", "JOELLE", "JOVITA", "JOSEPH", "JONNIE",
"JANEEN", "JANINA", "JOANIE", "JAZMIN", "JOHNIE",
"JANENE", "JOHNNY", "JONELL", "JENELL", "JANETT",
"JANETH", "JENINE", "JOELLA", "JOEANN", "JULIAN",
"JOHANA", "JENICE", "JANNET", "JANISE", "JULENE",
"JOSHUA", "JANEAN", "JAIMEE", "JOETTE", "JANYCE",
"JENEVA", "JORDAN", "JACOBS", "JENSEN", "JOSEPH",
"JANSEN", "JORDON", "JULIAN", "JAEGER", "JACOBY",
"JENSON", "JARMAN", "JOSLIN", "JESSEN", "JAHNKE",
"JACOBO", "JULIEN", "JOSHUA", "JEPSON", "JULIUS",
"JANSON", "JACOBI", "JUDSON", "JARBOE", "JOHSON",
"JANZEN", "JETTON", "JUNKER", "JONSON", "JAROSZ",
"JENNER", "JAGGER", "JASMIN", "JEPSEN", "JORDEN",
"JANNEY", "JUHASZ", "JERGEN", "JAKOB", "")
|| StringAt(0, 7, "JOHNSON", "JOHNNIE", "JASMINE", "JEANNIE", "JOHANNA",
"JANELLE", "JANETTE", "JULIANA", "JUSTINA", "JOSETTE",
"JOELLEN", "JENELLE", "JULIETA", "JULIANN", "JULISSA",
"JENETTE", "JANETTA", "JOSELYN", "JONELLE", "JESENIA",
"JANESSA", "JAZMINE", "JEANENE", "JOANNIE", "JADWIGA",
"JOLANDA", "JULIANE", "JANUARY", "JEANICE", "JANELLA",
"JEANETT", "JENNINE", "JOHANNE", "JOHNSIE", "JANIECE",
"JOHNSON", "JENNELL", "JAMISON", "JANSSEN", "JOHNSEN",
"JARDINE", "JAGGERS", "JURGENS", "JOURDAN", "JULIANO",
"JOSEPHS", "JHONSON", "JOZWIAK", "JANICKI", "JELINEK",
"JANSSON", "JOACHIM", "JANELLE", "JACOBUS", "JENNING",
"JANTZEN", "JOHNNIE", "")
|| StringAt(0, 8, "JOSEFINA", "JEANNINE", "JULIANNE", "JULIANNA", "JONATHAN",
"JONATHON", "JEANETTE", "JANNETTE", "JEANETTA", "JOHNETTA",
"JENNEFER", "JULIENNE", "JOSPHINE", "JEANELLE", "JOHNETTE",
"JULIEANN", "JOSEFINE", "JULIETTA", "JOHNSTON", "JACOBSON",
"JACOBSEN", "JOHANSEN", "JOHANSON", "JAWORSKI", "JENNETTE",
"JELLISON", "JOHANNES", "JASINSKI", "JUERGENS", "JARNAGIN",
"JEREMIAH", "JEPPESEN", "JARNIGAN", "JANOUSEK", "")
|| StringAt(0, 9, "JOHNATHAN", "JOHNATHON", "JORGENSEN", "JEANMARIE", "JOSEPHINA",
"JEANNETTE", "JOSEPHINE", "JEANNETTA", "JORGENSON", "JANKOWSKI",
"JOHNSTONE", "JABLONSKI", "JOSEPHSON", "JOHANNSEN", "JURGENSEN",
"JIMMERSON", "JOHANSSON", "")
|| StringAt(0, 10, "JAKUBOWSKI", ""))
{
return true;
}
return false;
}
/**
* @param args
*/
public static void main(String[] args)
{
// example code
Metaphone3 m3 = new Metaphone3();
//m3.SetEncodeVowels(true);
//m3.SetEncodeExact(true);
m3.SetWord("iron");
m3.Encode();
System.out.println("iron : " + m3.GetMetaph());
System.out.println("iron : (alt) " + m3.GetAlternateMetaph());
m3.SetWord("witz");
m3.Encode();
System.out.println("witz : " + m3.GetMetaph());
System.out.println("witz : (alt) " + m3.GetAlternateMetaph());
m3.SetWord("");
m3.Encode();
System.out.println("BLANK : " + m3.GetMetaph());
System.out.println("BLANK : (alt) " + m3.GetAlternateMetaph());
// these settings default to false
m3.SetEncodeExact(true);
m3.SetEncodeVowels(true);
String test = new String("Guillermo");
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "VILLASENOR";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "GUILLERMINA";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "PADILLA";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "BJORK";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "belle";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "ERICH";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "CROCE";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "GLOWACKI";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "qing";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
test = "tsing";
m3.SetWord(test);
m3.Encode();
System.out.println(test + " : " + m3.GetMetaph());
System.out.println(test + " : (alt) " + m3.GetAlternateMetaph());
}
}
|
Added gc_lang/fr/dictionnaire/orthographe/FRANCAIS.dic version [997f49e32a].
more than 10,000 changes
Added gc_lang/fr/dictionnaire/orthographe/FRANCAIS_5.aff version [3f437bf32b].
more than 10,000 changes
Added gc_lang/fr/dictionnaire/orthographe/README.old.txt version [00597582e6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 |
NOTICE
_______________________________________________________________________________
Dictionnaire orthographique du français comportant les nouvelles et les
anciennes graphies des mots concernés par les rectifications de l'orthographe
proposées en 1990 par le Conseil supérieur à la langue française et
par l'Académie française.
http://www.orthographe-recommandee.info/
Attention ! Ce dictionnaire est prévu pour fonctionner avec Myspell, l'ancien
correcteur orthographique d'OpenOffice.org, depuis les versions 1.x jusqu'à la
version 2.0.1. Si vous avez une version postérieure d'OpenOffice.org, utilisez
les dictionnaires créés pour Hunspell.
Note : Firefox 3 utilise le correcteur Hunspell, Firefox 2 Myspell.
Contact: dicollecte<at>free.fr
Dicollecte: http://www.dicollecte.org/
Remerciements à :
- Vazkor, pour l'examen minutieux du dictionnaire et les innombrables
corrections apportées;
- Jean Beney, pour la comparaison avec le dictionnaire de l'ABU qui a permis de
débusquer maintes erreurs;
- Romain Muller, pour la vérification des graphies spécifiques à la réforme de
l'orthographe de 1990;
- et à tous ceux qui ont apporté leur pierre à l'édifice.
_______________________________________________________________________________
LICENCE
_______________________________________________________________________________
Avec l'accord de l'auteur initial, Christophe Pythoud, ces dictionnaires
sont désormais distribués sous triple licence : LGPL, GPL, MPL.
Licence GPL 2 ou supérieure http://www.gnu.org/licenses/gpl-2.0.html
Licence LGPL 2.1 ou supérieure http://www.gnu.org/licenses/lgpl-2.1.html
Licence MPL 1.1 ou supérieure http://www.mozilla.org/MPL/MPL-1.1.html
La première version du dictionnaire MySpell pour OpenOffice.org a été créée
automatiquement à partir de la convertion du fichier d'affixes et des listes
de mots créées par Christophe Pythoud pour Ispell.
Ces fichiers ont été publiés dans la version 1.0.1 de Français-GUTenberg et
étaient soumis à la licence GPL version 2.
_______________________________________________________________________________
CHANGELOG
_______________________________________________________________________________
##### VERSION 1.3.1 - avril 2008 ##############################################
établie par O.R.
----- Modifications du dictionnaire -------------------------------------------
* Dépliage des lemmes préfixés avec C D N P R O T dans les dictionnaires
Classique et Réforme 1990.
A permis d'éliminer bon nombre d'erreurs et de redondances.
* Fusion des dictionnaires Classique et Réforme 1990 après le dépliage des
lemmes préfixés.
* Mise à jour avec les propositions du site "Dicollecte".
----- Modifications du fichier des affixes ------------------------------------
* Suppression des drapeaux de préfixation : C D N P R O T.
##### VERSION 1.2.0 - mars 2008 ###############################################
##### VERSION 1.1.6 - février 2008 ############################################
établies par O.R.
----- Modifications du dictionnaire -------------------------------------------
* Ajout de communes françaises (villes de plus de 20000 habitants)
* Mise à jour avec les entrées proposées sur le site "Dicollecte".
* Diverses corrections
* Quelques ajouts
----- Modifications du fichier des affixes ------------------------------------
* Modifications du mécanisme de suggestion :
+ REP ai é
+ REP é ai
+ REP ai è
+ REP è ai
+ REP ai ê
+ REP ê ai
+ REP ei é
+ REP é ei
+ REP ei è
+ REP è ei
+ REP ei ê
+ REP ê ei
+ REP ss c
+ REP c ss
+ REP k qu
+ REP qu k
+ REP x ct
+ REP ct x
+ REP ss ç
+ REP ç ss
+ REP o au
+ REP au o
+ REP o eau
+ REP eau o
+ REP disez dites
+ REP fesez faites
+ REP faisez faites
+ REP décrédibilis discrédit
+ REP antitartre détartrant
Exemples:
luminère > luminaire
pégne > peigne
impreigner > imprégner
* Modification du drapeau y
> SFX y er è-je er
##### VERSION 1.1.5 - décembre 2007 ###########################################
##### VERSION 1.1.4 - décembre 2007 ###########################################
##### VERSION 1.1.3 - décembre 2007 ###########################################
établies par O.R.
* Mise à jour avec les entrées proposées sur le site "dico|savant".
* Diverses corrections
##### VERSION 1.1 - novembre 2007 #############################################
établie par O.R.
* Fusion des dictionnaires orthographiques français Classique et Réforme 1990,
versions 2.0.2 du 19 novembre 2007.
Fusion des fichiers des lemmes et des affixes.
##### VERSION 1.1 - novembre 2007 #############################################
établie par O.R.
----- Modifications du dictionnaire -------------------------------------------
* Suppression de milliers d'entrées redondantes (notamment avec les déclinaisons
engendrées par les drapeaux p, q, L et M).
* Corrections des mots avec ligatures ('oe', 'ae').
* Ordonnancement des drapeaux (et effacement des doublons).
* Des centaines de nouvelles entrées.
* Des centaines de corrections.
* Mise à jour avec les entrées proposées sur le site "dico|savant".
* Reprise partielle des corrections et ajouts du dictionnaire de Vazkor
du 08 septembre 2007.
A la demande de l'intéressé, seul son pseudonyme demeure. La page web
fournissant ce dictionnaire a été effacée.
La plupart des ajouts et des modifications ont été repris (environ 3200 sur 4900).
Seules les suppressions des entrées erronées ont été reprises (environ 800 sur 12300).
Les termes rares, scientifiques, mathématiques, les mots composés, etc. n'ont
pas été effacés.
Quelques erreurs ont été corrigées.
* Comparaison du dictionnaire avec celui de l'ABU, ce qui a permis de corriger
des centaines d'erreurs et de combler des oublis. (Jean Beney)
* Vérification des nouvelles orthographes recommandées. (Romain Muller)
http://www.orthographe-recommandee.info/
----- Modifications du fichier des affixes ------------------------------------
La liste suivante détaille les modifications du dictionnaire "Classique".
Celles du dictionnaire "Réforme 1990" sont légèrement différentes.
* suppression des drapeaux inutiles : A B C H E Y Z I J K W a b e f i k
* ajout du drapeau C (préfixe contre)
* ajout du drapeau T (préfixe sur)
* ajout des lignes MAP, REP et WORDCHARS
>> meilleures suggestions de correction
* modification du drapeau D
> PFX D 0 dé [^aàâeèéêiîoôuh½æ]
> PFX D 0 dés [aàâeèéêiîoôuh½æ]
* modification du drapeau R
> PFX R 0 re [^aàâeèéêiîoôuhs½æ]
> PFX R 0 ré [aàâeèéêiîoôuh½æ]
* modification du drapeau O
> PFX O 0 ré [^aàâeèéêiîoôuhs½æ]
> PFX O 0 r [aàâeèéêiîoôuh½æ]
* modification du drapeau L
> PFX L 0 l' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ]
* modification du drapeau D
> PFX M 0 d' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ]
* modification du drapeau Q
> PFX Q 0 qu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ]
> PFX Q 0 quoiqu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ]
> PFX Q 0 puisqu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ]
> PFX Q 0 lorsqu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ]
* modification du drapeau U
> PFX U 0 jusqu' [aàâeèéêiîoôuh½æ]
* modification du drapeau X
> SFX X 0 x [aeo½]u
* modification du drapeau j
> PFX j 0 j' [aàâeèéêiîoôuyh½æ]
* modification du drapeau n
> PFX n 0 n' [aàâeèéêiîoôuyh½æ]
> PFX n 0 qu' [aàâeèéêiîoôuyh½æ]
* modification du drapeau m
> PFX m 0 m' [aàâeèéêiîoôuyh½æ]
* modification du drapeau t
> PFX t 0 t' [aàâeèéêiîoôuyh½æ]
* modification du drapeau l
> PFX l 0 l' [aàâeèéêiîoôuyh½æ]
* modification du drapeau s
> PFX s 0 s' [aàâeèéêiîoôuyh½æ]
* modification du drapeau F
- SFX F èle el èle
- SFX F èle els èle
> SFX F ne n [aiou]ne
> SFX F e s [aiou]ne
> SFX F re r [aiuûy]re
> SFX F e s [aiuûy]re
+ SFX F esse e esse
+ SFX F he h [ut]he
+ SFX F e s [ut]he
+ SFX F ke k ke
+ SFX F e s ke
* modification du drapeau g
+ SFX g s t fris
* modification du drapeau y
+ SFX y re t [dfr]ire
> SFX y re ts [dfr]ire
> SFX y re te [dfr]ire
> SFX y re tes [dfr]ire
+ SFX y re s cire
+ SFX y ure us clure
+ SFX y re e clure
+ SFX y re es clure
* modification du drapeau x
> le champ conditionnel 'ai' a été remplacé par 'rai'
* modification du drapeau z
> SFX z ure us clure
* modification du drapeau p
> SFX p e èrent [^è][^è].e
> SFX p 0 ra [^è][^è].e
> SFX p 0 ront [^è][^è].e
> SFX p 0 rait [^è][^è].e
> SFX p 0 raient [^è][^è].e
+ SFX p ie yèrent [aou]ie
+ SFX p elle elèrent elle
+ SFX p ère érèrent ère
+ SFX p ère érera ère
+ SFX p ère éreront ère
+ SFX p ère érerait ère
+ SFX p ère éreraient ère
+ SFX p ège égèrent ège
+ SFX p ège égera ège
+ SFX p ège égeront ège
+ SFX p ège égerait ège
+ SFX p ège égeraient ège
+ SFX p ève evèrent ève
+ SFX p 0 ra ève
+ SFX p 0 ront ève
+ SFX p 0 rait ève
+ SFX p 0 raient ève
+ SFX p ène énèrent [^mr]ène
+ SFX p ène énera [^mr]ène
+ SFX p ène éneront [^mr]ène
+ SFX p ène énerait [^mr]ène
+ SFX p ène éneraient [^mr]ène
+ SFX p ène enèrent [mr]ène
+ SFX p 0 ra [mr]ène
+ SFX p 0 ront [mr]ène
+ SFX p 0 rait [mr]ène
+ SFX p 0 raient [mr]ène
+ SFX p ète étèrent [^h]ète
+ SFX p ète étera [^h]ète
+ SFX p ète éteront [^h]ète
+ SFX p ète éterait [^h]ète
+ SFX p ète éteraient [^h]ète
+ SFX p ète etèrent chète
+ SFX p 0 ra chète
+ SFX p 0 ront chète
+ SFX p 0 rait chète
+ SFX p 0 raient chète
+ SFX p èle elèrent èle
+ SFX p 0 ra èle
+ SFX p 0 ront èle
+ SFX p 0 rait èle
+ SFX p 0 raient èle
+ SFX p èche échèrent èche
+ SFX p èche échera èche
+ SFX p èche écheront èche
+ SFX p èche écherait èche
+ SFX p èche écheraient èche
+ SFX p èque équèrent èque
+ SFX p èque équera èque
+ SFX p èque équeront èque
+ SFX p èque équerait èque
+ SFX p èque équeraient èque
+ SFX p ètre étrèrent ètre
+ SFX p ètre étrera ètre
+ SFX p ètre étreront ètre
+ SFX p ètre étrerait ètre
+ SFX p ètre étreraient ètre
+ SFX p ègne égnèrent ègne
+ SFX p ègne égnera ègne
+ SFX p ègne égneront ègne
+ SFX p ègne égnerait ègne
+ SFX p ègne égneraient ègne
+ SFX p ègre égrèrent ègre
+ SFX p ègre égrera ègre
+ SFX p ègre égreront ègre
+ SFX p ègre égrerait ègre
+ SFX p ègre égreraient ègre
+ SFX p èvre évrèrent èvre
+ SFX p èvre évrera èvre
+ SFX p èvre évreront èvre
+ SFX p èvre évrerait èvre
+ SFX p èvre évreraient èvre
Légende :
> lignes modifiées
+ lignes ajoutées
- lignes supprimées
##### VERSION 1.0.1 ###########################################################
Version corrigée de la liste de mots avec regroupement des mots équivalents afin
de supprimer des fautes lors de la correction (les mots sont considérés comme faux
si ils existent en double dans la liste de mots)
##### VERSION 1.0.0 ###########################################################
Version du dictionnaire MySpell fr_FR générée automatiquement depuis à partir de la
convertion du fichier affix et des listes de mots créés par Christophe Pythoud pour
Ispell
|
Added gc_lang/fr/dictionnaire/orthographe/README_dict_fr.txt version [462b57ee9f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
_______________________________________________________________________________
DICTIONNAIRES ORTHOGRAPHIQUES FRANÇAIS
version ${version}
Olivier R. - dicollecte<at>free<dot>fr
Dicollecte : http://www.dicollecte.org/
Licence :
MPL : Mozilla Public License
version 2.0 -- http://www.mozilla.org/MPL/2.0/
Ce dictionnaire ne peut fonctionner qu’avec un logiciel utilisant le
correcteur Hunspell : OpenOffice.org 3.2+, Firefox 4+, Thunderbird 5+
Principaux contributeurs :
- Jean-Luc T. ;
- Sylvain P. ;
- Laurent Dubois ;
- Dominique Pellé ;
- Pierre Poisson ;
- Pierre-Yves ;
- Pierre Choffardet ;
- Leywen ;
- Romain Muller et Serge Bibauw, de l’association RENOUVO, grâce à qui
la nouvelle orthographe et ses anciennes variantes ont pu être établies ;
- Chantal Contant, pour ses recherches sur la réforme de 1990 ;
- Benoît Sagot, qui nous a autorisé à comparer notre lexique avec Lefff,
ce qui a mis en évidence des dizaines d’erreurs d’étiquetage grammatical ;
- Philipp Burgess, pour la normalisation Unicode avec Hunspell.
Merci aussi à tous ceux qui ont apporté leur pierre à l’édifice.
http://www.dicollecte.org/members.php?prj=fr
Pour participer à l’amélioration du dictionnaire, allez sur :
http://www.dicollecte.org/home.php?prj=fr
_______________________________________________________________________________
À propos des différents dictionnaires français
_______________________________________________________________________________
En 1990, le Conseil supérieur à la langue française et l’Académie française
ont proposé une réforme de l’orthographe qui concerne plusieurs milliers de
mots. L’emploi des nouvelles graphies n’est pas obligatoire. Les anciennes
comme les nouvelles sont considérées comme correctes.
Pour en savoir plus sur la réforme de 1990 :
http://www.renouvo.org/regles.php
http://www.orthographe-recommandee.info/
Malgré les rectifications modestes apportées par cette réforme, la nouvelle
orthographe suscite beaucoup de polémiques. Afin de satisfaire les exigences
de chacun, quatre dictionnaires existent, respectant différemment cette
réforme.
Dictionnaire “Moderne”
Ce dictionnaire propose une sélection des graphies classiques et
réformées, suivant la lente évolution de l’orthographe actuelle. Ce
dictionnaire contient les graphies les moins polémiques de la réforme.
Dictionnaire “Classique” [recommandé]
Ce dictionnaire est une extension du dictionnaire «Moderne» et propose
en sus des graphies alternatives, parfois encore très usitées, parfois
tombées en désuétude.
Dictionnaire “Réforme 1990”
Ce dictionnaire ne connaît que les graphies nouvelles des mots concernés
par la réforme de 1990.
Dictionnaire “Toutes variantes”
Ce dictionnaire contient les nouvelles et les anciennes graphies des
mots concernés par la réforme de 1990.
|
Added gc_lang/fr/dictionnaire/orthographe/changelog.old.txt version [a6c02c3d4d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
Résumons la genèse de ce dictionnaire:
* Dictionnaire pour Ispell, par Christophe Pythoud [2001?]
- création d’un fichier des affixes du français (c’est la structure, le squelette du dictionnaire)
- création de listes de mots (origine inconnue)
* Dictionnaire pour Myspell (orthographe classique) [2002]
- conversion faite par script (auteurs inconnus)
- corrections pour mise en conformité avec les contraintes de Myspell (auteurs inconnus)
* Dictionnaire pour Myspell (orthographe réformée) [2005-2006], par Mat. Schopfer (nom incertain, car je le tire d’une adresse mail)
- élaboré à partir du dictionnaire 1.0.1
- restructuration du fichier des affixes, suppression des paramètres inutilisés, suppression des paramètres utiles à un seul verbes
- ajouts de nombreux noms propres et de néologismes
- correction des pluriels de quelques mots en -al (naval, banal ...)
- correction de la 2e personne du pluriel de l'indicatif des verbes dérivés de dire (prédire, dédire, médire ...)
- regroupement des verbes avec leurs dérivés à préfixes commençant par une consonne (contre-, dé-, ré-, pré-, sur-)
* Dictionnaire pour Myspell (orthographe classique) [2006-2007], par Vazkor
- élaboré à partir du dictionnaire 1.0.1
- épuration du fichier des affixes
- des milliers d’ajouts et de corrections
- des milliers de suppressions (redondances ou mots jugés trop rares)
* Dictionnaire pour Myspell (orthographe classique) [2006-2008], par Olivier R. (moi-même)
- élaboré à partir du dictionnaire 1.0.1
- correction, épuration et restructuration partielle du fichier des affixes
- suppression des redondances par algorithme de génération des flexions et recherche
- des milliers ajouts et corrections (avec le concours de Jean Beney)
- reprise partielle des modifications faites par Vazkor (partielle, car points de vue divergents concernant la politique du dictionnaire)
- intégration des propositions faites sur le site dicollecte, anciennement dico|savant
* Dictionnaire pour Myspell (orthographe réformée) [2007-2008], par moi-même
- reprise du dictionnaire de Mat. Schopfer
- correction, épuration du fichier des affixes (mais pas restructuration)
- intégration des modifications faites sur le dictionnaire précédent, par script
* Dictionnaire pour Myspell (orthographes classique et réformée) [2007-2008], par moi-même
- première fusion grossière des deux dictionnaires précédents, par script (2007)
- fusion plus élaborée des deux dictionnaires précédents, par script (2008)
Fin de l’épopée Myspell
Avec tous ces dictionnaires, avec des fichiers d’affixation légèrement divergents et un peu conflictuels, maintenir les 3 dictionnaires n’était pas une sinécure, d’autant plus que le dictionnaire réformé avait subi des changements compliquant pas mal la comparaison des entrées (autre gestion des préfixes).
De surcroît, Myspell avaient des limitations qui rendaient la gestion des élisions et la conjugaison des verbes très compliquées (5 entrées par verbe au minimum, voire des dizaines pour les verbes irréguliers; parfois plusieurs entrées par mot pour les élisions; redondances; flexions erronées dues aux combinaisons des règles d’affixation; etc.). Bref, c’était un véritable casse-tête de gérer ces trois dictionnaires simultanément, et j’ai décidé de tout reprendre sur des bases saines.
* Dictionnaire pour Hunspell (source) [2008-2009], par moi-même
- réécriture totale du fichier des affixes (incompatible avec Myspell) [de nov. 2007 à nov. 2008]
- nouvelle liste de mots:
-> verbes tirés de listes diverses sur le net et du Bescherelle
-> reprise de la liste du dernier dictionnaire fusionné (sauf les verbes)
-> génération d’une liste de noms communs à partir de la liste des verbes
- étiquetage grammatical (82% des entrées)
- nouvelle liste de mots concernés par la réforme issue de la base de données de RENOUVO (Romain Muller et Serge Bibauw)
- intégration des propositions du site Dicollecte (principaux contributeurs: Laurent Dubois et Pierre Poisson)
C’est à partir de dictionnaire source que les dictionnaires «Classique», «Réforme 1990» et «Classique & Réforme 1990» sont générés, ce qui permet de n’avoir qu’une seule liste sur laquelle travailler.
Ceci étant établi, je (Olivier R.) suis l’auteur du dictionnaire actuel (fichier des affixes, système et scripts, listes de mots, étiquetage). Les principaux contributeurs sont (directement ou indirectement): Christophe Pythoud (liste initiale des mots), RENOUVO (pour les mots de la réforme), Vazkor (nombre important d’ajouts et de corrections sur la liste de Pythoud), Laurent Dubois et Pierre Poisson (nombreux ajouts et corrections, et contrôle actif des propositions faites sur Dicollecte). Autres contributeurs: Jean Beney (corrections et ajouts), Audran «gtfh» (contrôleur à l’époque de dico|savant), Mat. Schopfer (corrections, ajouts), Jean-Philippe Fleury. Ensuite, il y a les autres listés ici: http://www.dicollecte.org/members.php?prj=fr
|
Added gc_lang/fr/dictionnaire/orthographe/changelog.txt version [789b389bea].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
JOURNAL DES MODIFICATIONS PAR DICOLLECTE
_______________________________________________________________________________
***
*** DICTIONNAIRES POUR HUNSPELL (Dicollecte) ***
***
5.0.2 // 18 janvier 2013
— Environ ?? nouvelles entrées
— Ajouts des formes élidées manquantes pour les participes passés du 3e groupe
5.0.1 // 9 décembre 2013
— Ajouts des formes élidées manquantes pour les participes passés du 1er et du 2e groupe
5.0 // 8 décembre 2013
— Environ 710 nouvelles entrées
— Refonte des règles d’affixation :
– Fusion des règles des conjugaisons (2546 règles supprimées)
– 3457 entrées supprimées (adjectifs redondants avec les participes passés)
4.12 // 13 septembre 2013
— Environ 470 nouvelles entrées
— Suggestion avec les apostrophes quand celles-ci sont oubliées (limportance -> l’importance)
4.11 // 17 juin 2013
— Environ 700 nouvelles entrées
— Révision de l’étiquetage grammatical (beaucoup d’étiquettes /is:/ sont devenues /po:/ notamment dans le fichier des affixes)
nécessaire pour Grammalecte 0.3
— Étiquetage grammatical à 100 % (il manquait 0,2 % depuis pas mal de temps)
4.10 // 1er avril 2013
— Ajout des graphies en -è des formes interrogatives de la première personne du singulier [Réforme 1990]
— Environ 460 nouvelles entrées
4.9 // 21 janvier 2013
— Environ 560 nouvelles entrées
— Nouvelles directives ICONV pour les ligatures (ffi ffl ff fi fl) et l’apostrophe typographique
— Nouvelles directives BREAK ^' ^‘ '$ ’$
— Ajout des caractères '1234567890 dans WORDCHARS
— Corrections diverses
4.8 // 17 novembre 2012
— Environ 460 nouvelles entrées
— Corrections diverses
— Modification des règles de suggestion (fusion des lignes MAP)
4.7 // 7 octobre 2012
— [LO/OO] Extension multi-dictionnaires : fusion des 4 extensions en une seule
4.6 // 2 septembre 2012
— NOUVELLE LICENCE : MPL v2.0 uniquement
— Correction du bug sur les mots comme «L’Institut» ([MAJ]’[MAJ])
— Environ 600 nouvelles entrées
4.5 // 13 mai 2012
— Environ 1300 nouvelles entrées
— Corrections diverses
4.4.1 // 28 décembre 2011
— Environ 1500 nouvelles entrées
— Corrections diverses
4.3 // 27 septembre 2011
— Environ 1250 nouvelles entrées
— Corrections diverses
4.2.5 // 17 août 2011
(Snapshot pour compabilité des extensions avec Thunderbird 6)
4.2.1 // 25 juillet 2011
(Snapshot pour LibreOffice 3.4.3)
4.2 // 4 juillet 2011
— Environ 1100 nouvelles entrées
— Restructuration de l’étiquetage grammatical (aucune morphologie implicite ; étiquette /sg/)
— Corrections diverses
— Le point est dorénavant considéré comme un séparateur de mots
4.1 // 15 avril 2011
— Environ 1100 nouvelles entrées
— Corrections diverses
— Modifications de l’étiquetage grammatical (nouvelle étiquette /epi/)
4.0 // 9 janvier 2011
— ÉTIQUETAGE GRAMMATICAL (99%), inclus dans les dictionnaires finaux
— Normalisation de l’étiquetage grammatical
— Environ 2000 nouvelles entrées
— Corrections diverses
3.9.5
(Snapshot pour Firefox 4)
— Le dictionnaire «Classique» est dorénavant une extension du «Moderne»
3.8 // 1er août 2010
— Environ 950 nouvelles entrées
— Corrections diverses
— Étiquetage grammatical (97%)
3.7 // 2 mai 2010
— Normalisation de l’unicode avec Hunspell (merci à Philip Burgess)
— Suggestions des formes correctes avec l’apostrophe typographique
— Environ 1360 nouvelles entrées
— Corrections diverses
— Nouvelle répartition de certaines graphies dans les dictionnaires
Classique / Réforme / Moderne (travail toujours en cours)
— Première version stable du dictionnaire «Moderne»
3.6
(Snapshot pour OpenOffice.org 3.2)
3.5 // 25 janvier 2010
— Environ 1460 nouvelles entrées
— Corrections diverses
— Version bêta du dictionnaire «Moderne»
3.4.5
(Snapshot pour Firefox 3.6)
3.4.1 // 14 septembre 2009
— Correction d’un bug dans le fichier des affixes
— Revue des mots modifiés par la réforme de 1990
— Environ 700 nouvelles entrées
— Corrections d’erreurs dans le fichier des affixes
— Corrections diverses
3.3
(Snapshot pour Firefox 3.5)
3.2 // 16 avril 2009
— Corrections d’erreurs dans le fichier des affixes
— Environ 550 nouvelles entrées
— Corrections diverses
3.1 // 24 janvier 2009
— Corrections d’erreurs dans le fichier des affixes
— Environ 630 nouvelles entrées
— Corrections diverses
3.0 // 2 novembre 2008
(Un an de travail.)
— RÉÉCRITURE COMPLÈTE DU SYSTÈME D’AFFIXATION (incompatible avec Myspell)
— RÉORGANISATION COMPLÈTE DU DICTIONNAIRE (60172 entrées)
— Amélioration de la suggestion des graphies correctes
— Nouvelle liste de verbes (7000)
— Épuration de nombreuses entrées
— ÉTIQUETAGE GRAMMATICAL (à 82%), non inclus dans les dictionnaires finaux
— Début de l’étiquetage lexical
***
*** DICTIONNAIRES POUR MYSPELL (Dicollecte) ***
***
2.x // 2007–2008
Les versions 2.x ne sont que des images des versions 1.x pour Hunspell.
1.1 // novembre 2007
Version de Dicollecte.
Reprend en partie les modifications du dictionnaire de Vazkor.
_______________________________________________________________________________
JOURNAL DES MODIFICATIONS AVANT DICOLLECTE
_______________________________________________________________________________
***
*** DICTIONNAIRES POUR MYSPELL ***
***
1.? // juillet 2007
Dictionnaire de Vazkor (orthographe classique) : http://perso.latribu.com/rocky2/
(élaboré à partir du dictionnaire 1.0.1)
Avec l’autorisation de Christophe Pythoud, le dictionnaire passe sous les licences MPL/LGPL/GPL.
— Épuration du fichier des affixes
— Des milliers d’ajouts et de corrections
— Des milliers de suppressions (redondances ou mots jugés trop rares)
1.? // 2005–2006
Dictionnaire avec orthographe réformée, par Mat. Schopfer (nom incertain, tiré d’une adresse mail)
(élaboré à partir du dictionnaire 1.0.1)
— Restructuration du fichier des affixes, suppression des paramètres inutilisés, suppression des paramètres utiles à un seul verbes
— Ajouts de nombreux noms propres et de néologismes
— Correction des pluriels de quelques mots en -al (naval, banal ...)
— Correction de la 2e personne du pluriel de l'indicatif des verbes dérivés de dire (prédire, dédire, médire ...)
— Regroupement des verbes avec leurs dérivés à préfixes commençant par une consonne (contre-, dé-, ré-, pré-, sur-)
1.0.1 // (Date inconnue)
(Auteur inconnu)
— Regroupement des mots équivalents, Myspell n’étant pas capable de tenir compte des lemmes doublons
1.0 // 12 février 2002
Conversion du dictionnaire pour Ispell de Christophe Pythoud, par « Jojolapin ».
http://linuxfr.org/news/dico-fran%C3%A7ais-pour-openofficeorg
http://jjlapin.free.fr/dico/
***
*** DICTIONNAIRE POUR ISPELL ***
***
1.0 // 1998
Dictionnaire "Français-Gutenberg" version 1.0, développé pour Ispell par Christophe Pythoud et l'Association Gutenberg, publié sous licence GPL.
|
Added gc_lang/fr/dictionnaire/orthographe/dictionaries.update.xml version [e875997a63].
> > > > > > > > | 1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/update/2006" xmlns:xlink="http://www.w3.org/1999/xlink">
<identifier value="org.openoffice.comp.pyuno.lightproof.oxt.grammalecte"/>
<version value="4.11" />
<update-download>
<src xlink:href="http://extensions.libreoffice.org/extension-center/dictionnaires-francais/releases/4.11/lo-oo-ressources-linguistiques-fr-v4-11.oxt" />
</update-download>
</description>
|
Added gc_lang/fr/dictionnaire/pfx_sfx.py version [c6ef35c8c9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
#!python3
grec = [
"aéro",
"agogie$",
"agogue$",
"algie$",
"^allo",
"andro",
"angio",
"anthropo?",
"^anti",
"amphi",
"^ana",
"^apo",
"archéo",
"archie$",
"arque$",
"arthro",
"astr(?:ono?m?|)",
"^auto",
"^an?",
"bary",
"biblio",
"bio",
"brachy",
"canc[eé]ro?",
"carcino?",
"cardio?",
"^cata",
"céphalo?",
"chiro?",
"chro[mn]o?",
"ciné(?:ma|t|)",
"^col",
"cosm[oi]",
"crati?e",
"crypto?",
"cyano?",
"cycl[oe]",
"cyto",
"dactylo?",
"déca",
"démo",
"dermo?",
"dia",
"didact",
"^di"
"doxe?",
"drome$"
"dynamo?",
"dys",
"ecto",
"èdre$",
"électro?n?",
"^en",
"endo",
"^épi",
"esse$",
"étymo?",
"^eu",
"exo",
"galacto?",
"gasté?ro?",
"gène$",
"gén[éèi]",
"géo",
"gl[uy]co?",
"gnos[eit]",
"gone$",
"gramm[ae]",
"grapho?",
"gynéco",
"gyno",
"hecto",
"hélio",
"hémato",
"hémo",
"hétéro",
"hippo",
"holo",
"homéo",
"hémi",
"homo",
"horo",
"hydr[oa]",
"hyper",
"hypo",
"hypno",
"icono?",
"idol(?:âtr|)",
"ique$",
"is[mt]e$",
"iser$",
"iso",
"ite$",
"kilo",
"kiné[st]?",
"leuc[oé]",
"lithe$",
"litho?",
"logie$",
"logique$",
"logo",
"logue$",
"lyse$",
"macro",
"mani?e",
"méga(?:lo|)",
"mélano",
"méso",
"méta",
"métro",
"mètre$",
"micro",
"miso",
"mono",
"morpho?",
"myo",
"myria",
"mytho?",
"nécro",
"néo",
"neuro",
"nomi?e$", "nomique$",
"nyct",
"oligo",
"onom",
"onym[eai]",
"ope$",
"ophtalmo?",
"ornitho",
"ortho",
"^oto",
"ose$",
"oto",
"oxy",
"paléo",
"^pan",
"para",
"patho",
"pédo",
"penta",
"péri",
"phago",
"phage$",
"phane$",
"phanéro",
"philo?", "phile$",
"phobi?e$",
"phone$",
"phono?",
"phore$",
"photo",
"phylo",
"phys(?:io|)",
"phyto?",
"pneumo?",
"podo",
"pole$",
"^poli",
"poly",
"potam",
"probl[éè]m",
"proph[éè]t",
"psych[oé]?",
"ptéro",
"pyro",
"rhéo?",
"rhino"
"rhizo",
"rythm",
"scope$",
"scop",
"séma",
"sémio",
"sé?ismo?",
"sophi?",
"stas[ei]",
"syn",
"techno?",
"t[ée]tra",
"thé[eo]",
"thérap",
"théâtr",
"télé",
"thalasso",
"théo",
"thèque$",
"thérap(?:eu|)",
"thèse$",
"tomie$",
"topo",
"^tri",
"trope$",
"thophie$",
"vaso",
"xéno",
"xylo",
"zoo"
]
latin = [
"^ab",
"able$",
"acée$",
"agro",
"ance$",
"^anté",
"^aqu",
"ation$",
"atoire$",
"^auri",
"^avi",
"^bis?",
"calor",
"carni",
"centi",
"circum",
"^cis",
"^com",
"^con",
"^co",
"déci",
"digit",
"ée$",
"éenne$",
"elle$",
"équi",
"extra",
"^ex",
"fère$"
"homo",
"i?aire$",
"ible$",
"inter",
"intra",
"intro",
"^in",
"ir$",
"ité$",
"itude$",
"juxta",
"lacto?",
"latéro?",
"mamm",
"ment$",
"milli?",
"mobile?",
"multi",
"naut",
"oléo",
"omni",
"onne$",
"otte$",
"ovo",
"patr[oi]",
"péné",
"^per",
"pétro",
"pisci",
"^pré",
"^pro",
"quadri",
"quinqu",
"radio",
"rétro",
"^ré",
"recti?",
"semi",
"^sub",
"super",
"supra",
"tion$",
"trans",
"^tri",
"ude$",
"ule$",
"ultra",
"^uni",
"ure$",
"vore$",
]
|
Added gc_lang/fr/dictionnaire/thesaurus/README_thes_fr.txt version [952166381e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
_______________________________________________________________________________
Dictionnaire des synonymes français myThes
version 2.3
Par Frédéric Labbé
Pour les mises à jour, allez sur Dicollecte :
http://www.dicollecte.org/home.php?prj=fr
Licence:
LGPL : GNU Lesser General Public License
version 2.1 ou supérieure -- http://www.gnu.org/licenses/lgpl-2.1.html
_______________________________________________________________________________
Ce dictionnaire des synonymes est encore en cours d'élaboration.
Actuellement, seules les graphies précédant la réforme de l'orthographe
de 1990 sont reconnues.
_______________________________________________________________________________
Historique
_______________________________________________________________________________
* myThes est le format de thesaurus de OOo à partir de la version 2.0
developpé par Kevin Hendricks sur la base des travaux de l'université de
Priceton: http://lingucomponent.openoffice.org/thesaurus.html
Cette version est incompatible avec le format binaire utilisé pour les
versions 1.x d'OpenOffice.org.
* La conception du thesaurus dans le format 1.0 a été initiée par Frederic Labbé.
* La version 2 a été transformée par la société Indesko.
Laurent Godard (lgodard@indesko.com)
Les catégories grammaticales des mots ont été complétées sur la base de
InDico, dictionnaire taggué developpé par InDesko et issu de la
transformation des listes de l'abu (http://abu.cnam.fr/)
* La version 2.1 n'apporte que la reconnaissance des mots avec ligatures.
Ce thesaurus a été découvert ici :
http://user.services.openoffice.org/fr/forum/viewtopic.php?p=15783#15783
* La version 2.2 est générée à partir de la base de données de Dicollecte.
Pour l'instant, seules quelques modifications ont été faites.
* Version 2.3 : nettoyage des entrées erronées.
_______________________________________________________________________________
|
Added gc_lang/fr/dictionnaire/thesaurus/create_idx.py version [570f17f6e9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import re
import codecs
def help ():
print ""
print "Syntax:"
print "thes_convert.py filename"
def indexCreation (thfilename):
# This method is a modified Python transcription of a Perl script (th_gen_idx.pl)
# made by Kevin B. Hendricks (see MyThes-1.0)
"""
/*
* Copyright 2003 Kevin B. Hendricks, Stratford, Ontario, Canada
* And Contributors. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. All modifications to the source code must be clearly marked as
* such. Binary redistributions based on modified source code
* must be clearly marked as modified versions in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
"""
print("Creating the index file for the thesaurus ...")
# we read the thesaurus
entries = []
pattern = re.compile('^[^|]+\|[1-9][0-9]*$')
sourcefile = open(thfilename, 'r')
encodingline = sourcefile.readline() # encoding
fileOffset = len(encodingline)
line = sourcefile.readline()
i = 2
while line != "" :
while not re.search(pattern, line) :
try:
print(u"## Error at line %d. This line is not a new entry:\n%s" % (i, line))
except:
print(u"## Error at line %d. This line is not a new entry." % i)
line = sourcefile.readline()
i = i + 1
offset = len(line)
line = line.rstrip()
entry, nbclass = line.split('|')
nbcl = int(nbclass)
for k in range(nbcl) :
line = sourcefile.readline()
offset = offset + len(line)
i = i + 1
entries.append((entry, fileOffset))
fileOffset = fileOffset + offset
line = sourcefile.readline()
i = i + 1
sourcefile.close()
# we create the index
entries.sort(elemsort)
idxfilenames = thfilename.rsplit('.', 1)
idxfilename = idxfilenames[0] + ".idx"
destfile = open(idxfilename, 'w')
destfile.write(encodingline)
destfile.write("%d\n" % len(entries))
for entry in entries :
destfile.write("%s|%d\n" % (entry[0], entry[1]))
destfile.close()
print("Done.")
def main ():
if len(sys.argv) != 2:
help()
return False
indexCreation(sys.argv[1])
if __name__ == "__main__" :
main()
|
Added gc_lang/fr/dictionnaire/thesaurus/thes_fr.dat version [8e7389c84b].
more than 10,000 changes
Added gc_lang/fr/dictionnaire/thesaurus/thes_fr.idx version [e141d55d12].
more than 10,000 changes
Added gc_lang/fr/logo.png version [e940da80d7].
cannot compute difference between binary files
Added gc_lang/fr/mg.odt version [21fb482d0e].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/conj.js version [1c45293d0f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 |
// Grammalecte - Conjugueur
// License: GPL 3
"use strict";
${map}
let helpers = null; // module not loaded in Firefox content script
let _oData = {};
let _lVtyp = null;
let _lTags = null;
let _dPatternConj = {};
let _dVerb = {};
if (typeof(exports) !== 'undefined') {
// used within Grammalecte library
helpers = require("resource://grammalecte/helpers.js");
_oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/conj_data.json"));
_lVtyp = _oData.lVtyp;
_lTags = _oData.lTags;
_dPatternConj = _oData.dPatternConj;
_dVerb = _oData.dVerb;
} else {
// used within Firefox content script (conjugation panel).
// can’t load JSON from here, so we do it in ui.js and send it here.
self.port.on("provideConjData", function (sData) {
_oData = JSON.parse(sData);
_lVtyp = _oData.lVtyp;
_lTags = _oData.lTags;
_dPatternConj = _oData.dPatternConj;
_dVerb = _oData.dVerb;
});
}
const _zStartVoy = new RegExp("^[aeéiouœê]");
const _zNeedTeuph = new RegExp("[tdc]$");
const _dProSuj = new Map ([ [":1s", "je"], [":1ś", "je"], [":2s", "tu"], [":3s", "il"], [":1p", "nous"], [":2p", "vous"], [":3p", "ils"] ]);
const _dProObj = new Map ([ [":1s", "me "], [":1ś", "me "], [":2s", "te "], [":3s", "se "], [":1p", "nous "], [":2p", "vous "], [":3p", "se "] ]);
const _dProObjEl = new Map ([ [":1s", "m’"], [":1ś", "m’"], [":2s", "t’"], [":3s", "s’"], [":1p", "nous "], [":2p", "vous "], [":3p", "s’"] ]);
const _dImpePro = new Map ([ [":2s", "-toi"], [":1p", "-nous"], [":2p", "-vous"] ]);
const _dImpeProNeg = new Map ([ [":2s", "ne te "], [":1p", "ne nous "], [":2p", "ne vous "] ]);
const _dImpeProEn = new Map ([ [":2s", "-t’en"], [":1p", "-nous-en"], [":2p", "-vous-en"] ]);
const _dImpeProNegEn = new Map ([ [":2s", "ne t’en "], [":1p", "ne nous en "], [":2p", "ne vous en "] ]);
const _dGroup = new Map ([ ["0", "auxiliaire"], ["1", "1ᵉʳ groupe"], ["2", "2ᵉ groupe"], ["3", "3ᵉ groupe"] ]);
const _dTenseIdx = new Map ([ [":PQ", 0], [":Ip", 1], [":Iq", 2], [":Is", 3], [":If", 4], [":K", 5], [":Sp", 6], [":Sq", 7], [":E", 8] ]);
function isVerb (sVerb) {
return _dVerb.hasOwnProperty(sVerb);
}
function getConj (sVerb, sTense, sWho) {
// returns conjugation (can be an empty string)
if (!_dVerb.hasOwnProperty(sVerb)) {
return null;
}
if (!_dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]].hasOwnProperty(sWho)) {
return "";
}
return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]][sWho]);
}
function hasConj (sVerb, sTense, sWho) {
// returns false if no conjugation (also if empty) else true
if (!_dVerb.hasOwnProperty(sVerb)) {
return false;
}
if (_dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]].hasOwnProperty(sWho)
&& _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]][sWho]) {
return true;
}
return false;
}
function getVtyp (sVerb) {
// returns raw informations about sVerb
if (!_dVerb.hasOwnProperty(sVerb)) {
return null;
}
return _lVtyp[_dVerb[sVerb][0]];
}
function getSimil (sWord, sMorph) {
if (!sMorph.includes(":V")) {
return new Set();
}
let sInfi = sMorph.slice(1, sMorph.indexOf(" "));
let tTags = _getTags(sInfi);
let aSugg = new Set();
if (sMorph.includes(":Q")) {
// we suggest conjugated forms
if (sMorph.includes(":V1")) {
aSugg.add(sInfi);
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":2p"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":1s"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3s"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3p"));
} else if (sMorph.includes(":V2")) {
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"));
} else if (sMorph.includes(":V3")) {
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":1s"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":3s"));
} else if (isMorph.includes(":V0a")) {
aSugg.add("eus");
aSugg.add("eut");
} else {
aSugg.add("étais");
aSugg.add("était");
}
aSugg.delete("");
} else {
// we suggest past participles
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q1"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q2"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q3"));
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q4"));
aSugg.delete("");
// if there is only one past participle (epi inv), unreliable.
if (aSugg.size === 1) {
aSugg.clear();
}
}
return aSugg;
}
function _getTags (sVerb) {
// returns tuple of tags (usable with functions _getConjWithTags and _hasConjWithTags)
if (!_dVerb.hasOwnProperty(sVerb)) {
return null;
}
return _lTags[_dVerb[sVerb][1]];
}
function _getConjWithTags (sVerb, tTags, sTense, sWho) {
// returns conjugation (can be an empty string)
if (!_dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]].hasOwnProperty(sWho)) {
return "";
}
return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]][sWho]);
}
function _hasConjWithTags (tTags, sTense, sWho) {
// returns false if no conjugation (also if empty) else true
if (_dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]].hasOwnProperty(sWho)
&& _dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]][sWho]) {
return true;
}
return false;
}
function _modifyStringWithSuffixCode (sWord, sSfx) {
// returns sWord modified by sSfx
if (sSfx === "") {
return "";
}
if (sSfx === "0") {
return sWord;
}
try {
if (sSfx[0] !== '0') {
return sWord.slice(0, -(sSfx.charCodeAt(0)-48)) + sSfx.slice(1); // 48 is the ASCII code for "0"
} else {
return sWord + sSfx.slice(1);
}
}
catch (e) {
console.log(e);
return "## erreur, code : " + sSfx + " ##";
}
}
class Verb {
constructor (sVerb) {
if (typeof sVerb !== "string" || sVerb === "") {
throw new TypeError ("The value should be a non-empty string");
}
this.sVerb = sVerb;
this.sVerbAux = "";
this._sRawInfo = getVtyp(this.sVerb);
this.sInfo = this._readableInfo(this._sRawInfo);
this._tTags = _getTags(sVerb);
this._tTagsAux = _getTags(this.sVerbAux);
this.bProWithEn = (this._sRawInfo[5] === "e");
this.dConj = new Map ([
[":Y", new Map ([
["label", "Infinitif"],
[":Y", sVerb]
])],
[":PQ", new Map ([
["label", "Participes passés et présent"],
[":Q1", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q1")],
[":Q2", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q2")],
[":Q3", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q3")],
[":Q4", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q4")],
[":P", _getConjWithTags(sVerb, this._tTags, ":PQ", ":P")]
])],
[":Ip", new Map ([
["label", "Présent"],
[":1s", _getConjWithTags(sVerb, this._tTags, ":Ip", ":1s")],
[":1ś", _getConjWithTags(sVerb, this._tTags, ":Ip", ":1ś")],
[":2s", _getConjWithTags(sVerb, this._tTags, ":Ip", ":2s")],
[":3s", _getConjWithTags(sVerb, this._tTags, ":Ip", ":3s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":Ip", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":Ip", ":2p")],
[":3p", _getConjWithTags(sVerb, this._tTags, ":Ip", ":3p")]
])],
[":Iq", new Map ([
["label", "Imparfait"],
[":1s", _getConjWithTags(sVerb, this._tTags, ":Iq", ":1s")],
[":2s", _getConjWithTags(sVerb, this._tTags, ":Iq", ":2s")],
[":3s", _getConjWithTags(sVerb, this._tTags, ":Iq", ":3s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":Iq", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":Iq", ":2p")],
[":3p", _getConjWithTags(sVerb, this._tTags, ":Iq", ":3p")]
])],
[":Is", new Map ([
["label", "Passé simple"],
[":1s", _getConjWithTags(sVerb, this._tTags, ":Is", ":1s")],
[":2s", _getConjWithTags(sVerb, this._tTags, ":Is", ":2s")],
[":3s", _getConjWithTags(sVerb, this._tTags, ":Is", ":3s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":Is", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":Is", ":2p")],
[":3p", _getConjWithTags(sVerb, this._tTags, ":Is", ":3p")]
])],
[":If", new Map ([
["label", "Futur"],
[":1s", _getConjWithTags(sVerb, this._tTags, ":If", ":1s")],
[":2s", _getConjWithTags(sVerb, this._tTags, ":If", ":2s")],
[":3s", _getConjWithTags(sVerb, this._tTags, ":If", ":3s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":If", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":If", ":2p")],
[":3p", _getConjWithTags(sVerb, this._tTags, ":If", ":3p")]
])],
[":Sp", new Map ([
["label", "Présent subjonctif"],
[":1s", _getConjWithTags(sVerb, this._tTags, ":Sp", ":1s")],
[":1ś", _getConjWithTags(sVerb, this._tTags, ":Sp", ":1ś")],
[":2s", _getConjWithTags(sVerb, this._tTags, ":Sp", ":2s")],
[":3s", _getConjWithTags(sVerb, this._tTags, ":Sp", ":3s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":Sp", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":Sp", ":2p")],
[":3p", _getConjWithTags(sVerb, this._tTags, ":Sp", ":3p")]
])],
[":Sq", new Map ([
["label", "Imparfait subjonctif"],
[":1s", _getConjWithTags(sVerb, this._tTags, ":Sq", ":1s")],
[":1ś", _getConjWithTags(sVerb, this._tTags, ":Sq", ":1ś")],
[":2s", _getConjWithTags(sVerb, this._tTags, ":Sq", ":2s")],
[":3s", _getConjWithTags(sVerb, this._tTags, ":Sq", ":3s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":Sq", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":Sq", ":2p")],
[":3p", _getConjWithTags(sVerb, this._tTags, ":Sq", ":3p")]
])],
[":K", new Map ([
["label", "Conditionnel"],
[":1s", _getConjWithTags(sVerb, this._tTags, ":K", ":1s")],
[":2s", _getConjWithTags(sVerb, this._tTags, ":K", ":2s")],
[":3s", _getConjWithTags(sVerb, this._tTags, ":K", ":3s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":K", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":K", ":2p")],
[":3p", _getConjWithTags(sVerb, this._tTags, ":K", ":3p")]
])],
[":E", new Map ([
["label", "Impératif"],
[":2s", _getConjWithTags(sVerb, this._tTags, ":E", ":2s")],
[":1p", _getConjWithTags(sVerb, this._tTags, ":E", ":1p")],
[":2p", _getConjWithTags(sVerb, this._tTags, ":E", ":2p")]
])]
]);
};
_readableInfo () {
// returns readable infos
this.sVerbAux = (this._sRawInfo.slice(7,8) == "e") ? "être" : "avoir";
let sGroup = _dGroup.get(this._sRawInfo[0]);
let s = "";
if (this._sRawInfo.slice(3,4) == "t") {
s = "transitif";
} else if (this._sRawInfo.slice(4,5) == "n") {
s = "transitif indirect";
} else if (this._sRawInfo.slice(2,3) == "i") {
s = "intransitif";
} else if (this._sRawInfo.slice(5,6) == "r") {
s = "pronominal réciproque";
} else if (this._sRawInfo.slice(5,6) == "p") {
s = "pronominal";
}
if (this._sRawInfo.slice(5,6) == "q" || this._sRawInfo.slice(5,6) == "e") {
s = s + " (+ usage pronominal)";
}
if (this._sRawInfo.slice(6,7) == "m") {
s = s + " impersonnel";
}
if (s === "") {
s = "# erreur - code : " + this._sRawInfo;
}
return sGroup + " · " + s;
};
infinitif (bPro, bNeg, bTpsCo, bInt, bFem) {
let sInfi;
if (bTpsCo) {
sInfi = (bPro) ? "être" : this.sVerbAux;
} else {
sInfi = this.sVerb;
}
if (bPro) {
if (this.bProWithEn) {
sInfi = "s’en " + sInfi;
} else {
sInfi = (_zStartVoy.test(sInfi)) ? "s’" + sInfi : "se " + sInfi;
}
}
if (bNeg) {
sInfi = "ne pas " + sInfi;
}
if (bTpsCo) {
sInfi += " " + this._seekPpas(bPro, bFem, (this._sRawInfo[5] == "r"));
}
if (bInt) {
sInfi += " … ?";
}
return sInfi;
};
participePasse (sWho) {
return this.dConj.get(":PQ").get(sWho);
};
participePresent (bPro, bNeg, bTpsCo, bInt, bFem) {
if (!this.dConj.get(":PQ").get(":P")) {
return "";
}
let s;
if (bTpsCo) {
s = (!bPro) ? _getConjWithTags(this.sVerbAux, this._tTagsAux, ":PQ", ":P") : getConj("être", ":PQ", ":P");
} else {
s = this.dConj.get(":PQ").get(":P");
}
if (s === "") {
return "";
}
let bEli = _zStartVoy.test(s);
if (bPro) {
if (this.bProWithEn) {
s = "s’en " + s;
} else {
s = (bEli) ? "s’" + s : "se " + s;
}
}
if (bNeg) {
s = (bEli && !bPro) ? "n’" + s + " pas" : "ne " + s + " pas";
}
if (bTpsCo) {
s += " " + this._seekPpas(bPro, bFem, this._sRawInfo[5] == "r");
}
if (bInt) {
s += " … ?";
}
return s;
};
conjugue (sTemps, sWho, bPro, bNeg, bTpsCo, bInt, bFem) {
if (!this.dConj.get(sTemps).get(sWho)) {
return "";
}
let s;
if (!bTpsCo && bInt && sWho == ":1s" && this.dConj.get(sTemps)._get(":1ś", false)) {
sWho = ":1ś";
}
if (bTpsCo) {
s = (!bPro) ? _getConjWithTags(this.sVerbAux, this._tTagsAux, sTemps, sWho) : getConj("être", sTemps, sWho);
} else {
s = this.dConj.get(sTemps).get(sWho);
}
if (s === "") {
return "";
}
let bEli = _zStartVoy.test(s);
if (bPro) {
if (!this.bProWithEn) {
s = (bEli) ? _dProObjEl.get(sWho) + s : _dProObj.get(sWho) + s;
} else {
s = _dProObjEl.get(sWho) + "en " + s;
}
}
if (bNeg) {
s = (bEli && !bPro) ? "n’" + s : "ne " + s;
}
if (bInt) {
if (sWho == ":3s" && !_zNeedTeuph.test(s)) {
s += "-t";
}
s += "-" + this._getPronom(sWho, bFem);
} else {
if (sWho == ":1s" && bEli && !bNeg && !bPro) {
s = "j’" + s;
} else {
s = this._getPronom(sWho, bFem) + " " + s;
}
}
if (bNeg) {
s += " pas";
}
if (bTpsCo) {
s += " " + this._seekPpas(bPro, bFem, sWho.endsWith("p") || this._sRawInfo[5] == "r");
}
if (bInt) {
s += " … ?";
}
return s;
};
_getPronom (sWho, bFem) {
if (sWho == ":3s") {
if (this._sRawInfo[5] == "r") {
return "on";
} else if (bFem) {
return "elle";
}
} else if (sWho == ":3p" && bFem) {
return "elles";
}
return _dProSuj.get(sWho);
};
imperatif (sWho, bPro, bNeg, bTpsCo, bFem) {
if (!this.dConj.get(":E").get(sWho)) {
return "";
}
let s;
if (bTpsCo) {
s = (!bPro) ? _getConjWithTags(this.sVerbAux, this._tTagsAux, ":E", sWho) : getConj("être", ":E", sWho);
} else {
s = this.dConj.get(":E").get(sWho);
}
if (s === "") {
return "";
}
let bEli = _zStartVoy.test(s);
if (bNeg) {
if (bPro) {
if (!this.bProWithEn) {
s = (bEli && sWho == ":2s") ? "ne t’" + s + " pas" : _dImpeProNeg.get(sWho) + s + " pas";
} else {
s = _dImpeProNegEn.get(sWho) + s + " pas";
}
} else {
s = (bEli) ? "n’" + s + " pas" : "ne " + s + " pas";
}
} else if (bPro) {
s = (this.bProWithEn) ? s + _dImpeProEn.get(sWho) : s + _dImpePro.get(sWho);
}
if (bTpsCo) {
return s + " " + this._seekPpas(bPro, bFem, sWho.endsWith("p") || this._sRawInfo[5] == "r");
}
return s;
};
_seekPpas (bPro, bFem, bPlur) {
if (!bPro && this.sVerbAux == "avoir") {
return this.dConj.get(":PQ").get(":Q1");
}
if (!bFem) {
return (bPlur && this.dConj.get(":PQ").get(":Q2")) ? this.dConj.get(":PQ").get(":Q2") : this.dConj.get(":PQ").get(":Q1");
}
if (!bPlur) {
return (this.dConj.get(":PQ").get(":Q3")) ? this.dConj.get(":PQ").get(":Q3") : this.dConj.get(":PQ").get(":Q1");
}
return (this.dConj.get(":PQ").get(":Q4")) ? this.dConj.get(":PQ").get(":Q4") : this.dConj.get(":PQ").get(":Q1");
}
}
if (typeof(exports) !== 'undefined') {
// Used for Grammalecte library.
// In content scripts, these variable are directly reachable
exports.Verb = Verb;
exports.isVerb = isVerb;
exports.getConj = getConj;
exports.hasConj = hasConj;
exports.getVtyp = getVtyp;
exports.getSimil = getSimil;
exports._getTags = _getTags;
exports._hasConjWithTags = _hasConjWithTags;
exports._getConjWithTags = _getConjWithTags;
}
|
Added gc_lang/fr/modules-js/conj_data.json version [bf341c4d60].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/cregex.js version [eb814cc494].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
//// Grammalecte - Compiled regular expressions
///// Lemme
const zLemma = new RegExp("^>([a-zà-öø-ÿ0-9Ā-ʯ][a-zà-öø-ÿ0-9Ā-ʯ-]+)");
///// Masculin / féminin / singulier / pluriel
const zGender = new RegExp(":[mfe]");
const zNumber = new RegExp(":[spi]");
///// Nom et adjectif
const zNA = new RegExp(":[NA]");
//// nombre
const zNAs = new RegExp(":[NA].*:s");
const zNAp = new RegExp(":[NA].*:p");
const zNAi = new RegExp(":[NA].*:i");
const zNAsi = new RegExp(":[NA].*:[si]");
const zNApi = new RegExp(":[NA].*:[pi]");
//// genre
const zNAm = new RegExp(":[NA].*:m");
const zNAf = new RegExp(":[NA].*:f");
const zNAe = new RegExp(":[NA].*:e");
const zNAme = new RegExp(":[NA].*:[me]");
const zNAfe = new RegExp(":[NA].*:[fe]");
//// nombre et genre
// singuilier
const zNAms = new RegExp(":[NA].*:m.*:s");
const zNAfs = new RegExp(":[NA].*:f.*:s");
const zNAes = new RegExp(":[NA].*:e.*:s");
const zNAmes = new RegExp(":[NA].*:[me].*:s");
const zNAfes = new RegExp(":[NA].*:[fe].*:s");
// singulier et invariable
const zNAmsi = new RegExp(":[NA].*:m.*:[si]");
const zNAfsi = new RegExp(":[NA].*:f.*:[si]");
const zNAesi = new RegExp(":[NA].*:e.*:[si]");
const zNAmesi = new RegExp(":[NA].*:[me].*:[si]");
const zNAfesi = new RegExp(":[NA].*:[fe].*:[si]");
// pluriel
const zNAmp = new RegExp(":[NA].*:m.*:p");
const zNAfp = new RegExp(":[NA].*:f.*:p");
const zNAep = new RegExp(":[NA].*:e.*:p");
const zNAmep = new RegExp(":[NA].*:[me].*:p");
const zNAfep = new RegExp(":[NA].*:[me].*:p");
// pluriel et invariable
const zNAmpi = new RegExp(":[NA].*:m.*:[pi]");
const zNAfpi = new RegExp(":[NA].*:f.*:[pi]");
const zNAepi = new RegExp(":[NA].*:e.*:[pi]");
const zNAmepi = new RegExp(":[NA].*:[me].*:[pi]");
const zNAfepi = new RegExp(":[NA].*:[fe].*:[pi]");
//// Divers
const zAD = new RegExp(":[AB]");
///// Verbe
const zVconj = new RegExp(":[123][sp]");
const zVconj123 = new RegExp(":V[123].*:[123][sp]");
///// Nom | Adjectif | Verbe
const zNVconj = new RegExp(":(?:N|[123][sp])");
const zNAVconj = new RegExp(":(?:N|A|[123][sp])");
///// Spécifique
const zNnotA = new RegExp(":N(?!:A)");
const zPNnotA = new RegExp(":(?:N(?!:A)|Q)");
///// Noms propres
const zNP = new RegExp(":(?:M[12P]|T)");
const zNPm = new RegExp(":(?:M[12P]|T):m");
const zNPf = new RegExp(":(?:M[12P]|T):f");
const zNPe = new RegExp(":(?:M[12P]|T):e");
///// FONCTIONS
function getLemmaOfMorph (sMorph) {
return zLemma.exec(sMorph)[1];
}
function checkAgreement (l1, l2) {
// check number agreement
if (!mbInv(l1) && !mbInv(l2)) {
if (mbSg(l1) && !mbSg(l2)) {
return false;
}
if (mbPl(l1) && !mbPl(l2)) {
return false;
}
}
// check gender agreement
if (mbEpi(l1) || mbEpi(l2)) {
return true;
}
if (mbMas(l1) && !mbMas(l2)) {
return false;
}
if (mbFem(l1) && !mbFem(l2)) {
return false;
}
return true;
}
function checkConjVerb (lMorph, sReqConj) {
return lMorph.some(s => s.includes(sReqConj));
}
function getGender (lMorph) {
// returns gender of word (':m', ':f', ':e' or empty string).
let sGender = "";
for (let sMorph of lMorph) {
let m = zGender.exec(sMorph);
if (m) {
if (!sGender) {
sGender = m[0];
} else if (sGender != m[0]) {
return ":e";
}
}
}
return sGender;
}
function getNumber (lMorph) {
// returns number of word (':s', ':p', ':i' or empty string).
let sNumber = "";
for (let sMorph of lMorph) {
let m = zNumber.exec(sWord);
if (m) {
if (!sNumber) {
sNumber = m[0];
} else if (sNumber != m[0]) {
return ":i";
}
}
}
return sNumber;
}
// NOTE : isWhat (lMorph) returns true if lMorph contains nothing else than What
// mbWhat (lMorph) returns true if lMorph contains What at least once
//// isXXX = it’s certain
function isNom (lMorph) {
return lMorph.every(s => s.includes(":N"));
}
function isNomNotAdj (lMorph) {
return lMorph.every(s => zNnotA.test(s));
}
function isAdj (lMorph) {
return lMorph.every(s => s.includes(":A"));
}
function isNomAdj (lMorph) {
return lMorph.every(s => zNA.test(s));
}
function isNomVconj (lMorph) {
return lMorph.every(s => zNVconj.test(s));
}
function isInv (lMorph) {
return lMorph.every(s => s.includes(":i"));
}
function isSg (lMorph) {
return lMorph.every(s => s.includes(":s"));
}
function isPl (lMorph) {
return lMorph.every(s => s.includes(":p"));
}
function isEpi (lMorph) {
return lMorph.every(s => s.includes(":e"));
}
function isMas (lMorph) {
return lMorph.every(s => s.includes(":m"));
}
function isFem (lMorph) {
return lMorph.every(s => s.includes(":f"));
}
//// mbXXX = MAYBE XXX
function mbNom (lMorph) {
return lMorph.some(s => s.includes(":N"));
}
function mbAdj (lMorph) {
return lMorph.some(s => s.includes(":A"));
}
function mbAdjNb (lMorph) {
return lMorph.some(s => zAD.test(s));
}
function mbNomAdj (lMorph) {
return lMorph.some(s => zNA.test(s));
}
function mbNomNotAdj (lMorph) {
let b = false;
for (let s of lMorph) {
if (s.includes(":A")) {
return false;
}
if (s.includes(":N")) {
b = true;
}
}
return b;
}
function mbPpasNomNotAdj (lMorph) {
return lMorph.some(s => zPNnotA.test(s));
}
function mbVconj (lMorph) {
return lMorph.some(s => zVconj.test(s));
}
function mbVconj123 (lMorph) {
return lMorph.some(s => zVconj123.test(s));
}
function mbMG (lMorph) {
return lMorph.some(s => s.includes(":G"));
}
function mbInv (lMorph) {
return lMorph.some(s => s.includes(":i"));
}
function mbSg (lMorph) {
return lMorph.some(s => s.includes(":s"));
}
function mbPl (lMorph) {
return lMorph.some(s => s.includes(":p"));
}
function mbEpi (lMorph) {
return lMorph.some(s => s.includes(":e"));
}
function mbMas (lMorph) {
return lMorph.some(s => s.includes(":m"));
}
function mbFem (lMorph) {
return lMorph.some(s => s.includes(":f"));
}
function mbNpr (lMorph) {
return lMorph.some(s => zNP.test(s));
}
function mbNprMasNotFem (lMorph) {
if (lMorph.some(s => zNPf.test(s))) {
return false;
}
return lMorph.some(s => zNPm.test(s));
}
exports.getLemmaOfMorph = getLemmaOfMorph;
exports.checkAgreement = checkAgreement;
exports.checkConjVerb = checkConjVerb;
exports.getGender = getGender;
exports.getNumber = getNumber;
exports.isNom = isNom;
exports.isNomNotAdj = isNomNotAdj;
exports.isAdj = isAdj;
exports.isNomAdj = isNomAdj;
exports.isNomVconj = isNomVconj;
exports.isInv = isInv;
exports.isSg = isSg;
exports.isPl = isPl;
exports.isEpi = isEpi;
exports.isMas = isMas;
exports.isFem = isFem;
exports.mbNom = mbNom;
exports.mbAdj = mbAdj;
exports.mbAdjNb = mbAdjNb;
exports.mbNomAdj = mbNomAdj;
exports.mbNomNotAdj = mbNomNotAdj;
exports.mbPpasNomNotAdj = mbPpasNomNotAdj;
exports.mbVconj = mbVconj;
exports.mbVconj123 = mbVconj123;
exports.mbMG = mbMG;
exports.mbInv = mbInv;
exports.mbSg = mbSg;
exports.mbPl = mbPl;
exports.mbEpi = mbEpi;
exports.mbMas = mbMas;
exports.mbFem = mbFem;
exports.mbNpr = mbNpr;
exports.mbNprMasNotFem = mbNprMasNotFem;
|
Added gc_lang/fr/modules-js/gce_analyseur.js version [7588af7481].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
//// GRAMMAR CHECKING ENGINE PLUGIN: Parsing functions for French language
function rewriteSubject (s1, s2) {
// s1 is supposed to be prn/patr/npr (M[12P])
if (s2 == "lui") {
return "ils";
}
if (s2 == "moi") {
return "nous";
}
if (s2 == "toi") {
return "vous";
}
if (s2 == "nous") {
return "nous";
}
if (s2 == "vous") {
return "vous";
}
if (s2 == "eux") {
return "ils";
}
if (s2 == "elle" || s2 == "elles") {
// We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
if (cr.mbNprMasNotFem(_dAnalyses._get(s1, ""))) {
return "ils";
}
// si épicène, indéterminable, mais OSEF, le féminin l’emporte
return "elles";
}
return s1 + " et " + s2;
}
function apposition (sWord1, sWord2) {
// returns true if nom + nom (no agreement required)
// We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
return cr.mbNomNotAdj(_dAnalyses._get(sWord2, "")) && cr.mbPpasNomNotAdj(_dAnalyses._get(sWord1, ""));
}
function isAmbiguousNAV (sWord) {
// words which are nom|adj and verb are ambiguous (except être and avoir)
if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) {
return false;
}
if (!cr.mbNomAdj(_dAnalyses._get(sWord, "")) || sWord == "est") {
return false;
}
if (cr.mbVconj(_dAnalyses._get(sWord, "")) && !cr.mbMG(_dAnalyses._get(sWord, ""))) {
return true;
}
return false;
}
function isAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj) {
//// use it if sWord1 won’t be a verb; word2 is assumed to be true via isAmbiguousNAV
// We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let a2 = _dAnalyses._get(sWord2, null);
if (!a2 || a2.length === 0) {
return false;
}
if (cr.checkConjVerb(a2, sReqMorphConj)) {
// verb word2 is ok
return false;
}
let a1 = _dAnalyses._get(sWord1, null);
if (!a1 || a1.length === 0) {
return false;
}
if (cr.checkAgreement(a1, a2) && (cr.mbAdj(a2) || cr.mbAdj(a1))) {
return false;
}
return true;
}
function isVeryAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj, bLastHopeCond) {
//// use it if sWord1 can be also a verb; word2 is assumed to be true via isAmbiguousNAV
// We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let a2 = _dAnalyses._get(sWord2, null)
if (!a2 || a2.length === 0) {
return false;
}
if (cr.checkConjVerb(a2, sReqMorphConj)) {
// verb word2 is ok
return false;
}
let a1 = _dAnalyses._get(sWord1, null);
if (!a1 || a1.length === 0) {
return false;
}
if (cr.checkAgreement(a1, a2) && (cr.mbAdj(a2) || cr.mbAdjNb(a1))) {
return false;
}
// now, we know there no agreement, and conjugation is also wrong
if (cr.isNomAdj(a1)) {
return true;
}
//if cr.isNomAdjVerb(a1): # considered true
if (bLastHopeCond) {
return true;
}
return false;
}
function checkAgreement (sWord1, sWord2) {
// We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let a2 = _dAnalyses._get(sWord2, null)
if (!a2 || a2.length === 0) {
return true;
}
let a1 = _dAnalyses._get(sWord1, null);
if (!a1 || a1.length === 0) {
return true;
}
return cr.checkAgreement(a1, a2);
}
function mbUnit (s) {
if (/[µ\/⁰¹²³⁴⁵⁶⁷⁸⁹Ωℓ·]/.test(s)) {
return true;
}
if (s.length > 1 && s.length < 16 && s.slice(0, 1)._isLowerCase() && (!s.slice(1)._isLowerCase() || /[0-9]/.test(s))) {
return true;
}
return false;
}
//// Syntagmes
const _zEndOfNG1 = new RegExp ("^ *$|^ +(?:, +|)(?:n(?:’|e |o(?:u?s|tre) )|l(?:’|e(?:urs?|s|) |a )|j(?:’|e )|m(?:’|es? |a |on )|t(?:’|es? |a |u )|s(?:’|es? |a )|c(?:’|e(?:t|tte|s|) )|ç(?:a |’)|ils? |vo(?:u?s|tre) )");
const _zEndOfNG2 = new RegExp ("^ +([a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ][a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ-]+)");
const _zEndOfNG3 = new RegExp ("^ *, +([a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ][a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ-]+)");
function isEndOfNG (dDA, s, iOffset) {
if (_zEndOfNG1.test(s)) {
return true;
}
let m = _zEndOfNG2._exec2(s, ["$"]);
if (m && morphex(dDA, [iOffset+m.start[1], m[1]], ":[VR]", ":[NAQP]")) {
return true;
}
m = _zEndOfNG3._exec2(s, ["$"]);
if (m && !morph(dDA, [iOffset+m.start[1], m[1]], ":[NA]", false)) {
return true;
}
return false;
}
const _zNextIsNotCOD1 = new RegExp ("^ *,");
const _zNextIsNotCOD2 = new RegExp ("^ +(?:[mtsnj](e +|’)|[nv]ous |tu |ils? |elles? )");
const _zNextIsNotCOD3 = new RegExp ("^ +([a-zéèî][a-zà-öA-Zø-ÿÀ-ÖØ-ßĀ-ʯ-]+)");
function isNextNotCOD (dDA, s, iOffset) {
if (_zNextIsNotCOD1.test(s) || _zNextIsNotCOD2.test(s)) {
return true;
}
let m = _zNextIsNotCOD3._exec2(s, ["$"]);
if (m && morphex(dDA, [iOffset+m.start[1], m[1]], ":[123][sp]", ":[DM]")) {
return true;
}
return false;
}
const _zNextIsVerb1 = new RegExp ("^ +[nmts](?:e |’)");
const _zNextIsVerb2 = new RegExp ("^ +([a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ][a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ-]+)");
function isNextVerb (dDA, s, iOffset) {
if (_zNextIsVerb1.test(s)) {
return true;
}
let m = _zNextIsVerb2._exec2(s, ["$"]);
if (m && morph(dDA, [iOffset+m.start[1], m[1]], ":[123][sp]", false)) {
return true;
}
return false;
}
//// Exceptions
const aREGULARPLURAL = new Set(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café",
"carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille",
"jonquille", "marron", "olive", "pervenche", "prune", "sable"]);
const aSHOULDBEVERB = new Set(["aller", "manger"]);
|
Added gc_lang/fr/modules-js/gce_date_verif.js version [de4d3b5e04].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
//// GRAMMAR CHECKING ENGINE PLUGIN
// Check date validity
// WARNING: when creating a Date, month must be between 0 and 11
const _lDay = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"];
const _dMonth = new Map ([
["janvier", 1], ["février", 2], ["mars", 3], ["avril", 4], ["mai", 5], ["juin", 6], ["juillet", 7],
["août", 8], ["aout", 8], ["septembre", 9], ["octobre", 10], ["novembre", 11], ["décembre", 12]
]);
const _dDaysInMonth = new Map ([
[1, 31], [2, 28], [3, 31], [4, 30], [5, 31], [6, 30], [7, 31],
[8, 31], [8, 31], [9, 30], [10, 31], [11, 30], [12, 31]
]);
function _checkDate (nDay, nMonth, nYear) {
// returns true or false
if (nMonth > 12 || nMonth < 1 || nDay > 31 || nDay < 1) {
return false;
}
if (nDay <= _dDaysInMonth.get(nMonth)) {
return true;
}
if (nDay === 29) {
// leap years, http://jsperf.com/ily/15
return !(nYear & 3 || !(nYear % 25) && nYear & 15);
}
return false;
}
function checkDate (sDay, sMonth, sYear) {
// to use if sMonth is a number
return _checkDate(parseInt(sDay, 10), parseInt(sMonth, 10), parseInt(sYear, 10));
}
function checkDateWithString (sDay, sMonth, sYear) {
// to use if sMonth is a noun
return _checkDate(parseInt(sDay, 10), _dMonth.get(sMonth.toLowerCase()), parseInt(sYear, 10));
}
function checkDay (sWeekday, sDay, sMonth, sYear) {
// to use if sMonth is a number
if (checkDate(sDay, sMonth, sYear)) {
let oDate = new Date(parseInt(sYear, 10), parseInt(sMonth, 10)-1, parseInt(sDay, 10));
if (_lDay[oDate.getDay()] != sWeekday.toLowerCase()) {
return false;
}
return true;
}
return false;
}
function checkDayWithString (sWeekday, sDay, sMonth, sYear) {
// to use if sMonth is a noun
if (checkDateWithString(sDay, sMonth, sYear)) {
let oDate = new Date(parseInt(sYear, 10), _dMonth.get(sMonth.toLowerCase())-1, parseInt(sDay, 10));
if (_lDay[oDate.getDay()] != sWeekday.toLowerCase()) {
return false;
}
return true;
}
return false;
}
function getDay (sDay, sMonth, sYear) {
// to use if sMonth is a number
let oDate = new Date(parseInt(sYear, 10), parseInt(sMonth, 10)-1, parseInt(sDay, 10));
return _lDay[oDate.getDay()];
}
function getDayWithString (sDay, sMonth, sYear) {
// to use if sMonth is a noun
let oDate = new Date(parseInt(sYear, 10), _dMonth.get(sMonth.toLowerCase())-1, parseInt(sDay, 10));
return _lDay[oDate.getDay()];
}
|
Added gc_lang/fr/modules-js/gce_suggestions.js version [66a9ce5ee4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 |
//// GRAMMAR CHECKING ENGINE PLUGIN: Suggestion mechanisms
const conj = require("resource://grammalecte/fr/conj.js");
const mfsp = require("resource://grammalecte/fr/mfsp.js");
const phonet = require("resource://grammalecte/fr/phonet.js");
//// verbs
function suggVerb (sFlex, sWho, funcSugg2=null) {
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let aSugg = new Set();
for (let sStem of stem(sFlex)) {
let tTags = conj._getTags(sStem);
if (tTags) {
// we get the tense
let aTense = new Set();
for (let sMorph of _dAnalyses._get(sFlex, [])) {
let m;
let zVerb = new RegExp (sStem+" .*?(:(?:Y|I[pqsf]|S[pq]|K))", "g");
while (m = zVerb.exec(sMorph)) {
// stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer)
if (m) {
if (m[1] === ":Y") {
aTense.add(":Ip");
aTense.add(":Iq");
aTense.add(":Is");
} else if (m[1] === ":P") {
aTense.add(":Ip");
} else {
aTense.add(m[1]);
}
}
}
}
for (let sTense of aTense) {
if (sWho === ":1ś" && !conj._hasConjWithTags(tTags, sTense, ":1ś")) {
sWho = ":1s";
}
if (conj._hasConjWithTags(tTags, sTense, sWho)) {
aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho));
}
}
}
}
if (funcSugg2) {
let aSugg2 = funcSugg2(sFlex);
if (aSugg2.size > 0) {
aSugg.add(aSugg2);
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggVerbPpas (sFlex, sWhat=null) {
let aSugg = new Set();
for (let sStem of stem(sFlex)) {
let tTags = conj._getTags(sStem);
if (tTags) {
if (!sWhat) {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"));
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"));
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"));
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"));
aSugg.delete("");
} else if (sWhat === ":m:s") {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"));
} else if (sWhat === ":m:p") {
if (conj._hasConjWithTags(tTags, ":PQ", ":Q2")) {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"));
} else {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"));
}
} else if (sWhat === ":f:s") {
if (conj._hasConjWithTags(tTags, ":PQ", ":Q3")) {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"));
} else {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"));
}
} else if (sWhat === ":f:p") {
if (conj._hasConjWithTags(tTags, ":PQ", ":Q4")) {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"));
} else {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"));
}
} else if (sWhat === ":s") {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"));
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"));
aSugg.delete("");
} else if (sWhat === ":p") {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"));
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"));
aSugg.delete("");
} else {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"));
}
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggVerbTense (sFlex, sTense, sWho) {
let aSugg = new Set();
for (let sStem of stem(sFlex)) {
if (conj.hasConj(sStem, sTense, sWho)) {
aSugg.add(conj.getConj(sStem, sTense, sWho));
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggVerbImpe (sFlex) {
let aSugg = new Set();
for (let sStem of stem(sFlex)) {
let tTags = conj._getTags(sStem);
if (tTags) {
if (conj._hasConjWithTags(tTags, ":E", ":2s")) {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2s"));
}
if (conj._hasConjWithTags(tTags, ":E", ":1p")) {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":1p"));
}
if (conj._hasConjWithTags(tTags, ":E", ":2p")) {
aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2p"));
}
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggVerbInfi (sFlex) {
//return stem(sFlex).join("|");
return [ for (sStem of stem(sFlex)) if (conj.isVerb(sStem)) sStem ].join("|");
}
const _dQuiEst = new Map ([
["je", ":1s"], ["j’", ":1s"], ["j’en", ":1s"], ["j’y", ":1s"],
["tu", ":2s"], ["il", ":3s"], ["on", ":3s"], ["elle", ":3s"],
["nous", ":1p"], ["vous", ":2p"], ["ils", ":3p"], ["elles", ":3p"]
]);
const _lIndicatif = [":Ip", ":Iq", ":Is", ":If"];
const _lSubjonctif = [":Sp", ":Sq"];
function suggVerbMode (sFlex, cMode, sSuj) {
let lMode;
if (cMode == ":I") {
lMode = _lIndicatif;
} else if (cMode == ":S") {
lMode = _lSubjonctif;
} else if (cMode.startsWith(":I") || cMode.startsWith(":S")) {
lMode = [cMode];
} else {
return "";
}
let sWho = _dQuiEst._get(sSuj.toLowerCase(), null);
if (!sWho) {
if (sSuj[0]._isLowerCase()) { // pas un pronom, ni un nom propre
return "";
}
sWho = ":3s";
}
let aSugg = new Set();
for (let sStem of stem(sFlex)) {
let tTags = conj._getTags(sStem);
if (tTags) {
for (let sTense of lMode) {
if (conj._hasConjWithTags(tTags, sTense, sWho)) {
aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho));
}
}
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
//// Nouns and adjectives
function suggPlur (sFlex, sWordToAgree=null) {
// returns plural forms assuming sFlex is singular
if (sWordToAgree) {
if (!_dAnalyses.has(sWordToAgree) && !_storeMorphFromFSA(sWordToAgree)) {
return "";
}
let sGender = cr.getGender(_dAnalyses._get(sWordToAgree, []));
if (sGender == ":m") {
return suggMasPlur(sFlex);
} else if (sGender == ":f") {
return suggFemPlur(sFlex);
}
}
let aSugg = new Set();
if (!sFlex.includes("-")) {
if (sFlex.endsWith("l")) {
if (sFlex.endsWith("al") && sFlex.length > 2 && _oDict.isValid(sFlex.slice(0,-1)+"ux")) {
aSugg.add(sFlex.slice(0,-1)+"ux");
}
if (sFlex.endsWith("ail") && sFlex.length > 3 && _oDict.isValid(sFlex.slice(0,-2)+"ux")) {
aSugg.add(sFlex.slice(0,-2)+"ux");
}
}
if (_oDict.isValid(sFlex+"s")) {
aSugg.add(sFlex+"s");
}
if (_oDict.isValid(sFlex+"x")) {
aSugg.add(sFlex+"x");
}
}
if (mfsp.hasMiscPlural(sFlex)) {
mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); });
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggSing (sFlex) {
// returns singular forms assuming sFlex is plural
if (sFlex.includes("-")) {
return "";
}
let aSugg = new Set();
if (sFlex.endsWith("ux")) {
if (_oDict.isValid(sFlex.slice(0,-2)+"l")) {
aSugg.add(sFlex.slice(0,-2)+"l");
}
if (_oDict.isValid(sFlex.slice(0,-2)+"il")) {
aSugg.add(sFlex.slice(0,-2)+"il");
}
}
if (_oDict.isValid(sFlex.slice(0,-1))) {
aSugg.add(sFlex.slice(0,-1));
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggMasSing (sFlex, bSuggSimil=false) {
// returns masculine singular forms
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let aSugg = new Set();
for (let sMorph of _dAnalyses._get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":m") || sMorph.includes(":e")) {
aSugg.add(suggSing(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
mfsp.getMasForm(sStem, false).forEach(function(x) { aSugg.add(x); });
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q1") && conj.hasConj(sVerb, ":PQ", ":Q3")) {
// We also check if the verb has a feminine form.
// If not, we consider it’s better to not suggest the masculine one, as it can be considered invariable.
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q1"));
}
}
}
if (bSuggSimil) {
for (let e of phonet.selectSimil(sFlex, ":m:[si]")) {
aSugg.add(e);
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggMasPlur (sFlex, bSuggSimil=false) {
// returns masculine plural forms
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let aSugg = new Set();
for (let sMorph of _dAnalyses._get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":m") || sMorph.includes(":e")) {
aSugg.add(suggPlur(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
mfsp.getMasForm(sStem, true).forEach(function(x) { aSugg.add(x); });
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q2")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2"));
} else if (conj.hasConj(sVerb, ":PQ", ":Q1")) {
let sSugg = conj.getConj(sVerb, ":PQ", ":Q1");
// it is necessary to filter these flexions, like “succédé” or “agi” that are not masculine plural
if (sSugg.endsWith("s")) {
aSugg.add(sSugg);
}
}
}
}
if (bSuggSimil) {
for (let e of phonet.selectSimil(sFlex, ":m:[pi]")) {
aSugg.add(e);
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggFemSing (sFlex, bSuggSimil=false) {
// returns feminine singular forms
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let aSugg = new Set();
for (let sMorph of _dAnalyses._get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":f") || sMorph.includes(":e")) {
aSugg.add(suggSing(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
aSugg.add(sStem);
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q3")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q3"));
}
}
}
if (bSuggSimil) {
for (let e of phonet.selectSimil(sFlex, ":f:[si]")) {
aSugg.add(e);
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggFemPlur (sFlex, bSuggSimil=false) {
// returns feminine plural forms
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let aSugg = new Set();
for (let sMorph of _dAnalyses._get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":f") || sMorph.includes(":e")) {
aSugg.add(suggPlur(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
aSugg.add(sStem+"s");
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q4")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q4"));
}
}
}
if (bSuggSimil) {
for (let e of phonet.selectSimil(sFlex, ":f:[pi]")) {
aSugg.add(e);
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function hasFemForm (sFlex) {
for (let sStem of stem(sFlex)) {
if (mfsp.isFemForm(sStem) || conj.hasConj(sStem, ":PQ", ":Q3")) {
return true;
}
}
if (phonet.hasSimil(sFlex, ":f")) {
return true;
}
return false;
}
function hasMasForm (sFlex) {
for (let sStem of stem(sFlex)) {
if (mfsp.isFemForm(sStem) || conj.hasConj(sStem, ":PQ", ":Q1")) {
// what has a feminine form also has a masculine form
return true;
}
}
if (phonet.hasSimil(sFlex, ":m")) {
return true;
}
return false;
}
function switchGender (sFlex, bPlur=null) {
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let aSugg = new Set();
if (bPlur === null) {
for (let sMorph of _dAnalyses._get(sFlex, [])) {
if (sMorph.includes(":f")) {
if (sMorph.includes(":s")) {
aSugg.add(suggMasSing(sFlex));
} else if (sMorph.includes(":p")) {
aSugg.add(suggMasPlur(sFlex));
}
} else if (sMorph.includes(":m")) {
if (sMorph.includes(":s")) {
aSugg.add(suggFemSing(sFlex));
} else if (sMorph.includes(":p")) {
aSugg.add(suggFemPlur(sFlex));
} else {
aSugg.add(suggFemSing(sFlex));
aSugg.add(suggFemPlur(sFlex));
}
}
}
} else if (bPlur) {
for (let sMorph of _dAnalyses._get(sFlex, [])) {
if (sMorph.includes(":f")) {
aSugg.add(suggMasPlur(sFlex));
} else if (sMorph.includes(":m")) {
aSugg.add(suggFemPlur(sFlex));
}
}
} else {
for (let sMorph of _dAnalyses._get(sFlex, [])) {
if (sMorph.includes(":f")) {
aSugg.add(suggMasSing(sFlex));
} else if (sMorph.includes(":m")) {
aSugg.add(suggFemSing(sFlex));
}
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function switchPlural (sFlex) {
let aSugg = new Set();
for (let sMorph of _dAnalyses._get(sFlex, [])) { // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
if (sMorph.includes(":s")) {
aSugg.add(suggPlur(sFlex));
} else if (sMorph.includes(":p")) {
aSugg.add(suggSing(sFlex));
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function hasSimil (sWord, sPattern=null) {
return phonet.hasSimil(sWord, sPattern);
}
function suggSimil (sWord, sPattern) {
// return list of words phonetically similar to sWord and whom POS is matching sPattern
let aSugg = phonet.selectSimil(sWord, sPattern);
for (let sMorph of _dAnalyses._get(sWord, [])) {
for (let e of conj.getSimil(sWord, sMorph)) {
aSugg.add(e);
}
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggCeOrCet (sWord) {
if (/^[aeéèêiouyâîï]/i.test(sWord)) {
return "cet";
}
if (sWord[0] == "h" || sWord[0] == "H") {
return "ce|cet";
}
return "ce";
}
function suggLesLa (sWord) {
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
if (_dAnalyses._get(sWord, []).some(s => s.includes(":p"))) {
return "les|la";
}
return "la";
}
function formatNumber (s) {
let nLen = s.length;
if (nLen <= 4 ) {
return s;
}
let sRes = "";
// nombre ordinaire
let nEnd = nLen;
while (nEnd > 0) {
let nStart = Math.max(nEnd-3, 0);
sRes = sRes ? s.slice(nStart, nEnd) + " " + sRes : sRes = s.slice(nStart, nEnd);
nEnd = nEnd - 3;
}
// binaire
if (/^[01]+$/.test(s)) {
nEnd = nLen;
let sBin = "";
while (nEnd > 0) {
let nStart = Math.max(nEnd-4, 0);
sBin = sBin ? s.slice(nStart, nEnd) + " " + sBin : sBin = s.slice(nStart, nEnd);
nEnd = nEnd - 4;
}
sRes += "|" + sBin;
}
// numéros de téléphone
if (nLen == 10) {
if (s.startsWith("0")) {
sRes += "|" + s.slice(0,2) + " " + s.slice(2,4) + " " + s.slice(4,6) + " " + s.slice(6,8) + " " + s.slice(8); // téléphone français
if (s[1] == "4" && (s[2]=="7" || s[2]=="8" || s[2]=="9")) {
sRes += "|" + s.slice(0,4) + " " + s.slice(4,6) + " " + s.slice(6,8) + " " + s.slice(8); // mobile belge
}
sRes += "|" + s.slice(0,3) + " " + s.slice(3,6) + " " + s.slice(6,8) + " " + s.slice(8); // téléphone suisse
}
sRes += "|" + s.slice(0,4) + " " + s.slice(4,7) + "-" + s.slice(7); // téléphone canadien ou américain
} else if (nLen == 9 && s.startsWith("0")) {
sRes += "|" + s.slice(0,3) + " " + s.slice(3,5) + " " + s.slice(5,7) + " " + s.slice(7,9); // fixe belge 1
sRes += "|" + s.slice(0,2) + " " + s.slice(2,5) + " " + s.slice(5,7) + " " + s.slice(7,9); // fixe belge 2
}
return sRes;
}
function formatNF (s) {
try {
let m = /NF[ -]?(C|E|P|Q|S|X|Z|EN(?:[ -]ISO|))[ -]?([0-9]+(?:[\/‑-][0-9]+|))/i.exec(s);
if (!m) {
return "";
}
return "NF " + m[1].toUpperCase().replace(/ /g, " ").replace(/-/g, " ") + " " + m[2].replace(/\//g, "‑").replace(/-/g, "‑");
}
catch (e) {
helpers.logerror(e);
return "# erreur #";
}
}
function undoLigature (c) {
if (c == "fi") {
return "fi";
} else if (c == "fl") {
return "fl";
} else if (c == "ff") {
return "ff";
} else if (c == "ffi") {
return "ffi";
} else if (c == "ffl") {
return "ffl";
} else if (c == "ſt") {
return "ft";
} else if (c == "st") {
return "st";
}
return "_";
}
|
Added gc_lang/fr/modules-js/lexicographe.js version [7e54b6b49b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 |
// Grammalecte - Lexicographe
// License: MPL 2
"use strict";
${string}
const helpers = require("resource://grammalecte/helpers.js");
const _dTAGS = new Map ([
[':G', "[mot grammatical]"],
[':N', " nom,"],
[':A', " adjectif,"],
[':M1', " prénom,"],
[':M2', " patronyme,"],
[':MP', " nom propre,"],
[':W', " adverbe,"],
[':X', " adverbe de négation,"],
[':U', " adverbe interrogatif,"],
[':J', " interjection,"],
[':B', " nombre,"],
[':T', " titre,"],
[':R', " préposition,"],
[':Rv', " préposition verbale,"],
[':D', " déterminant,"],
[':Dd', " déterminant démonstratif,"],
[':De', " déterminant exclamatif,"],
[':Dp', " déterminant possessif,"],
[':Di', " déterminant indéfini,"],
[':Dn', " déterminant négatif,"],
[':Od', " pronom démonstratif,"],
[':Oi', " pronom indéfini,"],
[':On', " pronom indéfini négatif,"],
[':Ot', " pronom interrogatif,"],
[':Or', " pronom relatif,"],
[':Ow', " pronom adverbial,"],
[':Os', " pronom personnel sujet,"],
[':Oo', " pronom personnel objet,"],
[':C', " conjonction,"],
[':Ĉ', " conjonction (él.),"],
[':Cc', " conjonction de coordination,"],
[':Cs', " conjonction de subordination,"],
[':Ĉs', " conjonction de subordination (él.),"],
[':Ŵ', " locution adverbiale (él.),"],
[':Ñ', " locution nominale (él.),"],
[':Â', " locution adjectivale (él.),"],
[':Ṽ', " locution verbale (él.),"],
[':Ŕ', " locution prépositive (él.),"],
[':Ĵ', " locution interjective (él.),"],
[':Zp', " préfixe,"],
[':Zs', " suffixe,"],
[':V1', " verbe (1ᵉʳ gr.),"],
[':V2', " verbe (2ᵉ gr.),"],
[':V3', " verbe (3ᵉ gr.),"],
[':V0e', " verbe,"],
[':V0a', " verbe,"],
[':O1', " 1ʳᵉ pers.,"],
[':O2', " 2ᵉ pers.,"],
[':O3', " 3ᵉ pers.,"],
[':e', " épicène"],
[':m', " masculin"],
[':f', " féminin"],
[':s', " singulier"],
[':p', " pluriel"],
[':i', " invariable"],
[':Y', " infinitif,"],
[':P', " participe présent,"],
[':Q', " participe passé,"],
[':Ip', " présent,"],
[':Iq', " imparfait,"],
[':Is', " passé simple,"],
[':If', " futur,"],
[':K', " conditionnel présent,"],
[':Sp', " subjonctif présent,"],
[':Sq', " subjonctif imparfait,"],
[':E', " impératif,"],
[':1s', " 1ʳᵉ p. sg.,"],
[':1ŝ', " présent interr. 1ʳᵉ p. sg.,"],
[':1ś', " présent interr. 1ʳᵉ p. sg.,"],
[':2s', " 2ᵉ p. sg.,"],
[':3s', " 3ᵉ p. sg.,"],
[':1p', " 1ʳᵉ p. pl.,"],
[':2p', " 2ᵉ p. pl.,"],
[':3p', " 3ᵉ p. pl.,"],
[':3p!', " 3ᵉ p. pl.,"],
[';S', " : symbole (unité de mesure)"],
['/*', ""],
['/C', " {classique}"],
['/M', ""],
['/R', " {réforme}"],
['/A', ""],
['/X', ""]
]);
const _dPFX = new Map ([
['d', "(de), déterminant épicène invariable"],
['l', "(le/la), déterminant masculin/féminin singulier"],
['j', "(je), pronom personnel sujet, 1ʳᵉ pers., épicène singulier"],
['m', "(me), pronom personnel objet, 1ʳᵉ pers., épicène singulier"],
['t', "(te), pronom personnel objet, 2ᵉ pers., épicène singulier"],
['s', "(se), pronom personnel objet, 3ᵉ pers., épicène singulier/pluriel"],
['n', "(ne), adverbe de négation"],
['c', "(ce), pronom démonstratif, masculin singulier/pluriel"],
['ç', "(ça), pronom démonstratif, masculin singulier"],
['qu', "(que), conjonction de subordination"],
['lorsqu', "(lorsque), conjonction de subordination"],
['quoiqu', "(quoique), conjonction de subordination"],
['jusqu', "(jusque), préposition"]
]);
const _dAD = new Map ([
['je', " pronom personnel sujet, 1ʳᵉ pers. sing."],
['tu', " pronom personnel sujet, 2ᵉ pers. sing."],
['il', " pronom personnel sujet, 3ᵉ pers. masc. sing."],
['on', " pronom personnel sujet, 3ᵉ pers. sing. ou plur."],
['elle', " pronom personnel sujet, 3ᵉ pers. fém. sing."],
['nous', " pronom personnel sujet/objet, 1ʳᵉ pers. plur."],
['vous', " pronom personnel sujet/objet, 2ᵉ pers. plur."],
['ils', " pronom personnel sujet, 3ᵉ pers. masc. plur."],
['elles', " pronom personnel sujet, 3ᵉ pers. masc. plur."],
["là", " particule démonstrative"],
["ci", " particule démonstrative"],
['le', " COD, masc. sing."],
['la', " COD, fém. sing."],
['les', " COD, plur."],
['moi', " COI (à moi), sing."],
['toi', " COI (à toi), sing."],
['lui', " COI (à lui ou à elle), sing."],
['nous2', " COI (à nous), plur."],
['vous2', " COI (à vous), plur."],
['leur', " COI (à eux ou à elles), plur."],
['y', " pronom adverbial"],
["m'y", " (me) pronom personnel objet + (y) pronom adverbial"],
["t'y", " (te) pronom personnel objet + (y) pronom adverbial"],
["s'y", " (se) pronom personnel objet + (y) pronom adverbial"],
['en', " pronom adverbial"],
["m'en", " (me) pronom personnel objet + (en) pronom adverbial"],
["t'en", " (te) pronom personnel objet + (en) pronom adverbial"],
["s'en", " (se) pronom personnel objet + (en) pronom adverbial"]
]);
class Lexicographe {
constructor (oDict) {
this.oDict = oDict;
this._zElidedPrefix = new RegExp ("^([dljmtsncç]|quoiqu|lorsqu|jusqu|puisqu|qu)['’](.+)", "i");
this._zCompoundWord = new RegExp ("([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)-((?:les?|la)-(?:moi|toi|lui|[nv]ous|leur)|t-(?:il|elle|on)|y|en|[mts][’'](?:y|en)|les?|l[aà]|[mt]oi|leur|lui|je|tu|ils?|elles?|on|[nv]ous)$", "i");
this._zTag = new RegExp ("[:;/][a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ*][^:;/]*", "g");
};
analyzeText (sText) {
sText = sText.replace(/[.,.?!:;…\/()\[\]“”«»"„{}–—#+*<>%=\n]/g, " ").replace(/\s+/g, " ");
let iStart = 0;
let iEnd = 0;
let sHtml = '<div class="paragraph">\n';
while ((iEnd = sText.indexOf(" ", iStart)) !== -1) {
sHtml += this.analyzeWord(sText.slice(iStart, iEnd));
iStart = iEnd + 1;
}
sHtml += this.analyzeWord(sText.slice(iStart));
return sHtml + '</div>\n';
}
analyzeWord (sWord) {
try {
if (!sWord) {
return "";
}
if (sWord._count("-") > 4) {
return '<p><b class="mbok">' + sWord + "</b> <s>:</s> élément complexe indéterminé</p>\n";
}
if (sWord._isDigit()) {
return '<p><b class="nb">' + sWord + "</b> <s>:</s> nombre</p>\n";
}
let sHtml = "";
// préfixes élidés
let m = this._zElidedPrefix.exec(sWord);
if (m !== null) {
sWord = m[2];
sHtml += "<p><b>" + m[1] + "’</b> <s>:</s> " + _dPFX.get(m[1].toLowerCase()) + " </p>\n";
}
// mots composés
let m2 = this._zCompoundWord.exec(sWord);
if (m2 !== null) {
sWord = m2[1];
}
// Morphologies
let lMorph = this.oDict.getMorph(sWord);
if (lMorph.length === 1) {
sHtml += "<p><b>" + sWord + "</b> <s>:</s> " + this.formatTags(lMorph[0]) + "</p>\n";
} else if (lMorph.length > 1) {
sHtml += "<p><b>" + sWord + "</b><ul><li>" + [for (s of lMorph) if (s.includes(":")) this.formatTags(s)].join(" </li><li> ") + "</li></ul></p>\n";
} else {
sHtml += '<p><b class="unknown">' + sWord + "</b> <s>:</s> absent du dictionnaire<p>\n";
}
// suffixe d’un mot composé
if (m2) {
sHtml += "<p>-<b>" + m2[2] + "</b> <s>:</s> " + this._formatSuffix(m2[2].toLowerCase()) + "</p>\n";
}
// Verbes
//let aVerb = new Set([ for (s of lMorph) if (s.includes(":V")) s.slice(1, s.indexOf(" ")) ]);
return sHtml;
}
catch (e) {
helpers.logerror(e);
return "#erreur";
}
};
formatTags (sTags) {
let sRes = "";
sTags = sTags.replace(/V([0-3][ea]?)[itpqnmr_eaxz]+/, "V$1");
let m;
while ((m = this._zTag.exec(sTags)) !== null) {
sRes += _dTAGS.get(m[0]);
if (sRes.length > 100) {
break;
}
}
if (sRes.startsWith(" verbe") && !sRes.endsWith("infinitif")) {
sRes += " [" + sTags.slice(1, sTags.indexOf(" ")) + "]";
}
if (!sRes) {
sRes = "#Erreur. Étiquette inconnue : [" + sTags + "]";
helpers.echo(sRes);
return sRes;
}
return sRes._trimRight(",");
};
_formatSuffix (s) {
if (s.startsWith("t-")) {
return "“t” euphonique +" + _dAD.get(s.slice(2));
}
if (!s.includes("-")) {
return _dAD.get(s.replace("’", "'"));
}
if (s.endsWith("ous")) {
s += '2';
}
let nPos = s.indexOf("-");
return _dAD.get(s.slice(0, nPos)) + " +" + _dAD.get(s.slice(nPos+1));
};
}
exports.Lexicographe = Lexicographe;
|
Added gc_lang/fr/modules-js/mfsp.js version [eacc870aa5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
// Grammalecte
"use strict";
const helpers = require("resource://grammalecte/helpers.js");
const echo = helpers.echo;
const oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/mfsp_data.json"));
// list of affix codes
const _lTagMiscPlur = oData.lTagMiscPlur;
const _lTagMasForm = oData.lTagMasForm;
// dictionary of words with uncommon plurals (-x, -ux, english, latin and italian plurals) and tags to generate them
const _dMiscPlur = helpers.objectToMap(oData.dMiscPlur);
// dictionary of feminine forms and tags to generate masculine forms (singular and plural)
const _dMasForm = helpers.objectToMap(oData.dMasForm);
function isFemForm (sWord) {
// returns True if sWord exists in _dMasForm
return _dMasForm.has(sWord);
}
function getMasForm (sWord, bPlur) {
// returns masculine form with feminine form
if (_dMasForm.has(sWord)) {
return [ for (sTag of _whatSuffixCodes(sWord, bPlur)) _modifyStringWithSuffixCode(sWord, sTag) ];
}
return [];
}
function hasMiscPlural (sWord) {
// returns True if sWord exists in dMiscPlur
return _dMiscPlur.has(sWord);
}
function getMiscPlural (sWord) {
// returns plural form with singular form
if (_dMiscPlur.has(sWord)) {
return [ for (sTag of _lTagMiscPlur[_dMiscPlur.get(sWord)].split("|")) _modifyStringWithSuffixCode(sWord, sTag) ];
}
return [];
}
function _whatSuffixCodes (sWord, bPlur) {
// necessary only for dMasFW
let sSfx = _lTagMasForm[_dMasForm.get(sWord)];
if (sSfx.includes("/")) {
if (bPlur) {
return sSfx.slice(sSfx.indexOf("/")+1).split("|");
}
return sSfx.slice(0, sSfx.indexOf("/")).split("|");
}
return sSfx.split("|");
}
function _modifyStringWithSuffixCode (sWord, sSfx) {
// returns sWord modified by sSfx
if (!sWord) {
return "";
}
if (sSfx === "0") {
return sWord;
}
try {
if (sSfx[0] !== '0') {
return sWord.slice(0, -(sSfx.charCodeAt(0)-48)) + sSfx.slice(1); // 48 is the ASCII code for "0"
} else {
return sWord + sSfx.slice(1);
}
}
catch (e) {
console.log(e);
return "## erreur, code : " + sSfx + " ##";
}
}
exports.isFemForm = isFemForm;
exports.getMasForm = getMasForm;
exports.hasMiscPlural = hasMiscPlural;
exports.getMiscPlural = getMiscPlural;
|
Added gc_lang/fr/modules-js/mfsp_data.json version [e2ab44440e].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/phonet.js version [1ddd439263].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
// Grammalecte - Suggestion phonétique
const helpers = require("resource://grammalecte/helpers.js");
const echo = helpers.echo;
const oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/phonet_data.json"));
const _dWord = helpers.objectToMap(oData.dWord);
const _lSet = oData.lSet;
const _dMorph = helpers.objectToMap(oData.dMorph);
function hasSimil (sWord, sPattern=null) {
// return True if there is list of words phonetically similar to sWord
if (!sWord) {
return false;
}
if (_dWord.has(sWord)) {
if (sPattern) {
return getSimil(sWord).some(sSimil => _dMorph._get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0));
}
return true;
}
if (sWord.slice(0,1)._isUpperCase()) {
sWord = sWord.toLowerCase();
}
if (sPattern) {
return getSimil(sWord).some(sSimil => _dMorph._get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0));
}
return _dWord.has(sWord);
}
function getSimil (sWord) {
// return list of words phonetically similar to sWord
if (!sWord) {
return [];
}
if (_dWord.has(sWord)) {
return _lSet[_dWord.get(sWord)];
}
if (sWord.slice(0,1)._isUpperCase()) {
sWord = sWord.toLowerCase();
}
if (_dWord.has(sWord)) {
return _lSet[_dWord.get(sWord)];
}
return [];
}
function selectSimil (sWord, sPattern) {
// return list of words phonetically similar to sWord and whom POS is matching sPattern
if (!sPattern) {
return new Set(getSimil(sWord));
}
let aSelect = new Set();
for (let sSimil of getSimil(sWord)) {
for (let sMorph of _dMorph._get(sSimil, [])) {
if (sMorph.search(sPattern) >= 0) {
aSelect.add(sSimil);
}
}
}
return aSelect;
}
exports.hasSimil = hasSimil;
exports.getSimil = getSimil;
exports.selectSimil = selectSimil;
|
Added gc_lang/fr/modules-js/phonet_data.json version [5c7550e87d].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/tests_data.json version [effbab517b].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/textformatter.js version [694a6a3f2d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 |
// Grammalecte - text formatter
"use strict";
${map}
// Latin letters: http://unicode-table.com/fr/
// 0-9
// A-Z
// a-z
// À-Ö 00C0-00D6 (upper case)
// Ø-ß 00D8-00DF (upper case)
// à-ö 00E0-00F6 (lower case)
// ø-ÿ 00F8-00FF (lower case)
// Ā-ʯ 0100-02AF (mixed)
// -> a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ
// JS sucks: $0 is not recognized (why?), use $&
const oReplTable = {
//// surnumerary_spaces
"start_of_paragraph": [ [/^[ ]+/gm, ""] ],
"end_of_paragraph": [ [/[ ]+$/gm, ""] ],
"between_words": [ [/ | /g, " "], // espace + espace insécable -> espace
[/ +/g, " "], // espaces surnuméraires
[/ +/g, " "] ], // espaces insécables surnuméraires
"before_punctuation": [ [/ +(?=[.,…])/g, ""] ],
"within_parenthesis": [ [/\([ ]+/g, "("],
[/[ ]+\)/g, ")"] ],
"within_square_brackets": [ [/\[[ ]+/g, "["],
[/[ ]+\]/g, "]"] ],
"within_quotation_marks": [ [/“[ ]+/g, "“"],
[/[ ]”/g, "”"] ],
//// non-breaking spaces
// espaces insécables
"nbsp_before_punctuation": [ [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…)»}\]])([:;?!])[ ]/g, "$1 $2 "],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…)»}\]])([:;?!])$/g, "$1 $2"],
[/[ ]+([:;?!])/g, " $1"] ],
"nbsp_within_quotation_marks":[ [/«([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, "« $1"],
[/«[ ]+/g, "« "],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ.!?])»/g, "$1 »"],
[/[ ]+»/g, " »"] ],
"nbsp_within_numbers": [ [/(\d)[ ](?=\d)/g, "$1 "] ],
// espaces insécables fines
"nnbsp_before_punctuation": [ [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]])([;?!])[ ]/g, "$1 $2 "],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]])([;?!])$/g, "$1 $2"],
[/[ ]+([;?!])/g, " $1"],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]]):[ ]/g, "$1 : "],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]]):$/g, "$1 :"],
[/[ ]+:/g, " :"] ],
"nnbsp_within_quotation_marks":[[/«([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, "« $1"],
[/«[ ]+/g, "« "],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ.!?])»/g, "$1 »"],
[/[ ]+»/g, " »"] ],
"nnbsp_within_numbers": [ [/(\d)[ ](\d)/g, "$1 $2"] ],
// common
"nbsp_before_symbol": [ [/(\d) ?([%‰€$£¥˚Ω℃])/g, "$1 $2"] ],
"nbsp_before_units": [ [/([0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\b/g, "$1 $2"] ],
"nbsp_repair": [ [/([\[(])[ ]([!?:;])/g, "$1$2"],
[/(https?|ftp)[ ]:\/\//g, "$1://"],
[/&([a-z]+)[ ];/g, "&$1;"],
[/&#([0-9]+|x[0-9a-fA-F]+)[ ];/g, "&#$1;"] ],
//// missing spaces
"add_space_after_punctuation":[ [/[;!…](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, "$& "],
[/[?](?=[A-ZÀ-ÖØ-ßĀ-ʯ])/g, "? "],
[/\.(?=[a-zA-Zà-öÀ-Öø-ÿØ-ßĀ-ʯ][a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, ". "],
[/\.(?=À)/g, ". "],
[/[,:](?=[a-zA-Zà-öÀ-Öø-ÿØ-ßĀ-ʯ])/g, "$& "],
[/([a-zA-Zà-öÀ-Öø-ÿØ-ßĀ-ʯ]),(?=[0-9])/g, "$1, "] ],
"add_space_around_hyphens": [ [/ [-–—](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ"«“'‘])/g, "$& "],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ"»”'’])([-–—]) /g, "$1 $2 "] ],
"add_space_repair": [ [/DnT, ([wA])\b/g, "DnT,$1"] ],
//// erase
"erase_non_breaking_hyphens": [ [//g, ""] ],
//// typographic signs
"ts_apostrophe": [ [/\b([ldnjmtscç])['´‘′`](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/ig, "$1’"],
[/\b(qu|jusqu|lorsqu|puisqu|quoiqu|quelqu|presqu|entr|aujourd|prud)['´‘′`]/ig, "$1’"] ],
"ts_ellipsis": [ [/\.\.\./g, "…"],
[/…\.\./g, "……"],
[/…\.(?!\.)/g, "…"] ],
"ts_n_dash_middle": [ [/ [-—] /g, " – "],
[/ [-—],/g, " –,"] ],
"ts_m_dash_middle": [ [/ [-–] /g, " — "],
[/ [-–],/g, " —,"] ],
"ts_n_dash_start": [ [/^[-—][ ]/gm, "– "],
[/^– /gm, "– "],
[/^[-–—](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/gm, "– "] ],
"ts_m_dash_start": [ [/^[-–][ ]/gm, "— "],
[/^— /gm, "— "],
[/^«[ ][—–-][ ]/gm, "« — "],
[/^[-–—](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/gm, "— "] ],
"ts_quotation_marks": [ [/"([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)"/g, "“$1”"],
[/''([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)''/g, "“$1”"],
[/'([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)'/g, "“$1”"],
[/^(?:"|'')(?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…])/gm, "« "],
[/ (?:"|'')(?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…])/g, " « "],
[/\((?:"|'')(?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…])/g, "(« "],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])(?:"|'')$/gm, "$1 »"],
[/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])(?:"|'')(?=[ ,.:;?!…)\]])/g, "$1 »"],
[/([.!?…])" /g, "$1 » "],
[/([.!?…])"$/gm, "$1 »"] ],
"ts_spell": [ [/coeur/g, "cœur"], [/Coeur/g, "Cœur"],
[/coel(?=[aeio])/g, "cœl"], [/Coel(?=[aeio])/g, "Cœl"],
[/choeur/g, "chœur"], [/Choeur/g, "Chœur"],
[/foet/g, "fœt"], [/Foet/g, "Fœt"],
[/oeil/g, "œil"], [/Oeil/g, "Œil"],
[/oeno/g, "œno"], [/Oeno/g, "Œno"],
[/oesoph/g, "œsoph"], [/Oesoph/g, "Œsoph"],
[/oestro/g, "œstro"], [/Oestro/g, "Œstro"],
[/oeuf/g, "œuf"], [/Oeuf/g, "Œuf"],
[/oeuvr/g, "œuvr"], [/Oeuvr/g, "Œuvr"],
[/moeur/g, "mœur"], [/Moeur/g, "Mœur"],
[/noeu/g, "nœu"], [/Noeu/g, "Nœu"],
[/soeur/g, "sœur"], [/Soeur/g, "Sœur"],
[/voeu/g, "vœu"], [/Voeu/g, "Vœu"],
[/aequo/g, "æquo"], [/Aequo/g, "Æquo"],
[/Ca /g, "Ça "], [/ ca([ ,.!;:])/g, " ça$1"],
[/(Ce(?:ux|lles?|lui))-la /g, "$1-là "], [/ (ce(?:ux|lles?|lui))-la/g, " $1-là"],
[/ malgre /g, " malgré "], [/Malgre /g, "Malgré "],
[/ etre([ ,.!;:])/g, " être$1"], [/Etre([ ,.!;:])/g, "Être$1"],
[/ tres([ ,.!;:])/g, " très$1"], [/Tres /g, "Très "],
[/\bEtai([ts]|ent)\b/g, "Étai$1"],
[/\bE(tat|cole|crit|poque|tude|ducation|glise|conomi(?:qu|)e|videmment|lysée|tienne|thiopie|cosse|gypt(?:e|ien)|rythrée|pinal|vreux)/g, "É$1"] ],
"ts_ligature_ffi_do": [ [/ffi/g, "ffi"] ],
"ts_ligature_ffl_do": [ [/ffl/g, "ffl"] ],
"ts_ligature_fi_do": [ [/fi/g, "fi"] ],
"ts_ligature_fl_do": [ [/fl/g, "fl"] ],
"ts_ligature_ff_do": [ [/ff/g, "ff"] ],
"ts_ligature_ft_do": [ [/ft/g, "ſt"] ],
"ts_ligature_st_do": [ [/st/g, "st"] ],
"ts_ligature_fi_undo": [ [/fi/g, "fi"] ],
"ts_ligature_fl_undo": [ [/fl/g, "fl"] ],
"ts_ligature_ff_undo": [ [/ff/g, "ff"] ],
"ts_ligature_ffi_undo": [ [/ffi/g, "ffi"] ],
"ts_ligature_ffl_undo": [ [/ffl/g, "ffl"] ],
"ts_ligature_ft_undo": [ [/ſt/g, "ft"] ],
"ts_ligature_st_undo": [ [/st/g, "st"] ],
"ts_units": [ [/\bN\.([ms])\b/g, "N·$1"], // N·m et N·m-1, N·s
[/\bW\.h\b/g, "W·h"],
[/\bPa\.s\b/g, "Pa·s"],
[/\bA\.h\b/g, "A·h"],
[/Ω\.m\b/g, "Ω·m"],
[/\bS\.m\b/g, "S·m"],
[/\bg\.s(?=-1)\b/g, "g·s"],
[/\bm\.s(?=-[12])\b/g, "m·s"],
[/\bg\.m(?=2|-3)\b/g, "g·m"],
[/\bA\.m(?=-1)\b/g, "A·m"],
[/\bJ\.K(?=-1)\b/g, "J·K"],
[/\bW\.m(?=-2)\b/g, "W·m"],
[/\bcd\.m(?=-2)\b/g, "cd·m"],
[/\bC\.kg(?=-1)\b/g, "C·kg"],
[/\bH\.m(?=-1)\b/g, "H·m"],
[/\bJ\.kg(?=-1)\b/g, "J·kg"],
[/\bJ\.m(?=-3)\b/g, "J·m"],
[/\bm[2²]\.s\b/g, "m²·s"],
[/\bm[3³]\.s(?=-1)\b/g, "m³·s"],
//[/\bJ.kg-1.K-1\b/g, "J·kg-1·K-1"],
//[/\bW.m-1.K-1\b/g, "W·m-1·K-1"],
//[/\bW.m-2.K-1\b/g, "W·m-2·K-1"],
[/\b(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)Ω/g, "$1Ω"] ],
//// misc
"ordinals_exponant": [ [/\b([0-9]+)(?:i?[èe]me|è|e)\b/g, "$1ᵉ"],
[/\b([XVICL]+)(?:i?[èe]me|è)\b/g, "$1ᵉ"],
[/\b((?:au|l[ea]|du) [XVICL])e\b/g, "$1ᵉ"],
[/\b([XVI])e(?= siècle)/g, "$1ᵉ"],
[/\b([1I])er\b/g, "$1ᵉʳ"],
[/\b([1I])re\b/g, "$1ʳᵉ"] ],
"ordinals_no_exponant": [ [/\b([0-9]+)(?:i?[èe]me|è)\b/g, "$1e"],
[/\b([XVICL]+)(?:i?[èe]me|è)\b/g, "$1e"],
[/\b([1I])ᵉʳ\b/g, "$1er"],
[/\b([1I])ʳᵉ\b/g, "$1er"] ],
"etc": [ [/etc(…|\.\.\.?)/g, "etc."],
[/\b etc\./g, ", etc."] ],
"missing_hyphens": [ [/[ -]t[’'](?=il\b|elle|on\b)/g, "-t-"],
[/ t-(?=il|elle|on)/g, "-t-"],
[/[ -]t[’'-](?=ils|elles)/g, "-"],
[/([td])-t-(?=il|elle|on)/g, "$1-"],
[/dix (sept|huit|neuf)/g, "dix-$1"],
[/quatre vingt/g, "quatre-vingt"],
[/(soixante|quatre-vingt) dix/g, "$1-dix"],
[/(vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)) (deux|trois|quatre|cinq|six|sept|huit|neuf)\b/g, "$1-$2"],
[/ ce(lles?|lui|ux) (ci|là)/g, "ce$1-$2"],
[/Ce(lles?|lui|ux) (ci|là)/g, "Ce$1-$2"],
[/^Ci (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)/gm, "Ci-$1"],
[/ ci (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)/g, " ci-$1"],
[/vis à vis/g, "vis-à-vis"],
[/Vis à vis/g, "Vis-à-vis"],
[/week end/g, "week-end"],
[/Week end/g, "Week-end"],
[/(plus|moins) value/ig, "$1-value"] ],
//// missing apostrophes
"ma_word": [ [/[ ](qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu|prud) /ig, "$1’"],
[/^(qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu|prud) /ig, "$1’"] ],
"ma_1letter_lowercase": [ [/[ ]([ldjnmtscç]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])/g, "$1’"] ],
"ma_1letter_uppercase": [ [/[ ]([LDJNMTSCÇ]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])/g, "$1’"],
[/^([LDJNMTSCÇ]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])/g, "$1’"] ]
};
const dDefaultOptions = new Map ([
["ts_units", true],
["start_of_paragraph", true],
["end_of_paragraph", true],
["between_words", true],
["before_punctuation", true],
["within_parenthesis", true],
["within_square_brackets", true],
["within_quotation_marks", true],
["nbsp_before_punctuation", true],
["nbsp_within_quotation_marks", true],
["nbsp_within_numbers", true],
["nnbsp_before_punctuation", false],
["nnbsp_within_quotation_marks", false],
["nnbsp_within_numbers", false],
["nbsp_before_symbol", true],
["nbsp_before_units", true],
["nbsp_repair", true],
["add_space_after_punctuation", true],
["add_space_around_hyphens", true],
["add_space_repair", true],
["erase_non_breaking_hyphens", false],
["ts_apostrophe", true],
["ts_ellipsis", true],
["ts_n_dash_middle", true],
["ts_m_dash_middle", false],
["ts_n_dash_start", false],
["ts_m_dash_start", true],
["ts_quotation_marks", true],
["ts_spell", true],
["ts_ligature_ffi_do", false],
["ts_ligature_ffl_do", false],
["ts_ligature_fi_do", false],
["ts_ligature_fl_do", false],
["ts_ligature_ff_do", false],
["ts_ligature_ft_do", false],
["ts_ligature_st_do", false],
["ts_ligature_fi_undo", false],
["ts_ligature_fl_undo", false],
["ts_ligature_ff_undo", false],
["ts_ligature_ffi_undo", false],
["ts_ligature_ffl_undo", false],
["ts_ligature_ft_undo", false],
["ts_ligature_st_undo", false],
["ordinals_exponant", false],
["ordinals_no_exponant", true],
["etc", true],
["missing_hyphens", true],
["ma_word", true],
["ma_1letter_lowercase", false],
["ma_1letter_uppercase", false]
]);
const dOptions = dDefaultOptions._shallowCopy();
class TextFormatter {
constructor () {
this.sLang = "fr";
};
formatText (sText, dOpt=null) {
if (dOpt !== null) {
dOptions._updateOnlyExistingKeys(dOpt);
}
for (let [sOptName, bVal] of dOptions) {
if (bVal && oReplTable.has(sOptName)) {
for (let [zRgx, sRep] of oReplTable[sOptName]) {
sText = sText.replace(zRgx, sRep);
}
}
}
return sText;
};
getDefaultOptions () {
return dDefaultOptions;
}
}
if (typeof(exports) !== 'undefined') {
exports.TextFormatter = TextFormatter;
exports.oReplTable = oReplTable;
}
|
Added gc_lang/fr/modules/conj.py version [7c55bc9b32].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 |
# Grammalecte - Conjugueur
# License: GPL 3
import re
import traceback
from .conj_data import lVtyp as _lVtyp
from .conj_data import lTags as _lTags
from .conj_data import dPatternConj as _dPatternConj
from .conj_data import dVerb as _dVerb
_zStartVoy = re.compile("^[aeéiouœê]")
_zNeedTeuph = re.compile("[tdc]$")
#_zNEEDACCENTWITHJE = re.compile("[^i]e$")
_dProSuj = { ":1s": "je", ":1ś": "je", ":2s": "tu", ":3s": "il", ":1p": "nous", ":2p": "vous", ":3p": "ils" }
_dProObj = { ":1s": "me ", ":1ś": "me ", ":2s": "te ", ":3s": "se ", ":1p": "nous ", ":2p": "vous ", ":3p": "se " }
_dProObjEl = { ":1s": "m’", ":1ś": "m’", ":2s": "t’", ":3s": "s’", ":1p": "nous ", ":2p": "vous ", ":3p": "s’" }
_dImpePro = { ":2s": "-toi", ":1p": "-nous", ":2p": "-vous" }
_dImpeProNeg = { ":2s": "ne te ", ":1p": "ne nous ", ":2p": "ne vous " }
_dImpeProEn = { ":2s": "-t’en", ":1p": "-nous-en", ":2p": "-vous-en" }
_dImpeProNegEn = { ":2s": "ne t’en ", ":1p": "ne nous en ", ":2p": "ne vous en " }
_dGroup = { "0": "auxiliaire", "1": "1ᵉʳ groupe", "2": "2ᵉ groupe", "3": "3ᵉ groupe" }
_dTenseIdx = { ":PQ": 0, ":Ip": 1, ":Iq": 2, ":Is": 3, ":If": 4, ":K": 5, ":Sp": 6, ":Sq": 7, ":E": 8 }
def isVerb (s):
return s in _dVerb
def getConj (sVerb, sTense, sWho):
"returns conjugation (can be an empty string)"
if sVerb not in _dVerb:
return None
return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx[sTense]]].get(sWho, ""))
def hasConj (sVerb, sTense, sWho):
"returns False if no conjugation (also if empty) else True"
if sVerb not in _dVerb:
return False
if _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx[sTense]]].get(sWho, False):
return True
return False
def getVtyp (sVerb):
"returns raw informations about sVerb"
if sVerb not in _dVerb:
return None
return _lVtyp[_dVerb[sVerb][0]]
def getSimil (sWord, sMorph):
if ":V" not in sMorph:
return set()
sInfi = sMorph[1:sMorph.find(" ")]
tTags = _getTags(sInfi)
aSugg = set()
if ":Q" in sMorph:
# we suggest conjugated forms
if ":V1" in sMorph:
aSugg.add(sInfi)
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":2p"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":1s"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3s"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3p"))
elif ":V2" in sMorph:
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"))
elif ":V3" in sMorph:
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":1s"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":3s"))
elif ":V0a" in sMorph:
aSugg.add("eus")
aSugg.add("eut")
else:
aSugg.add("étais")
aSugg.add("était")
aSugg.discard("")
else:
# we suggest past participles
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q1"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q2"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q3"))
aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q4"))
aSugg.discard("")
# if there is only one past participle (epi inv), unreliable.
if len(aSugg) == 1:
aSugg.clear()
return aSugg
def _getTags (sVerb):
"returns tuple of tags (usable with functions _getConjWithTags and _hasConjWithTags)"
if sVerb not in _dVerb:
return None
return _lTags[_dVerb[sVerb][1]]
def _getConjWithTags (sVerb, tTags, sTense, sWho):
"returns conjugation (can be an empty string)"
return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][tTags[_dTenseIdx[sTense]]].get(sWho, ""))
def _hasConjWithTags (tTags, sTense, sWho):
"returns False if no conjugation (also if empty) else True"
if _dPatternConj[sTense][tTags[_dTenseIdx[sTense]]].get(sWho, False):
return True
return False
def _modifyStringWithSuffixCode (sWord, sSfx):
"returns sWord modified by sSfx"
if not sSfx:
return ""
if sSfx == "0":
return sWord
try:
return sWord[:-(ord(sSfx[0])-48)] + sSfx[1:] if sSfx[0] != '0' else sWord + sSfx[1:] # 48 is the ASCII code for "0"
except:
return "## erreur, code : " + str(sSfx) + " ##"
class Verb ():
def __init__ (self, sVerb):
if not isinstance(sVerb, str):
raise TypeError
if not sVerb:
raise ValueError
self.sVerb = sVerb
self.sVerbAux = ""
self._sRawInfo = getVtyp(self.sVerb)
self.sInfo = self._readableInfo()
self.bProWithEn = (self._sRawInfo[5] == "e")
self._tTags = _getTags(sVerb)
self._tTagsAux = _getTags(self.sVerbAux)
self.dConj = {
":Y": {
"label": "Infinitif",
":Y": sVerb,
},
":PQ": {
"label": "Participes passés et présent",
":Q1": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q1"),
":Q2": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q2"),
":Q3": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q3"),
":Q4": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q4"),
":P": _getConjWithTags(sVerb, self._tTags, ":PQ", ":P"),
},
":Ip": {
"label": "Présent",
":1s": _getConjWithTags(sVerb, self._tTags, ":Ip", ":1s"),
":1ś": _getConjWithTags(sVerb, self._tTags, ":Ip", ":1ś"),
":2s": _getConjWithTags(sVerb, self._tTags, ":Ip", ":2s"),
":3s": _getConjWithTags(sVerb, self._tTags, ":Ip", ":3s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":Ip", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":Ip", ":2p"),
":3p": _getConjWithTags(sVerb, self._tTags, ":Ip", ":3p"),
},
":Iq": {
"label": "Imparfait",
":1s": _getConjWithTags(sVerb, self._tTags, ":Iq", ":1s"),
":2s": _getConjWithTags(sVerb, self._tTags, ":Iq", ":2s"),
":3s": _getConjWithTags(sVerb, self._tTags, ":Iq", ":3s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":Iq", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":Iq", ":2p"),
":3p": _getConjWithTags(sVerb, self._tTags, ":Iq", ":3p"),
},
":Is": {
"label": "Passé simple",
":1s": _getConjWithTags(sVerb, self._tTags, ":Is", ":1s"),
":2s": _getConjWithTags(sVerb, self._tTags, ":Is", ":2s"),
":3s": _getConjWithTags(sVerb, self._tTags, ":Is", ":3s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":Is", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":Is", ":2p"),
":3p": _getConjWithTags(sVerb, self._tTags, ":Is", ":3p"),
},
":If": {
"label": "Futur",
":1s": _getConjWithTags(sVerb, self._tTags, ":If", ":1s"),
":2s": _getConjWithTags(sVerb, self._tTags, ":If", ":2s"),
":3s": _getConjWithTags(sVerb, self._tTags, ":If", ":3s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":If", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":If", ":2p"),
":3p": _getConjWithTags(sVerb, self._tTags, ":If", ":3p"),
},
":Sp": {
"label": "Présent subjonctif",
":1s": _getConjWithTags(sVerb, self._tTags, ":Sp", ":1s"),
":1ś": _getConjWithTags(sVerb, self._tTags, ":Sp", ":1ś"),
":2s": _getConjWithTags(sVerb, self._tTags, ":Sp", ":2s"),
":3s": _getConjWithTags(sVerb, self._tTags, ":Sp", ":3s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":Sp", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":Sp", ":2p"),
":3p": _getConjWithTags(sVerb, self._tTags, ":Sp", ":3p"),
},
":Sq": {
"label": "Imparfait subjonctif",
":1s": _getConjWithTags(sVerb, self._tTags, ":Sq", ":1s"),
":1ś": _getConjWithTags(sVerb, self._tTags, ":Sq", ":1ś"),
":2s": _getConjWithTags(sVerb, self._tTags, ":Sq", ":2s"),
":3s": _getConjWithTags(sVerb, self._tTags, ":Sq", ":3s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":Sq", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":Sq", ":2p"),
":3p": _getConjWithTags(sVerb, self._tTags, ":Sq", ":3p"),
},
":K": {
"label": "Conditionnel",
":1s": _getConjWithTags(sVerb, self._tTags, ":K", ":1s"),
":2s": _getConjWithTags(sVerb, self._tTags, ":K", ":2s"),
":3s": _getConjWithTags(sVerb, self._tTags, ":K", ":3s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":K", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":K", ":2p"),
":3p": _getConjWithTags(sVerb, self._tTags, ":K", ":3p"),
},
":E": {
"label": "Impératif",
":2s": _getConjWithTags(sVerb, self._tTags, ":E", ":2s"),
":1p": _getConjWithTags(sVerb, self._tTags, ":E", ":1p"),
":2p": _getConjWithTags(sVerb, self._tTags, ":E", ":2p"),
},
}
def _readableInfo (self):
"returns readable infos about sVerb"
try:
if not self._sRawInfo:
return "verbe inconnu"
if self._sRawInfo[7:8] == "e":
self.sVerbAux = "être"
else:
self.sVerbAux = "avoir"
sGroup = _dGroup.get(self._sRawInfo[0], "# erreur ")
s = ""
if self._sRawInfo[3:4] == "t":
s = "transitif"
elif self._sRawInfo[4:5] == "n":
s = "transitif indirect"
elif self._sRawInfo[2:3] == "i":
s = "intransitif"
elif self._sRawInfo[5:6] == "r":
s = "pronominal réciproque"
elif self._sRawInfo[5:6] == "p":
s = "pronominal"
if self._sRawInfo[5:6] == "q" or self._sRawInfo[5:6] == "e":
s = s + " (+ usage pronominal)"
if self._sRawInfo[6:7] == "m":
s = s + " impersonnel"
if not s:
s = "# erreur - code : " + self._sRawInfo
return sGroup + " · " + s
except:
traceback.print_exc()
return "# erreur"
def infinitif (self, bPro, bNeg, bTpsCo, bInt, bFem):
try:
if bTpsCo:
sInfi = self.sVerbAux if not bPro else "être"
else:
sInfi = self.sVerb
if bPro:
if self.bProWithEn:
sInfi = "s’en " + sInfi
else:
sInfi = "s’" + sInfi if _zStartVoy.search(sInfi) else "se " + sInfi
if bNeg:
sInfi = "ne pas " + sInfi
if bTpsCo:
sInfi += " " + self._seekPpas(bPro, bFem, self._sRawInfo[5] == "r")
if bInt:
sInfi += " … ?"
return sInfi
except:
traceback.print_exc()
return "# erreur"
def participePasse (self, sWho):
try:
return self.dConj[":PQ"][sWho]
except:
traceback.print_exc()
return "# erreur"
def participePresent (self, bPro, bNeg, bTpsCo, bInt, bFem):
try:
if not self.dConj[":PQ"][":P"]:
return ""
if bTpsCo:
s = _getConjWithTags(self.sVerbAux, self._tTagsAux, ":PQ", ":P") if not bPro else getConj("être", ":PQ", ":P")
else:
s = self.dConj[":PQ"][":P"]
if not s:
return ""
bEli = True if _zStartVoy.search(s) else False
if bPro:
if self.bProWithEn:
s = "s’en " + s
else:
s = "s’" + s if bEli else "se " + s
if bNeg:
if bEli and not bPro:
s = "n’" + s + " pas"
else:
s = "ne " + s + " pas"
if bTpsCo:
s += " " + self._seekPpas(bPro, bFem, self._sRawInfo[5] == "r")
if bInt:
s += " … ?"
return s
except:
traceback.print_exc()
return "# erreur"
def conjugue (self, sTemps, sWho, bPro, bNeg, bTpsCo, bInt, bFem):
try:
if not self.dConj[sTemps][sWho]:
return ""
if not bTpsCo and bInt and sWho == ":1s" and self.dConj[sTemps].get(":1ś", False):
sWho = ":1ś"
if bTpsCo:
s = _getConjWithTags(self.sVerbAux, self._tTagsAux, sTemps, sWho) if not bPro else getConj("être", sTemps, sWho)
else:
s = self.dConj[sTemps][sWho]
if not s:
return ""
bEli = True if _zStartVoy.search(s) else False
if bPro:
if not self.bProWithEn:
s = _dProObjEl[sWho] + s if bEli else _dProObj[sWho] + s
else:
s = _dProObjEl[sWho] + "en " + s
if bNeg:
s = "n’" + s if bEli and not bPro else "ne " + s
if bInt:
if sWho == ":3s" and not _zNeedTeuph.search(s):
s += "-t"
s += "-" + self._getPronom(sWho, bFem)
else:
if sWho == ":1s" and bEli and not bNeg and not bPro:
s = "j’" + s
else:
s = self._getPronom(sWho, bFem) + " " + s
if bNeg:
s += " pas"
if bTpsCo:
s += " " + self._seekPpas(bPro, bFem, sWho.endswith("p") or self._sRawInfo[5] == "r")
if bInt:
s += " … ?"
return s
except:
traceback.print_exc()
return "# erreur"
def _getPronom (self, sWho, bFem):
try:
if sWho == ":3s":
if self._sRawInfo[5] == "r":
return "on"
elif bFem:
return "elle"
elif sWho == ":3p" and bFem:
return "elles"
return _dProSuj[sWho]
except:
traceback.print_exc()
return "# erreur"
def imperatif (self, sWho, bPro, bNeg, bTpsCo, bFem):
try:
if not self.dConj[":E"][sWho]:
return ""
if bTpsCo:
s = _getConjWithTags(self.sVerbAux, self._tTagsAux, ":E", sWho) if not bPro else getConj(u"être", ":E", sWho)
else:
s = self.dConj[":E"][sWho]
if not s:
return ""
bEli = True if _zStartVoy.search(s) else False
if bNeg:
if bPro:
if not self.bProWithEn:
if bEli and sWho == ":2s":
s = "ne t’" + s + " pas"
else:
s = _dImpeProNeg[sWho] + s + " pas"
else:
s = _dImpeProNegEn[sWho] + s + " pas"
else:
s = "n’" + s + " pas" if bEli else "ne " + s + " pas"
elif bPro:
s = s + _dImpeProEn[sWho] if self.bProWithEn else s + _dImpePro[sWho]
if bTpsCo:
return s + " " + self._seekPpas(bPro, bFem, sWho.endswith("p") or self._sRawInfo[5] == "r")
return s
except:
traceback.print_exc()
return "# erreur"
def _seekPpas (self, bPro, bFem, bPlur):
try:
if not bPro and self.sVerbAux == "avoir":
return self.dConj[":PQ"][":Q1"]
if not bFem:
return self.dConj[":PQ"][":Q2"] if bPlur and self.dConj[":PQ"][":Q2"] else self.dConj[":PQ"][":Q1"]
if not bPlur:
return self.dConj[":PQ"][":Q3"] if self.dConj[":PQ"][":Q3"] else self.dConj[":PQ"][":Q1"]
return self.dConj[":PQ"][":Q4"] if self.dConj[":PQ"][":Q4"] else self.dConj[":PQ"][":Q1"]
except:
traceback.print_exc()
return "# erreur"
|
Added gc_lang/fr/modules/conj_data.py version [1f45433f5a].
cannot compute difference between binary files
Added gc_lang/fr/modules/cregex.py version [a0df0d1397].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 |
# Grammalecte - Compiled regular expressions
import re
#### Lemme
Lemma = re.compile("^>(\w[\w-]*)")
#### Analyses
Gender = re.compile(":[mfe]")
Number = re.compile(":[spi]")
#### Nom et adjectif
NA = re.compile(":[NA]")
## nombre
NAs = re.compile(":[NA].*:s")
NAp = re.compile(":[NA].*:p")
NAi = re.compile(":[NA].*:i")
NAsi = re.compile(":[NA].*:[si]")
NApi = re.compile(":[NA].*:[pi]")
## genre
NAm = re.compile(":[NA].*:m")
NAf = re.compile(":[NA].*:f")
NAe = re.compile(":[NA].*:e")
NAme = re.compile(":[NA].*:[me]")
NAfe = re.compile(":[NA].*:[fe]")
## nombre et genre
# singuilier
NAms = re.compile(":[NA].*:m.*:s")
NAfs = re.compile(":[NA].*:f.*:s")
NAes = re.compile(":[NA].*:e.*:s")
NAmes = re.compile(":[NA].*:[me].*:s")
NAfes = re.compile(":[NA].*:[fe].*:s")
# singulier et invariable
NAmsi = re.compile(":[NA].*:m.*:[si]")
NAfsi = re.compile(":[NA].*:f.*:[si]")
NAesi = re.compile(":[NA].*:e.*:[si]")
NAmesi = re.compile(":[NA].*:[me].*:[si]")
NAfesi = re.compile(":[NA].*:[fe].*:[si]")
# pluriel
NAmp = re.compile(":[NA].*:m.*:p")
NAfp = re.compile(":[NA].*:f.*:p")
NAep = re.compile(":[NA].*:e.*:p")
NAmep = re.compile(":[NA].*:[me].*:p")
NAfep = re.compile(":[NA].*:[me].*:p")
# pluriel et invariable
NAmpi = re.compile(":[NA].*:m.*:[pi]")
NAfpi = re.compile(":[NA].*:f.*:[pi]")
NAepi = re.compile(":[NA].*:e.*:[pi]")
NAmepi = re.compile(":[NA].*:[me].*:[pi]")
NAfepi = re.compile(":[NA].*:[fe].*:[pi]")
# divers
AD = re.compile(":[AB]")
#### Verbe
Vconj = re.compile(":[123][sp]")
Vconj123 = re.compile(":V[123].*:[123][sp]")
#### Nom | Adjectif | Verbe
NVconj = re.compile(":(?:N|[123][sp])")
NAVconj = re.compile(":(?:N|A|[123][sp])")
#### Spécifique
NnotA = re.compile(":N(?!:A)")
PNnotA = re.compile(":(?:N(?!:A)|Q)")
#### Noms propres
NP = re.compile(":(?:M[12P]|T)")
NPm = re.compile(":(?:M[12P]|T):m")
NPf = re.compile(":(?:M[12P]|T):f")
NPe = re.compile(":(?:M[12P]|T):e")
#### FONCTIONS
def getLemmaOfMorph (s):
return Lemma.search(s).group(1)
def checkAgreement (l1, l2):
# check number agreement
if not mbInv(l1) and not mbInv(l2):
if mbSg(l1) and not mbSg(l2):
return False
if mbPl(l1) and not mbPl(l2):
return False
# check gender agreement
if mbEpi(l1) or mbEpi(l2):
return True
if mbMas(l1) and not mbMas(l2):
return False
if mbFem(l1) and not mbFem(l2):
return False
return True
def checkConjVerb (lMorph, sReqConj):
return any(sReqConj in s for s in lMorph)
def getGender (lMorph):
"returns gender of word (':m', ':f', ':e' or empty string)."
sGender = ""
for sMorph in lMorph:
m = Gender.search(sMorph)
if m:
if not sGender:
sGender = m.group(0)
elif sGender != m.group(0):
return ":e"
return sGender
def getNumber (lMorph):
"returns number of word (':s', ':p', ':i' or empty string)."
sNumber = ""
for sMorph in lMorph:
m = Number.search(sWord)
if m:
if not sNumber:
sNumber = m.group(0)
elif sNumber != m.group(0):
return ":i"
return sNumber
# NOTE : isWhat (lMorph) returns True if lMorph contains nothing else than What
# mbWhat (lMorph) returns True if lMorph contains What at least once
## isXXX = it’s certain
def isNom (lMorph):
return all(":N" in s for s in lMorph)
def isNomNotAdj (lMorph):
return all(NnotA.search(s) for s in lMorph)
def isAdj (lMorph):
return all(":A" in s for s in lMorph)
def isNomAdj (lMorph):
return all(NA.search(s) for s in lMorph)
def isNomVconj (lMorph):
return all(NVconj.search(s) for s in lMorph)
def isInv (lMorph):
return all(":i" in s for s in lMorph)
def isSg (lMorph):
return all(":s" in s for s in lMorph)
def isPl (lMorph):
return all(":p" in s for s in lMorph)
def isEpi (lMorph):
return all(":e" in s for s in lMorph)
def isMas (lMorph):
return all(":m" in s for s in lMorph)
def isFem (lMorph):
return all(":f" in s for s in lMorph)
## mbXXX = MAYBE XXX
def mbNom (lMorph):
return any(":N" in s for s in lMorph)
def mbAdj (lMorph):
return any(":A" in s for s in lMorph)
def mbAdjNb (lMorph):
return any(AD.search(s) for s in lMorph)
def mbNomAdj (lMorph):
return any(NA.search(s) for s in lMorph)
def mbNomNotAdj (lMorph):
b = False
for s in lMorph:
if ":A" in s:
return False
if ":N" in s:
b = True
return b
def mbPpasNomNotAdj (lMorph):
return any(PNnotA.search(s) for s in lMorph)
def mbVconj (lMorph):
return any(Vconj.search(s) for s in lMorph)
def mbVconj123 (lMorph):
return any(Vconj123.search(s) for s in lMorph)
def mbMG (lMorph):
return any(":G" in s for s in lMorph)
def mbInv (lMorph):
return any(":i" in s for s in lMorph)
def mbSg (lMorph):
return any(":s" in s for s in lMorph)
def mbPl (lMorph):
return any(":p" in s for s in lMorph)
def mbEpi (lMorph):
return any(":e" in s for s in lMorph)
def mbMas (lMorph):
return any(":m" in s for s in lMorph)
def mbFem (lMorph):
return any(":f" in s for s in lMorph)
def mbNpr (lMorph):
return any(NP.search(s) for s in lMorph)
def mbNprMasNotFem (lMorph):
if any(NPf.search(s) for s in lMorph):
return False
return any(NPm.search(s) for s in lMorph)
|
Added gc_lang/fr/modules/gce_analyseur.py version [39975de0ac].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
#### GRAMMAR CHECKING ENGINE PLUGIN: Parsing functions for French language
from . import cregex as cr
def rewriteSubject (s1, s2):
# s1 is supposed to be prn/patr/npr (M[12P])
if s2 == "lui":
return "ils"
if s2 == "moi":
return "nous"
if s2 == "toi":
return "vous"
if s2 == "nous":
return "nous"
if s2 == "vous":
return "vous"
if s2 == "eux":
return "ils"
if s2 == "elle" or s2 == "elles":
# We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
if cr.mbNprMasNotFem(_dAnalyses.get(s1, False)):
return "ils"
# si épicène, indéterminable, mais OSEF, le féminin l’emporte
return "elles"
return s1 + " et " + s2
def apposition (sWord1, sWord2):
"returns True if nom + nom (no agreement required)"
# We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
return cr.mbNomNotAdj(_dAnalyses.get(sWord2, False)) and cr.mbPpasNomNotAdj(_dAnalyses.get(sWord1, False))
def isAmbiguousNAV (sWord):
"words which are nom|adj and verb are ambiguous (except être and avoir)"
if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord):
return False
if not cr.mbNomAdj(_dAnalyses[sWord]) or sWord == "est":
return False
if cr.mbVconj(_dAnalyses[sWord]) and not cr.mbMG(_dAnalyses[sWord]):
return True
return False
def isAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj):
"use it if sWord1 won’t be a verb; word2 is assumed to be True via isAmbiguousNAV"
# We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
a2 = _dAnalyses.get(sWord2, None)
if not a2:
return False
if cr.checkConjVerb(a2, sReqMorphConj):
# verb word2 is ok
return False
a1 = _dAnalyses.get(sWord1, None)
if not a1:
return False
if cr.checkAgreement(a1, a2) and (cr.mbAdj(a2) or cr.mbAdj(a1)):
return False
return True
def isVeryAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj, bLastHopeCond):
"use it if sWord1 can be also a verb; word2 is assumed to be True via isAmbiguousNAV"
# We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
a2 = _dAnalyses.get(sWord2, None)
if not a2:
return False
if cr.checkConjVerb(a2, sReqMorphConj):
# verb word2 is ok
return False
a1 = _dAnalyses.get(sWord1, None)
if not a1:
return False
if cr.checkAgreement(a1, a2) and (cr.mbAdj(a2) or cr.mbAdjNb(a1)):
return False
# now, we know there no agreement, and conjugation is also wrong
if cr.isNomAdj(a1):
return True
#if cr.isNomAdjVerb(a1): # considered True
if bLastHopeCond:
return True
return False
def checkAgreement (sWord1, sWord2):
# We don’t check if word exists in _dAnalyses, for it is assumed it has been done before
a2 = _dAnalyses.get(sWord2, None)
if not a2:
return True
a1 = _dAnalyses.get(sWord1, None)
if not a1:
return True
return cr.checkAgreement(a1, a2)
_zUnitSpecial = re.compile("[µ/⁰¹²³⁴⁵⁶⁷⁸⁹Ωℓ·]")
_zUnitNumbers = re.compile("[0-9]")
def mbUnit (s):
if _zUnitSpecial.search(s):
return True
if 1 < len(s) < 16 and s[0:1].islower() and (not s[1:].islower() or _zUnitNumbers.search(s)):
return True
return False
#### Syntagmes
_zEndOfNG1 = re.compile(" *$| +(?:, +|)(?:n(?:’|e |o(?:u?s|tre) )|l(?:’|e(?:urs?|s|) |a )|j(?:’|e )|m(?:’|es? |a |on )|t(?:’|es? |a |u )|s(?:’|es? |a )|c(?:’|e(?:t|tte|s|) )|ç(?:a |’)|ils? |vo(?:u?s|tre) )")
_zEndOfNG2 = re.compile(r" +(\w[\w-]+)")
_zEndOfNG3 = re.compile(r" *, +(\w[\w-]+)")
def isEndOfNG (dDA, s, iOffset):
if _zEndOfNG1.match(s):
return True
m = _zEndOfNG2.match(s)
if m and morphex(dDA, (iOffset+m.start(1), m.group(1)), ":[VR]", ":[NAQP]"):
return True
m = _zEndOfNG3.match(s)
if m and not morph(dDA, (iOffset+m.start(1), m.group(1)), ":[NA]", False):
return True
return False
_zNextIsNotCOD1 = re.compile(" *,")
_zNextIsNotCOD2 = re.compile(" +(?:[mtsnj](e +|’)|[nv]ous |tu |ils? |elles? )")
_zNextIsNotCOD3 = re.compile(r" +([a-zéèî][\w-]+)")
def isNextNotCOD (dDA, s, iOffset):
if _zNextIsNotCOD1.match(s) or _zNextIsNotCOD2.match(s):
return True
m = _zNextIsNotCOD3.match(s)
if m and morphex(dDA, (iOffset+m.start(1), m.group(1)), ":[123][sp]", ":[DM]"):
return True
return False
_zNextIsVerb1 = re.compile(" +[nmts](?:e |’)")
_zNextIsVerb2 = re.compile(r" +(\w[\w-]+)")
def isNextVerb (dDA, s, iOffset):
if _zNextIsVerb1.match(s):
return True
m = _zNextIsVerb2.match(s)
if m and morph(dDA, (iOffset+m.start(1), m.group(1)), ":[123][sp]", False):
return True
return False
#### Exceptions
aREGULARPLURAL = frozenset(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café", \
"carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille", \
"jonquille", "marron", "olive", "pervenche", "prune", "sable"])
aSHOULDBEVERB = frozenset(["aller", "manger"])
|
Added gc_lang/fr/modules/gce_date_verif.py version [1265100649].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#### GRAMMAR CHECKING ENGINE PLUGIN
#### Check date validity
_lDay = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"]
_dMonth = { "janvier":1, "février":2, "mars":3, "avril":4, "mai":5, "juin":6, "juillet":7, "août":8, "aout":8, "septembre":9, "octobre":10, "novembre":11, "décembre":12 }
import datetime
def checkDate (day, month, year):
"to use if month is a number"
try:
return datetime.date(int(year), int(month), int(day))
except ValueError:
return False
except:
return True
def checkDateWithString (day, month, year):
"to use if month is a noun"
try:
return datetime.date(int(year), _dMonth.get(month.lower(), ""), int(day))
except ValueError:
return False
except:
return True
def checkDay (weekday, day, month, year):
"to use if month is a number"
oDate = checkDate(day, month, year)
if oDate and _lDay[oDate.weekday()] != weekday.lower():
return False
return True
def checkDayWithString (weekday, day, month, year):
"to use if month is a noun"
oDate = checkDate(day, _dMonth.get(month, ""), year)
if oDate and _lDay[oDate.weekday()] != weekday.lower():
return False
return True
def getDay (day, month, year):
"to use if month is a number"
return _lDay[datetime.date(int(year), int(month), int(day)).weekday()]
def getDayWithString (day, month, year):
"to use if month is a noun"
return _lDay[datetime.date(int(year), _dMonth.get(month.lower(), ""), int(day)).weekday()]
|
Added gc_lang/fr/modules/gce_suggestions.py version [69bb078e98].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 |
#### GRAMMAR CHECKING ENGINE PLUGIN: Suggestion mechanisms
from . import conj
from . import mfsp
from . import phonet
## Verbs
def suggVerb (sFlex, sWho, funcSugg2=None):
aSugg = set()
for sStem in stem(sFlex):
tTags = conj._getTags(sStem)
if tTags:
# we get the tense
aTense = set()
for sMorph in _dAnalyses.get(sFlex, []): # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
for m in re.finditer(sStem+" .*?(:(?:Y|I[pqsf]|S[pq]|K|P))", sMorph):
# stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer)
if m:
if m.group(1) == ":Y":
aTense.add(":Ip")
aTense.add(":Iq")
aTense.add(":Is")
elif m.group(1) == ":P":
aTense.add(":Ip")
else:
aTense.add(m.group(1))
for sTense in aTense:
if sWho == ":1ś" and not conj._hasConjWithTags(tTags, sTense, ":1ś"):
sWho = ":1s"
if conj._hasConjWithTags(tTags, sTense, sWho):
aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho))
if funcSugg2:
aSugg2 = funcSugg2(sFlex)
if aSugg2:
aSugg.add(aSugg2)
if aSugg:
return "|".join(aSugg)
return ""
def suggVerbPpas (sFlex, sWhat=None):
aSugg = set()
for sStem in stem(sFlex):
tTags = conj._getTags(sStem)
if tTags:
if not sWhat:
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"))
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"))
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"))
aSugg.discard("")
elif sWhat == ":m:s":
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
elif sWhat == ":m:p":
if conj._hasConjWithTags(tTags, ":PQ", ":Q2"):
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"))
else:
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
elif sWhat == ":f:s":
if conj._hasConjWithTags(tTags, ":PQ", ":Q3"):
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"))
else:
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
elif sWhat == ":f:p":
if conj._hasConjWithTags(tTags, ":PQ", ":Q4"):
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"))
else:
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
elif sWhat == ":s":
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"))
aSugg.discard("")
elif sWhat == ":p":
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"))
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"))
aSugg.discard("")
else:
aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
if aSugg:
return "|".join(aSugg)
return ""
def suggVerbTense (sFlex, sTense, sWho):
aSugg = set()
for sStem in stem(sFlex):
if conj.hasConj(sStem, sTense, sWho):
aSugg.add(conj.getConj(sStem, sTense, sWho))
if aSugg:
return "|".join(aSugg)
return ""
def suggVerbImpe (sFlex):
aSugg = set()
for sStem in stem(sFlex):
tTags = conj._getTags(sStem)
if tTags:
if conj._hasConjWithTags(tTags, ":E", ":2s"):
aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2s"))
if conj._hasConjWithTags(tTags, ":E", ":1p"):
aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":1p"))
if conj._hasConjWithTags(tTags, ":E", ":2p"):
aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2p"))
if aSugg:
return "|".join(aSugg)
return ""
def suggVerbInfi (sFlex):
return "|".join([ sStem for sStem in stem(sFlex) if conj.isVerb(sStem) ])
_dQuiEst = { "je": ":1s", "j’": ":1s", "j’en": ":1s", "j’y": ":1s", \
"tu": ":2s", "il": ":3s", "on": ":3s", "elle": ":3s", "nous": ":1p", "vous": ":2p", "ils": ":3p", "elles": ":3p" }
_lIndicatif = [":Ip", ":Iq", ":Is", ":If"]
_lSubjonctif = [":Sp", ":Sq"]
def suggVerbMode (sFlex, cMode, sSuj):
if cMode == ":I":
lMode = _lIndicatif
elif cMode == ":S":
lMode = _lSubjonctif
elif cMode.startswith((":I", ":S")):
lMode = [cMode]
else:
return ""
sWho = _dQuiEst.get(sSuj.lower(), None)
if not sWho:
if sSuj[0:1].islower(): # pas un pronom, ni un nom propre
return ""
sWho = ":3s"
aSugg = set()
for sStem in stem(sFlex):
tTags = conj._getTags(sStem)
if tTags:
for sTense in lMode:
if conj._hasConjWithTags(tTags, sTense, sWho):
aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho))
if aSugg:
return "|".join(aSugg)
return ""
## Nouns and adjectives
def suggPlur (sFlex, sWordToAgree=None):
"returns plural forms assuming sFlex is singular"
if sWordToAgree:
if sWordToAgree not in _dAnalyses and not _storeMorphFromFSA(sWordToAgree):
return ""
sGender = cr.getGender(_dAnalyses.get(sWordToAgree, []))
if sGender == ":m":
return suggMasPlur(sFlex)
elif sGender == ":f":
return suggFemPlur(sFlex)
aSugg = set()
if "-" not in sFlex:
if sFlex.endswith("l"):
if sFlex.endswith("al") and len(sFlex) > 2 and _oDict.isValid(sFlex[:-1]+"ux"):
aSugg.add(sFlex[:-1]+"ux")
if sFlex.endswith("ail") and len(sFlex) > 3 and _oDict.isValid(sFlex[:-2]+"ux"):
aSugg.add(sFlex[:-2]+"ux")
if _oDict.isValid(sFlex+"s"):
aSugg.add(sFlex+"s")
if _oDict.isValid(sFlex+"x"):
aSugg.add(sFlex+"x")
if mfsp.hasMiscPlural(sFlex):
aSugg.update(mfsp.getMiscPlural(sFlex))
if aSugg:
return "|".join(aSugg)
return ""
def suggSing (sFlex):
"returns singular forms assuming sFlex is plural"
if "-" in sFlex:
return ""
aSugg = set()
if sFlex.endswith("ux"):
if _oDict.isValid(sFlex[:-2]+"l"):
aSugg.add(sFlex[:-2]+"l")
if _oDict.isValid(sFlex[:-2]+"il"):
aSugg.add(sFlex[:-2]+"il")
if _oDict.isValid(sFlex[:-1]):
aSugg.add(sFlex[:-1])
if aSugg:
return "|".join(aSugg)
return ""
def suggMasSing (sFlex, bSuggSimil=False):
"returns masculine singular forms"
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
aSugg = set()
for sMorph in _dAnalyses.get(sFlex, []):
if not ":V" in sMorph:
# not a verb
if ":m" in sMorph or ":e" in sMorph:
aSugg.add(suggSing(sFlex))
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isFemForm(sStem):
aSugg.update(mfsp.getMasForm(sStem, False))
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":PQ", ":Q1") and conj.hasConj(sVerb, ":PQ", ":Q3"):
# We also check if the verb has a feminine form.
# If not, we consider it’s better to not suggest the masculine one, as it can be considered invariable.
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q1"))
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":m:[si]"):
aSugg.add(e)
if aSugg:
return "|".join(aSugg)
return ""
def suggMasPlur (sFlex, bSuggSimil=False):
"returns masculine plural forms"
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
aSugg = set()
for sMorph in _dAnalyses.get(sFlex, []):
if not ":V" in sMorph:
# not a verb
if ":m" in sMorph or ":e" in sMorph:
aSugg.add(suggPlur(sFlex))
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isFemForm(sStem):
aSugg.update(mfsp.getMasForm(sStem, True))
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":PQ", ":Q2"):
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2"))
elif conj.hasConj(sVerb, ":PQ", ":Q1"):
sSugg = conj.getConj(sVerb, ":PQ", ":Q1")
# it is necessary to filter these flexions, like “succédé” or “agi” that are not masculine plural.
if sSugg.endswith("s"):
aSugg.add(sSugg)
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":m:[pi]"):
aSugg.add(e)
if aSugg:
return "|".join(aSugg)
return ""
def suggFemSing (sFlex, bSuggSimil=False):
"returns feminine singular forms"
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
aSugg = set()
for sMorph in _dAnalyses.get(sFlex, []):
if not ":V" in sMorph:
# not a verb
if ":f" in sMorph or ":e" in sMorph:
aSugg.add(suggSing(sFlex))
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isFemForm(sStem):
aSugg.add(sStem)
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":PQ", ":Q3"):
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q3"))
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":f:[si]"):
aSugg.add(e)
if aSugg:
return "|".join(aSugg)
return ""
def suggFemPlur (sFlex, bSuggSimil=False):
"returns feminine plural forms"
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
aSugg = set()
for sMorph in _dAnalyses.get(sFlex, []):
if not ":V" in sMorph:
# not a verb
if ":f" in sMorph or ":e" in sMorph:
aSugg.add(suggPlur(sFlex))
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isFemForm(sStem):
aSugg.add(sStem+"s")
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":PQ", ":Q4"):
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q4"))
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":f:[pi]"):
aSugg.add(e)
if aSugg:
return "|".join(aSugg)
return ""
def hasFemForm (sFlex):
for sStem in stem(sFlex):
if mfsp.isFemForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q3"):
return True
if phonet.hasSimil(sFlex, ":f"):
return True
return False
def hasMasForm (sFlex):
for sStem in stem(sFlex):
if mfsp.isFemForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q1"):
# what has a feminine form also has a masculine form
return True
if phonet.hasSimil(sFlex, ":m"):
return True
return False
def switchGender (sFlex, bPlur=None):
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
aSugg = set()
if bPlur == None:
for sMorph in _dAnalyses.get(sFlex, []):
if ":f" in sMorph:
if ":s" in sMorph:
aSugg.add(suggMasSing(sFlex))
elif ":p" in sMorph:
aSugg.add(suggMasPlur(sFlex))
elif ":m" in sMorph:
if ":s" in sMorph:
aSugg.add(suggFemSing(sFlex))
elif ":p" in sMorph:
aSugg.add(suggFemPlur(sFlex))
else:
aSugg.add(suggFemSing(sFlex))
aSugg.add(suggFemPlur(sFlex))
elif bPlur:
for sMorph in _dAnalyses.get(sFlex, []):
if ":f" in sMorph:
aSugg.add(suggMasPlur(sFlex))
elif ":m" in sMorph:
aSugg.add(suggFemPlur(sFlex))
else:
for sMorph in _dAnalyses.get(sFlex, []):
if ":f" in sMorph:
aSugg.add(suggMasSing(sFlex))
elif ":m" in sMorph:
aSugg.add(suggFemSing(sFlex))
if aSugg:
return "|".join(aSugg)
return ""
def switchPlural (sFlex):
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
aSugg = set()
for sMorph in _dAnalyses.get(sFlex, []):
if ":s" in sMorph:
aSugg.add(suggPlur(sFlex))
elif ":p" in sMorph:
aSugg.add(suggSing(sFlex))
if aSugg:
return "|".join(aSugg)
return ""
def hasSimil (sWord, sPattern=None):
return phonet.hasSimil(sWord, sPattern)
def suggSimil (sWord, sPattern=None):
"return list of words phonetically similar to sWord and whom POS is matching sPattern"
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
aSugg = phonet.selectSimil(sWord, sPattern)
for sMorph in _dAnalyses.get(sWord, []):
for e in conj.getSimil(sWord, sMorph):
aSugg.add(e)
#aSugg = aSugg.union(conj.getSimil(sWord, sMorph))
if aSugg:
return "|".join(aSugg)
return ""
def suggCeOrCet (sWord):
if re.match("(?i)[aeéèêiouyâîï]", sWord):
return "cet"
if sWord[0:1] == "h" or sWord[0:1] == "H":
return "ce|cet"
return "ce"
def suggLesLa (sWord):
# we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
if any( ":p" in sMorph for sMorph in _dAnalyses.get(sWord, []) ):
return "les|la"
return "la"
_zBinary = re.compile("^[01]+$")
def formatNumber (s):
nLen = len(s)
if nLen <= 4:
return s
sRes = ""
# nombre ordinaire
nEnd = nLen
while nEnd > 0:
nStart = max(nEnd-3, 0)
sRes = s[nStart:nEnd] + " " + sRes if sRes else s[nStart:nEnd]
nEnd = nEnd - 3
# binaire
if _zBinary.search(s):
nEnd = nLen
sBin = ""
while nEnd > 0:
nStart = max(nEnd-4, 0)
sBin = s[nStart:nEnd] + " " + sBin if sBin else s[nStart:nEnd]
nEnd = nEnd - 4
sRes += "|" + sBin
# numéros de téléphone
if nLen == 10:
if s.startswith("0"):
sRes += "|" + s[0:2] + " " + s[2:4] + " " + s[4:6] + " " + s[6:8] + " " + s[8:] # téléphone français
if s[1] == "4" and (s[2]=="7" or s[2]=="8" or s[2]=="9"):
sRes += "|" + s[0:4] + " " + s[4:6] + " " + s[6:8] + " " + s[8:] # mobile belge
sRes += "|" + s[0:3] + " " + s[3:6] + " " + s[6:8] + " " + s[8:] # téléphone suisse
sRes += "|" + s[0:4] + " " + s[4:7] + "-" + s[7:] # téléphone canadien ou américain
elif nLen == 9 and s.startswith("0"):
sRes += "|" + s[0:3] + " " + s[3:5] + " " + s[5:7] + " " + s[7:9] # fixe belge 1
sRes += "|" + s[0:2] + " " + s[2:5] + " " + s[5:7] + " " + s[7:9] # fixe belge 2
return sRes
def formatNF (s):
try:
m = re.match("NF[ -]?(C|E|P|Q|S|X|Z|EN(?:[ -]ISO|))[ -]?([0-9]+(?:[/‑-][0-9]+|))", s)
if not m:
return ""
return "NF " + m.group(1).upper().replace(" ", " ").replace("-", " ") + " " + m.group(2).replace("/", "‑").replace("-", "‑")
except:
traceback.print_exc()
return "# erreur #"
def undoLigature (c):
if c == "fi":
return "fi"
elif c == "fl":
return "fl"
elif c == "ff":
return "ff"
elif c == "ffi":
return "ffi"
elif c == "ffl":
return "ffl"
elif c == "ſt":
return "ft"
elif c == "st":
return "st"
return "_"
|
Added gc_lang/fr/modules/lexicographe.py version [7b36598d08].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# Grammalecte - Lexicographe
# License: MPL 2
import re
import traceback
_dTAGS = {
':G': "",
':N': " nom,",
':A': " adjectif,",
':M1': " prénom,",
':M2': " patronyme,",
':MP': " nom propre,",
':W': " adverbe,",
':X': " adverbe de négation,",
':U': " adverbe interrogatif,",
':J': " interjection,",
':B': " nombre,",
':T': " titre,",
':R': " préposition,",
':Rv': " préposition verbale,",
':D': " déterminant,",
':Dd': " déterminant démonstratif,",
':De': " déterminant exclamatif,",
':Dp': " déterminant possessif,",
':Di': " déterminant indéfini,",
':Dn': " déterminant négatif,",
':Od': " pronom démonstratif,",
':Oi': " pronom indéfini,",
':On': " pronom indéfini négatif,",
':Ot': " pronom interrogatif,",
':Or': " pronom relatif,",
':Ow': " pronom adverbial,",
':Os': " pronom personnel sujet,",
':Oo': " pronom personnel objet,",
':C': " conjonction,",
':Ĉ': " conjonction (él.),",
':Cc': " conjonction de coordination,",
':Cs': " conjonction de subordination,",
':Ĉs': " conjonction de subordination (él.),",
':Ŵ': " locution adverbiale (él.),",
':Ñ': " locution nominale (él.),",
':Â': " locution adjectivale (él.),",
':Ṽ': " locution verbale (él.),",
':Ŕ': " locution prépositive (él.),",
':Ĵ': " locution interjective (él.),",
':Zp': " préfixe,",
':Zs': " suffixe,",
':V1': " verbe (1ᵉʳ gr.),",
':V2': " verbe (2ᵉ gr.),",
':V3': " verbe (3ᵉ gr.),",
':V0e': " verbe,",
':V0a': " verbe,",
':O1': " 1ʳᵉ pers.,",
':O2': " 2ᵉ pers.,",
':O3': " 3ᵉ pers.,",
':e': " épicène",
':m': " masculin",
':f': " féminin",
':s': " singulier",
':p': " pluriel",
':i': " invariable",
':Y': " infinitif,",
':P': " participe présent,",
':Q': " participe passé,",
':Ip': " présent,",
':Iq': " imparfait,",
':Is': " passé simple,",
':If': " futur,",
':K': " conditionnel présent,",
':Sp': " subjonctif présent,",
':Sq': " subjonctif imparfait,",
':E': " impératif,",
':1s': " 1ʳᵉ p. sg.,",
':1ŝ': " présent interr. 1ʳᵉ p. sg.,",
':1ś': " présent interr. 1ʳᵉ p. sg.,",
':2s': " 2ᵉ p. sg.,",
':3s': " 3ᵉ p. sg.,",
':1p': " 1ʳᵉ p. pl.,",
':2p': " 2ᵉ p. pl.,",
':3p': " 3ᵉ p. pl.,",
':3p!': " 3ᵉ p. pl.,",
';S': " : symbole (unité de mesure)",
'/*': "",
'/C': " {classique}",
'/M': "",
'/R': " {réforme}",
'/A': "",
'/X': ""
}
_dPFX = {
'd': "(de), déterminant épicène invariable",
'l': "(le/la), déterminant masculin/féminin singulier",
'j': "(je), pronom personnel sujet, 1ʳᵉ pers., épicène singulier",
'm': "(me), pronom personnel objet, 1ʳᵉ pers., épicène singulier",
't': "(te), pronom personnel objet, 2ᵉ pers., épicène singulier",
's': "(se), pronom personnel objet, 3ᵉ pers., épicène singulier/pluriel",
'n': "(ne), adverbe de négation",
'c': "(ce), pronom démonstratif, masculin singulier/pluriel",
'ç': "(ça), pronom démonstratif, masculin singulier",
'qu': "(que), conjonction de subordination",
'lorsqu': "(lorsque), conjonction de subordination",
'quoiqu': "(quoique), conjonction de subordination",
'jusqu': "(jusque), préposition",
}
_dAD = {
'je': " pronom personnel sujet, 1ʳᵉ pers. sing.",
'tu': " pronom personnel sujet, 2ᵉ pers. sing.",
'il': " pronom personnel sujet, 3ᵉ pers. masc. sing.",
'on': " pronom personnel sujet, 3ᵉ pers. sing. ou plur.",
'elle': " pronom personnel sujet, 3ᵉ pers. fém. sing.",
'nous': " pronom personnel sujet/objet, 1ʳᵉ pers. plur.",
'vous': " pronom personnel sujet/objet, 2ᵉ pers. plur.",
'ils': " pronom personnel sujet, 3ᵉ pers. masc. plur.",
'elles': " pronom personnel sujet, 3ᵉ pers. masc. plur.",
"là": " particule démonstrative",
"ci": " particule démonstrative",
'le': " COD, masc. sing.",
'la': " COD, fém. sing.",
'les': " COD, plur.",
'moi': " COI (à moi), sing.",
'toi': " COI (à toi), sing.",
'lui': " COI (à lui ou à elle), sing.",
'nous2': " COI (à nous), plur.",
'vous2': " COI (à vous), plur.",
'leur': " COI (à eux ou à elles), plur.",
'y': " pronom adverbial",
"m'y": " (me) pronom personnel objet + (y) pronom adverbial",
"t'y": " (te) pronom personnel objet + (y) pronom adverbial",
"s'y": " (se) pronom personnel objet + (y) pronom adverbial",
'en': " pronom adverbial",
"m'en": " (me) pronom personnel objet + (en) pronom adverbial",
"t'en": " (te) pronom personnel objet + (en) pronom adverbial",
"s'en": " (se) pronom personnel objet + (en) pronom adverbial",
}
class Lexicographe:
def __init__ (self, oDict):
self.oDict = oDict
self._zElidedPrefix = re.compile("(?i)^([dljmtsncç]|quoiqu|lorsqu|jusqu|puisqu|qu)['’](.+)")
self._zCompoundWord = re.compile("(?i)(\\w+)-((?:les?|la)-(?:moi|toi|lui|[nv]ous|leur)|t-(?:il|elle|on)|y|en|[mts][’'](?:y|en)|les?|l[aà]|[mt]oi|leur|lui|je|tu|ils?|elles?|on|[nv]ous)$")
self._zTag = re.compile("[:;/][\\w*][^:;/]*")
def analyzeWord (self, sWord):
try:
if not sWord:
return (None, None)
if sWord.count("-") > 4:
return (["élément complexe indéterminé"], None)
if sWord.isdigit():
return (["nombre"], None)
aMorph = []
# préfixes élidés
m = self._zElidedPrefix.match(sWord)
if m:
sWord = m.group(2)
aMorph.append( "{}’ : {}".format(m.group(1), _dPFX.get(m.group(1).lower(), "[?]")) )
# mots composés
m2 = self._zCompoundWord.match(sWord)
if m2:
sWord = m2.group(1)
# Morphologies
lMorph = self.oDict.getMorph(sWord)
if len(lMorph) > 1:
# sublist
aMorph.append( (sWord, [ self.formatTags(s) for s in lMorph if ":" in s ]) )
elif len(lMorph) == 1:
aMorph.append( "{} : {}".format(sWord, self.formatTags(lMorph[0])) )
else:
aMorph.append( "{} : inconnu du dictionnaire".format(sWord) )
# suffixe d’un mot composé
if m2:
aMorph.append( "-{} : {}".format(m2.group(2), self._formatSuffix(m2.group(2).lower())) )
# Verbes
aVerb = set([ s[1:s.find(" ")] for s in lMorph if ":V" in s ])
return (aMorph, aVerb)
except:
traceback.print_exc()
return (["#erreur"], None)
def formatTags (self, sTags):
sRes = ""
sTags = re.sub("(?<=V[1-3])[itpqnmr_eaxz]+", "", sTags)
sTags = re.sub("(?<=V0[ea])[itpqnmr_eaxz]+", "", sTags)
for m in self._zTag.finditer(sTags):
sRes += _dTAGS.get(m.group(0), " [{}]".format(m.group(0)))
if sRes.startswith(" verbe") and not sRes.endswith("infinitif"):
sRes += " [{}]".format(sTags[1:sTags.find(" ")])
return sRes.rstrip(",")
def _formatSuffix (self, s):
if s.startswith("t-"):
return "“t” euphonique +" + _dAD.get(s[2:], "[?]")
if not "-" in s:
return _dAD.get(s.replace("’", "'"), "[?]")
if s.endswith("ous"):
s += '2'
nPos = s.find("-")
return "%s +%s" % (_dAD.get(s[:nPos], "[?]"), _dAD.get(s[nPos+1:], "[?]"))
|
Added gc_lang/fr/modules/mfsp.py version [3f4814b5d6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# Masculins, féminins, singuliers et pluriels
from .mfsp_data import lTagMiscPlur as _lTagMiscPlur
from .mfsp_data import lTagMasForm as _lTagMasForm
from .mfsp_data import dMiscPlur as _dMiscPlur
from .mfsp_data import dMasForm as _dMasForm
def isFemForm (sWord):
"returns True if sWord exists in _dMasForm"
return sWord in _dMasForm
def getMasForm (sWord, bPlur):
"returns masculine form with feminine form"
if sWord in _dMasForm:
return [ _modifyStringWithSuffixCode(sWord, sTag) for sTag in _whatSuffixCodes(sWord, bPlur) ]
return []
def hasMiscPlural (sWord):
"returns True if sWord exists in dPlurMisc"
return sWord in _dMiscPlur
def getMiscPlural (sWord):
"returns plural form with singular form"
if sWord in _dMiscPlur:
return [ _modifyStringWithSuffixCode(sWord, sTag) for sTag in _lTagMiscPlur[_dMiscPlur[sWord]].split("|") ]
return []
def _whatSuffixCodes (sWord, bPlur):
"necessary only for dMasFrom"
sSfx = _lTagMasForm[_dMasForm[sWord]]
if "/" in sSfx:
if bPlur:
return sSfx[sSfx.find("/")+1:].split("|")
return sSfx[:sSfx.find("/")].split("|")
return sSfx.split("|")
def _modifyStringWithSuffixCode (sWord, sSfx):
"returns sWord modified by sSfx"
if not sSfx:
return ""
if sSfx == "0":
return sWord
try:
return sWord[:-(ord(sSfx[0])-48)] + sSfx[1:] if sSfx[0] != '0' else sWord + sSfx[1:] # 48 is the ASCII code for "0"
except:
return "## erreur, code : " + str(sSfx) + " ##"
|
Added gc_lang/fr/modules/mfsp_data.py version [8ed17e4282].
cannot compute difference between binary files
Added gc_lang/fr/modules/phonet.py version [31589198ae].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# Grammalecte - Suggestion phonétique
# License: GPL 3
import re
from .phonet_data import dWord as _dWord
from .phonet_data import lSet as _lSet
from .phonet_data import dMorph as _dMorph
def hasSimil (sWord, sPattern=None):
"return True if there is list of words phonetically similar to sWord"
if not sWord:
return False
if sWord in _dWord:
if sPattern:
return any(re.search(sPattern, sMorph) for sSimil in getSimil(sWord) for sMorph in _dMorph.get(sSimil, []))
return True
if sWord[0:1].isupper():
sWord = sWord.lower()
if sWord in _dWord:
if sPattern:
return any(re.search(sPattern, sMorph) for sSimil in getSimil(sWord) for sMorph in _dMorph.get(sSimil, []))
return True
return False
def getSimil (sWord):
"return list of words phonetically similar to sWord"
if not sWord:
return []
if sWord in _dWord:
return _lSet[_dWord[sWord]]
if sWord[0:1].isupper():
sWord = sWord.lower()
if sWord in _dWord:
return _lSet[_dWord[sWord]]
return []
def selectSimil (sWord, sPattern):
"return list of words phonetically similar to sWord and whom POS is matching sPattern"
if not sPattern:
return set(getSimil(sWord))
aSelect = set()
for sSimil in getSimil(sWord):
for sMorph in _dMorph.get(sSimil, []):
if re.search(sPattern, sMorph):
aSelect.add(sSimil)
return aSelect
|
Added gc_lang/fr/modules/phonet_data.py version [1ca07d9e62].
cannot compute difference between binary files
Added gc_lang/fr/modules/textformatter.py version [5aeef53f27].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 |
#!python3
import re
from ..echo import echo
dReplTable = {
# surnumerary_spaces
"start_of_paragraph": [("^[ ]+", "")],
"end_of_paragraph": [("[ ]+$", "")],
"between_words": [(" | ", " "), # espace + espace insécable -> espace
(" +", " "), # espaces surnuméraires
(" +", " ")], # espaces insécables surnuméraires
"before_punctuation": [(" +(?=[.,…])", "")],
"within_parenthesis": [("\\([ ]+", "("),
("[ ]+\\)", ")")],
"within_square_brackets": [("\\[[ ]+", "["),
("[ ]+\\]", "]")],
"within_quotation_marks": [("“[ ]+", "“"),
("[ ]”", "”")],
## non-breaking spaces
# espaces insécables
"nbsp_before_punctuation": [("(?<=[]\\w…)»}])([:;?!])[ ]", " \\1 "),
("(?<=[]\\w…)»}])([:;?!])$", " \\1"),
("[ ]+([:;?!])", " \\1")],
"nbsp_within_quotation_marks": [("«(?=\\w)", "« "),
("«[ ]+", "« "),
("(?<=[\\w.!?])»", " »"),
("[ ]+»", " »")],
"nbsp_within_numbers": [("(\\d)[ ](?=\\d)", "\\1 ")],
# espaces insécables fines
"nnbsp_before_punctuation": [("(?<=[]\\w…)»}])([;?!])[ ]", " \\1 "),
("(?<=[]\\w…)»}])([;?!])$", " \\1"),
("[ ]+([;?!])", " \\1"),
("(?<=[]\\w…)»}]):", " :"),
("[ ]+:", " :")],
"nnbsp_within_quotation_marks":[("«(?=\\w)", "« "),
("«[ ]+", "« "),
("(?<=[\\w.!?])»", " »"),
("[ ]+»", " »")],
"nnbsp_within_numbers": [("(\\d)[ ](\\d)", "\\1 \\2")],
# common
"nbsp_before_symbol": [("(\\d) ?([%‰€$£¥˚Ω℃])", "\\1 \\2")],
"nbsp_before_units": [("(?<=[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\\b", " \\1")],
"nbsp_repair": [("(?<=[[(])[ ]([!?:;])", "\\1"),
("(https?|ftp)[ ]:(?=//)", "\\1:"),
("&([a-z]+)[ ];", "&\\1;"),
("&#([0-9]+|x[0-9a-fA-F]+)[ ];", "&#\\1;")],
## missing spaces
"add_space_after_punctuation": [("([;!…])(?=\\w)", "\\1 "),
("[?](?=[A-ZÉÈÊÂÀÎ])", "? "),
("\\.(?=[A-ZÉÈÎ][a-zA-ZàâÂéÉèÈêÊîÎïÏôÔöÖûÛüÜùÙ])", ". "),
("\\.(?=À)", ". "),
("(?i)([,:])(?=[a-zàâäéèêëîïôöûüù])", "\\1 "),
("(?i)([a-zàâäéèêëîïôöûüù]),(?=[0-9])", "\\1, ")],
"add_space_around_hyphens": [(" ([-–—])(?=[a-zàâäéèêëîïôöûüù\"«“'‘])", " \\1 "),
("(?<=[a-zàâäéèêëîïôöûüù\"»”'’])([-–—]) ", " \\1 ")],
"add_space_repair": [("DnT, ([wA])\\b", "DnT,\\1")],
## erase
"erase_non_breaking_hyphens": [("", "")],
## typographic signs
"ts_apostrophe": [ ("(?i)\\b([ldnjmtscç])['´‘′`](?=\\w)", "\\1’"),
("(?i)(qu|jusqu|lorsqu|puisqu|quoiqu|quelqu|presqu|entr|aujourd|prud)['´‘′`]", "\\1’") ],
"ts_ellipsis": [ ("\\.\\.\\.", "…"),
("(?<=…)[.][.]", "…"),
("…[.](?![.])", "…") ],
"ts_n_dash_middle": [ (" [-—] ", " – "),
(" [-—],", " –,") ],
"ts_m_dash_middle": [ (" [-–] ", " — "),
(" [-–],", " —,") ],
"ts_n_dash_start": [ ("^[-—][ ]", "– "),
("^– ", "– "),
("^[-–—](?=\\w)", "– ") ],
"ts_m_dash_start": [ ("^[-–][ ]", "— "),
("^— ", "— "),
("^«[ ][—–-][ ]", "« — "),
("^[-–—](?=\\w)", "— ") ],
"ts_quotation_marks": [ (u'"(\\w+)"', "“$1”"),
("''(\\w+)''", "“$1”"),
("'(\\w+)'", "“$1”"),
("^(?:\"|'')(?=\\w)", "« "),
(" (?:\"|'')(?=\\w)", " « "),
("\\((?:\"|'')(?=\\w)", "(« "),
("(?<=\\w)(?:\"|'')$", " »"),
("(?<=\\w)(?:\"|'')(?=[] ,.:;?!…)])", " »"),
(u'(?<=[.!?…])" ', " » "),
(u'(?<=[.!?…])"$', " »") ],
"ts_spell": [ ("coeur", "cœur"), ("Coeur", "Cœur"),
("coel(?=[aeio])", "cœl"), ("Coel(?=[aeio])", "Cœl"),
("choeur", "chœur"), ("Choeur", "Chœur"),
("foet", "fœt"), ("Foet", "Fœt"),
("oeil", "œil"), ("Oeil", "Œil"),
("oeno", "œno"), ("Oeno", "Œno"),
("oesoph", "œsoph"), ("Oesoph", "Œsoph"),
("oestro", "œstro"), ("Oestro", "Œstro"),
("oeuf", "œuf"), ("Oeuf", "Œuf"),
("oeuvr", "œuvr"), ("Oeuvr", "Œuvr"),
("moeur", "mœur"), ("Moeur", "Mœur"),
("noeu", "nœu"), ("Noeu", "Nœu"),
("soeur", "sœur"), ("Soeur", "Sœur"),
("voeu", "vœu"), ("Voeu", "Vœu"),
("aequo", "æquo"), ("Aequo", "Æquo"),
("\\bCa\\b", "Ça"), (" ca\\b", " ça"),
("\\bdej[aà]\\b", "déjà"), ("\\bplutot\\b", "plutôt"),
("\\bmeme\\b", "même"), ("\\bmemes\\b", "mêmes"), ("\\bMeme\\b", "Même"),
("\\b([cC]e(?:ux|lles?|lui))-la\\b", "$1-là"),
("\\bmalgre\\b", "malgré"), ("\\bMalgre\\b", "Malgré"),
("\\betre\\b", "être"), ("\\bEtre\\b", "Être"),
("\\btres\\b", "très"), ("\\bTres\\b", "Très"),
("\\bEtai([ts]|ent)\\b", "Étai$1"),
("\\bE(tat|cole|crit|poque|tude|ducation|glise|conomi(?:qu|)e|videmment|lysée|tienne|thiopie|cosse|gypt(?:e|ien)|rythrée|pinal|vreux)", "É$1") ],
"ts_ligature_ffi_on": [("ffi", "ffi")],
"ts_ligature_ffl_on": [("ffl", "ffl")],
"ts_ligature_fi_on": [("fi", "fi")],
"ts_ligature_fl_on": [("fl", "fl")],
"ts_ligature_ff_on": [("ff", "ff")],
"ts_ligature_ft_on": [("ft", "ſt")],
"ts_ligature_st_on": [("st", "st")],
"ts_ligature_fi_off": [("fi", "fi")],
"ts_ligature_fl_off": [("fl", "fl")],
"ts_ligature_ff_off": [("ff", "ff")],
"ts_ligature_ffi_off": [("ffi", "ffi")],
"ts_ligature_ffl_off": [("ffl", "ffl")],
"ts_ligature_ft_off": [("ſt", "ft")],
"ts_ligature_st_off": [("st", "st")],
"ts_units": [ ("\\bN\\.([ms])\\b", "N·\\1"), # N·m et N·m-1, N·s
("\\bW\\.h\\b", "W·h"),
("\\bPa\\.s\\b", "Pa·s"),
("\\bA\\.h\\b", "A·h"),
("\\bΩ\\.m\\b", "Ω·m"),
("\\bS\\.m\\b", "S·m"),
("\\bg\\.s(?=-1)\\b", "g·s"),
("\\bm\\.s(?=-[12])\\b", "m·s"),
("\\bg\\.m(?=2|-3)\\b", "g·m"),
("\\bA\\.m(?=-1)\\b", "A·m"),
("\\bJ\\.K(?=-1)\\b", "J·K"),
("\\bW\\.m(?=-2)\\b", "W·m"),
("\\bcd\\.m(?=-2)\\b", "cd·m"),
("\\bC\\.kg(?=-1)\\b", "C·kg"),
("\\bH\\.m(?=-1)\\b", "H·m"),
("\\bJ\\.kg(?=-1)\\b", "J·kg"),
("\\bJ\\.m(?=-3)\\b", "J·m"),
("\\bm[2²]\\.s\\b", "m²·s"),
("\\bm[3³]\\.s(?=-1)\\b", "m³·s"),
#("\\bJ.kg-1.K-1\\b", "J·kg-1·K-1"),
#("\\bW.m-1.K-1\\b", "W·m-1·K-1"),
#("\\bW.m-2.K-1\\b", "W·m-2·K-1"),
("\\b(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)Ω\\b", "\\1Ω") ],
## misc
"ordinals_exponant": [ ("\\b([0-9]+)(?:i?[èe]me|è|e)\\b", "\\1ᵉ"),
("\\b([XVICL]+)(?:i?[èe]me|è)\\b", "\\1ᵉ"),
("(?<=\\b(au|l[ea]|du) [XVICL])e\\b", "ᵉ"),
("(?<=\\b[XVI])e(?= siècle)", "ᵉ"),
("(?<=\\b[1I])er\\b", "ᵉʳ"),
("(?<=\\b[1I])re\\b", "ʳᵉ") ],
"ordinals_no_exponant": [ ("\\b([0-9]+)(?:i?[èe]me|è)\\b", "\\1e"),
("\\b([XVICL]+)(?:i?[èe]me|è)\\b", "\\1e"),
("(?<=\\b[1I])ᵉʳ\\b", "er"),
("(?<=\\b[1I])ʳᵉ\\b", "er")],
"etc": [ ("etc(…|[.][.][.]?)", "etc."),
("(?<!,) etc[.]", ", etc.") ],
## missing hyphens
"mh_interrogatives": [ ("[ -]t[’'](?=il\\b|elle|on\\b)", "-t-"),
(" t-(?=il|elle|on)", "-t-"),
("[ -]t[’'-](?=ils|elles)", "-"),
("(?<=[td])-t-(?=il|elle|on)", "-") ],
"mh_numbers": [ ("dix (sept|huit|neuf)", "dix-\\1"),
("quatre vingt", "quatre-vingt"),
("(soixante|quatre-vingt) dix", "\\1-dix"),
("(vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)) (deux|trois|quatre|cinq|six|sept|huit|neuf)\\b", "\\1-\\2")],
"mh_frequent_words": [ ("(?i)ce(lles?|lui|ux) (ci|là)\\b", "ce\\1-\\2"),
("(?i)(?<!-)\\b(ci) (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)", "\\1-\\2"),
("vis à vis", "vis-à-vis"),
("Vis à vis", "Vis-à-vis"),
("week end", "week-end"),
("Week end", "Week-end"),
("(?i)(plus|moins) value", "\\1-value") ],
## missing apostrophes
"ma_word": [("(?i)(qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu|prud) ", "\\1’")],
"ma_1letter_lowercase": [("\\b([ldjnmtscç]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "\\1’")],
"ma_1letter_uppercase": [("\\b([LDJNMTSCÇ]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "\\1’")]
}
lOptRepl = [
("ts_units", True),
("start_of_paragraph", True),
("end_of_paragraph", True),
("between_words", True),
("before_punctuation", True),
("within_parenthesis", True),
("within_square_brackets", True),
("within_quotation_marks", True),
("nbsp_before_punctuation", True),
("nbsp_within_quotation_marks", True),
("nbsp_within_numbers", True),
("nnbsp_before_punctuation", False),
("nnbsp_within_quotation_marks", False),
("nnbsp_within_numbers", False),
("nbsp_before_symbol", True),
("nbsp_before_units", True),
("nbsp_repair", True),
("add_space_after_punctuation", True),
("add_space_around_hyphens", True),
("add_space_repair", True),
("erase_non_breaking_hyphens", False),
("ts_apostrophe", True),
("ts_ellipsis", True),
("ts_n_dash_middle", True),
("ts_m_dash_middle", False),
("ts_n_dash_start", False),
("ts_m_dash_start", True),
("ts_quotation_marks", True),
("ts_spell", True),
("ts_ligature_ffi_on", False),
("ts_ligature_ffl_on", False),
("ts_ligature_fi_on", False),
("ts_ligature_fl_on", False),
("ts_ligature_ff_on", False),
("ts_ligature_ft_on", False),
("ts_ligature_st_on", False),
("ts_ligature_fi_off", False),
("ts_ligature_fl_off", False),
("ts_ligature_ff_off", False),
("ts_ligature_ffi_off", False),
("ts_ligature_ffl_off", False),
("ts_ligature_ft_off", False),
("ts_ligature_st_off", False),
("ordinals_exponant", False),
("ordinals_no_exponant", True),
("etc", True),
("mh_interrogatives", True),
("mh_numbers", True),
("mh_frequent_words", True),
("ma_word", True),
("ma_1letter_lowercase", False),
("ma_1letter_uppercase", False),
]
class TextFormatter:
def __init__ (self):
for sOpt, lTup in dReplTable.items():
for i, t in enumerate(lTup):
lTup[i] = (re.compile(t[0]), t[1])
def formatText (self, sText, **args):
for sOptName, bVal in lOptRepl:
if bVal:
for zRgx, sRep in dReplTable[sOptName]:
#echo("{} --> {}".format(zRgx.pattern, sRep))
sText = zRgx.sub(sRep, sText)
#echo(sText)
return sText
|
Added gc_lang/fr/options.txt version [3adef69fae].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# Options and title texts for the Settings and conditional rules
#
# The Lightproof dialogs contain only grouped checkboxes.
#
# Format of the dialog definition:
#
# GroupID: OptionID, OptionID ...
# Group2ID: OptionID, OptionID ...
# ...
# [Language_code=title of the window]
# OptionID=title of the option
# Option2ID=title of the option
#
# The first language is the default language for other locales
# (use en_US or the common language of your country)
#
# The OptionIDs declared here are used in the rules, too. For example:
#
# foo <<- option("style") ->> bar # bar is far better
#
# this rule depends from the state of the "style" checkbox.
# options (starred options are checked)
basic: *typo *apos, *esp *nbsp, *tu *maj, *num *virg, *unit *nf, liga mapos, chim ocr
gramm: *conf *sgpl, *gn
verbs: *infi *gv *ppas, *imp *inte *vmode
style: *bs *pleo, redon1 redon2, neg
misc: *date mc
debug: idrule
# titles
[en_US=Grammar checking (French)]
basic=Typography
typo=Typographical glyphs
apos=Typographical apostrophe\nDetects typewriter apostrophes. You may get automatically typographical apostrophes in Tools > Autocorrect options > Localized options > Single quote > Replace (checkbox).
esp=Unuseful spaces\nChecks spaces at the beginning and the end of lines.
nbsp=Non-breakable spaces\nChecks the use of non-breakable spaces with the following punctuation marks: « ! ? : ; » (deactivate it if you use a Graphite font)
eif=Narrow non breaking spaces [!]\nTo set narrow non breaking spaces before the characters “? ! ;”
maj=Capitals\nChecks the use of uppercase and lowercase letters (i.e. « la raison d’État », « les Européens »).
virg=Commas\nMissing commas before “mais”, “car” and “etc.”.
tu=Hyphens\nChecks missing or useless hyphens.
num=Numbers\nLarge numbers and « O » instead of « 0 ».
unit=Non-breaking spaces before units of measurement
nf=French standards
liga=Report typographical ligatures\nLigatures of fi, fl, ff, ffi, ffl, ft, st.
mapos=Missing apostrophes after single letters [!]\nMissing apostrophes after l d s n c j m t ç. This option is mostly useful to detect defects of digitized texts and is not recommended for scientific texts.
chim=Chemistry [!]\nTypography for molecules (H₂O, CO₂, etc.)
ocr=OCR errors [!]\nWarning: many false positives.
gramm=Agreement, plurals, confusions
conf=Confusions, homonyms and false friends\nSeeks errors often due to homonymy (i.e. confusions between « faîte » et « faite »).
sgpl=Plural (locutions)\nChecks the use of plural and singular in locutions.
gn=Agreement (gender and number)\nAgreement between nouns and adjectives.
verbs=Verbs
gv=Conjugation\nAgreement between verbs and their subject.
infi=Infinitive\nChecks confusions between infinitive forms and other forms.
imp=Imperative mood\nChecks particularly verbs at second person singular (i.e. errors such as: « vas … », « prend … », « manges … »).
inte=Interrogative mood\nChecks interrogative forms and suggests linking the personal pronouns with verbs.
ppas=Past participles, adjectives\nChecks subject agreement with past participles and adjectives
vmode=Verbal modes
style=Style
bs=Popular style\nUnderlines misuse of language though informal and commonly used.
pleo=Pleonasms\nSemantic replications, like « au jour d’aujourd’hui », « monter en haut », etc.
neg=Negation adverb [!]\nNe … pas, ne … jamais, etc.
redon1=Duplicates in paragraph [!]\nAre excluded grammatical words, words beginning by a capital letter, and also “être” and “avoir”.
redon2=Duplicates in sentence [!]\nAre excluded grammatical words, and also “être” and “avoir”.
misc=Miscellaneous
mc=Compound words [!]\nCheck if words with hyphen exist in the dictionary (except those beginning by ex-, mi-, quasi-, semi-, non-, demi- and other common prefixes)
date=Date validity
debug=Debug
idrule=Display control rule identifier [!]\nDisplay control rule identifier in the context menu message
[fr_FR=Grammalecte (Français)]
basic=Typographie
typo=Signes typographiques
apos=Apostrophe typographique\nCorrection des apostrophes droites. Automatisme possible dans le menu Outils > Options d’autocorrection > Options linguistiques > Guillemets simples > Remplacer (à cocher)
esp=Espaces surnuméraires\nSignale les espaces inutiles en début et en fin de ligne.
nbsp=Espaces insécables\nVérifie les espaces insécables avec les ponctuations « ! ? : ; » (à désactiver si vous utilisez une police Graphite)
eif=Espaces insécables fines [!]\nPour placer des espaces insécables fines avant les ponctuations « ? ! ; »
maj=Majuscules\nVérifie l’utilisation des majuscules et des minuscules (par exemple, « la raison d’État », « les Européens »).
virg=Virgules\nVirgules manquantes avant “mais”, “car” et “etc.”.
tu=Traits d’union\nCherche les traits d’union manquants ou inutiles.
num=Nombres\nEspaces insécables sur les grands nombres (> 10 000). Vérifie la présence de « O » au lieu de « 0 ».
unit=Espaces insécables avant unités de mesure
nf=Normes françaises
liga=Signaler ligatures typographiques\nLigatures de fi, fl, ff, ffi, ffl, ft, st.
mapos=Apostrophes manquantes après lettres isolées [!]\nApostrophes manquantes après les lettres l d s n c j m t ç. Cette option sert surtout à repérer les défauts de numérisation des textes et est déconseillée pour les textes scientifiques.
chim=Chimie [!]\nTypographie des composés chimiques (H₂O, CO₂, etc.).
ocr=Erreurs de numérisation (OCR) [!]\nErreurs de reconnaissance optique des caractères. Beaucoup de faux positifs.
gramm=Accords, pluriels et confusions
conf=Confusions, homonymes et faux-amis\nCherche des erreurs souvent dues à l’homonymie (par exemple, les confusions entre « faîte » et « faite »).
sgpl=Pluriels (locutions)\nVérifie l’usage du pluriel ou du singulier dans certaines locutions.
gn=Accords de genre et de nombre\nAccords des noms et des adjectifs.
verbs=Verbes
gv=Conjugaisons\nAccord des verbes avec leur sujet.
infi=Infinitif\nConfusion entre l’infinitif et d’autres formes.
imp=Impératif\nVérifie notamment la deuxième personne du singulier (par exemple, les erreurs : « vas … », « prend … », « manges … »).
inte=Interrogatif\nVérifie les formes interrogatives et suggère de lier les pronoms personnels avec les verbes.
ppas=Participes passés, adjectifs
vmode=Modes verbaux
style=Style
bs=Populaire\nSouligne un langage courant considéré comme erroné, comme « malgré que ».
pleo=Pléonasmes\nRepère des redondances sémantiques, comme « au jour d’aujourd’hui », « monter en haut », etc.
neg=Adverbe de négation [!]\nNe … pas, ne … jamais, etc.
redon1=Répétitions dans le paragraphe [!]\nSont exclus les mots grammaticaux, ceux commençant par une majuscule, ainsi que “être” et “avoir”.
redon2=Répétitions dans la phrase [!]\nSont exclus les mots grammaticaux, ainsi que “être” et “avoir”.
misc=Divers
mc=Mots composés [!]\nVérifie si les mots composés à trait d’union existent dans le dictionnaire (hormis ceux commençant par ex-, mi-, quasi-, semi-, non-, demi- et d’autres préfixes communs).
date=Validité des dates
debug=Débogage
idrule=Identifiant des règles de contrôle [!]\nAffiche l’identifiant de la règle de contrôle dans les messages d’erreur.
|
Added gc_lang/fr/oxt/About/About.py version [03886f10df].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# -*- coding: utf8 -*-
# About dialog
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import traceback
import sys
import ab_strings
import helpers
from com.sun.star.awt import XActionListener
from com.sun.star.beans import PropertyValue
class AboutGrammalecte (unohelper.Base, XActionListener):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.xContainer = None
self.xDialog = None
def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
xWidget.Name = name
xWidget.PositionX = x
xWidget.PositionY = y
xWidget.Width = w
xWidget.Height = h
for k, w in kwargs.items():
setattr(xWidget, k, w)
self.xDialog.insertByName(name, xWidget)
return xWidget
def run (self, sLang):
try:
dUI = ab_strings.getUI(sLang)
# dialog
self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.xDialog.Width = 160
self.xDialog.Height = 175
self.xDialog.Title = dUI.get('windowtitle', "#err")
xWindowSize = helpers.getWindowSize()
self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
# xWidgets
hspace = 60
nLblWidth = 140
nLblHeight = 20
nDescWidth = 140
nDescHeight = 40
nURLcolor = 0x4444FF
xFD0 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD0.Height = 20
#xFD0.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFD0.Name = "Verdana"
xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD1.Height = 10
xFD1.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFD1.Name = "Verdana"
xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD2.Height = 10
xFD2.Name = "Verdana"
xFD3 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD3.Height = 12
xFD3.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFD3.Name = "Verdana"
# Infos
lblTitle = self._addWidget('lblTitle', 'FixedText', 60, 5, 100, 20, Label = dUI.get('title', "#err"), Align = 0, FontDescriptor = xFD0)
lblVersion = self._addWidget('lblVersion', 'FixedText', 62, 25, 80, 10, Label = dUI.get('version', "#err"), Align = 0, FontDescriptor = xFD2)
lblLicense = self._addWidget('lblLicense', 'FixedText', 62, 35, 80, 10, Label = dUI.get('license', "#err"), Align = 0, FontDescriptor = xFD2)
lblWebsite = self._addWidget('lblWebsite', 'FixedHyperlink', 62, 45, 60, 10, Label = dUI.get('website', "#err"), Align = 0, \
URL="http://www.dicollecte.org/grammalecte", FontDescriptor = xFD1, TextColor = nURLcolor)
# logo
xDefaultContext = self.ctx.ServiceManager.DefaultContext
xPackageInfoProvider = xDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
sExtPath = xPackageInfoProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR")
imgLogo = self._addWidget('imgLogo', 'ImageControl', 5, 5, 50, 50, ImageURL = sExtPath+"/img/logo100.png", Border = 0, ScaleMode = 1)
# Python version
self._addWidget('lblpython', 'FixedText', 10, 60, 140, 10, Align = 1, TextColor = 0x888888, FontDescriptor = xFD2, \
Label = dUI.get('pythonver', "#err") + "{0[0]}.{0[1]}.{0[2]}".format(sys.version_info))
# other
line = self._addWidget('line', 'FixedLine', 10, 73, nDescWidth, 10)
lblMsg = self._addWidget('lblMsg', 'FixedText', 10, 85, nDescWidth, 10, Label = dUI.get('message', "#err"), FontDescriptor = xFD2, Align = 1)
lblURL1 = self._addWidget('lblURL1', 'FixedHyperlink', 10, 95, nDescWidth, 10, Label = dUI.get('sponsor', "#err"), \
Align = 1, URL="http://www.lamouette.org/", FontDescriptor = xFD3, TextColor = nURLcolor)
imgSponsor = self._addWidget('imgSponsor', 'ImageControl', 5, 107, 150, 50, ImageURL = sExtPath+"/img/LaMouette_small.png", Border = 0, ScaleMode = 1)
lblURL2 = self._addWidget('lblURL2', 'FixedHyperlink', 10, 160, nDescWidth, 10, Label = dUI.get('link', "#err"), \
Align = 1, URL="http://www.dicollecte.org/grammalecte/soutiens.php", FontDescriptor = xFD1, TextColor = nURLcolor)
# button
#button = self._addWidget('close', 'Button', self.xDialog.Width - 25, self.xDialog.Height - 20, 20, 14, \
# Label = dUI.get('close', "#err"), FontDescriptor = xFD1, TextColor = 0x004400)
# container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.xDialog)
#self.xContainer.getControl('close').addActionListener(self)
self.xContainer.setVisible(False)
toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(toolkit, None)
self.xContainer.execute()
except:
traceback.print_exc()
# XActionListener
def actionPerformed (self, xActionEvent):
try:
self.xContainer.endExecute()
except:
traceback.print_exc()
|
Added gc_lang/fr/oxt/About/ab_strings.py version [e915407fb3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# -*- encoding: UTF-8 -*-
def getUI (sLang):
if sLang in dStrings:
return dStrings[sLang]
return dStrings["fr"]
dStrings = {
"fr": {
"windowtitle": "À propos…",
"title": "Grammalecte",
"version": "Version : ${version}",
"license": "Licence : GPL 3",
"website": "Site web",
"pythonver": "Machine virtuelle Python : v",
"message": "Avec le soutien de",
"sponsor": "La Mouette…",
"link": "… et de nombreux contributeurs.",
"close": "~OK"
},
"en": {
"windowtitle": "About…",
"title": "Grammalecte",
"version": "Version: ${version}",
"license": "License: GPL 3",
"website": "Web site",
"pythonver": "Python virtual machine: v",
"message": "With the support of",
"sponsor": "La Mouette…",
"link": "… and many contributors.",
"close": "~OK"
}
}
|
Added gc_lang/fr/oxt/AppLauncher.py version [30bcae4623].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# -*- coding: utf8 -*-
# Grammalecte AppLauncher
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import traceback
import helpers
from com.sun.star.task import XJobExecutor
xDesktop = None
class AppLauncher (unohelper.Base, XJobExecutor):
def __init__ (self, ctx):
self.ctx = ctx
# In this extension, French is default language.
# It is assumed that those who need to use the French dictionaries understand French and may not understand English.
xSettings = helpers.getConfigSetting("/org.openoffice.Setup/L10N", False)
sLocale = xSettings.getByName("ooLocale") # Note: look at ooSetupSystemLocale value?
self.sLang = sLocale[0:2]
# XJobExecutor
def trigger (self, sCmd):
try:
if sCmd == "About":
import About
xDialog = About.AboutGrammalecte(self.ctx)
xDialog.run(self.sLang)
elif sCmd.startswith("CJ"):
import Conjugueur
xDialog = Conjugueur.Conjugueur(self.ctx)
if sCmd[2:3] == "/":
xDialog.run(sCmd[3:])
else:
xDialog.run()
elif sCmd == "TF":
import TextFormatter
xDialog = TextFormatter.TextFormatter(self.ctx)
xDialog.run(self.sLang)
elif sCmd == "DS":
import DictionarySwitcher
xDialog = DictionarySwitcher.FrenchDictionarySwitcher(self.ctx)
xDialog.run(self.sLang)
elif sCmd == "MA":
import Author
xDialog = Author.Author(self.ctx)
xDialog.run(self.sLang)
elif sCmd == "OP":
import Options
xDialog = Options.GC_Options(self.ctx)
xDialog.run(self.sLang)
elif sCmd.startswith("FA/"):
findAll(sCmd[6:], (sCmd[3:4] == "y"), (sCmd[4:5] == "y"))
# elif sCmd.startswith("URL/"):
# # Call from context menu to launch URL?
# # http://opengrok.libreoffice.org/xref/core/sw/source/ui/lingu/olmenu.cxx#785
# xSystemShellExecute = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.system.SystemShellExecute', self.ctx)
# xSystemShellExecute.execute(url, "", uno.getConstantByName("com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY"))
elif sCmd == "None":
pass
else:
print("Unknown command: "+str(sCmd))
except:
traceback.print_exc()
def findAll (sText, bCaseSensitive, bFullWord):
global xDesktop
if not xDesktop:
xCurCtx = uno.getComponentContext()
xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx)
if sText:
xDoc = xDesktop.getCurrentComponent()
xSearchDescr = xDoc.createSearchDescriptor()
xSearchDescr.SearchString = sText
xSearchDescr.SearchCaseSensitive = bCaseSensitive
xSearchDescr.SearchWords = bFullWord
xSearchDescr.SearchAll = True # necessary ?
xFound = xDoc.findAll(xSearchDescr)
xDoc.CurrentController.select(xFound)
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(AppLauncher, 'net.grammalecte.AppLauncher', ('com.sun.star.task.Job',))
|
Added gc_lang/fr/oxt/ChangeAuthor/Author.py version [65d326e8e4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# -*- coding: utf8 -*-
# Modify author field
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import re
import traceback
import ca_strings
import helpers
from com.sun.star.awt import XActionListener
from com.sun.star.beans import PropertyValue
class Author (unohelper.Base, XActionListener):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.xContainer = None
def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
xWidget.Name = name
xWidget.PositionX = x
xWidget.PositionY = y
xWidget.Width = w
xWidget.Height = h
for k, w in kwargs.items():
setattr(xWidget, k, w)
self.xDialog.insertByName(name, xWidget)
return xWidget
def run (self, sLang):
try:
dUI = ca_strings.getUI(sLang)
# dialog
self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.xDialog.Width = 160
self.xDialog.Height = 85
self.xDialog.Title = dUI.get('title', "#err")
xWindowSize = helpers.getWindowSize()
self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
# fonts
xFDBut = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDBut.Height = 10
xFDBut.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDBut.Name = "Verdana"
# document
xDesktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
self.xDoc = xDesktop.getCurrentComponent()
sAuthor = self.xDoc.DocumentProperties.Author if self.xDoc.DocumentProperties.Author else dUI.get('empty', "#err")
# widgets
nTextWidth = self.xDialog.Width - 20
state = self._addWidget('state', 'FixedText', 10, 10, nTextWidth, 10, Label = dUI.get('state', "#err"))
value = self._addWidget('value', 'FixedText', 10, 20, nTextWidth, 10, Label = sAuthor, FontSlant = 2, TextColor = 0x000044)
inputlbl = self._addWidget('inputlbl', 'FixedText', 10, 34, nTextWidth, 10, Label = dUI.get('newvalue', "#err"))
self.inputtxt = self._addWidget('input', 'Edit', 10, 45, nTextWidth-20, 12, Text=self.xDoc.DocumentProperties.Author, MaxTextLen=150)
but0 = self._addWidget('reset', 'Button', self.xDialog.Width-25, 45, 15, 12, Label = u"×", FontDescriptor = xFDBut, TextColor = 0x440000)
but1 = self._addWidget('modify', 'Button', self.xDialog.Width-115, self.xDialog.Height-20, 50, 14, \
Label = dUI.get('modify', "#err"), FontDescriptor = xFDBut, TextColor = 0x004400)
but2 = self._addWidget('cancel', 'Button', self.xDialog.Width-60, self.xDialog.Height-20, 50, 14, \
Label = dUI.get('cancel', "#err"), FontDescriptor = xFDBut, TextColor = 0x440000)
# container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.xDialog)
self.xContainer.getControl('reset').addActionListener(self)
self.xContainer.getControl('reset').setActionCommand('Reset')
self.xContainer.getControl('modify').addActionListener(self)
self.xContainer.getControl('modify').setActionCommand('Modify')
self.xContainer.getControl('cancel').addActionListener(self)
self.xContainer.getControl('cancel').setActionCommand('Cancel')
self.xContainer.setVisible(False)
xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(xToolkit, None)
self.xContainer.execute()
except:
traceback.print_exc()
# XActionListener
def actionPerformed (self, xActionEvent):
try:
if xActionEvent.ActionCommand == 'Reset':
self.inputtxt.Text = ""
elif xActionEvent.ActionCommand == 'Modify':
self.xDoc.DocumentProperties.Author = self.inputtxt.Text.strip()
self.xContainer.endExecute()
elif xActionEvent.ActionCommand == 'Cancel':
self.xContainer.endExecute()
else:
print("Wrong command: " + xActionEvent.ActionCommand)
except:
traceback.print_exc()
|
Added gc_lang/fr/oxt/ChangeAuthor/ca_strings.py version [b67a9eb4f9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# -*- encoding: UTF-8 -*-
def getUI (sLang):
if sLang in dStrings:
return dStrings[sLang]
return dStrings["fr"]
dStrings = {
"fr": {
"title": "Grammalecte · Édition du champ “Auteur”",
"state": "Valeur actuelle du champ “Auteur” :",
"empty": "[vide]",
"newvalue": "Entrez la nouvelle valeur :",
"modify": "Modifier",
"cancel": "Annuler"
},
"en": {
"title": "Grammalecte · Edition of field “Author”",
"state": "Current value of field “Author”:",
"empty": "[empty]",
"newvalue": "Enter the new value:",
"modify": "Modify",
"cancel": "Cancel"
}
}
|
Added gc_lang/fr/oxt/Conjugueur/Conjugueur.py version [6ca66ec150].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 |
# -*- coding: utf8 -*-
# Conjugueur
# by Olivier R.
# License: GPL 3
import unohelper
import uno
import traceback
import grammalecte.fr.conj as conj_fr
import helpers
from com.sun.star.task import XJobExecutor
from com.sun.star.awt import XActionListener
class Conjugueur (unohelper.Base, XActionListener, XJobExecutor):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.xContainer = None
self.xDialog = None
self.lDropDown = ["être", "avoir", "aller", "vouloir", "pouvoir", "devoir", "faire", "envoyer", "prendre", "connaître", \
"savoir", "partir", "répondre", "dire", "voir", "mettre", "tenir", "sentir", "finir", "manger"]
self.sWarning = "Ce verbe n’a pas encore été vérifié. " \
"C’est pourquoi les options “pronominal” et “temps composés” sont désactivées."
def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
xWidget.Name = name
xWidget.PositionX = x
xWidget.PositionY = y
xWidget.Width = w
xWidget.Height = h
for k, w in kwargs.items():
setattr(xWidget, k, w)
self.xDialog.insertByName(name, xWidget)
return xWidget
def run (self, sArgs=""):
## dialog
self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.xDialog.Width = 250
self.xDialog.Title = "Grammalecte · Conjugueur"
xFDinput = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDinput.Height = 10
xFDinput.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDinput.Name = "Verdana"
xFDmode = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDmode.Height = 12
xFDmode.Name = "Constantia"
xFDtemps = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDtemps.Height = 9
xFDtemps.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDtemps.Name = "Constantia"
xFDbold = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDbold.Height = 10
xFDbold.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDbold.Name = "Verdana"
xFDinfo = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDinfo.Height = 7
xFDinfo.Name = "Verdana"
xFDsmall = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDsmall.Height = 6
xFDsmall.Name = "Verdana"
## widgets
nGroupBoxWith = (self.xDialog.Width - 16) // 2
nWidth = nGroupBoxWith-10
nHeight = 10
nHeightCj = 8
nColorHead = 0xAA2200
nColorHead2 = 0x0022AA
# grid
nX1 = 10; nX2 = nX1+123;
nY0 = 2; nY1 = nY0+26; nY2 = nY1-4; nY3 = nY1+17; nY4 = nY3+50; nY5 = nY4+55; nY6 = nY5+55; nY7 = nY6+55; nY6b = nY6+17; nY7b = nY6b+55
# group box // indicatif
gb_infi = self._addWidget('groupbox_infi', 'GroupBox', nX1-5, nY0, nGroupBoxWith, 23, Label = "Infinitif", \
FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead)
self.infi = self._addWidget('infi', 'FixedText', nX1, nY0+10, nWidth, nHeight, Label = "", FontDescriptor = xFDbold)
# input field + button
self.input = self._addWidget('input', 'ComboBox', nX2-5, nY0+5, 68, 14, \
FontDescriptor = xFDinput, TextColor = 0x666666, Dropdown = True, LineCount = 20)
for n, s in enumerate(self.lDropDown):
self.input.insertItemText(n, s)
self.cbutton = self._addWidget('cbutton', 'Button', nX2+66, nY0+5, 46, 14, Label = "Conjuguer", FontDescriptor = xFDinput)
# informations
self.info = self._addWidget('info', 'FixedText', nX1, nY1, nWidth, nHeight, FontDescriptor = xFDinfo)
# options
self.oneg = self._addWidget('oneg', 'CheckBox', nX2-5, nY2, 35, nHeight, Label = "négation")
self.opro = self._addWidget('opro', 'CheckBox', nX2+33, nY2, 50, nHeight, Label = "pronominal")
self.ofem = self._addWidget('ofem', 'CheckBox', nX2+80, nY2, 45, nHeight, Label = "féminin")
self.oint = self._addWidget('oint', 'CheckBox', nX2-5, nY2+9, 55, nHeight, Label = "interrogatif")
self.otco = self._addWidget('otco', 'CheckBox', nX2+55, nY2+9, 60, nHeight, Label = "temps composés")
# group box // participe passé
gb_ppas = self._addWidget('groupbox_ppas', 'GroupBox', nX1-5, nY3-7, nGroupBoxWith, 55, Label = "Participes présent et passés", \
FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead)
self.ppre = self._addWidget('ppre', 'FixedText', nX1, nY3+5, nWidth, nHeightCj, Label = "")
self.ppas1 = self._addWidget('ppas1', 'FixedText', nX1, nY3+14, nWidth, nHeightCj, Label = "")
self.ppas2 = self._addWidget('ppas2', 'FixedText', nX1, nY3+21, nWidth, nHeightCj, Label = "")
self.ppas3 = self._addWidget('ppas3', 'FixedText', nX1, nY3+28, nWidth, nHeightCj, Label = "")
self.ppas4 = self._addWidget('ppas4', 'FixedText', nX1, nY3+35, nWidth, nHeightCj, Label = "")
# group box // impératif
gb_impe = self._addWidget('groupbox_impe', 'GroupBox', nX2-5, nY3, nGroupBoxWith, 48, Label = "Impératif", \
FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead)
self.impe = self._addWidget('impe', 'FixedText', nX2, nY3+12, nWidth, nHeight, Label = "Présent", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.impe1 = self._addWidget('impe1', 'FixedText', nX2, nY3+21, nWidth, nHeightCj, Label = "")
self.impe2 = self._addWidget('impe2', 'FixedText', nX2, nY3+28, nWidth, nHeightCj, Label = "")
self.impe3 = self._addWidget('impe3', 'FixedText', nX2, nY3+35, nWidth, nHeightCj, Label = "")
# group box // indicatif
gb_ind = self._addWidget('groupbox_ind', 'GroupBox', nX1-5, nY4, nGroupBoxWith, 234, Label = "Indicatif", \
FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead)
self.ipre = self._addWidget('ipre', 'FixedText', nX1, nY4+12, nWidth, nHeight, Label = "Présent", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.ipre1 = self._addWidget('ipre1', 'FixedText', nX1, nY4+21, nWidth, nHeightCj, Label = "")
self.ipre2 = self._addWidget('ipre2', 'FixedText', nX1, nY4+28, nWidth, nHeightCj, Label = "")
self.ipre3 = self._addWidget('ipre3', 'FixedText', nX1, nY4+35, nWidth, nHeightCj, Label = "")
self.ipre4 = self._addWidget('ipre4', 'FixedText', nX1, nY4+42, nWidth, nHeightCj, Label = "")
self.ipre5 = self._addWidget('ipre5', 'FixedText', nX1, nY4+49, nWidth, nHeightCj, Label = "")
self.ipre6 = self._addWidget('ipre6', 'FixedText', nX1, nY4+56, nWidth, nHeightCj, Label = "")
self.iimp = self._addWidget('iimp', 'FixedText', nX1, nY5+12, nWidth, nHeight, Label = "Imparfait", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.iimp1 = self._addWidget('iimp1', 'FixedText', nX1, nY5+21, nWidth, nHeightCj, Label = "")
self.iimp2 = self._addWidget('iimp2', 'FixedText', nX1, nY5+28, nWidth, nHeightCj, Label = "")
self.iimp3 = self._addWidget('iimp3', 'FixedText', nX1, nY5+35, nWidth, nHeightCj, Label = "")
self.iimp4 = self._addWidget('iimp4', 'FixedText', nX1, nY5+42, nWidth, nHeightCj, Label = "")
self.iimp5 = self._addWidget('iimp5', 'FixedText', nX1, nY5+49, nWidth, nHeightCj, Label = "")
self.iimp6 = self._addWidget('iimp6', 'FixedText', nX1, nY5+56, nWidth, nHeightCj, Label = "")
self.ipsi = self._addWidget('ipsi', 'FixedText', nX1, nY6+12, nWidth, nHeight, Label = "Passé Simple", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.ipsi1 = self._addWidget('ipsi1', 'FixedText', nX1, nY6+21, nWidth, nHeightCj, Label = "")
self.ipsi2 = self._addWidget('ipsi2', 'FixedText', nX1, nY6+28, nWidth, nHeightCj, Label = "")
self.ipsi3 = self._addWidget('ipsi3', 'FixedText', nX1, nY6+35, nWidth, nHeightCj, Label = "")
self.ipsi4 = self._addWidget('ipsi4', 'FixedText', nX1, nY6+42, nWidth, nHeightCj, Label = "")
self.ipsi5 = self._addWidget('ipsi5', 'FixedText', nX1, nY6+49, nWidth, nHeightCj, Label = "")
self.ipsi6 = self._addWidget('ipsi6', 'FixedText', nX1, nY6+56, nWidth, nHeightCj, Label = "")
self.ifut = self._addWidget('ifut', 'FixedText', nX1, nY7+12, nWidth, nHeight, Label = "Futur", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.ifut1 = self._addWidget('ifut1', 'FixedText', nX1, nY7+21, nWidth, nHeightCj, Label = "")
self.ifut2 = self._addWidget('ifut2', 'FixedText', nX1, nY7+28, nWidth, nHeightCj, Label = "")
self.ifut3 = self._addWidget('ifut3', 'FixedText', nX1, nY7+35, nWidth, nHeightCj, Label = "")
self.ifut4 = self._addWidget('ifut4', 'FixedText', nX1, nY7+42, nWidth, nHeightCj, Label = "")
self.ifut5 = self._addWidget('ifut5', 'FixedText', nX1, nY7+49, nWidth, nHeightCj, Label = "")
self.ifut6 = self._addWidget('ifut6', 'FixedText', nX1, nY7+56, nWidth, nHeightCj, Label = "")
self.infomsg = self._addWidget('infomsg', 'FixedText', nX1-5, nY7+73, 120, 20, FontDescriptor = xFDinfo, \
MultiLine = True, TextColor = 0x333333, Label = self.sWarning)
# group box // subjonctif
gb_sub = self._addWidget('groupbox_sub', 'GroupBox', nX2-5, nY4, nGroupBoxWith, 123, Label = "Subjonctif", \
FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead)
self.spre = self._addWidget('spre', 'FixedText', nX2, nY4+12, nWidth, nHeight, Label = "Présent", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.spre1 = self._addWidget('spre1', 'FixedText', nX2, nY4+21, nWidth, nHeightCj, Label = "")
self.spre2 = self._addWidget('spre2', 'FixedText', nX2, nY4+28, nWidth, nHeightCj, Label = "")
self.spre3 = self._addWidget('spre3', 'FixedText', nX2, nY4+35, nWidth, nHeightCj, Label = "")
self.spre4 = self._addWidget('spre4', 'FixedText', nX2, nY4+42, nWidth, nHeightCj, Label = "")
self.spre5 = self._addWidget('spre5', 'FixedText', nX2, nY4+49, nWidth, nHeightCj, Label = "")
self.spre6 = self._addWidget('spre6', 'FixedText', nX2, nY4+56, nWidth, nHeightCj, Label = "")
self.simp = self._addWidget('simp', 'FixedText', nX2, nY5+12, nWidth, nHeight, Label = "Imparfait", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.simp1 = self._addWidget('simp1', 'FixedText', nX2, nY5+21, nWidth, nHeightCj, Label = "")
self.simp2 = self._addWidget('simp2', 'FixedText', nX2, nY5+28, nWidth, nHeightCj, Label = "")
self.simp3 = self._addWidget('simp3', 'FixedText', nX2, nY5+35, nWidth, nHeightCj, Label = "")
self.simp4 = self._addWidget('simp4', 'FixedText', nX2, nY5+42, nWidth, nHeightCj, Label = "")
self.simp5 = self._addWidget('simp5', 'FixedText', nX2, nY5+49, nWidth, nHeightCj, Label = "")
self.simp6 = self._addWidget('simp6', 'FixedText', nX2, nY5+56, nWidth, nHeightCj, Label = "")
# group box // conditionnel
gb_cond = self._addWidget('groupbox_cond', 'GroupBox', nX2-5, nY6b, nGroupBoxWith, 123, Label = "Conditionnel", \
FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead)
self.conda = self._addWidget('conda', 'FixedText', nX2, nY6b+12, nWidth, nHeight, Label = "Présent", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.conda1 = self._addWidget('conda1', 'FixedText', nX2, nY6b+21, nWidth, nHeightCj, Label = "")
self.conda2 = self._addWidget('conda2', 'FixedText', nX2, nY6b+28, nWidth, nHeightCj, Label = "")
self.conda3 = self._addWidget('conda3', 'FixedText', nX2, nY6b+35, nWidth, nHeightCj, Label = "")
self.conda4 = self._addWidget('conda4', 'FixedText', nX2, nY6b+42, nWidth, nHeightCj, Label = "")
self.conda5 = self._addWidget('conda5', 'FixedText', nX2, nY6b+49, nWidth, nHeightCj, Label = "")
self.conda6 = self._addWidget('conda6', 'FixedText', nX2, nY6b+56, nWidth, nHeightCj, Label = "")
self.condb = self._addWidget('condb', 'FixedText', nX2, nY7b+12, nWidth, nHeight, Label = "", \
FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2)
self.condb1 = self._addWidget('condb1', 'FixedText', nX2, nY7b+21, nWidth, nHeightCj, Label = "")
self.condb2 = self._addWidget('condb2', 'FixedText', nX2, nY7b+28, nWidth, nHeightCj, Label = "")
self.condb3 = self._addWidget('condb3', 'FixedText', nX2, nY7b+35, nWidth, nHeightCj, Label = "")
self.condb4 = self._addWidget('condb4', 'FixedText', nX2, nY7b+42, nWidth, nHeightCj, Label = "")
self.condb5 = self._addWidget('condb5', 'FixedText', nX2, nY7b+49, nWidth, nHeightCj, Label = "")
self.condb6 = self._addWidget('condb6', 'FixedText', nX2, nY7b+56, nWidth, nHeightCj, Label = "")
# dialog height
self.xDialog.Height = 350
xWindowSize = helpers.getWindowSize()
self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
## container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.xDialog)
self.xContainer.setVisible(False)
#self.xContainer.getControl('input').addEventListener(self)
#self.xContainer.getControl('input').addEventCommand('New')
self.xContainer.getControl('cbutton').addActionListener(self)
self.xContainer.getControl('cbutton').setActionCommand('New')
self.xContainer.getControl('oneg').addActionListener(self)
self.xContainer.getControl('oneg').setActionCommand('Change')
self.xContainer.getControl('opro').addActionListener(self)
self.xContainer.getControl('opro').setActionCommand('Change')
self.xContainer.getControl('oint').addActionListener(self)
self.xContainer.getControl('oint').setActionCommand('Change')
self.xContainer.getControl('otco').addActionListener(self)
self.xContainer.getControl('otco').setActionCommand('Change')
self.xContainer.getControl('ofem').addActionListener(self)
self.xContainer.getControl('ofem').setActionCommand('Change')
## set verb
self.input.Text = sArgs if sArgs else "être"
self._newVerb()
## mysterious action
xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(xToolkit, None)
self.xContainer.execute()
# XActionListener
def actionPerformed (self, xActionEvent):
try:
if xActionEvent.ActionCommand == 'Close':
self.xContainer.endExecute()
elif xActionEvent.ActionCommand == 'New':
self._newVerb()
elif xActionEvent.ActionCommand == 'Change':
self._displayResults()
else:
print(str(xActionEvent))
except:
traceback.print_exc()
# XJobExecutor
def trigger (self, args):
try:
xDialog = Conjugueur(self.ctx)
xDialog.run(args)
except:
traceback.print_exc()
def _newVerb (self):
self.oneg.State = False
self.opro.State = False
self.oint.State = False
self.otco.State = False
self.ofem.State = False
# request analyzing
sVerb = self.input.Text.strip().lower().replace(u"’", "'").replace(" ", " ")
if sVerb:
if sVerb.startswith("ne pas "):
self.oneg.State = True
sVerb = sVerb[7:]
if sVerb.startswith("se "):
self.opro.State = True
sVerb = sVerb[3:]
elif sVerb.startswith("s'"):
self.opro.State = True
sVerb = sVerb[2:]
if sVerb.endswith("?"):
self.oint.State = True
sVerb = sVerb.rstrip(" ?")
if not conj_fr.isVerb(sVerb):
self.input.TextColor = 0xAA2200
else:
self.input.TextColor = 0x666666
self.oVerb = conj_fr.Verb(sVerb)
sRawInfo = conj_fr.getVtyp(sVerb)
self.info.Label = self.oVerb.sInfo
self.opro.Label = "pronominal"
if sRawInfo.endswith("zz"):
self.opro.State = False
self.opro.Enabled = False
self.otco.State = False
self.otco.Enabled = False
self.infomsg.Label = self.sWarning
else:
self.infomsg.Label = ""
if sRawInfo[5] == "_":
self.opro.State = False
self.opro.Enabled = False
elif sRawInfo[5] == "q" or sRawInfo[5] == "e":
self.opro.State = False
self.opro.Enabled = True
elif sRawInfo[5] == "p" or sRawInfo[5] == "r":
self.opro.State = True
self.opro.Enabled = False
elif sRawInfo[5] == "!":
self.opro.Label = "cas particuliers"
self.opro.State = False
self.opro.Enabled = False
else:
self.opro.Label = "# erreur #"
self.opro.State = False
self.opro.Enabled = False
self.otco.Enabled = True
self._displayResults()
def _displayResults (self):
try:
self._setTitles()
# participes passés
self.ppas1.Label = self.oVerb.participePasse(":Q1")
self.ppas2.Label = self.oVerb.participePasse(":Q2")
self.ppas3.Label = self.oVerb.participePasse(":Q3")
self.ppas4.Label = self.oVerb.participePasse(":Q4")
# infinitif
self.infi.Label = self.oVerb.infinitif(self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
# participe présent
self.ppre.Label = self.oVerb.participePresent(self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
# conjugaisons
self.ipre1.Label = self.oVerb.conjugue(":Ip", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipre2.Label = self.oVerb.conjugue(":Ip", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipre3.Label = self.oVerb.conjugue(":Ip", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipre4.Label = self.oVerb.conjugue(":Ip", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipre5.Label = self.oVerb.conjugue(":Ip", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipre6.Label = self.oVerb.conjugue(":Ip", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.iimp1.Label = self.oVerb.conjugue(":Iq", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.iimp2.Label = self.oVerb.conjugue(":Iq", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.iimp3.Label = self.oVerb.conjugue(":Iq", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.iimp4.Label = self.oVerb.conjugue(":Iq", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.iimp5.Label = self.oVerb.conjugue(":Iq", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.iimp6.Label = self.oVerb.conjugue(":Iq", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipsi1.Label = self.oVerb.conjugue(":Is", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipsi2.Label = self.oVerb.conjugue(":Is", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipsi3.Label = self.oVerb.conjugue(":Is", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipsi4.Label = self.oVerb.conjugue(":Is", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipsi5.Label = self.oVerb.conjugue(":Is", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ipsi6.Label = self.oVerb.conjugue(":Is", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ifut1.Label = self.oVerb.conjugue(":If", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ifut2.Label = self.oVerb.conjugue(":If", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ifut3.Label = self.oVerb.conjugue(":If", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ifut4.Label = self.oVerb.conjugue(":If", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ifut5.Label = self.oVerb.conjugue(":If", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.ifut6.Label = self.oVerb.conjugue(":If", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.conda1.Label = self.oVerb.conjugue(":K", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.conda2.Label = self.oVerb.conjugue(":K", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.conda3.Label = self.oVerb.conjugue(":K", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.conda4.Label = self.oVerb.conjugue(":K", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.conda5.Label = self.oVerb.conjugue(":K", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.conda6.Label = self.oVerb.conjugue(":K", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
if not self.oint.State:
self.spre1.Label = self.oVerb.conjugue(":Sp", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.spre2.Label = self.oVerb.conjugue(":Sp", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.spre3.Label = self.oVerb.conjugue(":Sp", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.spre4.Label = self.oVerb.conjugue(":Sp", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.spre5.Label = self.oVerb.conjugue(":Sp", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.spre6.Label = self.oVerb.conjugue(":Sp", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.simp1.Label = self.oVerb.conjugue(":Sq", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.simp2.Label = self.oVerb.conjugue(":Sq", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.simp3.Label = self.oVerb.conjugue(":Sq", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.simp4.Label = self.oVerb.conjugue(":Sq", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.simp5.Label = self.oVerb.conjugue(":Sq", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.simp6.Label = self.oVerb.conjugue(":Sq", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.impe1.Label = self.oVerb.imperatif(":2s", self.opro.State, self.oneg.State, self.otco.State, self.ofem.State)
self.impe2.Label = self.oVerb.imperatif(":1p", self.opro.State, self.oneg.State, self.otco.State, self.ofem.State)
self.impe3.Label = self.oVerb.imperatif(":2p", self.opro.State, self.oneg.State, self.otco.State, self.ofem.State)
else:
self.spre.Label = ""
self.spre1.Label = ""
self.spre2.Label = ""
self.spre3.Label = ""
self.spre4.Label = ""
self.spre5.Label = ""
self.spre6.Label = ""
self.simp.Label = ""
self.simp1.Label = ""
self.simp2.Label = ""
self.simp3.Label = ""
self.simp4.Label = ""
self.simp5.Label = ""
self.simp6.Label = ""
self.impe.Label = ""
self.impe1.Label = ""
self.impe2.Label = ""
self.impe3.Label = ""
if self.otco.State:
self.condb1.Label = self.oVerb.conjugue(":Sq", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.condb2.Label = self.oVerb.conjugue(":Sq", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.condb3.Label = self.oVerb.conjugue(":Sq", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.condb4.Label = self.oVerb.conjugue(":Sq", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.condb5.Label = self.oVerb.conjugue(":Sq", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
self.condb6.Label = self.oVerb.conjugue(":Sq", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State)
else:
self.condb1.Label = ""
self.condb2.Label = ""
self.condb3.Label = ""
self.condb4.Label = ""
self.condb5.Label = ""
self.condb6.Label = ""
self.input.Text = ""
# refresh
self.xContainer.setVisible(True)
except:
traceback.print_exc()
def _setTitles (self):
if not self.otco.State:
self.ipre.Label = "Présent"
self.ifut.Label = "Futur"
self.iimp.Label = "Imparfait"
self.ipsi.Label = "Passé simple"
self.spre.Label = "Présent"
self.simp.Label = "Imparfait"
self.conda.Label = "Présent"
self.condb.Label = ""
self.impe.Label = "Présent"
else:
self.ipre.Label = "Passé composé"
self.ifut.Label = "Futur antérieur"
self.iimp.Label = "Plus-que-parfait"
self.ipsi.Label = "Passé antérieur"
self.spre.Label = "Passé"
self.simp.Label = "Plus-que-parfait"
self.conda.Label = "Passé (1ʳᵉ forme)"
self.condb.Label = "Passé (2ᵉ forme)"
self.impe.Label = "Passé"
# g_ImplementationHelper = unohelper.ImplementationHelper()
# g_ImplementationHelper.addImplementation(Conjugueur, 'dicollecte.Conjugueur', ('com.sun.star.task.Job',))
|
Added gc_lang/fr/oxt/ContextMenu/ContextMenu.py version [3b33016da8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# -*- coding: utf8 -*-
# Grammalecte - Lexicographe
# by Olivier R. License: MPL 2
import uno
import unohelper
import traceback
from com.sun.star.task import XJob
from com.sun.star.ui import XContextMenuInterceptor
#from com.sun.star.ui.ContextMenuInterceptorAction import IGNORED
#from com.sun.star.ui.ContextMenuInterceptorAction import EXECUTE_MODIFIED
import grammalecte.fr.lexicographe as lxg
from grammalecte.ibdawg import IBDAWG
from grammalecte.echo import echo
import helpers
xDesktop = None
oDict = None
oLexicographe = None
class MyContextMenuInterceptor (XContextMenuInterceptor, unohelper.Base):
def __init__ (self, ctx):
self.ctx = ctx
def notifyContextMenuExecute (self, xEvent):
sWord = self._getWord()
try:
aItem, aVerb = oLexicographe.analyzeWord(sWord)
if not aItem:
return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "IGNORED") # don’t work on AOO, have to import the value
#return IGNORED
xContextMenu = xEvent.ActionTriggerContainer
if xContextMenu:
# entries index
i = xContextMenu.Count
nUnoConstantLine = uno.getConstantByName("com.sun.star.ui.ActionTriggerSeparatorType.LINE")
# word analysis
i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine)
for item in aItem:
if isinstance(item, str):
i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=item, CommandURL="service:net.grammalecte.AppLauncher?None")
elif isinstance(item, tuple):
sRoot, lMorph = item
# submenu
xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer")
for j, s in enumerate(lMorph):
self._addItemToContextMenu(xSubMenuContainer, j, "ActionTrigger", Text=s, CommandURL="service:net.grammalecte.AppLauncher?None")
# create root menu entry
i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sRoot, SubContainer=xSubMenuContainer)
else:
i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="# erreur : {}".format(item))
# Links to Conjugueur
if aVerb:
i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine)
for sVerb in aVerb:
i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Conjuguer “{}”…".format(sVerb),
CommandURL="service:net.grammalecte.AppLauncher?CJ/"+sVerb)
# Search
xDoc = xDesktop.getCurrentComponent()
xViewCursor = xDoc.CurrentController.ViewCursor
if not xViewCursor.isCollapsed():
sSelec = xViewCursor.getString()
if sSelec.count(" ") <= 2:
i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine)
# submenu
xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer")
self._addItemToContextMenu(xSubMenuContainer, 0, "ActionTrigger", Text="insensible à la casse",
CommandURL="service:net.grammalecte.AppLauncher?FA/nn/"+sSelec)
self._addItemToContextMenu(xSubMenuContainer, 1, "ActionTrigger", Text="casse préservée",
CommandURL="service:net.grammalecte.AppLauncher?FA/yn/"+sSelec)
self._addItemToContextMenu(xSubMenuContainer, 2, "ActionTrigger", Text="mot(s) entier(s)",
CommandURL="service:net.grammalecte.AppLauncher?FA/ny/"+sSelec)
self._addItemToContextMenu(xSubMenuContainer, 3, "ActionTrigger", Text="casse préservée + mot(s) entier(s)",
CommandURL="service:net.grammalecte.AppLauncher?FA/yy/"+sSelec)
# create root menu entry
i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Rechercher “{}”".format(sSelec),
SubContainer=xSubMenuContainer)
# The controller should execute the modified context menu and stop notifying other interceptors.
return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "EXECUTE_MODIFIED") # don’t work on AOO, have to import the value
#return EXECUTE_MODIFIED # Doesn’t work since LO 5.3
except:
traceback.print_exc()
return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "IGNORED") # don’t work on AOO, have to import the value
#return IGNORED # Doesn’t work since LO 5.3
def _addItemToContextMenu (self, xContextMenu, i, sType, **args):
xMenuItem = xContextMenu.createInstance("com.sun.star.ui."+sType)
#echo("com.sun.star.ui."+sType)
for k, v in args.items():
xMenuItem.setPropertyValue(k, v)
#print("> ", k, v, xMenuItem)
xContextMenu.insertByIndex(i, xMenuItem)
return i + 1
def _getWord (self):
try:
xDoc = xDesktop.getCurrentComponent()
xViewCursor = xDoc.CurrentController.ViewCursor
if xViewCursor.CharLocale.Language != "fr":
return ""
xText = xViewCursor.Text
xCursor = xText.createTextCursorByRange(xViewCursor)
xCursor.gotoStartOfWord(False)
xCursor.gotoEndOfWord(True)
except:
traceback.print_exc()
return xCursor.String.strip('.')
class JobExecutor (XJob, unohelper.Base):
def __init__ (self, ctx):
self.ctx = ctx
global xDesktop
global oDict
global oLexicographe
try:
if not xDesktop:
xDesktop = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx)
if not oDict:
xCurCtx = uno.getComponentContext()
oGC = self.ctx.ServiceManager.createInstanceWithContext("org.openoffice.comp.pyuno.Lightproof.grammalecte", self.ctx)
if hasattr(oGC, "getDictionary"):
# https://bugs.documentfoundation.org/show_bug.cgi?id=97790
oDict = oGC.getDictionary()
else:
oDict = IBDAWG("French.bdic")
if not oLexicographe:
oLexicographe = lxg.Lexicographe(oDict)
except:
traceback.print_exc()
def execute (self, args):
if not args:
return
try:
# what version of the software?
xSettings = helpers.getConfigSetting("org.openoffice.Setup/Product", False)
sProdName = xSettings.getByName("ooName")
sVersion = xSettings.getByName("ooSetupVersion")
if (sProdName == "LibreOffice" and sVersion < "4") or sProdName == "OpenOffice.org":
return
# what event?
bCorrectEvent = False
for arg in args:
if arg.Name == "Environment":
for v in arg.Value:
if v.Name == "EnvType" and v.Value == "DOCUMENTEVENT":
bCorrectEvent = True
elif v.Name == "EventName":
pass
# check is correct event
#print "Event: %s" % v.Value
elif v.Name == "Model":
model = v.Value
if bCorrectEvent:
if model.supportsService("com.sun.star.text.TextDocument"):
xController = model.getCurrentController()
if xController:
xController.registerContextMenuInterceptor(MyContextMenuInterceptor(self.ctx))
#print("OFF")
except:
traceback.print_exc()
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(JobExecutor, "grammalecte.ContextMenuHandler", ("grammalecte.ContextMenuHandler",),)
|
Added gc_lang/fr/oxt/ContextMenu/jobs.xcu version [5be359105c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:install="http://openoffice.org/2004/installation"
oor:name="Jobs"
oor:package="org.openoffice.Office">
<node oor:name="Jobs">
<node oor:name="StartIA" oor:op="replace">
<prop oor:name="Service">
<value>grammalecte.ContextMenuHandler</value>
</prop>
</node>
</node>
<node oor:name="Events">
<node oor:name="OnNew" oor:op="fuse">
<node oor:name="JobList">
<node oor:name="StartIA" oor:op="replace"/>
</node>
</node>
<node oor:name="OnLoad" oor:op="fuse">
<node oor:name="JobList">
<node oor:name="StartIA" oor:op="replace"/>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_lang/fr/oxt/Dictionnaires/DictionarySwitcher.py version [1105138890].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# -*- coding: utf8 -*-
# French Dictionary Switcher
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import re
import traceback
import helpers
import ds_strings
from com.sun.star.task import XJobExecutor
from com.sun.star.awt import XActionListener
from com.sun.star.beans import PropertyValue
class FrenchDictionarySwitcher (unohelper.Base, XActionListener, XJobExecutor):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.xContainer = None
self.dialog = None
self.xRB_m = None
self.xRB_c = None
self.xRB_r = None
self.xRB_f = None
self.sCurrentDic = ''
self.sSelectedDic = ''
def addWidget (self, name, wtype, x, y, w, h, **kwargs):
xWidget = self.dialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
xWidget.Name = name
xWidget.PositionX = x
xWidget.PositionY = y
xWidget.Width = w
xWidget.Height = h
for k, w in kwargs.items():
setattr(xWidget, k, w)
self.dialog.insertByName(name, xWidget)
return xWidget
def run (self, sLang):
dUI = ds_strings.getUI(sLang)
# what is the current dictionary
xSettings = helpers.getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", False)
xLocations = xSettings.getByName("Locations")
m = re.search(r"fr-(\w*)\.(?:dic|aff)", xLocations[0])
self.sCurrentDic = m.group(1)
# dialog
self.dialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.dialog.Width = 200
self.dialog.Height = 290
self.dialog.Title = dUI.get('title', "#title#")
xWindowSize = helpers.getWindowSize()
self.dialog.PositionX = int((xWindowSize.Width / 2) - (self.dialog.Width / 2))
self.dialog.PositionY = int((xWindowSize.Height / 2) - (self.dialog.Height / 2))
# xWidgets
padding = 10
hspace = 60
posY1 = 20; posY2 = posY1 + hspace; posY3 = posY2 + hspace; posY4 = posY3 + hspace; posY5 = posY4 + hspace + 10;
nLblWidth = 170
nLblHeight = 20
nDescWidth = 170
nDescHeight = 40
xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD1.Height = 12
xFD1.Name = "Verdana"
xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD2.Height = 11
xFD2.Name = "Verdana"
xFD3 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD3.Height = 10
xFD3.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFD3.Name = "Verdana"
gbm = self.addWidget('groupbox', 'GroupBox', 5, 5, 190, 260, Label = dUI.get('choose', "#choose#"), FontDescriptor = xFD1, FontRelief = 1, TextColor = 0xAA2200)
# Note: the only way to group RadioButtons is to create them successively
rbm_m = self.addWidget('rb-moderne', 'RadioButton', padding, posY1, nLblWidth, nLblHeight, Label = dUI.get('moderne', "#moderne#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_m = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_m.setModel(rbm_m)
rbm_c = self.addWidget('rb-classique', 'RadioButton', padding, posY2, nLblWidth, nLblHeight, Label = dUI.get('classique', "#classique#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_c = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_c.setModel(rbm_c)
rbm_r = self.addWidget('rb-reforme1990', 'RadioButton', padding, posY3, nLblWidth, nLblHeight, Label = dUI.get('reforme1990', "#reforme1990#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_r = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_r.setModel(rbm_r)
rbm_t = self.addWidget('rb-toutesvariantes', 'RadioButton', padding, posY4, nLblWidth, nLblHeight, Label = dUI.get('toutesvariantes', "#toutesvariantes#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA)
self.xRB_t = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx)
self.xRB_t.setModel(rbm_t)
label_m = self.addWidget('label_m', 'FixedText', 20, posY1+10, nDescWidth, nDescHeight, Label = dUI.get('descModern', "#descModern#"), MultiLine = True)
label_c = self.addWidget('label_c', 'FixedText', 20, posY2+10, nDescWidth, nDescHeight, Label = dUI.get('descClassic', "#descClassic#"), MultiLine = True)
label_r = self.addWidget('label_r', 'FixedText', 20, posY3+10, nDescWidth, nDescHeight, Label = dUI.get('descReform', "#descReform#"), MultiLine = True)
label_t = self.addWidget('label_t', 'FixedText', 20, posY4+10, nDescWidth, nDescHeight, Label = dUI.get('descAllvar', "#descAllvar#"), MultiLine = True)
if self.sCurrentDic:
self.setRadioButton(self.sCurrentDic)
sMsgLabel = dUI.get('restart', "#restart#")
bButtonActive = True
else:
sMsgLabel = dUI.get('error', "#error#")
bButtonActive = False
label_info = self.addWidget('label_info', 'FixedText', 10, posY4+50, 180, 10, Label = sMsgLabel, TextColor = 0xAA2200, MultiLine = True)
button = self.addWidget('select', 'Button', padding+40, posY5, 100, 14, Label = dUI.get('select', "#select#"), FontDescriptor = xFD3, TextColor = 0x004400, Enabled = bButtonActive)
# container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.dialog)
self.xContainer.getControl('select').addActionListener(self)
self.xContainer.setVisible(False)
toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(toolkit, None)
self.xContainer.execute()
def setRadioButton (self, sDic):
if sDic == 'moderne':
self.xRB_m.setState(True)
elif sDic == 'classique':
self.xRB_c.setState(True)
elif sDic == 'reforme1990':
self.xRB_r.setState(True)
elif sDic == 'toutesvariantes':
self.xRB_t.setState(True)
else:
pass
# XActionListener
def actionPerformed (self, actionEvent):
try:
if self.xRB_m.getState():
self.sSelectedDic = 'moderne'
elif self.xRB_c.getState():
self.sSelectedDic = 'classique'
elif self.xRB_r.getState():
self.sSelectedDic = 'reforme1990'
elif self.xRB_t.getState():
self.sSelectedDic = 'toutesvariantes'
else:
# no dictionary selected
pass
if self.sSelectedDic and self.sSelectedDic != self.sCurrentDic :
# Modify the registry
xSettings = helpers.getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True)
xLocations = xSettings.getByName("Locations")
v1 = xLocations[0].replace(self.sCurrentDic, self.sSelectedDic)
v2 = xLocations[1].replace(self.sCurrentDic, self.sSelectedDic)
#xSettings.replaceByName("Locations", xLocations) # doesn't work, see line below
uno.invoke(xSettings, "replaceByName", ("Locations", uno.Any("[]string", (v1, v2))))
xSettings.commitChanges()
self.xContainer.endExecute()
except:
traceback.print_exc()
# XJobExecutor
def trigger (self, args):
try:
dialog = FrenchDictionarySwitcher(self.ctx)
dialog.run()
except:
traceback.print_exc()
#g_ImplementationHelper = unohelper.ImplementationHelper()
#g_ImplementationHelper.addImplementation(FrenchDictionarySwitcher, 'dicollecte.FrenchDictionarySwitcher', ('com.sun.star.task.Job',))
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries.xcu version [fb466201bf].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Linguistic" oor:package="org.openoffice.Office">
<node oor:name="ServiceManager">
<node oor:name="Dictionaries">
<node oor:name="HunSpellDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/fr-classique.aff %origin%/dictionaries/fr-classique.dic</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_SPELL</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
<!-- France, Belgique, Canada, Suisse, Luxembourg, Monaco -->
<!-- Burkina Faso, Côte d’Ivoire, Sénégal, Mali, Niger, Togo, Benin -->
</prop>
</node>
<node oor:name="HyphDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/hyph_fr.dic</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_HYPH</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
</prop>
</node>
<node oor:name="ThesDic_fr" oor:op="fuse">
<prop oor:name="Locations" oor:type="oor:string-list">
<value>%origin%/dictionaries/thes_fr.dat %origin%/dictionaries/thes_fr.idx</value>
</prop>
<prop oor:name="Format" oor:type="xs:string">
<value>DICT_THES</value>
</prop>
<prop oor:name="Locales" oor:type="oor:string-list">
<value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value>
</prop>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_dict_fr.txt version [b1d836334b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
_______________________________________________________________________________
DICTIONNAIRES ORTHOGRAPHIQUES FRANÇAIS
version 6.0.3
Olivier R. - dicollecte<at>free<dot>fr
Dicollecte : http://www.dicollecte.org/
Licence :
MPL : Mozilla Public License
version 2.0 -- http://www.mozilla.org/MPL/2.0/
Ce dictionnaire ne peut fonctionner qu’avec un logiciel utilisant le
correcteur Hunspell : OpenOffice.org 3.2+, Firefox 4+, Thunderbird 5+
Principaux contributeurs :
- Jean-Luc T. ;
- Sylvain P. ;
- Laurent Dubois ;
- Dominique Pellé ;
- Pierre Poisson ;
- Pierre-Yves ;
- Pierre Choffardet ;
- Leywen ;
- Romain Muller et Serge Bibauw, de l’association RENOUVO, grâce à qui
la nouvelle orthographe et ses anciennes variantes ont pu être établies ;
- Chantal Contant, pour ses recherches sur la réforme de 1990 ;
- Benoît Sagot, qui nous a autorisé à comparer notre lexique avec Lefff,
ce qui a mis en évidence des dizaines d’erreurs d’étiquetage grammatical ;
- Philipp Burgess, pour la normalisation Unicode avec Hunspell.
Merci aussi à tous ceux qui ont apporté leur pierre à l’édifice.
http://www.dicollecte.org/members.php?prj=fr
Pour participer à l’amélioration du dictionnaire, allez sur :
http://www.dicollecte.org/home.php?prj=fr
_______________________________________________________________________________
À propos des différents dictionnaires français
_______________________________________________________________________________
En 1990, le Conseil supérieur à la langue française et l’Académie française
ont proposé une réforme de l’orthographe qui concerne plusieurs milliers de
mots. L’emploi des nouvelles graphies n’est pas obligatoire. Les anciennes
comme les nouvelles sont considérées comme correctes.
Pour en savoir plus sur la réforme de 1990 :
http://www.renouvo.org/regles.php
http://www.orthographe-recommandee.info/
Malgré les rectifications modestes apportées par cette réforme, la nouvelle
orthographe suscite beaucoup de polémiques. Afin de satisfaire les exigences
de chacun, quatre dictionnaires existent, respectant différemment cette
réforme.
Dictionnaire “Moderne”
Ce dictionnaire propose une sélection des graphies classiques et
réformées, suivant la lente évolution de l’orthographe actuelle. Ce
dictionnaire contient les graphies les moins polémiques de la réforme.
Dictionnaire “Classique” [recommandé]
Ce dictionnaire est une extension du dictionnaire «Moderne» et propose
en sus des graphies alternatives, parfois encore très usitées, parfois
tombées en désuétude.
Dictionnaire “Réforme 1990”
Ce dictionnaire ne connaît que les graphies nouvelles des mots concernés
par la réforme de 1990.
Dictionnaire “Toutes variantes”
Ce dictionnaire contient les nouvelles et les anciennes graphies des
mots concernés par la réforme de 1990.
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_hyph_fr-2.9.txt version [ffc9ffe80a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
_____________________________________________________________________________
Motifs de division des mots pour le français (fr)
Version 2.9
Licence : GNU LGPL.
Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*,
version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11)
pour la cohérence avec d'autres fichiers de motifs de division
de la collection hyph-utf8. Voir http://tug.org/tex-hyphen
pour plus d'informations.
Les motifs de division de TeX sont publiés sous la licence LaTeX
Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt
Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence
GNU Lesser General Public License (LGPL)
version 2.1 ou supérieure -- http://www.gnu.org/licenses/
Auteurs :
2.9 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Journal :
2.9 Nouvelle version révisée et augmentée :
+ Traitement des noms composés à trait d'union
+ Redressement de motifs altérés
2.0 Traitement des mots avec apostrophe
1.0 Première conversion
Ce dictionnaire devrait être conforme à toutes les variantes régionales du
français.
_____________________________________________________________________
French word hyphenation patterns
Version 2.9
Language: French (fr).
License: GNU LGPL.
Origin: Based on the TeX hyphenation tables *hyph-fr.tex*,
renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11)
for consistency with other files with hyphenation patterns
in hyph-utf8 package. See http://tug.org/tex-hyphen for more details.
The TeX hyphenation tables are released under the LaTeX Project
Public License (LPPL) -- http://www.latex-project.org/lppl.txt
License: OpenOffice.org adaptions of this package are licensed under the
GNU Lesser General Public License (LGPL)
version 2.1 or higher -- http://www.gnu.org/licenses/
Authors:
2.9 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Log:
2.9 New revised and expanded version:
+ Processing of hyphenated compounds
+ Correction of altered patterns
2.0 Fix for words with apostrophe
1.0 First conversion
This dictionary is based on syllable matching patterns and therefore should
be usable under other variations of French.
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_hyph_fr-3.0.txt version [b9b9e15d66].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
_____________________________________________________________________________
Motifs de division des mots pour le français (fr)
Version 3.0.1
Licence : GNU LGPL.
Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*,
version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11)
pour la cohérence avec d'autres fichiers de motifs de division
de la collection hyph-utf8. Voir http://tug.org/tex-hyphen
pour plus d'informations.
Les motifs de division de TeX sont publiés sous la licence LaTeX
Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt
Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence
GNU Lesser General Public License (LGPL)
version 2.1 ou supérieure -- http://www.gnu.org/licenses/
Auteurs :
3.0 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Journal :
3.0.1 Correction d’un bug: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN
3.0 Nouvelle version révisée et augmentée :
+ Conversion au format de codage Unicode UTF-8
+ Traitement des noms composés à trait d'union
+ Redressement de motifs altérés
2.0 Traitement des mots avec apostrophe
1.0 Première conversion
Ce dictionnaire devrait être conforme à toutes les variantes régionales du
français.
_____________________________________________________________________
French word hyphenation patterns
Version 3.0
Language: French (fr).
License: GNU LGPL.
Origin: Based on the TeX hyphenation tables *hyph-fr.tex*,
renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11)
for consistency with other files with hyphenation patterns
in hyph-utf8 package. See http://tug.org/tex-hyphen for more details.
The TeX hyphenation tables are released under the LaTeX Project
Public License (LPPL) -- http://www.latex-project.org/lppl.txt
License: OpenOffice.org adaptions of this package are licensed under the
GNU Lesser General Public License (LGPL)
version 2.1 or higher -- http://www.gnu.org/licenses/
Authors:
3.0 Marc Lodewijck <mlodewijck@gmail.com>
2.0 Paul Pichaureau <paul.pichaureau@alcandre.net>
1.0 Blaise Drayer <blaise@drayer.ch>
Log:
3.0.1 Bug fix: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN
3.0 New revised and expanded version:
+ Conversion to UTF-8 Unicode encoding
+ Processing of hyphenated compounds
+ Correction of altered patterns
2.0 Fix for words with apostrophe
1.0 First conversion
This dictionary is based on syllable matching patterns and therefore should
be usable under other variations of French.
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_thes_fr.txt version [952166381e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
_______________________________________________________________________________
Dictionnaire des synonymes français myThes
version 2.3
Par Frédéric Labbé
Pour les mises à jour, allez sur Dicollecte :
http://www.dicollecte.org/home.php?prj=fr
Licence:
LGPL : GNU Lesser General Public License
version 2.1 ou supérieure -- http://www.gnu.org/licenses/lgpl-2.1.html
_______________________________________________________________________________
Ce dictionnaire des synonymes est encore en cours d'élaboration.
Actuellement, seules les graphies précédant la réforme de l'orthographe
de 1990 sont reconnues.
_______________________________________________________________________________
Historique
_______________________________________________________________________________
* myThes est le format de thesaurus de OOo à partir de la version 2.0
developpé par Kevin Hendricks sur la base des travaux de l'université de
Priceton: http://lingucomponent.openoffice.org/thesaurus.html
Cette version est incompatible avec le format binaire utilisé pour les
versions 1.x d'OpenOffice.org.
* La conception du thesaurus dans le format 1.0 a été initiée par Frederic Labbé.
* La version 2 a été transformée par la société Indesko.
Laurent Godard (lgodard@indesko.com)
Les catégories grammaticales des mots ont été complétées sur la base de
InDico, dictionnaire taggué developpé par InDesko et issu de la
transformation des listes de l'abu (http://abu.cnam.fr/)
* La version 2.1 n'apporte que la reconnaissance des mots avec ligatures.
Ce thesaurus a été découvert ici :
http://user.services.openoffice.org/fr/forum/viewtopic.php?p=15783#15783
* La version 2.2 est générée à partir de la base de données de Dicollecte.
Pour l'instant, seules quelques modifications ont été faites.
* Version 2.3 : nettoyage des entrées erronées.
_______________________________________________________________________________
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-classique.aff version [4d3dfc11d3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 |
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE” v6.0.3
# par Olivier R. -- licence MPL 2.0
# Généré le 25-04-2017 à 13:20
# Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/
SET UTF-8
WORDCHARS -’'1234567890.
TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ
MAP 25
MAP aàâäAÀÂÄ
MAP eéèêëEÉÈÊË
MAP iîïyIÎÏY
MAP oôöOÔÖ
MAP uùûüUÙÛÜ
MAP cçCÇ
MAP bB
MAP dD
MAP fF
MAP gG
MAP hH
MAP jJ
MAP kK
MAP lL
MAP mM
MAP nN
MAP pP
MAP qQ
MAP rR
MAP sS
MAP tT
MAP vV
MAP wW
MAP xX
MAP zZ
REP 82
REP ^Ca$ Ça
REP ^l l'
REP ^d d'
REP ^n n'
REP ^s s'
REP ^j j'
REP ^m m'
REP ^t t'
REP ^c c'
REP f ph
REP ph f
REP c qu
REP qu c
REP k qu
REP qu k
REP x ct
REP ct x
REP bb b
REP b bb
REP cc c
REP c cc
REP ff f
REP f ff
REP ll l
REP l ll
REP mm m
REP m mm
REP nn n
REP n nn
REP pp p
REP p pp
REP rr r
REP r rr
REP ss s
REP s ss
REP ss c
REP c ss
REP ss ç
REP ç ss
REP tt t
REP t tt
REP œ oe
REP oe œ
REP æ ae
REP ae æ
REP ai é
REP é ai
REP ai è
REP è ai
REP ai ê
REP ê ai
REP ei é
REP é ei
REP ei è
REP è ei
REP ei ê
REP ê ei
REP o au
REP au o
REP o eau
REP eau o
REP ett èt
REP èt ett
REP ell èl
REP èl ell
REP t th
REP th t
REP ième$ e
REP ème$ e
REP è$ e
REP mn$ min
REP ogue$ ogiste
REP ogiste$ ogue
REP disez$ dites
REP fesez$ faites
REP faisez$ faites
REP puit puits
REP sanctionnable punissable
REP questionnable discutable
REP antitartre détartrant
REP email courriel
REP construirent construisirent
KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj
ICONV 41
ICONV ’ '
ICONV ʼ '
ICONV ffi ffi
ICONV ffl ffl
ICONV ff ff
ICONV ſt ft
ICONV fi fi
ICONV fl fl
ICONV st st
ICONV à à
ICONV â â
ICONV ä ä
ICONV é é
ICONV è è
ICONV ê ê
ICONV ë ë
ICONV î î
ICONV ï ï
ICONV ô ô
ICONV ö ö
ICONV ù ù
ICONV û û
ICONV ü ü
ICONV ÿ ÿ
ICONV ç ç
ICONV À À
ICONV Â Â
ICONV Ä Ä
ICONV É É
ICONV È È
ICONV Ê Ê
ICONV Ë Ë
ICONV Î Î
ICONV Ï Ï
ICONV Ô Ô
ICONV Ö Ö
ICONV Ù Ù
ICONV Û Û
ICONV Ü Ü
ICONV Ÿ Ÿ
ICONV Ç Ç
OCONV 1
OCONV ' ’
FLAG long
FULLSTRIP
NEEDAFFIX ()
FORBIDDENWORD {}
CIRCUMFIX **
KEEPCASE ||
NOSUGGEST --
BREAK 7
BREAK -
BREAK .
BREAK ·
BREAK ^'
BREAK ^‘
BREAK '$
BREAK ’$
PFX L' Y 34
PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a l'A a
PFX L' à l'À à
PFX L' â l'Â â
PFX L' e l'E e
PFX L' é l'É é
PFX L' è l'È è
PFX L' ê l'Ê ê
PFX L' i l'I i
PFX L' î l'Î î
PFX L' o l'O o
PFX L' ô l'Ô ô
PFX L' u l'U u
PFX L' y l'Y y
PFX L' h l'H h
PFX L' œ l'Œ œ
PFX L' æ l'Æ æ
PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a L'A a
PFX L' à L'À à
PFX L' â L'Â â
PFX L' e L'E e
PFX L' é L'É é
PFX L' è L'È è
PFX L' ê L'Ê ê
PFX L' i L'I i
PFX L' î L'Î î
PFX L' o L'O o
PFX L' ô L'Ô ô
PFX L' u L'U u
PFX L' y L'Y y
PFX L' h L'H h
PFX L' œ L'Œ œ
PFX L' æ L'Æ æ
PFX D' Y 34
PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a d'A a
PFX D' à d'À à
PFX D' â d'Â â
PFX D' e d'E e
PFX D' é d'É é
PFX D' è d'È è
PFX D' ê d'Ê ê
PFX D' i d'I i
PFX D' î d'Î î
PFX D' o d'O o
PFX D' ô d'Ô ô
PFX D' u d'U u
PFX D' y d'Y y
PFX D' h d'H h
PFX D' œ d'Œ œ
PFX D' æ d'Æ æ
PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a D'A a
PFX D' à D'À à
PFX D' â D'Â â
PFX D' e D'E e
PFX D' é D'É é
PFX D' è D'È è
PFX D' ê D'Ê ê
PFX D' i D'I i
PFX D' î D'Î î
PFX D' o D'O o
PFX D' ô D'Ô ô
PFX D' u D'U u
PFX D' y D'Y y
PFX D' h D'H h
PFX D' œ D'Œ œ
PFX D' æ D'Æ æ
PFX Q' Y 34
PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a qu'A a
PFX Q' à qu'À à
PFX Q' â qu'Â â
PFX Q' e qu'E e
PFX Q' é qu'É é
PFX Q' è qu'È è
PFX Q' ê qu'Ê ê
PFX Q' i qu'I i
PFX Q' î qu'Î î
PFX Q' o qu'O o
PFX Q' ô qu'Ô ô
PFX Q' u qu'U u
PFX Q' y qu'Y y
PFX Q' h qu'H h
PFX Q' œ qu'Œ œ
PFX Q' æ qu'Æ æ
PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a Qu'A a
PFX Q' à Qu'À à
PFX Q' â Qu'Â â
PFX Q' e Qu'E e
PFX Q' é Qu'É é
PFX Q' è Qu'È è
PFX Q' ê Qu'Ê ê
PFX Q' i Qu'I i
PFX Q' î Qu'Î î
PFX Q' o Qu'O o
PFX Q' ô Qu'Ô ô
PFX Q' u Qu'U u
PFX Q' y Qu'Y y
PFX Q' h Qu'H h
PFX Q' œ Qu'Œ œ
PFX Q' æ Qu'Æ æ
PFX Q* Y 6
PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Qj Y 1
PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ]
PFX Si Y 1
PFX Si 0 s' .
SFX S. Y 1
SFX S. 0 s [^sxz]
SFX S= Y 1
SFX S= 0 s [^sxz]
SFX X. Y 3
SFX X. 0 x [aeoœ]u
SFX X. l ux al
SFX X. il ux ail
SFX A. Y 9
SFX A. 0 s [^sxz]
SFX A. an en an
SFX A. f ves f
SFX A. h hes h
SFX A. s ses s
SFX A. x xes x
SFX A. y ies y
SFX A. zz zzes zz
SFX A. z zzes [^z]z
SFX I. Y 7
SFX I. 0 s [^sxz]
SFX I. a e a
SFX I. e i e
SFX I. en ina en
SFX I. o i o
SFX I. um a um
SFX I. us i us
SFX F. Y 78
SFX F. 0 s [eë]
SFX F. e 0 [éiï]e
SFX F. e s [éiï]e
SFX F. rice eur [dt]rice
SFX F. rice eurs [dt]rice
SFX F. de d de
SFX F. de ds de
SFX F. fe f fe
SFX F. fe fs fe
SFX F. anche anc anche
SFX F. anche ancs anche
SFX F. èche ec èche
SFX F. èche ecs èche
SFX F. aiche ais aiche
SFX F. aîche ais aîche
SFX F. khe kh khe
SFX F. khe khs khe
SFX F. he h [ut]he
SFX F. he hs [ut]he
SFX F. ke k [^è]ke
SFX F. ke ks [^è]ke
SFX F. èke ek èke
SFX F. èke eks èke
SFX F. le l [aiouûh]le
SFX F. le ls [aiouûh]le
SFX F. lle l [eiu]lle
SFX F. lle ls [eiu]lle
SFX F. olle ou olle
SFX F. olle ous olle
SFX F. olle ol olle
SFX F. olle ols olle
SFX F. ne n [aiouï]ne
SFX F. ne ns [aiouï]ne
SFX F. nne n [aeo]nne
SFX F. nne ns [aeo]nne
SFX F. ène en ène
SFX F. ène ens ène
SFX F. igne in igne
SFX F. igne ins igne
SFX F. re r [aiouûy]re
SFX F. re rs [aiouûy]re
SFX F. ère er ère
SFX F. ère ers ère
SFX F. se s [^us]se
SFX F. esse e [^eo].esse
SFX F. esse es [^eo].esse
SFX F. rofesse rofès rofesse
SFX F. eresse eur eresse
SFX F. eresse eurs eresse
SFX F. oresse eur oresse
SFX F. oresse eurs oresse
SFX F. sse s [^e]sse
SFX F. use us [^eo]use
SFX F. euse eur euse
SFX F. euse eurs euse
SFX F. te t [^èt]te
SFX F. te ts [^èt]te
SFX F. tte t tte
SFX F. tte ts tte
SFX F. ète et ète
SFX F. ète ets ète
SFX F. ue u [^gq]ue
SFX F. ue us [^gq]ue
SFX F. gue g gue
SFX F. gue gs gue
SFX F. cque c cque
SFX F. cque cs cque
SFX F. que c [^c]que
SFX F. que cs [^c]que
SFX F. ève ef ève
SFX F. ève efs ève
SFX F. ve f [iïu]ve
SFX F. ve fs [iïu]ve
SFX F. uë u uë
SFX F. uë us uë
SFX F. üe u üe
SFX F. üe us üe
SFX F. ze z ze
SFX W. N 15
SFX W. e es e
SFX W. ce x ce
SFX W. use ux [eo]use
SFX W. ausse aux ausse
SFX W. ousse oux ousse
SFX W. ale al ale
SFX W. ale aux ale
SFX W. elle eau elle
SFX W. elle eaux elle
SFX W. elle el [bv]elle
SFX W. elle els [bv]elle
SFX W. ieille ieux ieille
SFX W. ieille ieil ieille
SFX W. ofolle oufou ofolle
SFX W. ofolle oufous ofolle
SFX S* Y 2
SFX S* 0 0/D'L'Q' [^sxz]
SFX S* 0 s/D'Q' [^sxz]
SFX X* Y 4
SFX X* 0 0/D'L'Q' [ul]
SFX X* 0 x/D'Q' [aeoœ]u
SFX X* l ux/D'Q' al
SFX X* il ux/D'Q' ail
SFX A* Y 20
SFX A* an an/D'L'Q' an
SFX A* an ans/D'Q' an
SFX A* an en/D'Q' an
SFX A* f f/D'L'Q' f
SFX A* f fs/D'Q' f
SFX A* f ves/D'Q' f
SFX A* h h/D'L'Q' h
SFX A* h hs/D'Q' h
SFX A* h hes/D'Q' h
SFX A* s s/D'L'Q' s
SFX A* s ses/D'Q' s
SFX A* x x/D'L'Q' x
SFX A* x xes/D'Q' x
SFX A* y y/D'L'Q' y
SFX A* y ys/D'Q' y
SFX A* y ies/D'Q' y
SFX A* zz zz/D'L'Q' zz
SFX A* zz zzes/D'Q' zz
SFX A* z z/D'L'Q' [^z]z
SFX A* z zzes/D'Q' [^z]z
SFX I* Y 17
SFX I* a a/D'L'Q' a
SFX I* a as/D'Q' a
SFX I* a e/D'Q' a
SFX I* e e/D'L'Q' e
SFX I* e es/D'Q' e
SFX I* e i/D'Q' e
SFX I* en en/D'L'Q' en
SFX I* en ens/D'Q' en
SFX I* en ina/D'Q' en
SFX I* o o/D'L'Q' o
SFX I* o os/D'Q' o
SFX I* o i/D'Q' o
SFX I* um um/D'L'Q' um
SFX I* um ums/D'Q' um
SFX I* um a/D'Q' um
SFX I* us us/D'L'Q' us
SFX I* us i/D'Q' us
SFX F* Y 59
SFX F* 0 0/D'L'Q' [eë]
SFX F* 0 s/D'Q' [eë]
SFX F* e 0/D'L'Q' [éiï]e
SFX F* e s/D'Q' [éiï]e
SFX F* rice eur/D'L'Q' [dt]rice
SFX F* rice eurs/D'Q' [dt]rice
SFX F* de d/D'L'Q' de
SFX F* de ds/D'Q' de
SFX F* he h/D'L'Q' [ut]he
SFX F* he hs/D'Q' [ut]he
SFX F* èke ek/D'L'Q' èke
SFX F* èke eks/D'Q' èke
SFX F* le l/D'L'Q' [aiouû]le
SFX F* le ls/D'Q' [aiouû]le
SFX F* lle l/D'L'Q' [eiu]lle
SFX F* lle ls/D'Q' [eiu]lle
SFX F* ne n/D'L'Q' [aiouï]ne
SFX F* ne ns/D'Q' [aiouï]ne
SFX F* nne n/D'L'Q' [aeo]nne
SFX F* nne ns/D'Q' [aeo]nne
SFX F* gne n/D'L'Q' igne
SFX F* gne ns/D'Q' igne
SFX F* re r/D'L'Q' [aiouûy]re
SFX F* re rs/D'Q' [aiouûy]re
SFX F* ère er/D'L'Q' ère
SFX F* ère ers/D'Q' ère
SFX F* se s/D'L'Q' [^us]se
SFX F* esse e/D'L'Q' [^eo].esse
SFX F* esse es/D'Q' [^eo].esse
SFX F* eresse eur/D'L'Q' eresse
SFX F* eresse eurs/D'Q' eresse
SFX F* oresse eur/D'L'Q' oresse
SFX F* oresse eurs/D'Q' oresse
SFX F* sse s/D'L'Q' [^e]sse
SFX F* use us/D'L'Q' [^eo]use
SFX F* euse eur/D'L'Q' euse
SFX F* euse eurs/D'Q' euse
SFX F* te t/D'L'Q' [^èt]te
SFX F* te ts/D'Q' [^èt]te
SFX F* tte t/D'L'Q' tte
SFX F* tte ts/D'Q' tte
SFX F* ète et/D'L'Q' ète
SFX F* ète ets/D'Q' ète
SFX F* ue u/D'L'Q' [^gq]ue
SFX F* ue us/D'Q' [^gq]ue
SFX F* gue g/D'L'Q' gue
SFX F* gue gs/D'Q' gue
SFX F* cque c/D'L'Q' cque
SFX F* cque cs/D'Q' cque
SFX F* que c/D'L'Q' [^c]que
SFX F* que cs/D'Q' [^c]que
SFX F* ève ef/D'L'Q' ève
SFX F* ève efs/D'Q' ève
SFX F* ve f/D'L'Q' [iïu]ve
SFX F* ve fs/D'Q' [iïu]ve
SFX F* uë u/D'L'Q' uë
SFX F* uë us/D'Q' uë
SFX F* üe u/D'L'Q' üe
SFX F* üe us/D'Q' üe
SFX W* Y 10
SFX W* 0 0/D'L'Q' e
SFX W* e es/D'Q' e
SFX W* ce x/D'L'Q' ce
SFX W* use ux/D'L'Q' [eo]use
SFX W* ousse oux/D'L'Q' ousse
SFX W* ausse aux/D'L'Q' ausse
SFX W* ale al/D'L'Q' ale
SFX W* ale aux/D'Q' ale
SFX W* elle eau/D'L'Q' elle
SFX W* elle eaux/D'Q' elle
PFX Um Y 29
PFX Um 0 0/S. .
PFX Um 0 l' [aàâeèéêiîoôuyœæ]
PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ]
PFX Um 0 yotta/S. .
PFX Um 0 zetta/S. .
PFX Um 0 exa/S. .
PFX Um 0 l'exa .
PFX Um 0 d'exa/S. .
PFX Um 0 peta/S. .
PFX Um 0 téra/S. .
PFX Um 0 giga/S. .
PFX Um 0 méga/S. .
PFX Um 0 kilo/S. .
PFX Um 0 hecto/S. .
PFX Um 0 l'hecto .
PFX Um 0 d'hecto/S. .
PFX Um 0 déca/S. .
PFX Um 0 déci/S. .
PFX Um 0 centi/S. .
PFX Um 0 milli/S. .
PFX Um 0 micro/S. .
PFX Um 0 nano/S. .
PFX Um 0 pico/S. .
PFX Um 0 femto/S. .
PFX Um 0 atto/S. .
PFX Um 0 l'atto .
PFX Um 0 d'atto/S. .
PFX Um 0 zepto/S. .
PFX Um 0 yocto/S. .
PFX Ui Y 28
PFX Ui 0 l' [aàâeèéêiîoôuyœæ]
PFX Ui 0 d' [aàâeèéêiîoôuyœæ]
PFX Ui 0 yotta .
PFX Ui 0 zetta .
PFX Ui 0 exa .
PFX Ui 0 l'exa .
PFX Ui 0 d'exa .
PFX Ui 0 peta .
PFX Ui 0 téra .
PFX Ui 0 giga .
PFX Ui 0 méga .
PFX Ui 0 kilo .
PFX Ui 0 hecto .
PFX Ui 0 l'hecto .
PFX Ui 0 d'hecto .
PFX Ui 0 déca .
PFX Ui 0 déci .
PFX Ui 0 centi .
PFX Ui 0 milli .
PFX Ui 0 micro .
PFX Ui 0 nano .
PFX Ui 0 pico .
PFX Ui 0 femto .
PFX Ui 0 atto .
PFX Ui 0 l'atto .
PFX Ui 0 d'atto .
PFX Ui 0 zepto .
PFX Ui 0 yocto .
PFX U. Y 20
PFX U. 0 Y .
PFX U. 0 Z .
PFX U. 0 E .
PFX U. 0 P .
PFX U. 0 T .
PFX U. 0 G .
PFX U. 0 M .
PFX U. 0 k .
PFX U. 0 h .
PFX U. 0 da .
PFX U. 0 d .
PFX U. 0 c .
PFX U. 0 m .
PFX U. 0 µ .
PFX U. 0 n .
PFX U. 0 p .
PFX U. 0 f .
PFX U. 0 a .
PFX U. 0 z .
PFX U. 0 y .
PFX n' Y 1
PFX n' 0 n' [aàâeèéêiîoôuyhœæ]
PFX q' Y 1
PFX q' 0 qu' [aàâeèéêiîoôuyhœæ]
PFX d' Y 1
PFX d' 0 d' [aàâeèéêiîoôuyhœæ]
PFX j' Y 1
PFX j' 0 j' [aàâeèéêiîoôuyhœæ]
PFX c' Y 2
PFX c' 0 c' [eé]
PFX c' 0 ç' a
PFX l' Y 1
PFX l' 0 l' [aàâeèéêiîoôuyhœæ]
PFX m' Y 1
PFX m' 0 m' [aàâeèéêiîoôuyhœæ]
PFX t' Y 1
PFX t' 0 t' [aàâeèéêiîoôuyhœæ]
PFX s' Y 1
PFX s' 0 s' [aàâeèéêiîoôuyhœæ]
SFX zA Y 49
SFX zA voir voir/n'q'd'l'm't' avoir
SFX zA voir yant/n'q'l'm't' avoir
SFX zA avoir eu avoir
SFX zA avoir eus avoir
SFX zA avoir eue avoir
SFX zA avoir eues avoir
SFX zA voir i/n'q'j'l't' avoir
SFX zA voir s/n'q'l'm't' avoir
SFX zA voir 0/n'q'c'l'm't' avoir
SFX zA voir vons/n'q'l't' avoir
SFX zA voir vez/n'q'l'm' avoir
SFX zA avoir ont/n'q'l'm't' avoir
SFX zA voir vais/n'q'j'l'm't' avoir
SFX zA voir vait/n'q'c'l'm't' avoir
SFX zA voir vions/n'q'l't' avoir
SFX zA voir viez/n'q'l'm' avoir
SFX zA voir vaient/n'q'l'm't' avoir
SFX zA avoir eus/n'q'j'l'm't' avoir
SFX zA avoir eut/n'q'c'l'm't' avoir
SFX zA avoir eûmes/n'q'l't' avoir
SFX zA avoir eûtes/n'q'l'm' avoir
SFX zA avoir eurent/n'q'l'm't' avoir
SFX zA voir urai/n'q'j'l'm't' avoir
SFX zA voir uras/n'q'l'm't' avoir
SFX zA voir ura/n'q'c'l'm't' avoir
SFX zA voir urons/n'q'l't' avoir
SFX zA voir urez/n'q'l'm' avoir
SFX zA voir uront/n'q'l'm't' avoir
SFX zA voir urais/n'q'j'l'm't' avoir
SFX zA voir urait/n'q'c'l'm't' avoir
SFX zA voir urions/n'q'l't' avoir
SFX zA voir uriez/n'q'l'm' avoir
SFX zA voir uraient/n'q'l'm't' avoir
SFX zA voir ie/n'j'l'm't' avoir
SFX zA voir ies/n'l'm't' avoir
SFX zA voir it/n'q'c'l'm't' avoir
SFX zA voir yons/n'l't' avoir
SFX zA voir yez/n'l'm' avoir
SFX zA voir ient/n'q'l'm't' avoir
SFX zA avoir eusse/n'q'j'l'm't' avoir
SFX zA avoir eussé/n'q'l'm't' avoir
SFX zA avoir eusses/n'q'l'm't' avoir
SFX zA avoir eût/n'q'c'l'm't' avoir
SFX zA avoir eussions/n'q'l't' avoir
SFX zA avoir eussiez/n'q'l'm' avoir
SFX zA avoir eussent/n'q'l'm't' avoir
SFX zA voir ie/n' avoir
SFX zA voir yons/n' avoir
SFX zA voir yez/n' avoir
SFX zE Y 45
SFX zE tre tre/n'q'd'l'm't's' être
SFX zE être étant/n'q'l'm't's' être
SFX zE être été être
SFX zE être suis être
SFX zE être es/n'q'l'm't' être
SFX zE être est/n'q'c'l'm't's' être
SFX zE être sommes être
SFX zE tre tes/n'q'l'm' être
SFX zE être sont être
SFX zE être étais/n'q'j'l'm't' être
SFX zE être était/n'q'c'l'm't's' être
SFX zE être étions/n'q'l't' être
SFX zE être étiez/n'q'l'm' être
SFX zE être étaient/n'q'c'l'm't's' être
SFX zE être fus être
SFX zE être fut être
SFX zE être fûmes être
SFX zE être fûtes être
SFX zE être furent être
SFX zE être serai être
SFX zE être seras être
SFX zE être sera être
SFX zE être serons être
SFX zE être serez être
SFX zE être seront être
SFX zE être serais être
SFX zE être serait être
SFX zE être serions être
SFX zE être seriez être
SFX zE être seraient être
SFX zE être sois être
SFX zE être soit être
SFX zE être soyons être
SFX zE être soyez être
SFX zE être soient être
SFX zE être fusse être
SFX zE être fussé être
SFX zE être fusses être
SFX zE être fût être
SFX zE être fussions être
SFX zE être fussiez être
SFX zE être fussent être
SFX zE être sois être
SFX zE être soyons être
SFX zE être soyez être
SFX a0 N 101
SFX a0 er ant [^cg]er
SFX a0 cer çant cer
SFX a0 ger geant ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er es [^y]er
SFX a0 yer yes [^ou]yer
SFX a0 yer ies [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a0 er ent [^y]er
SFX a0 yer yent [^ou]yer
SFX a0 yer ient [aou]yer
SFX a0 er ais [^cg]er
SFX a0 cer çais cer
SFX a0 ger geais ger
SFX a0 er ait [^cg]er
SFX a0 cer çait cer
SFX a0 ger geait ger
SFX a0 er ions er
SFX a0 er iez er
SFX a0 er aient [^cg]er
SFX a0 cer çaient cer
SFX a0 ger geaient ger
SFX a0 er ai [^cg]er
SFX a0 cer çai cer
SFX a0 ger geai ger
SFX a0 er as [^cg]er
SFX a0 cer ças cer
SFX a0 ger geas ger
SFX a0 er a [^cg]er
SFX a0 cer ça cer
SFX a0 ger gea ger
SFX a0 er âmes [^cg]er
SFX a0 cer çâmes cer
SFX a0 ger geâmes ger
SFX a0 er âtes [^cg]er
SFX a0 cer çâtes cer
SFX a0 ger geâtes ger
SFX a0 er èrent er
SFX a0 er erai [^y]er
SFX a0 yer yerai [^ou]yer
SFX a0 yer ierai [aou]yer
SFX a0 er eras [^y]er
SFX a0 yer yeras [^ou]yer
SFX a0 yer ieras [aou]yer
SFX a0 er era [^y]er
SFX a0 yer yera [^ou]yer
SFX a0 yer iera [aou]yer
SFX a0 er erons [^y]er
SFX a0 yer yerons [^ou]yer
SFX a0 yer ierons [aou]yer
SFX a0 er erez [^y]er
SFX a0 yer yerez [^ou]yer
SFX a0 yer ierez [aou]yer
SFX a0 er eront [^y]er
SFX a0 yer yeront [^ou]yer
SFX a0 yer ieront [aou]yer
SFX a0 er erais [^y]er
SFX a0 yer yerais [^ou]yer
SFX a0 yer ierais [aou]yer
SFX a0 er erait [^y]er
SFX a0 yer yerait [^ou]yer
SFX a0 yer ierait [aou]yer
SFX a0 er erions [^y]er
SFX a0 yer yerions [^ou]yer
SFX a0 yer ierions [aou]yer
SFX a0 er eriez [^y]er
SFX a0 yer yeriez [^ou]yer
SFX a0 yer ieriez [aou]yer
SFX a0 er eraient [^y]er
SFX a0 yer yeraient [^ou]yer
SFX a0 yer ieraient [aou]yer
SFX a0 er asse [^cg]er
SFX a0 cer çasse cer
SFX a0 ger geasse ger
SFX a0 er asses [^cg]er
SFX a0 cer çasses cer
SFX a0 ger geasses ger
SFX a0 er ât [^cg]er
SFX a0 cer çât cer
SFX a0 ger geât ger
SFX a0 er assions [^cg]er
SFX a0 cer çassions cer
SFX a0 ger geassions ger
SFX a0 er assiez [^cg]er
SFX a0 cer çassiez cer
SFX a0 ger geassiez ger
SFX a0 er assent [^cg]er
SFX a0 cer çassent cer
SFX a0 ger geassent ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a1 Y 102
SFX a1 er er/n'q'd' er
SFX a1 er ant/n'q' [^cg]er
SFX a1 cer çant/n'q' cer
SFX a1 ger geant/n'q' ger
SFX a1 er e/n'q'j' [^y]er
SFX a1 yer ye/n'q'j' [^ou]yer
SFX a1 yer ie/n'q'j' [aou]yer
SFX a1 er es/n' [^y]er
SFX a1 yer yes/n' [^ou]yer
SFX a1 yer ies/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a1 er ent/n'q' [^y]er
SFX a1 yer yent/n'q' [^ou]yer
SFX a1 yer ient/n'q' [aou]yer
SFX a1 er ais/n'j' [^cg]er
SFX a1 cer çais/n'j' cer
SFX a1 ger geais/n'j' ger
SFX a1 er ait/n'q' [^cg]er
SFX a1 cer çait/n'q' cer
SFX a1 ger geait/n'q' ger
SFX a1 er ions/n' er
SFX a1 er iez/n' er
SFX a1 er aient/n'q' [^cg]er
SFX a1 cer çaient/n'q' cer
SFX a1 ger geaient/n'q' ger
SFX a1 er ai/n'j' [^cg]er
SFX a1 cer çai/n'j' cer
SFX a1 ger geai/n'j' ger
SFX a1 er as/n' [^cg]er
SFX a1 cer ças/n' cer
SFX a1 ger geas/n' ger
SFX a1 er a/n'q' [^cg]er
SFX a1 cer ça/n'q' cer
SFX a1 ger gea/n'q' ger
SFX a1 er âmes/n' [^cg]er
SFX a1 cer çâmes/n' cer
SFX a1 ger geâmes/n' ger
SFX a1 er âtes/n' [^cg]er
SFX a1 cer çâtes/n' cer
SFX a1 ger geâtes/n' ger
SFX a1 er èrent/n'q' er
SFX a1 er erai/n'j' [^y]er
SFX a1 yer yerai/n'j' [^ou]yer
SFX a1 yer ierai/n'j' [aou]yer
SFX a1 er eras/n' [^y]er
SFX a1 yer yeras/n' [^ou]yer
SFX a1 yer ieras/n' [aou]yer
SFX a1 er era/n'q' [^y]er
SFX a1 yer yera/n'q' [^ou]yer
SFX a1 yer iera/n'q' [aou]yer
SFX a1 er erons/n' [^y]er
SFX a1 yer yerons/n' [^ou]yer
SFX a1 yer ierons/n' [aou]yer
SFX a1 er erez/n' [^y]er
SFX a1 yer yerez/n' [^ou]yer
SFX a1 yer ierez/n' [aou]yer
SFX a1 er eront/n'q' [^y]er
SFX a1 yer yeront/n'q' [^ou]yer
SFX a1 yer ieront/n'q' [aou]yer
SFX a1 er erais/n'j' [^y]er
SFX a1 yer yerais/n'j' [^ou]yer
SFX a1 yer ierais/n'j' [aou]yer
SFX a1 er erait/n'q' [^y]er
SFX a1 yer yerait/n'q' [^ou]yer
SFX a1 yer ierait/n'q' [aou]yer
SFX a1 er erions/n' [^y]er
SFX a1 yer yerions/n' [^ou]yer
SFX a1 yer ierions/n' [aou]yer
SFX a1 er eriez/n' [^y]er
SFX a1 yer yeriez/n' [^ou]yer
SFX a1 yer ieriez/n' [aou]yer
SFX a1 er eraient/n'q' [^y]er
SFX a1 yer yeraient/n'q' [^ou]yer
SFX a1 yer ieraient/n'q' [aou]yer
SFX a1 er asse/n'j' [^cg]er
SFX a1 cer çasse/n'j' cer
SFX a1 ger geasse/n'j' ger
SFX a1 er asses/n' [^cg]er
SFX a1 cer çasses/n' cer
SFX a1 ger geasses/n' ger
SFX a1 er ât/n'q' [^cg]er
SFX a1 cer çât/n'q' cer
SFX a1 ger geât/n'q' ger
SFX a1 er assions/n' [^cg]er
SFX a1 cer çassions/n' cer
SFX a1 ger geassions/n' ger
SFX a1 er assiez/n' [^cg]er
SFX a1 cer çassiez/n' cer
SFX a1 ger geassiez/n' ger
SFX a1 er assent/n'q' [^cg]er
SFX a1 cer çassent/n'q' cer
SFX a1 ger geassent/n'q' ger
SFX a1 er e/n' [^y]er
SFX a1 yer ye/n' [^ou]yer
SFX a1 yer ie/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a2 Y 102
SFX a2 er er/n'q'd'l'm't's' er
SFX a2 er ant/n'q'l'm't's' [^cg]er
SFX a2 cer çant/n'q'l'm't's' cer
SFX a2 ger geant/n'q'l'm't's' ger
SFX a2 er e/n'q'j'l'm't's' [^y]er
SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a2 yer ie/n'q'j'l'm't's' [aou]yer
SFX a2 er es/n'q'l'm' [^y]er
SFX a2 yer yes/n'q'l'm' [^ou]yer
SFX a2 yer ies/n'q'l'm' [aou]yer
SFX a2 er ons/n'q'l't' [^cg]er
SFX a2 cer çons/n'q'l't' cer
SFX a2 ger geons/n'q'l't' ger
SFX a2 er ez/n'q'l'm' er
SFX a2 er ent/n'q'l'm't's' [^y]er
SFX a2 yer yent/n'q'l'm't's' [^ou]yer
SFX a2 yer ient/n'q'l'm't's' [aou]yer
SFX a2 er ais/n'q'j'l'm't' [^cg]er
SFX a2 cer çais/n'q'j'l'm't' cer
SFX a2 ger geais/n'q'j'l'm't' ger
SFX a2 er ait/n'q'l'm't's' [^cg]er
SFX a2 cer çait/n'q'l'm't's' cer
SFX a2 ger geait/n'q'l'm't's' ger
SFX a2 er ions/n'q'l't' er
SFX a2 er iez/n'q'l'm' er
SFX a2 er aient/n'q'l'm't's' [^cg]er
SFX a2 cer çaient/n'q'l'm't's' cer
SFX a2 ger geaient/n'q'l'm't's' ger
SFX a2 er ai/n'q'j'l't' [^cg]er
SFX a2 cer çai/n'q'j'l't' cer
SFX a2 ger geai/n'q'j'l't' ger
SFX a2 er as/n'q'l'm' [^cg]er
SFX a2 cer ças/n'q'l'm' cer
SFX a2 ger geas/n'q'l'm' ger
SFX a2 er a/n'q'l'm't's' [^cg]er
SFX a2 cer ça/n'q'l'm't's' cer
SFX a2 ger gea/n'q'l'm't's' ger
SFX a2 er âmes/n'q'l't' [^cg]er
SFX a2 cer çâmes/n'q'l't' cer
SFX a2 ger geâmes/n'q'l't' ger
SFX a2 er âtes/n'q'l'm' [^cg]er
SFX a2 cer çâtes/n'q'l'm' cer
SFX a2 ger geâtes/n'q'l'm' ger
SFX a2 er èrent/n'q'l'm't's' er
SFX a2 er erai/n'q'j'l't' [^y]er
SFX a2 yer yerai/n'q'j'l't' [^ou]yer
SFX a2 yer ierai/n'q'j'l't' [aou]yer
SFX a2 er eras/n'q'l'm' [^y]er
SFX a2 yer yeras/n'q'l'm' [^ou]yer
SFX a2 yer ieras/n'q'l'm' [aou]yer
SFX a2 er era/n'q'l'm't's' [^y]er
SFX a2 yer yera/n'q'l'm't's' [^ou]yer
SFX a2 yer iera/n'q'l'm't's' [aou]yer
SFX a2 er erons/n'q'l't' [^y]er
SFX a2 yer yerons/n'q'l't' [^ou]yer
SFX a2 yer ierons/n'q'l't' [aou]yer
SFX a2 er erez/n'q'l'm' [^y]er
SFX a2 yer yerez/n'q'l'm' [^ou]yer
SFX a2 yer ierez/n'q'l'm' [aou]yer
SFX a2 er eront/n'q'l'm't's' [^y]er
SFX a2 yer yeront/n'q'l'm't's' [^ou]yer
SFX a2 yer ieront/n'q'l'm't's' [aou]yer
SFX a2 er erais/n'q'j'l'm't' [^y]er
SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a2 yer ierais/n'q'j'l'm't' [aou]yer
SFX a2 er erait/n'q'l'm't's' [^y]er
SFX a2 yer yerait/n'q'l'm't's' [^ou]yer
SFX a2 yer ierait/n'q'l'm't's' [aou]yer
SFX a2 er erions/n'q'l't' [^y]er
SFX a2 yer yerions/n'q'l't' [^ou]yer
SFX a2 yer ierions/n'q'l't' [aou]yer
SFX a2 er eriez/n'q'l'm' [^y]er
SFX a2 yer yeriez/n'q'l'm' [^ou]yer
SFX a2 yer ieriez/n'q'l'm' [aou]yer
SFX a2 er eraient/n'q'l'm't's' [^y]er
SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a2 yer ieraient/n'q'l'm't's' [aou]yer
SFX a2 er asse/n'q'j'l't' [^cg]er
SFX a2 cer çasse/n'q'j'l't' cer
SFX a2 ger geasse/n'q'j'l't' ger
SFX a2 er asses/n'q'l'm' [^cg]er
SFX a2 cer çasses/n'q'l'm' cer
SFX a2 ger geasses/n'q'l'm' ger
SFX a2 er ât/n'q'l'm't's' [^cg]er
SFX a2 cer çât/n'q'l'm't's' cer
SFX a2 ger geât/n'q'l'm't's' ger
SFX a2 er assions/n'q'l't' [^cg]er
SFX a2 cer çassions/n'q'l't' cer
SFX a2 ger geassions/n'q'l't' ger
SFX a2 er assiez/n'q'l'm' [^cg]er
SFX a2 cer çassiez/n'q'l'm' cer
SFX a2 ger geassiez/n'q'l'm' ger
SFX a2 er assent/n'q'l'm't's' [^cg]er
SFX a2 cer çassent/n'q'l'm't's' cer
SFX a2 ger geassent/n'q'l'm't's' ger
SFX a2 er e/n'l'm' [^y]er
SFX a2 yer ye/n'l'm' [^ou]yer
SFX a2 yer ie/n'l'm' [aou]yer
SFX a2 er ons/n'l' [^cg]er
SFX a2 cer çons/n'l' cer
SFX a2 ger geons/n'l' ger
SFX a2 er ez/n'l'm' er
SFX a3 Y 102
SFX a3 er er/m't's' er
SFX a3 er ant/m't's' [^cg]er
SFX a3 cer çant/m't's' cer
SFX a3 ger geant/m't's' ger
SFX a3 er e/m's' [^y]er
SFX a3 yer ye/m's' [^ou]yer
SFX a3 yer ie/m's' [aou]yer
SFX a3 er es/t' [^y]er
SFX a3 yer yes/t' [^ou]yer
SFX a3 yer ies/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 r z er
SFX a3 er ent/s' [^y]er
SFX a3 yer yent/s' [^ou]yer
SFX a3 yer ient/s' [aou]yer
SFX a3 er ais/m' [^cg]er
SFX a3 cer çais/m' cer
SFX a3 ger geais/m' ger
SFX a3 er ait/s' [^cg]er
SFX a3 cer çait/s' cer
SFX a3 ger geait/s' ger
SFX a3 er ions er
SFX a3 er iez er
SFX a3 er aient/s' [^cg]er
SFX a3 cer çaient/s' cer
SFX a3 ger geaient/s' ger
SFX a3 er ai/m' [^cg]er
SFX a3 cer çai/m' cer
SFX a3 ger geai/m' ger
SFX a3 er as/t' [^cg]er
SFX a3 cer ças/t' cer
SFX a3 ger geas/t' ger
SFX a3 er a/s' [^cg]er
SFX a3 cer ça/s' cer
SFX a3 ger gea/s' ger
SFX a3 er âmes [^cg]er
SFX a3 cer çâmes cer
SFX a3 ger geâmes ger
SFX a3 er âtes [^cg]er
SFX a3 cer çâtes/s' cer
SFX a3 ger geâtes/s' ger
SFX a3 er èrent/s' er
SFX a3 er erai/m' [^y]er
SFX a3 yer yerai/m' [^ou]yer
SFX a3 yer ierai/m' [aou]yer
SFX a3 er eras/t' [^y]er
SFX a3 yer yeras/t' [^ou]yer
SFX a3 yer ieras/t' [aou]yer
SFX a3 er era/s' [^y]er
SFX a3 yer yera/s' [^ou]yer
SFX a3 yer iera/s' [aou]yer
SFX a3 er erons [^y]er
SFX a3 yer yerons [^ou]yer
SFX a3 yer ierons [aou]yer
SFX a3 er erez [^y]er
SFX a3 yer yerez [^ou]yer
SFX a3 yer ierez [aou]yer
SFX a3 er eront/s' [^y]er
SFX a3 yer yeront/s' [^ou]yer
SFX a3 yer ieront/s' [aou]yer
SFX a3 er erais/m't' [^y]er
SFX a3 yer yerais/m't' [^ou]yer
SFX a3 yer ierais/m't' [aou]yer
SFX a3 er erait/s' [^y]er
SFX a3 yer yerait/s' [^ou]yer
SFX a3 yer ierait/s' [aou]yer
SFX a3 er erions [^y]er
SFX a3 yer yerions [^ou]yer
SFX a3 yer ierions [aou]yer
SFX a3 er eriez [^y]er
SFX a3 yer yeriez [^ou]yer
SFX a3 yer ieriez [aou]yer
SFX a3 er eraient/s' [^y]er
SFX a3 yer yeraient/s' [^ou]yer
SFX a3 yer ieraient/s' [aou]yer
SFX a3 er asse/m' [^cg]er
SFX a3 cer çasse/m' cer
SFX a3 ger geasse/m' ger
SFX a3 er asses/t' [^cg]er
SFX a3 cer çasses/t' cer
SFX a3 ger geasses/t' ger
SFX a3 er ât/s' [^cg]er
SFX a3 cer çât/s' cer
SFX a3 ger geât/s' ger
SFX a3 er assions [^cg]er
SFX a3 cer çassions cer
SFX a3 ger geassions ger
SFX a3 er assiez [^cg]er
SFX a3 cer çassiez cer
SFX a3 ger geassiez ger
SFX a3 er assent/s' [^cg]er
SFX a3 cer çassent/s' cer
SFX a3 ger geassent/s' ger
SFX a3 er e/t' [^y]er
SFX a3 yer ye/t' [^ou]yer
SFX a3 yer ie/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 er ez er
SFX a4 Y 102
SFX a4 er er/n'q'd'l'm't's' er
SFX a4 er ant/n'q'l'm't's' [^cg]er
SFX a4 cer çant/n'q'l'm't's' cer
SFX a4 ger geant/n'q'l'm't's' ger
SFX a4 er e/n'q'j'l'm't's' [^y]er
SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a4 yer ie/n'q'j'l'm't's' [aou]yer
SFX a4 er es/n'q'l'm't' [^y]er
SFX a4 yer yes/n'q'l'm't' [^ou]yer
SFX a4 yer ies/n'q'l'm't' [aou]yer
SFX a4 er ons/n'q'l't' [^cg]er
SFX a4 cer çons/n'q'l't' cer
SFX a4 ger geons/n'q'l't' ger
SFX a4 er ez/n'q'l'm' er
SFX a4 er ent/n'q'l'm't's' [^y]er
SFX a4 yer yent/n'q'l'm't's' [^ou]yer
SFX a4 yer ient/n'q'l'm't's' [aou]yer
SFX a4 er ais/n'q'j'l'm't' [^cg]er
SFX a4 cer çais/n'q'j'l'm't' cer
SFX a4 ger geais/n'q'j'l'm't' ger
SFX a4 er ait/n'q'l'm't's' [^cg]er
SFX a4 cer çait/n'q'l'm't's' cer
SFX a4 ger geait/n'q'l'm't's' ger
SFX a4 er ions/n'q'l't' er
SFX a4 er iez/n'q'l'm' er
SFX a4 er aient/n'q'l'm't's' [^cg]er
SFX a4 cer çaient/n'q'l'm't's' cer
SFX a4 ger geaient/n'q'l'm't's' ger
SFX a4 er ai/n'q'j'l'm't' [^cg]er
SFX a4 cer çai/n'q'j'l'm't' cer
SFX a4 ger geai/n'q'j'l'm't' ger
SFX a4 er as/n'q'l'm't' [^cg]er
SFX a4 cer ças/n'q'l'm't' cer
SFX a4 ger geas/n'q'l'm't' ger
SFX a4 er a/n'q'l'm't's' [^cg]er
SFX a4 cer ça/n'q'l'm't's' cer
SFX a4 ger gea/n'q'l'm't's' ger
SFX a4 er âmes/n'q'l't' [^cg]er
SFX a4 cer çâmes/n'q'l't' cer
SFX a4 ger geâmes/n'q'l't' ger
SFX a4 er âtes/n'q'l'm' [^cg]er
SFX a4 cer çâtes/n'q'l'm' cer
SFX a4 ger geâtes/n'q'l'm' ger
SFX a4 er èrent/n'q'l'm't's' er
SFX a4 er erai/n'q'j'l'm't' [^y]er
SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierai/n'q'j'l'm't' [aou]yer
SFX a4 er eras/n'q'l'm't' [^y]er
SFX a4 yer yeras/n'q'l'm't' [^ou]yer
SFX a4 yer ieras/n'q'l'm't' [aou]yer
SFX a4 er era/n'q'l'm't's' [^y]er
SFX a4 yer yera/n'q'l'm't's' [^ou]yer
SFX a4 yer iera/n'q'l'm't's' [aou]yer
SFX a4 er erons/n'q'l't' [^y]er
SFX a4 yer yerons/n'q'l't' [^ou]yer
SFX a4 yer ierons/n'q'l't' [aou]yer
SFX a4 er erez/n'q'l'm' [^y]er
SFX a4 yer yerez/n'q'l'm' [^ou]yer
SFX a4 yer ierez/n'q'l'm' [aou]yer
SFX a4 er eront/n'q'l'm't's' [^y]er
SFX a4 yer yeront/n'q'l'm't's' [^ou]yer
SFX a4 yer ieront/n'q'l'm't's' [aou]yer
SFX a4 er erais/n'q'j'l'm't' [^y]er
SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierais/n'q'j'l'm't' [aou]yer
SFX a4 er erait/n'q'l'm't's' [^y]er
SFX a4 yer yerait/n'q'l'm't's' [^ou]yer
SFX a4 yer ierait/n'q'l'm't's' [aou]yer
SFX a4 er erions/n'q'l't' [^y]er
SFX a4 yer yerions/n'q'l't' [^ou]yer
SFX a4 yer ierions/n'q'l't' [aou]yer
SFX a4 er eriez/n'q'l'm' [^y]er
SFX a4 yer yeriez/n'q'l'm' [^ou]yer
SFX a4 yer ieriez/n'q'l'm' [aou]yer
SFX a4 er eraient/n'q'l'm't's' [^y]er
SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a4 yer ieraient/n'q'l'm't's' [aou]yer
SFX a4 er asse/n'q'j'l'm't' [^cg]er
SFX a4 cer çasse/n'q'j'l'm't' cer
SFX a4 ger geasse/n'q'j'l'm't' ger
SFX a4 er asses/n'q'l'm't' [^cg]er
SFX a4 cer çasses/n'q'l'm't' cer
SFX a4 ger geasses/n'q'l'm't' ger
SFX a4 er ât/n'q'l'm't's' [^cg]er
SFX a4 cer çât/n'q'l'm't's' cer
SFX a4 ger geât/n'q'l'm't's' ger
SFX a4 er assions/n'q'l't' [^cg]er
SFX a4 cer çassions/n'q'l't' cer
SFX a4 ger geassions/n'q'l't' ger
SFX a4 er assiez/n'q'l'm' [^cg]er
SFX a4 cer çassiez/n'q'l'm' cer
SFX a4 ger geassiez/n'q'l'm' ger
SFX a4 er assent/n'q'l'm't's' [^cg]er
SFX a4 cer çassent/n'q'l'm't's' cer
SFX a4 ger geassent/n'q'l'm't's' ger
SFX a4 er e/n'l'm't' [^y]er
SFX a4 yer ye/n'l'm't' [^ou]yer
SFX a4 yer ie/n'l'm't' [aou]yer
SFX a4 er ons/n'l' [^cg]er
SFX a4 cer çons/n'l' cer
SFX a4 ger geons/n'l' ger
SFX a4 er ez/n'l'm' er
SFX a5 Y 102
SFX a5 er er/n'q'd'm't's' er
SFX a5 er ant/n'q'm't's' [^cg]er
SFX a5 cer çant/n'q'm't's' cer
SFX a5 ger geant/n'q'm't's' ger
SFX a5 er e/n'q'j'm't's' [^y]er
SFX a5 yer ye/n'q'j'm't's' [^ou]yer
SFX a5 yer ie/n'q'j'm't's' [aou]yer
SFX a5 er es/n'm't' [^y]er
SFX a5 yer yes/n'm't' [^ou]yer
SFX a5 yer ies/n'm't' [aou]yer
SFX a5 er ons/n't' [^cg]er
SFX a5 cer çons/n't' cer
SFX a5 ger geons/n't' ger
SFX a5 r z/n'm' er
SFX a5 er ent/n'q'm't's' [^y]er
SFX a5 yer yent/n'q'm't's' [^ou]yer
SFX a5 yer ient/n'q'm't's' [aou]yer
SFX a5 er ais/n'j'm't' [^cg]er
SFX a5 cer çais/n'j'm't' cer
SFX a5 ger geais/n'j'm't' ger
SFX a5 er ait/n'q'm't's' [^cg]er
SFX a5 cer çait/n'q'm't's' cer
SFX a5 ger geait/n'q'm't's' ger
SFX a5 er ions/n't' er
SFX a5 er iez/n'm' er
SFX a5 er aient/n'q'm't's' [^cg]er
SFX a5 cer çaient/n'q'm't's' cer
SFX a5 ger geaient/n'q'm't's' ger
SFX a5 er ai/n'j'm't' [^cg]er
SFX a5 cer çai/n'j'm't' cer
SFX a5 ger geai/n'j'm't' ger
SFX a5 er as/n'm't' [^cg]er
SFX a5 cer ças/n'm't' cer
SFX a5 ger geas/n'm't' ger
SFX a5 er a/n'q'm't's' [^cg]er
SFX a5 cer ça/n'q'm't's' cer
SFX a5 ger gea/n'q'm't's' ger
SFX a5 er âmes/n't' [^cg]er
SFX a5 cer çâmes/n't' cer
SFX a5 ger geâmes/n't' ger
SFX a5 er âtes/n'm' [^cg]er
SFX a5 cer çâtes/n'm' cer
SFX a5 ger geâtes/n'm' ger
SFX a5 er èrent/n'q'm't's' er
SFX a5 er erai/n'j'm't' [^y]er
SFX a5 yer yerai/n'j'm't' [^ou]yer
SFX a5 yer ierai/n'j'm't' [aou]yer
SFX a5 er eras/n'm't' [^y]er
SFX a5 yer yeras/n'm't' [^ou]yer
SFX a5 yer ieras/n'm't' [aou]yer
SFX a5 er era/n'q'm't's' [^y]er
SFX a5 yer yera/n'q'm't's' [^ou]yer
SFX a5 yer iera/n'q'm't's' [aou]yer
SFX a5 er erons/n't' [^y]er
SFX a5 yer yerons/n't' [^ou]yer
SFX a5 yer ierons/n't' [aou]yer
SFX a5 er erez/n'm' [^y]er
SFX a5 yer yerez/n'm' [^ou]yer
SFX a5 yer ierez/n'm' [aou]yer
SFX a5 er eront/n'q'm't's' [^y]er
SFX a5 yer yeront/n'q'm't's' [^ou]yer
SFX a5 yer ieront/n'q'm't's' [aou]yer
SFX a5 er erais/n'j'm't' [^y]er
SFX a5 yer yerais/n'j'm't' [^ou]yer
SFX a5 yer ierais/n'j'm't' [aou]yer
SFX a5 er erait/n'q'm't's' [^y]er
SFX a5 yer yerait/n'q'm't's' [^ou]yer
SFX a5 yer ierait/n'q'm't's' [aou]yer
SFX a5 er erions/n't' [^y]er
SFX a5 yer yerions/n't' [^ou]yer
SFX a5 yer ierions/n't' [aou]yer
SFX a5 er eriez/n'm' [^y]er
SFX a5 yer yeriez/n'm' [^ou]yer
SFX a5 yer ieriez/n'm' [aou]yer
SFX a5 er eraient/n'q'm't's' [^y]er
SFX a5 yer yeraient/n'q'm't's' [^ou]yer
SFX a5 yer ieraient/n'q'm't's' [aou]yer
SFX a5 er asse/n'j'm't' [^cg]er
SFX a5 cer çasse/n'j'm't' cer
SFX a5 ger geasse/n'j'm't' ger
SFX a5 er asses/n'm't' [^cg]er
SFX a5 cer çasses/n'm't' cer
SFX a5 ger geasses/n'm't' ger
SFX a5 er ât/n'q'm't's' [^cg]er
SFX a5 cer çât/n'q'm't's' cer
SFX a5 ger geât/n'q'm't's' ger
SFX a5 er assions/n't' [^cg]er
SFX a5 cer çassions/n't' cer
SFX a5 ger geassions/n't' ger
SFX a5 er assiez/n'm' [^cg]er
SFX a5 cer çassiez/n'm' cer
SFX a5 ger geassiez/n'm' ger
SFX a5 er assent/n'q'm't's' [^cg]er
SFX a5 cer çassent/n'q'm't's' cer
SFX a5 ger geassent/n'q'm't's' ger
SFX a5 er e/n'm' [^y]er
SFX a5 yer e/n'm' [^ou]yer
SFX a5 yer ie/n'm' [aou]yer
SFX a5 er ons/n' [^cg]er
SFX a5 cer çons/n' cer
SFX a5 ger geons/n' ger
SFX a5 er ez/n'm' er
SFX a6 Y 72
SFX a6 er er/s' er
SFX a6 er ant/s' [^cg]er
SFX a6 cer çant/s' cer
SFX a6 ger geant/s' ger
SFX a6 er e/s' [^y]er
SFX a6 yer ye/s' [^ou]yer
SFX a6 yer ie/s' [aou]yer
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a6 er ent/s' [^y]er
SFX a6 yer yent/s' [^ou]yer
SFX a6 yer ient/s' [aou]yer
SFX a6 er ait/s' [^cg]er
SFX a6 cer çait/s' cer
SFX a6 ger geait/s' ger
SFX a6 er ions er
SFX a6 er iez er
SFX a6 er aient/s' [^cg]er
SFX a6 cer çaient/s' cer
SFX a6 ger geaient/s' ger
SFX a6 er a/s' [^cg]er
SFX a6 cer ça/s' cer
SFX a6 ger gea/s' ger
SFX a6 er âmes [^cg]er
SFX a6 cer çâmes cer
SFX a6 ger geâmes ger
SFX a6 er âtes [^cg]er
SFX a6 cer çâtes/s' cer
SFX a6 ger geâtes/s' ger
SFX a6 er èrent/s' er
SFX a6 er era/s' [^y]er
SFX a6 yer yera/s' [^ou]yer
SFX a6 yer iera/s' [aou]yer
SFX a6 er erons [^y]er
SFX a6 yer yerons [^ou]yer
SFX a6 yer ierons [aou]yer
SFX a6 er erez [^y]er
SFX a6 yer yerez [^ou]yer
SFX a6 yer ierez [aou]yer
SFX a6 er eront/s' [^y]er
SFX a6 yer yeront/s' [^ou]yer
SFX a6 yer ieront/s' [aou]yer
SFX a6 er erait/s' [^y]er
SFX a6 yer yerait/s' [^ou]yer
SFX a6 yer ierait/s' [aou]yer
SFX a6 er erions [^y]er
SFX a6 yer yerions [^ou]yer
SFX a6 yer ierions [aou]yer
SFX a6 er eriez [^y]er
SFX a6 yer yeriez [^ou]yer
SFX a6 yer ieriez [aou]yer
SFX a6 er eraient/s' [^y]er
SFX a6 yer yeraient/s' [^ou]yer
SFX a6 yer ieraient/s' [aou]yer
SFX a6 er ât/s' [^cg]er
SFX a6 cer çât/s' cer
SFX a6 ger geât/s' ger
SFX a6 er assions [^cg]er
SFX a6 cer çassions cer
SFX a6 ger geassions ger
SFX a6 er assiez [^cg]er
SFX a6 cer çassiez cer
SFX a6 ger geassiez ger
SFX a6 er assent/s' [^cg]er
SFX a6 cer çassent/s' cer
SFX a6 ger geassent/s' ger
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a8 N 16
SFX a8 er er/n'd' er
SFX a8 er ant [^cg]er
SFX a8 cer çant cer
SFX a8 ger geant ger
SFX a8 er e/n' er
SFX a8 er ait/n' [^cg]er
SFX a8 cer çait/n' cer
SFX a8 ger geait/n' ger
SFX a8 er a/n' [^cg]er
SFX a8 cer ça/n' cer
SFX a8 ger gea/n' ger
SFX a8 er era/n' er
SFX a8 er erait/n' er
SFX a8 er ât/n' [^cg]er
SFX a8 cer çât/n' cer
SFX a8 ger geât/n' ger
SFX a9 N 10
SFX a9 er ent/n' er
SFX a9 er aient/n' [^cg]er
SFX a9 cer çaient/n' cer
SFX a9 ger geaient/n' ger
SFX a9 er èrent/n' er
SFX a9 er eront/n' er
SFX a9 er eraient/n' er
SFX a9 er assent/n' [^cg]er
SFX a9 cer çassent/n' cer
SFX a9 ger geassent/n' ger
SFX b0 N 189
SFX b0 er ant [^c]er
SFX b0 cer çant cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 ecer èces ecer
SFX b0 emer èmes emer
SFX b0 ener ènes ener
SFX b0 eper èpes eper
SFX b0 erer ères erer
SFX b0 eser èses eser
SFX b0 ever èves ever
SFX b0 evrer èvres evrer
SFX b0 eter ètes eter
SFX b0 eler èles eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b0 ecer ècent ecer
SFX b0 emer èment emer
SFX b0 ener ènent ener
SFX b0 eper èpent eper
SFX b0 erer èrent erer
SFX b0 eser èsent eser
SFX b0 ever èvent ever
SFX b0 evrer èvrent evrer
SFX b0 eter ètent eter
SFX b0 eler èlent eler
SFX b0 er ais [^c]er
SFX b0 cer çais cer
SFX b0 er ait [^c]er
SFX b0 cer çait cer
SFX b0 er ions er
SFX b0 er iez er
SFX b0 er aient [^c]er
SFX b0 cer çaient cer
SFX b0 er ai [^c]er
SFX b0 cer çai cer
SFX b0 er as [^c]er
SFX b0 cer ças cer
SFX b0 er a [^c]er
SFX b0 cer ça cer
SFX b0 er âmes [^c]er
SFX b0 cer çâmes cer
SFX b0 er âtes [^c]er
SFX b0 cer çâtes cer
SFX b0 er èrent er
SFX b0 ecer ècerai ecer
SFX b0 emer èmerai emer
SFX b0 ener ènerai ener
SFX b0 eper èperai eper
SFX b0 erer èrerai erer
SFX b0 eser èserai eser
SFX b0 ever èverai ever
SFX b0 evrer èvrerai evrer
SFX b0 eter èterai eter
SFX b0 eler èlerai eler
SFX b0 ecer èceras ecer
SFX b0 emer èmeras emer
SFX b0 ener èneras ener
SFX b0 eper èperas eper
SFX b0 erer èreras erer
SFX b0 eser èseras eser
SFX b0 ever èveras ever
SFX b0 evrer èvreras evrer
SFX b0 eter èteras eter
SFX b0 eler èleras eler
SFX b0 ecer ècera ecer
SFX b0 emer èmera emer
SFX b0 ener ènera ener
SFX b0 eper èpera eper
SFX b0 erer èrera erer
SFX b0 eser èsera eser
SFX b0 ever èvera ever
SFX b0 evrer èvrera evrer
SFX b0 eter ètera eter
SFX b0 eler èlera eler
SFX b0 ecer ècerons ecer
SFX b0 emer èmerons emer
SFX b0 ener ènerons ener
SFX b0 eper èperons eper
SFX b0 erer èrerons erer
SFX b0 eser èserons eser
SFX b0 ever èverons ever
SFX b0 evrer èvrerons evrer
SFX b0 eter èterons eter
SFX b0 eler èlerons eler
SFX b0 ecer ècerez ecer
SFX b0 emer èmerez emer
SFX b0 ener ènerez ener
SFX b0 eper èperez eper
SFX b0 erer èrerez erer
SFX b0 eser èserez eser
SFX b0 ever èverez ever
SFX b0 evrer èvrerez evrer
SFX b0 eter èterez eter
SFX b0 eler èlerez eler
SFX b0 ecer èceront ecer
SFX b0 emer èmeront emer
SFX b0 ener èneront ener
SFX b0 eper èperont eper
SFX b0 erer èreront erer
SFX b0 eser èseront eser
SFX b0 ever èveront ever
SFX b0 evrer èvreront evrer
SFX b0 eter èteront eter
SFX b0 eler èleront eler
SFX b0 ecer ècerais ecer
SFX b0 emer èmerais emer
SFX b0 ener ènerais ener
SFX b0 eper èperais eper
SFX b0 erer èrerais erer
SFX b0 eser èserais eser
SFX b0 ever èverais ever
SFX b0 evrer èvrerais evrer
SFX b0 eter èterais eter
SFX b0 eler èlerais eler
SFX b0 ecer ècerait ecer
SFX b0 emer èmerait emer
SFX b0 ener ènerait ener
SFX b0 eper èperait eper
SFX b0 erer èrerait erer
SFX b0 eser èserait eser
SFX b0 ever èverait ever
SFX b0 evrer èvrerait evrer
SFX b0 eter èterait eter
SFX b0 eler èlerait eler
SFX b0 ecer ècerions ecer
SFX b0 emer èmerions emer
SFX b0 ener ènerions ener
SFX b0 eper èperions eper
SFX b0 erer èrerions erer
SFX b0 eser èserions eser
SFX b0 ever èverions ever
SFX b0 evrer èvrerions evrer
SFX b0 eter èterions eter
SFX b0 eler èlerions eler
SFX b0 ecer èceriez ecer
SFX b0 emer èmeriez emer
SFX b0 ener èneriez ener
SFX b0 eper èperiez eper
SFX b0 erer èreriez erer
SFX b0 eser èseriez eser
SFX b0 ever èveriez ever
SFX b0 evrer èvreriez evrer
SFX b0 eter èteriez eter
SFX b0 eler èleriez eler
SFX b0 ecer èceraient ecer
SFX b0 emer èmeraient emer
SFX b0 ener èneraient ener
SFX b0 eper èperaient eper
SFX b0 erer èreraient erer
SFX b0 eser èseraient eser
SFX b0 ever èveraient ever
SFX b0 evrer èvreraient evrer
SFX b0 eter èteraient eter
SFX b0 eler èleraient eler
SFX b0 er asse [^c]er
SFX b0 cer çasse cer
SFX b0 er asses [^c]er
SFX b0 cer çasses cer
SFX b0 er ât [^c]er
SFX b0 cer çât cer
SFX b0 er assions [^c]er
SFX b0 cer çassions cer
SFX b0 er assiez [^c]er
SFX b0 cer çassiez cer
SFX b0 er assent [^c]er
SFX b0 cer çassent cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b1 Y 190
SFX b1 er er/n'q'd' er
SFX b1 er ant/n'q' [^c]er
SFX b1 cer çant/n'q' cer
SFX b1 ecer èce/n'j'q' ecer
SFX b1 emer ème/n'j'q' emer
SFX b1 ener ène/n'j'q' ener
SFX b1 eper èpe/n'j'q' eper
SFX b1 erer ère/n'j'q' erer
SFX b1 eser èse/n'j'q' eser
SFX b1 ever ève/n'j'q' ever
SFX b1 evrer èvre/n'j'q' evrer
SFX b1 eter ète/n'j'q' eter
SFX b1 eler èle/n'j'q' eler
SFX b1 ecer èces/n' ecer
SFX b1 emer èmes/n' emer
SFX b1 ener ènes/n' ener
SFX b1 eper èpes/n' eper
SFX b1 erer ères/n' erer
SFX b1 eser èses/n' eser
SFX b1 ever èves/n' ever
SFX b1 evrer èvres/n' evrer
SFX b1 eter ètes/n' eter
SFX b1 eler èles/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b1 ecer ècent/n'q' ecer
SFX b1 emer èment/n'q' emer
SFX b1 ener ènent/n'q' ener
SFX b1 eper èpent/n'q' eper
SFX b1 erer èrent/n'q' erer
SFX b1 eser èsent/n'q' eser
SFX b1 ever èvent/n'q' ever
SFX b1 evrer èvrent/n'q' evrer
SFX b1 eter ètent/n'q' eter
SFX b1 eler èlent/n'q' eler
SFX b1 er ais/n'j' [^c]er
SFX b1 cer çais/n'j' cer
SFX b1 er ait/n'q' [^c]er
SFX b1 cer çait/n'q' cer
SFX b1 er ions/n' er
SFX b1 er iez/n' er
SFX b1 er aient/n'q' [^c]er
SFX b1 cer çaient/n'q' cer
SFX b1 er ai/n'j' [^c]er
SFX b1 cer çai/n'j' cer
SFX b1 er as/n' [^c]er
SFX b1 cer ças/n' cer
SFX b1 er a/n'q' [^c]er
SFX b1 cer ça/n'q' cer
SFX b1 er âmes/n' [^c]er
SFX b1 cer çâmes/n' cer
SFX b1 er âtes/n' [^c]er
SFX b1 cer çâtes/n' cer
SFX b1 er èrent/n'q' er
SFX b1 ecer ècerai/n'j' ecer
SFX b1 emer èmerai/n'j' emer
SFX b1 ener ènerai/n'j' ener
SFX b1 eper èperai/n'j' eper
SFX b1 erer èrerai/n'j' erer
SFX b1 eser èserai/n'j' eser
SFX b1 ever èverai/n'j' ever
SFX b1 evrer èvrerai/n'j' evrer
SFX b1 eter èterai/n'j' eter
SFX b1 eler èlerai/n'j' eler
SFX b1 ecer èceras/n' ecer
SFX b1 emer èmeras/n' emer
SFX b1 ener èneras/n' ener
SFX b1 eper èperas/n' eper
SFX b1 erer èreras/n' erer
SFX b1 eser èseras/n' eser
SFX b1 ever èveras/n' ever
SFX b1 evrer èvreras/n' evrer
SFX b1 eter èteras/n' eter
SFX b1 eler èleras/n' eler
SFX b1 ecer ècera/n'q' ecer
SFX b1 emer èmera/n'q' emer
SFX b1 ener ènera/n'q' ener
SFX b1 eper èpera/n'q' eper
SFX b1 erer èrera/n'q' erer
SFX b1 eser èsera/n'q' eser
SFX b1 ever èvera/n'q' ever
SFX b1 evrer èvrera/n'q' evrer
SFX b1 eter ètera/n'q' eter
SFX b1 eler èlera/n'q' eler
SFX b1 ecer ècerons/n' ecer
SFX b1 emer èmerons/n' emer
SFX b1 ener ènerons/n' ener
SFX b1 eper èperons/n' eper
SFX b1 erer èrerons/n' erer
SFX b1 eser èserons/n' eser
SFX b1 ever èverons/n' ever
SFX b1 evrer èvrerons/n' evrer
SFX b1 eter èterons/n' eter
SFX b1 eler èlerons/n' eler
SFX b1 ecer ècerez/n' ecer
SFX b1 emer èmerez/n' emer
SFX b1 ener ènerez/n' ener
SFX b1 eper èperez/n' eper
SFX b1 erer èrerez/n' erer
SFX b1 eser èserez/n' eser
SFX b1 ever èverez/n' ever
SFX b1 evrer èvrerez/n' evrer
SFX b1 eter èterez/n' eter
SFX b1 eler èlerez/n' eler
SFX b1 ecer èceront/n'q' ecer
SFX b1 emer èmeront/n'q' emer
SFX b1 ener èneront/n'q' ener
SFX b1 eper èperont/n'q' eper
SFX b1 erer èreront/n'q' erer
SFX b1 eser èseront/n'q' eser
SFX b1 ever èveront/n'q' ever
SFX b1 evrer èvreront/n'q' evrer
SFX b1 eter èteront/n'q' eter
SFX b1 eler èleront/n'q' eler
SFX b1 ecer ècerais/n'j' ecer
SFX b1 emer èmerais/n'j' emer
SFX b1 ener ènerais/n'j' ener
SFX b1 eper èperais/n'j' eper
SFX b1 erer èrerais/n'j' erer
SFX b1 eser èserais/n'j' eser
SFX b1 ever èverais/n'j' ever
SFX b1 evrer èvrerais/n'j' evrer
SFX b1 eter èterais/n'j' eter
SFX b1 eler èlerais/n' eler
SFX b1 ecer ècerait/n'q' ecer
SFX b1 emer èmerait/n'q' emer
SFX b1 ener ènerait/n'q' ener
SFX b1 eper èperait/n'q' eper
SFX b1 erer èrerait/n'q' erer
SFX b1 eser èserait/n'q' eser
SFX b1 ever èverait/n'q' ever
SFX b1 evrer èvrerait/n'q' evrer
SFX b1 eter èterait/n'q' eter
SFX b1 eler èlerait/n'q' eler
SFX b1 ecer ècerions/n' ecer
SFX b1 emer èmerions/n' emer
SFX b1 ener ènerions/n' ener
SFX b1 eper èperions/n' eper
SFX b1 erer èrerions/n' erer
SFX b1 eser èserions/n' eser
SFX b1 ever èverions/n' ever
SFX b1 evrer èvrerions/n' evrer
SFX b1 eter èterions/n' eter
SFX b1 eler èlerions/n' eler
SFX b1 ecer èceriez/n' ecer
SFX b1 emer èmeriez/n' emer
SFX b1 ener èneriez/n' ener
SFX b1 eper èperiez/n' eper
SFX b1 erer èreriez/n' erer
SFX b1 eser èseriez/n' eser
SFX b1 ever èveriez/n' ever
SFX b1 evrer èvreriez/n' evrer
SFX b1 eter èteriez/n' eter
SFX b1 eler èleriez/n' eler
SFX b1 ecer èceraient/n'q' ecer
SFX b1 emer èmeraient/n'q' emer
SFX b1 ener èneraient/n'q' ener
SFX b1 eper èperaient/n'q' eper
SFX b1 erer èreraient/n'q' erer
SFX b1 eser èseraient/n'q' eser
SFX b1 ever èveraient/n'q' ever
SFX b1 evrer èvreraient/n'q' evrer
SFX b1 eter èteraient/n'q' eter
SFX b1 eler èleraient/n'q' eler
SFX b1 er asse/n'j' [^c]er
SFX b1 cer çasse/n'j' cer
SFX b1 er asses/n' [^c]er
SFX b1 cer çasses/n' cer
SFX b1 er ât/n'q' [^c]er
SFX b1 cer çât/n'q' cer
SFX b1 er assions/n' [^c]er
SFX b1 cer çassions/n' cer
SFX b1 er assiez/n' [^c]er
SFX b1 cer çassiez/n' cer
SFX b1 er assent/n'q' [^c]er
SFX b1 cer çassent/n'q' cer
SFX b1 ecer èce/n' ecer
SFX b1 emer ème/n' emer
SFX b1 ener ène/n' ener
SFX b1 eper èpe/n' eper
SFX b1 erer ère/n' erer
SFX b1 eser èse/n' eser
SFX b1 ever ève/n' ever
SFX b1 evrer èvre/n' evrer
SFX b1 eter ète/n' eter
SFX b1 eler èle/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b2 Y 190
SFX b2 er er/n'q'd'l'm't's' er
SFX b2 er ant/n'q'l'm't's' [^c]er
SFX b2 cer çant/n'q'l'm't's' cer
SFX b2 ecer èce/n'q'j'l'm't's' ecer
SFX b2 emer ème/n'q'j'l'm't's' emer
SFX b2 ener ène/n'q'j'l'm't's' ener
SFX b2 eper èpe/n'q'j'l'm't's' eper
SFX b2 erer ère/n'q'j'l'm't's' erer
SFX b2 eser èse/n'q'j'l'm't's' eser
SFX b2 ever ève/n'q'j'l'm't's' ever
SFX b2 evrer èvre/n'q'j'l'm't's' evrer
SFX b2 eter ète/n'q'j'l'm't's' eter
SFX b2 eler èle/n'q'j'l'm't's' eler
SFX b2 ecer èces/n'q'l'm' ecer
SFX b2 emer èmes/n'q'l'm' emer
SFX b2 ener ènes/n'q'l'm' ener
SFX b2 eper èpes/n'q'l'm' eper
SFX b2 erer ères/n'q'l'm' erer
SFX b2 eser èses/n'q'l'm' eser
SFX b2 ever èves/n'q'l'm' ever
SFX b2 evrer èvres/n'q'l'm' evrer
SFX b2 eter ètes/n'q'l'm' eter
SFX b2 eler èles/n'q'l'm' eler
SFX b2 er ons/n'q'l't' [^c]er
SFX b2 cer çons/n'q'l't' cer
SFX b2 er ez/n'q'l'm' er
SFX b2 ecer ècent/n'q'l'm't's' ecer
SFX b2 emer èment/n'q'l'm't's' emer
SFX b2 ener ènent/n'q'l'm't's' ener
SFX b2 eper èpent/n'q'l'm't's' eper
SFX b2 erer èrent/n'q'l'm't's' erer
SFX b2 eser èsent/n'q'l'm't's' eser
SFX b2 ever èvent/n'q'l'm't's' ever
SFX b2 evrer èvrent/n'q'l'm't's' evrer
SFX b2 eter ètent/n'q'l'm't's' eter
SFX b2 eler èlent/n'q'l'm't's' eler
SFX b2 er ais/n'q'j'l'm't' [^c]er
SFX b2 cer çais/n'q'j'l'm't' cer
SFX b2 er ait/n'q'l'm't's' [^c]er
SFX b2 cer çait/n'q'l'm't's' cer
SFX b2 er ions/n'q'l't' er
SFX b2 er iez/n'q'l'm' er
SFX b2 er aient/n'q'l'm't's' [^c]er
SFX b2 cer çaient/n'q'l'm't's' cer
SFX b2 er ai/n'q'j'l't' [^c]er
SFX b2 cer çai/n'q'j'l't' cer
SFX b2 er as/n'q'l'm' [^c]er
SFX b2 cer ças/n'q'l'm' cer
SFX b2 er a/n'q'l'm't's' [^c]er
SFX b2 cer ça/n'q'l'm't's' cer
SFX b2 er âmes/n'q'l't' [^c]er
SFX b2 cer çâmes/n'q'l't' cer
SFX b2 er âtes/n'q'l'm' [^c]er
SFX b2 cer çâtes/n'q'l'm' cer
SFX b2 er èrent/n'q'l'm't's' er
SFX b2 ecer ècerai/n'q'j'l't' ecer
SFX b2 emer èmerai/n'q'j'l't' emer
SFX b2 ener ènerai/n'q'j'l't' ener
SFX b2 eper èperai/n'q'j'l't' eper
SFX b2 erer èrerai/n'q'j'l't' erer
SFX b2 eser èserai/n'q'j'l't' eser
SFX b2 ever èverai/n'q'j'l't' ever
SFX b2 evrer èvrerai/n'q'j'l't' evrer
SFX b2 eter èterai/n'q'j'l't' eter
SFX b2 eler èlerai/n'q'j'l't' eler
SFX b2 ecer èceras/n'q'l'm' ecer
SFX b2 emer èmeras/n'q'l'm' emer
SFX b2 ener èneras/n'q'l'm' ener
SFX b2 eper èperas/n'q'l'm' eper
SFX b2 erer èreras/n'q'l'm' erer
SFX b2 eser èseras/n'q'l'm' eser
SFX b2 ever èveras/n'q'l'm' ever
SFX b2 evrer èvreras/n'q'l'm' evrer
SFX b2 eter èteras/n'q'l'm' eter
SFX b2 eler èleras/n'q'l'm' eler
SFX b2 ecer ècera/n'q'l'm't's' ecer
SFX b2 emer èmera/n'q'l'm't's' emer
SFX b2 ener ènera/n'q'l'm't's' ener
SFX b2 eper èpera/n'q'l'm't's' eper
SFX b2 erer èrera/n'q'l'm't's' erer
SFX b2 eser èsera/n'q'l'm't's' eser
SFX b2 ever èvera/n'q'l'm't's' ever
SFX b2 evrer èvrera/n'q'l'm't's' evrer
SFX b2 eter ètera/n'q'l'm't's' eter
SFX b2 eler èlera/n'q'l'm't's' eler
SFX b2 ecer ècerons/n'q'l't' ecer
SFX b2 emer èmerons/n'q'l't' emer
SFX b2 ener ènerons/n'q'l't' ener
SFX b2 eper èperons/n'q'l't' eper
SFX b2 erer èrerons/n'q'l't' erer
SFX b2 eser èserons/n'q'l't' eser
SFX b2 ever èverons/n'q'l't' ever
SFX b2 evrer èvrerons/n'q'l't' evrer
SFX b2 eter èterons/n'q'l't' eter
SFX b2 eler èlerons/n'q'l't' eler
SFX b2 ecer ècerez/n'q'l'm' ecer
SFX b2 emer èmerez/n'q'l'm' emer
SFX b2 ener ènerez/n'q'l'm' ener
SFX b2 eper èperez/n'q'l'm' eper
SFX b2 erer èrerez/n'q'l'm' erer
SFX b2 eser èserez/n'q'l'm' eser
SFX b2 ever èverez/n'q'l'm' ever
SFX b2 evrer èvrerez/n'q'l'm' evrer
SFX b2 eter èterez/n'q'l'm' eter
SFX b2 eler èlerez/n'q'l'm' eler
SFX b2 ecer èceront/n'q'l'm't's' ecer
SFX b2 emer èmeront/n'q'l'm't's' emer
SFX b2 ener èneront/n'q'l'm't's' ener
SFX b2 eper èperont/n'q'l'm't's' eper
SFX b2 erer èreront/n'q'l'm't's' erer
SFX b2 eser èseront/n'q'l'm't's' eser
SFX b2 ever èveront/n'q'l'm't's' ever
SFX b2 evrer èvreront/n'q'l'm't's' evrer
SFX b2 eter èteront/n'q'l'm't's' eter
SFX b2 eler èleront/n'q'l'm't's' eler
SFX b2 ecer ècerais/n'q'j'l'm't' ecer
SFX b2 emer èmerais/n'q'j'l'm't' emer
SFX b2 ener ènerais/n'q'j'l'm't' ener
SFX b2 eper èperais/n'q'j'l'm't' eper
SFX b2 erer èrerais/n'q'j'l'm't' erer
SFX b2 eser èserais/n'q'j'l'm't' eser
SFX b2 ever èverais/n'q'j'l'm't' ever
SFX b2 evrer èvrerais/n'q'j'l'm't' evrer
SFX b2 eter èterais/n'q'j'l'm't' eter
SFX b2 eler èlerais/n'q'j'l'm't' eler
SFX b2 ecer ècerait/n'q'l'm't's' ecer
SFX b2 emer èmerait/n'q'l'm't's' emer
SFX b2 ener ènerait/n'q'l'm't's' ener
SFX b2 eper èperait/n'q'l'm't's' eper
SFX b2 erer èrerait/n'q'l'm't's' erer
SFX b2 eser èserait/n'q'l'm't's' eser
SFX b2 ever èverait/n'q'l'm't's' ever
SFX b2 evrer èvrerait/n'q'l'm't's' evrer
SFX b2 eter èterait/n'q'l'm't's' eter
SFX b2 eler èlerait/n'q'l'm't's' eler
SFX b2 ecer ècerions/n'q'l't' ecer
SFX b2 emer èmerions/n'q'l't' emer
SFX b2 ener ènerions/n'q'l't' ener
SFX b2 eper èperions/n'q'l't' eper
SFX b2 erer èrerions/n'q'l't' erer
SFX b2 eser èserions/n'q'l't' eser
SFX b2 ever èverions/n'q'l't' ever
SFX b2 evrer èvrerions/n'q'l't' evrer
SFX b2 eter èterions/n'q'l't' eter
SFX b2 eler èlerions/n'q'l't' eler
SFX b2 ecer èceriez/n'q'l'm' ecer
SFX b2 emer èmeriez/n'q'l'm' emer
SFX b2 ener èneriez/n'q'l'm' ener
SFX b2 eper èperiez/n'q'l'm' eper
SFX b2 erer èreriez/n'q'l'm' erer
SFX b2 eser èseriez/n'q'l'm' eser
SFX b2 ever èveriez/n'q'l'm' ever
SFX b2 evrer èvreriez/n'q'l'm' evrer
SFX b2 eter èteriez/n'q'l'm' eter
SFX b2 eler èleriez/n'q'l'm' eler
SFX b2 ecer èceraient/n'q'l'm't's' ecer
SFX b2 emer èmeraient/n'q'l'm't's' emer
SFX b2 ener èneraient/n'q'l'm't's' ener
SFX b2 eper èperaient/n'q'l'm't's' eper
SFX b2 erer èreraient/n'q'l'm't's' erer
SFX b2 eser èseraient/n'q'l'm't's' eser
SFX b2 ever èveraient/n'q'l'm't's' ever
SFX b2 evrer èvreraient/n'q'l'm't's' evrer
SFX b2 eter èteraient/n'q'l'm't's' eter
SFX b2 eler èleraient/n'q'l'm't's' eler
SFX b2 er asse/n'q'j'l't' [^c]er
SFX b2 cer çasse/n'q'j'l't' cer
SFX b2 er asses/n'q'l'm' [^c]er
SFX b2 cer çasses/n'q'l'm' cer
SFX b2 er ât/n'q'l'm't's' [^c]er
SFX b2 cer çât/n'q'l'm't's' cer
SFX b2 er assions/n'q'l't' [^c]er
SFX b2 cer çassions/n'q'l't' cer
SFX b2 er assiez/n'q'l'm' [^c]er
SFX b2 cer çassiez/n'q'l'm' cer
SFX b2 er assent/n'q'l'm't's' [^c]er
SFX b2 cer çassent/n'q'l'm't's' cer
SFX b2 ecer èce/n'l'm' ecer
SFX b2 emer ème/n'l'm' emer
SFX b2 ener ène/n'l'm' ener
SFX b2 eper èpe/n'l'm' eper
SFX b2 erer ère/n'l'm' erer
SFX b2 eser èse/n'l'm' eser
SFX b2 ever ève/n'l'm' ever
SFX b2 evrer èvre/n'l'm' evrer
SFX b2 eter ète/n'l'm' eter
SFX b2 eler èle/n'l'm' eler
SFX b2 er ons/n'l' [^c]er
SFX b2 cer çons/n'l' cer
SFX b2 er ez/n'l'm' er
SFX b3 Y 190
SFX b3 er er/m't's' er
SFX b3 er ant/m't's' [^c]er
SFX b3 cer çant/m't's' cer
SFX b3 ecer èce/m's' ecer
SFX b3 emer ème/m's' emer
SFX b3 ener ène/m's' ener
SFX b3 eper èpe/m's' eper
SFX b3 erer ère/m's' erer
SFX b3 eser èse/m's' eser
SFX b3 ever ève/m's' ever
SFX b3 evrer èvre/m's' evrer
SFX b3 eter ète/m's' eter
SFX b3 eler èle/m's' eler
SFX b3 ecer èces/t' ecer
SFX b3 emer èmes/t' emer
SFX b3 ener ènes/t' ener
SFX b3 eper èpes/t' eper
SFX b3 erer ères/t' erer
SFX b3 eser èses/t' eser
SFX b3 ever èves/t' ever
SFX b3 evrer èvres/t' evrer
SFX b3 eter ètes/t' eter
SFX b3 eler èles/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b3 ecer ècent/s' ecer
SFX b3 emer èment/s' emer
SFX b3 ener ènent/s' ener
SFX b3 eper èpent/s' eper
SFX b3 erer èrent/s' erer
SFX b3 eser èsent/s' eser
SFX b3 ever èvent/s' ever
SFX b3 evrer èvrent/s' evrer
SFX b3 eter ètent/s' eter
SFX b3 eler èlent/s' eler
SFX b3 er ais/m't' [^c]er
SFX b3 cer çais/m't' cer
SFX b3 er ait/s' [^c]er
SFX b3 cer çait/s' cer
SFX b3 er ions er
SFX b3 er iez er
SFX b3 er aient/s' [^c]er
SFX b3 cer çaient/s' cer
SFX b3 er ai/m' [^c]er
SFX b3 cer çai/m' cer
SFX b3 er as/t' [^c]er
SFX b3 cer ças/t' cer
SFX b3 er a/s' [^c]er
SFX b3 cer ça/s' cer
SFX b3 er âmes [^c]er
SFX b3 cer çâmes cer
SFX b3 er âtes [^c]er
SFX b3 cer çâtes cer
SFX b3 er èrent/s' er
SFX b3 ecer ècerai/m' ecer
SFX b3 emer èmerai/m' emer
SFX b3 ener ènerai/m' ener
SFX b3 eper èperai/m' eper
SFX b3 erer èrerai/m' erer
SFX b3 eser èserai/m' eser
SFX b3 ever èverai/m' ever
SFX b3 evrer èvrerai/m' evrer
SFX b3 eter èterai/m' eter
SFX b3 eler èlerai/m' eler
SFX b3 ecer èceras/t' ecer
SFX b3 emer èmeras/t' emer
SFX b3 ener èneras/t' ener
SFX b3 eper èperas/t' eper
SFX b3 erer èreras/t' erer
SFX b3 eser èseras/t' eser
SFX b3 ever èveras/t' ever
SFX b3 evrer èvreras/t' evrer
SFX b3 eter èteras/t' eter
SFX b3 eler èleras/t' eler
SFX b3 ecer ècera/s' ecer
SFX b3 emer èmera/s' emer
SFX b3 ener ènera/s' ener
SFX b3 eper èpera/s' eper
SFX b3 erer èrera/s' erer
SFX b3 eser èsera/s' eser
SFX b3 ever èvera/s' ever
SFX b3 evrer èvrera/s' evrer
SFX b3 eter ètera/s' eter
SFX b3 eler èlera/s' eler
SFX b3 ecer ècerons ecer
SFX b3 emer èmerons emer
SFX b3 ener ènerons ener
SFX b3 eper èperons eper
SFX b3 erer èrerons erer
SFX b3 eser èserons eser
SFX b3 ever èverons ever
SFX b3 evrer èvrerons evrer
SFX b3 eter èterons eter
SFX b3 eler èlerons eler
SFX b3 ecer ècerez ecer
SFX b3 emer èmerez emer
SFX b3 ener ènerez ener
SFX b3 eper èperez eper
SFX b3 erer èrerez erer
SFX b3 eser èserez eser
SFX b3 ever èverez ever
SFX b3 evrer èvrerez evrer
SFX b3 eter èterez eter
SFX b3 eler èlerez eler
SFX b3 ecer èceront/s' ecer
SFX b3 emer èmeront/s' emer
SFX b3 ener èneront/s' ener
SFX b3 eper èperont/s' eper
SFX b3 erer èreront/s' erer
SFX b3 eser èseront/s' eser
SFX b3 ever èveront/s' ever
SFX b3 evrer èvreront/s' evrer
SFX b3 eter èteront/s' eter
SFX b3 eler èleront/s' eler
SFX b3 ecer ècerais/m't' ecer
SFX b3 emer èmerais/m't' emer
SFX b3 ener ènerais/m't' ener
SFX b3 eper èperais/m't' eper
SFX b3 erer èrerais/m't' erer
SFX b3 eser èserais/m't' eser
SFX b3 ever èverais/m't' ever
SFX b3 evrer èvrerais/m't' evrer
SFX b3 eter èterais/m't' eter
SFX b3 eler èlerais/m't' eler
SFX b3 ecer ècerait/s' ecer
SFX b3 emer èmerait/s' emer
SFX b3 ener ènerait/s' ener
SFX b3 eper èperait/s' eper
SFX b3 erer èrerait/s' erer
SFX b3 eser èserait/s' eser
SFX b3 ever èverait/s' ever
SFX b3 evrer èvrerait/s' evrer
SFX b3 eter èterait/s' eter
SFX b3 eler èlerait/s' eler
SFX b3 ecer ècerions ecer
SFX b3 emer èmerions emer
SFX b3 ener ènerions ener
SFX b3 eper èperions eper
SFX b3 erer èrerions erer
SFX b3 eser èserions eser
SFX b3 ever èverions ever
SFX b3 evrer èvrerions evrer
SFX b3 eter èterions eter
SFX b3 eler èlerions eler
SFX b3 ecer èceriez ecer
SFX b3 emer èmeriez emer
SFX b3 ener èneriez ener
SFX b3 eper èperiez eper
SFX b3 erer èreriez erer
SFX b3 eser èseriez eser
SFX b3 ever èveriez ever
SFX b3 evrer èvreriez evrer
SFX b3 eter èteriez eter
SFX b3 eler èleriez eler
SFX b3 ecer èceraient/s' ecer
SFX b3 emer èmeraient/s' emer
SFX b3 ener èneraient/s' ener
SFX b3 eper èperaient/s' eper
SFX b3 erer èreraient/s' erer
SFX b3 eser èseraient/s' eser
SFX b3 ever èveraient/s' ever
SFX b3 evrer èvreraient/s' evrer
SFX b3 eter èteraient/s' eter
SFX b3 eler èleraient/s' eler
SFX b3 er asse/m' [^c]er
SFX b3 cer çasse/m' cer
SFX b3 er asses/t' [^c]er
SFX b3 cer çasses/t' cer
SFX b3 er ât/s' [^c]er
SFX b3 cer çât/s' cer
SFX b3 er assions [^c]er
SFX b3 cer çassions cer
SFX b3 er assiez [^c]er
SFX b3 cer çassiez cer
SFX b3 er assent/s' [^c]er
SFX b3 cer çassent/s' cer
SFX b3 ecer èce/t' ecer
SFX b3 emer ème/t' emer
SFX b3 ener ène/t' ener
SFX b3 eper èpe/t' eper
SFX b3 erer ère/t' erer
SFX b3 eser èse/t' eser
SFX b3 ever ève/t' ever
SFX b3 evrer èvre/t' evrer
SFX b3 eter ète/t' eter
SFX b3 eler èle/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b4 Y 190
SFX b4 er er/n'q'd'l'm't's' er
SFX b4 er ant/n'q'l'm't's' [^c]er
SFX b4 cer çant/n'q'l'm't's' cer
SFX b4 ecer èce/n'q'j'l'm't's' ecer
SFX b4 emer ème/n'q'j'l'm't's' emer
SFX b4 ener ène/n'q'j'l'm't's' ener
SFX b4 eper èpe/n'q'j'l'm't's' eper
SFX b4 erer ère/n'q'j'l'm't's' erer
SFX b4 eser èse/n'q'j'l'm't's' eser
SFX b4 ever ève/n'q'j'l'm't's' ever
SFX b4 evrer èvre/n'q'j'l'm't's' evrer
SFX b4 eter ète/n'q'j'l'm't's' eter
SFX b4 eler èle/n'q'j'l'm't's' eler
SFX b4 ecer èces/n'q'l'm't' ecer
SFX b4 emer èmes/n'q'l'm't' emer
SFX b4 ener ènes/n'q'l'm't' ener
SFX b4 eper èpes/n'q'l'm't' eper
SFX b4 erer ères/n'q'l'm't' erer
SFX b4 eser èses/n'q'l'm't' eser
SFX b4 ever èves/n'q'l'm't' ever
SFX b4 evrer èvres/n'q'l'm't' evrer
SFX b4 eter ètes/n'q'l'm't' eter
SFX b4 eler èles/n'q'l'm't' eler
SFX b4 er ons/n'q'l't' [^c]er
SFX b4 cer çons/n'q'l't' cer
SFX b4 er ez/n'q'l'm' er
SFX b4 ecer ècent/n'q'l'm't's' ecer
SFX b4 emer èment/n'q'l'm't's' emer
SFX b4 ener ènent/n'q'l'm't's' ener
SFX b4 eper èpent/n'q'l'm't's' eper
SFX b4 erer èrent/n'q'l'm't's' erer
SFX b4 eser èsent/n'q'l'm't's' eser
SFX b4 ever èvent/n'q'l'm't's' ever
SFX b4 evrer èvrent/n'q'l'm't's' evrer
SFX b4 eter ètent/n'q'l'm't's' eter
SFX b4 eler èlent/n'q'l'm't's' eler
SFX b4 er ais/n'q'j'l'm't' [^c]er
SFX b4 cer çais/n'q'j'l'm't' cer
SFX b4 er ait/n'q'l'm't's' [^c]er
SFX b4 cer çait/n'q'l'm't's' cer
SFX b4 er ions/n'q'l't' er
SFX b4 er iez/n'q'l'm' er
SFX b4 er aient/n'q'l'm't's' [^c]er
SFX b4 cer çaient/n'q'l'm't's' cer
SFX b4 er ai/n'q'j'l'm't' [^c]er
SFX b4 cer çai/n'q'j'l'm't' cer
SFX b4 er as/n'q'l'm't' [^c]er
SFX b4 cer ças/n'q'l'm't' cer
SFX b4 er a/n'q'l'm't's' [^c]er
SFX b4 cer ça/n'q'l'm't's' cer
SFX b4 er âmes/n'q'l't' [^c]er
SFX b4 cer çâmes/n'q'l't' cer
SFX b4 er âtes/n'q'l'm' [^c]er
SFX b4 cer çâtes/n'q'l'm' cer
SFX b4 er èrent/n'q'l'm't's' er
SFX b4 ecer ècerai/n'q'j'l'm't' ecer
SFX b4 emer èmerai/n'q'j'l'm't' emer
SFX b4 ener ènerai/n'q'j'l'm't' ener
SFX b4 eper èperai/n'q'j'l'm't' eper
SFX b4 erer èrerai/n'q'j'l'm't' erer
SFX b4 eser èserai/n'q'j'l'm't' eser
SFX b4 ever èverai/n'q'j'l'm't' ever
SFX b4 evrer èvrerai/n'q'j'l'm't' evrer
SFX b4 eter èterai/n'q'j'l'm't' eter
SFX b4 eler èlerai/n'q'j'l'm't' eler
SFX b4 ecer èceras/n'q'l'm't' ecer
SFX b4 emer èmeras/n'q'l'm't' emer
SFX b4 ener èneras/n'q'l'm't' ener
SFX b4 eper èperas/n'q'l'm't' eper
SFX b4 erer èreras/n'q'l'm't' erer
SFX b4 eser èseras/n'q'l'm't' eser
SFX b4 ever èveras/n'q'l'm't' ever
SFX b4 evrer èvreras/n'q'l'm't' evrer
SFX b4 eter èteras/n'q'l'm't' eter
SFX b4 eler èleras/n'q'l'm't' eler
SFX b4 ecer ècera/n'q'l'm't's' ecer
SFX b4 emer èmera/n'q'l'm't's' emer
SFX b4 ener ènera/n'q'l'm't's' ener
SFX b4 eper èpera/n'q'l'm't's' eper
SFX b4 erer èrera/n'q'l'm't's' erer
SFX b4 eser èsera/n'q'l'm't's' eser
SFX b4 ever èvera/n'q'l'm't's' ever
SFX b4 evrer èvrera/n'q'l'm't's' evrer
SFX b4 eter ètera/n'q'l'm't's' eter
SFX b4 eler èlera/n'q'l'm't's' eler
SFX b4 ecer ècerons/n'q'l't' ecer
SFX b4 emer èmerons/n'q'l't' emer
SFX b4 ener ènerons/n'q'l't' ener
SFX b4 eper èperons/n'q'l't' eper
SFX b4 erer èrerons/n'q'l't' erer
SFX b4 eser èserons/n'q'l't' eser
SFX b4 ever èverons/n'q'l't' ever
SFX b4 evrer èvrerons/n'q'l't' evrer
SFX b4 eter èterons/n'q'l't' eter
SFX b4 eler èlerons/n'q'l't' eler
SFX b4 ecer ècerez/n'q'l'm' ecer
SFX b4 emer èmerez/n'q'l'm' emer
SFX b4 ener ènerez/n'q'l'm' ener
SFX b4 eper èperez/n'q'l'm' eper
SFX b4 erer èrerez/n'q'l'm' erer
SFX b4 eser èserez/n'q'l'm' eser
SFX b4 ever èverez/n'q'l'm' ever
SFX b4 evrer èvrerez/n'q'l'm' evrer
SFX b4 eter èterez/n'q'l'm' eter
SFX b4 eler èlerez/n'q'l'm' eler
SFX b4 ecer èceront/n'q'l'm't's' ecer
SFX b4 emer èmeront/n'q'l'm't's' emer
SFX b4 ener èneront/n'q'l'm't's' ener
SFX b4 eper èperont/n'q'l'm't's' eper
SFX b4 erer èreront/n'q'l'm't's' erer
SFX b4 eser èseront/n'q'l'm't's' eser
SFX b4 ever èveront/n'q'l'm't's' ever
SFX b4 evrer èvreront/n'q'l'm't's' evrer
SFX b4 eter èteront/n'q'l'm't's' eter
SFX b4 eler èleront/n'q'l'm't's' eler
SFX b4 ecer ècerais/n'q'j'l'm't' ecer
SFX b4 emer èmerais/n'q'j'l'm't' emer
SFX b4 ener ènerais/n'q'j'l'm't' ener
SFX b4 eper èperais/n'q'j'l'm't' eper
SFX b4 erer èrerais/n'q'j'l'm't' erer
SFX b4 eser èserais/n'q'j'l'm't' eser
SFX b4 ever èverais/n'q'j'l'm't' ever
SFX b4 evrer èvrerais/n'q'j'l'm't' evrer
SFX b4 eter èterais/n'q'j'l'm't' eter
SFX b4 eler èlerais/n'q'j'l'm't' eler
SFX b4 ecer ècerait/n'q'l'm't's' ecer
SFX b4 emer èmerait/n'q'l'm't's' emer
SFX b4 ener ènerait/n'q'l'm't's' ener
SFX b4 eper èperait/n'q'l'm't's' eper
SFX b4 erer èrerait/n'q'l'm't's' erer
SFX b4 eser èserait/n'q'l'm't's' eser
SFX b4 ever èverait/n'q'l'm't's' ever
SFX b4 evrer èvrerait/n'q'l'm't's' evrer
SFX b4 eter èterait/n'q'l'm't's' eter
SFX b4 eler èlerait/n'q'l'm't's' eler
SFX b4 ecer ècerions/n'q'l't' ecer
SFX b4 emer èmerions/n'q'l't' emer
SFX b4 ener ènerions/n'q'l't' ener
SFX b4 eper èperions/n'q'l't' eper
SFX b4 erer èrerions/n'q'l't' erer
SFX b4 eser èserions/n'q'l't' eser
SFX b4 ever èverions/n'q'l't' ever
SFX b4 evrer èvrerions/n'q'l't' evrer
SFX b4 eter èterions/n'q'l't' eter
SFX b4 eler èlerions/n'q'l't' eler
SFX b4 ecer èceriez/n'q'l'm' ecer
SFX b4 emer èmeriez/n'q'l'm' emer
SFX b4 ener èneriez/n'q'l'm' ener
SFX b4 eper èperiez/n'q'l'm' eper
SFX b4 erer èreriez/n'q'l'm' erer
SFX b4 eser èseriez/n'q'l'm' eser
SFX b4 ever èveriez/n'q'l'm' ever
SFX b4 evrer èvreriez/n'q'l'm' evrer
SFX b4 eter èteriez/n'q'l'm' eter
SFX b4 eler èleriez/n'q'l'm' eler
SFX b4 ecer èceraient/n'q'l'm't's' ecer
SFX b4 emer èmeraient/n'q'l'm't's' emer
SFX b4 ener èneraient/n'q'l'm't's' ener
SFX b4 eper èperaient/n'q'l'm't's' eper
SFX b4 erer èreraient/n'q'l'm't's' erer
SFX b4 eser èseraient/n'q'l'm't's' eser
SFX b4 ever èveraient/n'q'l'm't's' ever
SFX b4 evrer èvreraient/n'q'l'm't's' evrer
SFX b4 eter èteraient/n'q'l'm't's' eter
SFX b4 eler èleraient/n'q'l'm't's' eler
SFX b4 er asse/n'q'j'l'm't' [^c]er
SFX b4 cer çasse/n'q'j'l'm't' cer
SFX b4 er asses/n'q'l'm't' [^c]er
SFX b4 cer çasses/n'q'l'm't' cer
SFX b4 er ât/n'q'l'm't's' [^c]er
SFX b4 cer çât/n'q'l'm't's' cer
SFX b4 er assions/n'q'l't' [^c]er
SFX b4 cer çassions/n'q'l't' cer
SFX b4 er assiez/n'q'l'm' [^c]er
SFX b4 cer çassiez/n'q'l'm' cer
SFX b4 er assent/n'q'l'm't's' [^c]er
SFX b4 cer çassent/n'q'l'm't's' cer
SFX b4 ecer èce/n'l'm't' ecer
SFX b4 emer ème/n'l'm't' emer
SFX b4 ener ène/n'l'm't' ener
SFX b4 eper èpe/n'l'm't' eper
SFX b4 erer ère/n'l'm't' erer
SFX b4 eser èse/n'l'm't' eser
SFX b4 ever ève/n'l'm't' ever
SFX b4 evrer èvre/n'l'm't' evrer
SFX b4 eter ète/n'l'm't' eter
SFX b4 eler èle/n'l'm't' eler
SFX b4 er ons/n'l' [^c]er
SFX b4 cer çons/n'l' cer
SFX b4 er ez/n'l'm' er
SFX b5 Y 190
SFX b5 er er/n'q'd'm't's' er
SFX b5 er ant/n'q'm't's' [^c]er
SFX b5 cer çant/n'q'm't's' cer
SFX b5 ecer èce/n'q'j'm't's' ecer
SFX b5 emer ème/n'q'j'm't's' emer
SFX b5 ener ène/n'q'j'm't's' ener
SFX b5 eper èpe/n'q'j'm't's' eper
SFX b5 erer ère/n'q'j'm't's' erer
SFX b5 eser èse/n'q'j'm't's' eser
SFX b5 ever ève/n'q'j'm't's' ever
SFX b5 evrer èvre/n'q'j'm't's' evrer
SFX b5 eter ète/n'q'j'm't's' eter
SFX b5 eler èle/n'q'j'm't's' eler
SFX b5 ecer èces/n'm't' ecer
SFX b5 emer èmes/n'm't' emer
SFX b5 ener ènes/n'm't' ener
SFX b5 eper èpes/n'm't' eper
SFX b5 erer ères/n'm't' erer
SFX b5 eser èses/n'm't' eser
SFX b5 ever èves/n'm't' ever
SFX b5 evrer èvres/n'm't' evrer
SFX b5 eter ètes/n'm't' eter
SFX b5 eler èles/n'm't' eler
SFX b5 er ons/n't' [^c]er
SFX b5 cer çons/n't' cer
SFX b5 er ez/n'm' er
SFX b5 ecer ècent/n'q'm't's' ecer
SFX b5 emer èment/n'q'm't's' emer
SFX b5 ener ènent/n'q'm't's' ener
SFX b5 eper èpent/n'q'm't's' eper
SFX b5 erer èrent/n'q'm't's' erer
SFX b5 eser èsent/n'q'm't's' eser
SFX b5 ever èvent/n'q'm't's' ever
SFX b5 evrer èvrent/n'q'm't's' evrer
SFX b5 eter ètent/n'q'm't's' eter
SFX b5 eler èlent/n'q'm't's' eler
SFX b5 er ais/n'j'm't' [^c]er
SFX b5 cer çais/n'j'm't' cer
SFX b5 er ait/n'q'm't's' [^c]er
SFX b5 cer çait/n'q'm't's' cer
SFX b5 er ions/n't' er
SFX b5 er iez/n'm' er
SFX b5 er aient/n'q'm't's' [^c]er
SFX b5 cer çaient/n'q'm't's' cer
SFX b5 er ai/n'j'm't' [^c]er
SFX b5 cer çai/n'j'm't' cer
SFX b5 er as/n'm't' [^c]er
SFX b5 cer ças/n'm't' cer
SFX b5 er a/n'q'm't's' [^c]er
SFX b5 cer ça/n'q'm't's' cer
SFX b5 er âmes/n't' [^c]er
SFX b5 cer çâmes/n't' cer
SFX b5 er âtes/n'm' [^c]er
SFX b5 cer çâtes/n'm' cer
SFX b5 er èrent/n'q'm't's' er
SFX b5 ecer ècerai/n'j'm't' ecer
SFX b5 emer èmerai/n'j'm't' emer
SFX b5 ener ènerai/n'j'm't' ener
SFX b5 eper èperai/n'j'm't' eper
SFX b5 erer èrerai/n'j'm't' erer
SFX b5 eser èserai/n'j'm't' eser
SFX b5 ever èverai/n'j'm't' ever
SFX b5 evrer èvrerai/n'j'm't' evrer
SFX b5 eter èterai/n'j'm't' eter
SFX b5 eler èlerai/n'j'm't' eler
SFX b5 ecer èceras/n'm't' ecer
SFX b5 emer èmeras/n'm't' emer
SFX b5 ener èneras/n'm't' ener
SFX b5 eper èperas/n'm't' eper
SFX b5 erer èreras/n'm't' erer
SFX b5 eser èseras/n'm't' eser
SFX b5 ever èveras/n'm't' ever
SFX b5 evrer èvreras/n'm't' evrer
SFX b5 eter èteras/n'm't' eter
SFX b5 eler èleras/n'm't' eler
SFX b5 ecer ècera/n'q'm't's' ecer
SFX b5 emer èmera/n'q'm't's' emer
SFX b5 ener ènera/n'q'm't's' ener
SFX b5 eper èpera/n'q'm't's' eper
SFX b5 erer èrera/n'q'm't's' erer
SFX b5 eser èsera/n'q'm't's' eser
SFX b5 ever èvera/n'q'm't's' ever
SFX b5 evrer èvrera/n'q'm't's' evrer
SFX b5 eter ètera/n'q'm't's' eter
SFX b5 eler èlera/n'q'm't's' eler
SFX b5 ecer ècerons/n't' ecer
SFX b5 emer èmerons/n't' emer
SFX b5 ener ènerons/n't' ener
SFX b5 eper èperons/n't' eper
SFX b5 erer èrerons/n't' erer
SFX b5 eser èserons/n't' eser
SFX b5 ever èverons/n't' ever
SFX b5 evrer èvrerons/n't' evrer
SFX b5 eter èterons/n't' eter
SFX b5 eler èlerons/n't' eler
SFX b5 ecer ècerez/n'm' ecer
SFX b5 emer èmerez/n'm' emer
SFX b5 ener ènerez/n'm' ener
SFX b5 eper èperez/n'm' eper
SFX b5 erer èrerez/n'm' erer
SFX b5 eser èserez/n'm' eser
SFX b5 ever èverez/n'm' ever
SFX b5 evrer èvrerez/n'm' evrer
SFX b5 eter èterez/n'm' eter
SFX b5 eler èlerez/n'm' eler
SFX b5 ecer èceront/n'q'm't's' ecer
SFX b5 emer èmeront/n'q'm't's' emer
SFX b5 ener èneront/n'q'm't's' ener
SFX b5 eper èperont/n'q'm't's' eper
SFX b5 erer èreront/n'q'm't's' erer
SFX b5 eser èseront/n'q'm't's' eser
SFX b5 ever èveront/n'q'm't's' ever
SFX b5 evrer èvreront/n'q'm't's' evrer
SFX b5 eter èteront/n'q'm't's' eter
SFX b5 eler èleront/n'q'm't's' eler
SFX b5 ecer ècerais/n'j'm't' ecer
SFX b5 emer èmerais/n'j'm't' emer
SFX b5 ener ènerais/n'j'm't' ener
SFX b5 eper èperais/n'j'm't' eper
SFX b5 erer èrerais/n'j'm't' erer
SFX b5 eser èserais/n'j'm't' eser
SFX b5 ever èverais/n'j'm't' ever
SFX b5 evrer èvrerais/n'j'm't' evrer
SFX b5 eter èterais/n'j'm't' eter
SFX b5 eler èlerais/n'j'm't' eler
SFX b5 ecer ècerait/n'q'm't's' ecer
SFX b5 emer èmerait/n'q'm't's' emer
SFX b5 ener ènerait/n'q'm't's' ener
SFX b5 eper èperait/n'q'm't's' eper
SFX b5 erer èrerait/n'q'm't's' erer
SFX b5 eser èserait/n'q'm't's' eser
SFX b5 ever èverait/n'q'm't's' ever
SFX b5 evrer èvrerait/n'q'm't's' evrer
SFX b5 eter èterait/n'q'm't's' eter
SFX b5 eler èlerait/n'q'm't's' eler
SFX b5 ecer ècerions/n't' ecer
SFX b5 emer èmerions/n't' emer
SFX b5 ener ènerions/n't' ener
SFX b5 eper èperions/n't' eper
SFX b5 erer èrerions/n't' erer
SFX b5 eser èserions/n't' eser
SFX b5 ever èverions/n't' ever
SFX b5 evrer èvrerions/n't' evrer
SFX b5 eter èterions/n't' eter
SFX b5 eler èlerions/n't' eler
SFX b5 ecer èceriez/n'm' ecer
SFX b5 emer èmeriez/n'm' emer
SFX b5 ener èneriez/n'm' ener
SFX b5 eper èperiez/n'm' eper
SFX b5 erer èreriez/n'm' erer
SFX b5 eser èseriez/n'm' eser
SFX b5 ever èveriez/n'm' ever
SFX b5 evrer èvreriez/n'm' evrer
SFX b5 eter èteriez/n'm' eter
SFX b5 eler èleriez/n'm' eler
SFX b5 ecer èceraient/n'q'm't's' ecer
SFX b5 emer èmeraient/n'q'm't's' emer
SFX b5 ener èneraient/n'q'm't's' ener
SFX b5 eper èperaient/n'q'm't's' eper
SFX b5 erer èreraient/n'q'm't's' erer
SFX b5 eser èseraient/n'q'm't's' eser
SFX b5 ever èveraient/n'q'm't's' ever
SFX b5 evrer èvreraient/n'q'm't's' evrer
SFX b5 eter èteraient/n'q'm't's' eter
SFX b5 eler èleraient/n'q'm't's' eler
SFX b5 er asse/n'j'm't' [^c]er
SFX b5 cer çasse/n'j'm't' cer
SFX b5 er asses/n'm't' [^c]er
SFX b5 cer çasses/n'm't' cer
SFX b5 er ât/n'q'm't's' [^c]er
SFX b5 cer çât/n'q'm't's' cer
SFX b5 er assions/n't' [^c]er
SFX b5 cer çassions/n't' cer
SFX b5 er assiez/n'm' [^c]er
SFX b5 cer çassiez/n'm' cer
SFX b5 er assent/n'q'm't's' [^c]er
SFX b5 cer çassent/n'q'm't's' cer
SFX b5 ecer èce/n'm' ecer
SFX b5 emer ème/n'm' emer
SFX b5 ener ène/n'm' ener
SFX b5 eper èpe/n'm' eper
SFX b5 erer ère/n'm' erer
SFX b5 eser èse/n'm' eser
SFX b5 ever ève/n'm' ever
SFX b5 evrer èvre/n'm' evrer
SFX b5 eter ète/n'm' eter
SFX b5 eler èle/n'm' eler
SFX b5 er ons/n' [^c]er
SFX b5 cer çons/n' cer
SFX b5 er ez/n' er
SFX c0 N 151
SFX c0 er ant [^cg]er
SFX c0 écer éçant écer
SFX c0 éger égeant éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 ébrer èbres ébrer
SFX c0 écer èces écer
SFX c0 écher èches écher
SFX c0 écrer ècres écrer
SFX c0 éder èdes éder
SFX c0 éger èges éger
SFX c0 égler ègles égler
SFX c0 égner ègnes égner
SFX c0 égrer ègres égrer
SFX c0 éguer ègues éguer
SFX c0 éler èles éler
SFX c0 émer èmes émer
SFX c0 éner ènes éner
SFX c0 éper èpes éper
SFX c0 équer èques équer
SFX c0 érer ères érer
SFX c0 éser èses éser
SFX c0 éter ètes éter
SFX c0 étrer ètres étrer
SFX c0 évrer èvres évrer
SFX c0 éyer èyes éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c0 ébrer èbrent ébrer
SFX c0 écer ècent écer
SFX c0 écher èchent écher
SFX c0 écrer ècrent écrer
SFX c0 éder èdent éder
SFX c0 éger ègent éger
SFX c0 égler èglent égler
SFX c0 égner ègnent égner
SFX c0 égrer ègrent égrer
SFX c0 éguer èguent éguer
SFX c0 éler èlent éler
SFX c0 émer èment émer
SFX c0 éner ènent éner
SFX c0 éper èpent éper
SFX c0 équer èquent équer
SFX c0 érer èrent érer
SFX c0 éser èsent éser
SFX c0 éter ètent éter
SFX c0 étrer ètrent étrer
SFX c0 évrer èvrent évrer
SFX c0 éyer èyent éyer
SFX c0 er ais [^cg]er
SFX c0 écer éçais écer
SFX c0 éger égeais éger
SFX c0 er ait [^cg]er
SFX c0 écer éçait écer
SFX c0 éger égeait éger
SFX c0 er ions er
SFX c0 er iez er
SFX c0 er aient [^cg]er
SFX c0 écer éçaient écer
SFX c0 éger égeaient éger
SFX c0 er ai [^cg]er
SFX c0 écer éçai écer
SFX c0 éger égeai éger
SFX c0 er as [^cg]er
SFX c0 écer éças écer
SFX c0 éger égeas éger
SFX c0 er a [^cg]er
SFX c0 écer éça écer
SFX c0 éger égea éger
SFX c0 er âmes [^cg]er
SFX c0 écer éçâmes écer
SFX c0 éger égeâmes éger
SFX c0 er âtes [^cg]er
SFX c0 écer éçâtes écer
SFX c0 éger égeâtes éger
SFX c0 er èrent er
SFX c0 er erai er
SFX c0 er eras er
SFX c0 er era er
SFX c0 er erons er
SFX c0 er erez er
SFX c0 er eront er
SFX c0 er erais er
SFX c0 er erait er
SFX c0 er erions er
SFX c0 er eriez er
SFX c0 er eraient er
SFX c0 er asse [^cg]er
SFX c0 écer éçasse écer
SFX c0 éger égeasse éger
SFX c0 er asses [^cg]er
SFX c0 écer éçasses écer
SFX c0 éger égeasses éger
SFX c0 er ât [^cg]er
SFX c0 écer éçât écer
SFX c0 éger égeât éger
SFX c0 er assions [^cg]er
SFX c0 écer éçassions écer
SFX c0 éger égeassions éger
SFX c0 er assiez [^cg]er
SFX c0 écer éçassiez écer
SFX c0 éger égeassiez éger
SFX c0 er assent [^cg]er
SFX c0 écer éçassent écer
SFX c0 éger égeassent éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c1 Y 152
SFX c1 r r/n'q'd' er
SFX c1 er ant/n'q' [^cg]er
SFX c1 écer éçant/n'q' écer
SFX c1 éger égeant/n'q' éger
SFX c1 ébrer èbre/n'q'j' ébrer
SFX c1 écer èce/n'q'j' écer
SFX c1 écher èche/n'q'j' écher
SFX c1 écrer ècre/n'q'j' écrer
SFX c1 éder ède/n'q'j' éder
SFX c1 éger ège/n'q'j' éger
SFX c1 égler ègle/n'q'j' égler
SFX c1 égner ègne/n'q'j' égner
SFX c1 égrer ègre/n'q'j' égrer
SFX c1 éguer ègue/n'q'j' éguer
SFX c1 éler èle/n'q'j' éler
SFX c1 émer ème/n'q'j' émer
SFX c1 éner ène/n'q'j' éner
SFX c1 éper èpe/n'q'j' éper
SFX c1 équer èque/n'q'j' équer
SFX c1 érer ère/n'q'j' érer
SFX c1 éser èse/n'q'j' éser
SFX c1 éter ète/n'q'j' éter
SFX c1 étrer ètre/n'q'j' étrer
SFX c1 évrer èvre/n'q'j' évrer
SFX c1 éyer èye/n'q'j' éyer
SFX c1 ébrer èbres/n' ébrer
SFX c1 écer èces/n' écer
SFX c1 écher èches/n' écher
SFX c1 écrer ècres/n' écrer
SFX c1 éder èdes/n' éder
SFX c1 éger èges/n' éger
SFX c1 égler ègles/n' égler
SFX c1 égner ègnes/n' égner
SFX c1 égrer ègres/n' égrer
SFX c1 éguer ègues/n' éguer
SFX c1 éler èles/n' éler
SFX c1 émer èmes/n' émer
SFX c1 éner ènes/n' éner
SFX c1 éper èpes/n' éper
SFX c1 équer èques/n' équer
SFX c1 érer ères/n' érer
SFX c1 éser èses/n' éser
SFX c1 éter ètes/n' éter
SFX c1 étrer ètres/n' étrer
SFX c1 évrer èvres/n' évrer
SFX c1 éyer èyes/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c1 ébrer èbrent/n'q' ébrer
SFX c1 écer ècent/n'q' écer
SFX c1 écher èchent/n'q' écher
SFX c1 écrer ècrent/n'q' écrer
SFX c1 éder èdent/n'q' éder
SFX c1 éger ègent/n'q' éger
SFX c1 égler èglent/n'q' égler
SFX c1 égner ègnent/n'q' égner
SFX c1 égrer ègrent/n'q' égrer
SFX c1 éguer èguent/n'q' éguer
SFX c1 éler èlent/n'q' éler
SFX c1 émer èment/n'q' émer
SFX c1 éner ènent/n'q' éner
SFX c1 éper èpent/n'q' éper
SFX c1 équer èquent/n'q' équer
SFX c1 érer èrent/n'q' érer
SFX c1 éser èsent/n'q' éser
SFX c1 éter ètent/n'q' éter
SFX c1 étrer ètrent/n'q' étrer
SFX c1 évrer èvrent/n'q' évrer
SFX c1 éyer èyent/n'q' éyer
SFX c1 er ais/n'j' [^cg]er
SFX c1 écer éçais/n'j' écer
SFX c1 éger égeais/n'j' éger
SFX c1 er ait/n'q' [^cg]er
SFX c1 écer éçait/n'q' écer
SFX c1 éger égeait/n'q' éger
SFX c1 er ions/n' er
SFX c1 er iez/n' er
SFX c1 er aient/n'q' [^cg]er
SFX c1 écer éçaient/n'q' écer
SFX c1 éger égeaient/n'q' éger
SFX c1 er ai/n'j' [^cg]er
SFX c1 écer éçai/n'j' écer
SFX c1 éger égeai/n'j' éger
SFX c1 er as/n' [^cg]er
SFX c1 écer éças/n' écer
SFX c1 éger égeas/n' éger
SFX c1 er a/n'q' [^cg]er
SFX c1 écer éça/n'q' écer
SFX c1 éger égea/n'q' éger
SFX c1 er âmes/n' [^cg]er
SFX c1 écer éçâmes/n' écer
SFX c1 éger égeâmes/n' éger
SFX c1 er âtes/n' [^cg]er
SFX c1 écer éçâtes/n' écer
SFX c1 éger égeâtes/n' éger
SFX c1 er èrent/n'q' er
SFX c1 er erai/n'j' er
SFX c1 er eras/n' er
SFX c1 er era/n'q' er
SFX c1 er erons/n' er
SFX c1 er erez/n' er
SFX c1 er eront/n'q' er
SFX c1 er erais/n'j' er
SFX c1 er erait/n'q' er
SFX c1 er erions/n' er
SFX c1 er eriez/n' er
SFX c1 er eraient/n'q' er
SFX c1 er asse/n'j' [^cg]er
SFX c1 écer éçasse/n'j' écer
SFX c1 éger égeasse/n'j' éger
SFX c1 er asses/n' [^cg]er
SFX c1 écer éçasses/n' écer
SFX c1 éger égeasses/n' éger
SFX c1 er ât/n'q' [^cg]er
SFX c1 écer éçât/n'q' écer
SFX c1 éger égeât/n'q' éger
SFX c1 er assions/n' [^cg]er
SFX c1 écer éçassions/n' écer
SFX c1 éger égeassions/n' éger
SFX c1 er assiez/n' [^cg]er
SFX c1 écer éçassiez/n' écer
SFX c1 éger égeassiez/n' éger
SFX c1 er assent/n'q' [^cg]er
SFX c1 écer éçassent/n'q' écer
SFX c1 éger égeassent/n'q' éger
SFX c1 ébrer èbre/n' ébrer
SFX c1 écer èce/n' écer
SFX c1 écher èche/n' écher
SFX c1 écrer ècre/n' écrer
SFX c1 éder ède/n' éder
SFX c1 éger ège/n' éger
SFX c1 égler ègle/n' égler
SFX c1 égner ègne/n' égner
SFX c1 égrer ègre/n' égrer
SFX c1 éguer ègue/n' éguer
SFX c1 éler èle/n' éler
SFX c1 émer ème/n' émer
SFX c1 éner ène/n' éner
SFX c1 éper èpe/n' éper
SFX c1 équer èque/n' équer
SFX c1 érer ère/n' érer
SFX c1 éser èse/n' éser
SFX c1 éter ète/n' éter
SFX c1 étrer ètre/n' étrer
SFX c1 évrer èvre/n' évrer
SFX c1 éyer èye/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c2 Y 152
SFX c2 er er/n'q'd'l'm't's' er
SFX c2 er ant/n'q'l'm't's' [^cg]er
SFX c2 écer éçant/n'q'l'm't's' écer
SFX c2 éger égeant/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c2 écer èce/n'q'j'l'm't's' écer
SFX c2 écher èche/n'q'j'l'm't's' écher
SFX c2 écrer ècre/n'q'j'l'm't's' écrer
SFX c2 éder ède/n'q'j'l'm't's' éder
SFX c2 éger ège/n'q'j'l'm't's' éger
SFX c2 égler ègle/n'q'j'l'm't's' égler
SFX c2 égner ègne/n'q'j'l'm't's' égner
SFX c2 égrer ègre/n'q'j'l'm't's' égrer
SFX c2 éguer ègue/n'q'j'l'm't's' éguer
SFX c2 éler èle/n'q'j'l'm't's' éler
SFX c2 émer ème/n'q'j'l'm't's' émer
SFX c2 éner ène/n'q'j'l'm't's' éner
SFX c2 éper èpe/n'q'j'l'm't's' éper
SFX c2 équer èque/n'q'j'l'm't's' équer
SFX c2 érer ère/n'q'j'l'm't's' érer
SFX c2 éser èse/n'q'j'l'm't's' éser
SFX c2 éter ète/n'q'j'l'm't's' éter
SFX c2 étrer ètre/n'q'j'l'm't's' étrer
SFX c2 évrer èvre/n'q'j'l'm't's' évrer
SFX c2 éyer èye/n'q'j'l'm't's' éyer
SFX c2 ébrer èbres/n'q'l'm' ébrer
SFX c2 écer èces/n'q'l'm' écer
SFX c2 écher èches/n'q'l'm' écher
SFX c2 écrer ècres/n'q'l'm' écrer
SFX c2 éder èdes/n'q'l'm' éder
SFX c2 éger èges/n'q'l'm' éger
SFX c2 égler ègles/n'q'l'm' égler
SFX c2 égner ègnes/n'q'l'm' égner
SFX c2 égrer ègres/n'q'l'm' égrer
SFX c2 éguer ègues/n'q'l'm' éguer
SFX c2 éler èles/n'q'l'm' éler
SFX c2 émer èmes/n'q'l'm' émer
SFX c2 éner ènes/n'q'l'm' éner
SFX c2 éper èpes/n'q'l'm' éper
SFX c2 équer èques/n'q'l'm' équer
SFX c2 érer ères/n'q'l'm' érer
SFX c2 éser èses/n'q'l'm' éser
SFX c2 éter ètes/n'q'l'm' éter
SFX c2 étrer ètres/n'q'l'm' étrer
SFX c2 évrer èvres/n'q'l'm' évrer
SFX c2 éyer èyes/n'q'l'm' éyer
SFX c2 er ons/n'q'l't' [^cg]er
SFX c2 écer éçons/n'q'l't' écer
SFX c2 éger égeons/n'q'l't' éger
SFX c2 er ez/n'q'l'm' er
SFX c2 ébrer èbrent/n'q'l'm't's' ébrer
SFX c2 écer ècent/n'q'l'm't's' écer
SFX c2 écher èchent/n'q'l'm't's' écher
SFX c2 écrer ècrent/n'q'l'm't's' écrer
SFX c2 éder èdent/n'q'l'm't's' éder
SFX c2 éger ègent/n'q'l'm't's' éger
SFX c2 égler èglent/n'q'l'm't's' égler
SFX c2 égner ègnent/n'q'l'm't's' égner
SFX c2 égrer ègrent/n'q'l'm't's' égrer
SFX c2 éguer èguent/n'q'l'm't's' éguer
SFX c2 éler èlent/n'q'l'm't's' éler
SFX c2 émer èment/n'q'l'm't's' émer
SFX c2 éner ènent/n'q'l'm't's' éner
SFX c2 éper èpent/n'q'l'm't's' éper
SFX c2 équer èquent/n'q'l'm't's' équer
SFX c2 érer èrent/n'q'l'm't's' érer
SFX c2 éser èsent/n'q'l'm't's' éser
SFX c2 éter ètent/n'q'l'm't's' éter
SFX c2 étrer ètrent/n'q'l'm't's' étrer
SFX c2 évrer èvrent/n'q'l'm't's' évrer
SFX c2 éyer èyent/n'q'l'm't's' éyer
SFX c2 er ais/n'q'j'l'm't' [^cg]er
SFX c2 écer éçais/n'q'j'l'm't' écer
SFX c2 éger égeais/n'q'j'l'm't' éger
SFX c2 er ait/n'q'l'm't's' [^cg]er
SFX c2 écer éçait/n'q'l'm't's' écer
SFX c2 éger égeait/n'q'l'm't's' éger
SFX c2 er ions/n'q'l't' er
SFX c2 er iez/n'q'l'm' er
SFX c2 er aient/n'q'l'm't's' [^cg]er
SFX c2 écer éçaient/n'q'l'm't's' écer
SFX c2 éger égeaient/n'q'l'm't's' éger
SFX c2 er ai/n'q'j'l't' [^cg]er
SFX c2 écer éçai/n'q'j'l't' écer
SFX c2 éger égeai/n'q'j'l't' éger
SFX c2 er as/n'q'l'm' [^cg]er
SFX c2 écer éças/n'q'l'm' écer
SFX c2 éger égeas/n'q'l'm' éger
SFX c2 er a/n'q'l'm't's' [^cg]er
SFX c2 écer éça/n'q'l'm't's' écer
SFX c2 éger égea/n'q'l'm't's' éger
SFX c2 er âmes/n'q'l't' [^cg]er
SFX c2 écer éçâmes/n'q'l't' écer
SFX c2 éger égeâmes/n'q'l't' éger
SFX c2 er âtes/n'q'l'm' [^cg]er
SFX c2 écer éçâtes/n'q'l'm' écer
SFX c2 éger égeâtes/n'q'l'm' éger
SFX c2 er èrent/n'q'l'm't's' er
SFX c2 er erai/n'q'j'l't' er
SFX c2 er eras/n'q'l'm' er
SFX c2 er era/n'q'l'm't's' er
SFX c2 er erons/n'q'l't' er
SFX c2 er erez/n'q'l'm' er
SFX c2 er eront/n'q'l'm't's' er
SFX c2 er erais/n'q'j'l'm't' er
SFX c2 er erait/n'q'l'm't's' er
SFX c2 er erions/n'q'l't' er
SFX c2 er eriez/n'q'l'm' er
SFX c2 er eraient/n'q'l'm't's' er
SFX c2 er asse/n'q'j'l't' [^cg]er
SFX c2 écer éçasse/n'q'j'l't' écer
SFX c2 éger égeasse/n'q'j'l't' éger
SFX c2 er asses/n'q'l'm' [^cg]er
SFX c2 écer éçasses/n'q'l'm' écer
SFX c2 éger égeasses/n'q'l'm' éger
SFX c2 er ât/n'q'l'm't's' [^cg]er
SFX c2 écer éçât/n'q'l'm't's' écer
SFX c2 éger égeât/n'q'l'm't's' éger
SFX c2 er assions/n'q'l't' [^cg]er
SFX c2 écer éçassions/n'q'l't' écer
SFX c2 éger égeassions/n'q'l't' éger
SFX c2 er assiez/n'q'l'm' [^cg]er
SFX c2 écer éçassiez/n'q'l'm' écer
SFX c2 éger égeassiez/n'q'l'm' éger
SFX c2 er assent/n'q'l'm't's' [^cg]er
SFX c2 écer éçassent/n'q'l'm't's' écer
SFX c2 éger égeassent/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'l'm' ébrer
SFX c2 écer èce/n'l'm' écer
SFX c2 écher èche/n'l'm' écher
SFX c2 écrer ècre/n'l'm' écrer
SFX c2 éder ède/n'l'm' éder
SFX c2 éger ège/n'l'm' éger
SFX c2 égler ègle/n'l'm' égler
SFX c2 égner ègne/n'l'm' égner
SFX c2 égrer ègre/n'l'm' égrer
SFX c2 éguer ègue/n'l'm' éguer
SFX c2 éler èle/n'l'm' éler
SFX c2 émer ème/n'l'm' émer
SFX c2 éner ène/n'l'm' éner
SFX c2 éper èpe/n'l'm' éper
SFX c2 équer èque/n'l'm' équer
SFX c2 érer ère/n'l'm' érer
SFX c2 éser èse/n'l'm' éser
SFX c2 éter ète/n'l'm' éter
SFX c2 étrer ètre/n'l'm' étrer
SFX c2 évrer èvre/n'l'm' évrer
SFX c2 éyer èye/n'l'm' éyer
SFX c2 er ons/n'l' [^cg]er
SFX c2 écer éçons/n'l' écer
SFX c2 éger égeons/n'l' éger
SFX c2 er ez/n'l'm' er
SFX c3 Y 152
SFX c3 er er/m't's' er
SFX c3 er ant/m't's' [^cg]er
SFX c3 écer éçant/m't's' écer
SFX c3 éger égeant/m't's' éger
SFX c3 ébrer èbre/m's' ébrer
SFX c3 écer èce/m's' écer
SFX c3 écher èche/m's' écher
SFX c3 écrer ècre/m's' écrer
SFX c3 éder ède/m's' éder
SFX c3 éger ège/m's' éger
SFX c3 égler ègle/m's' égler
SFX c3 égner ègne/m's' égner
SFX c3 égrer ègre/m's' égrer
SFX c3 éguer ègue/m's' éguer
SFX c3 éler èle/m's' éler
SFX c3 émer ème/m's' émer
SFX c3 éner ène/m's' éner
SFX c3 éper èpe/m's' éper
SFX c3 équer èque/m's' équer
SFX c3 érer ère/m's' érer
SFX c3 éser èse/m's' éser
SFX c3 éter ète/m's' éter
SFX c3 étrer ètre/m's' étrer
SFX c3 évrer èvre/m's' évrer
SFX c3 éyer èye/m's' éyer
SFX c3 ébrer èbres/t' ébrer
SFX c3 écer èces/t' écer
SFX c3 écher èches/t' écher
SFX c3 écrer ècres/t' écrer
SFX c3 éder èdes/t' éder
SFX c3 éger èges/t' éger
SFX c3 égler ègles/t' égler
SFX c3 égner ègnes/t' égner
SFX c3 égrer ègres/t' égrer
SFX c3 éguer ègues/t' éguer
SFX c3 éler èles/t' éler
SFX c3 émer èmes/t' émer
SFX c3 éner ènes/t' éner
SFX c3 éper èpes/t' éper
SFX c3 équer èques/t' équer
SFX c3 érer ères/t' érer
SFX c3 éser èses/t' éser
SFX c3 éter ètes/t' éter
SFX c3 étrer ètres/t' étrer
SFX c3 évrer èvres/t' évrer
SFX c3 éyer èyes/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c3 ébrer èbrent/s' ébrer
SFX c3 écer ècent/s' écer
SFX c3 écher èchent/s' écher
SFX c3 écrer ècrent/s' écrer
SFX c3 éder èdent/s' éder
SFX c3 éger ègent/s' éger
SFX c3 égler èglent/s' égler
SFX c3 égner ègnent/s' égner
SFX c3 égrer ègrent/s' égrer
SFX c3 éguer èguent/s' éguer
SFX c3 éler èlent/s' éler
SFX c3 émer èment/s' émer
SFX c3 éner ènent/s' éner
SFX c3 éper èpent/s' éper
SFX c3 équer èquent/s' équer
SFX c3 érer èrent/s' érer
SFX c3 éser èsent/s' éser
SFX c3 éter ètent/s' éter
SFX c3 étrer ètrent/s' étrer
SFX c3 évrer èvrent/s' évrer
SFX c3 éyer èyent/s' éyer
SFX c3 er ais/m't' [^cg]er
SFX c3 écer éçais/m't' écer
SFX c3 éger égeais/m't' éger
SFX c3 er ait/s' [^cg]er
SFX c3 écer éçait/s' écer
SFX c3 éger égeait/s' éger
SFX c3 er ions er
SFX c3 er iez er
SFX c3 er aient/s' [^cg]er
SFX c3 écer éçaient/s' écer
SFX c3 éger égeaient/s' éger
SFX c3 er ai/m' [^cg]er
SFX c3 écer éçai/m' écer
SFX c3 éger égeai/m' éger
SFX c3 er as/t' [^cg]er
SFX c3 écer éças/t' écer
SFX c3 éger égeas/t' éger
SFX c3 er a/s' [^cg]er
SFX c3 écer éça/s' écer
SFX c3 éger égea/s' éger
SFX c3 er âmes [^cg]er
SFX c3 écer éçâmes écer
SFX c3 éger égeâmes éger
SFX c3 er âtes [^cg]er
SFX c3 écer éçâtes écer
SFX c3 éger égeâtes éger
SFX c3 er èrent/s' er
SFX c3 er erai/m' er
SFX c3 er eras/t' er
SFX c3 er era/s' er
SFX c3 er erons er
SFX c3 er erez er
SFX c3 er eront/s' er
SFX c3 er erais/m't' er
SFX c3 er erait/s' er
SFX c3 er erions er
SFX c3 er eriez er
SFX c3 er eraient/s' er
SFX c3 er asse/m' [^cg]er
SFX c3 écer éçasse/m' écer
SFX c3 éger égeasse/m' éger
SFX c3 er asses/t' [^cg]er
SFX c3 écer éçasses/t' écer
SFX c3 éger égeasses/t' éger
SFX c3 er ât/s' [^cg]er
SFX c3 écer éçât/s' écer
SFX c3 éger égeât/s' éger
SFX c3 er assions [^cg]er
SFX c3 écer éçassions écer
SFX c3 éger égeassions éger
SFX c3 er assiez [^cg]er
SFX c3 écer éçassiez écer
SFX c3 éger égeassiez éger
SFX c3 er assent/s' [^cg]er
SFX c3 écer éçassent/s' écer
SFX c3 éger égeassent/s' éger
SFX c3 ébrer èbre/t' ébrer
SFX c3 écer èce/t' écer
SFX c3 écher èche/t' écher
SFX c3 écrer ècre/t' écrer
SFX c3 éder ède/t' éder
SFX c3 éger ège/t' éger
SFX c3 égler ègle/t' égler
SFX c3 égner ègne/t' égner
SFX c3 égrer ègre/t' égrer
SFX c3 éguer ègue/t' éguer
SFX c3 éler èle/t' éler
SFX c3 émer ème/t' émer
SFX c3 éner ène/t' éner
SFX c3 éper èpe/t' éper
SFX c3 équer èque/t' équer
SFX c3 érer ère/t' érer
SFX c3 éser èse/t' éser
SFX c3 éter ète/t' éter
SFX c3 étrer ètre/t' étrer
SFX c3 évrer èvre/t' évrer
SFX c3 éyer èye/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c4 Y 152
SFX c4 er er/n'q'd'l'm't's' er
SFX c4 er ant/n'q'l'm't's' [^cg]er
SFX c4 écer éçant/n'q'l'm't's' écer
SFX c4 éger égeant/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c4 écer èce/n'q'j'l'm't's' écer
SFX c4 écher èche/n'q'j'l'm't's' écher
SFX c4 écrer ècre/n'q'j'l'm't's' écrer
SFX c4 éder ède/n'q'j'l'm't's' éder
SFX c4 éger ège/n'q'j'l'm't's' éger
SFX c4 égler ègle/n'q'j'l'm't's' égler
SFX c4 égner ègne/n'q'j'l'm't's' égner
SFX c4 égrer ègre/n'q'j'l'm't's' égrer
SFX c4 éguer ègue/n'q'j'l'm't's' éguer
SFX c4 éler èle/n'q'j'l'm't's' éler
SFX c4 émer ème/n'q'j'l'm't's' émer
SFX c4 éner ène/n'q'j'l'm't's' éner
SFX c4 éper èpe/n'q'j'l'm't's' éper
SFX c4 équer èque/n'q'j'l'm't's' équer
SFX c4 érer ère/n'q'j'l'm't's' érer
SFX c4 éser èse/n'q'j'l'm't's' éser
SFX c4 éter ète/n'q'j'l'm't's' éter
SFX c4 étrer ètre/n'q'j'l'm't's' étrer
SFX c4 évrer èvre/n'q'j'l'm't's' évrer
SFX c4 éyer èye/n'q'j'l'm't's' éyer
SFX c4 ébrer èbres/n'q'l'm't' ébrer
SFX c4 écer èces/n'q'l'm't' écer
SFX c4 écher èches/n'q'l'm't' écher
SFX c4 écrer ècres/n'q'l'm't' écrer
SFX c4 éder èdes/n'q'l'm't' éder
SFX c4 éger èges/n'q'l'm't' éger
SFX c4 égler ègles/n'q'l'm't' égler
SFX c4 égner ègnes/n'q'l'm't' égner
SFX c4 égrer ègres/n'q'l'm't' égrer
SFX c4 éguer ègues/n'q'l'm't' éguer
SFX c4 éler èles/n'q'l'm't' éler
SFX c4 émer èmes/n'q'l'm't' émer
SFX c4 éner ènes/n'q'l'm't' éner
SFX c4 éper èpes/n'q'l'm't' éper
SFX c4 équer èques/n'q'l'm't' équer
SFX c4 érer ères/n'q'l'm't' érer
SFX c4 éser èses/n'q'l'm't' éser
SFX c4 éter ètes/n'q'l'm't' éter
SFX c4 étrer ètres/n'q'l'm't' étrer
SFX c4 évrer èvres/n'q'l'm't' évrer
SFX c4 éyer èyes/n'q'l'm't' éyer
SFX c4 er ons/n'q'l't' [^cg]er
SFX c4 écer éçons/n'q'l't' écer
SFX c4 éger égeons/n'q'l't' éger
SFX c4 er ez/n'q'l'm' er
SFX c4 ébrer èbrent/n'q'l'm't's' ébrer
SFX c4 écer ècent/n'q'l'm't's' écer
SFX c4 écher èchent/n'q'l'm't's' écher
SFX c4 écrer ècrent/n'q'l'm't's' écrer
SFX c4 éder èdent/n'q'l'm't's' éder
SFX c4 éger ègent/n'q'l'm't's' éger
SFX c4 égler èglent/n'q'l'm't's' égler
SFX c4 égner ègnent/n'q'l'm't's' égner
SFX c4 égrer ègrent/n'q'l'm't's' égrer
SFX c4 éguer èguent/n'q'l'm't's' éguer
SFX c4 éler èlent/n'q'l'm't's' éler
SFX c4 émer èment/n'q'l'm't's' émer
SFX c4 éner ènent/n'q'l'm't's' éner
SFX c4 éper èpent/n'q'l'm't's' éper
SFX c4 équer èquent/n'q'l'm't's' équer
SFX c4 érer èrent/n'q'l'm't's' érer
SFX c4 éser èsent/n'q'l'm't's' éser
SFX c4 éter ètent/n'q'l'm't's' éter
SFX c4 étrer ètrent/n'q'l'm't's' étrer
SFX c4 évrer èvrent/n'q'l'm't's' évrer
SFX c4 éyer èyent/n'q'l'm't's' éyer
SFX c4 er ais/n'q'j'l'm't' [^cg]er
SFX c4 écer éçais/n'q'j'l'm't' écer
SFX c4 éger égeais/n'q'j'l'm't' éger
SFX c4 er ait/n'q'l'm't's' [^cg]er
SFX c4 écer éçait/n'q'l'm't's' écer
SFX c4 éger égeait/n'q'l'm't's' éger
SFX c4 er ions/n'q'l't' er
SFX c4 er iez/n'q'l'm' er
SFX c4 er aient/n'q'l'm't's' [^cg]er
SFX c4 écer éçaient/n'q'l'm't's' écer
SFX c4 éger égeaient/n'q'l'm't's' éger
SFX c4 er ai/n'q'j'l'm't' [^cg]er
SFX c4 écer éçai/n'q'j'l'm't' écer
SFX c4 éger égeai/n'q'j'l'm't' éger
SFX c4 er as/n'q'l'm't' [^cg]er
SFX c4 écer éças/n'q'l'm't' écer
SFX c4 éger égeas/n'q'l'm't' éger
SFX c4 er a/n'q'l'm't's' [^cg]er
SFX c4 écer éça/n'q'l'm't's' écer
SFX c4 éger égea/n'q'l'm't's' éger
SFX c4 er âmes/n'q'l't' [^cg]er
SFX c4 écer éçâmes/n'q'l't' écer
SFX c4 éger égeâmes/n'q'l't' éger
SFX c4 er âtes/n'q'l'm' [^cg]er
SFX c4 écer éçâtes/n'q'l'm' écer
SFX c4 éger égeâtes/n'q'l'm' éger
SFX c4 er èrent/n'q'l'm't's' er
SFX c4 er erai/n'q'j'l'm't' er
SFX c4 er eras/n'q'l'm't' er
SFX c4 er era/n'q'l'm't's' er
SFX c4 er erons/n'q'l't' er
SFX c4 er erez/n'q'l'm' er
SFX c4 er eront/n'q'l'm't's' er
SFX c4 er erais/n'q'j'l'm't' er
SFX c4 er erait/n'q'l'm't's' er
SFX c4 er erions/n'q'l't' er
SFX c4 er eriez/n'q'l'm' er
SFX c4 er eraient/n'q'l'm't's' er
SFX c4 er asse/n'q'j'l'm't' [^cg]er
SFX c4 écer éçasse/n'q'j'l'm't' écer
SFX c4 éger égeasse/n'q'j'l'm't' éger
SFX c4 er asses/n'q'l'm't' [^cg]er
SFX c4 écer éçasses/n'q'l'm't' écer
SFX c4 éger égeasses/n'q'l'm't' éger
SFX c4 er ât/n'q'l'm't's' [^cg]er
SFX c4 écer éçât/n'q'l'm't's' écer
SFX c4 éger égeât/n'q'l'm't's' éger
SFX c4 er assions/n'q'l't' [^cg]er
SFX c4 écer éçassions/n'q'l't' écer
SFX c4 éger égeassions/n'q'l't' éger
SFX c4 er assiez/n'q'l'm' [^cg]er
SFX c4 écer éçassiez/n'q'l'm' écer
SFX c4 éger égeassiez/n'q'l'm' éger
SFX c4 er assent/n'q'l'm't's' [^cg]er
SFX c4 écer éçassent/n'q'l'm't's' écer
SFX c4 éger égeassent/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'l'm't' ébrer
SFX c4 écer èce/n'l'm't' écer
SFX c4 écher èche/n'l'm't' écher
SFX c4 écrer ècre/n'l'm't' écrer
SFX c4 éder ède/n'l'm't' éder
SFX c4 éger ège/n'l'm't' éger
SFX c4 égler ègle/n'l'm't' égler
SFX c4 égner ègne/n'l'm't' égner
SFX c4 égrer ègre/n'l'm't' égrer
SFX c4 éguer ègue/n'l'm't' éguer
SFX c4 éler èle/n'l'm't' éler
SFX c4 émer ème/n'l'm't' émer
SFX c4 éner ène/n'l'm't' éner
SFX c4 éper èpe/n'l'm't' éper
SFX c4 équer èque/n'l'm't' équer
SFX c4 érer ère/n'l'm't' érer
SFX c4 éser èse/n'l'm't' éser
SFX c4 éter ète/n'l'm't' éter
SFX c4 étrer ètre/n'l'm't' étrer
SFX c4 évrer èvre/n'l'm't' évrer
SFX c4 éyer èye/n'l'm't' éyer
SFX c4 er ons/n'l' [^cg]er
SFX c4 écer éçons/n'l' écer
SFX c4 éger égeons/n'l' éger
SFX c4 er ez/n'l'm' er
SFX c5 Y 152
SFX c5 er er/n'q'd'm't's' er
SFX c5 er ant/n'q'm't's' [^cg]er
SFX c5 écer éçant/m'q'm't's' écer
SFX c5 éger égeant/m'q'l't's' éger
SFX c5 ébrer èbre/n'q'j'm't's' ébrer
SFX c5 écer èce/n'q'j'm't's' écer
SFX c5 écher èche/n'q'j'm't's' écher
SFX c5 écrer ècre/n'q'j'm't's' écrer
SFX c5 éder ède/n'q'j'm't's' éder
SFX c5 éger ège/n'q'j'm't's' éger
SFX c5 égler ègle/n'q'j'm't's' égler
SFX c5 égner ègne/n'q'j'm't's' égner
SFX c5 égrer ègre/n'q'j'm't's' égrer
SFX c5 éguer ègue/n'q'j'm't's' éguer
SFX c5 éler èle/n'q'j'm't's' éler
SFX c5 émer ème/n'q'j'm't's' émer
SFX c5 éner ène/n'q'j'm't's' éner
SFX c5 éper èpe/n'q'j'm't's' éper
SFX c5 équer èque/n'q'j'm't's' équer
SFX c5 érer ère/n'q'j'm't's' érer
SFX c5 éser èse/n'q'j'm't's' éser
SFX c5 éter ète/n'q'j'm't's' éter
SFX c5 étrer ètre/n'q'j'm't's' étrer
SFX c5 évrer èvre/n'q'j'm't's' évrer
SFX c5 éyer èye/n'q'j'm't's' éyer
SFX c5 ébrer èbres/n'm't' ébrer
SFX c5 écer èces/n'm't' écer
SFX c5 écher èches/n'm't' écher
SFX c5 écrer ècres/n'm't' écrer
SFX c5 éder èdes/n'm't' éder
SFX c5 éger èges/n'm't' éger
SFX c5 égler ègles/n'm't' égler
SFX c5 égner ègnes/n'm't' égner
SFX c5 égrer ègres/n'm't' égrer
SFX c5 éguer ègues/n'm't' éguer
SFX c5 éler èles/n'm't' éler
SFX c5 émer èmes/n'm't' émer
SFX c5 éner ènes/n'm't' éner
SFX c5 éper èpes/n'm't' éper
SFX c5 équer èques/n'm't' équer
SFX c5 érer ères/n'm't' érer
SFX c5 éser èses/n'm't' éser
SFX c5 éter ètes/n'm't' éter
SFX c5 étrer ètres/n'm't' étrer
SFX c5 évrer èvres/n'm't' évrer
SFX c5 éyer èyes/n'm't' éyer
SFX c5 er ons/n't' [^cg]er
SFX c5 écer éçons/n't' écer
SFX c5 éger égeons/n't' éger
SFX c5 er ez/n'm' er
SFX c5 ébrer èbrent/n'q'm't's' ébrer
SFX c5 écer ècent/n'q'm't's' écer
SFX c5 écher èchent/n'q'm't's' écher
SFX c5 écrer ècrent/n'q'm't's' écrer
SFX c5 éder èdent/n'q'm't's' éder
SFX c5 éger ègent/n'q'm't's' éger
SFX c5 égler èglent/n'q'm't's' égler
SFX c5 égner ègnent/n'q'm't's' égner
SFX c5 égrer ègrent/n'q'm't's' égrer
SFX c5 éguer èguent/n'q'm't's' éguer
SFX c5 éler èlent/n'q'm't's' éler
SFX c5 émer èment/n'q'm't's' émer
SFX c5 éner ènent/n'q'm't's' éner
SFX c5 éper èpent/n'q'm't's' éper
SFX c5 équer èquent/n'q'm't's' équer
SFX c5 érer èrent/n'q'm't's' érer
SFX c5 éser èsent/n'q'm't's' éser
SFX c5 éter ètent/n'q'm't's' éter
SFX c5 étrer ètrent/n'q'm't's' étrer
SFX c5 évrer èvrent/n'q'm't's' évrer
SFX c5 éyer èyent/n'q'm't's' éyer
SFX c5 er ais/n'j'm't' [^cg]er
SFX c5 écer éçais/n'j'm't' écer
SFX c5 éger égeais/n'j'm't' éger
SFX c5 er ait/n'q'm't's' [^cg]er
SFX c5 écer éçait/n'q'm't's' écer
SFX c5 éger égeait/n'q'm't's' éger
SFX c5 er ions/n't' er
SFX c5 er iez/n'm' er
SFX c5 er aient/n'q'm't's' [^cg]er
SFX c5 écer éçaient/n'q'm't's' écer
SFX c5 éger égeaient/n'q'm't's' éger
SFX c5 er ai/n'j'm't' [^cg]er
SFX c5 écer éçai/n'j'm't' écer
SFX c5 éger égeai/n'j'm't' éger
SFX c5 er as/n'm't' [^cg]er
SFX c5 écer éças/n'm't' écer
SFX c5 éger égeas/n'm't' éger
SFX c5 er a/n'q'm't's' [^cg]er
SFX c5 écer éça/n'q'm't's' écer
SFX c5 éger égea/n'q'm't's' éger
SFX c5 er âmes/n't' [^cg]er
SFX c5 écer éçâmes/n't' écer
SFX c5 éger égeâmes/n't' éger
SFX c5 er âtes/n'm' [^cg]er
SFX c5 écer éçâtes/n'm' écer
SFX c5 éger égeâtes/n'm' éger
SFX c5 er èrent/n'q'm't's' er
SFX c5 er erai/n'j'm't' er
SFX c5 er eras/n'm't' er
SFX c5 er era/n'q'm't's' er
SFX c5 er erons/n't' er
SFX c5 er erez/n'm' er
SFX c5 er eront/n'q'm't's' er
SFX c5 er erais/n'j'm't' er
SFX c5 er erait/n'q'm't's' er
SFX c5 er erions/n't' er
SFX c5 er eriez/n'm' er
SFX c5 er eraient/n'q'm't's' er
SFX c5 er asse/n'j'm't' [^cg]er
SFX c5 écer éçasse/n'j'm't' écer
SFX c5 éger égeasse/n'j'm't' éger
SFX c5 er asses/n'm't' [^cg]er
SFX c5 écer éçasses/n'm't' écer
SFX c5 éger égeasses/n'm't' éger
SFX c5 er ât/n'q'm't's' [^cg]er
SFX c5 écer éçât/n'q'm't's' écer
SFX c5 éger égeât/n'q'm't's' éger
SFX c5 er assions/n't' [^cg]er
SFX c5 écer éçassions/n't' écer
SFX c5 éger égeassions/n't' éger
SFX c5 er assiez/n'm' [^cg]er
SFX c5 écer éçassiez/n'm' écer
SFX c5 éger égeassiez/n'm' éger
SFX c5 er assent/n'q'm't's' [^cg]er
SFX c5 écer éçassent/n'q'm't's' écer
SFX c5 éger égeassent/n'q'm't's' éger
SFX c5 ébrer èbre/n'm' ébrer
SFX c5 écer èce/n'm' écer
SFX c5 écher èche/n'm' écher
SFX c5 écrer ècre/n'm' écrer
SFX c5 éder ède/n'm' éder
SFX c5 éger ège/n'm' éger
SFX c5 égler ègle/n'm' égler
SFX c5 égner ègne/n'm' égner
SFX c5 égrer ègre/n'm' égrer
SFX c5 éguer ègue/n'm' éguer
SFX c5 éler èle/n'm' éler
SFX c5 émer ème/n'm' émer
SFX c5 éner ène/n'm' éner
SFX c5 éper èpe/n'm' éper
SFX c5 équer èque/n'm' équer
SFX c5 érer ère/n'm' érer
SFX c5 éser èse/n'm' éser
SFX c5 éter ète/n'm' éter
SFX c5 étrer ètre/n'm' étrer
SFX c5 évrer èvre/n'm' évrer
SFX c5 éyer èye/n'm' éyer
SFX c5 er ons/n' [^cg]er
SFX c5 écer éçons/n' écer
SFX c5 éger égeons/n' éger
SFX c5 er ez/n' er
SFX d0 N 82
SFX d0 er ant er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 eter ettes jeter
SFX d0 eter ettes [^j]eter
SFX d0 eler elles ppeler
SFX d0 eler elles [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d0 eter ettent jeter
SFX d0 eter ettent [^j]eter
SFX d0 eler ellent ppeler
SFX d0 eler ellent [^p].eler
SFX d0 er ais er
SFX d0 er ait er
SFX d0 er ions er
SFX d0 er iez er
SFX d0 er aient er
SFX d0 er ai er
SFX d0 er as er
SFX d0 er a er
SFX d0 er âmes er
SFX d0 er âtes er
SFX d0 er èrent er
SFX d0 eter etterai jeter
SFX d0 eter etterai [^j]eter
SFX d0 eler ellerai ppeler
SFX d0 eler ellerai [^p].eler
SFX d0 eter etteras jeter
SFX d0 eter etteras [^j]eter
SFX d0 eler elleras ppeler
SFX d0 eler elleras [^p].eler
SFX d0 eter ettera jeter
SFX d0 eter ettera [^j]eter
SFX d0 eler ellera ppeler
SFX d0 eler ellera [^p].eler
SFX d0 eter etterons jeter
SFX d0 eter etterons [^j]eter
SFX d0 eler ellerons ppeler
SFX d0 eler ellerons [^p].eler
SFX d0 eter etterez jeter
SFX d0 eter etterez [^j]eter
SFX d0 eler ellerez ppeler
SFX d0 eler ellerez [^p].eler
SFX d0 eter etteront jeter
SFX d0 eter etteront [^j]eter
SFX d0 eler elleront ppeler
SFX d0 eler elleront [^p].eler
SFX d0 eter etterais jeter
SFX d0 eter etterais [^j]eter
SFX d0 eler ellerais ppeler
SFX d0 eler ellerais [^p].eler
SFX d0 eter etterait jeter
SFX d0 eter etterait [^j]eter
SFX d0 eler ellerait ppeler
SFX d0 eler ellerait [^p].eler
SFX d0 eter etterions jeter
SFX d0 eter etterions [^j]eter
SFX d0 eler ellerions ppeler
SFX d0 eler ellerions [^p].eler
SFX d0 eter etteriez jeter
SFX d0 eter etteriez [^j]eter
SFX d0 eler elleriez ppeler
SFX d0 eler elleriez [^p].eler
SFX d0 eter etteraient jeter
SFX d0 eter etteraient [^j]eter
SFX d0 eler elleraient ppeler
SFX d0 eler elleraient [^p].eler
SFX d0 er asse er
SFX d0 er asses er
SFX d0 er ât er
SFX d0 er assions er
SFX d0 er assiez er
SFX d0 er assent er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d1 Y 83
SFX d1 er er/n'q'd' er
SFX d1 er ant/n'q' er
SFX d1 eter ette/n'q'j' jeter
SFX d1 eter ette/n'q'j' [^j]eter
SFX d1 eler elle/n'q'j' ppeler
SFX d1 eler elle/n'q'j' [^p].eler
SFX d1 eter ettes/n' jeter
SFX d1 eter ettes/n' [^j]eter
SFX d1 eler elles/n' ppeler
SFX d1 eler elles/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d1 eter ettent/n'q' jeter
SFX d1 eter ettent/n'q' [^j]eter
SFX d1 eler ellent/n'q' ppeler
SFX d1 eler ellent/n'q' [^p].eler
SFX d1 er ais/n'j' er
SFX d1 er ait/n'q' er
SFX d1 er ions/n' er
SFX d1 er iez/n' er
SFX d1 er aient/n'q' er
SFX d1 er ai/n'j' er
SFX d1 er as/n' er
SFX d1 er a/n'q' er
SFX d1 er âmes/n' er
SFX d1 er âtes/n' er
SFX d1 er èrent/n'q' er
SFX d1 eter etterai/n'j' jeter
SFX d1 eter etterai/n'j' [^j]eter
SFX d1 eler ellerai/n'j' ppeler
SFX d1 eler ellerai/n'j' [^p].eler
SFX d1 eter etteras/n' jeter
SFX d1 eter etteras/n' [^j]eter
SFX d1 eler elleras/n' ppeler
SFX d1 eler elleras/n' [^p].eler
SFX d1 eter ettera/n'q' jeter
SFX d1 eter ettera/n'q' [^j]eter
SFX d1 eler ellera/n'q' ppeler
SFX d1 eler ellera/n'q' [^p].eler
SFX d1 eter etterons/n' jeter
SFX d1 eter etterons/n' [^j]eter
SFX d1 eler ellerons/n' ppeler
SFX d1 eler ellerons/n' [^p].eler
SFX d1 eter etterez/n' jeter
SFX d1 eter etterez/n' [^j]eter
SFX d1 eler ellerez/n' ppeler
SFX d1 eler ellerez/n' [^p].eler
SFX d1 eter etteront/n'q' jeter
SFX d1 eter etteront/n'q' [^j]eter
SFX d1 eler elleront/n'q' ppeler
SFX d1 eler elleront/n'q' [^p].eler
SFX d1 eter etterais/n'j' jeter
SFX d1 eter etterais/n'j' [^j]eter
SFX d1 eler ellerais/n'j' ppeler
SFX d1 eler ellerais/n'j' [^p].eler
SFX d1 eter etterait/n'q' jeter
SFX d1 eter etterait/n'q' [^j]eter
SFX d1 eler ellerait/n'q' ppeler
SFX d1 eler ellerait/n'q' [^p].eler
SFX d1 eter etterions/n' jeter
SFX d1 eter etterions/n' [^j]eter
SFX d1 eler ellerions/n' ppeler
SFX d1 eler ellerions/n' [^p].eler
SFX d1 eter etteriez/n' jeter
SFX d1 eter etteriez/n' [^j]eter
SFX d1 eler elleriez/n' ppeler
SFX d1 eler elleriez/n' [^p].eler
SFX d1 eter etteraient/n'q' jeter
SFX d1 eter etteraient/n'q' [^j]eter
SFX d1 eler elleraient/n'q' ppeler
SFX d1 eler elleraient/n'q' [^p].eler
SFX d1 er asse/n'j' er
SFX d1 er asses/n' er
SFX d1 er ât/n'q' er
SFX d1 er assions/n' er
SFX d1 er assiez/n' er
SFX d1 er assent/n'q' er
SFX d1 eter ette/n' jeter
SFX d1 eter ette/n' [^j]eter
SFX d1 eler elle/n' ppeler
SFX d1 eler elle/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d2 Y 83
SFX d2 er er/n'q'd'l'm't's' er
SFX d2 er ant/n'q'l'm't's' er
SFX d2 eter ette/n'q'j'l'm't's' jeter
SFX d2 eter ette/n'q'j'l'm't's' [^j]eter
SFX d2 eler elle/n'q'j'l'm't's' ppeler
SFX d2 eler elle/n'q'j'l'm't's' [^p].eler
SFX d2 eter ettes/n'q'l'm' jeter
SFX d2 eter ettes/n'q'l'm' [^j]eter
SFX d2 eler elles/n'q'l'm' ppeler
SFX d2 eler elles/n'q'l'm' [^p].eler
SFX d2 er ons/n'q'l't' er
SFX d2 er ez/n'q'l'm' er
SFX d2 eter ettent/n'q'l'm't's' jeter
SFX d2 eter ettent/n'q'l'm't's' [^j]eter
SFX d2 eler ellent/n'q'l'm't's' ppeler
SFX d2 eler ellent/n'q'l'm't's' [^p].eler
SFX d2 er ais/n'q'j'l'm't' er
SFX d2 er ait/n'q'l'm't's' er
SFX d2 er ions/n'q'l't' er
SFX d2 er iez/n'q'l'm' er
SFX d2 er aient/n'q'l'm't's' er
SFX d2 er ai/n'q'j'l't' er
SFX d2 er as/n'q'l'm' er
SFX d2 er a/n'q'l'm't's' er
SFX d2 er âmes/n'q'l't' er
SFX d2 er âtes/n'q'l'm' er
SFX d2 er èrent/n'q'l'm't's' er
SFX d2 eter etterai/n'q'j'l't' jeter
SFX d2 eter etterai/n'q'j'l't' [^j]eter
SFX d2 eler ellerai/n'q'j'l't' ppeler
SFX d2 eler ellerai/n'q'j'l't' [^p].eler
SFX d2 eter etteras/n'q'l'm' jeter
SFX d2 eter etteras/n'q'l'm' [^j]eter
SFX d2 eler elleras/n'q'l'm' ppeler
SFX d2 eler elleras/n'q'l'm' [^p].eler
SFX d2 eter ettera/n'q'l'm't's' jeter
SFX d2 eter ettera/n'q'l'm't's' [^j]eter
SFX d2 eler ellera/n'q'l'm't's' ppeler
SFX d2 eler ellera/n'q'l'm't's' [^p].eler
SFX d2 eter etterons/n'q'l't' jeter
SFX d2 eter etterons/n'q'l't' [^j]eter
SFX d2 eler ellerons/n'q'l't' ppeler
SFX d2 eler ellerons/n'q'l't' [^p].eler
SFX d2 eter etterez/n'q'l'm' jeter
SFX d2 eter etterez/n'q'l'm' [^j]eter
SFX d2 eler ellerez/n'q'l'm' ppeler
SFX d2 eler ellerez/n'q'l'm' [^p].eler
SFX d2 eter etteront/n'q'l'm't's' jeter
SFX d2 eter etteront/n'q'l'm't's' [^j]eter
SFX d2 eler elleront/n'q'l'm't's' ppeler
SFX d2 eler elleront/n'q'l'm't's' [^p].eler
SFX d2 eter etterais/n'q'j'l'm't' jeter
SFX d2 eter etterais/n'q'j'l'm't' [^j]eter
SFX d2 eler ellerais/n'q'j'l'm't' ppeler
SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d2 eter etterait/n'q'l'm't's' jeter
SFX d2 eter etterait/n'q'l'm't's' [^j]eter
SFX d2 eler ellerait/n'q'l'm't's' ppeler
SFX d2 eler ellerait/n'q'l'm't's' [^p].eler
SFX d2 eter etterions/n'q'l't' jeter
SFX d2 eter etterions/n'q'l't' [^j]eter
SFX d2 eler ellerions/n'q'l't' ppeler
SFX d2 eler ellerions/n'q'l't' [^p].eler
SFX d2 eter etteriez/n'q'l'm' jeter
SFX d2 eter etteriez/n'q'l'm' [^j]eter
SFX d2 eler elleriez/n'q'l'm' ppeler
SFX d2 eler elleriez/n'q'l'm' [^p].eler
SFX d2 eter etteraient/n'q'l'm't's' jeter
SFX d2 eter etteraient/n'q'l'm't's' [^j]eter
SFX d2 eler elleraient/n'q'l'm't's' ppeler
SFX d2 eler elleraient/n'q'l'm't's' [^p].eler
SFX d2 er asse/n'q'j'l't' er
SFX d2 er asses/n'q'l'm' er
SFX d2 er ât/n'q'l'm't's' er
SFX d2 er assions/n'q'l't' er
SFX d2 er assiez/n'q'l'm' er
SFX d2 er assent/n'q'l'm't's' er
SFX d2 eter ette/n'l'm' jeter
SFX d2 eter ette/n'l'm' [^j]eter
SFX d2 eler elle/n'l'm' ppeler
SFX d2 eler elle/n'l'm' [^p].eler
SFX d2 er ons/n'l' er
SFX d2 er ez/n'l'm' er
SFX d3 Y 83
SFX d3 er er/m't's' er
SFX d3 er ant/m't's' er
SFX d3 eter ette/m's' jeter
SFX d3 eter ette/m's' [^j]eter
SFX d3 eler elle/m's' ppeler
SFX d3 eler elle/m's' [^p].eler
SFX d3 eter ettes/t' jeter
SFX d3 eter ettes/t' [^j]eter
SFX d3 eler elles/t' ppeler
SFX d3 eler elles/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d3 eter ettent/s' jeter
SFX d3 eter ettent/s' [^j]eter
SFX d3 eler ellent/s' ppeler
SFX d3 eler ellent/s' [^p].eler
SFX d3 er ais/m't' er
SFX d3 er ait/s' er
SFX d3 er ions er
SFX d3 er iez er
SFX d3 er aient/s' er
SFX d3 er ai/m' er
SFX d3 er as/t' er
SFX d3 er a/s' er
SFX d3 er âmes er
SFX d3 er âtes er
SFX d3 er èrent/s' er
SFX d3 eter etterai/m' jeter
SFX d3 eter etterai/m' [^j]eter
SFX d3 eler ellerai/m' ppeler
SFX d3 eler ellerai/m' [^p].eler
SFX d3 eter etteras/t' jeter
SFX d3 eter etteras/t' [^j]eter
SFX d3 eler elleras/t' ppeler
SFX d3 eler elleras/t' [^p].eler
SFX d3 eter ettera/s' jeter
SFX d3 eter ettera/s' [^j]eter
SFX d3 eler ellera/s' ppeler
SFX d3 eler ellera/s' [^p].eler
SFX d3 eter etterons jeter
SFX d3 eter etterons [^j]eter
SFX d3 eler ellerons ppeler
SFX d3 eler ellerons [^p].eler
SFX d3 eter etterez jeter
SFX d3 eter etterez [^j]eter
SFX d3 eler ellerez ppeler
SFX d3 eler ellerez [^p].eler
SFX d3 eter etteront/s' jeter
SFX d3 eter etteront/s' [^j]eter
SFX d3 eler elleront/s' ppeler
SFX d3 eler elleront/s' [^p].eler
SFX d3 eter etterais/m't' jeter
SFX d3 eter etterais/m't' [^j]eter
SFX d3 eler ellerais/m't' ppeler
SFX d3 eler ellerais/m't' [^p].eler
SFX d3 eter etterait/s' jeter
SFX d3 eter etterait/s' [^j]eter
SFX d3 eler ellerait/s' ppeler
SFX d3 eler ellerait/s' [^p].eler
SFX d3 eter etterions jeter
SFX d3 eter etterions [^j]eter
SFX d3 eler ellerions ppeler
SFX d3 eler ellerions [^p].eler
SFX d3 eter etteriez jeter
SFX d3 eter etteriez [^j]eter
SFX d3 eler elleriez ppeler
SFX d3 eler elleriez [^p].eler
SFX d3 eter etteraient/s' jeter
SFX d3 eter etteraient/s' [^j]eter
SFX d3 eler elleraient/s' ppeler
SFX d3 eler elleraient/s' [^p].eler
SFX d3 er asse/m' er
SFX d3 er asses/t' er
SFX d3 er ât/s' er
SFX d3 er assions er
SFX d3 er assiez er
SFX d3 er assent/s' er
SFX d3 eter ette/t' jeter
SFX d3 eter ette/t' [^j]eter
SFX d3 eler elle/t' ppeler
SFX d3 eler elle/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d4 Y 98
SFX d4 er er/n'q'd'l'm't's' er
SFX d4 er ant/n'q'l'm't's' er
SFX d4 eter ette/n'q'j'l'm't's' jeter
SFX d4 eter ette/n'q'j'l'm't's' [^j]eter
SFX d4 eler elle/n'q'j'l'm't's' ppeler
SFX d4 eler elle/n'q'j'l'm't's' [^p].eler
SFX d4 eler elle/n'q'j'l'm't's' épeler
SFX d4 eter ettes/n'q'l'm't' jeter
SFX d4 eter ettes/n'q'l'm't' [^j]eter
SFX d4 eler elles/n'q'l'm't' ppeler
SFX d4 eler elles/n'q'l'm't' [^p].eler
SFX d4 eler elles/n'q'l'm't' épeler
SFX d4 er ons/n'q'l't' er
SFX d4 er ez/n'q'l'm' er
SFX d4 eter ettent/n'q'l'm't's' jeter
SFX d4 eter ettent/n'q'l'm't's' [^j]eter
SFX d4 eler ellent/n'q'l'm't's' ppeler
SFX d4 eler ellent/n'q'l'm't's' [^p].eler
SFX d4 eler ellent/n'q'l'm't's' épeler
SFX d4 er ais/n'q'j'l'm't' er
SFX d4 er ait/n'q'l'm't's' er
SFX d4 er ions/n'q'l't' er
SFX d4 er iez/n'q'l'm' er
SFX d4 er aient/n'q'l'm't's' er
SFX d4 er ai/n'q'j'l'm't' er
SFX d4 er as/n'q'l'm't' er
SFX d4 er a/n'q'l'm't's' er
SFX d4 er âmes/n'q'l't' er
SFX d4 er âtes/n'q'l'm' er
SFX d4 er èrent/n'q'l'm't's' er
SFX d4 eter etterai/n'q'j'l'm't' jeter
SFX d4 eter etterai/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerai/n'q'j'l'm't' ppeler
SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerai/n'q'j'l'm't' épeler
SFX d4 eter etteras/n'q'l'm't' jeter
SFX d4 eter etteras/n'q'l'm't' [^j]eter
SFX d4 eler elleras/n'q'l'm't' ppeler
SFX d4 eler elleras/n'q'l'm't' [^p].eler
SFX d4 eler elleras/n'q'l'm't' épeler
SFX d4 eter ettera/n'q'l'm't's' jeter
SFX d4 eter ettera/n'q'l'm't's' [^j]eter
SFX d4 eler ellera/n'q'l'm't's' ppeler
SFX d4 eler ellera/n'q'l'm't's' [^p].eler
SFX d4 eler ellera/n'q'l'm't's' épeler
SFX d4 eter etterons/n'q'l't' jeter
SFX d4 eter etterons/n'q'l't' [^j]eter
SFX d4 eler ellerons/n'q'l't' ppeler
SFX d4 eler ellerons/n'q'l't' [^p].eler
SFX d4 eler ellerons/n'q'l't' épeler
SFX d4 eter etterez/n'q'l'm' jeter
SFX d4 eter etterez/n'q'l'm' [^j]eter
SFX d4 eler ellerez/n'q'l'm' ppeler
SFX d4 eler ellerez/n'q'l'm' [^p].eler
SFX d4 eler ellerez/n'q'l'm' épeler
SFX d4 eter etteront/n'q'l'm't's' jeter
SFX d4 eter etteront/n'q'l'm't's' [^j]eter
SFX d4 eler elleront/n'q'l'm't's' ppeler
SFX d4 eler elleront/n'q'l'm't's' [^p].eler
SFX d4 eler elleront/n'q'l'm't's' épeler
SFX d4 eter etterais/n'q'j'l'm't' jeter
SFX d4 eter etterais/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerais/n'q'j'l'm't' ppeler
SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerais/n'q'j'l'm't' épeler
SFX d4 eter etterait/n'q'l'm't's' jeter
SFX d4 eter etterait/n'q'l'm't's' [^j]eter
SFX d4 eler ellerait/n'q'l'm't's' ppeler
SFX d4 eler ellerait/n'q'l'm't's' [^p].eler
SFX d4 eler ellerait/n'q'l'm't's' épeler
SFX d4 eter etterions/n'q'l't' jeter
SFX d4 eter etterions/n'q'l't' [^j]eter
SFX d4 eler ellerions/n'q'l't' ppeler
SFX d4 eler ellerions/n'q'l't' [^p].eler
SFX d4 eler ellerions/n'q'l't' épeler
SFX d4 eter etteriez/n'q'l'm' jeter
SFX d4 eter etteriez/n'q'l'm' [^j]eter
SFX d4 eler elleriez/n'q'l'm' ppeler
SFX d4 eler elleriez/n'q'l'm' [^p].eler
SFX d4 eler elleriez/n'q'l'm' épeler
SFX d4 eter etteraient/n'q'l'm't's' jeter
SFX d4 eter etteraient/n'q'l'm't's' [^j]eter
SFX d4 eler elleraient/n'q'l'm't's' ppeler
SFX d4 eler elleraient/n'q'l'm't's' [^p].eler
SFX d4 eler elleraient/n'q'l'm't's' épeler
SFX d4 er asse/n'q'j'l'm't' er
SFX d4 er asses/n'q'l'm't' er
SFX d4 er ât/n'q'l'm't's' er
SFX d4 er assions/n'q'l't' er
SFX d4 er assiez/n'q'l'm' er
SFX d4 er assent/n'q'l'm't's' er
SFX d4 eter ette/n'l'm't' jeter
SFX d4 eter ette/n'l'm't' [^j]eter
SFX d4 eler elle/n'l'm't' ppeler
SFX d4 eler elle/n'l'm't' [^p].eler
SFX d4 eler elle/n'l'm't' épeler
SFX d4 er ons/n'l' er
SFX d4 er ez/n'l'm' er
SFX d5 Y 83
SFX d5 er er/m'q'd'm't's' er
SFX d5 er ant/m'q'd'm't's' er
SFX d5 eter ette/n'q'j'm't's' jeter
SFX d5 eter ette/n'q'j'm't's' [^j]eter
SFX d5 eler elle/n'q'j'm't's' ppeler
SFX d5 eler elle/n'q'j'm't's' [^p].eler
SFX d5 eter ettes/n'm't' jeter
SFX d5 eter ettes/n'm't' [^j]eter
SFX d5 eler elles/n'm't' ppeler
SFX d5 eler elles/n'm't' [^p].eler
SFX d5 er ons/n't' er
SFX d5 er ez/n'm' er
SFX d5 eter ettent/n'q'm't's' jeter
SFX d5 eter ettent/n'q'm't's' [^j]eter
SFX d5 eler ellent/n'q'm't's' ppeler
SFX d5 eler ellent/n'q'm't's' [^p].eler
SFX d5 er ais/n'j'm't' er
SFX d5 er ait/n'q'm't's' er
SFX d5 er ions/n't' er
SFX d5 er iez/n'm' er
SFX d5 er aient/n'q'm't's' er
SFX d5 er ai/n'j'm't' er
SFX d5 er as/n'm't' er
SFX d5 er a/n'q'm't's' er
SFX d5 er âmes/n't' er
SFX d5 er âtes/n'm' er
SFX d5 er èrent/n'q'm't's' er
SFX d5 eter etterai/n'j'm't' jeter
SFX d5 eter etterai/n'j'm't' [^j]eter
SFX d5 eler ellerai/n'j'm't' ppeler
SFX d5 eler ellerai/n'j'm't' [^p].eler
SFX d5 eter etteras/n'm't' jeter
SFX d5 eter etteras/n'm't' [^j]eter
SFX d5 eler elleras/n'm't' ppeler
SFX d5 eler elleras/n'm't' [^p].eler
SFX d5 eter ettera/n'q'm't's' jeter
SFX d5 eter ettera/n'q'm't's' [^j]eter
SFX d5 eler ellera/n'q'm't's' ppeler
SFX d5 eler ellera/n'q'm't's' [^p].eler
SFX d5 eter etterons/n't' jeter
SFX d5 eter etterons/n't' [^j]eter
SFX d5 eler ellerons/n't' ppeler
SFX d5 eler ellerons/n't' [^p].eler
SFX d5 eter etterez/n'm' jeter
SFX d5 eter etterez/n'm' [^j]eter
SFX d5 eler ellerez/n'm' ppeler
SFX d5 eler ellerez/n'm' [^p].eler
SFX d5 eter etteront/n'q'm't's' jeter
SFX d5 eter etteront/n'q'm't's' [^j]eter
SFX d5 eler elleront/n'q'm't's' ppeler
SFX d5 eler elleront/n'q'm't's' [^p].eler
SFX d5 eter etterais/n'j'm't' jeter
SFX d5 eter etterais/n'j'm't' [^j]eter
SFX d5 eler ellerais/n'j'm't' ppeler
SFX d5 eler ellerais/n'j'm't' [^p].eler
SFX d5 eter etterait/n'q'm't's' jeter
SFX d5 eter etterait/n'q'm't's' [^j]eter
SFX d5 eler ellerait/n'q'm't's' ppeler
SFX d5 eler ellerait/n'q'm't's' [^p].eler
SFX d5 eter etterions/n't' jeter
SFX d5 eter etterions/n't' [^j]eter
SFX d5 eler ellerions/n't' ppeler
SFX d5 eler ellerions/n't' [^p].eler
SFX d5 eter etteriez/n'm' jeter
SFX d5 eter etteriez/n'm' [^j]eter
SFX d5 eler elleriez/n'm' ppeler
SFX d5 eler elleriez/n'm' [^p].eler
SFX d5 eter etteraient/n'q'm't's' jeter
SFX d5 eter etteraient/n'q'm't's' [^j]eter
SFX d5 eler elleraient/n'q'm't's' ppeler
SFX d5 eler elleraient/n'q'm't's' [^p].eler
SFX d5 er asse/n'j'm't' er
SFX d5 er asses/n'm't' er
SFX d5 er ât/n'q'm't's' er
SFX d5 er assions/n't' er
SFX d5 er assiez/n'm' er
SFX d5 er assent/n'q'm't's' er
SFX d5 eter ette/m' jeter
SFX d5 eter ette/m' [^j]eter
SFX d5 eler elle/m' ppeler
SFX d5 eler elle/m' [^p].eler
SFX d5 er ons er
SFX d5 er ez er
SFX aA Y 54
SFX aA ller ller/n'q'd'm't' aller
SFX aA ller llant/n'q'm't' aller
SFX aA ller llé/q' aller
SFX aA ller llés/q' aller
SFX aA ller llée/q' aller
SFX aA ller llées/q' aller
SFX aA aller vais aller
SFX aA aller vas aller
SFX aA aller va aller
SFX aA ller llons/n'q' aller
SFX aA ller llez/n'q' aller
SFX aA aller vont aller
SFX aA ller llais/n'q'j' aller
SFX aA ller llait/n'q'm't' aller
SFX aA ller llions/n'q' aller
SFX aA ller lliez/n'q' aller
SFX aA ller llaient/n'q'm't' aller
SFX aA ller llai/n'q'j' aller
SFX aA ller llas/n'q' aller
SFX aA ller lla/n'q'm't' aller
SFX aA ller llâmes/n'q' aller
SFX aA ller llâtes/n'q' aller
SFX aA ller llèrent/n'q'm't' aller
SFX aA aller irai/n'q'j' aller
SFX aA aller iras/n'q' aller
SFX aA aller ira/n'q'm't' aller
SFX aA aller irons/n'q' aller
SFX aA aller irez/n'q'm't' aller
SFX aA aller iront/n'q' aller
SFX aA aller irais/n'q'j' aller
SFX aA aller irait/n'q'm't' aller
SFX aA aller irions/n'q' aller
SFX aA aller iriez/n'q' aller
SFX aA aller iraient/n'q'm't' aller
SFX aA ller ille/n'q'j'm't' aller
SFX aA ller illes/n' aller
SFX aA ller llions/n' aller
SFX aA ller lliez/n' aller
SFX aA ller illent/n'q'm't' aller
SFX aA ller llasse/n'q'j' aller
SFX aA ller llasses/n'q' aller
SFX aA ller llât/n'q'm't' aller
SFX aA ller llassions/n'q' aller
SFX aA ller llassiez/n'q' aller
SFX aA ller llassent/n'q'm't' aller
SFX aA ller llons/n' aller
SFX aA aller va aller
SFX aA aller vas-y aller
SFX aA aller va-t'en aller
SFX aA ller llons-y aller
SFX aA ller llons-nous-en aller
SFX aA ller llez/n' aller
SFX aA ller llez-y aller
SFX aA ller llez-vous-en aller
SFX aD Y 44
SFX aD voyer voyer/n'q'd'l'm't's' envoyer
SFX aD voyer voyant/n'q'l'm't's' envoyer
SFX aD voyer voyé/q' envoyer
SFX aD voyer voyés/q' envoyer
SFX aD voyer voyée/q' envoyer
SFX aD voyer voyées/q' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'q'l'm't' envoyer
SFX aD voyer voyons/n'q'l't' envoyer
SFX aD voyer voyez/n'q'l'm' envoyer
SFX aD voyer voient/n'q'l'm't's' envoyer
SFX aD voyer voyais/n'q'j'l'm't' envoyer
SFX aD voyer voyait/n'q'l'm't's' envoyer
SFX aD voyer voyions/n'q'l't' envoyer
SFX aD voyer voyiez/n'q'l'm' envoyer
SFX aD voyer voyaient/n'q'l'm't's' envoyer
SFX aD voyer voyai/n'q'j'l'm't' envoyer
SFX aD voyer voyas/n'q'l'm't' envoyer
SFX aD voyer voya/n'q'l'm't's' envoyer
SFX aD voyer voyâmes/n'q'l't' envoyer
SFX aD voyer voyâtes/n'q'l'm' envoyer
SFX aD voyer voyèrent/n'q'l'm't's' envoyer
SFX aD voyer verrai/n'q'j'l'm't' envoyer
SFX aD voyer verras/n'q'l'm't' envoyer
SFX aD voyer verra/n'q'l'm't's' envoyer
SFX aD voyer verrons/n'q'l't' envoyer
SFX aD voyer verrez/n'q'l'm' envoyer
SFX aD voyer verront/n'q'l'm't's' envoyer
SFX aD voyer verrais/n'q'j'l'm't' envoyer
SFX aD voyer verrait/n'q'l'm't's' envoyer
SFX aD voyer verrions/n'q'l't' envoyer
SFX aD voyer verriez/n'q'l'm' envoyer
SFX aD voyer verraient/n'q'l'm't's' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'l'm't' envoyer
SFX aD voyer voyasse/n'q'j'l'm't' envoyer
SFX aD voyer voyasses/n'q'l'm't' envoyer
SFX aD voyer voyât/n'q'l'm't's' envoyer
SFX aD voyer voyassions/n'q'l't' envoyer
SFX aD voyer voyassiez/n'q'l'm' envoyer
SFX aD voyer voyassent/n'q'l'm't's' envoyer
SFX aD voyer voie/n'l'm't' envoyer
SFX aD voyer voyons/n'l' envoyer
SFX aD voyer voyez/n'l'm' envoyer
SFX aE Y 6
SFX aE direr direr/n'q'd'l'm't's' direr
SFX aE direr dirant/n'q'l'm't's' direr
SFX aE direr diré/q' direr
SFX aE direr dirés/q' direr
SFX aE direr dirée/q' direr
SFX aE direr dirées/q' direr
SFX aF N 17
SFX aF cerner cernant er
SFX aF cerner cerné er
SFX aF cerner cernés er
SFX aF cerner cernée er
SFX aF cerner cernées er
SFX aF cerner cerne er
SFX aF cerner cernent er
SFX aF cerner cernait er
SFX aF cerner cernaient er
SFX aF cerner cerna er
SFX aF cerner cernèrent er
SFX aF cerner cernera er
SFX aF cerner cerneront er
SFX aF cerner cernerait er
SFX aF cerner cerneraient er
SFX aF cerner cernât er
SFX aF cerner cernassent er
SFX aG Y 19
SFX aG er er/n'q'd'm't' er
SFX aG er ant/n'q'm't' er
SFX aG mber mbé mber
SFX aG lter lté lter
SFX aG lter ltés lter
SFX aG lter ltée lter
SFX aG lter ltées lter
SFX aG er e/n'q'm't' er
SFX aG er ent/n'q'm't' er
SFX aG er ait/n'q'm't' er
SFX aG er aient/n'q'm't' er
SFX aG er a/n'q'm't' er
SFX aG er èrent/n'q'm't' er
SFX aG er era/n'q'm't' er
SFX aG er eront/n'q'm't' er
SFX aG er erait/n'q'm't' er
SFX aG er eraient/n'q'm't' er
SFX aG er ât/n'q'm't' er
SFX aG er assent/n'q'm't' er
SFX aH N 38
SFX aH er ant gger
SFX aH er é gger
SFX aH er e gger
SFX aH er es gger
SFX aH er ons gger
SFX aH er ez gger
SFX aH er ent gger
SFX aH er ais gger
SFX aH er ait gger
SFX aH er ions gger
SFX aH er iez gger
SFX aH er aient gger
SFX aH er ai gger
SFX aH er as gger
SFX aH er a gger
SFX aH er âmes gger
SFX aH er âtes gger
SFX aH er èrent gger
SFX aH er erai gger
SFX aH er eras gger
SFX aH er era gger
SFX aH er erons gger
SFX aH er erez gger
SFX aH er eront gger
SFX aH er erais gger
SFX aH er erait gger
SFX aH er erions gger
SFX aH er eriez gger
SFX aH er eraient gger
SFX aH er asse gger
SFX aH er asses gger
SFX aH er ât gger
SFX aH er assions gger
SFX aH er assiez gger
SFX aH er assent gger
SFX aH er e gger
SFX aH er ons gger
SFX aH er ez gger
SFX aY N 41
SFX aY neler nelant neler
SFX aY neler nelé neler
SFX aY neler nelés neler
SFX aY neler nelée neler
SFX aY neler nelées neler
SFX aY éneler énelle éneler
SFX aY éneler énelles éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aY éneler énellent éneler
SFX aY neler nelais neler
SFX aY neler nelait neler
SFX aY neler nelions neler
SFX aY neler neliez neler
SFX aY neler nelaient neler
SFX aY neler nelai neler
SFX aY neler nelas neler
SFX aY neler nela neler
SFX aY neler nelâmes neler
SFX aY neler nelâtes neler
SFX aY neler nelèrent neler
SFX aY éneler énellerai éneler
SFX aY éneler énelleras éneler
SFX aY éneler énellera éneler
SFX aY éneler énellerons éneler
SFX aY éneler énellerez éneler
SFX aY éneler énelleront éneler
SFX aY éneler énellerais éneler
SFX aY éneler énellerait éneler
SFX aY éneler énellerions éneler
SFX aY éneler énelleriez éneler
SFX aY éneler énelleraient éneler
SFX aY neler nelasse neler
SFX aY neler nelasses neler
SFX aY neler nelât neler
SFX aY neler nelassions neler
SFX aY neler nelassiez neler
SFX aY neler nelassent neler
SFX aY éneler énelle éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aZ N 41
SFX aZ teler telant teler
SFX aZ teler telé teler
SFX aZ teler telés teler
SFX aZ teler telée teler
SFX aZ teler telées teler
SFX aZ ételer ételle ételer
SFX aZ ételer ételles ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX aZ ételer étellent ételer
SFX aZ teler telais teler
SFX aZ teler telait teler
SFX aZ teler telions teler
SFX aZ teler teliez teler
SFX aZ teler telaient teler
SFX aZ teler telai teler
SFX aZ teler telas teler
SFX aZ teler tela teler
SFX aZ teler telâmes teler
SFX aZ teler telâtes teler
SFX aZ teler telèrent teler
SFX aZ ételer étellerai ételer
SFX aZ ételer ételleras ételer
SFX aZ ételer étellera ételer
SFX aZ ételer étellerons ételer
SFX aZ ételer étellerez ételer
SFX aZ ételer ételleront ételer
SFX aZ ételer étellerais ételer
SFX aZ ételer étellerait ételer
SFX aZ ételer étellerions ételer
SFX aZ ételer ételleriez ételer
SFX aZ ételer ételleraient ételer
SFX aZ teler telasse teler
SFX aZ teler telasses teler
SFX aZ teler telât teler
SFX aZ teler telassions teler
SFX aZ teler telassiez teler
SFX aZ teler telassent teler
SFX aZ ételer ételle ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX dA Y 42
SFX dA peler peler/n'q'd'l'm't's' peler
SFX dA peler pelant/n'q'l'm't's' peler
SFX dA peler pelé/q' peler
SFX dA peler pelés/q' peler
SFX dA peler pelée/q' peler
SFX dA peler pelées/q' peler
SFX dA peler pelle/n'q'j'l'm't's' peler
SFX dA peler pelles/n'q'l'm' peler
SFX dA peler pelons/n'q'l't' peler
SFX dA peler pelez/n'q'l'm' peler
SFX dA peler pellent/n'q'l'm't's' peler
SFX dA peler pelais/n'q'j'l't' peler
SFX dA peler pelait/n'q'l'm't's' peler
SFX dA peler pelions/n'q'l't' peler
SFX dA peler peliez/n'q'l'm' peler
SFX dA peler pelaient/n'q'l'm't's' peler
SFX dA peler pelai/n'q'j'l't' peler
SFX dA peler pelas/n'q'l'm' peler
SFX dA peler pela/n'q'l'm't's' peler
SFX dA peler pelâmes/n'q'l't' peler
SFX dA peler pelâtes/n'q'l'm' peler
SFX dA peler pelèrent/n'q'l'm't's' peler
SFX dA peler pellerai/n'q'j'l't' peler
SFX dA peler pelleras/n'q'l'm' peler
SFX dA peler pellera/n'q'l'm't's' peler
SFX dA peler pellerons/n'q'l't' peler
SFX dA peler pellerez/n'q'l'm' peler
SFX dA peler pelleront/n'q'l'm't's' peler
SFX dA peler pellerais/n'q'j'l't' peler
SFX dA peler pellerait/n'q'l'm't's' peler
SFX dA peler pellerions/n'q'l't' peler
SFX dA peler pelleriez/n'q'l'm' peler
SFX dA peler pelleraient/n'q'l'm't's' peler
SFX dA peler pelasse/n'q'j'l't' peler
SFX dA peler pelasses/n'q'l'm' peler
SFX dA peler pelât/n'q'l'm't's' peler
SFX dA peler pelassions/n'q'l't' peler
SFX dA peler pelassiez/n'q'l'm' peler
SFX dA peler pelassent/n'q'l'm't's' peler
SFX dA peler pelle/n'l'm' peler
SFX dA peler pelons/n'l' peler
SFX dA peler pelez/n'l'm' peler
SFX f0 Y 32
SFX f0 ir issant ir
SFX f0 ir is ir
SFX f0 ir it ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f0 ir issent ir
SFX f0 ir issais ir
SFX f0 ir issait ir
SFX f0 ir issions ir
SFX f0 ir issiez ir
SFX f0 ir issaient ir
SFX f0 ir îmes ir
SFX f0 ir îtes ir
SFX f0 ir irent ir
SFX f0 ir irai ir
SFX f0 ir iras ir
SFX f0 ir ira ir
SFX f0 ir irons ir
SFX f0 ir irez ir
SFX f0 ir iront ir
SFX f0 ir irais ir
SFX f0 ir irait ir
SFX f0 ir irions ir
SFX f0 ir iriez ir
SFX f0 ir iraient ir
SFX f0 ir isse ir
SFX f0 ir isses ir
SFX f0 ir isse ir
SFX f0 ir ît ir
SFX f0 ir is ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f1 Y 33
SFX f1 ir ir/n'q'd' ir
SFX f1 ir issant/n'q' ir
SFX f1 ir is/n'j' ir
SFX f1 ir it/n'q' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f1 ir issent/n'q' ir
SFX f1 ir issais/n'j' ir
SFX f1 ir issait/n'q' ir
SFX f1 ir issions/n' ir
SFX f1 ir issiez/n' ir
SFX f1 ir issaient/n'q' ir
SFX f1 ir îmes/n' ir
SFX f1 ir îtes/n' ir
SFX f1 ir irent/n'q' ir
SFX f1 ir irai/n'j' ir
SFX f1 ir iras/n' ir
SFX f1 ir ira/n'q' ir
SFX f1 ir irons/n' ir
SFX f1 ir irez/n' ir
SFX f1 ir iront/n'q' ir
SFX f1 ir irais/n'j' ir
SFX f1 ir irait/n'q' ir
SFX f1 ir irions/n' ir
SFX f1 ir iriez/n' ir
SFX f1 ir iraient/n'q' ir
SFX f1 ir isse/n'j' ir
SFX f1 ir isses/n' ir
SFX f1 ir isse/n'q' ir
SFX f1 ir ît/n'q' ir
SFX f1 ir is/n' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f2 Y 33
SFX f2 ir ir/n'q'd'l'm't's' ir
SFX f2 ir issant/n'q'l'm't's' ir
SFX f2 ir is/n'q'j'l't' ir
SFX f2 ir it/n'q'l'm't's' ir
SFX f2 ir issons/n'q'l't' ir
SFX f2 ir issez/n'q'l'm' ir
SFX f2 ir issent/n'q'l'm't's' ir
SFX f2 ir issais/n'q'j'l't' ir
SFX f2 ir issait/n'q'l'm't's' ir
SFX f2 ir issions/n'q'l't' ir
SFX f2 ir issiez/n'q'l'm' ir
SFX f2 ir issaient/n'q'l'm't's' ir
SFX f2 ir îmes/n'q'l't' ir
SFX f2 ir îtes/n'q'l'm' ir
SFX f2 ir irent/n'q'l'm't's' ir
SFX f2 ir irai/n'q'j'l't' ir
SFX f2 ir iras/n'q'l'm't' ir
SFX f2 ir ira/n'q'l'm't's' ir
SFX f2 ir irons/n'q'l't' ir
SFX f2 ir irez/n'q'l'm' ir
SFX f2 ir iront/n'q'l'm't's' ir
SFX f2 ir irais/n'q'j'l'm't' ir
SFX f2 ir irait/n'q'l'm't's' ir
SFX f2 ir irions/n'q'l't' ir
SFX f2 ir iriez/n'q'l'm' ir
SFX f2 ir iraient/n'q'l'm't's' ir
SFX f2 ir isse/n'q'j'l't' ir
SFX f2 ir isses/n'q'l'm' ir
SFX f2 ir isse/n'q'l'm't's' ir
SFX f2 ir ît/n'q'l'm't's' ir
SFX f2 ir is/n'l'm' ir
SFX f2 ir issons/n'l' ir
SFX f2 ir issez/n'l'm' ir
SFX f3 Y 33
SFX f3 ir ir/m't's' ir
SFX f3 ir issant/m't's' ir
SFX f3 ir is/m't' ir
SFX f3 ir it/s' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f3 ir issent/s' ir
SFX f3 ir issais/m't' ir
SFX f3 ir issait/s' ir
SFX f3 ir issions ir
SFX f3 ir issiez ir
SFX f3 ir issaient/s' ir
SFX f3 ir îmes ir
SFX f3 ir îtes ir
SFX f3 ir irent/s' ir
SFX f3 ir irai/m' ir
SFX f3 ir iras/t' ir
SFX f3 ir ira/s' ir
SFX f3 ir irons ir
SFX f3 ir irez ir
SFX f3 ir iront/s' ir
SFX f3 ir irais/m't' ir
SFX f3 ir irait/s' ir
SFX f3 ir irions ir
SFX f3 ir iriez ir
SFX f3 ir iraient/s' ir
SFX f3 ir isse/m' ir
SFX f3 ir isses/t' ir
SFX f3 ir isse/s' ir
SFX f3 ir ît/s' ir
SFX f3 ir is/t' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f4 Y 33
SFX f4 ir ir/n'q'd'l'm't's' ir
SFX f4 ir issant/n'q'l'm't's' ir
SFX f4 ir is/n'q'j'l'm't' ir
SFX f4 ir it/n'q'l'm't's' ir
SFX f4 ir issons/n'q'l't' ir
SFX f4 ir issez/n'q'l'm' ir
SFX f4 ir issent/n'q'l'm't's' ir
SFX f4 ir issais/n'q'j'l'm't' ir
SFX f4 ir issait/n'q'l'm't's' ir
SFX f4 ir issions/n'q'l't' ir
SFX f4 ir issiez/n'q'l'm' ir
SFX f4 ir issaient/n'q'l'm't's' ir
SFX f4 ir îmes/n'q'l't' ir
SFX f4 ir îtes/n'q'l'm' ir
SFX f4 ir irent/n'q'l'm't's' ir
SFX f4 ir irai/n'q'j'l'm't' ir
SFX f4 ir iras/n'q'l'm't' ir
SFX f4 ir ira/n'q'l'm't's' ir
SFX f4 ir irons/n'q'l't' ir
SFX f4 ir irez/n'q'l'm' ir
SFX f4 ir iront/n'q'l'm't's' ir
SFX f4 ir irais/n'q'j'l'm't' ir
SFX f4 ir irait/n'q'l'm't's' ir
SFX f4 ir irions/n'q'l't' ir
SFX f4 ir iriez/n'q'l'm' ir
SFX f4 ir iraient/n'q'l'm't's' ir
SFX f4 ir isse/n'q'j'l'm't' ir
SFX f4 ir isses/n'q'l'm't' ir
SFX f4 ir isse/n'q'l'm't's' ir
SFX f4 ir ît/n'q'l'm't's' ir
SFX f4 ir is/n'l'm't' ir
SFX f4 ir issons/n'l' ir
SFX f4 ir issez/n'l'm' ir
SFX f5 Y 33
SFX f5 ir ir/n'q'd'm't's' ir
SFX f5 ir issant/n'q'm't's' ir
SFX f5 ir is/n'j'm't' ir
SFX f5 ir it/n'q'm't's' ir
SFX f5 ir issons/n't' ir
SFX f5 ir issez/n'm' ir
SFX f5 ir issent/n'q'm't's' ir
SFX f5 ir issais/n'j'm't' ir
SFX f5 ir issait/n'q'm't's' ir
SFX f5 ir issions/n't' ir
SFX f5 ir issiez/n'm' ir
SFX f5 ir issaient/n'q'm't's' ir
SFX f5 ir îmes/n't' ir
SFX f5 ir îtes/n'm' ir
SFX f5 ir irent/n'q'm't's' ir
SFX f5 ir irai/n'j'm't' ir
SFX f5 ir iras/n'm't' ir
SFX f5 ir ira/n'q'm't's' ir
SFX f5 ir irons/n't' ir
SFX f5 ir irez/n'm' ir
SFX f5 ir iront/n'q'm't's' ir
SFX f5 ir irais/n'j'm't' ir
SFX f5 ir irait/n'q'm't's' ir
SFX f5 ir irions/n't' ir
SFX f5 ir iriez/n'm' ir
SFX f5 ir iraient/n'q'm't's' ir
SFX f5 ir isse/n'j'm't' ir
SFX f5 ir isses/n'm't' ir
SFX f5 ir isse/n'q'm't's' ir
SFX f5 ir ît/n'q'm't's' ir
SFX f5 ir is/n'm' ir
SFX f5 ir issons/n' ir
SFX f5 ir issez/n'm' ir
SFX fA N 37
SFX fA aïr aïssant aïr
SFX fA aïr aï aïr
SFX fA aïr aïs aïr
SFX fA aïr aïe aïr
SFX fA aïr aïes aïr
SFX fA aïr ais aïr
SFX fA aïr ait aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fA aïr aïssent aïr
SFX fA aïr aïssais aïr
SFX fA aïr aïssait aïr
SFX fA aïr aïssions aïr
SFX fA aïr aïssiez aïr
SFX fA aïr aïssaient aïr
SFX fA aïr aïs aïr
SFX fA aïr aït aïr
SFX fA aïr aïmes aïr
SFX fA aïr aïtes aïr
SFX fA aïr aïrent aïr
SFX fA aïr aïrai aïr
SFX fA aïr aïras aïr
SFX fA aïr aïra aïr
SFX fA aïr aïrons aïr
SFX fA aïr aïrez aïr
SFX fA aïr aïront aïr
SFX fA aïr aïrais aïr
SFX fA aïr aïrait aïr
SFX fA aïr aïrions aïr
SFX fA aïr aïriez aïr
SFX fA aïr aïraient aïr
SFX fA aïr aïsse aïr
SFX fA aïr aïsses aïr
SFX fA aïr aïsse aïr
SFX fA aïr ais aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fB Y 29
SFX fB haïr haïr/s' aïr
SFX fB haïr haïssant/s' aïr
SFX fB haïr haï aïr
SFX fB haïr haïs aïr
SFX fB haïr haïe aïr
SFX fB haïr haïes aïr
SFX fB haïr hait/s' aïr
SFX fB haïr haïssons aïr
SFX fB haïr haïssez aïr
SFX fB haïr haïssent/s' aïr
SFX fB haïr haïssait/s' aïr
SFX fB haïr haïssions aïr
SFX fB haïr haïssiez aïr
SFX fB haïr haïssaient/s' aïr
SFX fB haïr haït/s' aïr
SFX fB haïr haïmes aïr
SFX fB haïr haïtes aïr
SFX fB haïr haïrent/s' aïr
SFX fB haïr haïra/s' aïr
SFX fB haïr haïrons aïr
SFX fB haïr haïrez aïr
SFX fB haïr haïront/s' aïr
SFX fB haïr haïrait/s' aïr
SFX fB haïr haïrions aïr
SFX fB haïr haïriez aïr
SFX fB haïr haïraient/s' aïr
SFX fB haïr haïsse/s' aïr
SFX fB haïr haïssons-nous aïr
SFX fB haïr haïssez-vous aïr
SFX fC Y 11
SFX fC partir partir/n'q'd'l'm't's' impartir
SFX fC partir partissant/n'q'l'm't's' impartir
SFX fC partir parti/q' impartir
SFX fC partir partis/q' impartir
SFX fC partir partie/q' impartir
SFX fC partir parties/q' impartir
SFX fC partir partis/n'q'j'l'm't' impartir
SFX fC partir partit/n'q'l'm't's' impartir
SFX fC partir partissons/n'q'l't' impartir
SFX fC partir partissez/n'q'l'm' impartir
SFX fC partir partissent/n'q'l'm't's' impartir
SFX fD N 11
SFX fD ortir ortissant sortir
SFX fD ortir ortit sortir
SFX fD ortir ortissent sortir
SFX fD ortir ortissait sortir
SFX fD ortir ortissaient sortir
SFX fD ortir ortira sortir
SFX fD ortir ortiront sortir
SFX fD ortir ortirait sortir
SFX fD ortir ortiraient sortir
SFX fD ortir ortisse sortir
SFX fD ortir ortît sortir
SFX fY N 37
SFX fY uïr uïr/s' uïr
SFX fY uïr uïssant/m't's' uïr
SFX fY uïr uï uïr
SFX fY uïr uïs uïr
SFX fY uïr uïe uïr
SFX fY uïr uïes uïr
SFX fY uïr uïs/m't' uïr
SFX fY uïr uït/s' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fY uïr uïssent/s' uïr
SFX fY uïr uïssais/m't' uïr
SFX fY uïr uïssait/s' uïr
SFX fY uïr uïssions uïr
SFX fY uïr uïssiez uïr
SFX fY uïr uïssaient/s' uïr
SFX fY uïr uîmes uïr
SFX fY uïr uîtes uïr
SFX fY uïr uïrent/s' uïr
SFX fY uïr uïrai/m' uïr
SFX fY uïr uïras/t' uïr
SFX fY uïr uïra/s' uïr
SFX fY uïr uïrons uïr
SFX fY uïr uïrez uïr
SFX fY uïr uïront/s' uïr
SFX fY uïr uïrais/m't' uïr
SFX fY uïr uïrait/s' uïr
SFX fY uïr uïrions uïr
SFX fY uïr uïriez uïr
SFX fY uïr uïraient/s' uïr
SFX fY uïr uïsse/m' uïr
SFX fY uïr uïsses/t' uïr
SFX fY uïr uïsse/s' uïr
SFX fY uïr uît/s' uïr
SFX fY uïr uïs/t' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fZ N 7
SFX fZ gir gissant agir
SFX fZ gir git agir
SFX fZ gir gissait agir
SFX fZ gir gira agir
SFX fZ gir girait agir
SFX fZ gir gisse agir
SFX fZ gir gît agir
SFX p+ Y 8
SFX p+ er é/L'D'Q' er
SFX p+ er és/D'Q' er
SFX p+ er ée/L'D'Q' er
SFX p+ er ées/D'Q' er
SFX p+ ir i/L'D'Q' ir
SFX p+ ir is/D'Q' ir
SFX p+ ir ie/L'D'Q' ir
SFX p+ ir ies/D'Q' ir
SFX p. Y 2
SFX p. er é/q' er
SFX p. ir i/q' ir
SFX i0 Y 39
SFX i0 enir enir/n'q'd' enir
SFX i0 enir enant/n'q' enir
SFX i0 enir iens/n'j' enir
SFX i0 enir ient/n'q' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i0 enir iennent/n'q' enir
SFX i0 enir enais/n'j' enir
SFX i0 enir enait/n'q' enir
SFX i0 enir enions/n' enir
SFX i0 enir eniez/n' enir
SFX i0 enir enaient/n'q' enir
SFX i0 enir ins/n'j' enir
SFX i0 enir int/n'q' enir
SFX i0 enir înmes/n' enir
SFX i0 enir întes/n' enir
SFX i0 enir inrent/n'q' enir
SFX i0 enir iendrai/n'j' enir
SFX i0 enir iendras/n' enir
SFX i0 enir iendra/n'q' enir
SFX i0 enir iendrons/n' enir
SFX i0 enir iendrez/n' enir
SFX i0 enir iendront/n'q' enir
SFX i0 enir iendrais/n'j' enir
SFX i0 enir iendrait/n'q' enir
SFX i0 enir iendrions/n' enir
SFX i0 enir iendriez/n' enir
SFX i0 enir iendraient/n'q' enir
SFX i0 enir ienne/n'q'j' enir
SFX i0 enir iennes/n' enir
SFX i0 enir insse/n'j' enir
SFX i0 enir insses/n' enir
SFX i0 enir înt/n'q' enir
SFX i0 enir inssions/n' enir
SFX i0 enir inssiez/n' enir
SFX i0 enir inssent/n'q' enir
SFX i0 enir iens/n' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i1 Y 39
SFX i1 enir enir/n'q'd'l'm't's' enir
SFX i1 enir enant/n'q'l'm't's' enir
SFX i1 enir iens/n'q'j'l'm't' enir
SFX i1 enir ient/n'q'l'm't's' enir
SFX i1 enir enons/n'q'l't' enir
SFX i1 enir enez/n'q'l'm' enir
SFX i1 enir iennent/n'q'l'm't's' enir
SFX i1 enir enais/n'q'j'l'm't' enir
SFX i1 enir enait/n'q'l'm't's' enir
SFX i1 enir enions/n'q'l't' enir
SFX i1 enir eniez/n'q'l'm' enir
SFX i1 enir enaient/n'q'l'm't's' enir
SFX i1 enir ins/n'q'j'l'm't' enir
SFX i1 enir int/n'q'l'm't's' enir
SFX i1 enir înmes/n'q'l't' enir
SFX i1 enir întes/n'q'l'm' enir
SFX i1 enir inrent/n'q'l'm't's' enir
SFX i1 enir iendrai/n'q'j'l'm't' enir
SFX i1 enir iendras/n'q'l'm't' enir
SFX i1 enir iendra/n'q'l'm't's' enir
SFX i1 enir iendrons/n'q'l't' enir
SFX i1 enir iendrez/n'q'l'm' enir
SFX i1 enir iendront/n'q'l'm't's' enir
SFX i1 enir iendrais/n'q'j'l'm't' enir
SFX i1 enir iendrait/n'q'l'm't's' enir
SFX i1 enir iendrions/n'q'l't' enir
SFX i1 enir iendriez/n'q'l'm' enir
SFX i1 enir iendraient/n'q'l'm't's' enir
SFX i1 enir ienne/n'q'j'l'm't's' enir
SFX i1 enir iennes/n'l'm't' enir
SFX i1 enir insse/n'q'j'l'm't' enir
SFX i1 enir insses/n'q'l'm't' enir
SFX i1 enir înt/n'q'l'm't's' enir
SFX i1 enir inssions/n'q'l't' enir
SFX i1 enir inssiez/n'q'l'm' enir
SFX i1 enir inssent/n'q'l'm't's' enir
SFX i1 enir iens/n'l'm't' enir
SFX i1 enir enons/n'l' enir
SFX i1 enir enez/n'l'm' enir
SFX i2 Y 39
SFX i2 enir enir/m't's' enir
SFX i2 enir enant/m't's' enir
SFX i2 enir iens/m't' enir
SFX i2 enir ient/s' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i2 enir iennent/s' enir
SFX i2 enir enais/m't' enir
SFX i2 enir enait/s' enir
SFX i2 enir enions enir
SFX i2 enir eniez enir
SFX i2 enir enaient/s' enir
SFX i2 enir ins/m't' enir
SFX i2 enir int/s' enir
SFX i2 enir înmes enir
SFX i2 enir întes enir
SFX i2 enir inrent/s' enir
SFX i2 enir iendrai/m' enir
SFX i2 enir iendras/t' enir
SFX i2 enir iendra/s' enir
SFX i2 enir iendrons enir
SFX i2 enir iendrez enir
SFX i2 enir iendront/s' enir
SFX i2 enir iendrais/m't' enir
SFX i2 enir iendrait/s' enir
SFX i2 enir iendrions enir
SFX i2 enir iendriez enir
SFX i2 enir iendraient/s' enir
SFX i2 enir ienne/m's' enir
SFX i2 enir iennes/t' enir
SFX i2 enir insse/m' enir
SFX i2 enir insses/t' enir
SFX i2 enir înt/s' enir
SFX i2 enir inssions enir
SFX i2 enir inssiez enir
SFX i2 enir inssent/s' enir
SFX i2 enir iens/t' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i5 N 38
SFX i5 tir tant tir
SFX i5 tir s tir
SFX i5 tir t tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX i5 tir tent tir
SFX i5 tir tais tir
SFX i5 tir tait tir
SFX i5 tir tions tir
SFX i5 tir tiez tir
SFX i5 tir taient tir
SFX i5 tir tis tir
SFX i5 tir tit tir
SFX i5 tir tîmes tir
SFX i5 tir tîtes tir
SFX i5 tir tirent tir
SFX i5 tir tirai tir
SFX i5 tir tiras tir
SFX i5 tir tira tir
SFX i5 tir tirons tir
SFX i5 tir tirez tir
SFX i5 tir tiront tir
SFX i5 tir tirais tir
SFX i5 tir tirait tir
SFX i5 tir tirions tir
SFX i5 tir tiriez tir
SFX i5 tir tiraient tir
SFX i5 tir te tir
SFX i5 tir tes tir
SFX i5 tir tisse tir
SFX i5 tir tisses tir
SFX i5 tir tît tir
SFX i5 tir tissions tir
SFX i5 tir tissiez tir
SFX i5 tir tissent tir
SFX i5 tir s tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX iA Y 19
SFX iA dvenir dvenir/n'q'd'm't' venir
SFX iA dvenir dvenant/n'q'm't' venir
SFX iA dvenir dvenu/Q' venir
SFX iA dvenir dvenus/Q' venir
SFX iA dvenir dvenue/Q' venir
SFX iA dvenir dvenues/Q' venir
SFX iA dvenir dvient/n'q'm't' venir
SFX iA dvenir dviennent/n'q' venir
SFX iA dvenir dvenait/n'q'm't' venir
SFX iA dvenir dvenaient/n'q' venir
SFX iA dvenir dvint/n'q'm't' venir
SFX iA dvenir dvinrent/n'q' venir
SFX iA dvenir dviendra/n'q'm't' venir
SFX iA dvenir dviendront/n'q' venir
SFX iA dvenir dviendrait/n'q'm't' venir
SFX iA dvenir dviendraient/n'q' venir
SFX iA dvenir dvienne/n'q'm't' venir
SFX iA dvenir dvînt/n'q'm't' venir
SFX iA dvenir dvinssent/n'q' venir
SFX iB Y 40
SFX iB partenir partenir/n'q'd'm't's' tenir
SFX iB partenir partenant/n'q'm't's' tenir
SFX iB partenir partenu/q' tenir
SFX iB partenir partiens/n'j'm't' tenir
SFX iB partenir partient/n'q'm't's' tenir
SFX iB partenir partenons/n't' tenir
SFX iB partenir partenez/n'm' tenir
SFX iB partenir partiennent/n'q'm't's' tenir
SFX iB partenir partenais/n'j'm't' tenir
SFX iB partenir partenait/n'q'm't's' tenir
SFX iB partenir partenions/n't' tenir
SFX iB partenir parteniez/n'm' tenir
SFX iB partenir partenaient/n'q'm't's' tenir
SFX iB partenir partins/n'j'm't' tenir
SFX iB partenir partint/n'q'm't's' tenir
SFX iB partenir partînmes/n't' tenir
SFX iB partenir partîntes/n'm' tenir
SFX iB partenir partinrent/n'q'm't's' tenir
SFX iB partenir partiendrai/n'j'm't' tenir
SFX iB partenir partiendras/n'm't' tenir
SFX iB partenir partiendra/n'q'm't's' tenir
SFX iB partenir partiendrons/n't' tenir
SFX iB partenir partiendrez/n'm' tenir
SFX iB partenir partiendront/n'q'm't's' tenir
SFX iB partenir partiendrais/n'j'm't' tenir
SFX iB partenir partiendrait/n'q'm't's' tenir
SFX iB partenir partiendrions/n't' tenir
SFX iB partenir partiendriez/n'm' tenir
SFX iB partenir partiendraient/n'q'm't's' tenir
SFX iB partenir partienne/n'q'j'm't's' tenir
SFX iB partenir partiennes/n'm't' tenir
SFX iB partenir partinsse/n'j'm't' tenir
SFX iB partenir partinsses/n'm't' tenir
SFX iB partenir partînt/n'q'm't's' tenir
SFX iB partenir partinssions/n't' tenir
SFX iB partenir partinssiez/n'm' tenir
SFX iB partenir partinssent/n'q'm't's' tenir
SFX iB partenir partiens/n'm't' tenir
SFX iB partenir partenons/n' tenir
SFX iB partenir partenez/n'm' tenir
SFX iC Y 41
SFX iC rir rir/n'q'd'l'm't's' [vf]rir
SFX iC rir rant/n'q'l'm't's' [vf]rir
SFX iC rir ert/L'D'Q' [vf]rir
SFX iC rir erts/D'Q' [vf]rir
SFX iC rir erte/L'D'Q' [vf]rir
SFX iC rir ertes/D'Q' [vf]rir
SFX iC rir re/n'q'j'l'm't's' [vf]rir
SFX iC rir res/n'q'l'm't' [vf]rir
SFX iC rir rons/n'q'l't' [vf]rir
SFX iC rir rez/n'q'l'm' [vf]rir
SFX iC rir rent/n'q'l'm't's' [vf]rir
SFX iC rir rais/n'q'j'l'm't' [vf]rir
SFX iC rir rait/n'q'l'm't's' [vf]rir
SFX iC rir rions/n'q'l't' [vf]rir
SFX iC rir riez/n'q'l'm' [vf]rir
SFX iC rir raient/n'q'l'm't's' [vf]rir
SFX iC rir ris/n'q'j'l'm't' [vf]rir
SFX iC rir rit/n'q'l'm't's' [vf]rir
SFX iC rir rîmes/n'q'l't' [vf]rir
SFX iC rir rîtes/n'q'l'm' [vf]rir
SFX iC rir rirent/n'q'l'm't's' [vf]rir
SFX iC rir rirai/n'q'j'l'm't' [vf]rir
SFX iC rir riras/n'q'l'm't' [vf]rir
SFX iC rir rira/n'q'l'm't's' [vf]rir
SFX iC rir rirons/n'q'l't' [vf]rir
SFX iC rir rirez/n'q'l'm' [vf]rir
SFX iC rir riront/n'q'l'm't's' [vf]rir
SFX iC rir rirais/n'q'j'l'm't' [vf]rir
SFX iC rir rirait/n'q'l'm't's' [vf]rir
SFX iC rir ririons/n'q'l't' [vf]rir
SFX iC rir ririez/n'q'l'm' [vf]rir
SFX iC rir riraient/n'q'l'm't's' [vf]rir
SFX iC rir risse/n'q'j'l'm't' [vf]rir
SFX iC rir risses/n'q'l'm't' [vf]rir
SFX iC rir rît/n'q'l'm't's' [vf]rir
SFX iC rir rissions/n'q'l't' [vf]rir
SFX iC rir rissiez/n'q'l'm' [vf]rir
SFX iC rir rissent/n'q'l'm't's' [vf]rir
SFX iC rir re/n'l'm't' [vf]rir
SFX iC rir rons/n'l' [vf]rir
SFX iC rir rez/n'l'm' [vf]rir
SFX iD Y 43
SFX iD courir courir/n'q'd' courir
SFX iD courir courant/n'q' courir
SFX iD courir couru courir
SFX iD courir courus courir
SFX iD courir courue courir
SFX iD courir courues courir
SFX iD courir cours/n'j' courir
SFX iD courir court/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iD courir courent/n' courir
SFX iD courir courais/n'j' courir
SFX iD courir courait/n' courir
SFX iD courir courions/n' courir
SFX iD courir couriez/n' courir
SFX iD courir couraient/n' courir
SFX iD courir courus/n'j' courir
SFX iD courir courut/n' courir
SFX iD courir courûmes/n' courir
SFX iD courir courûtes/n' courir
SFX iD courir coururent/n' courir
SFX iD courir courrai/n'j' courir
SFX iD courir courras/n' courir
SFX iD courir courra/n' courir
SFX iD courir courrons/n' courir
SFX iD courir courrez/n' courir
SFX iD courir courront/n' courir
SFX iD courir courrais/n'j' courir
SFX iD courir courrait/n' courir
SFX iD courir courrions/n' courir
SFX iD courir courriez/n' courir
SFX iD courir courraient/n' courir
SFX iD courir coure/n'j' courir
SFX iD courir coures/n' courir
SFX iD courir courusse/n'j' courir
SFX iD courir courusses/n' courir
SFX iD courir courût/n' courir
SFX iD courir courussions/n' courir
SFX iD courir courussiez/n' courir
SFX iD courir courussent/n' courir
SFX iD courir cours/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iE Y 43
SFX iE ourir ourir/n'q'd'l'm't's' courir
SFX iE ourir ourant/n'q'm't's' courir
SFX iE ourir ouru/L'D'Q' courir
SFX iE ourir ourus/D'Q' courir
SFX iE ourir ourue/L'D'Q' courir
SFX iE ourir ourues/D'Q' courir
SFX iE ourir ours/n'q'j'l'm't' courir
SFX iE ourir ourt/n'q'l's' courir
SFX iE ourir ourons/n'q'l' courir
SFX iE ourir ourez/n'q'l' courir
SFX iE ourir ourent/n'q'l's' courir
SFX iE ourir ourais/n'q'j'l'm't' courir
SFX iE ourir ourait/n'q'l's' courir
SFX iE ourir ourions/n'q'l' courir
SFX iE ourir ouriez/n'q'l' courir
SFX iE ourir ouraient/n'q'l's' courir
SFX iE ourir ourus/n'q'j'l'm't' courir
SFX iE ourir ourut/n'q'l's' courir
SFX iE ourir ourûmes/n'q'l' courir
SFX iE ourir ourûtes/n'q'l' courir
SFX iE ourir oururent/n'q'l's' courir
SFX iE ourir ourrai/n'q'j'l'm' courir
SFX iE ourir ourras/n'q'l't' courir
SFX iE ourir ourra/n'q'l's' courir
SFX iE ourir ourrons/n'q'l' courir
SFX iE ourir ourrez/n'q'l' courir
SFX iE ourir ourront/n'q'l's' courir
SFX iE ourir ourrais/n'q'j'l'm't' courir
SFX iE ourir ourrait/n'q'l's' courir
SFX iE ourir ourrions/n'q'l' courir
SFX iE ourir ourriez/n'q'l' courir
SFX iE ourir ourraient/n'q'l's' courir
SFX iE ourir oure/n'q'j'l'm's' courir
SFX iE ourir oures/n'l't' courir
SFX iE ourir ourusse/n'q'j'l'm' courir
SFX iE ourir ourusses/n'q'l't' courir
SFX iE ourir ourût/n'q'l's' courir
SFX iE ourir ourussions/n'q'l' courir
SFX iE ourir ourussiez/n'q'l' courir
SFX iE ourir ourussent/n'q'l's' courir
SFX iE ourir ours/n'l' courir
SFX iE ourir ourons/n'l' courir
SFX iE ourir ourez/n'l' courir
SFX iF N 42
SFX iF ervir ervant servir
SFX iF ervir ervi servir
SFX iF ervir ervis servir
SFX iF ervir ervie servir
SFX iF ervir ervies servir
SFX iF ervir ers servir
SFX iF ervir ert servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iF ervir ervent servir
SFX iF ervir ervais servir
SFX iF ervir ervait servir
SFX iF ervir ervions servir
SFX iF ervir erviez servir
SFX iF ervir ervaient servir
SFX iF ervir ervis servir
SFX iF ervir ervit servir
SFX iF ervir ervîmes servir
SFX iF ervir ervîtes servir
SFX iF ervir ervirent servir
SFX iF ervir ervirai servir
SFX iF ervir erviras servir
SFX iF ervir ervira servir
SFX iF ervir ervirons servir
SFX iF ervir ervirez servir
SFX iF ervir erviront servir
SFX iF ervir ervirais servir
SFX iF ervir ervirait servir
SFX iF ervir ervirions servir
SFX iF ervir erviriez servir
SFX iF ervir erviraient servir
SFX iF ervir erve servir
SFX iF ervir erves servir
SFX iF ervir ervisse servir
SFX iF ervir ervisses servir
SFX iF ervir ervît servir
SFX iF ervir ervissions servir
SFX iF ervir ervissiez servir
SFX iF ervir ervissent servir
SFX iF ervir ers servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iG N 42
SFX iG êtir êtant vêtir
SFX iG êtir êtu vêtir
SFX iG êtir êtus vêtir
SFX iG êtir êtue vêtir
SFX iG êtir êtues vêtir
SFX iG êtir êts vêtir
SFX iG êtir êt vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iG êtir êtent vêtir
SFX iG êtir êtais vêtir
SFX iG êtir êtait vêtir
SFX iG êtir êtions vêtir
SFX iG êtir êtiez vêtir
SFX iG êtir êtaient vêtir
SFX iG êtir êtis vêtir
SFX iG êtir êtit vêtir
SFX iG êtir êtîmes vêtir
SFX iG êtir êtîtes vêtir
SFX iG êtir êtirent vêtir
SFX iG êtir êtirai vêtir
SFX iG êtir êtiras vêtir
SFX iG êtir êtira vêtir
SFX iG êtir êtirons vêtir
SFX iG êtir êtirez vêtir
SFX iG êtir êtiront vêtir
SFX iG êtir êtirais vêtir
SFX iG êtir êtirait vêtir
SFX iG êtir êtirions vêtir
SFX iG êtir êtiriez vêtir
SFX iG êtir êtiraient vêtir
SFX iG êtir ête vêtir
SFX iG êtir êtes vêtir
SFX iG êtir êtisse vêtir
SFX iG êtir êtisses vêtir
SFX iG êtir êtît vêtir
SFX iG êtir êtissions vêtir
SFX iG êtir êtissiez vêtir
SFX iG êtir êtissent vêtir
SFX iG êtir êts vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iI N 39
SFX iI ormir ormant dormir
SFX iI ormir ormi dormir
SFX iI ormir ors dormir
SFX iI ormir ort dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iI ormir orment dormir
SFX iI ormir ormais dormir
SFX iI ormir ormait dormir
SFX iI ormir ormions dormir
SFX iI ormir ormiez dormir
SFX iI ormir ormaient dormir
SFX iI ormir ormis dormir
SFX iI ormir ormit dormir
SFX iI ormir ormîmes dormir
SFX iI ormir ormîtes dormir
SFX iI ormir ormirent dormir
SFX iI ormir ormirai dormir
SFX iI ormir ormiras dormir
SFX iI ormir ormira dormir
SFX iI ormir ormirons dormir
SFX iI ormir ormirez dormir
SFX iI ormir ormiront dormir
SFX iI ormir ormirais dormir
SFX iI ormir ormirait dormir
SFX iI ormir ormirions dormir
SFX iI ormir ormiriez dormir
SFX iI ormir ormiraient dormir
SFX iI ormir orme dormir
SFX iI ormir ormes dormir
SFX iI ormir ormisse dormir
SFX iI ormir ormisses dormir
SFX iI ormir ormît dormir
SFX iI ormir ormissions dormir
SFX iI ormir ormissiez dormir
SFX iI ormir ormissent dormir
SFX iI ormir ors dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iJ Y 43
SFX iJ dormir dormir/n'q'd'l'm't's' dormir
SFX iJ dormir dormant/n'q'l'm't's' dormir
SFX iJ dormir dormi/L'D'Q' dormir
SFX iJ dormir dormis/D'Q' dormir
SFX iJ dormir dormie/L'D'Q' dormir
SFX iJ dormir dormies/D'Q' dormir
SFX iJ dormir dors/n'q'j'l'm't' dormir
SFX iJ dormir dort/n'q'l'm't's' dormir
SFX iJ dormir dormons/n'q'l't' dormir
SFX iJ dormir dormez/n'q'l'm' dormir
SFX iJ dormir dorment/n'q'l'm't's' dormir
SFX iJ dormir dormais/n'q'j'l'm't' dormir
SFX iJ dormir dormait/n'q'l'm't's' dormir
SFX iJ dormir dormions/n'q'l't' dormir
SFX iJ dormir dormiez/n'q'l'm' dormir
SFX iJ dormir dormaient/n'q'l'm't's' dormir
SFX iJ dormir dormis/n'q'j'l'm't' dormir
SFX iJ dormir dormit/n'q'l'm't's' dormir
SFX iJ dormir dormîmes/n'q'l't' dormir
SFX iJ dormir dormîtes/n'q'l'm' dormir
SFX iJ dormir dormirent/n'q'l'm't's' dormir
SFX iJ dormir dormirai/n'q'j'l'm't' dormir
SFX iJ dormir dormiras/n'q'l'm't' dormir
SFX iJ dormir dormira/n'q'l'm't's' dormir
SFX iJ dormir dormirons/n'q'l't' dormir
SFX iJ dormir dormirez/n'q'l'm' dormir
SFX iJ dormir dormiront/n'q'l'm't's' dormir
SFX iJ dormir dormirais/n'q'j'l'm't' dormir
SFX iJ dormir dormirait/n'q'l'm't's' dormir
SFX iJ dormir dormirions/n'q'l't' dormir
SFX iJ dormir dormiriez/n'q'l'm' dormir
SFX iJ dormir dormiraient/n'q'l'm't's' dormir
SFX iJ dormir dorme/n'q'j'l'm't's' dormir
SFX iJ dormir dormes/n'l'm't' dormir
SFX iJ dormir dormisse/n'q'j'l'm't' dormir
SFX iJ dormir dormisses/n'q'l'm't' dormir
SFX iJ dormir dormît/n'q'l'm't's' dormir
SFX iJ dormir dormissions/n'q'l't' dormir
SFX iJ dormir dormissiez/n'q'l'm' dormir
SFX iJ dormir dormissent/n'q'l'm't's' dormir
SFX iJ dormir dors/n'l'm't' dormir
SFX iJ dormir dormons/n'l' dormir
SFX iJ dormir dormez/n'l'm' dormir
SFX iK Y 42
SFX iK quérir quérir/n'q'd'l'm't's' quérir
SFX iK quérir quérant/n'q'l'm't's' quérir
SFX iK quérir quis/L'D'Q' quérir
SFX iK quérir quise/L'D'Q' quérir
SFX iK quérir quises/D'Q' quérir
SFX iK quérir quiers/n'q'j'l'm't' quérir
SFX iK quérir quiert/n'q'l'm't's' quérir
SFX iK quérir quérons/n'q'l't' quérir
SFX iK quérir quérez/n'q'l'm' quérir
SFX iK quérir quièrent/n'q'l'm't's' quérir
SFX iK quérir quérais/n'q'j'l'm't' quérir
SFX iK quérir quérait/n'q'l'm't's' quérir
SFX iK quérir quérions/n'q'l't' quérir
SFX iK quérir quériez/n'q'l'm' quérir
SFX iK quérir quéraient/n'q'l'm't's' quérir
SFX iK quérir quis/n'q'j'l'm't' quérir
SFX iK quérir quit/n'q'l'm't's' quérir
SFX iK quérir quîmes/n'q'l't' quérir
SFX iK quérir quîtes/n'q'l'm' quérir
SFX iK quérir quirent/n'q'l'm't's' quérir
SFX iK quérir querrai/n'q'j'l'm't' quérir
SFX iK quérir querras/n'q'l'm't' quérir
SFX iK quérir querra/n'q'l'm't's' quérir
SFX iK quérir querrons/n'q'l't' quérir
SFX iK quérir querrez/n'q'l'm' quérir
SFX iK quérir querront/n'q'l'm't's' quérir
SFX iK quérir querrais/n'q'j'l'm't' quérir
SFX iK quérir querrait/n'q'l'm't's' quérir
SFX iK quérir querrions/n'q'l't' quérir
SFX iK quérir querriez/n'q'l'm' quérir
SFX iK quérir querraient/n'q'l'm't's' quérir
SFX iK quérir quière/n'q'j'l'm't's' quérir
SFX iK quérir quières/n'l'm't' quérir
SFX iK quérir quisse/n'q'j'l'm't' quérir
SFX iK quérir quisses/n'q'l'm't' quérir
SFX iK quérir quît/n'q'l'm't's' quérir
SFX iK quérir quissions/n'q'l't' quérir
SFX iK quérir quissiez/n'q'l'm' quérir
SFX iK quérir quissent/n'q'l'm't's' quérir
SFX iK quérir quiers/n'l'm't' quérir
SFX iK quérir quérons/n'l' quérir
SFX iK quérir quérez/n'l'm' quérir
SFX iM Y 42
SFX iM quérir quérir/m't's' quérir
SFX iM quérir quérant/m't's' quérir
SFX iM quérir quis/L'D'Q' quérir
SFX iM quérir quise/L'D'Q' quérir
SFX iM quérir quises/D'Q' quérir
SFX iM quérir quiers/m't' quérir
SFX iM quérir quiert/s' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iM quérir quièrent/s' quérir
SFX iM quérir quérais/m't' quérir
SFX iM quérir quérait/s' quérir
SFX iM quérir quérions quérir
SFX iM quérir quériez quérir
SFX iM quérir quéraient/s' quérir
SFX iM quérir quis/m't' quérir
SFX iM quérir quit/s' quérir
SFX iM quérir quîmes quérir
SFX iM quérir quîtes quérir
SFX iM quérir quirent/s' quérir
SFX iM quérir querrai/m' quérir
SFX iM quérir querras/t' quérir
SFX iM quérir querra/s' quérir
SFX iM quérir querrons quérir
SFX iM quérir querrez quérir
SFX iM quérir querront/s' quérir
SFX iM quérir querrais/m't' quérir
SFX iM quérir querrait/s' quérir
SFX iM quérir querrions quérir
SFX iM quérir querriez quérir
SFX iM quérir querraient/s' quérir
SFX iM quérir quière/m's' quérir
SFX iM quérir quières/t' quérir
SFX iM quérir quisse/m' quérir
SFX iM quérir quisses/t' quérir
SFX iM quérir quît/s' quérir
SFX iM quérir quissions quérir
SFX iM quérir quissiez quérir
SFX iM quérir quissent/s' quérir
SFX iM quérir quiers/t' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iN N 40
SFX iN uir uyant fuir
SFX iN uir ui fuir
SFX iN uir uis fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uis fuir
SFX iN uir uit fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iN uir uient fuir
SFX iN uir uyais fuir
SFX iN uir uyait fuir
SFX iN uir uyions fuir
SFX iN uir uyiez fuir
SFX iN uir uyaient fuir
SFX iN uir uîmes fuir
SFX iN uir uîtes fuir
SFX iN uir uirent fuir
SFX iN uir uirai fuir
SFX iN uir uiras fuir
SFX iN uir uira fuir
SFX iN uir uirons fuir
SFX iN uir uirez fuir
SFX iN uir uiront fuir
SFX iN uir uirais fuir
SFX iN uir uirait fuir
SFX iN uir uirions fuir
SFX iN uir uiriez fuir
SFX iN uir uiraient fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uisse fuir
SFX iN uir uisses fuir
SFX iN uir uît fuir
SFX iN uir uissions fuir
SFX iN uir uissiez fuir
SFX iN uir uissent fuir
SFX iN uir uis fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iO Y 41
SFX iO fuir fuir/m't's' enfuir
SFX iO fuir fuyant/m't's' enfuir
SFX iO fuir fui/L'D'Q' enfuir
SFX iO fuir fuis/D'Q' enfuir
SFX iO fuir fuie/L'D'Q' enfuir
SFX iO fuir fuies/D'Q' enfuir
SFX iO fuir fuis/m't' enfuir
SFX iO fuir fuit/s' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iO fuir fuient/s' enfuir
SFX iO fuir fuyais/m't' enfuir
SFX iO fuir fuyait/s' enfuir
SFX iO fuir fuyions enfuir
SFX iO fuir fuyiez enfuir
SFX iO fuir fuyaient/s' enfuir
SFX iO fuir fuîmes enfuir
SFX iO fuir fuîtes enfuir
SFX iO fuir fuirent/s' enfuir
SFX iO fuir fuirai/m' enfuir
SFX iO fuir fuiras/t' enfuir
SFX iO fuir fuira/s' enfuir
SFX iO fuir fuirons enfuir
SFX iO fuir fuirez enfuir
SFX iO fuir fuiront/s' enfuir
SFX iO fuir fuirais/m't' enfuir
SFX iO fuir fuirait/s' enfuir
SFX iO fuir fuirions enfuir
SFX iO fuir fuiriez enfuir
SFX iO fuir fuiraient/s' enfuir
SFX iO fuir fuie/m's' enfuir
SFX iO fuir fuies/t' enfuir
SFX iO fuir fuisse/m' enfuir
SFX iO fuir fuisses/t' enfuir
SFX iO fuir fuît/s' enfuir
SFX iO fuir fuissions enfuir
SFX iO fuir fuissiez enfuir
SFX iO fuir fuissent/s' enfuir
SFX iO fuir fuis/t' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iP N 42
SFX iP ourir ourant mourir
SFX iP ourir ort mourir
SFX iP ourir orts mourir
SFX iP ourir orte mourir
SFX iP ourir ortes mourir
SFX iP ourir eurs mourir
SFX iP ourir eurt mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iP ourir eurent mourir
SFX iP ourir ourais mourir
SFX iP ourir ourait mourir
SFX iP ourir ourions mourir
SFX iP ourir ouriez mourir
SFX iP ourir ouraient mourir
SFX iP ourir ourus mourir
SFX iP ourir ourut mourir
SFX iP ourir ourûmes mourir
SFX iP ourir ourûtes mourir
SFX iP ourir oururent mourir
SFX iP ourir ourrai mourir
SFX iP ourir ourras mourir
SFX iP ourir ourra mourir
SFX iP ourir ourrons mourir
SFX iP ourir ourrez mourir
SFX iP ourir ourront mourir
SFX iP ourir ourrais mourir
SFX iP ourir ourrait mourir
SFX iP ourir ourrions mourir
SFX iP ourir ourriez mourir
SFX iP ourir ourraient mourir
SFX iP ourir eure mourir
SFX iP ourir eures mourir
SFX iP ourir ourusse mourir
SFX iP ourir ourusses mourir
SFX iP ourir ourût mourir
SFX iP ourir ourussions mourir
SFX iP ourir ourussiez mourir
SFX iP ourir ourussent mourir
SFX iP ourir eurs mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iQ N 42
SFX iQ ouillir ouillant bouillir
SFX iQ ouillir ouilli bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillie bouillir
SFX iQ ouillir ouillies bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir out bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iQ ouillir ouillent bouillir
SFX iQ ouillir ouillais bouillir
SFX iQ ouillir ouillait bouillir
SFX iQ ouillir ouillions bouillir
SFX iQ ouillir ouilliez bouillir
SFX iQ ouillir ouillaient bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillit bouillir
SFX iQ ouillir ouillîmes bouillir
SFX iQ ouillir ouillîtes bouillir
SFX iQ ouillir ouillirent bouillir
SFX iQ ouillir ouillirai bouillir
SFX iQ ouillir ouilliras bouillir
SFX iQ ouillir ouillira bouillir
SFX iQ ouillir ouillirons bouillir
SFX iQ ouillir ouillirez bouillir
SFX iQ ouillir ouilliront bouillir
SFX iQ ouillir ouillirais bouillir
SFX iQ ouillir ouillirait bouillir
SFX iQ ouillir ouillirions bouillir
SFX iQ ouillir ouilliriez bouillir
SFX iQ ouillir ouilliraient bouillir
SFX iQ ouillir ouille bouillir
SFX iQ ouillir ouilles bouillir
SFX iQ ouillir ouillisse bouillir
SFX iQ ouillir ouillisses bouillir
SFX iQ ouillir ouillît bouillir
SFX iQ ouillir ouillissions bouillir
SFX iQ ouillir ouillissiez bouillir
SFX iQ ouillir ouillissent bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iR Y 41
SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir
SFX iR ueillir ueillant/n'q'l'm't's' cueillir
SFX iR ueillir ueilli/L'D'Q' cueillir
SFX iR ueillir ueillis/D'Q' cueillir
SFX iR ueillir ueillie/L'D'Q' cueillir
SFX iR ueillir ueillies/D'Q' cueillir
SFX iR ueillir ueille/n'q'j'l'm't's' cueillir
SFX iR ueillir ueilles/n'q'l'm' cueillir
SFX iR ueillir ueillons/n'q'l't' cueillir
SFX iR ueillir ueillez/n'q'l'm' cueillir
SFX iR ueillir ueillent/n'q'l'm't's' cueillir
SFX iR ueillir ueillais/n'q'j'l't' cueillir
SFX iR ueillir ueillait/n'q'l'm't's' cueillir
SFX iR ueillir ueillions/n'q'l't' cueillir
SFX iR ueillir ueilliez/n'q'l'm' cueillir
SFX iR ueillir ueillaient/n'q'l'm't's' cueillir
SFX iR ueillir ueillis/n'q'j'l't' cueillir
SFX iR ueillir ueillit/n'q'l'm't's' cueillir
SFX iR ueillir ueillîmes/n'q'l't' cueillir
SFX iR ueillir ueillîtes/n'q'l'm' cueillir
SFX iR ueillir ueillirent/n'q'l'm't's' cueillir
SFX iR ueillir ueillerai/n'q'j'l't' cueillir
SFX iR ueillir ueilleras/n'q'l'm' cueillir
SFX iR ueillir ueillera/n'q'l'm't's' cueillir
SFX iR ueillir ueillerons/n'q'l't' cueillir
SFX iR ueillir ueillerez/n'q'l'm' cueillir
SFX iR ueillir ueilleront/n'q'l'm't's' cueillir
SFX iR ueillir ueillerais/n'q'j'l't' cueillir
SFX iR ueillir ueillerait/n'q'l'm't's' cueillir
SFX iR ueillir ueillerions/n'q'l't' cueillir
SFX iR ueillir ueilleriez/n'q'l'm' cueillir
SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir
SFX iR ueillir ueillisse/n'q'j'l't' cueillir
SFX iR ueillir ueillisses/n'q'l'm' cueillir
SFX iR ueillir ueillît/n'q'l'm't's' cueillir
SFX iR ueillir ueillissions/n'q'l't' cueillir
SFX iR ueillir ueillissiez/n'q'l'm' cueillir
SFX iR ueillir ueillissent/n'q'l'm't's' cueillir
SFX iR ueillir ueille/n'l'm' cueillir
SFX iR ueillir ueillons/n'l' cueillir
SFX iR ueillir ueillez/n'l'm' cueillir
SFX iS N 37
SFX iS aillir aillant aillir
SFX iS aillir ailli aillir
SFX iS aillir aille aillir
SFX iS aillir ailles aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iS aillir aillent aillir
SFX iS aillir aillais aillir
SFX iS aillir aillait aillir
SFX iS aillir aillions aillir
SFX iS aillir ailliez aillir
SFX iS aillir aillaient aillir
SFX iS aillir aillis aillir
SFX iS aillir aillit aillir
SFX iS aillir aillîmes aillir
SFX iS aillir aillîtes aillir
SFX iS aillir aillirent aillir
SFX iS aillir aillirai aillir
SFX iS aillir ailliras aillir
SFX iS aillir aillira aillir
SFX iS aillir aillirons aillir
SFX iS aillir aillirez aillir
SFX iS aillir ailliront aillir
SFX iS aillir aillirais aillir
SFX iS aillir aillirait aillir
SFX iS aillir aillirions aillir
SFX iS aillir ailliriez aillir
SFX iS aillir ailliraient aillir
SFX iS aillir aillisse aillir
SFX iS aillir aillisses aillir
SFX iS aillir aillît aillir
SFX iS aillir aillissions aillir
SFX iS aillir aillissiez aillir
SFX iS aillir aillissent aillir
SFX iS aillir aille aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iT Y 41
SFX iT saillir saillir/n'q'd'l'm't's' aillir
SFX iT saillir saillant/n'q'l'm't's' aillir
SFX iT saillir sailli/L'D'Q' aillir
SFX iT saillir saillis/D'Q' aillir
SFX iT saillir saillie/L'D'Q' aillir
SFX iT saillir saillies/D'Q' aillir
SFX iT saillir saille/n'q'j'l'm't's' aillir
SFX iT saillir sailles/n'q'l'm't' aillir
SFX iT saillir saillons/n'q'l't' aillir
SFX iT saillir saillez/n'q'l'm' aillir
SFX iT saillir saillent/n'q'l'm't's' aillir
SFX iT saillir saillais/n'q'j'l'm't' aillir
SFX iT saillir saillait/n'q'l'm't's' aillir
SFX iT saillir saillions/n'q'l't' aillir
SFX iT saillir sailliez/n'q'l'm' aillir
SFX iT saillir saillaient/n'q'l'm't's' aillir
SFX iT saillir saillis/n'q'j'l'm't' aillir
SFX iT saillir saillit/n'q'l'm't's' aillir
SFX iT saillir saillîmes/n'q'l't' aillir
SFX iT saillir saillîtes/n'q'l'm' aillir
SFX iT saillir saillirent/n'q'l'm't's' aillir
SFX iT saillir saillirai/n'q'j'l'm't' aillir
SFX iT saillir sailliras/n'q'l'm't' aillir
SFX iT saillir saillira/n'q'l'm't's' aillir
SFX iT saillir saillirons/n'q'l't' aillir
SFX iT saillir saillirez/n'q'l'm' aillir
SFX iT saillir sailliront/n'q'l'm't's' aillir
SFX iT saillir saillirais/n'q'j'l'm't' aillir
SFX iT saillir saillirait/n'q'l'm't's' aillir
SFX iT saillir saillirions/n'q'l't' aillir
SFX iT saillir sailliriez/n'q'l'm' aillir
SFX iT saillir sailliraient/n'q'l'm't's' aillir
SFX iT saillir saillisse/n'q'j'l'm't' aillir
SFX iT saillir saillisses/n'q'l'm't' aillir
SFX iT saillir saillît/n'q'l'm't's' aillir
SFX iT saillir saillissions/n'q'l't' aillir
SFX iT saillir saillissiez/n'q'l'm' aillir
SFX iT saillir saillissent/n'q'l'm't's' aillir
SFX iT saillir saille/n'l'm' aillir
SFX iT saillir saillons/n'l' aillir
SFX iT saillir saillez/n'l'm' aillir
SFX iU N 36
SFX iU aillir aillant faillir
SFX iU aillir ailli faillir
SFX iU aillir aux faillir
SFX iU aillir aut faillir
SFX iU aillir aillons faillir
SFX iU aillir aillez faillir
SFX iU aillir aillent faillir
SFX iU aillir aillais faillir
SFX iU aillir aillait faillir
SFX iU aillir aillions faillir
SFX iU aillir ailliez faillir
SFX iU aillir aillaient faillir
SFX iU aillir aillis faillir
SFX iU aillir aillit faillir
SFX iU aillir aillîmes faillir
SFX iU aillir aillîtes faillir
SFX iU aillir aillirent faillir
SFX iU aillir aillirai faillir
SFX iU aillir ailliras faillir
SFX iU aillir aillira faillir
SFX iU aillir aillirons faillir
SFX iU aillir aillirez faillir
SFX iU aillir ailliront faillir
SFX iU aillir aillirais faillir
SFX iU aillir aillirait faillir
SFX iU aillir aillirions faillir
SFX iU aillir ailliriez faillir
SFX iU aillir ailliraient faillir
SFX iU aillir aille faillir
SFX iU aillir ailles faillir
SFX iU aillir aillisse faillir
SFX iU aillir aillisses faillir
SFX iU aillir aillît faillir
SFX iU aillir aillissions faillir
SFX iU aillir aillissiez faillir
SFX iU aillir aillissent faillir
SFX iV N 11
SFX iV ésir isant gésir
SFX iV ésir is gésir
SFX iV ésir ît gésir
SFX iV ésir isons gésir
SFX iV ésir isez gésir
SFX iV ésir isent gésir
SFX iV ésir isais gésir
SFX iV ésir isait gésir
SFX iV ésir isions gésir
SFX iV ésir isiez gésir
SFX iV ésir isaient gésir
SFX iW Y 54
SFX iW uïr uïr/n'q'd'l'm't's' ouïr
SFX iW uïr yant/n'q'l'm't's' ouïr
SFX iW uïr uï/L'D'Q' ouïr
SFX iW uïr uïs/D'Q' ouïr
SFX iW uïr uïe/L'D'Q' ouïr
SFX iW uïr uïes/D'Q' ouïr
SFX iW uïr is/n'q'j'l'm't' ouïr
SFX iW uïr it/n'q'l'm't' ouïr
SFX iW uïr yons/n'q'l't' ouïr
SFX iW uïr yez/n'q'l'm' ouïr
SFX iW uïr ient/n'q'l'm't's' ouïr
SFX iW uïr yais/n'q'j'l'm't' ouïr
SFX iW uïr yait/n'q'l'm't' ouïr
SFX iW uïr yions/n'q'l't' ouïr
SFX iW uïr yiez/n'q'l'm' ouïr
SFX iW uïr yaient/n'q'l'm't's' ouïr
SFX iW uïr uïs/n'q'j'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïmes/n'q'l't' ouïr
SFX iW uïr uïtes/n'q'l'm' ouïr
SFX iW uïr uïrent/n'q'l'm't's' ouïr
SFX iW uïr uïrai/n'q'j'l'm't' ouïr
SFX iW uïr rrai/n'q'j'l'm't' ouïr
SFX iW uïr uïras/n'q'l'm't' ouïr
SFX iW uïr rras/n'q'l'm't' ouïr
SFX iW uïr uïra/n'q'l'm't' ouïr
SFX iW uïr rra/n'q'l'm't' ouïr
SFX iW uïr uïrons/n'q'l't' ouïr
SFX iW uïr rrons/n'q'l't' ouïr
SFX iW uïr uïrez/n'q'l'm' ouïr
SFX iW uïr rrez/n'q'l'm' ouïr
SFX iW uïr uïront/n'q'l'm't's' ouïr
SFX iW uïr rront/n'q'l'm't's' ouïr
SFX iW uïr uïrais/n'q'j'l'm't' ouïr
SFX iW uïr rrais/n'q'j'l'm't' ouïr
SFX iW uïr uïrait/n'q'l'm't' ouïr
SFX iW uïr rrait/n'q'l'm't' ouïr
SFX iW uïr uïrions/n'q'l't' ouïr
SFX iW uïr rrions/n'q'l't' ouïr
SFX iW uïr uïriez/n'q'l'm' ouïr
SFX iW uïr rriez/n'q'l'm' ouïr
SFX iW uïr uïraient/n'q'l'm't's' ouïr
SFX iW uïr rraient/n'q'l'm't's' ouïr
SFX iW uïr ie/n'q'j'l'm't's' ouïr
SFX iW uïr ies/n'l'm't' ouïr
SFX iW uïr uïsse/n'q'j'l'm't' ouïr
SFX iW uïr uïsses/n'q'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïssions/n'q'l't' ouïr
SFX iW uïr uïssiez/n'q'l'm' ouïr
SFX iW uïr uïssent/n'q'l'm't's' ouïr
SFX iW uïr is/n'l'm' ouïr
SFX iW uïr yons/n'l' ouïr
SFX iW uïr yez/n'l'm' ouïr
SFX iX N 4
SFX iX érir éru férir
SFX iX érir érus férir
SFX iX érir érue férir
SFX iX érir érues férir
SFX iY Y 5
SFX iY ssir ssir/n'q'd' issir
SFX iY ssir ssu/L'D'Q' issir
SFX iY ssir ssus/D'Q' issir
SFX iY ssir ssue/L'D'Q' issir
SFX iY ssir ssues/D'Q' issir
SFX pA N 42
SFX pA ouvoir ouvant pouvoir
SFX pA ouvoir u pouvoir
SFX pA ouvoir eux pouvoir
SFX pA ouvoir uis pouvoir
SFX pA ouvoir eut pouvoir
SFX pA ouvoir ouvons pouvoir
SFX pA ouvoir ouvez pouvoir
SFX pA ouvoir euvent pouvoir
SFX pA ouvoir ouvais pouvoir
SFX pA ouvoir ouvait pouvoir
SFX pA ouvoir ouvions pouvoir
SFX pA ouvoir ouviez pouvoir
SFX pA ouvoir ouvaient pouvoir
SFX pA ouvoir us pouvoir
SFX pA ouvoir ut pouvoir
SFX pA ouvoir ûmes pouvoir
SFX pA ouvoir ûtes pouvoir
SFX pA ouvoir urent pouvoir
SFX pA ouvoir ourrai pouvoir
SFX pA ouvoir ourras pouvoir
SFX pA ouvoir ourra pouvoir
SFX pA ouvoir ourrons pouvoir
SFX pA ouvoir ourrez pouvoir
SFX pA ouvoir ourront pouvoir
SFX pA ouvoir ourrais pouvoir
SFX pA ouvoir ourrait pouvoir
SFX pA ouvoir ourrions pouvoir
SFX pA ouvoir ourriez pouvoir
SFX pA ouvoir ourraient pouvoir
SFX pA ouvoir uisse pouvoir
SFX pA ouvoir uissé pouvoir
SFX pA ouvoir uisses pouvoir
SFX pA ouvoir uissions pouvoir
SFX pA ouvoir uissiez pouvoir
SFX pA ouvoir uissent pouvoir
SFX pA ouvoir usse pouvoir
SFX pA ouvoir ussé pouvoir
SFX pA ouvoir usses pouvoir
SFX pA ouvoir ût pouvoir
SFX pA ouvoir ussions pouvoir
SFX pA ouvoir ussiez pouvoir
SFX pA ouvoir ussent pouvoir
SFX pB N 47
SFX pB ouloir oulant vouloir
SFX pB ouloir oulu vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulue vouloir
SFX pB ouloir oulues vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir eut vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir oulez vouloir
SFX pB ouloir eulent vouloir
SFX pB ouloir oulais vouloir
SFX pB ouloir oulait vouloir
SFX pB ouloir oulions vouloir
SFX pB ouloir ouliez vouloir
SFX pB ouloir oulaient vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulut vouloir
SFX pB ouloir oulûmes vouloir
SFX pB ouloir oulûtes vouloir
SFX pB ouloir oulurent vouloir
SFX pB ouloir oudrai vouloir
SFX pB ouloir oudras vouloir
SFX pB ouloir oudra vouloir
SFX pB ouloir oudrons vouloir
SFX pB ouloir oudrez vouloir
SFX pB ouloir oudront vouloir
SFX pB ouloir oudrais vouloir
SFX pB ouloir oudrait vouloir
SFX pB ouloir oudrions vouloir
SFX pB ouloir oudriez vouloir
SFX pB ouloir oudraient vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir euillé vouloir
SFX pB ouloir euilles vouloir
SFX pB ouloir euillent vouloir
SFX pB ouloir oulusse vouloir
SFX pB ouloir oulusses vouloir
SFX pB ouloir oulût vouloir
SFX pB ouloir oulussions vouloir
SFX pB ouloir oulussiez vouloir
SFX pB ouloir oulussent vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir euillons vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir euillez vouloir
SFX pB ouloir oulez vouloir
SFX pC N 43
SFX pC evoir evant devoir
SFX pC evoir û redevoir
SFX pC evoir us devoir
SFX pC evoir ue devoir
SFX pC evoir ues devoir
SFX pC evoir ois devoir
SFX pC evoir oit devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pC evoir oivent devoir
SFX pC evoir evais devoir
SFX pC evoir evait devoir
SFX pC evoir evions devoir
SFX pC evoir eviez devoir
SFX pC evoir evaient devoir
SFX pC evoir us devoir
SFX pC evoir ut devoir
SFX pC evoir ûmes devoir
SFX pC evoir ûtes devoir
SFX pC evoir urent devoir
SFX pC evoir evrai devoir
SFX pC evoir evras devoir
SFX pC evoir evra devoir
SFX pC evoir evrons devoir
SFX pC evoir evrez devoir
SFX pC evoir evront devoir
SFX pC evoir evrais devoir
SFX pC evoir evrait devoir
SFX pC evoir evrions devoir
SFX pC evoir evriez devoir
SFX pC evoir evraient devoir
SFX pC evoir oive devoir
SFX pC evoir oives devoir
SFX pC evoir usse devoir
SFX pC evoir ussé devoir
SFX pC evoir usses devoir
SFX pC evoir ût devoir
SFX pC evoir ussions devoir
SFX pC evoir ussiez devoir
SFX pC evoir ussent devoir
SFX pC evoir ois devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pD N 1
SFX pD evoir û devoir
SFX pE N 45
SFX pE avoir achant savoir
SFX pE avoir u savoir
SFX pE avoir us savoir
SFX pE avoir ue savoir
SFX pE avoir ues savoir
SFX pE avoir ais savoir
SFX pE avoir ait savoir
SFX pE avoir avons savoir
SFX pE avoir avez savoir
SFX pE avoir avent savoir
SFX pE avoir avais savoir
SFX pE avoir avait savoir
SFX pE avoir avions savoir
SFX pE avoir aviez savoir
SFX pE avoir avaient savoir
SFX pE avoir us savoir
SFX pE avoir ut savoir
SFX pE avoir ûmes savoir
SFX pE avoir ûtes savoir
SFX pE avoir urent savoir
SFX pE avoir aurai savoir
SFX pE avoir auras savoir
SFX pE avoir aura savoir
SFX pE avoir aurons savoir
SFX pE avoir aurez savoir
SFX pE avoir auront savoir
SFX pE avoir aurais savoir
SFX pE avoir aurait savoir
SFX pE avoir aurions savoir
SFX pE avoir auriez savoir
SFX pE avoir auraient savoir
SFX pE avoir ache savoir
SFX pE avoir aches savoir
SFX pE avoir achions savoir
SFX pE avoir achiez savoir
SFX pE avoir achent savoir
SFX pE avoir usse savoir
SFX pE avoir usses savoir
SFX pE avoir ût savoir
SFX pE avoir ussions savoir
SFX pE avoir ussiez savoir
SFX pE avoir ussent savoir
SFX pE avoir ache savoir
SFX pE avoir achons savoir
SFX pE avoir achez savoir
SFX pF Y 54
SFX pF oir oir/n'q'd'l'm't's' voir
SFX pF oir oyant/n'q'l'm't's' voir
SFX pF oir u/L'D'Q' voir
SFX pF oir us/D'Q' voir
SFX pF oir ue/L'D'Q' voir
SFX pF oir ues/D'Q' voir
SFX pF oir ois/n'q'j'l'm't' voir
SFX pF oir oit/n'q'l'm't's' voir
SFX pF oir oyons/n'q'l't' voir
SFX pF oir oyez/n'q'l'm' voir
SFX pF oir oient/n'q'l'm't's' voir
SFX pF oir oyais/n'q'j'l'm't' voir
SFX pF oir oyait/n'q'l'm't's' voir
SFX pF oir oyions/n'q'l't' voir
SFX pF oir oyiez/n'q'l'm' voir
SFX pF oir oyaient/n'q'l'm't's' voir
SFX pF oir is/n'q'j'l'm't' voir
SFX pF oir it/n'q'l'm't's' voir
SFX pF oir îmes/n'q'l't' voir
SFX pF oir îtes/n'q'l'm' voir
SFX pF oir irent/n'q'l'm't's' voir
SFX pF oir errai/n'q'j'l'm't' [^é]voir
SFX pF oir oirai évoir
SFX pF oir erras/n'q'l'm't' [^é]voir
SFX pF oir oiras évoir
SFX pF oir erra/n'q'l'm't's' [^é]voir
SFX pF oir oira évoir
SFX pF oir errons/n'q'l't' [^é]voir
SFX pF oir oirons évoir
SFX pF oir errez/n'q'l'm' [^é]voir
SFX pF oir oirez évoir
SFX pF oir erront/n'q'l'm't's' [^é]voir
SFX pF oir oiront évoir
SFX pF oir errais/n'q'j'l'm't' [^é]voir
SFX pF oir oirais évoir
SFX pF oir errait/n'q'l'm't's' [^é]voir
SFX pF oir oirait évoir
SFX pF oir errions/n'q'l't' [^é]voir
SFX pF oir oirions évoir
SFX pF oir erriez/n'q'l'm' [^é]voir
SFX pF oir oiriez évoir
SFX pF oir erraient/n'q'l'm't's' [^é]voir
SFX pF oir oiraient évoir
SFX pF oir oie/n'q'j'l'm't's' voir
SFX pF oir oies/n'l'm't' voir
SFX pF oir isse/n'q'j'l'm't' voir
SFX pF oir isses/n'q'l'm't' voir
SFX pF oir ît/n'q'l'm't's' voir
SFX pF oir issions/n'q'l't' voir
SFX pF oir issiez/n'q'l'm' voir
SFX pF oir issent/n'q'l'm't's' voir
SFX pF oir ois/n'l'm' voir
SFX pF oir oyons/n'l' voir
SFX pF oir oyez/n'l'm' voir
SFX pG Y 11
SFX pG oir errai voir
SFX pG oir erras voir
SFX pG oir erra voir
SFX pG oir errons voir
SFX pG oir errez voir
SFX pG oir erront voir
SFX pG oir errais voir
SFX pG oir errait voir
SFX pG oir errions voir
SFX pG oir erriez voir
SFX pG oir erraient voir
SFX pH Y 43
SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir
SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir
SFX pH ouvoir u/L'D'Q' .mouvoir
SFX pH ouvoir us/D'Q' mouvoir
SFX pH ouvoir ue/L'D'Q' mouvoir
SFX pH ouvoir ues/D'Q' mouvoir
SFX pH ouvoir eus/n'q'j'l'm't' mouvoir
SFX pH ouvoir eut/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvons/n'q'l't' mouvoir
SFX pH ouvoir ouvez/n'q'l'm' mouvoir
SFX pH ouvoir euvent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvions/n'q'l't' mouvoir
SFX pH ouvoir ouviez/n'q'l'm' mouvoir
SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir
SFX pH ouvoir us/n'q'j'l'm't' mouvoir
SFX pH ouvoir ut/n'q'l'm't's' mouvoir
SFX pH ouvoir ûmes/n'q'l't' mouvoir
SFX pH ouvoir ûtes/n'q'l'm' mouvoir
SFX pH ouvoir urent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvras/n'q'l'm't' mouvoir
SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrons/n'q'l't' mouvoir
SFX pH ouvoir ouvrez/n'q'l'm' mouvoir
SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrions/n'q'l't' mouvoir
SFX pH ouvoir ouvriez/n'q'l'm' mouvoir
SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir
SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir
SFX pH ouvoir euves/n'l'm't' mouvoir
SFX pH ouvoir usse/n'q'j'l'm't' mouvoir
SFX pH ouvoir usses/n'q'l'm't' mouvoir
SFX pH ouvoir ût/n'q'l'm't's' mouvoir
SFX pH ouvoir ussions/n'q'l't' mouvoir
SFX pH ouvoir ussiez/n'q'l'm' mouvoir
SFX pH ouvoir ussent/n'q'l'm't's' mouvoir
SFX pH ouvoir eus/n'l'm' mouvoir
SFX pH ouvoir ouvons/n'l' mouvoir
SFX pH ouvoir ouvez/n'l'm' mouvoir
SFX pI N 1
SFX pI ouvoir û/q' mouvoir
SFX pJ N 42
SFX pJ ourvoir ourvoyant pourvoir
SFX pJ ourvoir ourvu pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvue pourvoir
SFX pJ ourvoir ourvues pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoit pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pJ ourvoir ourvoient pourvoir
SFX pJ ourvoir ourvoyais pourvoir
SFX pJ ourvoir ourvoyait pourvoir
SFX pJ ourvoir ourvoyions pourvoir
SFX pJ ourvoir ourvoyiez pourvoir
SFX pJ ourvoir ourvoyaient pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvut pourvoir
SFX pJ ourvoir ourvûmes pourvoir
SFX pJ ourvoir ourvûtes pourvoir
SFX pJ ourvoir ourvurent pourvoir
SFX pJ ourvoir ourvoirai pourvoir
SFX pJ ourvoir ourvoiras pourvoir
SFX pJ ourvoir ourvoira pourvoir
SFX pJ ourvoir ourvoirons pourvoir
SFX pJ ourvoir ourvoirez pourvoir
SFX pJ ourvoir ourvoiront pourvoir
SFX pJ ourvoir ourvoirais pourvoir
SFX pJ ourvoir ourvoirait pourvoir
SFX pJ ourvoir ourvoirions pourvoir
SFX pJ ourvoir ourvoiriez pourvoir
SFX pJ ourvoir ourvoiraient pourvoir
SFX pJ ourvoir ourvoie pourvoir
SFX pJ ourvoir ourvoies pourvoir
SFX pJ ourvoir ourvusse pourvoir
SFX pJ ourvoir ourvusses pourvoir
SFX pJ ourvoir ourvût pourvoir
SFX pJ ourvoir ourvussions pourvoir
SFX pJ ourvoir ourvussiez pourvoir
SFX pJ ourvoir ourvussent pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pK Y 43
SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir
SFX pK cevoir cevant/n'q'l'm't's' cevoir
SFX pK cevoir çu/L'D'Q' cevoir
SFX pK cevoir çus/D'Q' cevoir
SFX pK cevoir çue/L'D'Q' cevoir
SFX pK cevoir çues/D'Q' cevoir
SFX pK cevoir çois/n'q'j'l'm't' cevoir
SFX pK cevoir çoit/n'q'l'm't's' cevoir
SFX pK cevoir cevons/n'q'l't' cevoir
SFX pK cevoir cevez/n'q'l'm' cevoir
SFX pK cevoir çoivent/n'q'l'm't's' cevoir
SFX pK cevoir cevais/n'q'j'l'm't' cevoir
SFX pK cevoir cevait/n'q'l'm't's' cevoir
SFX pK cevoir cevions/n'q'l't' cevoir
SFX pK cevoir ceviez/n'q'l'm' cevoir
SFX pK cevoir cevaient/n'q'l'm't's' cevoir
SFX pK cevoir çus/n'q'j'l'm't' cevoir
SFX pK cevoir çut/n'q'l'm't's' cevoir
SFX pK cevoir çûmes/n'q'l't' cevoir
SFX pK cevoir çûtes/n'q'l'm' cevoir
SFX pK cevoir çurent/n'q'l'm't's' cevoir
SFX pK cevoir cevrai/n'q'j'l'm't' cevoir
SFX pK cevoir cevras/n'q'l'm't' cevoir
SFX pK cevoir cevra/n'q'l'm't's' cevoir
SFX pK cevoir cevrons/n'q'l't' cevoir
SFX pK cevoir cevrez/n'q'l'm' cevoir
SFX pK cevoir cevront/n'q'l'm't's' cevoir
SFX pK cevoir cevrais/n'q'j'l'm't' cevoir
SFX pK cevoir cevrait/n'q'l'm't's' cevoir
SFX pK cevoir cevrions/n'q'l't' cevoir
SFX pK cevoir cevriez/n'q'l'm' cevoir
SFX pK cevoir cevraient/n'q'l'm't's' cevoir
SFX pK cevoir çoive/n'q'j'l'm't's' cevoir
SFX pK cevoir çoives/n'l'm't' cevoir
SFX pK cevoir çusse/n'q'j'l'm't' cevoir
SFX pK cevoir çusses/n'q'l'm't' cevoir
SFX pK cevoir çût/n'q'l'm't's' cevoir
SFX pK cevoir çussions/n'q'l't' cevoir
SFX pK cevoir çussiez/n'q'l'm' cevoir
SFX pK cevoir çussent/n'q'l'm't's' cevoir
SFX pK cevoir çois/n'l'm't' cevoir
SFX pK cevoir cevons/n'l' cevoir
SFX pK cevoir cevez/n'l'm' cevoir
SFX pM N 40
SFX pM aloir alant valoir
SFX pM aloir alu valoir
SFX pM aloir aux valoir
SFX pM aloir aut valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pM aloir alent valoir
SFX pM aloir alais valoir
SFX pM aloir alait valoir
SFX pM aloir alions valoir
SFX pM aloir aliez valoir
SFX pM aloir alaient valoir
SFX pM aloir alus valoir
SFX pM aloir alut valoir
SFX pM aloir alûmes valoir
SFX pM aloir alûtes valoir
SFX pM aloir alurent valoir
SFX pM aloir audrai valoir
SFX pM aloir audras valoir
SFX pM aloir audra valoir
SFX pM aloir audrons valoir
SFX pM aloir audrez valoir
SFX pM aloir audront valoir
SFX pM aloir audrais valoir
SFX pM aloir audrait valoir
SFX pM aloir audrions valoir
SFX pM aloir audriez valoir
SFX pM aloir audraient valoir
SFX pM aloir aille valoir
SFX pM aloir ailles valoir
SFX pM aloir aillent valoir
SFX pM aloir alusse valoir
SFX pM aloir alusses valoir
SFX pM aloir alût valoir
SFX pM aloir alussions valoir
SFX pM aloir alussiez valoir
SFX pM aloir alussent valoir
SFX pM aloir aux valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pN Y 43
SFX pN valoir valoir/n'q'd'm't's' valoir
SFX pN valoir valant/n'q'm't's' valoir
SFX pN valoir vaux/n'j'm't' valoir
SFX pN valoir vaut/n'm't's' valoir
SFX pN valoir valons/n't' valoir
SFX pN valoir valez/n'm' valoir
SFX pN valoir valent/n'm't's' quivaloir
SFX pN valoir valent révaloir
SFX pN valoir valais/n'j'm't' valoir
SFX pN valoir valait/n'm't's' valoir
SFX pN valoir valions/n't' valoir
SFX pN valoir valiez/n'm' valoir
SFX pN valoir valaient/n'm't's' valoir
SFX pN valoir valus/n'j'm't' valoir
SFX pN valoir valut/n'm't's' valoir
SFX pN valoir valûmes/n't' valoir
SFX pN valoir valûtes/n'm' valoir
SFX pN valoir valurent/n'm't's' valoir
SFX pN valoir vaudrai/n'j'm't' valoir
SFX pN valoir vaudras/n'm't' valoir
SFX pN valoir vaudra/n'm't's' valoir
SFX pN valoir vaudrons/n't' valoir
SFX pN valoir vaudrez/n'm' valoir
SFX pN valoir vaudront/n'm't's' valoir
SFX pN valoir vaudrais/n'j'm't' valoir
SFX pN valoir vaudrait/n'm't's' valoir
SFX pN valoir vaudrions/n't' valoir
SFX pN valoir vaudriez/n'm' valoir
SFX pN valoir vaudraient/n'm't's' valoir
SFX pN valoir vaille/n'j'm't's' quivaloir
SFX pN valoir vale révaloir
SFX pN valoir vailles/n'm't' quivaloir
SFX pN valoir vales révaloir
SFX pN valoir vaillent/n'm't's' quivaloir
SFX pN valoir valusse/n'j'm't' valoir
SFX pN valoir valusses/n'm't' valoir
SFX pN valoir valût/n'm't's' valoir
SFX pN valoir valussions/n't' valoir
SFX pN valoir valussiez/n'm' valoir
SFX pN valoir valussent/n'm't's' valoir
SFX pN valoir vaux valoir
SFX pN valoir valons valoir
SFX pN valoir valez valoir
SFX pO N 16
SFX pO valoir valant revaloir
SFX pO valoir valu revaloir
SFX pO valoir valus revaloir
SFX pO valoir value revaloir
SFX pO valoir values revaloir
SFX pO valoir vaudrai revaloir
SFX pO valoir vaudras revaloir
SFX pO valoir vaudra revaloir
SFX pO valoir vaudrons revaloir
SFX pO valoir vaudrez revaloir
SFX pO valoir vaudront revaloir
SFX pO valoir vaudrais revaloir
SFX pO valoir vaudrait revaloir
SFX pO valoir vaudrions revaloir
SFX pO valoir vaudriez revaloir
SFX pO valoir vaudraient revaloir
SFX pP N 1
SFX pP paroir parant comparoir
SFX pQ N 1
SFX pQ haloir haut chaloir
SFX pR Y 2
SFX pR pparoir pparoir/n'q'd' apparoir
SFX pR pparoir ppert/n'q' apparoir
SFX pS Y 69
SFX pS oir oir/n'q'd'l'm't's' oir
SFX pS sseoir sseyant/n'q'l'm't's' seoir
SFX pS sseoir ssoyant/n'q'l'm't's' seoir
SFX pS sseoir ssis/L'D'Q' seoir
SFX pS sseoir ssise/L'D'Q' seoir
SFX pS sseoir ssises/D'Q' seoir
SFX pS sseoir ssieds/n'q'j'l'm't' seoir
SFX pS sseoir ssied/n'q'l'm't's' seoir
SFX pS sseoir sseyons/n'q'l't' seoir
SFX pS sseoir sseyez/n'q'l'm' seoir
SFX pS sseoir sseyent/n'q'l'm't's' seoir
SFX pS sseoir ssois/n'q'j'l'm't' seoir
SFX pS sseoir ssoit/n'q'l'm't's' seoir
SFX pS sseoir ssoyons/n'q'l't' seoir
SFX pS sseoir ssoyez/n'q'l'm' seoir
SFX pS sseoir ssoient/n'q'l'm't's' seoir
SFX pS sseoir sseyais/n'q'j'l'm't' seoir
SFX pS sseoir sseyait/n'q'l'm't's' seoir
SFX pS sseoir sseyions/n'q'l't' seoir
SFX pS sseoir sseyiez/n'q'l'm' seoir
SFX pS sseoir sseyaient/n'q'l'm't's' seoir
SFX pS sseoir ssoyais/n'q'j'l'm't' seoir
SFX pS sseoir ssoyait/n'q'l'm't's' seoir
SFX pS sseoir ssoyions/n'q'l't' seoir
SFX pS sseoir ssoyiez/n'q'l'm' seoir
SFX pS sseoir ssoyaient/n'q'l'm't's' seoir
SFX pS sseoir ssis/n'q'j'l'm't' seoir
SFX pS sseoir ssit/n'q'l'm't's' seoir
SFX pS sseoir ssîmes/n'q'l't' seoir
SFX pS sseoir ssîtes/n'q'l'm' seoir
SFX pS sseoir ssirent/n'q'l'm't's' seoir
SFX pS sseoir ssiérai/n'q'j'l'm't' seoir
SFX pS sseoir ssiéras/n'q'l'm't' seoir
SFX pS sseoir ssiéra/n'q'l'm't's' seoir
SFX pS sseoir ssiérons/n'q'l't' seoir
SFX pS sseoir ssiérez/n'q'l'm' seoir
SFX pS sseoir ssiéront/n'q'l'm't's' seoir
SFX pS sseoir ssoirai/n'q'j'l'm't' seoir
SFX pS sseoir ssoiras/n'q'l'm't' seoir
SFX pS sseoir ssoira/n'q'l'm't's' seoir
SFX pS sseoir ssoirons/n'q'l't' seoir
SFX pS sseoir ssoirez/n'q'l'm' seoir
SFX pS sseoir ssoiront/n'q'l'm't's' seoir
SFX pS sseoir ssiérais/n'q'j'l'm't' seoir
SFX pS sseoir ssiérait/n'q'l'm't's' seoir
SFX pS sseoir ssiérions/n'q'l't' seoir
SFX pS sseoir ssiériez/n'q'l'm' seoir
SFX pS sseoir ssiéraient/n'q'l'm't's' seoir
SFX pS sseoir ssoirais/n'q'j'l'm't' seoir
SFX pS sseoir ssoirait/n'q'l'm't's' seoir
SFX pS sseoir ssoirions/n'q'l't' seoir
SFX pS sseoir ssoiriez/n'q'l'm' seoir
SFX pS sseoir ssoiraient/n'q'l'm't's' seoir
SFX pS sseoir sseye/n'q'j'l'm't's' seoir
SFX pS sseoir sseyes/n'l'm't' seoir
SFX pS sseoir ssoie/n'q'j'l'm't's' seoir
SFX pS sseoir ssoies/n'l'm't' seoir
SFX pS sseoir ssisse/n'q'j'l'm't' seoir
SFX pS sseoir ssisses/n'q'l'm't' seoir
SFX pS sseoir ssît/n'q'l'm't's' seoir
SFX pS sseoir ssissions/n'q'l't' seoir
SFX pS sseoir ssissiez/n'q'l'm' seoir
SFX pS sseoir ssissent/n'q'l'm't's' seoir
SFX pS sseoir ssieds/n'l'm't' seoir
SFX pS sseoir sseyons/n'l' seoir
SFX pS sseoir sseyez/n'l'm' seoir
SFX pS sseoir ssois/n'l'm't' seoir
SFX pS sseoir ssoyons/n'l' seoir
SFX pS sseoir ssoyez/n'l'm' seoir
SFX pT N 41
SFX pT urseoir ursoyant seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursise seoir
SFX pT urseoir ursises seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoit seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pT urseoir ursoient seoir
SFX pT urseoir ursoyais seoir
SFX pT urseoir ursoyait seoir
SFX pT urseoir ursoyions seoir
SFX pT urseoir ursoyiez seoir
SFX pT urseoir ursoyaient seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursit seoir
SFX pT urseoir ursîmes seoir
SFX pT urseoir ursîtes seoir
SFX pT urseoir ursirent seoir
SFX pT urseoir urseoirai seoir
SFX pT urseoir urseoiras seoir
SFX pT urseoir urseoira seoir
SFX pT urseoir urseoirons seoir
SFX pT urseoir urseoirez seoir
SFX pT urseoir urseoiront seoir
SFX pT urseoir urseoirais seoir
SFX pT urseoir urseoirait seoir
SFX pT urseoir urseoirions seoir
SFX pT urseoir urseoiriez seoir
SFX pT urseoir urseoiraient seoir
SFX pT urseoir ursoie seoir
SFX pT urseoir ursoies seoir
SFX pT urseoir ursisse seoir
SFX pT urseoir ursisses seoir
SFX pT urseoir ursît seoir
SFX pT urseoir ursissions seoir
SFX pT urseoir ursissiez seoir
SFX pT urseoir ursissent seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pU N 4
SFX pU eoir éant seoir
SFX pU eoir is seoir
SFX pU eoir ise seoir
SFX pU eoir ises seoir
SFX pV N 13
SFX pV eoir éant seoir
SFX pV eoir eyant seoir
SFX pV eoir is seoir
SFX pV eoir ied seoir
SFX pV eoir iéent seoir
SFX pV eoir eyait seoir
SFX pV eoir eyaient seoir
SFX pV eoir iéra seoir
SFX pV eoir iéront seoir
SFX pV eoir iérait seoir
SFX pV eoir iéraient seoir
SFX pV eoir iée seoir
SFX pV eoir iéent seoir
SFX pW N 11
SFX pW sseoir sséant seoir
SFX pW sseoir ssied seoir
SFX pW sseoir ssiéent seoir
SFX pW sseoir sseyait seoir
SFX pW sseoir sseyaient seoir
SFX pW sseoir ssiéra seoir
SFX pW sseoir ssiéront seoir
SFX pW sseoir ssiérait seoir
SFX pW sseoir ssiéraient seoir
SFX pW sseoir ssiée seoir
SFX pW sseoir ssiéent seoir
SFX pX N 52
SFX pX hoir hu choir
SFX pX hoir hus choir
SFX pX hoir hue choir
SFX pX hoir hues choir
SFX pX hoir hois choir
SFX pX hoir hoit choir
SFX pX hoir hoyons choir
SFX pX hoir hoyez choir
SFX pX hoir hoient choir
SFX pX hoir hoyais déchoir
SFX pX hoir hoyait déchoir
SFX pX hoir hoyions déchoir
SFX pX hoir hoyiez déchoir
SFX pX hoir hoyaient déchoir
SFX pX hoir hus choir
SFX pX hoir hut choir
SFX pX hoir hûmes choir
SFX pX hoir hûtes choir
SFX pX hoir hurent choir
SFX pX hoir hoirai choir
SFX pX hoir herrai choir
SFX pX hoir hoiras choir
SFX pX hoir herras choir
SFX pX hoir hoira choir
SFX pX hoir herra choir
SFX pX hoir hoirons choir
SFX pX hoir herrons choir
SFX pX hoir hoirez choir
SFX pX hoir herrez choir
SFX pX hoir hoiront choir
SFX pX hoir herront choir
SFX pX hoir hoirais choir
SFX pX hoir herrais choir
SFX pX hoir hoirait choir
SFX pX hoir herrait choir
SFX pX hoir hoirions choir
SFX pX hoir herrions choir
SFX pX hoir hoiriez choir
SFX pX hoir herriez choir
SFX pX hoir hoiraient choir
SFX pX hoir herraient choir
SFX pX hoir hoie choir
SFX pX hoir hoies choir
SFX pX hoir husse choir
SFX pX hoir husses choir
SFX pX hoir hût choir
SFX pX hoir hussions choir
SFX pX hoir hussiez choir
SFX pX hoir hussent choir
SFX pX hoir hois déchoir
SFX pX hoir hoyons déchoir
SFX pX hoir hoyez déchoir
SFX pY Y 26
SFX pY choir choir/n'q'd' échoir
SFX pY choir chéant/n'q' échoir
SFX pY choir chu/L'D'Q' échoir
SFX pY choir chus/D'Q' échoir
SFX pY choir chue/L'D'Q' échoir
SFX pY choir chues/D'Q' échoir
SFX pY choir choit/n'q' échoir
SFX pY choir chet/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chéent/n'q' échoir
SFX pY choir choyait/n'q' échoir
SFX pY choir choyaient/n'q' échoir
SFX pY choir chut/n'q' échoir
SFX pY choir churent/n'q' échoir
SFX pY choir choira/n'q' échoir
SFX pY choir cherra/n'q' échoir
SFX pY choir choiront/n'q' échoir
SFX pY choir cherront/n'q' échoir
SFX pY choir choirait/n'q' échoir
SFX pY choir cherrait/n'q' échoir
SFX pY choir choiraient/n'q' échoir
SFX pY choir cherraient/n'q' échoir
SFX pY choir choie/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chût/n'q' échoir
SFX pY choir chussent/n'q' échoir
SFX pZ N 18
SFX pZ euvoir euvant pleuvoir
SFX pZ euvoir u pleuvoir
SFX pZ euvoir eut pleuvoir
SFX pZ euvoir euvent pleuvoir
SFX pZ euvoir euvait pleuvoir
SFX pZ euvoir euvaient pleuvoir
SFX pZ euvoir ut pleuvoir
SFX pZ euvoir urent pleuvoir
SFX pZ euvoir euvra pleuvoir
SFX pZ euvoir euvront pleuvoir
SFX pZ euvoir euvrait pleuvoir
SFX pZ euvoir euvraient pleuvoir
SFX pZ euvoir euve pleuvoir
SFX pZ euvoir ût pleuvoir
SFX pZ euvoir ussent pleuvoir
SFX pZ euvoir eus pleuvoir
SFX pZ euvoir euvons pleuvoir
SFX pZ euvoir euvez pleuvoir
SFX qA N 8
SFX qA alloir allu falloir
SFX qA alloir aut falloir
SFX qA alloir allait falloir
SFX qA alloir allut falloir
SFX qA alloir audra falloir
SFX qA alloir audrait falloir
SFX qA alloir aille falloir
SFX qA alloir allût falloir
SFX rA Y 28
SFX rA lore lore/n'q'd'l'm't's' clore
SFX rA lore losant/n'q'l'm't's' clore
SFX rA lore los/L'D'Q' clore
SFX rA lore lose/L'D'Q' clore
SFX rA lore loses/D'Q' clore
SFX rA lore los/n'q'j'l'm't' clore
SFX rA lore lot/n'q'l'm't's' .clore
SFX rA lore losons/n'q'l't' clore
SFX rA lore losez/n'q'l'm' clore
SFX rA lore losent/n'q'l'm't's' clore
SFX rA lore lorai/n'q'j'l'm't' clore
SFX rA lore loras/n'q'l'm't' clore
SFX rA lore lora/n'q'l'm't's' clore
SFX rA lore lorons/n'q'l't' clore
SFX rA lore lorez/n'q'l'm' clore
SFX rA lore loront/n'q'l'm't's' clore
SFX rA lore lorais/n'q'j'l'm't' clore
SFX rA lore lorait/n'q'l'm't's' clore
SFX rA lore lorions/n'q'l't' clore
SFX rA lore loriez/n'q'l'm' clore
SFX rA lore loraient/n'q'l'm't's' clore
SFX rA lore lose/n'q'j'l'm't's' clore
SFX rA lore loses/n'l'm't' clore
SFX rA lore losions/n'l't' clore
SFX rA lore losiez/n'l'm' clore
SFX rA lore los/n'l'm' clore
SFX rA lore losons/n'l' clore
SFX rA lore losez/n'l'm' clore
SFX rB Y 1
SFX rB lore lôt clore
SFX rC Y 28
SFX rC clore clore/n'q'd' clore
SFX rC clore closant/n'q' clore
SFX rC clore clos/L'D'Q' clore
SFX rC clore close/L'D'Q' clore
SFX rC clore closes/D'Q' clore
SFX rC clore clos/n'j' clore
SFX rC clore clot/n'q' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rC clore closent/n'q' clore
SFX rC clore clorai/n'j' clore
SFX rC clore cloras/n' clore
SFX rC clore clora/n'q' clore
SFX rC clore clorons/n' clore
SFX rC clore clorez/n' clore
SFX rC clore cloront/n'q' clore
SFX rC clore clorais/n'j' clore
SFX rC clore clorait/n'q' clore
SFX rC clore clorions/n' clore
SFX rC clore cloriez/n' clore
SFX rC clore cloraient/n'q' clore
SFX rC clore close/n'q'j' clore
SFX rC clore closes/n' clore
SFX rC clore closions/n' clore
SFX rC clore closiez/n' clore
SFX rC clore clos/n' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rD N 3
SFX rD clore clos clore
SFX rD clore close clore
SFX rD clore closes clore
SFX tA Y 44
SFX tA re re/n'q'd'l'm't's' [dp]re
SFX tA re ant/n'q'l'm't's' [dp]re
SFX tA re u/L'D'Q' [dp]re
SFX tA re us/D'Q' [dp]re
SFX tA re ue/L'D'Q' [dp]re
SFX tA re ues/D'Q' [dp]re
SFX tA re s/n'q'j'l'm't' [dp]re
SFX tA dre d/n'q'l'm't's' dre
SFX tA pre pt/n'q'l'm't's' pre
SFX tA re ons/n'q'l't' [dp]re
SFX tA re ez/n'q'l'm' [dp]re
SFX tA re ent/n'q'l'm't's' [dp]re
SFX tA re ais/n'q'j'l'm't' [dp]re
SFX tA re ait/n'q'l'm't's' [dp]re
SFX tA re ions/n'q'l't' [dp]re
SFX tA re iez/n'q'l'm' [dp]re
SFX tA re aient/n'q'l'm't's' [dp]re
SFX tA re is/n'q'j'l'm't' [dp]re
SFX tA re it/n'q'l'm't's' [dp]re
SFX tA re îmes/n'q'l't' [dp]re
SFX tA re îtes/n'q'l'm' [dp]re
SFX tA re irent/n'q'l'm't's' [dp]re
SFX tA re rai/n'q'j'l'm't' [dp]re
SFX tA re ras/n'q'l'm't' [dp]re
SFX tA re ra/n'q'l'm't's' [dp]re
SFX tA re rons/n'q'l't' [dp]re
SFX tA re rez/n'q'l'm' [dp]re
SFX tA re ront/n'q'l'm't's' [dp]re
SFX tA re rais/n'q'j'l'm't' [dp]re
SFX tA re rait/n'q'l'm't's' [dp]re
SFX tA re rions/n'q'l't' [dp]re
SFX tA re riez/n'q'l'm' [dp]re
SFX tA re raient/n'q'l'm't's' [dp]re
SFX tA re e/n'q'j'l'm't's' [dp]re
SFX tA re es/n'l'm't' [dp]re
SFX tA re isse/n'q'j'l'm't' [dp]re
SFX tA re isses/n'q'l'm't' [dp]re
SFX tA re ît/n'q'l'm't's' [dp]re
SFX tA re issions/n'q'l't' [dp]re
SFX tA re issiez/n'q'l'm' [dp]re
SFX tA re issent/n'q'l'm't's' [dp]re
SFX tA re s/n'l'm't' [dp]re
SFX tA re ons/n'l' [dp]re
SFX tA re ez/n'l'm' [dp]re
SFX tD Y 43
SFX tD perdre perdre/m't's' perdre
SFX tD perdre perdant/m't's' perdre
SFX tD perdre perdu perdre
SFX tD perdre perdus perdre
SFX tD perdre perdue perdre
SFX tD perdre perdues perdre
SFX tD perdre perds/m't' perdre
SFX tD perdre perd/s' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tD perdre perdent/s' perdre
SFX tD perdre perdais/m't' perdre
SFX tD perdre perdait/s' perdre
SFX tD perdre perdions perdre
SFX tD perdre perdiez perdre
SFX tD perdre perdaient/s' perdre
SFX tD perdre perdis/m't' perdre
SFX tD perdre perdit/s' perdre
SFX tD perdre perdîmes perdre
SFX tD perdre perdîtes perdre
SFX tD perdre perdirent/s' perdre
SFX tD perdre perdrai/m' perdre
SFX tD perdre perdras/t' perdre
SFX tD perdre perdra/s' perdre
SFX tD perdre perdrons perdre
SFX tD perdre perdrez perdre
SFX tD perdre perdront/s' perdre
SFX tD perdre perdrais/m't' perdre
SFX tD perdre perdrait/s' perdre
SFX tD perdre perdrions perdre
SFX tD perdre perdriez perdre
SFX tD perdre perdraient/s' perdre
SFX tD perdre perde/m's' perdre
SFX tD perdre perdes/t' perdre
SFX tD perdre perdisse/m' perdre
SFX tD perdre perdisses/t' perdre
SFX tD perdre perdît/s' perdre
SFX tD perdre perdissions perdre
SFX tD perdre perdissiez perdre
SFX tD perdre perdissent/s' perdre
SFX tD perdre perds/t' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tE N 38
SFX tE dre dant dre
SFX tE dre ds dre
SFX tE dre d dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tE dre dent dre
SFX tE dre dais dre
SFX tE dre dait dre
SFX tE dre dions dre
SFX tE dre diez dre
SFX tE dre daient dre
SFX tE dre dis dre
SFX tE dre dit dre
SFX tE dre dîmes dre
SFX tE dre dîtes dre
SFX tE dre dirent dre
SFX tE dre drai dre
SFX tE dre dras dre
SFX tE dre dra dre
SFX tE dre drons dre
SFX tE dre drez dre
SFX tE dre dront dre
SFX tE dre drais dre
SFX tE dre drait dre
SFX tE dre drions dre
SFX tE dre driez dre
SFX tE dre draient dre
SFX tE dre de dre
SFX tE dre des dre
SFX tE dre disse dre
SFX tE dre disses dre
SFX tE dre dît dre
SFX tE dre dissions dre
SFX tE dre dissiez dre
SFX tE dre dissent dre
SFX tE dre ds dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tF Y 42
SFX tF rendre rendre/n'q'd'l'm't's' prendre
SFX tF rendre renant/n'q'l'm't's' prendre
SFX tF rendre ris/L'D'Q' prendre
SFX tF rendre rise/L'D'Q' prendre
SFX tF rendre rises/D'Q' prendre
SFX tF rendre rends/n'q'j'l'm't' prendre
SFX tF rendre rend/n'q'l'm't's' prendre
SFX tF rendre renons/n'q'l't' prendre
SFX tF rendre renez/n'q'l'm' prendre
SFX tF rendre rennent/n'q'l'm't's' prendre
SFX tF rendre renais/n'q'j'l'm't' prendre
SFX tF rendre renait/n'q'l'm't's' prendre
SFX tF rendre renions/n'q'l't' prendre
SFX tF rendre reniez/n'q'l'm' prendre
SFX tF rendre renaient/n'q'l'm't's' prendre
SFX tF rendre ris/n'q'j'l'm't' prendre
SFX tF rendre rit/n'q'l'm't's' prendre
SFX tF rendre rîmes/n'q'l't' prendre
SFX tF rendre rîtes/n'q'l'm' prendre
SFX tF rendre rirent/n'q'l'm't's' prendre
SFX tF rendre rendrai/n'q'j'l'm't' prendre
SFX tF rendre rendras/n'q'l'm't' prendre
SFX tF rendre rendra/n'q'l'm't's' prendre
SFX tF rendre rendrons/n'q'l't' prendre
SFX tF rendre rendrez/n'q'l'm' prendre
SFX tF rendre rendront/n'q'l'm't's' prendre
SFX tF rendre rendrais/n'q'j'l'm't' prendre
SFX tF rendre rendrait/n'q'l'm't's' prendre
SFX tF rendre rendrions/n'q'l't' prendre
SFX tF rendre rendriez/n'q'l'm' prendre
SFX tF rendre rendraient/n'q'l'm't's' prendre
SFX tF rendre renne/n'q'j'l'm't's' prendre
SFX tF rendre rennes/n'l'm't' prendre
SFX tF rendre risse/n'q'j'l'm't' prendre
SFX tF rendre risses/n'q'l'm't' prendre
SFX tF rendre rît/n'q'l'm't's' prendre
SFX tF rendre rissions/n'q'l't' prendre
SFX tF rendre rissiez/n'q'l'm' prendre
SFX tF rendre rissent/n'q'l'm't's' prendre
SFX tF rendre rends/n'l'm' prendre
SFX tF rendre renons/n'l' prendre
SFX tF rendre renez/n'l'm' prendre
SFX tG Y 42
SFX tG prendre prendre/m't's' prendre
SFX tG prendre prenant/m't's' prendre
SFX tG prendre pris/L'D'Q' prendre
SFX tG prendre prise/L'D'Q' prendre
SFX tG prendre prises/D'Q' prendre
SFX tG prendre prends/m't' prendre
SFX tG prendre prend/s' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tG prendre prennent/s' prendre
SFX tG prendre prenais/m't' prendre
SFX tG prendre prenait/s' prendre
SFX tG prendre prenions prendre
SFX tG prendre preniez prendre
SFX tG prendre prenaient/s' prendre
SFX tG prendre pris/m't' prendre
SFX tG prendre prit/s' prendre
SFX tG prendre prîmes prendre
SFX tG prendre prîtes prendre
SFX tG prendre prirent/s' prendre
SFX tG prendre prendrai/m' prendre
SFX tG prendre prendras/t' prendre
SFX tG prendre prendra/s' prendre
SFX tG prendre prendrons prendre
SFX tG prendre prendrez prendre
SFX tG prendre prendront/s' prendre
SFX tG prendre prendrais/m't' prendre
SFX tG prendre prendrait/s' prendre
SFX tG prendre prendrions prendre
SFX tG prendre prendriez prendre
SFX tG prendre prendraient/s' prendre
SFX tG prendre prenne/m's' prendre
SFX tG prendre prennes/t' prendre
SFX tG prendre prisse/m' prendre
SFX tG prendre prisses/t' prendre
SFX tG prendre prît/s' prendre
SFX tG prendre prissions prendre
SFX tG prendre prissiez prendre
SFX tG prendre prissent/s' prendre
SFX tG prendre prends/t' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tM N 31
SFX tM outre outant foutre
SFX tM outre outu foutre
SFX tM outre outus foutre
SFX tM outre outue foutre
SFX tM outre outues foutre
SFX tM outre ous foutre
SFX tM outre out foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tM outre outent foutre
SFX tM outre outais foutre
SFX tM outre outait foutre
SFX tM outre outions foutre
SFX tM outre outiez foutre
SFX tM outre outaient foutre
SFX tM outre outrai foutre
SFX tM outre outras foutre
SFX tM outre outra foutre
SFX tM outre outrons foutre
SFX tM outre outrez foutre
SFX tM outre outront foutre
SFX tM outre outrais foutre
SFX tM outre outrait foutre
SFX tM outre outrions foutre
SFX tM outre outriez foutre
SFX tM outre outraient foutre
SFX tM outre oute foutre
SFX tM outre outes foutre
SFX tM outre ous foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tU N 4
SFX tU istre issu tistre
SFX tU istre issus tistre
SFX tU istre issue tistre
SFX tU istre issues tistre
SFX uA Y 45
SFX uA tre tre/n'q'd'l'm't's' tre
SFX uA tre tant/n'q'l'm't's' tre
SFX uA tre tu/L'D'Q' tre
SFX uA tre tus/D'Q' tre
SFX uA tre tue/L'D'Q' tre
SFX uA tre tues/D'Q' tre
SFX uA ttre ts/n'q'j'l'm't' ttre
SFX uA ttre t/n'q'l'm't's' ttre
SFX uA tre ts/n'q'j'l'm't' embatre
SFX uA tre t/n'q'l'm't's' embatre
SFX uA tre tons/n'q'l't' tre
SFX uA tre tez/n'q'l'm' tre
SFX uA tre tent/n'q'l'm't's' tre
SFX uA tre tais/n'q'j'l'm't' tre
SFX uA tre tait/n'q'l'm't's' tre
SFX uA tre tions/n'q'l't' tre
SFX uA tre tiez/n'q'l'm' tre
SFX uA tre taient/n'q'l'm't's' tre
SFX uA tre tis/n'q'j'l'm't' tre
SFX uA tre tit/n'q'l'm't's' tre
SFX uA tre tîmes/n'q'l't' tre
SFX uA tre tîtes/n'q'l'm' tre
SFX uA tre tirent/n'q'l'm't's' tre
SFX uA tre trai/n'q'j'l'm't' tre
SFX uA tre tras/n'q'l'm't' tre
SFX uA tre tra/n'q'l'm't's' tre
SFX uA tre trons/n'q'l't' tre
SFX uA tre trez/n'q'l'm' tre
SFX uA tre tront/n'q'l'm't's' tre
SFX uA tre trais/n'q'j'l'm't' tre
SFX uA tre trait/n'q'l'm't's' tre
SFX uA tre trions/n'q'l't' tre
SFX uA tre triez/n'q'l'm' tre
SFX uA tre traient/n'q'l'm't's' tre
SFX uA tre te/n'q'j'l'm't's' tre
SFX uA tre tes/n'l'm't' tre
SFX uA tre tisse/n'q'j'l'm't' tre
SFX uA tre tisses/n'q'l'm't' tre
SFX uA tre tît/n'q'l'm't's' tre
SFX uA tre tissions/n'q'l't' tre
SFX uA tre tissiez/n'q'l'm' tre
SFX uA tre tissent/n'q'l'm't's' tre
SFX uA tre s/n'l'm't' tre
SFX uA tre tons/n'l' tre
SFX uA tre tez/n'l'm' tre
SFX uC Y 43
SFX uC battre battre/m't's' battre
SFX uC battre battant/m't's' battre
SFX uC battre battu battre
SFX uC battre battus battre
SFX uC battre battue battre
SFX uC battre battues battre
SFX uC battre bats/m't' battre
SFX uC battre bat/s' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uC battre battent/s' battre
SFX uC battre battais/m't' battre
SFX uC battre battait/s' battre
SFX uC battre battions battre
SFX uC battre battiez battre
SFX uC battre battaient/s' battre
SFX uC battre battis/m't' battre
SFX uC battre battit/s' battre
SFX uC battre battîmes battre
SFX uC battre battîtes battre
SFX uC battre battirent/s' battre
SFX uC battre battrai/m' battre
SFX uC battre battras/t' battre
SFX uC battre battra/s' battre
SFX uC battre battrons battre
SFX uC battre battrez battre
SFX uC battre battront/s' battre
SFX uC battre battrais/m't' battre
SFX uC battre battrait/s' battre
SFX uC battre battrions battre
SFX uC battre battriez battre
SFX uC battre battraient/s' battre
SFX uC battre batte/m's' battre
SFX uC battre battes/t' battre
SFX uC battre battisse/m' battre
SFX uC battre battisses/t' battre
SFX uC battre battît/s' battre
SFX uC battre battissions battre
SFX uC battre battissiez battre
SFX uC battre battissent/s' battre
SFX uC battre bats/t' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uD Y 33
SFX uD battre battre/s' battre
SFX uD battre battant/s' battre
SFX uD battre battu battre
SFX uD battre battus battre
SFX uD battre battue battre
SFX uD battre battues battre
SFX uD battre bat/s' battre
SFX uD battre battons battre
SFX uD battre battez battre
SFX uD battre battent/s' battre
SFX uD battre battait/s' battre
SFX uD battre battions battre
SFX uD battre battiez battre
SFX uD battre battaient/s' battre
SFX uD battre battit/s' battre
SFX uD battre battîmes battre
SFX uD battre battîtes battre
SFX uD battre battirent/s' battre
SFX uD battre battra/s' battre
SFX uD battre battrons battre
SFX uD battre battrez battre
SFX uD battre battront/s' battre
SFX uD battre battrait/s' battre
SFX uD battre battrions battre
SFX uD battre battriez battre
SFX uD battre battraient/s' battre
SFX uD battre batte/s' battre
SFX uD battre battît/s' battre
SFX uD battre battissions battre
SFX uD battre battissiez battre
SFX uD battre battissent/s' battre
SFX uD battre battons-nous battre
SFX uD battre battez-vous battre
SFX vA Y 42
SFX vA ettre ettre/n'q'd'l'm't's' mettre
SFX vA ettre ettant/n'q'l'm't's' mettre
SFX vA ettre is/L'D'Q' mettre
SFX vA ettre ise/L'D'Q' mettre
SFX vA ettre ises/D'Q' mettre
SFX vA ettre ets/n'q'j'l'm't' mettre
SFX vA ettre et/n'q'l'm't's' mettre
SFX vA ettre ettons/n'q'l't' mettre
SFX vA ettre ettez/n'q'l'm' mettre
SFX vA ettre ettent/n'q'l'm't's' mettre
SFX vA ettre ettais/n'q'j'l'm't' mettre
SFX vA ettre ettait/n'q'l'm't's' mettre
SFX vA ettre ettions/n'q'l't' mettre
SFX vA ettre ettiez/n'q'l'm' mettre
SFX vA ettre ettaient/n'q'l'm't's' mettre
SFX vA ettre is/n'q'j'l'm't' mettre
SFX vA ettre it/n'q'l'm't's' mettre
SFX vA ettre îmes/n'q'l't' mettre
SFX vA ettre îtes/n'q'l'm' mettre
SFX vA ettre irent/n'q'l'm't's' mettre
SFX vA ettre ettrai/n'q'j'l'm't' mettre
SFX vA ettre ettras/n'q'l'm't' mettre
SFX vA ettre ettra/n'q'l'm't's' mettre
SFX vA ettre ettrons/n'q'l't' mettre
SFX vA ettre ettrez/n'q'l'm' mettre
SFX vA ettre ettront/n'q'l'm't's' mettre
SFX vA ettre ettrais/n'q'j'l'm't' mettre
SFX vA ettre ettrait/n'q'l'm't's' mettre
SFX vA ettre ettrions/n'q'l't' mettre
SFX vA ettre ettriez/n'q'l'm' mettre
SFX vA ettre ettraient/n'q'l'm't's' mettre
SFX vA ettre ette/n'q'j'l'm't's' mettre
SFX vA ettre ettes/n'l'm't' mettre
SFX vA ettre isse/n'q'j'l'm't' mettre
SFX vA ettre isses/n'q'l'm't' mettre
SFX vA ettre ît/n'q'l'm't's' mettre
SFX vA ettre issions/n'q'l't' mettre
SFX vA ettre issiez/n'q'l'm' mettre
SFX vA ettre issent/n'q'l'm't's' mettre
SFX vA ettre ets/n'l'm't' mettre
SFX vA ettre ettons/n'l' mettre
SFX vA ettre ettez/n'l'm' mettre
SFX vC Y 42
SFX vC mettre mettre/m't's' mettre
SFX vC mettre mettant/m't's' mettre
SFX vC mettre mis mettre
SFX vC mettre mise mettre
SFX vC mettre mises mettre
SFX vC mettre mets/m't' mettre
SFX vC mettre met/s' mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX vC mettre mettent/s' mettre
SFX vC mettre mettais/m't' mettre
SFX vC mettre mettait/s' mettre
SFX vC mettre mettions mettre
SFX vC mettre mettiez mettre
SFX vC mettre mettaient/s' mettre
SFX vC mettre mis/m't' mettre
SFX vC mettre mit/s' mettre
SFX vC mettre mîmes mettre
SFX vC mettre mîtes mettre
SFX vC mettre mirent/s' mettre
SFX vC mettre mettrai/m' mettre
SFX vC mettre mettras/t' mettre
SFX vC mettre mettra/s' mettre
SFX vC mettre mettrons mettre
SFX vC mettre mettrez mettre
SFX vC mettre mettront/s' mettre
SFX vC mettre mettrais/m't' mettre
SFX vC mettre mettrait/s' mettre
SFX vC mettre mettrions mettre
SFX vC mettre mettriez mettre
SFX vC mettre mettraient/s' mettre
SFX vC mettre mette/m's' mettre
SFX vC mettre mettes/t' mettre
SFX vC mettre misse/m' mettre
SFX vC mettre misses/t' mettre
SFX vC mettre mît/s' mettre
SFX vC mettre missions mettre
SFX vC mettre missiez mettre
SFX vC mettre missent/s' mettre
SFX vC mettre mets mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX wA N 42
SFX wA eindre eignant eindre
SFX wA eindre eint eindre
SFX wA eindre eints eindre
SFX wA eindre einte eindre
SFX wA eindre eintes eindre
SFX wA eindre eins eindre
SFX wA eindre eint eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wA eindre eignent eindre
SFX wA eindre eignais eindre
SFX wA eindre eignait eindre
SFX wA eindre eignions eindre
SFX wA eindre eigniez eindre
SFX wA eindre eignaient eindre
SFX wA eindre eignis eindre
SFX wA eindre eignit eindre
SFX wA eindre eignîmes eindre
SFX wA eindre eignîtes eindre
SFX wA eindre eignirent eindre
SFX wA eindre eindrai eindre
SFX wA eindre eindras eindre
SFX wA eindre eindra eindre
SFX wA eindre eindrons eindre
SFX wA eindre eindrez eindre
SFX wA eindre eindront eindre
SFX wA eindre eindrais eindre
SFX wA eindre eindrait eindre
SFX wA eindre eindrions eindre
SFX wA eindre eindriez eindre
SFX wA eindre eindraient eindre
SFX wA eindre eigne eindre
SFX wA eindre eignes eindre
SFX wA eindre eignisse eindre
SFX wA eindre eignisses eindre
SFX wA eindre eignît eindre
SFX wA eindre eignissions eindre
SFX wA eindre eignissiez eindre
SFX wA eindre eignissent eindre
SFX wA eindre eins eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wB Y 43
SFX wB indre indre/n'q'd'l'm't's' indre
SFX wB indre ignant/n'q'l'm't's' indre
SFX wB indre int/L'D'Q' indre
SFX wB indre ints/D'Q' indre
SFX wB indre inte/L'D'Q' indre
SFX wB indre intes/D'Q' indre
SFX wB indre ins/n'q'j'l'm't' indre
SFX wB indre int/n'q'l'm't's' indre
SFX wB indre ignons/n'q'l't' indre
SFX wB indre ignez/n'q'l'm' indre
SFX wB indre ignent/n'q'l'm't's' indre
SFX wB indre ignais/n'q'j'l'm't' indre
SFX wB indre ignait/n'q'l'm't's' indre
SFX wB indre ignions/n'q'l't' indre
SFX wB indre igniez/n'q'l'm' indre
SFX wB indre ignaient/n'q'l'm't's' indre
SFX wB indre ignis/n'q'j'l'm't' indre
SFX wB indre ignit/n'q'l'm't's' indre
SFX wB indre ignîmes/n'q'l't' indre
SFX wB indre ignîtes/n'q'l'm' indre
SFX wB indre ignirent/n'q'l'm't's' indre
SFX wB indre indrai/n'q'j'l'm't' indre
SFX wB indre indras/n'q'l'm't' indre
SFX wB indre indra/n'q'l'm't's' indre
SFX wB indre indrons/n'q'l't' indre
SFX wB indre indrez/n'q'l'm' indre
SFX wB indre indront/n'q'l'm't's' indre
SFX wB indre indrais/n'q'j'l'm't' indre
SFX wB indre indrait/n'q'l'm't's' indre
SFX wB indre indrions/n'q'l't' indre
SFX wB indre indriez/n'q'l'm' indre
SFX wB indre indraient/n'q'l'm't's' indre
SFX wB indre igne/n'q'j'l'm't's' indre
SFX wB indre ignes/n'l'm't' indre
SFX wB indre ignisse/n'q'j'l'm't' indre
SFX wB indre ignisses/n'q'l'm't' indre
SFX wB indre ignît/n'q'l'm't's' indre
SFX wB indre ignissions/n'q'l't' indre
SFX wB indre ignissiez/n'q'l'm' indre
SFX wB indre ignissent/n'q'l'm't's' indre
SFX wB indre ins/n'l'm't' indre
SFX wB indre ignons/n'l' indre
SFX wB indre ignez/n'l'm' indre
SFX wD N 45
SFX wD aire aisant faire
SFX wD aire ait faire
SFX wD aire aits faire
SFX wD aire aite faire
SFX wD aire aites faire
SFX wD aire ais faire
SFX wD aire ait faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wD aire ont faire
SFX wD aire aisais faire
SFX wD aire aisait faire
SFX wD aire aisions faire
SFX wD aire aisiez faire
SFX wD aire aisaient faire
SFX wD aire is faire
SFX wD aire it faire
SFX wD aire îmes faire
SFX wD aire îtes faire
SFX wD aire irent faire
SFX wD aire erai faire
SFX wD aire eras faire
SFX wD aire era faire
SFX wD aire erons faire
SFX wD aire erez faire
SFX wD aire eront faire
SFX wD aire erais faire
SFX wD aire erait faire
SFX wD aire erions faire
SFX wD aire eriez faire
SFX wD aire eraient faire
SFX wD aire asse faire
SFX wD aire asses faire
SFX wD aire assions faire
SFX wD aire assiez faire
SFX wD aire assent faire
SFX wD aire isse faire
SFX wD aire isses faire
SFX wD aire ît faire
SFX wD aire issions faire
SFX wD aire issiez faire
SFX wD aire issent faire
SFX wD aire ais faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wF N 13
SFX wF faire faisant faire
SFX wF faire fait faire
SFX wF faire faits faire
SFX wF faire faite faire
SFX wF faire faites faire
SFX wF faire fais faire
SFX wF faire fait faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wF faire font faire
SFX wF faire fais faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wG N 5
SFX wG aire aisant faire
SFX wG aire ait faire
SFX wG aire aits faire
SFX wG aire aite faire
SFX wG aire aites faire
SFX wL Y 32
SFX wL raire raire/n'q'd'l'm't's' traire
SFX wL raire rayant/n'q'l'm't's' traire
SFX wL raire rait/L'D'Q' traire
SFX wL raire raits/D'Q' traire
SFX wL raire raite/L'D'Q' traire
SFX wL raire raites/D'Q' traire
SFX wL raire rais/n'q'j'l'm't' traire
SFX wL raire rait/n'q'l'm't's' traire
SFX wL raire rayons/n'q'l't' traire
SFX wL raire rayez/n'q'l'm' traire
SFX wL raire raient/n'q'l'm't's' traire
SFX wL raire rayais/n'q'j'l'm't' traire
SFX wL raire rayait/n'q'l'm't's' traire
SFX wL raire rayions/n'q'l't' traire
SFX wL raire rayiez/n'q'l'm' traire
SFX wL raire rayaient/n'q'l'm't's' traire
SFX wL raire rairai/n'q'j'l'm't' traire
SFX wL raire rairas/n'q'l'm't' traire
SFX wL raire raira/n'q'l'm't's' traire
SFX wL raire rairons/n'q'l't' traire
SFX wL raire rairez/n'q'l'm' traire
SFX wL raire rairont/n'q'l'm't's' traire
SFX wL raire rairais/n'q'j'l'm't' traire
SFX wL raire rairait/n'q'l'm't's' traire
SFX wL raire rairions/n'q'l't' traire
SFX wL raire rairiez/n'q'l'm' traire
SFX wL raire rairaient/n'q'l'm't's' traire
SFX wL raire raie/n'q'j'l'm't's' traire
SFX wL raire raies/n'q'l'm't' traire
SFX wL raire rais/n'l'm't' traire
SFX wL raire rayons/n'l' traire
SFX wL raire rayez/n'l'm' traire
SFX wM N 28
SFX wM aire ayant raire
SFX wM aire ait raire
SFX wM aire ais raire
SFX wM aire ait raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wM aire aient raire
SFX wM aire ayais raire
SFX wM aire ayait raire
SFX wM aire ayions raire
SFX wM aire ayiez raire
SFX wM aire ayaient raire
SFX wM aire airai raire
SFX wM aire airas raire
SFX wM aire aira raire
SFX wM aire airons raire
SFX wM aire airez raire
SFX wM aire airont raire
SFX wM aire airais raire
SFX wM aire airait raire
SFX wM aire airions raire
SFX wM aire airiez raire
SFX wM aire airaient raire
SFX wM aire aie raire
SFX wM aire aies raire
SFX wM aire ais raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wN N 39
SFX wN aire aisant aire
SFX wN aire ais aire
SFX wN aire ait taire
SFX wN aire aît plaire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wN aire aisent aire
SFX wN aire aisais aire
SFX wN aire aisait aire
SFX wN aire aisions aire
SFX wN aire aisiez aire
SFX wN aire aisaient aire
SFX wN aire us aire
SFX wN aire ut aire
SFX wN aire ûmes aire
SFX wN aire ûtes aire
SFX wN aire urent aire
SFX wN aire airai aire
SFX wN aire airas aire
SFX wN aire aira aire
SFX wN aire airons aire
SFX wN aire airez aire
SFX wN aire airont aire
SFX wN aire airais aire
SFX wN aire airait aire
SFX wN aire airions aire
SFX wN aire airiez aire
SFX wN aire airaient aire
SFX wN aire aise aire
SFX wN aire aises aire
SFX wN aire usse aire
SFX wN aire usses aire
SFX wN aire ût aire
SFX wN aire ussions aire
SFX wN aire ussiez aire
SFX wN aire ussent aire
SFX wN aire ais aire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wO N 42
SFX wO aindre aignant aindre
SFX wO aindre aint aindre
SFX wO aindre aints aindre
SFX wO aindre ainte aindre
SFX wO aindre aintes aindre
SFX wO aindre ains aindre
SFX wO aindre aint aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wO aindre aignent aindre
SFX wO aindre aignais aindre
SFX wO aindre aignait aindre
SFX wO aindre aignions aindre
SFX wO aindre aigniez aindre
SFX wO aindre aignaient aindre
SFX wO aindre aignis aindre
SFX wO aindre aignit aindre
SFX wO aindre aignîmes aindre
SFX wO aindre aignîtes aindre
SFX wO aindre aignirent aindre
SFX wO aindre aindrai aindre
SFX wO aindre aindras aindre
SFX wO aindre aindra aindre
SFX wO aindre aindrons aindre
SFX wO aindre aindrez aindre
SFX wO aindre aindront aindre
SFX wO aindre aindrais aindre
SFX wO aindre aindrait aindre
SFX wO aindre aindrions aindre
SFX wO aindre aindriez aindre
SFX wO aindre aindraient aindre
SFX wO aindre aigne aindre
SFX wO aindre aignes aindre
SFX wO aindre aignisse aindre
SFX wO aindre aignisses aindre
SFX wO aindre aignît aindre
SFX wO aindre aignissions aindre
SFX wO aindre aignissiez aindre
SFX wO aindre aignissent aindre
SFX wO aindre ains aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wP N 42
SFX wP aincre ainquant vaincre
SFX wP aincre aincu vaincre
SFX wP aincre aincus vaincre
SFX wP aincre aincue vaincre
SFX wP aincre aincues vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainc vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wP aincre ainquent vaincre
SFX wP aincre ainquais vaincre
SFX wP aincre ainquait vaincre
SFX wP aincre ainquions vaincre
SFX wP aincre ainquiez vaincre
SFX wP aincre ainquaient vaincre
SFX wP aincre ainquis vaincre
SFX wP aincre ainquit vaincre
SFX wP aincre ainquîmes vaincre
SFX wP aincre ainquîtes vaincre
SFX wP aincre ainquirent vaincre
SFX wP aincre aincrai vaincre
SFX wP aincre aincras vaincre
SFX wP aincre aincra vaincre
SFX wP aincre aincrons vaincre
SFX wP aincre aincrez vaincre
SFX wP aincre aincront vaincre
SFX wP aincre aincrais vaincre
SFX wP aincre aincrait vaincre
SFX wP aincre aincrions vaincre
SFX wP aincre aincriez vaincre
SFX wP aincre aincraient vaincre
SFX wP aincre ainque vaincre
SFX wP aincre ainques vaincre
SFX wP aincre ainquisse vaincre
SFX wP aincre ainquisses vaincre
SFX wP aincre ainquît vaincre
SFX wP aincre ainquissions vaincre
SFX wP aincre ainquissiez vaincre
SFX wP aincre ainquissent vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wQ Y 42
SFX wQ tre tre/n'q'd'm't's' tre
SFX wQ aître aissant/n'q'd'm't's' aître
SFX wQ aître ais/n'q'j'm't' aître
SFX wQ aître aît/n'q'm't's' aître
SFX wQ aître aissons/n'q't' aître
SFX wQ aître aissez/n'q'm' aître
SFX wQ aître aissent/n'q'm't's' aître
SFX wQ aître aissais/n'q'j'm't' aître
SFX wQ aître aissait/n'q'm't's' aître
SFX wQ aître aissions/n'q't' aître
SFX wQ aître aissiez/n'q'm' aître
SFX wQ aître aissaient/n'q'm't's' aître
SFX wQ aître us/n'q'j'm't' aître
SFX wQ aître ut/n'q'm't's' aître
SFX wQ aître ûmes/n'q't' aître
SFX wQ aître ûtes/n'q'm' aître
SFX wQ aître urent/n'q'm't's' aître
SFX wQ tre trai/n'q'j'm't' tre
SFX wQ tre tras/n'q'm't' tre
SFX wQ tre tra/n'q'm't's' tre
SFX wQ tre trons/n'q't' tre
SFX wQ tre trez/n'q'm' tre
SFX wQ tre tront/n'q'm't's' tre
SFX wQ tre trais/n'q'j'm't' tre
SFX wQ tre trait/n'q'm't's' tre
SFX wQ tre trions/n'q't' tre
SFX wQ tre triez/n'q'm' tre
SFX wQ tre traient/n'q'm't's' tre
SFX wQ aître aisse/n'q'j'm't's' aître
SFX wQ aître aisses/n'q'm't' aître
SFX wQ aître usse/n'q'j'm't' aître
SFX wQ aître usses/n'q'm't' aître
SFX wQ aître ût/n'q'm't's' aître
SFX wQ aître ussions/n'q't' aître
SFX wQ aître ussiez/n'q'm' aître
SFX wQ aître ussent/n'q'm't's' aître
SFX wQ aître ais/n'm' paraître
SFX wQ aître ais connaître
SFX wQ aître aissons/n' paraître
SFX wQ aître aissons connaître
SFX wQ aître aissez/n'm' paraître
SFX wQ aître aissez connaître
SFX wR N 42
SFX wR aître aissant naître
SFX wR aître é naître
SFX wR aître és naître
SFX wR aître ée naître
SFX wR aître ées naître
SFX wR aître ais naître
SFX wR aître aît naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wR aître aissent naître
SFX wR aître aissais naître
SFX wR aître aissait naître
SFX wR aître aissions naître
SFX wR aître aissiez naître
SFX wR aître aissaient naître
SFX wR aître aquis naître
SFX wR aître aquit naître
SFX wR aître aquîmes naître
SFX wR aître aquîtes naître
SFX wR aître aquirent naître
SFX wR tre trai tre
SFX wR tre tras tre
SFX wR tre tra tre
SFX wR tre trons tre
SFX wR tre trez tre
SFX wR tre tront tre
SFX wR tre trais tre
SFX wR tre trait tre
SFX wR tre trions tre
SFX wR tre triez tre
SFX wR tre traient tre
SFX wR aître aisse naître
SFX wR aître aisses naître
SFX wR aître aquisse naître
SFX wR aître aquisses naître
SFX wR aître aquît naître
SFX wR aître aquissions naître
SFX wR aître aquissiez naître
SFX wR aître aquissent naître
SFX wR aître ais naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wS N 42
SFX wS aître aissant paître
SFX wS aître u repaître
SFX wS aître us repaître
SFX wS aître ue repaître
SFX wS aître ues repaître
SFX wS aître ais paître
SFX wS aître aît paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wS aître aissent paître
SFX wS aître aissais paître
SFX wS aître aissait paître
SFX wS aître aissions paître
SFX wS aître aissiez paître
SFX wS aître aissaient paître
SFX wS aître us repaître
SFX wS aître ut repaître
SFX wS aître ûmes repaître
SFX wS aître ûtes repaître
SFX wS aître urent repaître
SFX wS tre trai tre
SFX wS tre tras tre
SFX wS tre tra tre
SFX wS tre trons tre
SFX wS tre trez tre
SFX wS tre tront tre
SFX wS tre trais tre
SFX wS tre trait tre
SFX wS tre trions tre
SFX wS tre triez tre
SFX wS tre traient tre
SFX wS aître aisse paître
SFX wS aître aisses paître
SFX wS aître usse repaître
SFX wS aître usses repaître
SFX wS aître ût repaître
SFX wS aître ussions repaître
SFX wS aître ussiez repaître
SFX wS aître ussent repaître
SFX wS aître ais paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wT N 46
SFX wT roître roissant croître
SFX wT roître rû recroître
SFX wT roître rûs recroître
SFX wT roître rûe recroître
SFX wT roître rûes recroître
SFX wT roître ru décroître
SFX wT roître rus décroître
SFX wT roître rue décroître
SFX wT roître rues décroître
SFX wT roître rois .croître
SFX wT roître roît .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wT roître roissent croître
SFX wT roître roissais croître
SFX wT roître roissait croître
SFX wT roître roissions croître
SFX wT roître roissiez croître
SFX wT roître roissaient croître
SFX wT roître rus .croître
SFX wT roître rut .croître
SFX wT roître rûmes croître
SFX wT roître rûtes croître
SFX wT roître rurent .croître
SFX wT tre trai tre
SFX wT tre tras tre
SFX wT tre tra tre
SFX wT tre trons tre
SFX wT tre trez tre
SFX wT tre tront tre
SFX wT tre trais tre
SFX wT tre trait tre
SFX wT tre trions tre
SFX wT tre triez tre
SFX wT tre traient tre
SFX wT roître roisse croître
SFX wT roître roisses croître
SFX wT roître russe .croître
SFX wT roître russes .croître
SFX wT roître rût croître
SFX wT roître russions .croître
SFX wT roître russiez .croître
SFX wT roître russent .croître
SFX wT roître rois .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wU N 15
SFX wU roître rû croître
SFX wU roître rûs croître
SFX wU roître rûe croître
SFX wU roître rûes croître
SFX wU roître roîs croître
SFX wU roître roît croître
SFX wU roître rûs croître
SFX wU roître rût croître
SFX wU roître rûrent croître
SFX wU roître rûsse croître
SFX wU roître rûsses croître
SFX wU roître rûssions croître
SFX wU roître rûssiez croître
SFX wU roître rûssent croître
SFX wU roître roîs croître
SFX wV Y 43
SFX wV tre tre/n'q'd'l'm't's' tre
SFX wV croître croissant/n'q'd'l'm't's' croître
SFX wV croître cru/L'D'Q' croître
SFX wV croître crus/D'Q' croître
SFX wV croître crue/L'D'Q' croître
SFX wV croître crues/D'Q' croître
SFX wV croître crois/n'q'j'l'm't' croître
SFX wV croître croît/n'q'l's' croître
SFX wV croître croissons/n'q'l' croître
SFX wV croître croissez/n'q'l' croître
SFX wV croître croissent/n'q'l's' croître
SFX wV croître croissais/n'q'j'l'm't' croître
SFX wV croître croissait/n'q'l's' croître
SFX wV croître croissions/n'q'l' croître
SFX wV croître croissiez/n'q'l' croître
SFX wV croître croissaient/n'q'l's' croître
SFX wV croître crus/n'q'j'l'm't' croître
SFX wV croître crut/n'q'l's' croître
SFX wV croître crûmes/n'q'l' croître
SFX wV croître crûtes/n'q'l' croître
SFX wV croître crurent/n'q'l's' croître
SFX wV tre trai/n'q'j'l'm' tre
SFX wV tre tras/n'q'l't' tre
SFX wV tre tra/n'q'l's' tre
SFX wV tre trons/n'q'l' tre
SFX wV tre trez/n'q'l' tre
SFX wV tre tront/n'q'l's' tre
SFX wV tre trais/n'q'j'l'm't' tre
SFX wV tre trait/n'q'l's' tre
SFX wV tre trions/n'q'l' tre
SFX wV tre triez/n'q'l' tre
SFX wV tre traient/n'q'l's' tre
SFX wV croître croisse/n'q'j'l'm's' croître
SFX wV croître croisses/n'q'l't' croître
SFX wV croître crusse/n'q'j'l'm' croître
SFX wV croître crusses/n'q'l't' croître
SFX wV croître crût/n'q'l's' croître
SFX wV croître crussions/n'q'l' croître
SFX wV croître crussiez/n'q'l' croître
SFX wV croître crussent/n'q'l's' croître
SFX wV croître crois/n'l'm' croître
SFX wV croître croissons/n'l' croître
SFX wV croître croissez/n'l'm' croître
SFX xA N 42
SFX xA roire royant croire
SFX xA roire ru croire
SFX xA roire rus croire
SFX xA roire rue croire
SFX xA roire rues croire
SFX xA roire rois croire
SFX xA roire roit croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xA roire roient croire
SFX xA roire royais croire
SFX xA roire royait croire
SFX xA roire royions croire
SFX xA roire royiez croire
SFX xA roire royaient croire
SFX xA roire rus croire
SFX xA roire rut croire
SFX xA roire rûmes croire
SFX xA roire rûtes croire
SFX xA roire rurent croire
SFX xA roire roirai croire
SFX xA roire roiras croire
SFX xA roire roira croire
SFX xA roire roirons croire
SFX xA roire roirez croire
SFX xA roire roiront croire
SFX xA roire roirais croire
SFX xA roire roirait croire
SFX xA roire roirions croire
SFX xA roire roiriez croire
SFX xA roire roiraient croire
SFX xA roire roie croire
SFX xA roire roies croire
SFX xA roire russe croire
SFX xA roire russes croire
SFX xA roire rût croire
SFX xA roire russions croire
SFX xA roire russiez croire
SFX xA roire russent croire
SFX xA roire rois croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xC N 42
SFX xC oire uvant boire
SFX xC oire u boire
SFX xC oire us boire
SFX xC oire ue boire
SFX xC oire ues boire
SFX xC oire ois boire
SFX xC oire oit boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xC oire oivent boire
SFX xC oire uvais boire
SFX xC oire uvait boire
SFX xC oire uvions boire
SFX xC oire uviez boire
SFX xC oire uvaient boire
SFX xC oire us boire
SFX xC oire ut boire
SFX xC oire ûmes boire
SFX xC oire ûtes boire
SFX xC oire urent boire
SFX xC oire oirai boire
SFX xC oire oiras boire
SFX xC oire oira boire
SFX xC oire oirons boire
SFX xC oire oirez boire
SFX xC oire oiront boire
SFX xC oire oirais boire
SFX xC oire oirait boire
SFX xC oire oirions boire
SFX xC oire oiriez boire
SFX xC oire oiraient boire
SFX xC oire oive boire
SFX xC oire oives boire
SFX xC oire usse boire
SFX xC oire usses boire
SFX xC oire ût boire
SFX xC oire ussions boire
SFX xC oire ussiez boire
SFX xC oire ussent boire
SFX xC oire ois boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xD Y 43
SFX xD boire boire/m't's' boire
SFX xD boire buvant/m't's' boire
SFX xD boire bu boire
SFX xD boire bus boire
SFX xD boire bue boire
SFX xD boire bues boire
SFX xD boire bois/m't' boire
SFX xD boire boit/s' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xD boire boivent/s' boire
SFX xD boire buvais/m't' boire
SFX xD boire buvait/s' boire
SFX xD boire buvions boire
SFX xD boire buviez boire
SFX xD boire buvaient/s' boire
SFX xD boire bus/m't' boire
SFX xD boire but/s' boire
SFX xD boire bûmes boire
SFX xD boire bûtes boire
SFX xD boire burent/s' boire
SFX xD boire boirai/m' boire
SFX xD boire boiras/t' boire
SFX xD boire boira/s' boire
SFX xD boire boirons boire
SFX xD boire boirez boire
SFX xD boire boiront/s' boire
SFX xD boire boirais/m't' boire
SFX xD boire boirait/s' boire
SFX xD boire boirions boire
SFX xD boire boiriez boire
SFX xD boire boiraient/s' boire
SFX xD boire boive/m's' boire
SFX xD boire boives/t' boire
SFX xD boire busse/m' boire
SFX xD boire busses/t' boire
SFX xD boire bût/s' boire
SFX xD boire bussions boire
SFX xD boire bussiez boire
SFX xD boire bussent/s' boire
SFX xD boire bois/t' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xJ N 3
SFX xJ clure clus clure
SFX xJ clure cluse clure
SFX xJ clure cluses clure
SFX xK Y 40
SFX xK clure clure/n'q'd'l'm't's' clure
SFX xK clure cluant/n'q'l'm't's' clure
SFX xK clure clus/L'D'Q' clure
SFX xK clure cluse/L'D'Q' clure
SFX xK clure cluses/D'Q' clure
SFX xK clure clus/n'q'j'l' clure
SFX xK clure clut/n'q'l' clure
SFX xK clure cluons/n'q'l' clure
SFX xK clure cluez/n'q'l' clure
SFX xK clure cluent/n'q'l' clure
SFX xK clure cluais/n'q'j'l' clure
SFX xK clure cluait/n'q'l' clure
SFX xK clure cluions/n'q'l' clure
SFX xK clure cluiez/n'q'l' clure
SFX xK clure cluaient/n'q'l' clure
SFX xK clure clûmes/n'q'l' clure
SFX xK clure clûtes/n'q'l' clure
SFX xK clure clurent/n'q'l' clure
SFX xK clure clurai/n'q'j'l' clure
SFX xK clure cluras/n'q'l' clure
SFX xK clure clura/n'q'l' clure
SFX xK clure clurons/n'q'l' clure
SFX xK clure clurez/n'q'l' clure
SFX xK clure cluront/n'q'l' clure
SFX xK clure clurais/n'q'j'l' clure
SFX xK clure clurait/n'q'l' clure
SFX xK clure clurions/n'q'l' clure
SFX xK clure cluriez/n'q'l' clure
SFX xK clure cluraient/n'q'l' clure
SFX xK clure clue/n'q'j'l' clure
SFX xK clure clues/n'q'l' clure
SFX xK clure clusse/n'q'j'l' clure
SFX xK clure clusses/n'q'l' clure
SFX xK clure clût/n'q'l' clure
SFX xK clure clussions/n'q'l' clure
SFX xK clure clussiez/n'q'l' clure
SFX xK clure clussent/n'q'l' clure
SFX xK clure clus/n'l' clure
SFX xK clure cluons/n'l' clure
SFX xK clure cluez/n'l' clure
SFX xL Y 44
SFX xL clure clure/n'q'd'l'm't's' clure
SFX xL clure cluant/n'q'l'm't's' clure
SFX xL clure clus/L'D'Q' inclure
SFX xL clure cluse/L'D'Q' inclure
SFX xL clure cluses/D'Q' inclure
SFX xL clure clu/L'D'Q' [eo].clure
SFX xL clure clus/D'Q' [eo].clure
SFX xL clure clue/L'D'Q' [eo].clure
SFX xL clure clues/D'Q' [eo].clure
SFX xL clure clus/n'q'j'l'm't' clure
SFX xL clure clut/n'q'l'm't's' clure
SFX xL clure cluons/n'q'l't' clure
SFX xL clure cluez/n'q'l'm' clure
SFX xL clure cluent/n'q'l'm't's' clure
SFX xL clure cluais/n'q'j'l'm't' clure
SFX xL clure cluait/n'q'l'm't's' clure
SFX xL clure cluions/n'q'l't' clure
SFX xL clure cluiez/n'q'l'm' clure
SFX xL clure cluaient/n'q'l'm't's' clure
SFX xL clure clûmes/n'q'l't' clure
SFX xL clure clûtes/n'q'l'm' clure
SFX xL clure clurent/n'q'l'm't's' clure
SFX xL clure clurai/n'q'j'l'm't' clure
SFX xL clure cluras/n'q'l'm't' clure
SFX xL clure clura/n'q'l'm't's' clure
SFX xL clure clurons/n'q'l't' clure
SFX xL clure clurez/n'q'l'm' clure
SFX xL clure cluront/n'q'l'm't's' clure
SFX xL clure clurais/n'q'j'l'm't' clure
SFX xL clure clurait/n'q'l'm't's' clure
SFX xL clure clurions/n'q'l't' clure
SFX xL clure cluriez/n'q'l'm' clure
SFX xL clure cluraient/n'q'l'm't's' clure
SFX xL clure clue/n'q'j'l'm't's' clure
SFX xL clure clues/n'l'm't' clure
SFX xL clure clusse/n'q'j'l'm't' clure
SFX xL clure clusses/n'q'l'm't' clure
SFX xL clure clût/n'q'l'm't's' clure
SFX xL clure clussions/n'q'l't' clure
SFX xL clure clussiez/n'q'l'm' clure
SFX xL clure clussent/n'q'l'm't's' clure
SFX xL clure clus/n'l'm't' clure
SFX xL clure cluons/n'l' clure
SFX xL clure cluez/n'l'm' clure
SFX xM N 14
SFX xM ourdre ourdant sourdre
SFX xM ourdre ourd sourdre
SFX xM ourdre ourdent sourdre
SFX xM ourdre ourdait sourdre
SFX xM ourdre ourdaient sourdre
SFX xM ourdre ourdit sourdre
SFX xM ourdre ourdirent sourdre
SFX xM ourdre ourdra sourdre
SFX xM ourdre ourdront sourdre
SFX xM ourdre ourdrait sourdre
SFX xM ourdre ourdraient sourdre
SFX xM ourdre ourde sourdre
SFX xM ourdre ourdît sourdre
SFX xM ourdre ourdissent sourdre
SFX xN Y 46
SFX xN soudre soudre/n'q'd'l'm't's' soudre
SFX xN soudre solvant/n'q'l'm't's' soudre
SFX xN soudre solu résoudre
SFX xN soudre solus résoudre
SFX xN soudre solue résoudre
SFX xN soudre solues résoudre
SFX xN soudre sous/L'D'Q' soudre
SFX xN soudre soute/L'D'Q' soudre
SFX xN soudre soutes/D'Q' soudre
SFX xN soudre sous/n'q'j'l'm't' soudre
SFX xN soudre sout/n'q'l'm't's' soudre
SFX xN soudre solvons/n'q'l't' soudre
SFX xN soudre solvez/n'q'l'm' soudre
SFX xN soudre solvent/n'q'l'm't's' soudre
SFX xN soudre solvais/n'q'j'l'm't' soudre
SFX xN soudre solvait/n'q'l'm't's' soudre
SFX xN soudre solvions/n'q'l't' soudre
SFX xN soudre solviez/n'q'l'm' soudre
SFX xN soudre solvaient/n'q'l'm't's' soudre
SFX xN soudre solus/n'q'j'l'm't' soudre
SFX xN soudre solut/n'q'l'm't's' soudre
SFX xN soudre solûmes/n'q'l't' soudre
SFX xN soudre solûtes/n'q'l'm' soudre
SFX xN soudre solurent/n'q'l'm't's' soudre
SFX xN soudre soudrai/n'q'j'l'm't' soudre
SFX xN soudre soudras/n'q'l'm't' soudre
SFX xN soudre soudra/n'q'l'm't's' soudre
SFX xN soudre soudrons/n'q'l't' soudre
SFX xN soudre soudrez/n'q'l'm' soudre
SFX xN soudre soudront/n'q'l'm't's' soudre
SFX xN soudre soudrais/n'q'j'l'm't' soudre
SFX xN soudre soudrait/n'q'l'm't's' soudre
SFX xN soudre soudrions/n'q'l't' soudre
SFX xN soudre soudriez/n'q'l'm' soudre
SFX xN soudre soudraient/n'q'l'm't's' soudre
SFX xN soudre solve/n'q'j'l'm't's' soudre
SFX xN soudre solves/n'l'm't' soudre
SFX xN soudre solusse/n'q'j'l'm't' soudre
SFX xN soudre solusses/n'q'l'm't' soudre
SFX xN soudre solût/n'q'l'm't's' soudre
SFX xN soudre solussions/n'q'l't' soudre
SFX xN soudre solussiez/n'q'l'm' soudre
SFX xN soudre solussent/n'q'l'm't's' soudre
SFX xN soudre sous/n'l'm' soudre
SFX xN soudre solvons/n'l' soudre
SFX xN soudre solvez/n'l'm' soudre
SFX xO N 42
SFX xO oudre ousant coudre
SFX xO oudre ousu coudre
SFX xO oudre ousus coudre
SFX xO oudre ousue coudre
SFX xO oudre ousues coudre
SFX xO oudre ouds coudre
SFX xO oudre oud coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xO oudre ousent coudre
SFX xO oudre ousais coudre
SFX xO oudre ousait coudre
SFX xO oudre ousions coudre
SFX xO oudre ousiez coudre
SFX xO oudre ousaient coudre
SFX xO oudre ousis coudre
SFX xO oudre ousit coudre
SFX xO oudre ousîmes coudre
SFX xO oudre ousîtes coudre
SFX xO oudre ousirent coudre
SFX xO oudre oudrai coudre
SFX xO oudre oudras coudre
SFX xO oudre oudra coudre
SFX xO oudre oudrons coudre
SFX xO oudre oudrez coudre
SFX xO oudre oudront coudre
SFX xO oudre oudrais coudre
SFX xO oudre oudrait coudre
SFX xO oudre oudrions coudre
SFX xO oudre oudriez coudre
SFX xO oudre oudraient coudre
SFX xO oudre ouse coudre
SFX xO oudre ouses coudre
SFX xO oudre ousisse coudre
SFX xO oudre ousisses coudre
SFX xO oudre ousît coudre
SFX xO oudre ousissions coudre
SFX xO oudre ousissiez coudre
SFX xO oudre ousissent coudre
SFX xO oudre ouds coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xP Y 43
SFX xP oudre oudre/n'q'd'l' moudre
SFX xP oudre oulant/n'q'l' moudre
SFX xP oudre oulu/L'D'Q' moudre
SFX xP oudre oulus/D'Q' moudre
SFX xP oudre oulue/L'D'Q' moudre
SFX xP oudre oulues/D'Q' moudre
SFX xP oudre ouds/n'q'l' moudre
SFX xP oudre oud/n'q'l' moudre
SFX xP oudre oulons/n'q'l' moudre
SFX xP oudre oulez/n'q'l' moudre
SFX xP oudre oulent/n'q'l' moudre
SFX xP oudre oulais/n'q'l' moudre
SFX xP oudre oulait/n'q'l' moudre
SFX xP oudre oulions/n'q'l' moudre
SFX xP oudre ouliez/n'q'l' moudre
SFX xP oudre oulaient/n'q'l' moudre
SFX xP oudre oulus/n'q'l' moudre
SFX xP oudre oulut/n'q'l' moudre
SFX xP oudre oulûmes/n'q'l' moudre
SFX xP oudre oulûtes/n'q'l' moudre
SFX xP oudre oulurent/n'q'l' moudre
SFX xP oudre oudrai/n'q'l' moudre
SFX xP oudre oudras/n'q'l' moudre
SFX xP oudre oudra/n'q'l' moudre
SFX xP oudre oudrons/n'q'l' moudre
SFX xP oudre oudrez/n'q'l' moudre
SFX xP oudre oudront/n'q'l' moudre
SFX xP oudre oudrais/n'q'l' moudre
SFX xP oudre oudrait/n'q'l' moudre
SFX xP oudre oudrions/n'q'l' moudre
SFX xP oudre oudriez/n'q'l' moudre
SFX xP oudre oudraient/n'q'l' moudre
SFX xP oudre oule/n'q'l' moudre
SFX xP oudre oules/n'l' moudre
SFX xP oudre oulusse/n'q'l' moudre
SFX xP oudre oulusses/n'q'l' moudre
SFX xP oudre oulût/n'q'l' moudre
SFX xP oudre oulussions/n'q'l' moudre
SFX xP oudre oulussiez/n'q'l' moudre
SFX xP oudre oulussent/n'q'l' moudre
SFX xP oudre ouds/n'l'm' moudre
SFX xP oudre oulons/n'l' moudre
SFX xP oudre oulez/n'l'm' moudre
SFX xQ N 42
SFX xQ uivre uivant suivre
SFX xQ uivre uivi suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivie suivre
SFX xQ uivre uivies suivre
SFX xQ uivre uis suivre
SFX xQ uivre uit suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xQ uivre uivent suivre
SFX xQ uivre uivais suivre
SFX xQ uivre uivait suivre
SFX xQ uivre uivions suivre
SFX xQ uivre uiviez suivre
SFX xQ uivre uivaient suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivit suivre
SFX xQ uivre uivîmes suivre
SFX xQ uivre uivîtes suivre
SFX xQ uivre uivirent suivre
SFX xQ uivre uivrai suivre
SFX xQ uivre uivras suivre
SFX xQ uivre uivra suivre
SFX xQ uivre uivrons suivre
SFX xQ uivre uivrez suivre
SFX xQ uivre uivront suivre
SFX xQ uivre uivrais suivre
SFX xQ uivre uivrait suivre
SFX xQ uivre uivrions suivre
SFX xQ uivre uivriez suivre
SFX xQ uivre uivraient suivre
SFX xQ uivre uive suivre
SFX xQ uivre uives suivre
SFX xQ uivre uivisse suivre
SFX xQ uivre uivisses suivre
SFX xQ uivre uivît suivre
SFX xQ uivre uivissions suivre
SFX xQ uivre uivissiez suivre
SFX xQ uivre uivissent suivre
SFX xQ uivre uis suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xR Y 16
SFX xR suivre suivre/s' suivre
SFX xR suivre suivant/s' suivre
SFX xR suivre suivi suivre
SFX xR suivre suit/s' suivre
SFX xR suivre suivent/s' suivre
SFX xR suivre suivait/s' suivre
SFX xR suivre suivaient/s' suivre
SFX xR suivre suivit/s' suivre
SFX xR suivre suivirent/s' suivre
SFX xR suivre suivra/s' suivre
SFX xR suivre suivront/s' suivre
SFX xR suivre suivrait/s' suivre
SFX xR suivre suivraient/s' suivre
SFX xR suivre suive/s' suivre
SFX xR suivre suivît/s' suivre
SFX xR suivre suivissent/s' suivre
SFX xS N 38
SFX xS ivre ivant vivre
SFX xS ivre is vivre
SFX xS ivre it vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX xS ivre ivent vivre
SFX xS ivre ivais vivre
SFX xS ivre ivait vivre
SFX xS ivre ivions vivre
SFX xS ivre iviez vivre
SFX xS ivre ivaient vivre
SFX xS ivre écus vivre
SFX xS ivre écut vivre
SFX xS ivre écûmes vivre
SFX xS ivre écûtes vivre
SFX xS ivre écurent vivre
SFX xS ivre ivrai vivre
SFX xS ivre ivras vivre
SFX xS ivre ivra vivre
SFX xS ivre ivrons vivre
SFX xS ivre ivrez vivre
SFX xS ivre ivront vivre
SFX xS ivre ivrais vivre
SFX xS ivre ivrait vivre
SFX xS ivre ivrions vivre
SFX xS ivre ivriez vivre
SFX xS ivre ivraient vivre
SFX xS ivre ive vivre
SFX xS ivre ives vivre
SFX xS ivre écusse vivre
SFX xS ivre écusses vivre
SFX xS ivre écût vivre
SFX xS ivre écussions vivre
SFX xS ivre écussiez vivre
SFX xS ivre écussent vivre
SFX xS ivre is vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX y1 Y 43
SFX y1 crire crire/n'q'd'l'm't's' crire
SFX y1 crire crivant/n'q'l'm't's' crire
SFX y1 crire crit/L'D'Q' crire
SFX y1 crire crits/D'Q' crire
SFX y1 crire crite/L'D'Q' crire
SFX y1 crire crites/D'Q' crire
SFX y1 crire cris/n'q'j'l'm't' crire
SFX y1 crire crit/n'q'l'm't's' crire
SFX y1 crire crivons/n'q'l't' crire
SFX y1 crire crivez/n'q'l'm' crire
SFX y1 crire crivent/n'q'l'm't's' crire
SFX y1 crire crivais/n'q'j'l'm't' crire
SFX y1 crire crivait/n'q'l'm't's' crire
SFX y1 crire crivions/n'q'l't' crire
SFX y1 crire criviez/n'q'l'm' crire
SFX y1 crire crivaient/n'q'l'm't's' crire
SFX y1 crire crivis/n'q'j'l'm't' crire
SFX y1 crire crivit/n'q'l'm't's' crire
SFX y1 crire crivîmes/n'q'l't' crire
SFX y1 crire crivîtes/n'q'l'm' crire
SFX y1 crire crivirent/n'q'l'm't's' crire
SFX y1 crire crirai/n'q'j'l'm't' crire
SFX y1 crire criras/n'q'l'm't' crire
SFX y1 crire crira/n'q'l'm't's' crire
SFX y1 crire crirons/n'q'l't' crire
SFX y1 crire crirez/n'q'l'm' crire
SFX y1 crire criront/n'q'l'm't's' crire
SFX y1 crire crirais/n'q'j'l'm't' crire
SFX y1 crire crirait/n'q'l'm't's' crire
SFX y1 crire cririons/n'q'l't' crire
SFX y1 crire cririez/n'q'l'm' crire
SFX y1 crire criraient/n'q'l'm't's' crire
SFX y1 crire crive/n'q'j'l'm't's' crire
SFX y1 crire crives/n'l'm't' crire
SFX y1 crire crivisse/n'q'j'l'm't' crire
SFX y1 crire crivisses/n'q'l'm't' crire
SFX y1 crire crivît/n'q'l'm't's' crire
SFX y1 crire crivissions/n'q'l't' crire
SFX y1 crire crivissiez/n'q'l'm' crire
SFX y1 crire crivissent/n'q'l'm't's' crire
SFX y1 crire cris/n'l'm't' crire
SFX y1 crire crivons/n'l' crire
SFX y1 crire crivez/n'l'm' crire
SFX yA N 42
SFX yA ire isant lire
SFX yA ire u lire
SFX yA ire us lire
SFX yA ire ue lire
SFX yA ire ues lire
SFX yA ire is lire
SFX yA ire it lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yA ire isent lire
SFX yA ire isais lire
SFX yA ire isait lire
SFX yA ire isions lire
SFX yA ire isiez lire
SFX yA ire isaient lire
SFX yA ire us lire
SFX yA ire ut lire
SFX yA ire ûmes lire
SFX yA ire ûtes lire
SFX yA ire urent lire
SFX yA ire irai lire
SFX yA ire iras lire
SFX yA ire ira lire
SFX yA ire irons lire
SFX yA ire irez lire
SFX yA ire iront lire
SFX yA ire irais lire
SFX yA ire irait lire
SFX yA ire irions lire
SFX yA ire iriez lire
SFX yA ire iraient lire
SFX yA ire ise lire
SFX yA ire ises lire
SFX yA ire usse lire
SFX yA ire usses lire
SFX yA ire ût lire
SFX yA ire ussions lire
SFX yA ire ussiez lire
SFX yA ire ussent lire
SFX yA ire is lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yB Y 43
SFX yB lire lire/n'q'd'l'm't's' lire
SFX yB lire lisant/n'q'l'm't's' lire
SFX yB lire lu/L'D'Q' lire
SFX yB lire lus/D'Q' lire
SFX yB lire lue/L'D'Q' lire
SFX yB lire lues/D'Q' lire
SFX yB lire lis/n'q'j'l'm't' lire
SFX yB lire lit/n'q'l'm't's' lire
SFX yB lire lisons/n'q'l't' lire
SFX yB lire lisez/n'q'l'm' lire
SFX yB lire lisent/n'q'l'm't's' lire
SFX yB lire lisais/n'q'j'l'm't' lire
SFX yB lire lisait/n'q'l'm't's' lire
SFX yB lire lisions/n'q'l't' lire
SFX yB lire lisiez/n'q'l'm' lire
SFX yB lire lisaient/n'q'l'm't's' lire
SFX yB lire lus/n'q'j'l'm't' lire
SFX yB lire lut/n'q'l'm't's' lire
SFX yB lire lûmes/n'q'l't' lire
SFX yB lire lûtes/n'q'l'm' lire
SFX yB lire lurent/n'q'l'm't's' lire
SFX yB lire lirai/n'q'j'l'm't' lire
SFX yB lire liras/n'q'l'm't' lire
SFX yB lire lira/n'q'l'm't's' lire
SFX yB lire lirons/n'q'l't' lire
SFX yB lire lirez/n'q'l'm' lire
SFX yB lire liront/n'q'l'm't's' lire
SFX yB lire lirais/n'q'j'l'm't' lire
SFX yB lire lirait/n'q'l'm't's' lire
SFX yB lire lirions/n'q'l't' lire
SFX yB lire liriez/n'q'l'm' lire
SFX yB lire liraient/n'q'l'm't's' lire
SFX yB lire lise/n'q'j'l'm't's' lire
SFX yB lire lises/n'l'm't' lire
SFX yB lire lusse/n'q'j'l'm't' lire
SFX yB lire lusses/n'q'l'm't' lire
SFX yB lire lût/n'q'l'm't's' lire
SFX yB lire lussions/n'q'l't' lire
SFX yB lire lussiez/n'q'l'm' lire
SFX yB lire lussent/n'q'l'm't's' lire
SFX yB lire lis/n'l'm' lire
SFX yB lire lisons/n'l' lire
SFX yB lire lisez/n'l'm' lire
SFX yC N 40
SFX yC ire isant dire
SFX yC ire it dire
SFX yC ire its dire
SFX yC ire ite dire
SFX yC ire ites dire
SFX yC ire is dire
SFX yC ire it dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yC ire isent dire
SFX yC ire isais dire
SFX yC ire isait dire
SFX yC ire isions dire
SFX yC ire isiez dire
SFX yC ire isaient dire
SFX yC ire îmes dire
SFX yC ire îtes dire
SFX yC ire irent dire
SFX yC ire irai dire
SFX yC ire iras dire
SFX yC ire ira dire
SFX yC ire irons dire
SFX yC ire irez dire
SFX yC ire iront dire
SFX yC ire irais dire
SFX yC ire irait dire
SFX yC ire irions dire
SFX yC ire iriez dire
SFX yC ire iraient dire
SFX yC ire ise dire
SFX yC ire ises dire
SFX yC ire isse dire
SFX yC ire isses dire
SFX yC ire ît dire
SFX yC ire issions dire
SFX yC ire issiez dire
SFX yC ire issent dire
SFX yC ire is dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yD Y 41
SFX yD dire dire/n'q'd'l'm't's' dire
SFX yD dire disant/n'q'l'm't's' dire
SFX yD dire dit/L'D'Q' dire
SFX yD dire dits/D'Q' dire
SFX yD dire dite/L'D'Q' dire
SFX yD dire dites/D'Q' dire
SFX yD dire dis/n'q'j'l'm't' dire
SFX yD dire dit/n'q'l'm't's' dire
SFX yD dire disons/n'q'l't' dire
SFX yD dire disez/n'q'l'm' dire
SFX yD dire disent/n'q'l'm't's' dire
SFX yD dire disais/n'q'j'l'm't' dire
SFX yD dire disait/n'q'l'm't's' dire
SFX yD dire disions/n'q'l't' dire
SFX yD dire disiez/n'q'l'm' dire
SFX yD dire disaient/n'q'l'm't's' dire
SFX yD dire dîmes/n'q'l't' dire
SFX yD dire dîtes/n'q'l'm' dire
SFX yD dire dirent/n'q'l'm't's' dire
SFX yD dire dirai/n'q'j'l'm't' dire
SFX yD dire diras/n'q'l'm't' dire
SFX yD dire dira/n'q'l'm't's' dire
SFX yD dire dirons/n'q'l't' dire
SFX yD dire direz/n'q'l'm' dire
SFX yD dire diront/n'q'l'm't's' dire
SFX yD dire dirais/n'q'j'l'm't' dire
SFX yD dire dirait/n'q'l'm't's' dire
SFX yD dire dirions/n'q'l't' dire
SFX yD dire diriez/n'q'l'm' dire
SFX yD dire diraient/n'q'l'm't's' dire
SFX yD dire dise/n'q'j'l'm't's' dire
SFX yD dire dises/n'l'm't' dire
SFX yD dire disse/n'q'j'l'm't' dire
SFX yD dire disses/n'q'l'm't' dire
SFX yD dire dît/n'q'l'm't's' dire
SFX yD dire dissions/n'q'l't' dire
SFX yD dire dissiez/n'q'l'm' dire
SFX yD dire dissent/n'q'l'm't's' dire
SFX yD dire dis/n'l'm't' dire
SFX yD dire disons/n'l' dire
SFX yD dire disez/n'l'm' dire
SFX yE N 37
SFX yE édire édisant édire
SFX yE édire édit édire
SFX yE édire édis édire
SFX yE édire édit édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yE édire édisent édire
SFX yE édire édisais édire
SFX yE édire édisait édire
SFX yE édire édisions édire
SFX yE édire édisiez édire
SFX yE édire édisaient édire
SFX yE édire édîmes édire
SFX yE édire édîtes édire
SFX yE édire édirent édire
SFX yE édire édirai édire
SFX yE édire édiras édire
SFX yE édire édira édire
SFX yE édire édirons édire
SFX yE édire édirez édire
SFX yE édire édiront édire
SFX yE édire édirais édire
SFX yE édire édirait édire
SFX yE édire édirions édire
SFX yE édire édiriez édire
SFX yE édire édiraient édire
SFX yE édire édise édire
SFX yE édire édises édire
SFX yE édire édisse édire
SFX yE édire édisses édire
SFX yE édire édît édire
SFX yE édire édissions édire
SFX yE édire édissiez édire
SFX yE édire édissent édire
SFX yE édire édis édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yF N 36
SFX yF audire audissant udire
SFX yF audire audit udire
SFX yF audire audits udire
SFX yF audire audite udire
SFX yF audire audites udire
SFX yF audire audis udire
SFX yF audire audit udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yF audire audissent udire
SFX yF audire audissais udire
SFX yF audire audissait udire
SFX yF audire audissions udire
SFX yF audire audissiez udire
SFX yF audire audissaient udire
SFX yF audire audîmes udire
SFX yF audire audîtes udire
SFX yF audire audirent udire
SFX yF audire audirai udire
SFX yF audire audiras udire
SFX yF audire audira udire
SFX yF audire audirons udire
SFX yF audire audirez udire
SFX yF audire audiront udire
SFX yF audire audirais udire
SFX yF audire audirait udire
SFX yF audire audirions udire
SFX yF audire audiriez udire
SFX yF audire audiraient udire
SFX yF audire audisse udire
SFX yF audire audisses udire
SFX yF audire audisse udire
SFX yF audire audît udire
SFX yF audire audis udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yG Y 38
SFX yG dire dire/m't's' dire
SFX yG dire disant/m't's' dire
SFX yG dire dit dire
SFX yG dire dis/m't' dire
SFX yG dire dit/s' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yG dire disent/s' dire
SFX yG dire disais/m't' dire
SFX yG dire disait/s' dire
SFX yG dire disions dire
SFX yG dire disiez dire
SFX yG dire disaient/s' dire
SFX yG dire dîmes dire
SFX yG dire dîtes dire
SFX yG dire dirent/s' dire
SFX yG dire dirai/m' dire
SFX yG dire diras/t' dire
SFX yG dire dira/s' dire
SFX yG dire dirons dire
SFX yG dire direz dire
SFX yG dire diront/s' dire
SFX yG dire dirais/m't' dire
SFX yG dire dirait/s' dire
SFX yG dire dirions dire
SFX yG dire diriez dire
SFX yG dire diraient/s' dire
SFX yG dire dise/m's' dire
SFX yG dire dises/t' dire
SFX yG dire disse/m' dire
SFX yG dire disses/t' dire
SFX yG dire dît/s' dire
SFX yG dire dissions dire
SFX yG dire dissiez dire
SFX yG dire dissent/s' dire
SFX yG dire dis/t' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yJ N 7
SFX yJ ruire ruissant uire
SFX yJ ruire rui uire
SFX yJ ruire ruit uire
SFX yJ ruire ruissent uire
SFX yJ ruire ruissait uire
SFX yJ ruire ruissaient uire
SFX yJ ruire ruisse uire
SFX yK N 4
SFX yK bduire bduit uire
SFX yK bduire bduits uire
SFX yK bduire bduite uire
SFX yK bduire bduites uire
SFX yL Y 43
SFX yL uire uire/n'q'd'l'm't's' uire
SFX yL uire uisant/n'q'l'm't's' uire
SFX yL uire uit/L'D'Q' uire
SFX yL uire uits/D'Q' uire
SFX yL uire uite/L'D'Q' uire
SFX yL uire uites/D'Q' uire
SFX yL uire uis/n'q'j'l'm't' uire
SFX yL uire uit/n'q'l'm't's' uire
SFX yL uire uisons/n'q'l't' uire
SFX yL uire uisez/n'q'l'm' uire
SFX yL uire uisent/n'q'l'm't's' uire
SFX yL uire uisais/n'q'j'l'm't' uire
SFX yL uire uisait/n'q'l'm't's' uire
SFX yL uire uisions/n'q'l't' uire
SFX yL uire uisiez/n'q'l'm' uire
SFX yL uire uisaient/n'q'l'm't's' uire
SFX yL uire uisis/n'q'j'l'm't' uire
SFX yL uire uisit/n'q'l'm't's' uire
SFX yL uire uisîmes/n'q'l't' uire
SFX yL uire uisîtes/n'q'l'm' uire
SFX yL uire uisirent/n'q'l'm't's' uire
SFX yL uire uirai/n'q'j'l't' uire
SFX yL uire uiras/n'q'l'm' uire
SFX yL uire uira/n'q'l'm't's' uire
SFX yL uire uirons/n'q'l't' uire
SFX yL uire uirez/n'q'l'm' uire
SFX yL uire uiront/n'q'l'm't's' uire
SFX yL uire uirais/n'q'j'l'm't' uire
SFX yL uire uirait/n'q'l'm't's' uire
SFX yL uire uirions/n'q'l't' uire
SFX yL uire uiriez/n'q'l'm' uire
SFX yL uire uiraient/n'q'l'm't's' uire
SFX yL uire uise/n'q'j'l'm't's' uire
SFX yL uire uises/n'l'm' uire
SFX yL uire uisisse/n'q'j'l't' uire
SFX yL uire uisisses/n'q'l'm' uire
SFX yL uire uisît/n'q'l'm't's' uire
SFX yL uire uisissions/n'q'l't' uire
SFX yL uire uisissiez/n'q'l'm' uire
SFX yL uire uisissent/n'q'l'm't's' uire
SFX yL uire uis/n'l'm' uire
SFX yL uire uisons/n'l' uire
SFX yL uire uisez/n'l'm' uire
SFX yM Y 43
SFX yM uire uire/n'q'd'l'm't's' uire
SFX yM uire uisant/n'q'l'm't's' uire
SFX yM uire uit/L'D'Q' uire
SFX yM uire uits/D'Q' uire
SFX yM uire uite/L'D'Q' uire
SFX yM uire uites/D'Q' uire
SFX yM uire uis/n'q'j'l'm't' uire
SFX yM uire uit/n'q'l'm't's' uire
SFX yM uire uisons/n'q'l't' uire
SFX yM uire uisez/n'q'l'm' uire
SFX yM uire uisent/n'q'l'm't's' uire
SFX yM uire uisais/n'q'j'l'm't' uire
SFX yM uire uisait/n'q'l'm't's' uire
SFX yM uire uisions/n'q'l't' uire
SFX yM uire uisiez/n'q'l'm' uire
SFX yM uire uisaient/n'q'l'm't's' uire
SFX yM uire uisis/n'q'j'l'm't' uire
SFX yM uire uisit/n'q'l'm't's' uire
SFX yM uire uisîmes/n'q'l't' uire
SFX yM uire uisîtes/n'q'l'm' uire
SFX yM uire uisirent/n'q'l'm't's' uire
SFX yM uire uirai/n'q'j'l'm't' uire
SFX yM uire uiras/n'q'l'm't' uire
SFX yM uire uira/n'q'l'm't's' uire
SFX yM uire uirons/n'q'l't' uire
SFX yM uire uirez/n'q'l'm' uire
SFX yM uire uiront/n'q'l'm't's' uire
SFX yM uire uirais/n'q'j'l'm't' uire
SFX yM uire uirait/n'q'l'm't's' uire
SFX yM uire uirions/n'q'l't' uire
SFX yM uire uiriez/n'q'l'm' uire
SFX yM uire uiraient/n'q'l'm't's' uire
SFX yM uire uise/n'q'j'l'm't's' uire
SFX yM uire uises/n'l'm't' uire
SFX yM uire uisisse/n'q'j'l'm't' uire
SFX yM uire uisisses/n'q'l'm't' uire
SFX yM uire uisît/n'q'l'm't's' uire
SFX yM uire uisissions/n'q'l't' uire
SFX yM uire uisissiez/n'q'l'm' uire
SFX yM uire uisissent/n'q'l'm't's' uire
SFX yM uire uis/n'l'm't' uire
SFX yM uire uisons/n'l' uire
SFX yM uire uisez/n'l'm' uire
SFX yN Y 33
SFX yN truire truire/s' uire
SFX yN truire truisant/s' uire
SFX yN truire truit uire
SFX yN truire truits uire
SFX yN truire truite uire
SFX yN truire truites uire
SFX yN truire truit/s' uire
SFX yN truire truisons uire
SFX yN truire truisez uire
SFX yN truire truisent/s' uire
SFX yN truire truisait/s' uire
SFX yN truire truisions uire
SFX yN truire truisiez uire
SFX yN truire truisaient/s' uire
SFX yN truire truisit/s' uire
SFX yN truire truisîmes uire
SFX yN truire truisîtes uire
SFX yN truire truisirent/s' uire
SFX yN truire truira/s' uire
SFX yN truire truirons uire
SFX yN truire truirez uire
SFX yN truire truiront/s' uire
SFX yN truire truirait/s' uire
SFX yN truire truirions uire
SFX yN truire truiriez uire
SFX yN truire truiraient/s' uire
SFX yN truire truise/s' uire
SFX yN truire truisît/s' uire
SFX yN truire truisissions uire
SFX yN truire truisissiez uire
SFX yN truire truisissent/s' uire
SFX yN truire truisons-nous uire
SFX yN truire truisez-vous uire
SFX yO Y 43
SFX yO détruire détruire/m't's' détruire
SFX yO détruire détruisant/m't's' détruire
SFX yO détruire détruit détruire
SFX yO détruire détruits détruire
SFX yO détruire détruite détruire
SFX yO détruire détruites détruire
SFX yO détruire détruis/m't' détruire
SFX yO détruire détruit/s' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yO détruire détruisent/s' détruire
SFX yO détruire détruisais/m't' détruire
SFX yO détruire détruisait/s' détruire
SFX yO détruire détruisions détruire
SFX yO détruire détruisiez détruire
SFX yO détruire détruisaient/s' détruire
SFX yO détruire détruisis/m't' détruire
SFX yO détruire détruisit/s' détruire
SFX yO détruire détruisîmes détruire
SFX yO détruire détruisîtes détruire
SFX yO détruire détruisirent/s' détruire
SFX yO détruire détruirai/m' détruire
SFX yO détruire détruiras/t' détruire
SFX yO détruire détruira/s' détruire
SFX yO détruire détruirons détruire
SFX yO détruire détruirez détruire
SFX yO détruire détruiront/s' détruire
SFX yO détruire détruirais/m't' détruire
SFX yO détruire détruirait/s' détruire
SFX yO détruire détruirions détruire
SFX yO détruire détruiriez détruire
SFX yO détruire détruiraient/s' détruire
SFX yO détruire détruise/m's' détruire
SFX yO détruire détruises/t' détruire
SFX yO détruire détruisisse/m' détruire
SFX yO détruire détruisisses/t' détruire
SFX yO détruire détruisît/s' détruire
SFX yO détruire détruisissions détruire
SFX yO détruire détruisissiez détruire
SFX yO détruire détruisissent/s' détruire
SFX yO détruire détruis/t' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yU N 39
SFX yU uire uisant uire
SFX yU uire ui uire
SFX yU uire uis uire
SFX yU uire uit uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yU uire uisent uire
SFX yU uire uisais uire
SFX yU uire uisait uire
SFX yU uire uisions uire
SFX yU uire uisiez uire
SFX yU uire uisaient uire
SFX yU uire uisis uire
SFX yU uire uisit uire
SFX yU uire uisîmes uire
SFX yU uire uisîtes uire
SFX yU uire uisirent uire
SFX yU uire uirai uire
SFX yU uire uiras uire
SFX yU uire uira uire
SFX yU uire uirons uire
SFX yU uire uirez uire
SFX yU uire uiront uire
SFX yU uire uirais uire
SFX yU uire uirait uire
SFX yU uire uirions uire
SFX yU uire uiriez uire
SFX yU uire uiraient uire
SFX yU uire uise uire
SFX yU uire uises uire
SFX yU uire uisisse uire
SFX yU uire uisisses uire
SFX yU uire uisît uire
SFX yU uire uisissions uire
SFX yU uire uisissiez uire
SFX yU uire uisissent uire
SFX yU uire uis uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yV N 44
SFX yV ire isant ire
SFX yV ire it nfire
SFX yV ire its nfire
SFX yV ire ite nfire
SFX yV ire ites nfire
SFX yV ire is cire
SFX yV ire ise cire
SFX yV ire ises cire
SFX yV ire i ffire
SFX yV ire is ire
SFX yV ire it ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yV ire isent ire
SFX yV ire isais ire
SFX yV ire isait ire
SFX yV ire isions ire
SFX yV ire isiez ire
SFX yV ire isaient ire
SFX yV ire îmes ire
SFX yV ire îtes ire
SFX yV ire irent ire
SFX yV ire irai ire
SFX yV ire iras ire
SFX yV ire ira ire
SFX yV ire irons ire
SFX yV ire irez ire
SFX yV ire iront ire
SFX yV ire irais ire
SFX yV ire irait ire
SFX yV ire irions ire
SFX yV ire iriez ire
SFX yV ire iraient ire
SFX yV ire ise ire
SFX yV ire ises ire
SFX yV ire isse ire
SFX yV ire isses ire
SFX yV ire ît ire
SFX yV ire issions ire
SFX yV ire issiez ire
SFX yV ire issent ire
SFX yV ire is ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yW N 37
SFX yW ire iant rire
SFX yW ire i rire
SFX yW ire is rire
SFX yW ire it rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yW ire ient rire
SFX yW ire iais rire
SFX yW ire iait rire
SFX yW ire iions rire
SFX yW ire iiez rire
SFX yW ire iaient rire
SFX yW ire îmes rire
SFX yW ire îtes rire
SFX yW ire irent rire
SFX yW ire irai rire
SFX yW ire iras rire
SFX yW ire ira rire
SFX yW ire irons rire
SFX yW ire irez rire
SFX yW ire iront rire
SFX yW ire irais rire
SFX yW ire irait rire
SFX yW ire irions rire
SFX yW ire iriez rire
SFX yW ire iraient rire
SFX yW ire ie rire
SFX yW ire ies rire
SFX yW ire isse rire
SFX yW ire isses rire
SFX yW ire ît rire
SFX yW ire issions rire
SFX yW ire issiez rire
SFX yW ire issent rire
SFX yW ire is rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yX Y 30
SFX yX nuire nuire/s' nuire
SFX yX nuire nuisant/s' nuire
SFX yX nuire nui nuire
SFX yX nuire nuit/s' nuire
SFX yX nuire nuisons nuire
SFX yX nuire nuisez nuire
SFX yX nuire nuisent/s' nuire
SFX yX nuire nuisait/s' nuire
SFX yX nuire nuisions nuire
SFX yX nuire nuisiez nuire
SFX yX nuire nuisaient/s' nuire
SFX yX nuire nuisit/s' nuire
SFX yX nuire nuisîmes nuire
SFX yX nuire nuisîtes nuire
SFX yX nuire nuisirent/s' nuire
SFX yX nuire nuira/s' nuire
SFX yX nuire nuirons nuire
SFX yX nuire nuirez nuire
SFX yX nuire nuiront/s' nuire
SFX yX nuire nuirait/s' nuire
SFX yX nuire nuirions nuire
SFX yX nuire nuiriez nuire
SFX yX nuire nuiraient/s' nuire
SFX yX nuire nuise/s' nuire
SFX yX nuire nuisît/s' nuire
SFX yX nuire nuisissions nuire
SFX yX nuire nuisissiez nuire
SFX yX nuire nuisissent/s' nuire
SFX yX nuire nuisons-nous nuire
SFX yX nuire nuisez-vous nuire
SFX yY Y 4
SFX yY ccire ccire/n'q'd'l'm't's' occire
SFX yY ccire ccis/L'D'Q' occire
SFX yY ccire ccise/L'D'Q' occire
SFX yY ccire ccises/D'Q' occire
SFX yZ N 13
SFX yZ rire risant rire
SFX yZ rire rit rire
SFX yZ rire rits rire
SFX yZ rire rite rire
SFX yZ rire rites rire
SFX yZ rire ris rire
SFX yZ rire rit rire
SFX yZ rire rirai rire
SFX yZ rire riras rire
SFX yZ rire rira rire
SFX yZ rire rirais rire
SFX yZ rire rirait rire
SFX yZ rire ris rire
SFX q+ Y 32
SFX q+ enir enu/L'D'Q' enir
SFX q+ enir enus/D'Q' enir
SFX q+ enir enue/L'D'Q' enir
SFX q+ enir enues/D'Q' enir
SFX q+ tir ti/L'D'Q' tir
SFX q+ tir tis/D'Q' tir
SFX q+ tir tie/L'D'Q' tir
SFX q+ tir ties/D'Q' tir
SFX q+ courir couru/L'D'Q' courir
SFX q+ courir courus/D'Q' courir
SFX q+ courir courue/L'D'Q' courir
SFX q+ courir courues/D'Q' courir
SFX q+ ivre écu vivre
SFX q+ ivre écus vivre
SFX q+ ivre écue vivre
SFX q+ ivre écues vivre
SFX q+ aire u aire
SFX q+ aire us aire
SFX q+ aire ue aire
SFX q+ aire ues aire
SFX q+ dre du dre
SFX q+ dre dus dre
SFX q+ dre due dre
SFX q+ dre dues dre
SFX q+ valoir valu .valoir
SFX q+ valoir valus .valoir
SFX q+ valoir value .valoir
SFX q+ valoir values .valoir
SFX q+ aître u/L'D'Q' aître
SFX q+ aître us/D'Q' aître
SFX q+ aître ue/L'D'Q' aître
SFX q+ aître ues/D'Q' aître
SFX q. Y 8
SFX q. enir enu/q' enir
SFX q. tir ti/q' tir
SFX q. courir couru/q' courir
SFX q. ivre écu vivre
SFX q. aire u aire
SFX q. dre du dre
SFX q. valoir valu/q' .valoir
SFX q. aître u/q' aître
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-classique.dic version [8624e8d9fb].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-moderne.aff version [31703ae008].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 |
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “MODERNE” v6.0.3
# par Olivier R. -- licence MPL 2.0
# Généré le 25-04-2017 à 13:20
# Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/
SET UTF-8
WORDCHARS -’'1234567890.
TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ
MAP 25
MAP aàâäAÀÂÄ
MAP eéèêëEÉÈÊË
MAP iîïyIÎÏY
MAP oôöOÔÖ
MAP uùûüUÙÛÜ
MAP cçCÇ
MAP bB
MAP dD
MAP fF
MAP gG
MAP hH
MAP jJ
MAP kK
MAP lL
MAP mM
MAP nN
MAP pP
MAP qQ
MAP rR
MAP sS
MAP tT
MAP vV
MAP wW
MAP xX
MAP zZ
REP 82
REP ^Ca$ Ça
REP ^l l'
REP ^d d'
REP ^n n'
REP ^s s'
REP ^j j'
REP ^m m'
REP ^t t'
REP ^c c'
REP f ph
REP ph f
REP c qu
REP qu c
REP k qu
REP qu k
REP x ct
REP ct x
REP bb b
REP b bb
REP cc c
REP c cc
REP ff f
REP f ff
REP ll l
REP l ll
REP mm m
REP m mm
REP nn n
REP n nn
REP pp p
REP p pp
REP rr r
REP r rr
REP ss s
REP s ss
REP ss c
REP c ss
REP ss ç
REP ç ss
REP tt t
REP t tt
REP œ oe
REP oe œ
REP æ ae
REP ae æ
REP ai é
REP é ai
REP ai è
REP è ai
REP ai ê
REP ê ai
REP ei é
REP é ei
REP ei è
REP è ei
REP ei ê
REP ê ei
REP o au
REP au o
REP o eau
REP eau o
REP ett èt
REP èt ett
REP ell èl
REP èl ell
REP t th
REP th t
REP ième$ e
REP ème$ e
REP è$ e
REP mn$ min
REP ogue$ ogiste
REP ogiste$ ogue
REP disez$ dites
REP fesez$ faites
REP faisez$ faites
REP puit puits
REP sanctionnable punissable
REP questionnable discutable
REP antitartre détartrant
REP email courriel
REP construirent construisirent
KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj
ICONV 41
ICONV ’ '
ICONV ʼ '
ICONV ffi ffi
ICONV ffl ffl
ICONV ff ff
ICONV ſt ft
ICONV fi fi
ICONV fl fl
ICONV st st
ICONV à à
ICONV â â
ICONV ä ä
ICONV é é
ICONV è è
ICONV ê ê
ICONV ë ë
ICONV î î
ICONV ï ï
ICONV ô ô
ICONV ö ö
ICONV ù ù
ICONV û û
ICONV ü ü
ICONV ÿ ÿ
ICONV ç ç
ICONV À À
ICONV Â Â
ICONV Ä Ä
ICONV É É
ICONV È È
ICONV Ê Ê
ICONV Ë Ë
ICONV Î Î
ICONV Ï Ï
ICONV Ô Ô
ICONV Ö Ö
ICONV Ù Ù
ICONV Û Û
ICONV Ü Ü
ICONV Ÿ Ÿ
ICONV Ç Ç
OCONV 1
OCONV ' ’
FLAG long
FULLSTRIP
NEEDAFFIX ()
FORBIDDENWORD {}
CIRCUMFIX **
KEEPCASE ||
NOSUGGEST --
BREAK 7
BREAK -
BREAK .
BREAK ·
BREAK ^'
BREAK ^‘
BREAK '$
BREAK ’$
PFX L' Y 34
PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a l'A a
PFX L' à l'À à
PFX L' â l'Â â
PFX L' e l'E e
PFX L' é l'É é
PFX L' è l'È è
PFX L' ê l'Ê ê
PFX L' i l'I i
PFX L' î l'Î î
PFX L' o l'O o
PFX L' ô l'Ô ô
PFX L' u l'U u
PFX L' y l'Y y
PFX L' h l'H h
PFX L' œ l'Œ œ
PFX L' æ l'Æ æ
PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a L'A a
PFX L' à L'À à
PFX L' â L'Â â
PFX L' e L'E e
PFX L' é L'É é
PFX L' è L'È è
PFX L' ê L'Ê ê
PFX L' i L'I i
PFX L' î L'Î î
PFX L' o L'O o
PFX L' ô L'Ô ô
PFX L' u L'U u
PFX L' y L'Y y
PFX L' h L'H h
PFX L' œ L'Œ œ
PFX L' æ L'Æ æ
PFX D' Y 34
PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a d'A a
PFX D' à d'À à
PFX D' â d'Â â
PFX D' e d'E e
PFX D' é d'É é
PFX D' è d'È è
PFX D' ê d'Ê ê
PFX D' i d'I i
PFX D' î d'Î î
PFX D' o d'O o
PFX D' ô d'Ô ô
PFX D' u d'U u
PFX D' y d'Y y
PFX D' h d'H h
PFX D' œ d'Œ œ
PFX D' æ d'Æ æ
PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a D'A a
PFX D' à D'À à
PFX D' â D'Â â
PFX D' e D'E e
PFX D' é D'É é
PFX D' è D'È è
PFX D' ê D'Ê ê
PFX D' i D'I i
PFX D' î D'Î î
PFX D' o D'O o
PFX D' ô D'Ô ô
PFX D' u D'U u
PFX D' y D'Y y
PFX D' h D'H h
PFX D' œ D'Œ œ
PFX D' æ D'Æ æ
PFX Q' Y 34
PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a qu'A a
PFX Q' à qu'À à
PFX Q' â qu'Â â
PFX Q' e qu'E e
PFX Q' é qu'É é
PFX Q' è qu'È è
PFX Q' ê qu'Ê ê
PFX Q' i qu'I i
PFX Q' î qu'Î î
PFX Q' o qu'O o
PFX Q' ô qu'Ô ô
PFX Q' u qu'U u
PFX Q' y qu'Y y
PFX Q' h qu'H h
PFX Q' œ qu'Œ œ
PFX Q' æ qu'Æ æ
PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a Qu'A a
PFX Q' à Qu'À à
PFX Q' â Qu'Â â
PFX Q' e Qu'E e
PFX Q' é Qu'É é
PFX Q' è Qu'È è
PFX Q' ê Qu'Ê ê
PFX Q' i Qu'I i
PFX Q' î Qu'Î î
PFX Q' o Qu'O o
PFX Q' ô Qu'Ô ô
PFX Q' u Qu'U u
PFX Q' y Qu'Y y
PFX Q' h Qu'H h
PFX Q' œ Qu'Œ œ
PFX Q' æ Qu'Æ æ
PFX Q* Y 6
PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Qj Y 1
PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ]
PFX Si Y 1
PFX Si 0 s' .
SFX S. Y 1
SFX S. 0 s [^sxz]
SFX S= Y 1
SFX S= 0 s [^sxz]
SFX X. Y 3
SFX X. 0 x [aeoœ]u
SFX X. l ux al
SFX X. il ux ail
SFX A. Y 1
SFX A. 0 s [^sxz]
SFX I. Y 1
SFX I. 0 s [^sxz]
SFX F. Y 78
SFX F. 0 s [eë]
SFX F. e 0 [éiï]e
SFX F. e s [éiï]e
SFX F. rice eur [dt]rice
SFX F. rice eurs [dt]rice
SFX F. de d de
SFX F. de ds de
SFX F. fe f fe
SFX F. fe fs fe
SFX F. anche anc anche
SFX F. anche ancs anche
SFX F. èche ec èche
SFX F. èche ecs èche
SFX F. aiche ais aiche
SFX F. aîche ais aîche
SFX F. khe kh khe
SFX F. khe khs khe
SFX F. he h [ut]he
SFX F. he hs [ut]he
SFX F. ke k [^è]ke
SFX F. ke ks [^è]ke
SFX F. èke ek èke
SFX F. èke eks èke
SFX F. le l [aiouûh]le
SFX F. le ls [aiouûh]le
SFX F. lle l [eiu]lle
SFX F. lle ls [eiu]lle
SFX F. olle ou olle
SFX F. olle ous olle
SFX F. olle ol olle
SFX F. olle ols olle
SFX F. ne n [aiouï]ne
SFX F. ne ns [aiouï]ne
SFX F. nne n [aeo]nne
SFX F. nne ns [aeo]nne
SFX F. ène en ène
SFX F. ène ens ène
SFX F. igne in igne
SFX F. igne ins igne
SFX F. re r [aiouûy]re
SFX F. re rs [aiouûy]re
SFX F. ère er ère
SFX F. ère ers ère
SFX F. se s [^us]se
SFX F. esse e [^eo].esse
SFX F. esse es [^eo].esse
SFX F. rofesse rofès rofesse
SFX F. eresse eur eresse
SFX F. eresse eurs eresse
SFX F. oresse eur oresse
SFX F. oresse eurs oresse
SFX F. sse s [^e]sse
SFX F. use us [^eo]use
SFX F. euse eur euse
SFX F. euse eurs euse
SFX F. te t [^èt]te
SFX F. te ts [^èt]te
SFX F. tte t tte
SFX F. tte ts tte
SFX F. ète et ète
SFX F. ète ets ète
SFX F. ue u [^gq]ue
SFX F. ue us [^gq]ue
SFX F. gue g gue
SFX F. gue gs gue
SFX F. cque c cque
SFX F. cque cs cque
SFX F. que c [^c]que
SFX F. que cs [^c]que
SFX F. ève ef ève
SFX F. ève efs ève
SFX F. ve f [iïu]ve
SFX F. ve fs [iïu]ve
SFX F. uë u uë
SFX F. uë us uë
SFX F. üe u üe
SFX F. üe us üe
SFX F. ze z ze
SFX W. N 15
SFX W. e es e
SFX W. ce x ce
SFX W. use ux [eo]use
SFX W. ausse aux ausse
SFX W. ousse oux ousse
SFX W. ale al ale
SFX W. ale aux ale
SFX W. elle eau elle
SFX W. elle eaux elle
SFX W. elle el [bv]elle
SFX W. elle els [bv]elle
SFX W. ieille ieux ieille
SFX W. ieille ieil ieille
SFX W. ofolle oufou ofolle
SFX W. ofolle oufous ofolle
SFX S* Y 2
SFX S* 0 0/D'L'Q' [^sxz]
SFX S* 0 s/D'Q' [^sxz]
SFX X* Y 4
SFX X* 0 0/D'L'Q' [ul]
SFX X* 0 x/D'Q' [aeoœ]u
SFX X* l ux/D'Q' al
SFX X* il ux/D'Q' ail
SFX A* Y 12
SFX A* an an/D'L'Q' an
SFX A* an ans/D'Q' an
SFX A* f f/D'L'Q' f
SFX A* f fs/D'Q' f
SFX A* h h/D'L'Q' h
SFX A* h hs/D'Q' h
SFX A* s s/D'L'Q' s
SFX A* x x/D'L'Q' x
SFX A* y y/D'L'Q' y
SFX A* y ys/D'Q' y
SFX A* zz zz/D'L'Q' zz
SFX A* z z/D'L'Q' [^z]z
SFX I* Y 11
SFX I* a a/D'L'Q' a
SFX I* a as/D'Q' a
SFX I* e e/D'L'Q' e
SFX I* e es/D'Q' e
SFX I* en en/D'L'Q' en
SFX I* en ens/D'Q' en
SFX I* o o/D'L'Q' o
SFX I* o os/D'Q' o
SFX I* um um/D'L'Q' um
SFX I* um ums/D'Q' um
SFX I* us us/D'L'Q' us
SFX F* Y 59
SFX F* 0 0/D'L'Q' [eë]
SFX F* 0 s/D'Q' [eë]
SFX F* e 0/D'L'Q' [éiï]e
SFX F* e s/D'Q' [éiï]e
SFX F* rice eur/D'L'Q' [dt]rice
SFX F* rice eurs/D'Q' [dt]rice
SFX F* de d/D'L'Q' de
SFX F* de ds/D'Q' de
SFX F* he h/D'L'Q' [ut]he
SFX F* he hs/D'Q' [ut]he
SFX F* èke ek/D'L'Q' èke
SFX F* èke eks/D'Q' èke
SFX F* le l/D'L'Q' [aiouû]le
SFX F* le ls/D'Q' [aiouû]le
SFX F* lle l/D'L'Q' [eiu]lle
SFX F* lle ls/D'Q' [eiu]lle
SFX F* ne n/D'L'Q' [aiouï]ne
SFX F* ne ns/D'Q' [aiouï]ne
SFX F* nne n/D'L'Q' [aeo]nne
SFX F* nne ns/D'Q' [aeo]nne
SFX F* gne n/D'L'Q' igne
SFX F* gne ns/D'Q' igne
SFX F* re r/D'L'Q' [aiouûy]re
SFX F* re rs/D'Q' [aiouûy]re
SFX F* ère er/D'L'Q' ère
SFX F* ère ers/D'Q' ère
SFX F* se s/D'L'Q' [^us]se
SFX F* esse e/D'L'Q' [^eo].esse
SFX F* esse es/D'Q' [^eo].esse
SFX F* eresse eur/D'L'Q' eresse
SFX F* eresse eurs/D'Q' eresse
SFX F* oresse eur/D'L'Q' oresse
SFX F* oresse eurs/D'Q' oresse
SFX F* sse s/D'L'Q' [^e]sse
SFX F* use us/D'L'Q' [^eo]use
SFX F* euse eur/D'L'Q' euse
SFX F* euse eurs/D'Q' euse
SFX F* te t/D'L'Q' [^èt]te
SFX F* te ts/D'Q' [^èt]te
SFX F* tte t/D'L'Q' tte
SFX F* tte ts/D'Q' tte
SFX F* ète et/D'L'Q' ète
SFX F* ète ets/D'Q' ète
SFX F* ue u/D'L'Q' [^gq]ue
SFX F* ue us/D'Q' [^gq]ue
SFX F* gue g/D'L'Q' gue
SFX F* gue gs/D'Q' gue
SFX F* cque c/D'L'Q' cque
SFX F* cque cs/D'Q' cque
SFX F* que c/D'L'Q' [^c]que
SFX F* que cs/D'Q' [^c]que
SFX F* ève ef/D'L'Q' ève
SFX F* ève efs/D'Q' ève
SFX F* ve f/D'L'Q' [iïu]ve
SFX F* ve fs/D'Q' [iïu]ve
SFX F* uë u/D'L'Q' uë
SFX F* uë us/D'Q' uë
SFX F* üe u/D'L'Q' üe
SFX F* üe us/D'Q' üe
SFX W* Y 10
SFX W* 0 0/D'L'Q' e
SFX W* e es/D'Q' e
SFX W* ce x/D'L'Q' ce
SFX W* use ux/D'L'Q' [eo]use
SFX W* ousse oux/D'L'Q' ousse
SFX W* ausse aux/D'L'Q' ausse
SFX W* ale al/D'L'Q' ale
SFX W* ale aux/D'Q' ale
SFX W* elle eau/D'L'Q' elle
SFX W* elle eaux/D'Q' elle
PFX Um Y 29
PFX Um 0 0/S. .
PFX Um 0 l' [aàâeèéêiîoôuyœæ]
PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ]
PFX Um 0 yotta/S. .
PFX Um 0 zetta/S. .
PFX Um 0 exa/S. .
PFX Um 0 l'exa .
PFX Um 0 d'exa/S. .
PFX Um 0 peta/S. .
PFX Um 0 téra/S. .
PFX Um 0 giga/S. .
PFX Um 0 méga/S. .
PFX Um 0 kilo/S. .
PFX Um 0 hecto/S. .
PFX Um 0 l'hecto .
PFX Um 0 d'hecto/S. .
PFX Um 0 déca/S. .
PFX Um 0 déci/S. .
PFX Um 0 centi/S. .
PFX Um 0 milli/S. .
PFX Um 0 micro/S. .
PFX Um 0 nano/S. .
PFX Um 0 pico/S. .
PFX Um 0 femto/S. .
PFX Um 0 atto/S. .
PFX Um 0 l'atto .
PFX Um 0 d'atto/S. .
PFX Um 0 zepto/S. .
PFX Um 0 yocto/S. .
PFX Ui Y 28
PFX Ui 0 l' [aàâeèéêiîoôuyœæ]
PFX Ui 0 d' [aàâeèéêiîoôuyœæ]
PFX Ui 0 yotta .
PFX Ui 0 zetta .
PFX Ui 0 exa .
PFX Ui 0 l'exa .
PFX Ui 0 d'exa .
PFX Ui 0 peta .
PFX Ui 0 téra .
PFX Ui 0 giga .
PFX Ui 0 méga .
PFX Ui 0 kilo .
PFX Ui 0 hecto .
PFX Ui 0 l'hecto .
PFX Ui 0 d'hecto .
PFX Ui 0 déca .
PFX Ui 0 déci .
PFX Ui 0 centi .
PFX Ui 0 milli .
PFX Ui 0 micro .
PFX Ui 0 nano .
PFX Ui 0 pico .
PFX Ui 0 femto .
PFX Ui 0 atto .
PFX Ui 0 l'atto .
PFX Ui 0 d'atto .
PFX Ui 0 zepto .
PFX Ui 0 yocto .
PFX U. Y 20
PFX U. 0 Y .
PFX U. 0 Z .
PFX U. 0 E .
PFX U. 0 P .
PFX U. 0 T .
PFX U. 0 G .
PFX U. 0 M .
PFX U. 0 k .
PFX U. 0 h .
PFX U. 0 da .
PFX U. 0 d .
PFX U. 0 c .
PFX U. 0 m .
PFX U. 0 µ .
PFX U. 0 n .
PFX U. 0 p .
PFX U. 0 f .
PFX U. 0 a .
PFX U. 0 z .
PFX U. 0 y .
PFX n' Y 1
PFX n' 0 n' [aàâeèéêiîoôuyhœæ]
PFX q' Y 1
PFX q' 0 qu' [aàâeèéêiîoôuyhœæ]
PFX d' Y 1
PFX d' 0 d' [aàâeèéêiîoôuyhœæ]
PFX j' Y 1
PFX j' 0 j' [aàâeèéêiîoôuyhœæ]
PFX c' Y 2
PFX c' 0 c' [eé]
PFX c' 0 ç' a
PFX l' Y 1
PFX l' 0 l' [aàâeèéêiîoôuyhœæ]
PFX m' Y 1
PFX m' 0 m' [aàâeèéêiîoôuyhœæ]
PFX t' Y 1
PFX t' 0 t' [aàâeèéêiîoôuyhœæ]
PFX s' Y 1
PFX s' 0 s' [aàâeèéêiîoôuyhœæ]
SFX zA Y 49
SFX zA voir voir/n'q'd'l'm't' avoir
SFX zA voir yant/n'q'l'm't' avoir
SFX zA avoir eu avoir
SFX zA avoir eus avoir
SFX zA avoir eue avoir
SFX zA avoir eues avoir
SFX zA voir i/n'q'j'l't' avoir
SFX zA voir s/n'q'l'm't' avoir
SFX zA voir 0/n'q'c'l'm't' avoir
SFX zA voir vons/n'q'l't' avoir
SFX zA voir vez/n'q'l'm' avoir
SFX zA avoir ont/n'q'l'm't' avoir
SFX zA voir vais/n'q'j'l'm't' avoir
SFX zA voir vait/n'q'c'l'm't' avoir
SFX zA voir vions/n'q'l't' avoir
SFX zA voir viez/n'q'l'm' avoir
SFX zA voir vaient/n'q'l'm't' avoir
SFX zA avoir eus/n'q'j'l'm't' avoir
SFX zA avoir eut/n'q'c'l'm't' avoir
SFX zA avoir eûmes/n'q'l't' avoir
SFX zA avoir eûtes/n'q'l'm' avoir
SFX zA avoir eurent/n'q'l'm't' avoir
SFX zA voir urai/n'q'j'l'm't' avoir
SFX zA voir uras/n'q'l'm't' avoir
SFX zA voir ura/n'q'c'l'm't' avoir
SFX zA voir urons/n'q'l't' avoir
SFX zA voir urez/n'q'l'm' avoir
SFX zA voir uront/n'q'l'm't' avoir
SFX zA voir urais/n'q'j'l'm't' avoir
SFX zA voir urait/n'q'c'l'm't' avoir
SFX zA voir urions/n'q'l't' avoir
SFX zA voir uriez/n'q'l'm' avoir
SFX zA voir uraient/n'q'l'm't' avoir
SFX zA voir ie/n'j'l'm't' avoir
SFX zA voir ies/n'l'm't' avoir
SFX zA voir it/n'q'c'l'm't' avoir
SFX zA voir yons/n'l't' avoir
SFX zA voir yez/n'l'm' avoir
SFX zA voir ient/n'q'l'm't' avoir
SFX zA avoir eusse/n'q'j'l'm't' avoir
SFX zA avoir eussé/n'q'l'm't' avoir
SFX zA avoir eusses/n'q'l'm't' avoir
SFX zA avoir eût/n'q'c'l'm't' avoir
SFX zA avoir eussions/n'q'l't' avoir
SFX zA avoir eussiez/n'q'l'm' avoir
SFX zA avoir eussent/n'q'l'm't' avoir
SFX zA voir ie/n' avoir
SFX zA voir yons/n' avoir
SFX zA voir yez/n' avoir
SFX zE Y 45
SFX zE tre tre/n'q'd'l'm't's' être
SFX zE être étant/n'q'l'm't's' être
SFX zE être été être
SFX zE être suis être
SFX zE être es/n'q'l'm't' être
SFX zE être est/n'q'c'l'm't's' être
SFX zE être sommes être
SFX zE tre tes/n'q'l'm' être
SFX zE être sont être
SFX zE être étais/n'q'j'l'm't' être
SFX zE être était/n'q'c'l'm't's' être
SFX zE être étions/n'q'l't' être
SFX zE être étiez/n'q'l'm' être
SFX zE être étaient/n'q'c'l'm't's' être
SFX zE être fus être
SFX zE être fut être
SFX zE être fûmes être
SFX zE être fûtes être
SFX zE être furent être
SFX zE être serai être
SFX zE être seras être
SFX zE être sera être
SFX zE être serons être
SFX zE être serez être
SFX zE être seront être
SFX zE être serais être
SFX zE être serait être
SFX zE être serions être
SFX zE être seriez être
SFX zE être seraient être
SFX zE être sois être
SFX zE être soit être
SFX zE être soyons être
SFX zE être soyez être
SFX zE être soient être
SFX zE être fusse être
SFX zE être fussé être
SFX zE être fusses être
SFX zE être fût être
SFX zE être fussions être
SFX zE être fussiez être
SFX zE être fussent être
SFX zE être sois être
SFX zE être soyons être
SFX zE être soyez être
SFX a0 N 101
SFX a0 er ant [^cg]er
SFX a0 cer çant cer
SFX a0 ger geant ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er es [^y]er
SFX a0 yer yes [^ou]yer
SFX a0 yer ies [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a0 er ent [^y]er
SFX a0 yer yent [^ou]yer
SFX a0 yer ient [aou]yer
SFX a0 er ais [^cg]er
SFX a0 cer çais cer
SFX a0 ger geais ger
SFX a0 er ait [^cg]er
SFX a0 cer çait cer
SFX a0 ger geait ger
SFX a0 er ions er
SFX a0 er iez er
SFX a0 er aient [^cg]er
SFX a0 cer çaient cer
SFX a0 ger geaient ger
SFX a0 er ai [^cg]er
SFX a0 cer çai cer
SFX a0 ger geai ger
SFX a0 er as [^cg]er
SFX a0 cer ças cer
SFX a0 ger geas ger
SFX a0 er a [^cg]er
SFX a0 cer ça cer
SFX a0 ger gea ger
SFX a0 er âmes [^cg]er
SFX a0 cer çâmes cer
SFX a0 ger geâmes ger
SFX a0 er âtes [^cg]er
SFX a0 cer çâtes cer
SFX a0 ger geâtes ger
SFX a0 er èrent er
SFX a0 er erai [^y]er
SFX a0 yer yerai [^ou]yer
SFX a0 yer ierai [aou]yer
SFX a0 er eras [^y]er
SFX a0 yer yeras [^ou]yer
SFX a0 yer ieras [aou]yer
SFX a0 er era [^y]er
SFX a0 yer yera [^ou]yer
SFX a0 yer iera [aou]yer
SFX a0 er erons [^y]er
SFX a0 yer yerons [^ou]yer
SFX a0 yer ierons [aou]yer
SFX a0 er erez [^y]er
SFX a0 yer yerez [^ou]yer
SFX a0 yer ierez [aou]yer
SFX a0 er eront [^y]er
SFX a0 yer yeront [^ou]yer
SFX a0 yer ieront [aou]yer
SFX a0 er erais [^y]er
SFX a0 yer yerais [^ou]yer
SFX a0 yer ierais [aou]yer
SFX a0 er erait [^y]er
SFX a0 yer yerait [^ou]yer
SFX a0 yer ierait [aou]yer
SFX a0 er erions [^y]er
SFX a0 yer yerions [^ou]yer
SFX a0 yer ierions [aou]yer
SFX a0 er eriez [^y]er
SFX a0 yer yeriez [^ou]yer
SFX a0 yer ieriez [aou]yer
SFX a0 er eraient [^y]er
SFX a0 yer yeraient [^ou]yer
SFX a0 yer ieraient [aou]yer
SFX a0 er asse [^cg]er
SFX a0 cer çasse cer
SFX a0 ger geasse ger
SFX a0 er asses [^cg]er
SFX a0 cer çasses cer
SFX a0 ger geasses ger
SFX a0 er ât [^cg]er
SFX a0 cer çât cer
SFX a0 ger geât ger
SFX a0 er assions [^cg]er
SFX a0 cer çassions cer
SFX a0 ger geassions ger
SFX a0 er assiez [^cg]er
SFX a0 cer çassiez cer
SFX a0 ger geassiez ger
SFX a0 er assent [^cg]er
SFX a0 cer çassent cer
SFX a0 ger geassent ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a1 Y 102
SFX a1 er er/n'q'd' er
SFX a1 er ant/n'q' [^cg]er
SFX a1 cer çant/n'q' cer
SFX a1 ger geant/n'q' ger
SFX a1 er e/n'q'j' [^y]er
SFX a1 yer ye/n'q'j' [^ou]yer
SFX a1 yer ie/n'q'j' [aou]yer
SFX a1 er es/n' [^y]er
SFX a1 yer yes/n' [^ou]yer
SFX a1 yer ies/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a1 er ent/n'q' [^y]er
SFX a1 yer yent/n'q' [^ou]yer
SFX a1 yer ient/n'q' [aou]yer
SFX a1 er ais/n'j' [^cg]er
SFX a1 cer çais/n'j' cer
SFX a1 ger geais/n'j' ger
SFX a1 er ait/n'q' [^cg]er
SFX a1 cer çait/n'q' cer
SFX a1 ger geait/n'q' ger
SFX a1 er ions/n' er
SFX a1 er iez/n' er
SFX a1 er aient/n'q' [^cg]er
SFX a1 cer çaient/n'q' cer
SFX a1 ger geaient/n'q' ger
SFX a1 er ai/n'j' [^cg]er
SFX a1 cer çai/n'j' cer
SFX a1 ger geai/n'j' ger
SFX a1 er as/n' [^cg]er
SFX a1 cer ças/n' cer
SFX a1 ger geas/n' ger
SFX a1 er a/n'q' [^cg]er
SFX a1 cer ça/n'q' cer
SFX a1 ger gea/n'q' ger
SFX a1 er âmes/n' [^cg]er
SFX a1 cer çâmes/n' cer
SFX a1 ger geâmes/n' ger
SFX a1 er âtes/n' [^cg]er
SFX a1 cer çâtes/n' cer
SFX a1 ger geâtes/n' ger
SFX a1 er èrent/n'q' er
SFX a1 er erai/n'j' [^y]er
SFX a1 yer yerai/n'j' [^ou]yer
SFX a1 yer ierai/n'j' [aou]yer
SFX a1 er eras/n' [^y]er
SFX a1 yer yeras/n' [^ou]yer
SFX a1 yer ieras/n' [aou]yer
SFX a1 er era/n'q' [^y]er
SFX a1 yer yera/n'q' [^ou]yer
SFX a1 yer iera/n'q' [aou]yer
SFX a1 er erons/n' [^y]er
SFX a1 yer yerons/n' [^ou]yer
SFX a1 yer ierons/n' [aou]yer
SFX a1 er erez/n' [^y]er
SFX a1 yer yerez/n' [^ou]yer
SFX a1 yer ierez/n' [aou]yer
SFX a1 er eront/n'q' [^y]er
SFX a1 yer yeront/n'q' [^ou]yer
SFX a1 yer ieront/n'q' [aou]yer
SFX a1 er erais/n'j' [^y]er
SFX a1 yer yerais/n'j' [^ou]yer
SFX a1 yer ierais/n'j' [aou]yer
SFX a1 er erait/n'q' [^y]er
SFX a1 yer yerait/n'q' [^ou]yer
SFX a1 yer ierait/n'q' [aou]yer
SFX a1 er erions/n' [^y]er
SFX a1 yer yerions/n' [^ou]yer
SFX a1 yer ierions/n' [aou]yer
SFX a1 er eriez/n' [^y]er
SFX a1 yer yeriez/n' [^ou]yer
SFX a1 yer ieriez/n' [aou]yer
SFX a1 er eraient/n'q' [^y]er
SFX a1 yer yeraient/n'q' [^ou]yer
SFX a1 yer ieraient/n'q' [aou]yer
SFX a1 er asse/n'j' [^cg]er
SFX a1 cer çasse/n'j' cer
SFX a1 ger geasse/n'j' ger
SFX a1 er asses/n' [^cg]er
SFX a1 cer çasses/n' cer
SFX a1 ger geasses/n' ger
SFX a1 er ât/n'q' [^cg]er
SFX a1 cer çât/n'q' cer
SFX a1 ger geât/n'q' ger
SFX a1 er assions/n' [^cg]er
SFX a1 cer çassions/n' cer
SFX a1 ger geassions/n' ger
SFX a1 er assiez/n' [^cg]er
SFX a1 cer çassiez/n' cer
SFX a1 ger geassiez/n' ger
SFX a1 er assent/n'q' [^cg]er
SFX a1 cer çassent/n'q' cer
SFX a1 ger geassent/n'q' ger
SFX a1 er e/n' [^y]er
SFX a1 yer ye/n' [^ou]yer
SFX a1 yer ie/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a2 Y 102
SFX a2 er er/n'q'd'l'm't's' er
SFX a2 er ant/n'q'l'm't's' [^cg]er
SFX a2 cer çant/n'q'l'm't's' cer
SFX a2 ger geant/n'q'l'm't's' ger
SFX a2 er e/n'q'j'l'm't's' [^y]er
SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a2 yer ie/n'q'j'l'm't's' [aou]yer
SFX a2 er es/n'q'l'm' [^y]er
SFX a2 yer yes/n'q'l'm' [^ou]yer
SFX a2 yer ies/n'q'l'm' [aou]yer
SFX a2 er ons/n'q'l't' [^cg]er
SFX a2 cer çons/n'q'l't' cer
SFX a2 ger geons/n'q'l't' ger
SFX a2 er ez/n'q'l'm' er
SFX a2 er ent/n'q'l'm't's' [^y]er
SFX a2 yer yent/n'q'l'm't's' [^ou]yer
SFX a2 yer ient/n'q'l'm't's' [aou]yer
SFX a2 er ais/n'q'j'l'm't' [^cg]er
SFX a2 cer çais/n'q'j'l'm't' cer
SFX a2 ger geais/n'q'j'l'm't' ger
SFX a2 er ait/n'q'l'm't's' [^cg]er
SFX a2 cer çait/n'q'l'm't's' cer
SFX a2 ger geait/n'q'l'm't's' ger
SFX a2 er ions/n'q'l't' er
SFX a2 er iez/n'q'l'm' er
SFX a2 er aient/n'q'l'm't's' [^cg]er
SFX a2 cer çaient/n'q'l'm't's' cer
SFX a2 ger geaient/n'q'l'm't's' ger
SFX a2 er ai/n'q'j'l't' [^cg]er
SFX a2 cer çai/n'q'j'l't' cer
SFX a2 ger geai/n'q'j'l't' ger
SFX a2 er as/n'q'l'm' [^cg]er
SFX a2 cer ças/n'q'l'm' cer
SFX a2 ger geas/n'q'l'm' ger
SFX a2 er a/n'q'l'm't's' [^cg]er
SFX a2 cer ça/n'q'l'm't's' cer
SFX a2 ger gea/n'q'l'm't's' ger
SFX a2 er âmes/n'q'l't' [^cg]er
SFX a2 cer çâmes/n'q'l't' cer
SFX a2 ger geâmes/n'q'l't' ger
SFX a2 er âtes/n'q'l'm' [^cg]er
SFX a2 cer çâtes/n'q'l'm' cer
SFX a2 ger geâtes/n'q'l'm' ger
SFX a2 er èrent/n'q'l'm't's' er
SFX a2 er erai/n'q'j'l't' [^y]er
SFX a2 yer yerai/n'q'j'l't' [^ou]yer
SFX a2 yer ierai/n'q'j'l't' [aou]yer
SFX a2 er eras/n'q'l'm' [^y]er
SFX a2 yer yeras/n'q'l'm' [^ou]yer
SFX a2 yer ieras/n'q'l'm' [aou]yer
SFX a2 er era/n'q'l'm't's' [^y]er
SFX a2 yer yera/n'q'l'm't's' [^ou]yer
SFX a2 yer iera/n'q'l'm't's' [aou]yer
SFX a2 er erons/n'q'l't' [^y]er
SFX a2 yer yerons/n'q'l't' [^ou]yer
SFX a2 yer ierons/n'q'l't' [aou]yer
SFX a2 er erez/n'q'l'm' [^y]er
SFX a2 yer yerez/n'q'l'm' [^ou]yer
SFX a2 yer ierez/n'q'l'm' [aou]yer
SFX a2 er eront/n'q'l'm't's' [^y]er
SFX a2 yer yeront/n'q'l'm't's' [^ou]yer
SFX a2 yer ieront/n'q'l'm't's' [aou]yer
SFX a2 er erais/n'q'j'l'm't' [^y]er
SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a2 yer ierais/n'q'j'l'm't' [aou]yer
SFX a2 er erait/n'q'l'm't's' [^y]er
SFX a2 yer yerait/n'q'l'm't's' [^ou]yer
SFX a2 yer ierait/n'q'l'm't's' [aou]yer
SFX a2 er erions/n'q'l't' [^y]er
SFX a2 yer yerions/n'q'l't' [^ou]yer
SFX a2 yer ierions/n'q'l't' [aou]yer
SFX a2 er eriez/n'q'l'm' [^y]er
SFX a2 yer yeriez/n'q'l'm' [^ou]yer
SFX a2 yer ieriez/n'q'l'm' [aou]yer
SFX a2 er eraient/n'q'l'm't's' [^y]er
SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a2 yer ieraient/n'q'l'm't's' [aou]yer
SFX a2 er asse/n'q'j'l't' [^cg]er
SFX a2 cer çasse/n'q'j'l't' cer
SFX a2 ger geasse/n'q'j'l't' ger
SFX a2 er asses/n'q'l'm' [^cg]er
SFX a2 cer çasses/n'q'l'm' cer
SFX a2 ger geasses/n'q'l'm' ger
SFX a2 er ât/n'q'l'm't's' [^cg]er
SFX a2 cer çât/n'q'l'm't's' cer
SFX a2 ger geât/n'q'l'm't's' ger
SFX a2 er assions/n'q'l't' [^cg]er
SFX a2 cer çassions/n'q'l't' cer
SFX a2 ger geassions/n'q'l't' ger
SFX a2 er assiez/n'q'l'm' [^cg]er
SFX a2 cer çassiez/n'q'l'm' cer
SFX a2 ger geassiez/n'q'l'm' ger
SFX a2 er assent/n'q'l'm't's' [^cg]er
SFX a2 cer çassent/n'q'l'm't's' cer
SFX a2 ger geassent/n'q'l'm't's' ger
SFX a2 er e/n'l'm' [^y]er
SFX a2 yer ye/n'l'm' [^ou]yer
SFX a2 yer ie/n'l'm' [aou]yer
SFX a2 er ons/n'l' [^cg]er
SFX a2 cer çons/n'l' cer
SFX a2 ger geons/n'l' ger
SFX a2 er ez/n'l'm' er
SFX a3 Y 102
SFX a3 er er/m't's' er
SFX a3 er ant/m't's' [^cg]er
SFX a3 cer çant/m't's' cer
SFX a3 ger geant/m't's' ger
SFX a3 er e/m's' [^y]er
SFX a3 yer ye/m's' [^ou]yer
SFX a3 yer ie/m's' [aou]yer
SFX a3 er es/t' [^y]er
SFX a3 yer yes/t' [^ou]yer
SFX a3 yer ies/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 r z er
SFX a3 er ent/s' [^y]er
SFX a3 yer yent/s' [^ou]yer
SFX a3 yer ient/s' [aou]yer
SFX a3 er ais/m' [^cg]er
SFX a3 cer çais/m' cer
SFX a3 ger geais/m' ger
SFX a3 er ait/s' [^cg]er
SFX a3 cer çait/s' cer
SFX a3 ger geait/s' ger
SFX a3 er ions er
SFX a3 er iez er
SFX a3 er aient/s' [^cg]er
SFX a3 cer çaient/s' cer
SFX a3 ger geaient/s' ger
SFX a3 er ai/m' [^cg]er
SFX a3 cer çai/m' cer
SFX a3 ger geai/m' ger
SFX a3 er as/t' [^cg]er
SFX a3 cer ças/t' cer
SFX a3 ger geas/t' ger
SFX a3 er a/s' [^cg]er
SFX a3 cer ça/s' cer
SFX a3 ger gea/s' ger
SFX a3 er âmes [^cg]er
SFX a3 cer çâmes cer
SFX a3 ger geâmes ger
SFX a3 er âtes [^cg]er
SFX a3 cer çâtes/s' cer
SFX a3 ger geâtes/s' ger
SFX a3 er èrent/s' er
SFX a3 er erai/m' [^y]er
SFX a3 yer yerai/m' [^ou]yer
SFX a3 yer ierai/m' [aou]yer
SFX a3 er eras/t' [^y]er
SFX a3 yer yeras/t' [^ou]yer
SFX a3 yer ieras/t' [aou]yer
SFX a3 er era/s' [^y]er
SFX a3 yer yera/s' [^ou]yer
SFX a3 yer iera/s' [aou]yer
SFX a3 er erons [^y]er
SFX a3 yer yerons [^ou]yer
SFX a3 yer ierons [aou]yer
SFX a3 er erez [^y]er
SFX a3 yer yerez [^ou]yer
SFX a3 yer ierez [aou]yer
SFX a3 er eront/s' [^y]er
SFX a3 yer yeront/s' [^ou]yer
SFX a3 yer ieront/s' [aou]yer
SFX a3 er erais/m't' [^y]er
SFX a3 yer yerais/m't' [^ou]yer
SFX a3 yer ierais/m't' [aou]yer
SFX a3 er erait/s' [^y]er
SFX a3 yer yerait/s' [^ou]yer
SFX a3 yer ierait/s' [aou]yer
SFX a3 er erions [^y]er
SFX a3 yer yerions [^ou]yer
SFX a3 yer ierions [aou]yer
SFX a3 er eriez [^y]er
SFX a3 yer yeriez [^ou]yer
SFX a3 yer ieriez [aou]yer
SFX a3 er eraient/s' [^y]er
SFX a3 yer yeraient/s' [^ou]yer
SFX a3 yer ieraient/s' [aou]yer
SFX a3 er asse/m' [^cg]er
SFX a3 cer çasse/m' cer
SFX a3 ger geasse/m' ger
SFX a3 er asses/t' [^cg]er
SFX a3 cer çasses/t' cer
SFX a3 ger geasses/t' ger
SFX a3 er ât/s' [^cg]er
SFX a3 cer çât/s' cer
SFX a3 ger geât/s' ger
SFX a3 er assions [^cg]er
SFX a3 cer çassions cer
SFX a3 ger geassions ger
SFX a3 er assiez [^cg]er
SFX a3 cer çassiez cer
SFX a3 ger geassiez ger
SFX a3 er assent/s' [^cg]er
SFX a3 cer çassent/s' cer
SFX a3 ger geassent/s' ger
SFX a3 er e/t' [^y]er
SFX a3 yer ye/t' [^ou]yer
SFX a3 yer ie/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 er ez er
SFX a4 Y 102
SFX a4 er er/n'q'd'l'm't's' er
SFX a4 er ant/n'q'l'm't's' [^cg]er
SFX a4 cer çant/n'q'l'm't's' cer
SFX a4 ger geant/n'q'l'm't's' ger
SFX a4 er e/n'q'j'l'm't's' [^y]er
SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a4 yer ie/n'q'j'l'm't's' [aou]yer
SFX a4 er es/n'q'l'm't' [^y]er
SFX a4 yer yes/n'q'l'm't' [^ou]yer
SFX a4 yer ies/n'q'l'm't' [aou]yer
SFX a4 er ons/n'q'l't' [^cg]er
SFX a4 cer çons/n'q'l't' cer
SFX a4 ger geons/n'q'l't' ger
SFX a4 er ez/n'q'l'm' er
SFX a4 er ent/n'q'l'm't's' [^y]er
SFX a4 yer yent/n'q'l'm't's' [^ou]yer
SFX a4 yer ient/n'q'l'm't's' [aou]yer
SFX a4 er ais/n'q'j'l'm't' [^cg]er
SFX a4 cer çais/n'q'j'l'm't' cer
SFX a4 ger geais/n'q'j'l'm't' ger
SFX a4 er ait/n'q'l'm't's' [^cg]er
SFX a4 cer çait/n'q'l'm't's' cer
SFX a4 ger geait/n'q'l'm't's' ger
SFX a4 er ions/n'q'l't' er
SFX a4 er iez/n'q'l'm' er
SFX a4 er aient/n'q'l'm't's' [^cg]er
SFX a4 cer çaient/n'q'l'm't's' cer
SFX a4 ger geaient/n'q'l'm't's' ger
SFX a4 er ai/n'q'j'l'm't' [^cg]er
SFX a4 cer çai/n'q'j'l'm't' cer
SFX a4 ger geai/n'q'j'l'm't' ger
SFX a4 er as/n'q'l'm't' [^cg]er
SFX a4 cer ças/n'q'l'm't' cer
SFX a4 ger geas/n'q'l'm't' ger
SFX a4 er a/n'q'l'm't's' [^cg]er
SFX a4 cer ça/n'q'l'm't's' cer
SFX a4 ger gea/n'q'l'm't's' ger
SFX a4 er âmes/n'q'l't' [^cg]er
SFX a4 cer çâmes/n'q'l't' cer
SFX a4 ger geâmes/n'q'l't' ger
SFX a4 er âtes/n'q'l'm' [^cg]er
SFX a4 cer çâtes/n'q'l'm' cer
SFX a4 ger geâtes/n'q'l'm' ger
SFX a4 er èrent/n'q'l'm't's' er
SFX a4 er erai/n'q'j'l'm't' [^y]er
SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierai/n'q'j'l'm't' [aou]yer
SFX a4 er eras/n'q'l'm't' [^y]er
SFX a4 yer yeras/n'q'l'm't' [^ou]yer
SFX a4 yer ieras/n'q'l'm't' [aou]yer
SFX a4 er era/n'q'l'm't's' [^y]er
SFX a4 yer yera/n'q'l'm't's' [^ou]yer
SFX a4 yer iera/n'q'l'm't's' [aou]yer
SFX a4 er erons/n'q'l't' [^y]er
SFX a4 yer yerons/n'q'l't' [^ou]yer
SFX a4 yer ierons/n'q'l't' [aou]yer
SFX a4 er erez/n'q'l'm' [^y]er
SFX a4 yer yerez/n'q'l'm' [^ou]yer
SFX a4 yer ierez/n'q'l'm' [aou]yer
SFX a4 er eront/n'q'l'm't's' [^y]er
SFX a4 yer yeront/n'q'l'm't's' [^ou]yer
SFX a4 yer ieront/n'q'l'm't's' [aou]yer
SFX a4 er erais/n'q'j'l'm't' [^y]er
SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierais/n'q'j'l'm't' [aou]yer
SFX a4 er erait/n'q'l'm't's' [^y]er
SFX a4 yer yerait/n'q'l'm't's' [^ou]yer
SFX a4 yer ierait/n'q'l'm't's' [aou]yer
SFX a4 er erions/n'q'l't' [^y]er
SFX a4 yer yerions/n'q'l't' [^ou]yer
SFX a4 yer ierions/n'q'l't' [aou]yer
SFX a4 er eriez/n'q'l'm' [^y]er
SFX a4 yer yeriez/n'q'l'm' [^ou]yer
SFX a4 yer ieriez/n'q'l'm' [aou]yer
SFX a4 er eraient/n'q'l'm't's' [^y]er
SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a4 yer ieraient/n'q'l'm't's' [aou]yer
SFX a4 er asse/n'q'j'l'm't' [^cg]er
SFX a4 cer çasse/n'q'j'l'm't' cer
SFX a4 ger geasse/n'q'j'l'm't' ger
SFX a4 er asses/n'q'l'm't' [^cg]er
SFX a4 cer çasses/n'q'l'm't' cer
SFX a4 ger geasses/n'q'l'm't' ger
SFX a4 er ât/n'q'l'm't's' [^cg]er
SFX a4 cer çât/n'q'l'm't's' cer
SFX a4 ger geât/n'q'l'm't's' ger
SFX a4 er assions/n'q'l't' [^cg]er
SFX a4 cer çassions/n'q'l't' cer
SFX a4 ger geassions/n'q'l't' ger
SFX a4 er assiez/n'q'l'm' [^cg]er
SFX a4 cer çassiez/n'q'l'm' cer
SFX a4 ger geassiez/n'q'l'm' ger
SFX a4 er assent/n'q'l'm't's' [^cg]er
SFX a4 cer çassent/n'q'l'm't's' cer
SFX a4 ger geassent/n'q'l'm't's' ger
SFX a4 er e/n'l'm't' [^y]er
SFX a4 yer ye/n'l'm't' [^ou]yer
SFX a4 yer ie/n'l'm't' [aou]yer
SFX a4 er ons/n'l' [^cg]er
SFX a4 cer çons/n'l' cer
SFX a4 ger geons/n'l' ger
SFX a4 er ez/n'l'm' er
SFX a5 Y 102
SFX a5 er er/n'q'd'm't's' er
SFX a5 er ant/n'q'm't's' [^cg]er
SFX a5 cer çant/n'q'm't's' cer
SFX a5 ger geant/n'q'm't's' ger
SFX a5 er e/n'q'j'm't's' [^y]er
SFX a5 yer ye/n'q'j'm't's' [^ou]yer
SFX a5 yer ie/n'q'j'm't's' [aou]yer
SFX a5 er es/n'm't' [^y]er
SFX a5 yer yes/n'm't' [^ou]yer
SFX a5 yer ies/n'm't' [aou]yer
SFX a5 er ons/n't' [^cg]er
SFX a5 cer çons/n't' cer
SFX a5 ger geons/n't' ger
SFX a5 r z/n'm' er
SFX a5 er ent/n'q'm't's' [^y]er
SFX a5 yer yent/n'q'm't's' [^ou]yer
SFX a5 yer ient/n'q'm't's' [aou]yer
SFX a5 er ais/n'j'm't' [^cg]er
SFX a5 cer çais/n'j'm't' cer
SFX a5 ger geais/n'j'm't' ger
SFX a5 er ait/n'q'm't's' [^cg]er
SFX a5 cer çait/n'q'm't's' cer
SFX a5 ger geait/n'q'm't's' ger
SFX a5 er ions/n't' er
SFX a5 er iez/n'm' er
SFX a5 er aient/n'q'm't's' [^cg]er
SFX a5 cer çaient/n'q'm't's' cer
SFX a5 ger geaient/n'q'm't's' ger
SFX a5 er ai/n'j'm't' [^cg]er
SFX a5 cer çai/n'j'm't' cer
SFX a5 ger geai/n'j'm't' ger
SFX a5 er as/n'm't' [^cg]er
SFX a5 cer ças/n'm't' cer
SFX a5 ger geas/n'm't' ger
SFX a5 er a/n'q'm't's' [^cg]er
SFX a5 cer ça/n'q'm't's' cer
SFX a5 ger gea/n'q'm't's' ger
SFX a5 er âmes/n't' [^cg]er
SFX a5 cer çâmes/n't' cer
SFX a5 ger geâmes/n't' ger
SFX a5 er âtes/n'm' [^cg]er
SFX a5 cer çâtes/n'm' cer
SFX a5 ger geâtes/n'm' ger
SFX a5 er èrent/n'q'm't's' er
SFX a5 er erai/n'j'm't' [^y]er
SFX a5 yer yerai/n'j'm't' [^ou]yer
SFX a5 yer ierai/n'j'm't' [aou]yer
SFX a5 er eras/n'm't' [^y]er
SFX a5 yer yeras/n'm't' [^ou]yer
SFX a5 yer ieras/n'm't' [aou]yer
SFX a5 er era/n'q'm't's' [^y]er
SFX a5 yer yera/n'q'm't's' [^ou]yer
SFX a5 yer iera/n'q'm't's' [aou]yer
SFX a5 er erons/n't' [^y]er
SFX a5 yer yerons/n't' [^ou]yer
SFX a5 yer ierons/n't' [aou]yer
SFX a5 er erez/n'm' [^y]er
SFX a5 yer yerez/n'm' [^ou]yer
SFX a5 yer ierez/n'm' [aou]yer
SFX a5 er eront/n'q'm't's' [^y]er
SFX a5 yer yeront/n'q'm't's' [^ou]yer
SFX a5 yer ieront/n'q'm't's' [aou]yer
SFX a5 er erais/n'j'm't' [^y]er
SFX a5 yer yerais/n'j'm't' [^ou]yer
SFX a5 yer ierais/n'j'm't' [aou]yer
SFX a5 er erait/n'q'm't's' [^y]er
SFX a5 yer yerait/n'q'm't's' [^ou]yer
SFX a5 yer ierait/n'q'm't's' [aou]yer
SFX a5 er erions/n't' [^y]er
SFX a5 yer yerions/n't' [^ou]yer
SFX a5 yer ierions/n't' [aou]yer
SFX a5 er eriez/n'm' [^y]er
SFX a5 yer yeriez/n'm' [^ou]yer
SFX a5 yer ieriez/n'm' [aou]yer
SFX a5 er eraient/n'q'm't's' [^y]er
SFX a5 yer yeraient/n'q'm't's' [^ou]yer
SFX a5 yer ieraient/n'q'm't's' [aou]yer
SFX a5 er asse/n'j'm't' [^cg]er
SFX a5 cer çasse/n'j'm't' cer
SFX a5 ger geasse/n'j'm't' ger
SFX a5 er asses/n'm't' [^cg]er
SFX a5 cer çasses/n'm't' cer
SFX a5 ger geasses/n'm't' ger
SFX a5 er ât/n'q'm't's' [^cg]er
SFX a5 cer çât/n'q'm't's' cer
SFX a5 ger geât/n'q'm't's' ger
SFX a5 er assions/n't' [^cg]er
SFX a5 cer çassions/n't' cer
SFX a5 ger geassions/n't' ger
SFX a5 er assiez/n'm' [^cg]er
SFX a5 cer çassiez/n'm' cer
SFX a5 ger geassiez/n'm' ger
SFX a5 er assent/n'q'm't's' [^cg]er
SFX a5 cer çassent/n'q'm't's' cer
SFX a5 ger geassent/n'q'm't's' ger
SFX a5 er e/n'm' [^y]er
SFX a5 yer e/n'm' [^ou]yer
SFX a5 yer ie/n'm' [aou]yer
SFX a5 er ons/n' [^cg]er
SFX a5 cer çons/n' cer
SFX a5 ger geons/n' ger
SFX a5 er ez/n'm' er
SFX a6 Y 72
SFX a6 er er/s' er
SFX a6 er ant/s' [^cg]er
SFX a6 cer çant/s' cer
SFX a6 ger geant/s' ger
SFX a6 er e/s' [^y]er
SFX a6 yer ye/s' [^ou]yer
SFX a6 yer ie/s' [aou]yer
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a6 er ent/s' [^y]er
SFX a6 yer yent/s' [^ou]yer
SFX a6 yer ient/s' [aou]yer
SFX a6 er ait/s' [^cg]er
SFX a6 cer çait/s' cer
SFX a6 ger geait/s' ger
SFX a6 er ions er
SFX a6 er iez er
SFX a6 er aient/s' [^cg]er
SFX a6 cer çaient/s' cer
SFX a6 ger geaient/s' ger
SFX a6 er a/s' [^cg]er
SFX a6 cer ça/s' cer
SFX a6 ger gea/s' ger
SFX a6 er âmes [^cg]er
SFX a6 cer çâmes cer
SFX a6 ger geâmes ger
SFX a6 er âtes [^cg]er
SFX a6 cer çâtes/s' cer
SFX a6 ger geâtes/s' ger
SFX a6 er èrent/s' er
SFX a6 er era/s' [^y]er
SFX a6 yer yera/s' [^ou]yer
SFX a6 yer iera/s' [aou]yer
SFX a6 er erons [^y]er
SFX a6 yer yerons [^ou]yer
SFX a6 yer ierons [aou]yer
SFX a6 er erez [^y]er
SFX a6 yer yerez [^ou]yer
SFX a6 yer ierez [aou]yer
SFX a6 er eront/s' [^y]er
SFX a6 yer yeront/s' [^ou]yer
SFX a6 yer ieront/s' [aou]yer
SFX a6 er erait/s' [^y]er
SFX a6 yer yerait/s' [^ou]yer
SFX a6 yer ierait/s' [aou]yer
SFX a6 er erions [^y]er
SFX a6 yer yerions [^ou]yer
SFX a6 yer ierions [aou]yer
SFX a6 er eriez [^y]er
SFX a6 yer yeriez [^ou]yer
SFX a6 yer ieriez [aou]yer
SFX a6 er eraient/s' [^y]er
SFX a6 yer yeraient/s' [^ou]yer
SFX a6 yer ieraient/s' [aou]yer
SFX a6 er ât/s' [^cg]er
SFX a6 cer çât/s' cer
SFX a6 ger geât/s' ger
SFX a6 er assions [^cg]er
SFX a6 cer çassions cer
SFX a6 ger geassions ger
SFX a6 er assiez [^cg]er
SFX a6 cer çassiez cer
SFX a6 ger geassiez ger
SFX a6 er assent/s' [^cg]er
SFX a6 cer çassent/s' cer
SFX a6 ger geassent/s' ger
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a8 N 16
SFX a8 er er/n'd' er
SFX a8 er ant [^cg]er
SFX a8 cer çant cer
SFX a8 ger geant ger
SFX a8 er e/n' er
SFX a8 er ait/n' [^cg]er
SFX a8 cer çait/n' cer
SFX a8 ger geait/n' ger
SFX a8 er a/n' [^cg]er
SFX a8 cer ça/n' cer
SFX a8 ger gea/n' ger
SFX a8 er era/n' er
SFX a8 er erait/n' er
SFX a8 er ât/n' [^cg]er
SFX a8 cer çât/n' cer
SFX a8 ger geât/n' ger
SFX a9 N 10
SFX a9 er ent/n' er
SFX a9 er aient/n' [^cg]er
SFX a9 cer çaient/n' cer
SFX a9 ger geaient/n' ger
SFX a9 er èrent/n' er
SFX a9 er eront/n' er
SFX a9 er eraient/n' er
SFX a9 er assent/n' [^cg]er
SFX a9 cer çassent/n' cer
SFX a9 ger geassent/n' ger
SFX b0 N 189
SFX b0 er ant [^c]er
SFX b0 cer çant cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 ecer èces ecer
SFX b0 emer èmes emer
SFX b0 ener ènes ener
SFX b0 eper èpes eper
SFX b0 erer ères erer
SFX b0 eser èses eser
SFX b0 ever èves ever
SFX b0 evrer èvres evrer
SFX b0 eter ètes eter
SFX b0 eler èles eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b0 ecer ècent ecer
SFX b0 emer èment emer
SFX b0 ener ènent ener
SFX b0 eper èpent eper
SFX b0 erer èrent erer
SFX b0 eser èsent eser
SFX b0 ever èvent ever
SFX b0 evrer èvrent evrer
SFX b0 eter ètent eter
SFX b0 eler èlent eler
SFX b0 er ais [^c]er
SFX b0 cer çais cer
SFX b0 er ait [^c]er
SFX b0 cer çait cer
SFX b0 er ions er
SFX b0 er iez er
SFX b0 er aient [^c]er
SFX b0 cer çaient cer
SFX b0 er ai [^c]er
SFX b0 cer çai cer
SFX b0 er as [^c]er
SFX b0 cer ças cer
SFX b0 er a [^c]er
SFX b0 cer ça cer
SFX b0 er âmes [^c]er
SFX b0 cer çâmes cer
SFX b0 er âtes [^c]er
SFX b0 cer çâtes cer
SFX b0 er èrent er
SFX b0 ecer ècerai ecer
SFX b0 emer èmerai emer
SFX b0 ener ènerai ener
SFX b0 eper èperai eper
SFX b0 erer èrerai erer
SFX b0 eser èserai eser
SFX b0 ever èverai ever
SFX b0 evrer èvrerai evrer
SFX b0 eter èterai eter
SFX b0 eler èlerai eler
SFX b0 ecer èceras ecer
SFX b0 emer èmeras emer
SFX b0 ener èneras ener
SFX b0 eper èperas eper
SFX b0 erer èreras erer
SFX b0 eser èseras eser
SFX b0 ever èveras ever
SFX b0 evrer èvreras evrer
SFX b0 eter èteras eter
SFX b0 eler èleras eler
SFX b0 ecer ècera ecer
SFX b0 emer èmera emer
SFX b0 ener ènera ener
SFX b0 eper èpera eper
SFX b0 erer èrera erer
SFX b0 eser èsera eser
SFX b0 ever èvera ever
SFX b0 evrer èvrera evrer
SFX b0 eter ètera eter
SFX b0 eler èlera eler
SFX b0 ecer ècerons ecer
SFX b0 emer èmerons emer
SFX b0 ener ènerons ener
SFX b0 eper èperons eper
SFX b0 erer èrerons erer
SFX b0 eser èserons eser
SFX b0 ever èverons ever
SFX b0 evrer èvrerons evrer
SFX b0 eter èterons eter
SFX b0 eler èlerons eler
SFX b0 ecer ècerez ecer
SFX b0 emer èmerez emer
SFX b0 ener ènerez ener
SFX b0 eper èperez eper
SFX b0 erer èrerez erer
SFX b0 eser èserez eser
SFX b0 ever èverez ever
SFX b0 evrer èvrerez evrer
SFX b0 eter èterez eter
SFX b0 eler èlerez eler
SFX b0 ecer èceront ecer
SFX b0 emer èmeront emer
SFX b0 ener èneront ener
SFX b0 eper èperont eper
SFX b0 erer èreront erer
SFX b0 eser èseront eser
SFX b0 ever èveront ever
SFX b0 evrer èvreront evrer
SFX b0 eter èteront eter
SFX b0 eler èleront eler
SFX b0 ecer ècerais ecer
SFX b0 emer èmerais emer
SFX b0 ener ènerais ener
SFX b0 eper èperais eper
SFX b0 erer èrerais erer
SFX b0 eser èserais eser
SFX b0 ever èverais ever
SFX b0 evrer èvrerais evrer
SFX b0 eter èterais eter
SFX b0 eler èlerais eler
SFX b0 ecer ècerait ecer
SFX b0 emer èmerait emer
SFX b0 ener ènerait ener
SFX b0 eper èperait eper
SFX b0 erer èrerait erer
SFX b0 eser èserait eser
SFX b0 ever èverait ever
SFX b0 evrer èvrerait evrer
SFX b0 eter èterait eter
SFX b0 eler èlerait eler
SFX b0 ecer ècerions ecer
SFX b0 emer èmerions emer
SFX b0 ener ènerions ener
SFX b0 eper èperions eper
SFX b0 erer èrerions erer
SFX b0 eser èserions eser
SFX b0 ever èverions ever
SFX b0 evrer èvrerions evrer
SFX b0 eter èterions eter
SFX b0 eler èlerions eler
SFX b0 ecer èceriez ecer
SFX b0 emer èmeriez emer
SFX b0 ener èneriez ener
SFX b0 eper èperiez eper
SFX b0 erer èreriez erer
SFX b0 eser èseriez eser
SFX b0 ever èveriez ever
SFX b0 evrer èvreriez evrer
SFX b0 eter èteriez eter
SFX b0 eler èleriez eler
SFX b0 ecer èceraient ecer
SFX b0 emer èmeraient emer
SFX b0 ener èneraient ener
SFX b0 eper èperaient eper
SFX b0 erer èreraient erer
SFX b0 eser èseraient eser
SFX b0 ever èveraient ever
SFX b0 evrer èvreraient evrer
SFX b0 eter èteraient eter
SFX b0 eler èleraient eler
SFX b0 er asse [^c]er
SFX b0 cer çasse cer
SFX b0 er asses [^c]er
SFX b0 cer çasses cer
SFX b0 er ât [^c]er
SFX b0 cer çât cer
SFX b0 er assions [^c]er
SFX b0 cer çassions cer
SFX b0 er assiez [^c]er
SFX b0 cer çassiez cer
SFX b0 er assent [^c]er
SFX b0 cer çassent cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b1 Y 190
SFX b1 er er/n'q'd' er
SFX b1 er ant/n'q' [^c]er
SFX b1 cer çant/n'q' cer
SFX b1 ecer èce/n'j'q' ecer
SFX b1 emer ème/n'j'q' emer
SFX b1 ener ène/n'j'q' ener
SFX b1 eper èpe/n'j'q' eper
SFX b1 erer ère/n'j'q' erer
SFX b1 eser èse/n'j'q' eser
SFX b1 ever ève/n'j'q' ever
SFX b1 evrer èvre/n'j'q' evrer
SFX b1 eter ète/n'j'q' eter
SFX b1 eler èle/n'j'q' eler
SFX b1 ecer èces/n' ecer
SFX b1 emer èmes/n' emer
SFX b1 ener ènes/n' ener
SFX b1 eper èpes/n' eper
SFX b1 erer ères/n' erer
SFX b1 eser èses/n' eser
SFX b1 ever èves/n' ever
SFX b1 evrer èvres/n' evrer
SFX b1 eter ètes/n' eter
SFX b1 eler èles/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b1 ecer ècent/n'q' ecer
SFX b1 emer èment/n'q' emer
SFX b1 ener ènent/n'q' ener
SFX b1 eper èpent/n'q' eper
SFX b1 erer èrent/n'q' erer
SFX b1 eser èsent/n'q' eser
SFX b1 ever èvent/n'q' ever
SFX b1 evrer èvrent/n'q' evrer
SFX b1 eter ètent/n'q' eter
SFX b1 eler èlent/n'q' eler
SFX b1 er ais/n'j' [^c]er
SFX b1 cer çais/n'j' cer
SFX b1 er ait/n'q' [^c]er
SFX b1 cer çait/n'q' cer
SFX b1 er ions/n' er
SFX b1 er iez/n' er
SFX b1 er aient/n'q' [^c]er
SFX b1 cer çaient/n'q' cer
SFX b1 er ai/n'j' [^c]er
SFX b1 cer çai/n'j' cer
SFX b1 er as/n' [^c]er
SFX b1 cer ças/n' cer
SFX b1 er a/n'q' [^c]er
SFX b1 cer ça/n'q' cer
SFX b1 er âmes/n' [^c]er
SFX b1 cer çâmes/n' cer
SFX b1 er âtes/n' [^c]er
SFX b1 cer çâtes/n' cer
SFX b1 er èrent/n'q' er
SFX b1 ecer ècerai/n'j' ecer
SFX b1 emer èmerai/n'j' emer
SFX b1 ener ènerai/n'j' ener
SFX b1 eper èperai/n'j' eper
SFX b1 erer èrerai/n'j' erer
SFX b1 eser èserai/n'j' eser
SFX b1 ever èverai/n'j' ever
SFX b1 evrer èvrerai/n'j' evrer
SFX b1 eter èterai/n'j' eter
SFX b1 eler èlerai/n'j' eler
SFX b1 ecer èceras/n' ecer
SFX b1 emer èmeras/n' emer
SFX b1 ener èneras/n' ener
SFX b1 eper èperas/n' eper
SFX b1 erer èreras/n' erer
SFX b1 eser èseras/n' eser
SFX b1 ever èveras/n' ever
SFX b1 evrer èvreras/n' evrer
SFX b1 eter èteras/n' eter
SFX b1 eler èleras/n' eler
SFX b1 ecer ècera/n'q' ecer
SFX b1 emer èmera/n'q' emer
SFX b1 ener ènera/n'q' ener
SFX b1 eper èpera/n'q' eper
SFX b1 erer èrera/n'q' erer
SFX b1 eser èsera/n'q' eser
SFX b1 ever èvera/n'q' ever
SFX b1 evrer èvrera/n'q' evrer
SFX b1 eter ètera/n'q' eter
SFX b1 eler èlera/n'q' eler
SFX b1 ecer ècerons/n' ecer
SFX b1 emer èmerons/n' emer
SFX b1 ener ènerons/n' ener
SFX b1 eper èperons/n' eper
SFX b1 erer èrerons/n' erer
SFX b1 eser èserons/n' eser
SFX b1 ever èverons/n' ever
SFX b1 evrer èvrerons/n' evrer
SFX b1 eter èterons/n' eter
SFX b1 eler èlerons/n' eler
SFX b1 ecer ècerez/n' ecer
SFX b1 emer èmerez/n' emer
SFX b1 ener ènerez/n' ener
SFX b1 eper èperez/n' eper
SFX b1 erer èrerez/n' erer
SFX b1 eser èserez/n' eser
SFX b1 ever èverez/n' ever
SFX b1 evrer èvrerez/n' evrer
SFX b1 eter èterez/n' eter
SFX b1 eler èlerez/n' eler
SFX b1 ecer èceront/n'q' ecer
SFX b1 emer èmeront/n'q' emer
SFX b1 ener èneront/n'q' ener
SFX b1 eper èperont/n'q' eper
SFX b1 erer èreront/n'q' erer
SFX b1 eser èseront/n'q' eser
SFX b1 ever èveront/n'q' ever
SFX b1 evrer èvreront/n'q' evrer
SFX b1 eter èteront/n'q' eter
SFX b1 eler èleront/n'q' eler
SFX b1 ecer ècerais/n'j' ecer
SFX b1 emer èmerais/n'j' emer
SFX b1 ener ènerais/n'j' ener
SFX b1 eper èperais/n'j' eper
SFX b1 erer èrerais/n'j' erer
SFX b1 eser èserais/n'j' eser
SFX b1 ever èverais/n'j' ever
SFX b1 evrer èvrerais/n'j' evrer
SFX b1 eter èterais/n'j' eter
SFX b1 eler èlerais/n' eler
SFX b1 ecer ècerait/n'q' ecer
SFX b1 emer èmerait/n'q' emer
SFX b1 ener ènerait/n'q' ener
SFX b1 eper èperait/n'q' eper
SFX b1 erer èrerait/n'q' erer
SFX b1 eser èserait/n'q' eser
SFX b1 ever èverait/n'q' ever
SFX b1 evrer èvrerait/n'q' evrer
SFX b1 eter èterait/n'q' eter
SFX b1 eler èlerait/n'q' eler
SFX b1 ecer ècerions/n' ecer
SFX b1 emer èmerions/n' emer
SFX b1 ener ènerions/n' ener
SFX b1 eper èperions/n' eper
SFX b1 erer èrerions/n' erer
SFX b1 eser èserions/n' eser
SFX b1 ever èverions/n' ever
SFX b1 evrer èvrerions/n' evrer
SFX b1 eter èterions/n' eter
SFX b1 eler èlerions/n' eler
SFX b1 ecer èceriez/n' ecer
SFX b1 emer èmeriez/n' emer
SFX b1 ener èneriez/n' ener
SFX b1 eper èperiez/n' eper
SFX b1 erer èreriez/n' erer
SFX b1 eser èseriez/n' eser
SFX b1 ever èveriez/n' ever
SFX b1 evrer èvreriez/n' evrer
SFX b1 eter èteriez/n' eter
SFX b1 eler èleriez/n' eler
SFX b1 ecer èceraient/n'q' ecer
SFX b1 emer èmeraient/n'q' emer
SFX b1 ener èneraient/n'q' ener
SFX b1 eper èperaient/n'q' eper
SFX b1 erer èreraient/n'q' erer
SFX b1 eser èseraient/n'q' eser
SFX b1 ever èveraient/n'q' ever
SFX b1 evrer èvreraient/n'q' evrer
SFX b1 eter èteraient/n'q' eter
SFX b1 eler èleraient/n'q' eler
SFX b1 er asse/n'j' [^c]er
SFX b1 cer çasse/n'j' cer
SFX b1 er asses/n' [^c]er
SFX b1 cer çasses/n' cer
SFX b1 er ât/n'q' [^c]er
SFX b1 cer çât/n'q' cer
SFX b1 er assions/n' [^c]er
SFX b1 cer çassions/n' cer
SFX b1 er assiez/n' [^c]er
SFX b1 cer çassiez/n' cer
SFX b1 er assent/n'q' [^c]er
SFX b1 cer çassent/n'q' cer
SFX b1 ecer èce/n' ecer
SFX b1 emer ème/n' emer
SFX b1 ener ène/n' ener
SFX b1 eper èpe/n' eper
SFX b1 erer ère/n' erer
SFX b1 eser èse/n' eser
SFX b1 ever ève/n' ever
SFX b1 evrer èvre/n' evrer
SFX b1 eter ète/n' eter
SFX b1 eler èle/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b2 Y 190
SFX b2 er er/n'q'd'l'm't's' er
SFX b2 er ant/n'q'l'm't's' [^c]er
SFX b2 cer çant/n'q'l'm't's' cer
SFX b2 ecer èce/n'q'j'l'm't's' ecer
SFX b2 emer ème/n'q'j'l'm't's' emer
SFX b2 ener ène/n'q'j'l'm't's' ener
SFX b2 eper èpe/n'q'j'l'm't's' eper
SFX b2 erer ère/n'q'j'l'm't's' erer
SFX b2 eser èse/n'q'j'l'm't's' eser
SFX b2 ever ève/n'q'j'l'm't's' ever
SFX b2 evrer èvre/n'q'j'l'm't's' evrer
SFX b2 eter ète/n'q'j'l'm't's' eter
SFX b2 eler èle/n'q'j'l'm't's' eler
SFX b2 ecer èces/n'q'l'm' ecer
SFX b2 emer èmes/n'q'l'm' emer
SFX b2 ener ènes/n'q'l'm' ener
SFX b2 eper èpes/n'q'l'm' eper
SFX b2 erer ères/n'q'l'm' erer
SFX b2 eser èses/n'q'l'm' eser
SFX b2 ever èves/n'q'l'm' ever
SFX b2 evrer èvres/n'q'l'm' evrer
SFX b2 eter ètes/n'q'l'm' eter
SFX b2 eler èles/n'q'l'm' eler
SFX b2 er ons/n'q'l't' [^c]er
SFX b2 cer çons/n'q'l't' cer
SFX b2 er ez/n'q'l'm' er
SFX b2 ecer ècent/n'q'l'm't's' ecer
SFX b2 emer èment/n'q'l'm't's' emer
SFX b2 ener ènent/n'q'l'm't's' ener
SFX b2 eper èpent/n'q'l'm't's' eper
SFX b2 erer èrent/n'q'l'm't's' erer
SFX b2 eser èsent/n'q'l'm't's' eser
SFX b2 ever èvent/n'q'l'm't's' ever
SFX b2 evrer èvrent/n'q'l'm't's' evrer
SFX b2 eter ètent/n'q'l'm't's' eter
SFX b2 eler èlent/n'q'l'm't's' eler
SFX b2 er ais/n'q'j'l'm't' [^c]er
SFX b2 cer çais/n'q'j'l'm't' cer
SFX b2 er ait/n'q'l'm't's' [^c]er
SFX b2 cer çait/n'q'l'm't's' cer
SFX b2 er ions/n'q'l't' er
SFX b2 er iez/n'q'l'm' er
SFX b2 er aient/n'q'l'm't's' [^c]er
SFX b2 cer çaient/n'q'l'm't's' cer
SFX b2 er ai/n'q'j'l't' [^c]er
SFX b2 cer çai/n'q'j'l't' cer
SFX b2 er as/n'q'l'm' [^c]er
SFX b2 cer ças/n'q'l'm' cer
SFX b2 er a/n'q'l'm't's' [^c]er
SFX b2 cer ça/n'q'l'm't's' cer
SFX b2 er âmes/n'q'l't' [^c]er
SFX b2 cer çâmes/n'q'l't' cer
SFX b2 er âtes/n'q'l'm' [^c]er
SFX b2 cer çâtes/n'q'l'm' cer
SFX b2 er èrent/n'q'l'm't's' er
SFX b2 ecer ècerai/n'q'j'l't' ecer
SFX b2 emer èmerai/n'q'j'l't' emer
SFX b2 ener ènerai/n'q'j'l't' ener
SFX b2 eper èperai/n'q'j'l't' eper
SFX b2 erer èrerai/n'q'j'l't' erer
SFX b2 eser èserai/n'q'j'l't' eser
SFX b2 ever èverai/n'q'j'l't' ever
SFX b2 evrer èvrerai/n'q'j'l't' evrer
SFX b2 eter èterai/n'q'j'l't' eter
SFX b2 eler èlerai/n'q'j'l't' eler
SFX b2 ecer èceras/n'q'l'm' ecer
SFX b2 emer èmeras/n'q'l'm' emer
SFX b2 ener èneras/n'q'l'm' ener
SFX b2 eper èperas/n'q'l'm' eper
SFX b2 erer èreras/n'q'l'm' erer
SFX b2 eser èseras/n'q'l'm' eser
SFX b2 ever èveras/n'q'l'm' ever
SFX b2 evrer èvreras/n'q'l'm' evrer
SFX b2 eter èteras/n'q'l'm' eter
SFX b2 eler èleras/n'q'l'm' eler
SFX b2 ecer ècera/n'q'l'm't's' ecer
SFX b2 emer èmera/n'q'l'm't's' emer
SFX b2 ener ènera/n'q'l'm't's' ener
SFX b2 eper èpera/n'q'l'm't's' eper
SFX b2 erer èrera/n'q'l'm't's' erer
SFX b2 eser èsera/n'q'l'm't's' eser
SFX b2 ever èvera/n'q'l'm't's' ever
SFX b2 evrer èvrera/n'q'l'm't's' evrer
SFX b2 eter ètera/n'q'l'm't's' eter
SFX b2 eler èlera/n'q'l'm't's' eler
SFX b2 ecer ècerons/n'q'l't' ecer
SFX b2 emer èmerons/n'q'l't' emer
SFX b2 ener ènerons/n'q'l't' ener
SFX b2 eper èperons/n'q'l't' eper
SFX b2 erer èrerons/n'q'l't' erer
SFX b2 eser èserons/n'q'l't' eser
SFX b2 ever èverons/n'q'l't' ever
SFX b2 evrer èvrerons/n'q'l't' evrer
SFX b2 eter èterons/n'q'l't' eter
SFX b2 eler èlerons/n'q'l't' eler
SFX b2 ecer ècerez/n'q'l'm' ecer
SFX b2 emer èmerez/n'q'l'm' emer
SFX b2 ener ènerez/n'q'l'm' ener
SFX b2 eper èperez/n'q'l'm' eper
SFX b2 erer èrerez/n'q'l'm' erer
SFX b2 eser èserez/n'q'l'm' eser
SFX b2 ever èverez/n'q'l'm' ever
SFX b2 evrer èvrerez/n'q'l'm' evrer
SFX b2 eter èterez/n'q'l'm' eter
SFX b2 eler èlerez/n'q'l'm' eler
SFX b2 ecer èceront/n'q'l'm't's' ecer
SFX b2 emer èmeront/n'q'l'm't's' emer
SFX b2 ener èneront/n'q'l'm't's' ener
SFX b2 eper èperont/n'q'l'm't's' eper
SFX b2 erer èreront/n'q'l'm't's' erer
SFX b2 eser èseront/n'q'l'm't's' eser
SFX b2 ever èveront/n'q'l'm't's' ever
SFX b2 evrer èvreront/n'q'l'm't's' evrer
SFX b2 eter èteront/n'q'l'm't's' eter
SFX b2 eler èleront/n'q'l'm't's' eler
SFX b2 ecer ècerais/n'q'j'l'm't' ecer
SFX b2 emer èmerais/n'q'j'l'm't' emer
SFX b2 ener ènerais/n'q'j'l'm't' ener
SFX b2 eper èperais/n'q'j'l'm't' eper
SFX b2 erer èrerais/n'q'j'l'm't' erer
SFX b2 eser èserais/n'q'j'l'm't' eser
SFX b2 ever èverais/n'q'j'l'm't' ever
SFX b2 evrer èvrerais/n'q'j'l'm't' evrer
SFX b2 eter èterais/n'q'j'l'm't' eter
SFX b2 eler èlerais/n'q'j'l'm't' eler
SFX b2 ecer ècerait/n'q'l'm't's' ecer
SFX b2 emer èmerait/n'q'l'm't's' emer
SFX b2 ener ènerait/n'q'l'm't's' ener
SFX b2 eper èperait/n'q'l'm't's' eper
SFX b2 erer èrerait/n'q'l'm't's' erer
SFX b2 eser èserait/n'q'l'm't's' eser
SFX b2 ever èverait/n'q'l'm't's' ever
SFX b2 evrer èvrerait/n'q'l'm't's' evrer
SFX b2 eter èterait/n'q'l'm't's' eter
SFX b2 eler èlerait/n'q'l'm't's' eler
SFX b2 ecer ècerions/n'q'l't' ecer
SFX b2 emer èmerions/n'q'l't' emer
SFX b2 ener ènerions/n'q'l't' ener
SFX b2 eper èperions/n'q'l't' eper
SFX b2 erer èrerions/n'q'l't' erer
SFX b2 eser èserions/n'q'l't' eser
SFX b2 ever èverions/n'q'l't' ever
SFX b2 evrer èvrerions/n'q'l't' evrer
SFX b2 eter èterions/n'q'l't' eter
SFX b2 eler èlerions/n'q'l't' eler
SFX b2 ecer èceriez/n'q'l'm' ecer
SFX b2 emer èmeriez/n'q'l'm' emer
SFX b2 ener èneriez/n'q'l'm' ener
SFX b2 eper èperiez/n'q'l'm' eper
SFX b2 erer èreriez/n'q'l'm' erer
SFX b2 eser èseriez/n'q'l'm' eser
SFX b2 ever èveriez/n'q'l'm' ever
SFX b2 evrer èvreriez/n'q'l'm' evrer
SFX b2 eter èteriez/n'q'l'm' eter
SFX b2 eler èleriez/n'q'l'm' eler
SFX b2 ecer èceraient/n'q'l'm't's' ecer
SFX b2 emer èmeraient/n'q'l'm't's' emer
SFX b2 ener èneraient/n'q'l'm't's' ener
SFX b2 eper èperaient/n'q'l'm't's' eper
SFX b2 erer èreraient/n'q'l'm't's' erer
SFX b2 eser èseraient/n'q'l'm't's' eser
SFX b2 ever èveraient/n'q'l'm't's' ever
SFX b2 evrer èvreraient/n'q'l'm't's' evrer
SFX b2 eter èteraient/n'q'l'm't's' eter
SFX b2 eler èleraient/n'q'l'm't's' eler
SFX b2 er asse/n'q'j'l't' [^c]er
SFX b2 cer çasse/n'q'j'l't' cer
SFX b2 er asses/n'q'l'm' [^c]er
SFX b2 cer çasses/n'q'l'm' cer
SFX b2 er ât/n'q'l'm't's' [^c]er
SFX b2 cer çât/n'q'l'm't's' cer
SFX b2 er assions/n'q'l't' [^c]er
SFX b2 cer çassions/n'q'l't' cer
SFX b2 er assiez/n'q'l'm' [^c]er
SFX b2 cer çassiez/n'q'l'm' cer
SFX b2 er assent/n'q'l'm't's' [^c]er
SFX b2 cer çassent/n'q'l'm't's' cer
SFX b2 ecer èce/n'l'm' ecer
SFX b2 emer ème/n'l'm' emer
SFX b2 ener ène/n'l'm' ener
SFX b2 eper èpe/n'l'm' eper
SFX b2 erer ère/n'l'm' erer
SFX b2 eser èse/n'l'm' eser
SFX b2 ever ève/n'l'm' ever
SFX b2 evrer èvre/n'l'm' evrer
SFX b2 eter ète/n'l'm' eter
SFX b2 eler èle/n'l'm' eler
SFX b2 er ons/n'l' [^c]er
SFX b2 cer çons/n'l' cer
SFX b2 er ez/n'l'm' er
SFX b3 Y 190
SFX b3 er er/m't's' er
SFX b3 er ant/m't's' [^c]er
SFX b3 cer çant/m't's' cer
SFX b3 ecer èce/m's' ecer
SFX b3 emer ème/m's' emer
SFX b3 ener ène/m's' ener
SFX b3 eper èpe/m's' eper
SFX b3 erer ère/m's' erer
SFX b3 eser èse/m's' eser
SFX b3 ever ève/m's' ever
SFX b3 evrer èvre/m's' evrer
SFX b3 eter ète/m's' eter
SFX b3 eler èle/m's' eler
SFX b3 ecer èces/t' ecer
SFX b3 emer èmes/t' emer
SFX b3 ener ènes/t' ener
SFX b3 eper èpes/t' eper
SFX b3 erer ères/t' erer
SFX b3 eser èses/t' eser
SFX b3 ever èves/t' ever
SFX b3 evrer èvres/t' evrer
SFX b3 eter ètes/t' eter
SFX b3 eler èles/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b3 ecer ècent/s' ecer
SFX b3 emer èment/s' emer
SFX b3 ener ènent/s' ener
SFX b3 eper èpent/s' eper
SFX b3 erer èrent/s' erer
SFX b3 eser èsent/s' eser
SFX b3 ever èvent/s' ever
SFX b3 evrer èvrent/s' evrer
SFX b3 eter ètent/s' eter
SFX b3 eler èlent/s' eler
SFX b3 er ais/m't' [^c]er
SFX b3 cer çais/m't' cer
SFX b3 er ait/s' [^c]er
SFX b3 cer çait/s' cer
SFX b3 er ions er
SFX b3 er iez er
SFX b3 er aient/s' [^c]er
SFX b3 cer çaient/s' cer
SFX b3 er ai/m' [^c]er
SFX b3 cer çai/m' cer
SFX b3 er as/t' [^c]er
SFX b3 cer ças/t' cer
SFX b3 er a/s' [^c]er
SFX b3 cer ça/s' cer
SFX b3 er âmes [^c]er
SFX b3 cer çâmes cer
SFX b3 er âtes [^c]er
SFX b3 cer çâtes cer
SFX b3 er èrent/s' er
SFX b3 ecer ècerai/m' ecer
SFX b3 emer èmerai/m' emer
SFX b3 ener ènerai/m' ener
SFX b3 eper èperai/m' eper
SFX b3 erer èrerai/m' erer
SFX b3 eser èserai/m' eser
SFX b3 ever èverai/m' ever
SFX b3 evrer èvrerai/m' evrer
SFX b3 eter èterai/m' eter
SFX b3 eler èlerai/m' eler
SFX b3 ecer èceras/t' ecer
SFX b3 emer èmeras/t' emer
SFX b3 ener èneras/t' ener
SFX b3 eper èperas/t' eper
SFX b3 erer èreras/t' erer
SFX b3 eser èseras/t' eser
SFX b3 ever èveras/t' ever
SFX b3 evrer èvreras/t' evrer
SFX b3 eter èteras/t' eter
SFX b3 eler èleras/t' eler
SFX b3 ecer ècera/s' ecer
SFX b3 emer èmera/s' emer
SFX b3 ener ènera/s' ener
SFX b3 eper èpera/s' eper
SFX b3 erer èrera/s' erer
SFX b3 eser èsera/s' eser
SFX b3 ever èvera/s' ever
SFX b3 evrer èvrera/s' evrer
SFX b3 eter ètera/s' eter
SFX b3 eler èlera/s' eler
SFX b3 ecer ècerons ecer
SFX b3 emer èmerons emer
SFX b3 ener ènerons ener
SFX b3 eper èperons eper
SFX b3 erer èrerons erer
SFX b3 eser èserons eser
SFX b3 ever èverons ever
SFX b3 evrer èvrerons evrer
SFX b3 eter èterons eter
SFX b3 eler èlerons eler
SFX b3 ecer ècerez ecer
SFX b3 emer èmerez emer
SFX b3 ener ènerez ener
SFX b3 eper èperez eper
SFX b3 erer èrerez erer
SFX b3 eser èserez eser
SFX b3 ever èverez ever
SFX b3 evrer èvrerez evrer
SFX b3 eter èterez eter
SFX b3 eler èlerez eler
SFX b3 ecer èceront/s' ecer
SFX b3 emer èmeront/s' emer
SFX b3 ener èneront/s' ener
SFX b3 eper èperont/s' eper
SFX b3 erer èreront/s' erer
SFX b3 eser èseront/s' eser
SFX b3 ever èveront/s' ever
SFX b3 evrer èvreront/s' evrer
SFX b3 eter èteront/s' eter
SFX b3 eler èleront/s' eler
SFX b3 ecer ècerais/m't' ecer
SFX b3 emer èmerais/m't' emer
SFX b3 ener ènerais/m't' ener
SFX b3 eper èperais/m't' eper
SFX b3 erer èrerais/m't' erer
SFX b3 eser èserais/m't' eser
SFX b3 ever èverais/m't' ever
SFX b3 evrer èvrerais/m't' evrer
SFX b3 eter èterais/m't' eter
SFX b3 eler èlerais/m't' eler
SFX b3 ecer ècerait/s' ecer
SFX b3 emer èmerait/s' emer
SFX b3 ener ènerait/s' ener
SFX b3 eper èperait/s' eper
SFX b3 erer èrerait/s' erer
SFX b3 eser èserait/s' eser
SFX b3 ever èverait/s' ever
SFX b3 evrer èvrerait/s' evrer
SFX b3 eter èterait/s' eter
SFX b3 eler èlerait/s' eler
SFX b3 ecer ècerions ecer
SFX b3 emer èmerions emer
SFX b3 ener ènerions ener
SFX b3 eper èperions eper
SFX b3 erer èrerions erer
SFX b3 eser èserions eser
SFX b3 ever èverions ever
SFX b3 evrer èvrerions evrer
SFX b3 eter èterions eter
SFX b3 eler èlerions eler
SFX b3 ecer èceriez ecer
SFX b3 emer èmeriez emer
SFX b3 ener èneriez ener
SFX b3 eper èperiez eper
SFX b3 erer èreriez erer
SFX b3 eser èseriez eser
SFX b3 ever èveriez ever
SFX b3 evrer èvreriez evrer
SFX b3 eter èteriez eter
SFX b3 eler èleriez eler
SFX b3 ecer èceraient/s' ecer
SFX b3 emer èmeraient/s' emer
SFX b3 ener èneraient/s' ener
SFX b3 eper èperaient/s' eper
SFX b3 erer èreraient/s' erer
SFX b3 eser èseraient/s' eser
SFX b3 ever èveraient/s' ever
SFX b3 evrer èvreraient/s' evrer
SFX b3 eter èteraient/s' eter
SFX b3 eler èleraient/s' eler
SFX b3 er asse/m' [^c]er
SFX b3 cer çasse/m' cer
SFX b3 er asses/t' [^c]er
SFX b3 cer çasses/t' cer
SFX b3 er ât/s' [^c]er
SFX b3 cer çât/s' cer
SFX b3 er assions [^c]er
SFX b3 cer çassions cer
SFX b3 er assiez [^c]er
SFX b3 cer çassiez cer
SFX b3 er assent/s' [^c]er
SFX b3 cer çassent/s' cer
SFX b3 ecer èce/t' ecer
SFX b3 emer ème/t' emer
SFX b3 ener ène/t' ener
SFX b3 eper èpe/t' eper
SFX b3 erer ère/t' erer
SFX b3 eser èse/t' eser
SFX b3 ever ève/t' ever
SFX b3 evrer èvre/t' evrer
SFX b3 eter ète/t' eter
SFX b3 eler èle/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b4 Y 190
SFX b4 er er/n'q'd'l'm't's' er
SFX b4 er ant/n'q'l'm't's' [^c]er
SFX b4 cer çant/n'q'l'm't's' cer
SFX b4 ecer èce/n'q'j'l'm't's' ecer
SFX b4 emer ème/n'q'j'l'm't's' emer
SFX b4 ener ène/n'q'j'l'm't's' ener
SFX b4 eper èpe/n'q'j'l'm't's' eper
SFX b4 erer ère/n'q'j'l'm't's' erer
SFX b4 eser èse/n'q'j'l'm't's' eser
SFX b4 ever ève/n'q'j'l'm't's' ever
SFX b4 evrer èvre/n'q'j'l'm't's' evrer
SFX b4 eter ète/n'q'j'l'm't's' eter
SFX b4 eler èle/n'q'j'l'm't's' eler
SFX b4 ecer èces/n'q'l'm't' ecer
SFX b4 emer èmes/n'q'l'm't' emer
SFX b4 ener ènes/n'q'l'm't' ener
SFX b4 eper èpes/n'q'l'm't' eper
SFX b4 erer ères/n'q'l'm't' erer
SFX b4 eser èses/n'q'l'm't' eser
SFX b4 ever èves/n'q'l'm't' ever
SFX b4 evrer èvres/n'q'l'm't' evrer
SFX b4 eter ètes/n'q'l'm't' eter
SFX b4 eler èles/n'q'l'm't' eler
SFX b4 er ons/n'q'l't' [^c]er
SFX b4 cer çons/n'q'l't' cer
SFX b4 er ez/n'q'l'm' er
SFX b4 ecer ècent/n'q'l'm't's' ecer
SFX b4 emer èment/n'q'l'm't's' emer
SFX b4 ener ènent/n'q'l'm't's' ener
SFX b4 eper èpent/n'q'l'm't's' eper
SFX b4 erer èrent/n'q'l'm't's' erer
SFX b4 eser èsent/n'q'l'm't's' eser
SFX b4 ever èvent/n'q'l'm't's' ever
SFX b4 evrer èvrent/n'q'l'm't's' evrer
SFX b4 eter ètent/n'q'l'm't's' eter
SFX b4 eler èlent/n'q'l'm't's' eler
SFX b4 er ais/n'q'j'l'm't' [^c]er
SFX b4 cer çais/n'q'j'l'm't' cer
SFX b4 er ait/n'q'l'm't's' [^c]er
SFX b4 cer çait/n'q'l'm't's' cer
SFX b4 er ions/n'q'l't' er
SFX b4 er iez/n'q'l'm' er
SFX b4 er aient/n'q'l'm't's' [^c]er
SFX b4 cer çaient/n'q'l'm't's' cer
SFX b4 er ai/n'q'j'l'm't' [^c]er
SFX b4 cer çai/n'q'j'l'm't' cer
SFX b4 er as/n'q'l'm't' [^c]er
SFX b4 cer ças/n'q'l'm't' cer
SFX b4 er a/n'q'l'm't's' [^c]er
SFX b4 cer ça/n'q'l'm't's' cer
SFX b4 er âmes/n'q'l't' [^c]er
SFX b4 cer çâmes/n'q'l't' cer
SFX b4 er âtes/n'q'l'm' [^c]er
SFX b4 cer çâtes/n'q'l'm' cer
SFX b4 er èrent/n'q'l'm't's' er
SFX b4 ecer ècerai/n'q'j'l'm't' ecer
SFX b4 emer èmerai/n'q'j'l'm't' emer
SFX b4 ener ènerai/n'q'j'l'm't' ener
SFX b4 eper èperai/n'q'j'l'm't' eper
SFX b4 erer èrerai/n'q'j'l'm't' erer
SFX b4 eser èserai/n'q'j'l'm't' eser
SFX b4 ever èverai/n'q'j'l'm't' ever
SFX b4 evrer èvrerai/n'q'j'l'm't' evrer
SFX b4 eter èterai/n'q'j'l'm't' eter
SFX b4 eler èlerai/n'q'j'l'm't' eler
SFX b4 ecer èceras/n'q'l'm't' ecer
SFX b4 emer èmeras/n'q'l'm't' emer
SFX b4 ener èneras/n'q'l'm't' ener
SFX b4 eper èperas/n'q'l'm't' eper
SFX b4 erer èreras/n'q'l'm't' erer
SFX b4 eser èseras/n'q'l'm't' eser
SFX b4 ever èveras/n'q'l'm't' ever
SFX b4 evrer èvreras/n'q'l'm't' evrer
SFX b4 eter èteras/n'q'l'm't' eter
SFX b4 eler èleras/n'q'l'm't' eler
SFX b4 ecer ècera/n'q'l'm't's' ecer
SFX b4 emer èmera/n'q'l'm't's' emer
SFX b4 ener ènera/n'q'l'm't's' ener
SFX b4 eper èpera/n'q'l'm't's' eper
SFX b4 erer èrera/n'q'l'm't's' erer
SFX b4 eser èsera/n'q'l'm't's' eser
SFX b4 ever èvera/n'q'l'm't's' ever
SFX b4 evrer èvrera/n'q'l'm't's' evrer
SFX b4 eter ètera/n'q'l'm't's' eter
SFX b4 eler èlera/n'q'l'm't's' eler
SFX b4 ecer ècerons/n'q'l't' ecer
SFX b4 emer èmerons/n'q'l't' emer
SFX b4 ener ènerons/n'q'l't' ener
SFX b4 eper èperons/n'q'l't' eper
SFX b4 erer èrerons/n'q'l't' erer
SFX b4 eser èserons/n'q'l't' eser
SFX b4 ever èverons/n'q'l't' ever
SFX b4 evrer èvrerons/n'q'l't' evrer
SFX b4 eter èterons/n'q'l't' eter
SFX b4 eler èlerons/n'q'l't' eler
SFX b4 ecer ècerez/n'q'l'm' ecer
SFX b4 emer èmerez/n'q'l'm' emer
SFX b4 ener ènerez/n'q'l'm' ener
SFX b4 eper èperez/n'q'l'm' eper
SFX b4 erer èrerez/n'q'l'm' erer
SFX b4 eser èserez/n'q'l'm' eser
SFX b4 ever èverez/n'q'l'm' ever
SFX b4 evrer èvrerez/n'q'l'm' evrer
SFX b4 eter èterez/n'q'l'm' eter
SFX b4 eler èlerez/n'q'l'm' eler
SFX b4 ecer èceront/n'q'l'm't's' ecer
SFX b4 emer èmeront/n'q'l'm't's' emer
SFX b4 ener èneront/n'q'l'm't's' ener
SFX b4 eper èperont/n'q'l'm't's' eper
SFX b4 erer èreront/n'q'l'm't's' erer
SFX b4 eser èseront/n'q'l'm't's' eser
SFX b4 ever èveront/n'q'l'm't's' ever
SFX b4 evrer èvreront/n'q'l'm't's' evrer
SFX b4 eter èteront/n'q'l'm't's' eter
SFX b4 eler èleront/n'q'l'm't's' eler
SFX b4 ecer ècerais/n'q'j'l'm't' ecer
SFX b4 emer èmerais/n'q'j'l'm't' emer
SFX b4 ener ènerais/n'q'j'l'm't' ener
SFX b4 eper èperais/n'q'j'l'm't' eper
SFX b4 erer èrerais/n'q'j'l'm't' erer
SFX b4 eser èserais/n'q'j'l'm't' eser
SFX b4 ever èverais/n'q'j'l'm't' ever
SFX b4 evrer èvrerais/n'q'j'l'm't' evrer
SFX b4 eter èterais/n'q'j'l'm't' eter
SFX b4 eler èlerais/n'q'j'l'm't' eler
SFX b4 ecer ècerait/n'q'l'm't's' ecer
SFX b4 emer èmerait/n'q'l'm't's' emer
SFX b4 ener ènerait/n'q'l'm't's' ener
SFX b4 eper èperait/n'q'l'm't's' eper
SFX b4 erer èrerait/n'q'l'm't's' erer
SFX b4 eser èserait/n'q'l'm't's' eser
SFX b4 ever èverait/n'q'l'm't's' ever
SFX b4 evrer èvrerait/n'q'l'm't's' evrer
SFX b4 eter èterait/n'q'l'm't's' eter
SFX b4 eler èlerait/n'q'l'm't's' eler
SFX b4 ecer ècerions/n'q'l't' ecer
SFX b4 emer èmerions/n'q'l't' emer
SFX b4 ener ènerions/n'q'l't' ener
SFX b4 eper èperions/n'q'l't' eper
SFX b4 erer èrerions/n'q'l't' erer
SFX b4 eser èserions/n'q'l't' eser
SFX b4 ever èverions/n'q'l't' ever
SFX b4 evrer èvrerions/n'q'l't' evrer
SFX b4 eter èterions/n'q'l't' eter
SFX b4 eler èlerions/n'q'l't' eler
SFX b4 ecer èceriez/n'q'l'm' ecer
SFX b4 emer èmeriez/n'q'l'm' emer
SFX b4 ener èneriez/n'q'l'm' ener
SFX b4 eper èperiez/n'q'l'm' eper
SFX b4 erer èreriez/n'q'l'm' erer
SFX b4 eser èseriez/n'q'l'm' eser
SFX b4 ever èveriez/n'q'l'm' ever
SFX b4 evrer èvreriez/n'q'l'm' evrer
SFX b4 eter èteriez/n'q'l'm' eter
SFX b4 eler èleriez/n'q'l'm' eler
SFX b4 ecer èceraient/n'q'l'm't's' ecer
SFX b4 emer èmeraient/n'q'l'm't's' emer
SFX b4 ener èneraient/n'q'l'm't's' ener
SFX b4 eper èperaient/n'q'l'm't's' eper
SFX b4 erer èreraient/n'q'l'm't's' erer
SFX b4 eser èseraient/n'q'l'm't's' eser
SFX b4 ever èveraient/n'q'l'm't's' ever
SFX b4 evrer èvreraient/n'q'l'm't's' evrer
SFX b4 eter èteraient/n'q'l'm't's' eter
SFX b4 eler èleraient/n'q'l'm't's' eler
SFX b4 er asse/n'q'j'l'm't' [^c]er
SFX b4 cer çasse/n'q'j'l'm't' cer
SFX b4 er asses/n'q'l'm't' [^c]er
SFX b4 cer çasses/n'q'l'm't' cer
SFX b4 er ât/n'q'l'm't's' [^c]er
SFX b4 cer çât/n'q'l'm't's' cer
SFX b4 er assions/n'q'l't' [^c]er
SFX b4 cer çassions/n'q'l't' cer
SFX b4 er assiez/n'q'l'm' [^c]er
SFX b4 cer çassiez/n'q'l'm' cer
SFX b4 er assent/n'q'l'm't's' [^c]er
SFX b4 cer çassent/n'q'l'm't's' cer
SFX b4 ecer èce/n'l'm't' ecer
SFX b4 emer ème/n'l'm't' emer
SFX b4 ener ène/n'l'm't' ener
SFX b4 eper èpe/n'l'm't' eper
SFX b4 erer ère/n'l'm't' erer
SFX b4 eser èse/n'l'm't' eser
SFX b4 ever ève/n'l'm't' ever
SFX b4 evrer èvre/n'l'm't' evrer
SFX b4 eter ète/n'l'm't' eter
SFX b4 eler èle/n'l'm't' eler
SFX b4 er ons/n'l' [^c]er
SFX b4 cer çons/n'l' cer
SFX b4 er ez/n'l'm' er
SFX b5 Y 190
SFX b5 er er/n'q'd'm't's' er
SFX b5 er ant/n'q'm't's' [^c]er
SFX b5 cer çant/n'q'm't's' cer
SFX b5 ecer èce/n'q'j'm't's' ecer
SFX b5 emer ème/n'q'j'm't's' emer
SFX b5 ener ène/n'q'j'm't's' ener
SFX b5 eper èpe/n'q'j'm't's' eper
SFX b5 erer ère/n'q'j'm't's' erer
SFX b5 eser èse/n'q'j'm't's' eser
SFX b5 ever ève/n'q'j'm't's' ever
SFX b5 evrer èvre/n'q'j'm't's' evrer
SFX b5 eter ète/n'q'j'm't's' eter
SFX b5 eler èle/n'q'j'm't's' eler
SFX b5 ecer èces/n'm't' ecer
SFX b5 emer èmes/n'm't' emer
SFX b5 ener ènes/n'm't' ener
SFX b5 eper èpes/n'm't' eper
SFX b5 erer ères/n'm't' erer
SFX b5 eser èses/n'm't' eser
SFX b5 ever èves/n'm't' ever
SFX b5 evrer èvres/n'm't' evrer
SFX b5 eter ètes/n'm't' eter
SFX b5 eler èles/n'm't' eler
SFX b5 er ons/n't' [^c]er
SFX b5 cer çons/n't' cer
SFX b5 er ez/n'm' er
SFX b5 ecer ècent/n'q'm't's' ecer
SFX b5 emer èment/n'q'm't's' emer
SFX b5 ener ènent/n'q'm't's' ener
SFX b5 eper èpent/n'q'm't's' eper
SFX b5 erer èrent/n'q'm't's' erer
SFX b5 eser èsent/n'q'm't's' eser
SFX b5 ever èvent/n'q'm't's' ever
SFX b5 evrer èvrent/n'q'm't's' evrer
SFX b5 eter ètent/n'q'm't's' eter
SFX b5 eler èlent/n'q'm't's' eler
SFX b5 er ais/n'j'm't' [^c]er
SFX b5 cer çais/n'j'm't' cer
SFX b5 er ait/n'q'm't's' [^c]er
SFX b5 cer çait/n'q'm't's' cer
SFX b5 er ions/n't' er
SFX b5 er iez/n'm' er
SFX b5 er aient/n'q'm't's' [^c]er
SFX b5 cer çaient/n'q'm't's' cer
SFX b5 er ai/n'j'm't' [^c]er
SFX b5 cer çai/n'j'm't' cer
SFX b5 er as/n'm't' [^c]er
SFX b5 cer ças/n'm't' cer
SFX b5 er a/n'q'm't's' [^c]er
SFX b5 cer ça/n'q'm't's' cer
SFX b5 er âmes/n't' [^c]er
SFX b5 cer çâmes/n't' cer
SFX b5 er âtes/n'm' [^c]er
SFX b5 cer çâtes/n'm' cer
SFX b5 er èrent/n'q'm't's' er
SFX b5 ecer ècerai/n'j'm't' ecer
SFX b5 emer èmerai/n'j'm't' emer
SFX b5 ener ènerai/n'j'm't' ener
SFX b5 eper èperai/n'j'm't' eper
SFX b5 erer èrerai/n'j'm't' erer
SFX b5 eser èserai/n'j'm't' eser
SFX b5 ever èverai/n'j'm't' ever
SFX b5 evrer èvrerai/n'j'm't' evrer
SFX b5 eter èterai/n'j'm't' eter
SFX b5 eler èlerai/n'j'm't' eler
SFX b5 ecer èceras/n'm't' ecer
SFX b5 emer èmeras/n'm't' emer
SFX b5 ener èneras/n'm't' ener
SFX b5 eper èperas/n'm't' eper
SFX b5 erer èreras/n'm't' erer
SFX b5 eser èseras/n'm't' eser
SFX b5 ever èveras/n'm't' ever
SFX b5 evrer èvreras/n'm't' evrer
SFX b5 eter èteras/n'm't' eter
SFX b5 eler èleras/n'm't' eler
SFX b5 ecer ècera/n'q'm't's' ecer
SFX b5 emer èmera/n'q'm't's' emer
SFX b5 ener ènera/n'q'm't's' ener
SFX b5 eper èpera/n'q'm't's' eper
SFX b5 erer èrera/n'q'm't's' erer
SFX b5 eser èsera/n'q'm't's' eser
SFX b5 ever èvera/n'q'm't's' ever
SFX b5 evrer èvrera/n'q'm't's' evrer
SFX b5 eter ètera/n'q'm't's' eter
SFX b5 eler èlera/n'q'm't's' eler
SFX b5 ecer ècerons/n't' ecer
SFX b5 emer èmerons/n't' emer
SFX b5 ener ènerons/n't' ener
SFX b5 eper èperons/n't' eper
SFX b5 erer èrerons/n't' erer
SFX b5 eser èserons/n't' eser
SFX b5 ever èverons/n't' ever
SFX b5 evrer èvrerons/n't' evrer
SFX b5 eter èterons/n't' eter
SFX b5 eler èlerons/n't' eler
SFX b5 ecer ècerez/n'm' ecer
SFX b5 emer èmerez/n'm' emer
SFX b5 ener ènerez/n'm' ener
SFX b5 eper èperez/n'm' eper
SFX b5 erer èrerez/n'm' erer
SFX b5 eser èserez/n'm' eser
SFX b5 ever èverez/n'm' ever
SFX b5 evrer èvrerez/n'm' evrer
SFX b5 eter èterez/n'm' eter
SFX b5 eler èlerez/n'm' eler
SFX b5 ecer èceront/n'q'm't's' ecer
SFX b5 emer èmeront/n'q'm't's' emer
SFX b5 ener èneront/n'q'm't's' ener
SFX b5 eper èperont/n'q'm't's' eper
SFX b5 erer èreront/n'q'm't's' erer
SFX b5 eser èseront/n'q'm't's' eser
SFX b5 ever èveront/n'q'm't's' ever
SFX b5 evrer èvreront/n'q'm't's' evrer
SFX b5 eter èteront/n'q'm't's' eter
SFX b5 eler èleront/n'q'm't's' eler
SFX b5 ecer ècerais/n'j'm't' ecer
SFX b5 emer èmerais/n'j'm't' emer
SFX b5 ener ènerais/n'j'm't' ener
SFX b5 eper èperais/n'j'm't' eper
SFX b5 erer èrerais/n'j'm't' erer
SFX b5 eser èserais/n'j'm't' eser
SFX b5 ever èverais/n'j'm't' ever
SFX b5 evrer èvrerais/n'j'm't' evrer
SFX b5 eter èterais/n'j'm't' eter
SFX b5 eler èlerais/n'j'm't' eler
SFX b5 ecer ècerait/n'q'm't's' ecer
SFX b5 emer èmerait/n'q'm't's' emer
SFX b5 ener ènerait/n'q'm't's' ener
SFX b5 eper èperait/n'q'm't's' eper
SFX b5 erer èrerait/n'q'm't's' erer
SFX b5 eser èserait/n'q'm't's' eser
SFX b5 ever èverait/n'q'm't's' ever
SFX b5 evrer èvrerait/n'q'm't's' evrer
SFX b5 eter èterait/n'q'm't's' eter
SFX b5 eler èlerait/n'q'm't's' eler
SFX b5 ecer ècerions/n't' ecer
SFX b5 emer èmerions/n't' emer
SFX b5 ener ènerions/n't' ener
SFX b5 eper èperions/n't' eper
SFX b5 erer èrerions/n't' erer
SFX b5 eser èserions/n't' eser
SFX b5 ever èverions/n't' ever
SFX b5 evrer èvrerions/n't' evrer
SFX b5 eter èterions/n't' eter
SFX b5 eler èlerions/n't' eler
SFX b5 ecer èceriez/n'm' ecer
SFX b5 emer èmeriez/n'm' emer
SFX b5 ener èneriez/n'm' ener
SFX b5 eper èperiez/n'm' eper
SFX b5 erer èreriez/n'm' erer
SFX b5 eser èseriez/n'm' eser
SFX b5 ever èveriez/n'm' ever
SFX b5 evrer èvreriez/n'm' evrer
SFX b5 eter èteriez/n'm' eter
SFX b5 eler èleriez/n'm' eler
SFX b5 ecer èceraient/n'q'm't's' ecer
SFX b5 emer èmeraient/n'q'm't's' emer
SFX b5 ener èneraient/n'q'm't's' ener
SFX b5 eper èperaient/n'q'm't's' eper
SFX b5 erer èreraient/n'q'm't's' erer
SFX b5 eser èseraient/n'q'm't's' eser
SFX b5 ever èveraient/n'q'm't's' ever
SFX b5 evrer èvreraient/n'q'm't's' evrer
SFX b5 eter èteraient/n'q'm't's' eter
SFX b5 eler èleraient/n'q'm't's' eler
SFX b5 er asse/n'j'm't' [^c]er
SFX b5 cer çasse/n'j'm't' cer
SFX b5 er asses/n'm't' [^c]er
SFX b5 cer çasses/n'm't' cer
SFX b5 er ât/n'q'm't's' [^c]er
SFX b5 cer çât/n'q'm't's' cer
SFX b5 er assions/n't' [^c]er
SFX b5 cer çassions/n't' cer
SFX b5 er assiez/n'm' [^c]er
SFX b5 cer çassiez/n'm' cer
SFX b5 er assent/n'q'm't's' [^c]er
SFX b5 cer çassent/n'q'm't's' cer
SFX b5 ecer èce/n'm' ecer
SFX b5 emer ème/n'm' emer
SFX b5 ener ène/n'm' ener
SFX b5 eper èpe/n'm' eper
SFX b5 erer ère/n'm' erer
SFX b5 eser èse/n'm' eser
SFX b5 ever ève/n'm' ever
SFX b5 evrer èvre/n'm' evrer
SFX b5 eter ète/n'm' eter
SFX b5 eler èle/n'm' eler
SFX b5 er ons/n' [^c]er
SFX b5 cer çons/n' cer
SFX b5 er ez/n' er
SFX c0 N 151
SFX c0 er ant [^cg]er
SFX c0 écer éçant écer
SFX c0 éger égeant éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 ébrer èbres ébrer
SFX c0 écer èces écer
SFX c0 écher èches écher
SFX c0 écrer ècres écrer
SFX c0 éder èdes éder
SFX c0 éger èges éger
SFX c0 égler ègles égler
SFX c0 égner ègnes égner
SFX c0 égrer ègres égrer
SFX c0 éguer ègues éguer
SFX c0 éler èles éler
SFX c0 émer èmes émer
SFX c0 éner ènes éner
SFX c0 éper èpes éper
SFX c0 équer èques équer
SFX c0 érer ères érer
SFX c0 éser èses éser
SFX c0 éter ètes éter
SFX c0 étrer ètres étrer
SFX c0 évrer èvres évrer
SFX c0 éyer èyes éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c0 ébrer èbrent ébrer
SFX c0 écer ècent écer
SFX c0 écher èchent écher
SFX c0 écrer ècrent écrer
SFX c0 éder èdent éder
SFX c0 éger ègent éger
SFX c0 égler èglent égler
SFX c0 égner ègnent égner
SFX c0 égrer ègrent égrer
SFX c0 éguer èguent éguer
SFX c0 éler èlent éler
SFX c0 émer èment émer
SFX c0 éner ènent éner
SFX c0 éper èpent éper
SFX c0 équer èquent équer
SFX c0 érer èrent érer
SFX c0 éser èsent éser
SFX c0 éter ètent éter
SFX c0 étrer ètrent étrer
SFX c0 évrer èvrent évrer
SFX c0 éyer èyent éyer
SFX c0 er ais [^cg]er
SFX c0 écer éçais écer
SFX c0 éger égeais éger
SFX c0 er ait [^cg]er
SFX c0 écer éçait écer
SFX c0 éger égeait éger
SFX c0 er ions er
SFX c0 er iez er
SFX c0 er aient [^cg]er
SFX c0 écer éçaient écer
SFX c0 éger égeaient éger
SFX c0 er ai [^cg]er
SFX c0 écer éçai écer
SFX c0 éger égeai éger
SFX c0 er as [^cg]er
SFX c0 écer éças écer
SFX c0 éger égeas éger
SFX c0 er a [^cg]er
SFX c0 écer éça écer
SFX c0 éger égea éger
SFX c0 er âmes [^cg]er
SFX c0 écer éçâmes écer
SFX c0 éger égeâmes éger
SFX c0 er âtes [^cg]er
SFX c0 écer éçâtes écer
SFX c0 éger égeâtes éger
SFX c0 er èrent er
SFX c0 er erai er
SFX c0 er eras er
SFX c0 er era er
SFX c0 er erons er
SFX c0 er erez er
SFX c0 er eront er
SFX c0 er erais er
SFX c0 er erait er
SFX c0 er erions er
SFX c0 er eriez er
SFX c0 er eraient er
SFX c0 er asse [^cg]er
SFX c0 écer éçasse écer
SFX c0 éger égeasse éger
SFX c0 er asses [^cg]er
SFX c0 écer éçasses écer
SFX c0 éger égeasses éger
SFX c0 er ât [^cg]er
SFX c0 écer éçât écer
SFX c0 éger égeât éger
SFX c0 er assions [^cg]er
SFX c0 écer éçassions écer
SFX c0 éger égeassions éger
SFX c0 er assiez [^cg]er
SFX c0 écer éçassiez écer
SFX c0 éger égeassiez éger
SFX c0 er assent [^cg]er
SFX c0 écer éçassent écer
SFX c0 éger égeassent éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c1 Y 152
SFX c1 r r/n'q'd' er
SFX c1 er ant/n'q' [^cg]er
SFX c1 écer éçant/n'q' écer
SFX c1 éger égeant/n'q' éger
SFX c1 ébrer èbre/n'q'j' ébrer
SFX c1 écer èce/n'q'j' écer
SFX c1 écher èche/n'q'j' écher
SFX c1 écrer ècre/n'q'j' écrer
SFX c1 éder ède/n'q'j' éder
SFX c1 éger ège/n'q'j' éger
SFX c1 égler ègle/n'q'j' égler
SFX c1 égner ègne/n'q'j' égner
SFX c1 égrer ègre/n'q'j' égrer
SFX c1 éguer ègue/n'q'j' éguer
SFX c1 éler èle/n'q'j' éler
SFX c1 émer ème/n'q'j' émer
SFX c1 éner ène/n'q'j' éner
SFX c1 éper èpe/n'q'j' éper
SFX c1 équer èque/n'q'j' équer
SFX c1 érer ère/n'q'j' érer
SFX c1 éser èse/n'q'j' éser
SFX c1 éter ète/n'q'j' éter
SFX c1 étrer ètre/n'q'j' étrer
SFX c1 évrer èvre/n'q'j' évrer
SFX c1 éyer èye/n'q'j' éyer
SFX c1 ébrer èbres/n' ébrer
SFX c1 écer èces/n' écer
SFX c1 écher èches/n' écher
SFX c1 écrer ècres/n' écrer
SFX c1 éder èdes/n' éder
SFX c1 éger èges/n' éger
SFX c1 égler ègles/n' égler
SFX c1 égner ègnes/n' égner
SFX c1 égrer ègres/n' égrer
SFX c1 éguer ègues/n' éguer
SFX c1 éler èles/n' éler
SFX c1 émer èmes/n' émer
SFX c1 éner ènes/n' éner
SFX c1 éper èpes/n' éper
SFX c1 équer èques/n' équer
SFX c1 érer ères/n' érer
SFX c1 éser èses/n' éser
SFX c1 éter ètes/n' éter
SFX c1 étrer ètres/n' étrer
SFX c1 évrer èvres/n' évrer
SFX c1 éyer èyes/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c1 ébrer èbrent/n'q' ébrer
SFX c1 écer ècent/n'q' écer
SFX c1 écher èchent/n'q' écher
SFX c1 écrer ècrent/n'q' écrer
SFX c1 éder èdent/n'q' éder
SFX c1 éger ègent/n'q' éger
SFX c1 égler èglent/n'q' égler
SFX c1 égner ègnent/n'q' égner
SFX c1 égrer ègrent/n'q' égrer
SFX c1 éguer èguent/n'q' éguer
SFX c1 éler èlent/n'q' éler
SFX c1 émer èment/n'q' émer
SFX c1 éner ènent/n'q' éner
SFX c1 éper èpent/n'q' éper
SFX c1 équer èquent/n'q' équer
SFX c1 érer èrent/n'q' érer
SFX c1 éser èsent/n'q' éser
SFX c1 éter ètent/n'q' éter
SFX c1 étrer ètrent/n'q' étrer
SFX c1 évrer èvrent/n'q' évrer
SFX c1 éyer èyent/n'q' éyer
SFX c1 er ais/n'j' [^cg]er
SFX c1 écer éçais/n'j' écer
SFX c1 éger égeais/n'j' éger
SFX c1 er ait/n'q' [^cg]er
SFX c1 écer éçait/n'q' écer
SFX c1 éger égeait/n'q' éger
SFX c1 er ions/n' er
SFX c1 er iez/n' er
SFX c1 er aient/n'q' [^cg]er
SFX c1 écer éçaient/n'q' écer
SFX c1 éger égeaient/n'q' éger
SFX c1 er ai/n'j' [^cg]er
SFX c1 écer éçai/n'j' écer
SFX c1 éger égeai/n'j' éger
SFX c1 er as/n' [^cg]er
SFX c1 écer éças/n' écer
SFX c1 éger égeas/n' éger
SFX c1 er a/n'q' [^cg]er
SFX c1 écer éça/n'q' écer
SFX c1 éger égea/n'q' éger
SFX c1 er âmes/n' [^cg]er
SFX c1 écer éçâmes/n' écer
SFX c1 éger égeâmes/n' éger
SFX c1 er âtes/n' [^cg]er
SFX c1 écer éçâtes/n' écer
SFX c1 éger égeâtes/n' éger
SFX c1 er èrent/n'q' er
SFX c1 er erai/n'j' er
SFX c1 er eras/n' er
SFX c1 er era/n'q' er
SFX c1 er erons/n' er
SFX c1 er erez/n' er
SFX c1 er eront/n'q' er
SFX c1 er erais/n'j' er
SFX c1 er erait/n'q' er
SFX c1 er erions/n' er
SFX c1 er eriez/n' er
SFX c1 er eraient/n'q' er
SFX c1 er asse/n'j' [^cg]er
SFX c1 écer éçasse/n'j' écer
SFX c1 éger égeasse/n'j' éger
SFX c1 er asses/n' [^cg]er
SFX c1 écer éçasses/n' écer
SFX c1 éger égeasses/n' éger
SFX c1 er ât/n'q' [^cg]er
SFX c1 écer éçât/n'q' écer
SFX c1 éger égeât/n'q' éger
SFX c1 er assions/n' [^cg]er
SFX c1 écer éçassions/n' écer
SFX c1 éger égeassions/n' éger
SFX c1 er assiez/n' [^cg]er
SFX c1 écer éçassiez/n' écer
SFX c1 éger égeassiez/n' éger
SFX c1 er assent/n'q' [^cg]er
SFX c1 écer éçassent/n'q' écer
SFX c1 éger égeassent/n'q' éger
SFX c1 ébrer èbre/n' ébrer
SFX c1 écer èce/n' écer
SFX c1 écher èche/n' écher
SFX c1 écrer ècre/n' écrer
SFX c1 éder ède/n' éder
SFX c1 éger ège/n' éger
SFX c1 égler ègle/n' égler
SFX c1 égner ègne/n' égner
SFX c1 égrer ègre/n' égrer
SFX c1 éguer ègue/n' éguer
SFX c1 éler èle/n' éler
SFX c1 émer ème/n' émer
SFX c1 éner ène/n' éner
SFX c1 éper èpe/n' éper
SFX c1 équer èque/n' équer
SFX c1 érer ère/n' érer
SFX c1 éser èse/n' éser
SFX c1 éter ète/n' éter
SFX c1 étrer ètre/n' étrer
SFX c1 évrer èvre/n' évrer
SFX c1 éyer èye/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c2 Y 152
SFX c2 er er/n'q'd'l'm't's' er
SFX c2 er ant/n'q'l'm't's' [^cg]er
SFX c2 écer éçant/n'q'l'm't's' écer
SFX c2 éger égeant/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c2 écer èce/n'q'j'l'm't's' écer
SFX c2 écher èche/n'q'j'l'm't's' écher
SFX c2 écrer ècre/n'q'j'l'm't's' écrer
SFX c2 éder ède/n'q'j'l'm't's' éder
SFX c2 éger ège/n'q'j'l'm't's' éger
SFX c2 égler ègle/n'q'j'l'm't's' égler
SFX c2 égner ègne/n'q'j'l'm't's' égner
SFX c2 égrer ègre/n'q'j'l'm't's' égrer
SFX c2 éguer ègue/n'q'j'l'm't's' éguer
SFX c2 éler èle/n'q'j'l'm't's' éler
SFX c2 émer ème/n'q'j'l'm't's' émer
SFX c2 éner ène/n'q'j'l'm't's' éner
SFX c2 éper èpe/n'q'j'l'm't's' éper
SFX c2 équer èque/n'q'j'l'm't's' équer
SFX c2 érer ère/n'q'j'l'm't's' érer
SFX c2 éser èse/n'q'j'l'm't's' éser
SFX c2 éter ète/n'q'j'l'm't's' éter
SFX c2 étrer ètre/n'q'j'l'm't's' étrer
SFX c2 évrer èvre/n'q'j'l'm't's' évrer
SFX c2 éyer èye/n'q'j'l'm't's' éyer
SFX c2 ébrer èbres/n'q'l'm' ébrer
SFX c2 écer èces/n'q'l'm' écer
SFX c2 écher èches/n'q'l'm' écher
SFX c2 écrer ècres/n'q'l'm' écrer
SFX c2 éder èdes/n'q'l'm' éder
SFX c2 éger èges/n'q'l'm' éger
SFX c2 égler ègles/n'q'l'm' égler
SFX c2 égner ègnes/n'q'l'm' égner
SFX c2 égrer ègres/n'q'l'm' égrer
SFX c2 éguer ègues/n'q'l'm' éguer
SFX c2 éler èles/n'q'l'm' éler
SFX c2 émer èmes/n'q'l'm' émer
SFX c2 éner ènes/n'q'l'm' éner
SFX c2 éper èpes/n'q'l'm' éper
SFX c2 équer èques/n'q'l'm' équer
SFX c2 érer ères/n'q'l'm' érer
SFX c2 éser èses/n'q'l'm' éser
SFX c2 éter ètes/n'q'l'm' éter
SFX c2 étrer ètres/n'q'l'm' étrer
SFX c2 évrer èvres/n'q'l'm' évrer
SFX c2 éyer èyes/n'q'l'm' éyer
SFX c2 er ons/n'q'l't' [^cg]er
SFX c2 écer éçons/n'q'l't' écer
SFX c2 éger égeons/n'q'l't' éger
SFX c2 er ez/n'q'l'm' er
SFX c2 ébrer èbrent/n'q'l'm't's' ébrer
SFX c2 écer ècent/n'q'l'm't's' écer
SFX c2 écher èchent/n'q'l'm't's' écher
SFX c2 écrer ècrent/n'q'l'm't's' écrer
SFX c2 éder èdent/n'q'l'm't's' éder
SFX c2 éger ègent/n'q'l'm't's' éger
SFX c2 égler èglent/n'q'l'm't's' égler
SFX c2 égner ègnent/n'q'l'm't's' égner
SFX c2 égrer ègrent/n'q'l'm't's' égrer
SFX c2 éguer èguent/n'q'l'm't's' éguer
SFX c2 éler èlent/n'q'l'm't's' éler
SFX c2 émer èment/n'q'l'm't's' émer
SFX c2 éner ènent/n'q'l'm't's' éner
SFX c2 éper èpent/n'q'l'm't's' éper
SFX c2 équer èquent/n'q'l'm't's' équer
SFX c2 érer èrent/n'q'l'm't's' érer
SFX c2 éser èsent/n'q'l'm't's' éser
SFX c2 éter ètent/n'q'l'm't's' éter
SFX c2 étrer ètrent/n'q'l'm't's' étrer
SFX c2 évrer èvrent/n'q'l'm't's' évrer
SFX c2 éyer èyent/n'q'l'm't's' éyer
SFX c2 er ais/n'q'j'l'm't' [^cg]er
SFX c2 écer éçais/n'q'j'l'm't' écer
SFX c2 éger égeais/n'q'j'l'm't' éger
SFX c2 er ait/n'q'l'm't's' [^cg]er
SFX c2 écer éçait/n'q'l'm't's' écer
SFX c2 éger égeait/n'q'l'm't's' éger
SFX c2 er ions/n'q'l't' er
SFX c2 er iez/n'q'l'm' er
SFX c2 er aient/n'q'l'm't's' [^cg]er
SFX c2 écer éçaient/n'q'l'm't's' écer
SFX c2 éger égeaient/n'q'l'm't's' éger
SFX c2 er ai/n'q'j'l't' [^cg]er
SFX c2 écer éçai/n'q'j'l't' écer
SFX c2 éger égeai/n'q'j'l't' éger
SFX c2 er as/n'q'l'm' [^cg]er
SFX c2 écer éças/n'q'l'm' écer
SFX c2 éger égeas/n'q'l'm' éger
SFX c2 er a/n'q'l'm't's' [^cg]er
SFX c2 écer éça/n'q'l'm't's' écer
SFX c2 éger égea/n'q'l'm't's' éger
SFX c2 er âmes/n'q'l't' [^cg]er
SFX c2 écer éçâmes/n'q'l't' écer
SFX c2 éger égeâmes/n'q'l't' éger
SFX c2 er âtes/n'q'l'm' [^cg]er
SFX c2 écer éçâtes/n'q'l'm' écer
SFX c2 éger égeâtes/n'q'l'm' éger
SFX c2 er èrent/n'q'l'm't's' er
SFX c2 er erai/n'q'j'l't' er
SFX c2 er eras/n'q'l'm' er
SFX c2 er era/n'q'l'm't's' er
SFX c2 er erons/n'q'l't' er
SFX c2 er erez/n'q'l'm' er
SFX c2 er eront/n'q'l'm't's' er
SFX c2 er erais/n'q'j'l'm't' er
SFX c2 er erait/n'q'l'm't's' er
SFX c2 er erions/n'q'l't' er
SFX c2 er eriez/n'q'l'm' er
SFX c2 er eraient/n'q'l'm't's' er
SFX c2 er asse/n'q'j'l't' [^cg]er
SFX c2 écer éçasse/n'q'j'l't' écer
SFX c2 éger égeasse/n'q'j'l't' éger
SFX c2 er asses/n'q'l'm' [^cg]er
SFX c2 écer éçasses/n'q'l'm' écer
SFX c2 éger égeasses/n'q'l'm' éger
SFX c2 er ât/n'q'l'm't's' [^cg]er
SFX c2 écer éçât/n'q'l'm't's' écer
SFX c2 éger égeât/n'q'l'm't's' éger
SFX c2 er assions/n'q'l't' [^cg]er
SFX c2 écer éçassions/n'q'l't' écer
SFX c2 éger égeassions/n'q'l't' éger
SFX c2 er assiez/n'q'l'm' [^cg]er
SFX c2 écer éçassiez/n'q'l'm' écer
SFX c2 éger égeassiez/n'q'l'm' éger
SFX c2 er assent/n'q'l'm't's' [^cg]er
SFX c2 écer éçassent/n'q'l'm't's' écer
SFX c2 éger égeassent/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'l'm' ébrer
SFX c2 écer èce/n'l'm' écer
SFX c2 écher èche/n'l'm' écher
SFX c2 écrer ècre/n'l'm' écrer
SFX c2 éder ède/n'l'm' éder
SFX c2 éger ège/n'l'm' éger
SFX c2 égler ègle/n'l'm' égler
SFX c2 égner ègne/n'l'm' égner
SFX c2 égrer ègre/n'l'm' égrer
SFX c2 éguer ègue/n'l'm' éguer
SFX c2 éler èle/n'l'm' éler
SFX c2 émer ème/n'l'm' émer
SFX c2 éner ène/n'l'm' éner
SFX c2 éper èpe/n'l'm' éper
SFX c2 équer èque/n'l'm' équer
SFX c2 érer ère/n'l'm' érer
SFX c2 éser èse/n'l'm' éser
SFX c2 éter ète/n'l'm' éter
SFX c2 étrer ètre/n'l'm' étrer
SFX c2 évrer èvre/n'l'm' évrer
SFX c2 éyer èye/n'l'm' éyer
SFX c2 er ons/n'l' [^cg]er
SFX c2 écer éçons/n'l' écer
SFX c2 éger égeons/n'l' éger
SFX c2 er ez/n'l'm' er
SFX c3 Y 152
SFX c3 er er/m't's' er
SFX c3 er ant/m't's' [^cg]er
SFX c3 écer éçant/m't's' écer
SFX c3 éger égeant/m't's' éger
SFX c3 ébrer èbre/m's' ébrer
SFX c3 écer èce/m's' écer
SFX c3 écher èche/m's' écher
SFX c3 écrer ècre/m's' écrer
SFX c3 éder ède/m's' éder
SFX c3 éger ège/m's' éger
SFX c3 égler ègle/m's' égler
SFX c3 égner ègne/m's' égner
SFX c3 égrer ègre/m's' égrer
SFX c3 éguer ègue/m's' éguer
SFX c3 éler èle/m's' éler
SFX c3 émer ème/m's' émer
SFX c3 éner ène/m's' éner
SFX c3 éper èpe/m's' éper
SFX c3 équer èque/m's' équer
SFX c3 érer ère/m's' érer
SFX c3 éser èse/m's' éser
SFX c3 éter ète/m's' éter
SFX c3 étrer ètre/m's' étrer
SFX c3 évrer èvre/m's' évrer
SFX c3 éyer èye/m's' éyer
SFX c3 ébrer èbres/t' ébrer
SFX c3 écer èces/t' écer
SFX c3 écher èches/t' écher
SFX c3 écrer ècres/t' écrer
SFX c3 éder èdes/t' éder
SFX c3 éger èges/t' éger
SFX c3 égler ègles/t' égler
SFX c3 égner ègnes/t' égner
SFX c3 égrer ègres/t' égrer
SFX c3 éguer ègues/t' éguer
SFX c3 éler èles/t' éler
SFX c3 émer èmes/t' émer
SFX c3 éner ènes/t' éner
SFX c3 éper èpes/t' éper
SFX c3 équer èques/t' équer
SFX c3 érer ères/t' érer
SFX c3 éser èses/t' éser
SFX c3 éter ètes/t' éter
SFX c3 étrer ètres/t' étrer
SFX c3 évrer èvres/t' évrer
SFX c3 éyer èyes/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c3 ébrer èbrent/s' ébrer
SFX c3 écer ècent/s' écer
SFX c3 écher èchent/s' écher
SFX c3 écrer ècrent/s' écrer
SFX c3 éder èdent/s' éder
SFX c3 éger ègent/s' éger
SFX c3 égler èglent/s' égler
SFX c3 égner ègnent/s' égner
SFX c3 égrer ègrent/s' égrer
SFX c3 éguer èguent/s' éguer
SFX c3 éler èlent/s' éler
SFX c3 émer èment/s' émer
SFX c3 éner ènent/s' éner
SFX c3 éper èpent/s' éper
SFX c3 équer èquent/s' équer
SFX c3 érer èrent/s' érer
SFX c3 éser èsent/s' éser
SFX c3 éter ètent/s' éter
SFX c3 étrer ètrent/s' étrer
SFX c3 évrer èvrent/s' évrer
SFX c3 éyer èyent/s' éyer
SFX c3 er ais/m't' [^cg]er
SFX c3 écer éçais/m't' écer
SFX c3 éger égeais/m't' éger
SFX c3 er ait/s' [^cg]er
SFX c3 écer éçait/s' écer
SFX c3 éger égeait/s' éger
SFX c3 er ions er
SFX c3 er iez er
SFX c3 er aient/s' [^cg]er
SFX c3 écer éçaient/s' écer
SFX c3 éger égeaient/s' éger
SFX c3 er ai/m' [^cg]er
SFX c3 écer éçai/m' écer
SFX c3 éger égeai/m' éger
SFX c3 er as/t' [^cg]er
SFX c3 écer éças/t' écer
SFX c3 éger égeas/t' éger
SFX c3 er a/s' [^cg]er
SFX c3 écer éça/s' écer
SFX c3 éger égea/s' éger
SFX c3 er âmes [^cg]er
SFX c3 écer éçâmes écer
SFX c3 éger égeâmes éger
SFX c3 er âtes [^cg]er
SFX c3 écer éçâtes écer
SFX c3 éger égeâtes éger
SFX c3 er èrent/s' er
SFX c3 er erai/m' er
SFX c3 er eras/t' er
SFX c3 er era/s' er
SFX c3 er erons er
SFX c3 er erez er
SFX c3 er eront/s' er
SFX c3 er erais/m't' er
SFX c3 er erait/s' er
SFX c3 er erions er
SFX c3 er eriez er
SFX c3 er eraient/s' er
SFX c3 er asse/m' [^cg]er
SFX c3 écer éçasse/m' écer
SFX c3 éger égeasse/m' éger
SFX c3 er asses/t' [^cg]er
SFX c3 écer éçasses/t' écer
SFX c3 éger égeasses/t' éger
SFX c3 er ât/s' [^cg]er
SFX c3 écer éçât/s' écer
SFX c3 éger égeât/s' éger
SFX c3 er assions [^cg]er
SFX c3 écer éçassions écer
SFX c3 éger égeassions éger
SFX c3 er assiez [^cg]er
SFX c3 écer éçassiez écer
SFX c3 éger égeassiez éger
SFX c3 er assent/s' [^cg]er
SFX c3 écer éçassent/s' écer
SFX c3 éger égeassent/s' éger
SFX c3 ébrer èbre/t' ébrer
SFX c3 écer èce/t' écer
SFX c3 écher èche/t' écher
SFX c3 écrer ècre/t' écrer
SFX c3 éder ède/t' éder
SFX c3 éger ège/t' éger
SFX c3 égler ègle/t' égler
SFX c3 égner ègne/t' égner
SFX c3 égrer ègre/t' égrer
SFX c3 éguer ègue/t' éguer
SFX c3 éler èle/t' éler
SFX c3 émer ème/t' émer
SFX c3 éner ène/t' éner
SFX c3 éper èpe/t' éper
SFX c3 équer èque/t' équer
SFX c3 érer ère/t' érer
SFX c3 éser èse/t' éser
SFX c3 éter ète/t' éter
SFX c3 étrer ètre/t' étrer
SFX c3 évrer èvre/t' évrer
SFX c3 éyer èye/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c4 Y 152
SFX c4 er er/n'q'd'l'm't's' er
SFX c4 er ant/n'q'l'm't's' [^cg]er
SFX c4 écer éçant/n'q'l'm't's' écer
SFX c4 éger égeant/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c4 écer èce/n'q'j'l'm't's' écer
SFX c4 écher èche/n'q'j'l'm't's' écher
SFX c4 écrer ècre/n'q'j'l'm't's' écrer
SFX c4 éder ède/n'q'j'l'm't's' éder
SFX c4 éger ège/n'q'j'l'm't's' éger
SFX c4 égler ègle/n'q'j'l'm't's' égler
SFX c4 égner ègne/n'q'j'l'm't's' égner
SFX c4 égrer ègre/n'q'j'l'm't's' égrer
SFX c4 éguer ègue/n'q'j'l'm't's' éguer
SFX c4 éler èle/n'q'j'l'm't's' éler
SFX c4 émer ème/n'q'j'l'm't's' émer
SFX c4 éner ène/n'q'j'l'm't's' éner
SFX c4 éper èpe/n'q'j'l'm't's' éper
SFX c4 équer èque/n'q'j'l'm't's' équer
SFX c4 érer ère/n'q'j'l'm't's' érer
SFX c4 éser èse/n'q'j'l'm't's' éser
SFX c4 éter ète/n'q'j'l'm't's' éter
SFX c4 étrer ètre/n'q'j'l'm't's' étrer
SFX c4 évrer èvre/n'q'j'l'm't's' évrer
SFX c4 éyer èye/n'q'j'l'm't's' éyer
SFX c4 ébrer èbres/n'q'l'm't' ébrer
SFX c4 écer èces/n'q'l'm't' écer
SFX c4 écher èches/n'q'l'm't' écher
SFX c4 écrer ècres/n'q'l'm't' écrer
SFX c4 éder èdes/n'q'l'm't' éder
SFX c4 éger èges/n'q'l'm't' éger
SFX c4 égler ègles/n'q'l'm't' égler
SFX c4 égner ègnes/n'q'l'm't' égner
SFX c4 égrer ègres/n'q'l'm't' égrer
SFX c4 éguer ègues/n'q'l'm't' éguer
SFX c4 éler èles/n'q'l'm't' éler
SFX c4 émer èmes/n'q'l'm't' émer
SFX c4 éner ènes/n'q'l'm't' éner
SFX c4 éper èpes/n'q'l'm't' éper
SFX c4 équer èques/n'q'l'm't' équer
SFX c4 érer ères/n'q'l'm't' érer
SFX c4 éser èses/n'q'l'm't' éser
SFX c4 éter ètes/n'q'l'm't' éter
SFX c4 étrer ètres/n'q'l'm't' étrer
SFX c4 évrer èvres/n'q'l'm't' évrer
SFX c4 éyer èyes/n'q'l'm't' éyer
SFX c4 er ons/n'q'l't' [^cg]er
SFX c4 écer éçons/n'q'l't' écer
SFX c4 éger égeons/n'q'l't' éger
SFX c4 er ez/n'q'l'm' er
SFX c4 ébrer èbrent/n'q'l'm't's' ébrer
SFX c4 écer ècent/n'q'l'm't's' écer
SFX c4 écher èchent/n'q'l'm't's' écher
SFX c4 écrer ècrent/n'q'l'm't's' écrer
SFX c4 éder èdent/n'q'l'm't's' éder
SFX c4 éger ègent/n'q'l'm't's' éger
SFX c4 égler èglent/n'q'l'm't's' égler
SFX c4 égner ègnent/n'q'l'm't's' égner
SFX c4 égrer ègrent/n'q'l'm't's' égrer
SFX c4 éguer èguent/n'q'l'm't's' éguer
SFX c4 éler èlent/n'q'l'm't's' éler
SFX c4 émer èment/n'q'l'm't's' émer
SFX c4 éner ènent/n'q'l'm't's' éner
SFX c4 éper èpent/n'q'l'm't's' éper
SFX c4 équer èquent/n'q'l'm't's' équer
SFX c4 érer èrent/n'q'l'm't's' érer
SFX c4 éser èsent/n'q'l'm't's' éser
SFX c4 éter ètent/n'q'l'm't's' éter
SFX c4 étrer ètrent/n'q'l'm't's' étrer
SFX c4 évrer èvrent/n'q'l'm't's' évrer
SFX c4 éyer èyent/n'q'l'm't's' éyer
SFX c4 er ais/n'q'j'l'm't' [^cg]er
SFX c4 écer éçais/n'q'j'l'm't' écer
SFX c4 éger égeais/n'q'j'l'm't' éger
SFX c4 er ait/n'q'l'm't's' [^cg]er
SFX c4 écer éçait/n'q'l'm't's' écer
SFX c4 éger égeait/n'q'l'm't's' éger
SFX c4 er ions/n'q'l't' er
SFX c4 er iez/n'q'l'm' er
SFX c4 er aient/n'q'l'm't's' [^cg]er
SFX c4 écer éçaient/n'q'l'm't's' écer
SFX c4 éger égeaient/n'q'l'm't's' éger
SFX c4 er ai/n'q'j'l'm't' [^cg]er
SFX c4 écer éçai/n'q'j'l'm't' écer
SFX c4 éger égeai/n'q'j'l'm't' éger
SFX c4 er as/n'q'l'm't' [^cg]er
SFX c4 écer éças/n'q'l'm't' écer
SFX c4 éger égeas/n'q'l'm't' éger
SFX c4 er a/n'q'l'm't's' [^cg]er
SFX c4 écer éça/n'q'l'm't's' écer
SFX c4 éger égea/n'q'l'm't's' éger
SFX c4 er âmes/n'q'l't' [^cg]er
SFX c4 écer éçâmes/n'q'l't' écer
SFX c4 éger égeâmes/n'q'l't' éger
SFX c4 er âtes/n'q'l'm' [^cg]er
SFX c4 écer éçâtes/n'q'l'm' écer
SFX c4 éger égeâtes/n'q'l'm' éger
SFX c4 er èrent/n'q'l'm't's' er
SFX c4 er erai/n'q'j'l'm't' er
SFX c4 er eras/n'q'l'm't' er
SFX c4 er era/n'q'l'm't's' er
SFX c4 er erons/n'q'l't' er
SFX c4 er erez/n'q'l'm' er
SFX c4 er eront/n'q'l'm't's' er
SFX c4 er erais/n'q'j'l'm't' er
SFX c4 er erait/n'q'l'm't's' er
SFX c4 er erions/n'q'l't' er
SFX c4 er eriez/n'q'l'm' er
SFX c4 er eraient/n'q'l'm't's' er
SFX c4 er asse/n'q'j'l'm't' [^cg]er
SFX c4 écer éçasse/n'q'j'l'm't' écer
SFX c4 éger égeasse/n'q'j'l'm't' éger
SFX c4 er asses/n'q'l'm't' [^cg]er
SFX c4 écer éçasses/n'q'l'm't' écer
SFX c4 éger égeasses/n'q'l'm't' éger
SFX c4 er ât/n'q'l'm't's' [^cg]er
SFX c4 écer éçât/n'q'l'm't's' écer
SFX c4 éger égeât/n'q'l'm't's' éger
SFX c4 er assions/n'q'l't' [^cg]er
SFX c4 écer éçassions/n'q'l't' écer
SFX c4 éger égeassions/n'q'l't' éger
SFX c4 er assiez/n'q'l'm' [^cg]er
SFX c4 écer éçassiez/n'q'l'm' écer
SFX c4 éger égeassiez/n'q'l'm' éger
SFX c4 er assent/n'q'l'm't's' [^cg]er
SFX c4 écer éçassent/n'q'l'm't's' écer
SFX c4 éger égeassent/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'l'm't' ébrer
SFX c4 écer èce/n'l'm't' écer
SFX c4 écher èche/n'l'm't' écher
SFX c4 écrer ècre/n'l'm't' écrer
SFX c4 éder ède/n'l'm't' éder
SFX c4 éger ège/n'l'm't' éger
SFX c4 égler ègle/n'l'm't' égler
SFX c4 égner ègne/n'l'm't' égner
SFX c4 égrer ègre/n'l'm't' égrer
SFX c4 éguer ègue/n'l'm't' éguer
SFX c4 éler èle/n'l'm't' éler
SFX c4 émer ème/n'l'm't' émer
SFX c4 éner ène/n'l'm't' éner
SFX c4 éper èpe/n'l'm't' éper
SFX c4 équer èque/n'l'm't' équer
SFX c4 érer ère/n'l'm't' érer
SFX c4 éser èse/n'l'm't' éser
SFX c4 éter ète/n'l'm't' éter
SFX c4 étrer ètre/n'l'm't' étrer
SFX c4 évrer èvre/n'l'm't' évrer
SFX c4 éyer èye/n'l'm't' éyer
SFX c4 er ons/n'l' [^cg]er
SFX c4 écer éçons/n'l' écer
SFX c4 éger égeons/n'l' éger
SFX c4 er ez/n'l'm' er
SFX c5 Y 152
SFX c5 er er/n'q'd'm't's' er
SFX c5 er ant/n'q'm't's' [^cg]er
SFX c5 écer éçant/m'q'm't's' écer
SFX c5 éger égeant/m'q'l't's' éger
SFX c5 ébrer èbre/n'q'j'm't's' ébrer
SFX c5 écer èce/n'q'j'm't's' écer
SFX c5 écher èche/n'q'j'm't's' écher
SFX c5 écrer ècre/n'q'j'm't's' écrer
SFX c5 éder ède/n'q'j'm't's' éder
SFX c5 éger ège/n'q'j'm't's' éger
SFX c5 égler ègle/n'q'j'm't's' égler
SFX c5 égner ègne/n'q'j'm't's' égner
SFX c5 égrer ègre/n'q'j'm't's' égrer
SFX c5 éguer ègue/n'q'j'm't's' éguer
SFX c5 éler èle/n'q'j'm't's' éler
SFX c5 émer ème/n'q'j'm't's' émer
SFX c5 éner ène/n'q'j'm't's' éner
SFX c5 éper èpe/n'q'j'm't's' éper
SFX c5 équer èque/n'q'j'm't's' équer
SFX c5 érer ère/n'q'j'm't's' érer
SFX c5 éser èse/n'q'j'm't's' éser
SFX c5 éter ète/n'q'j'm't's' éter
SFX c5 étrer ètre/n'q'j'm't's' étrer
SFX c5 évrer èvre/n'q'j'm't's' évrer
SFX c5 éyer èye/n'q'j'm't's' éyer
SFX c5 ébrer èbres/n'm't' ébrer
SFX c5 écer èces/n'm't' écer
SFX c5 écher èches/n'm't' écher
SFX c5 écrer ècres/n'm't' écrer
SFX c5 éder èdes/n'm't' éder
SFX c5 éger èges/n'm't' éger
SFX c5 égler ègles/n'm't' égler
SFX c5 égner ègnes/n'm't' égner
SFX c5 égrer ègres/n'm't' égrer
SFX c5 éguer ègues/n'm't' éguer
SFX c5 éler èles/n'm't' éler
SFX c5 émer èmes/n'm't' émer
SFX c5 éner ènes/n'm't' éner
SFX c5 éper èpes/n'm't' éper
SFX c5 équer èques/n'm't' équer
SFX c5 érer ères/n'm't' érer
SFX c5 éser èses/n'm't' éser
SFX c5 éter ètes/n'm't' éter
SFX c5 étrer ètres/n'm't' étrer
SFX c5 évrer èvres/n'm't' évrer
SFX c5 éyer èyes/n'm't' éyer
SFX c5 er ons/n't' [^cg]er
SFX c5 écer éçons/n't' écer
SFX c5 éger égeons/n't' éger
SFX c5 er ez/n'm' er
SFX c5 ébrer èbrent/n'q'm't's' ébrer
SFX c5 écer ècent/n'q'm't's' écer
SFX c5 écher èchent/n'q'm't's' écher
SFX c5 écrer ècrent/n'q'm't's' écrer
SFX c5 éder èdent/n'q'm't's' éder
SFX c5 éger ègent/n'q'm't's' éger
SFX c5 égler èglent/n'q'm't's' égler
SFX c5 égner ègnent/n'q'm't's' égner
SFX c5 égrer ègrent/n'q'm't's' égrer
SFX c5 éguer èguent/n'q'm't's' éguer
SFX c5 éler èlent/n'q'm't's' éler
SFX c5 émer èment/n'q'm't's' émer
SFX c5 éner ènent/n'q'm't's' éner
SFX c5 éper èpent/n'q'm't's' éper
SFX c5 équer èquent/n'q'm't's' équer
SFX c5 érer èrent/n'q'm't's' érer
SFX c5 éser èsent/n'q'm't's' éser
SFX c5 éter ètent/n'q'm't's' éter
SFX c5 étrer ètrent/n'q'm't's' étrer
SFX c5 évrer èvrent/n'q'm't's' évrer
SFX c5 éyer èyent/n'q'm't's' éyer
SFX c5 er ais/n'j'm't' [^cg]er
SFX c5 écer éçais/n'j'm't' écer
SFX c5 éger égeais/n'j'm't' éger
SFX c5 er ait/n'q'm't's' [^cg]er
SFX c5 écer éçait/n'q'm't's' écer
SFX c5 éger égeait/n'q'm't's' éger
SFX c5 er ions/n't' er
SFX c5 er iez/n'm' er
SFX c5 er aient/n'q'm't's' [^cg]er
SFX c5 écer éçaient/n'q'm't's' écer
SFX c5 éger égeaient/n'q'm't's' éger
SFX c5 er ai/n'j'm't' [^cg]er
SFX c5 écer éçai/n'j'm't' écer
SFX c5 éger égeai/n'j'm't' éger
SFX c5 er as/n'm't' [^cg]er
SFX c5 écer éças/n'm't' écer
SFX c5 éger égeas/n'm't' éger
SFX c5 er a/n'q'm't's' [^cg]er
SFX c5 écer éça/n'q'm't's' écer
SFX c5 éger égea/n'q'm't's' éger
SFX c5 er âmes/n't' [^cg]er
SFX c5 écer éçâmes/n't' écer
SFX c5 éger égeâmes/n't' éger
SFX c5 er âtes/n'm' [^cg]er
SFX c5 écer éçâtes/n'm' écer
SFX c5 éger égeâtes/n'm' éger
SFX c5 er èrent/n'q'm't's' er
SFX c5 er erai/n'j'm't' er
SFX c5 er eras/n'm't' er
SFX c5 er era/n'q'm't's' er
SFX c5 er erons/n't' er
SFX c5 er erez/n'm' er
SFX c5 er eront/n'q'm't's' er
SFX c5 er erais/n'j'm't' er
SFX c5 er erait/n'q'm't's' er
SFX c5 er erions/n't' er
SFX c5 er eriez/n'm' er
SFX c5 er eraient/n'q'm't's' er
SFX c5 er asse/n'j'm't' [^cg]er
SFX c5 écer éçasse/n'j'm't' écer
SFX c5 éger égeasse/n'j'm't' éger
SFX c5 er asses/n'm't' [^cg]er
SFX c5 écer éçasses/n'm't' écer
SFX c5 éger égeasses/n'm't' éger
SFX c5 er ât/n'q'm't's' [^cg]er
SFX c5 écer éçât/n'q'm't's' écer
SFX c5 éger égeât/n'q'm't's' éger
SFX c5 er assions/n't' [^cg]er
SFX c5 écer éçassions/n't' écer
SFX c5 éger égeassions/n't' éger
SFX c5 er assiez/n'm' [^cg]er
SFX c5 écer éçassiez/n'm' écer
SFX c5 éger égeassiez/n'm' éger
SFX c5 er assent/n'q'm't's' [^cg]er
SFX c5 écer éçassent/n'q'm't's' écer
SFX c5 éger égeassent/n'q'm't's' éger
SFX c5 ébrer èbre/n'm' ébrer
SFX c5 écer èce/n'm' écer
SFX c5 écher èche/n'm' écher
SFX c5 écrer ècre/n'm' écrer
SFX c5 éder ède/n'm' éder
SFX c5 éger ège/n'm' éger
SFX c5 égler ègle/n'm' égler
SFX c5 égner ègne/n'm' égner
SFX c5 égrer ègre/n'm' égrer
SFX c5 éguer ègue/n'm' éguer
SFX c5 éler èle/n'm' éler
SFX c5 émer ème/n'm' émer
SFX c5 éner ène/n'm' éner
SFX c5 éper èpe/n'm' éper
SFX c5 équer èque/n'm' équer
SFX c5 érer ère/n'm' érer
SFX c5 éser èse/n'm' éser
SFX c5 éter ète/n'm' éter
SFX c5 étrer ètre/n'm' étrer
SFX c5 évrer èvre/n'm' évrer
SFX c5 éyer èye/n'm' éyer
SFX c5 er ons/n' [^cg]er
SFX c5 écer éçons/n' écer
SFX c5 éger égeons/n' éger
SFX c5 er ez/n' er
SFX d0 N 82
SFX d0 er ant er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 eter ettes jeter
SFX d0 eter ettes [^j]eter
SFX d0 eler elles ppeler
SFX d0 eler elles [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d0 eter ettent jeter
SFX d0 eter ettent [^j]eter
SFX d0 eler ellent ppeler
SFX d0 eler ellent [^p].eler
SFX d0 er ais er
SFX d0 er ait er
SFX d0 er ions er
SFX d0 er iez er
SFX d0 er aient er
SFX d0 er ai er
SFX d0 er as er
SFX d0 er a er
SFX d0 er âmes er
SFX d0 er âtes er
SFX d0 er èrent er
SFX d0 eter etterai jeter
SFX d0 eter etterai [^j]eter
SFX d0 eler ellerai ppeler
SFX d0 eler ellerai [^p].eler
SFX d0 eter etteras jeter
SFX d0 eter etteras [^j]eter
SFX d0 eler elleras ppeler
SFX d0 eler elleras [^p].eler
SFX d0 eter ettera jeter
SFX d0 eter ettera [^j]eter
SFX d0 eler ellera ppeler
SFX d0 eler ellera [^p].eler
SFX d0 eter etterons jeter
SFX d0 eter etterons [^j]eter
SFX d0 eler ellerons ppeler
SFX d0 eler ellerons [^p].eler
SFX d0 eter etterez jeter
SFX d0 eter etterez [^j]eter
SFX d0 eler ellerez ppeler
SFX d0 eler ellerez [^p].eler
SFX d0 eter etteront jeter
SFX d0 eter etteront [^j]eter
SFX d0 eler elleront ppeler
SFX d0 eler elleront [^p].eler
SFX d0 eter etterais jeter
SFX d0 eter etterais [^j]eter
SFX d0 eler ellerais ppeler
SFX d0 eler ellerais [^p].eler
SFX d0 eter etterait jeter
SFX d0 eter etterait [^j]eter
SFX d0 eler ellerait ppeler
SFX d0 eler ellerait [^p].eler
SFX d0 eter etterions jeter
SFX d0 eter etterions [^j]eter
SFX d0 eler ellerions ppeler
SFX d0 eler ellerions [^p].eler
SFX d0 eter etteriez jeter
SFX d0 eter etteriez [^j]eter
SFX d0 eler elleriez ppeler
SFX d0 eler elleriez [^p].eler
SFX d0 eter etteraient jeter
SFX d0 eter etteraient [^j]eter
SFX d0 eler elleraient ppeler
SFX d0 eler elleraient [^p].eler
SFX d0 er asse er
SFX d0 er asses er
SFX d0 er ât er
SFX d0 er assions er
SFX d0 er assiez er
SFX d0 er assent er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d1 Y 83
SFX d1 er er/n'q'd' er
SFX d1 er ant/n'q' er
SFX d1 eter ette/n'q'j' jeter
SFX d1 eter ette/n'q'j' [^j]eter
SFX d1 eler elle/n'q'j' ppeler
SFX d1 eler elle/n'q'j' [^p].eler
SFX d1 eter ettes/n' jeter
SFX d1 eter ettes/n' [^j]eter
SFX d1 eler elles/n' ppeler
SFX d1 eler elles/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d1 eter ettent/n'q' jeter
SFX d1 eter ettent/n'q' [^j]eter
SFX d1 eler ellent/n'q' ppeler
SFX d1 eler ellent/n'q' [^p].eler
SFX d1 er ais/n'j' er
SFX d1 er ait/n'q' er
SFX d1 er ions/n' er
SFX d1 er iez/n' er
SFX d1 er aient/n'q' er
SFX d1 er ai/n'j' er
SFX d1 er as/n' er
SFX d1 er a/n'q' er
SFX d1 er âmes/n' er
SFX d1 er âtes/n' er
SFX d1 er èrent/n'q' er
SFX d1 eter etterai/n'j' jeter
SFX d1 eter etterai/n'j' [^j]eter
SFX d1 eler ellerai/n'j' ppeler
SFX d1 eler ellerai/n'j' [^p].eler
SFX d1 eter etteras/n' jeter
SFX d1 eter etteras/n' [^j]eter
SFX d1 eler elleras/n' ppeler
SFX d1 eler elleras/n' [^p].eler
SFX d1 eter ettera/n'q' jeter
SFX d1 eter ettera/n'q' [^j]eter
SFX d1 eler ellera/n'q' ppeler
SFX d1 eler ellera/n'q' [^p].eler
SFX d1 eter etterons/n' jeter
SFX d1 eter etterons/n' [^j]eter
SFX d1 eler ellerons/n' ppeler
SFX d1 eler ellerons/n' [^p].eler
SFX d1 eter etterez/n' jeter
SFX d1 eter etterez/n' [^j]eter
SFX d1 eler ellerez/n' ppeler
SFX d1 eler ellerez/n' [^p].eler
SFX d1 eter etteront/n'q' jeter
SFX d1 eter etteront/n'q' [^j]eter
SFX d1 eler elleront/n'q' ppeler
SFX d1 eler elleront/n'q' [^p].eler
SFX d1 eter etterais/n'j' jeter
SFX d1 eter etterais/n'j' [^j]eter
SFX d1 eler ellerais/n'j' ppeler
SFX d1 eler ellerais/n'j' [^p].eler
SFX d1 eter etterait/n'q' jeter
SFX d1 eter etterait/n'q' [^j]eter
SFX d1 eler ellerait/n'q' ppeler
SFX d1 eler ellerait/n'q' [^p].eler
SFX d1 eter etterions/n' jeter
SFX d1 eter etterions/n' [^j]eter
SFX d1 eler ellerions/n' ppeler
SFX d1 eler ellerions/n' [^p].eler
SFX d1 eter etteriez/n' jeter
SFX d1 eter etteriez/n' [^j]eter
SFX d1 eler elleriez/n' ppeler
SFX d1 eler elleriez/n' [^p].eler
SFX d1 eter etteraient/n'q' jeter
SFX d1 eter etteraient/n'q' [^j]eter
SFX d1 eler elleraient/n'q' ppeler
SFX d1 eler elleraient/n'q' [^p].eler
SFX d1 er asse/n'j' er
SFX d1 er asses/n' er
SFX d1 er ât/n'q' er
SFX d1 er assions/n' er
SFX d1 er assiez/n' er
SFX d1 er assent/n'q' er
SFX d1 eter ette/n' jeter
SFX d1 eter ette/n' [^j]eter
SFX d1 eler elle/n' ppeler
SFX d1 eler elle/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d2 Y 83
SFX d2 er er/n'q'd'l'm't's' er
SFX d2 er ant/n'q'l'm't's' er
SFX d2 eter ette/n'q'j'l'm't's' jeter
SFX d2 eter ette/n'q'j'l'm't's' [^j]eter
SFX d2 eler elle/n'q'j'l'm't's' ppeler
SFX d2 eler elle/n'q'j'l'm't's' [^p].eler
SFX d2 eter ettes/n'q'l'm' jeter
SFX d2 eter ettes/n'q'l'm' [^j]eter
SFX d2 eler elles/n'q'l'm' ppeler
SFX d2 eler elles/n'q'l'm' [^p].eler
SFX d2 er ons/n'q'l't' er
SFX d2 er ez/n'q'l'm' er
SFX d2 eter ettent/n'q'l'm't's' jeter
SFX d2 eter ettent/n'q'l'm't's' [^j]eter
SFX d2 eler ellent/n'q'l'm't's' ppeler
SFX d2 eler ellent/n'q'l'm't's' [^p].eler
SFX d2 er ais/n'q'j'l'm't' er
SFX d2 er ait/n'q'l'm't's' er
SFX d2 er ions/n'q'l't' er
SFX d2 er iez/n'q'l'm' er
SFX d2 er aient/n'q'l'm't's' er
SFX d2 er ai/n'q'j'l't' er
SFX d2 er as/n'q'l'm' er
SFX d2 er a/n'q'l'm't's' er
SFX d2 er âmes/n'q'l't' er
SFX d2 er âtes/n'q'l'm' er
SFX d2 er èrent/n'q'l'm't's' er
SFX d2 eter etterai/n'q'j'l't' jeter
SFX d2 eter etterai/n'q'j'l't' [^j]eter
SFX d2 eler ellerai/n'q'j'l't' ppeler
SFX d2 eler ellerai/n'q'j'l't' [^p].eler
SFX d2 eter etteras/n'q'l'm' jeter
SFX d2 eter etteras/n'q'l'm' [^j]eter
SFX d2 eler elleras/n'q'l'm' ppeler
SFX d2 eler elleras/n'q'l'm' [^p].eler
SFX d2 eter ettera/n'q'l'm't's' jeter
SFX d2 eter ettera/n'q'l'm't's' [^j]eter
SFX d2 eler ellera/n'q'l'm't's' ppeler
SFX d2 eler ellera/n'q'l'm't's' [^p].eler
SFX d2 eter etterons/n'q'l't' jeter
SFX d2 eter etterons/n'q'l't' [^j]eter
SFX d2 eler ellerons/n'q'l't' ppeler
SFX d2 eler ellerons/n'q'l't' [^p].eler
SFX d2 eter etterez/n'q'l'm' jeter
SFX d2 eter etterez/n'q'l'm' [^j]eter
SFX d2 eler ellerez/n'q'l'm' ppeler
SFX d2 eler ellerez/n'q'l'm' [^p].eler
SFX d2 eter etteront/n'q'l'm't's' jeter
SFX d2 eter etteront/n'q'l'm't's' [^j]eter
SFX d2 eler elleront/n'q'l'm't's' ppeler
SFX d2 eler elleront/n'q'l'm't's' [^p].eler
SFX d2 eter etterais/n'q'j'l'm't' jeter
SFX d2 eter etterais/n'q'j'l'm't' [^j]eter
SFX d2 eler ellerais/n'q'j'l'm't' ppeler
SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d2 eter etterait/n'q'l'm't's' jeter
SFX d2 eter etterait/n'q'l'm't's' [^j]eter
SFX d2 eler ellerait/n'q'l'm't's' ppeler
SFX d2 eler ellerait/n'q'l'm't's' [^p].eler
SFX d2 eter etterions/n'q'l't' jeter
SFX d2 eter etterions/n'q'l't' [^j]eter
SFX d2 eler ellerions/n'q'l't' ppeler
SFX d2 eler ellerions/n'q'l't' [^p].eler
SFX d2 eter etteriez/n'q'l'm' jeter
SFX d2 eter etteriez/n'q'l'm' [^j]eter
SFX d2 eler elleriez/n'q'l'm' ppeler
SFX d2 eler elleriez/n'q'l'm' [^p].eler
SFX d2 eter etteraient/n'q'l'm't's' jeter
SFX d2 eter etteraient/n'q'l'm't's' [^j]eter
SFX d2 eler elleraient/n'q'l'm't's' ppeler
SFX d2 eler elleraient/n'q'l'm't's' [^p].eler
SFX d2 er asse/n'q'j'l't' er
SFX d2 er asses/n'q'l'm' er
SFX d2 er ât/n'q'l'm't's' er
SFX d2 er assions/n'q'l't' er
SFX d2 er assiez/n'q'l'm' er
SFX d2 er assent/n'q'l'm't's' er
SFX d2 eter ette/n'l'm' jeter
SFX d2 eter ette/n'l'm' [^j]eter
SFX d2 eler elle/n'l'm' ppeler
SFX d2 eler elle/n'l'm' [^p].eler
SFX d2 er ons/n'l' er
SFX d2 er ez/n'l'm' er
SFX d3 Y 83
SFX d3 er er/m't's' er
SFX d3 er ant/m't's' er
SFX d3 eter ette/m's' jeter
SFX d3 eter ette/m's' [^j]eter
SFX d3 eler elle/m's' ppeler
SFX d3 eler elle/m's' [^p].eler
SFX d3 eter ettes/t' jeter
SFX d3 eter ettes/t' [^j]eter
SFX d3 eler elles/t' ppeler
SFX d3 eler elles/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d3 eter ettent/s' jeter
SFX d3 eter ettent/s' [^j]eter
SFX d3 eler ellent/s' ppeler
SFX d3 eler ellent/s' [^p].eler
SFX d3 er ais/m't' er
SFX d3 er ait/s' er
SFX d3 er ions er
SFX d3 er iez er
SFX d3 er aient/s' er
SFX d3 er ai/m' er
SFX d3 er as/t' er
SFX d3 er a/s' er
SFX d3 er âmes er
SFX d3 er âtes er
SFX d3 er èrent/s' er
SFX d3 eter etterai/m' jeter
SFX d3 eter etterai/m' [^j]eter
SFX d3 eler ellerai/m' ppeler
SFX d3 eler ellerai/m' [^p].eler
SFX d3 eter etteras/t' jeter
SFX d3 eter etteras/t' [^j]eter
SFX d3 eler elleras/t' ppeler
SFX d3 eler elleras/t' [^p].eler
SFX d3 eter ettera/s' jeter
SFX d3 eter ettera/s' [^j]eter
SFX d3 eler ellera/s' ppeler
SFX d3 eler ellera/s' [^p].eler
SFX d3 eter etterons jeter
SFX d3 eter etterons [^j]eter
SFX d3 eler ellerons ppeler
SFX d3 eler ellerons [^p].eler
SFX d3 eter etterez jeter
SFX d3 eter etterez [^j]eter
SFX d3 eler ellerez ppeler
SFX d3 eler ellerez [^p].eler
SFX d3 eter etteront/s' jeter
SFX d3 eter etteront/s' [^j]eter
SFX d3 eler elleront/s' ppeler
SFX d3 eler elleront/s' [^p].eler
SFX d3 eter etterais/m't' jeter
SFX d3 eter etterais/m't' [^j]eter
SFX d3 eler ellerais/m't' ppeler
SFX d3 eler ellerais/m't' [^p].eler
SFX d3 eter etterait/s' jeter
SFX d3 eter etterait/s' [^j]eter
SFX d3 eler ellerait/s' ppeler
SFX d3 eler ellerait/s' [^p].eler
SFX d3 eter etterions jeter
SFX d3 eter etterions [^j]eter
SFX d3 eler ellerions ppeler
SFX d3 eler ellerions [^p].eler
SFX d3 eter etteriez jeter
SFX d3 eter etteriez [^j]eter
SFX d3 eler elleriez ppeler
SFX d3 eler elleriez [^p].eler
SFX d3 eter etteraient/s' jeter
SFX d3 eter etteraient/s' [^j]eter
SFX d3 eler elleraient/s' ppeler
SFX d3 eler elleraient/s' [^p].eler
SFX d3 er asse/m' er
SFX d3 er asses/t' er
SFX d3 er ât/s' er
SFX d3 er assions er
SFX d3 er assiez er
SFX d3 er assent/s' er
SFX d3 eter ette/t' jeter
SFX d3 eter ette/t' [^j]eter
SFX d3 eler elle/t' ppeler
SFX d3 eler elle/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d4 Y 98
SFX d4 er er/n'q'd'l'm't's' er
SFX d4 er ant/n'q'l'm't's' er
SFX d4 eter ette/n'q'j'l'm't's' jeter
SFX d4 eter ette/n'q'j'l'm't's' [^j]eter
SFX d4 eler elle/n'q'j'l'm't's' ppeler
SFX d4 eler elle/n'q'j'l'm't's' [^p].eler
SFX d4 eler elle/n'q'j'l'm't's' épeler
SFX d4 eter ettes/n'q'l'm't' jeter
SFX d4 eter ettes/n'q'l'm't' [^j]eter
SFX d4 eler elles/n'q'l'm't' ppeler
SFX d4 eler elles/n'q'l'm't' [^p].eler
SFX d4 eler elles/n'q'l'm't' épeler
SFX d4 er ons/n'q'l't' er
SFX d4 er ez/n'q'l'm' er
SFX d4 eter ettent/n'q'l'm't's' jeter
SFX d4 eter ettent/n'q'l'm't's' [^j]eter
SFX d4 eler ellent/n'q'l'm't's' ppeler
SFX d4 eler ellent/n'q'l'm't's' [^p].eler
SFX d4 eler ellent/n'q'l'm't's' épeler
SFX d4 er ais/n'q'j'l'm't' er
SFX d4 er ait/n'q'l'm't's' er
SFX d4 er ions/n'q'l't' er
SFX d4 er iez/n'q'l'm' er
SFX d4 er aient/n'q'l'm't's' er
SFX d4 er ai/n'q'j'l'm't' er
SFX d4 er as/n'q'l'm't' er
SFX d4 er a/n'q'l'm't's' er
SFX d4 er âmes/n'q'l't' er
SFX d4 er âtes/n'q'l'm' er
SFX d4 er èrent/n'q'l'm't's' er
SFX d4 eter etterai/n'q'j'l'm't' jeter
SFX d4 eter etterai/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerai/n'q'j'l'm't' ppeler
SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerai/n'q'j'l'm't' épeler
SFX d4 eter etteras/n'q'l'm't' jeter
SFX d4 eter etteras/n'q'l'm't' [^j]eter
SFX d4 eler elleras/n'q'l'm't' ppeler
SFX d4 eler elleras/n'q'l'm't' [^p].eler
SFX d4 eler elleras/n'q'l'm't' épeler
SFX d4 eter ettera/n'q'l'm't's' jeter
SFX d4 eter ettera/n'q'l'm't's' [^j]eter
SFX d4 eler ellera/n'q'l'm't's' ppeler
SFX d4 eler ellera/n'q'l'm't's' [^p].eler
SFX d4 eler ellera/n'q'l'm't's' épeler
SFX d4 eter etterons/n'q'l't' jeter
SFX d4 eter etterons/n'q'l't' [^j]eter
SFX d4 eler ellerons/n'q'l't' ppeler
SFX d4 eler ellerons/n'q'l't' [^p].eler
SFX d4 eler ellerons/n'q'l't' épeler
SFX d4 eter etterez/n'q'l'm' jeter
SFX d4 eter etterez/n'q'l'm' [^j]eter
SFX d4 eler ellerez/n'q'l'm' ppeler
SFX d4 eler ellerez/n'q'l'm' [^p].eler
SFX d4 eler ellerez/n'q'l'm' épeler
SFX d4 eter etteront/n'q'l'm't's' jeter
SFX d4 eter etteront/n'q'l'm't's' [^j]eter
SFX d4 eler elleront/n'q'l'm't's' ppeler
SFX d4 eler elleront/n'q'l'm't's' [^p].eler
SFX d4 eler elleront/n'q'l'm't's' épeler
SFX d4 eter etterais/n'q'j'l'm't' jeter
SFX d4 eter etterais/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerais/n'q'j'l'm't' ppeler
SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerais/n'q'j'l'm't' épeler
SFX d4 eter etterait/n'q'l'm't's' jeter
SFX d4 eter etterait/n'q'l'm't's' [^j]eter
SFX d4 eler ellerait/n'q'l'm't's' ppeler
SFX d4 eler ellerait/n'q'l'm't's' [^p].eler
SFX d4 eler ellerait/n'q'l'm't's' épeler
SFX d4 eter etterions/n'q'l't' jeter
SFX d4 eter etterions/n'q'l't' [^j]eter
SFX d4 eler ellerions/n'q'l't' ppeler
SFX d4 eler ellerions/n'q'l't' [^p].eler
SFX d4 eler ellerions/n'q'l't' épeler
SFX d4 eter etteriez/n'q'l'm' jeter
SFX d4 eter etteriez/n'q'l'm' [^j]eter
SFX d4 eler elleriez/n'q'l'm' ppeler
SFX d4 eler elleriez/n'q'l'm' [^p].eler
SFX d4 eler elleriez/n'q'l'm' épeler
SFX d4 eter etteraient/n'q'l'm't's' jeter
SFX d4 eter etteraient/n'q'l'm't's' [^j]eter
SFX d4 eler elleraient/n'q'l'm't's' ppeler
SFX d4 eler elleraient/n'q'l'm't's' [^p].eler
SFX d4 eler elleraient/n'q'l'm't's' épeler
SFX d4 er asse/n'q'j'l'm't' er
SFX d4 er asses/n'q'l'm't' er
SFX d4 er ât/n'q'l'm't's' er
SFX d4 er assions/n'q'l't' er
SFX d4 er assiez/n'q'l'm' er
SFX d4 er assent/n'q'l'm't's' er
SFX d4 eter ette/n'l'm't' jeter
SFX d4 eter ette/n'l'm't' [^j]eter
SFX d4 eler elle/n'l'm't' ppeler
SFX d4 eler elle/n'l'm't' [^p].eler
SFX d4 eler elle/n'l'm't' épeler
SFX d4 er ons/n'l' er
SFX d4 er ez/n'l'm' er
SFX d5 Y 83
SFX d5 er er/m'q'd'm't's' er
SFX d5 er ant/m'q'd'm't's' er
SFX d5 eter ette/n'q'j'm't's' jeter
SFX d5 eter ette/n'q'j'm't's' [^j]eter
SFX d5 eler elle/n'q'j'm't's' ppeler
SFX d5 eler elle/n'q'j'm't's' [^p].eler
SFX d5 eter ettes/n'm't' jeter
SFX d5 eter ettes/n'm't' [^j]eter
SFX d5 eler elles/n'm't' ppeler
SFX d5 eler elles/n'm't' [^p].eler
SFX d5 er ons/n't' er
SFX d5 er ez/n'm' er
SFX d5 eter ettent/n'q'm't's' jeter
SFX d5 eter ettent/n'q'm't's' [^j]eter
SFX d5 eler ellent/n'q'm't's' ppeler
SFX d5 eler ellent/n'q'm't's' [^p].eler
SFX d5 er ais/n'j'm't' er
SFX d5 er ait/n'q'm't's' er
SFX d5 er ions/n't' er
SFX d5 er iez/n'm' er
SFX d5 er aient/n'q'm't's' er
SFX d5 er ai/n'j'm't' er
SFX d5 er as/n'm't' er
SFX d5 er a/n'q'm't's' er
SFX d5 er âmes/n't' er
SFX d5 er âtes/n'm' er
SFX d5 er èrent/n'q'm't's' er
SFX d5 eter etterai/n'j'm't' jeter
SFX d5 eter etterai/n'j'm't' [^j]eter
SFX d5 eler ellerai/n'j'm't' ppeler
SFX d5 eler ellerai/n'j'm't' [^p].eler
SFX d5 eter etteras/n'm't' jeter
SFX d5 eter etteras/n'm't' [^j]eter
SFX d5 eler elleras/n'm't' ppeler
SFX d5 eler elleras/n'm't' [^p].eler
SFX d5 eter ettera/n'q'm't's' jeter
SFX d5 eter ettera/n'q'm't's' [^j]eter
SFX d5 eler ellera/n'q'm't's' ppeler
SFX d5 eler ellera/n'q'm't's' [^p].eler
SFX d5 eter etterons/n't' jeter
SFX d5 eter etterons/n't' [^j]eter
SFX d5 eler ellerons/n't' ppeler
SFX d5 eler ellerons/n't' [^p].eler
SFX d5 eter etterez/n'm' jeter
SFX d5 eter etterez/n'm' [^j]eter
SFX d5 eler ellerez/n'm' ppeler
SFX d5 eler ellerez/n'm' [^p].eler
SFX d5 eter etteront/n'q'm't's' jeter
SFX d5 eter etteront/n'q'm't's' [^j]eter
SFX d5 eler elleront/n'q'm't's' ppeler
SFX d5 eler elleront/n'q'm't's' [^p].eler
SFX d5 eter etterais/n'j'm't' jeter
SFX d5 eter etterais/n'j'm't' [^j]eter
SFX d5 eler ellerais/n'j'm't' ppeler
SFX d5 eler ellerais/n'j'm't' [^p].eler
SFX d5 eter etterait/n'q'm't's' jeter
SFX d5 eter etterait/n'q'm't's' [^j]eter
SFX d5 eler ellerait/n'q'm't's' ppeler
SFX d5 eler ellerait/n'q'm't's' [^p].eler
SFX d5 eter etterions/n't' jeter
SFX d5 eter etterions/n't' [^j]eter
SFX d5 eler ellerions/n't' ppeler
SFX d5 eler ellerions/n't' [^p].eler
SFX d5 eter etteriez/n'm' jeter
SFX d5 eter etteriez/n'm' [^j]eter
SFX d5 eler elleriez/n'm' ppeler
SFX d5 eler elleriez/n'm' [^p].eler
SFX d5 eter etteraient/n'q'm't's' jeter
SFX d5 eter etteraient/n'q'm't's' [^j]eter
SFX d5 eler elleraient/n'q'm't's' ppeler
SFX d5 eler elleraient/n'q'm't's' [^p].eler
SFX d5 er asse/n'j'm't' er
SFX d5 er asses/n'm't' er
SFX d5 er ât/n'q'm't's' er
SFX d5 er assions/n't' er
SFX d5 er assiez/n'm' er
SFX d5 er assent/n'q'm't's' er
SFX d5 eter ette/m' jeter
SFX d5 eter ette/m' [^j]eter
SFX d5 eler elle/m' ppeler
SFX d5 eler elle/m' [^p].eler
SFX d5 er ons er
SFX d5 er ez er
SFX aA Y 54
SFX aA ller ller/n'q'd'm't' aller
SFX aA ller llant/n'q'm't' aller
SFX aA ller llé/q' aller
SFX aA ller llés/q' aller
SFX aA ller llée/q' aller
SFX aA ller llées/q' aller
SFX aA aller vais aller
SFX aA aller vas aller
SFX aA aller va aller
SFX aA ller llons/n'q' aller
SFX aA ller llez/n'q' aller
SFX aA aller vont aller
SFX aA ller llais/n'q'j' aller
SFX aA ller llait/n'q'm't' aller
SFX aA ller llions/n'q' aller
SFX aA ller lliez/n'q' aller
SFX aA ller llaient/n'q'm't' aller
SFX aA ller llai/n'q'j' aller
SFX aA ller llas/n'q' aller
SFX aA ller lla/n'q'm't' aller
SFX aA ller llâmes/n'q' aller
SFX aA ller llâtes/n'q' aller
SFX aA ller llèrent/n'q'm't' aller
SFX aA aller irai/n'q'j' aller
SFX aA aller iras/n'q' aller
SFX aA aller ira/n'q'm't' aller
SFX aA aller irons/n'q' aller
SFX aA aller irez/n'q'm't' aller
SFX aA aller iront/n'q' aller
SFX aA aller irais/n'q'j' aller
SFX aA aller irait/n'q'm't' aller
SFX aA aller irions/n'q' aller
SFX aA aller iriez/n'q' aller
SFX aA aller iraient/n'q'm't' aller
SFX aA ller ille/n'q'j'm't' aller
SFX aA ller illes/n' aller
SFX aA ller llions/n' aller
SFX aA ller lliez/n' aller
SFX aA ller illent/n'q'm't' aller
SFX aA ller llasse/n'q'j' aller
SFX aA ller llasses/n'q' aller
SFX aA ller llât/n'q'm't' aller
SFX aA ller llassions/n'q' aller
SFX aA ller llassiez/n'q' aller
SFX aA ller llassent/n'q'm't' aller
SFX aA ller llons/n' aller
SFX aA aller va aller
SFX aA aller vas-y aller
SFX aA aller va-t'en aller
SFX aA ller llons-y aller
SFX aA ller llons-nous-en aller
SFX aA ller llez/n' aller
SFX aA ller llez-y aller
SFX aA ller llez-vous-en aller
SFX aD Y 44
SFX aD voyer voyer/n'q'd'l'm't's' envoyer
SFX aD voyer voyant/n'q'l'm't's' envoyer
SFX aD voyer voyé/q' envoyer
SFX aD voyer voyés/q' envoyer
SFX aD voyer voyée/q' envoyer
SFX aD voyer voyées/q' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'q'l'm't' envoyer
SFX aD voyer voyons/n'q'l't' envoyer
SFX aD voyer voyez/n'q'l'm' envoyer
SFX aD voyer voient/n'q'l'm't's' envoyer
SFX aD voyer voyais/n'q'j'l'm't' envoyer
SFX aD voyer voyait/n'q'l'm't's' envoyer
SFX aD voyer voyions/n'q'l't' envoyer
SFX aD voyer voyiez/n'q'l'm' envoyer
SFX aD voyer voyaient/n'q'l'm't's' envoyer
SFX aD voyer voyai/n'q'j'l'm't' envoyer
SFX aD voyer voyas/n'q'l'm't' envoyer
SFX aD voyer voya/n'q'l'm't's' envoyer
SFX aD voyer voyâmes/n'q'l't' envoyer
SFX aD voyer voyâtes/n'q'l'm' envoyer
SFX aD voyer voyèrent/n'q'l'm't's' envoyer
SFX aD voyer verrai/n'q'j'l'm't' envoyer
SFX aD voyer verras/n'q'l'm't' envoyer
SFX aD voyer verra/n'q'l'm't's' envoyer
SFX aD voyer verrons/n'q'l't' envoyer
SFX aD voyer verrez/n'q'l'm' envoyer
SFX aD voyer verront/n'q'l'm't's' envoyer
SFX aD voyer verrais/n'q'j'l'm't' envoyer
SFX aD voyer verrait/n'q'l'm't's' envoyer
SFX aD voyer verrions/n'q'l't' envoyer
SFX aD voyer verriez/n'q'l'm' envoyer
SFX aD voyer verraient/n'q'l'm't's' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'l'm't' envoyer
SFX aD voyer voyasse/n'q'j'l'm't' envoyer
SFX aD voyer voyasses/n'q'l'm't' envoyer
SFX aD voyer voyât/n'q'l'm't's' envoyer
SFX aD voyer voyassions/n'q'l't' envoyer
SFX aD voyer voyassiez/n'q'l'm' envoyer
SFX aD voyer voyassent/n'q'l'm't's' envoyer
SFX aD voyer voie/n'l'm't' envoyer
SFX aD voyer voyons/n'l' envoyer
SFX aD voyer voyez/n'l'm' envoyer
SFX aE Y 6
SFX aE direr direr/n'q'd'l'm't's' direr
SFX aE direr dirant/n'q'l'm't's' direr
SFX aE direr diré/q' direr
SFX aE direr dirés/q' direr
SFX aE direr dirée/q' direr
SFX aE direr dirées/q' direr
SFX aF N 17
SFX aF cerner cernant er
SFX aF cerner cerné er
SFX aF cerner cernés er
SFX aF cerner cernée er
SFX aF cerner cernées er
SFX aF cerner cerne er
SFX aF cerner cernent er
SFX aF cerner cernait er
SFX aF cerner cernaient er
SFX aF cerner cerna er
SFX aF cerner cernèrent er
SFX aF cerner cernera er
SFX aF cerner cerneront er
SFX aF cerner cernerait er
SFX aF cerner cerneraient er
SFX aF cerner cernât er
SFX aF cerner cernassent er
SFX aG Y 19
SFX aG er er/n'q'd'm't' er
SFX aG er ant/n'q'm't' er
SFX aG mber mbé mber
SFX aG lter lté lter
SFX aG lter ltés lter
SFX aG lter ltée lter
SFX aG lter ltées lter
SFX aG er e/n'q'm't' er
SFX aG er ent/n'q'm't' er
SFX aG er ait/n'q'm't' er
SFX aG er aient/n'q'm't' er
SFX aG er a/n'q'm't' er
SFX aG er èrent/n'q'm't' er
SFX aG er era/n'q'm't' er
SFX aG er eront/n'q'm't' er
SFX aG er erait/n'q'm't' er
SFX aG er eraient/n'q'm't' er
SFX aG er ât/n'q'm't' er
SFX aG er assent/n'q'm't' er
SFX aH N 38
SFX aH er ant gger
SFX aH er é gger
SFX aH er e gger
SFX aH er es gger
SFX aH er ons gger
SFX aH er ez gger
SFX aH er ent gger
SFX aH er ais gger
SFX aH er ait gger
SFX aH er ions gger
SFX aH er iez gger
SFX aH er aient gger
SFX aH er ai gger
SFX aH er as gger
SFX aH er a gger
SFX aH er âmes gger
SFX aH er âtes gger
SFX aH er èrent gger
SFX aH er erai gger
SFX aH er eras gger
SFX aH er era gger
SFX aH er erons gger
SFX aH er erez gger
SFX aH er eront gger
SFX aH er erais gger
SFX aH er erait gger
SFX aH er erions gger
SFX aH er eriez gger
SFX aH er eraient gger
SFX aH er asse gger
SFX aH er asses gger
SFX aH er ât gger
SFX aH er assions gger
SFX aH er assiez gger
SFX aH er assent gger
SFX aH er e gger
SFX aH er ons gger
SFX aH er ez gger
SFX aY N 41
SFX aY neler nelant neler
SFX aY neler nelé neler
SFX aY neler nelés neler
SFX aY neler nelée neler
SFX aY neler nelées neler
SFX aY éneler énelle éneler
SFX aY éneler énelles éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aY éneler énellent éneler
SFX aY neler nelais neler
SFX aY neler nelait neler
SFX aY neler nelions neler
SFX aY neler neliez neler
SFX aY neler nelaient neler
SFX aY neler nelai neler
SFX aY neler nelas neler
SFX aY neler nela neler
SFX aY neler nelâmes neler
SFX aY neler nelâtes neler
SFX aY neler nelèrent neler
SFX aY éneler énellerai éneler
SFX aY éneler énelleras éneler
SFX aY éneler énellera éneler
SFX aY éneler énellerons éneler
SFX aY éneler énellerez éneler
SFX aY éneler énelleront éneler
SFX aY éneler énellerais éneler
SFX aY éneler énellerait éneler
SFX aY éneler énellerions éneler
SFX aY éneler énelleriez éneler
SFX aY éneler énelleraient éneler
SFX aY neler nelasse neler
SFX aY neler nelasses neler
SFX aY neler nelât neler
SFX aY neler nelassions neler
SFX aY neler nelassiez neler
SFX aY neler nelassent neler
SFX aY éneler énelle éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aZ N 41
SFX aZ teler telant teler
SFX aZ teler telé teler
SFX aZ teler telés teler
SFX aZ teler telée teler
SFX aZ teler telées teler
SFX aZ ételer ételle ételer
SFX aZ ételer ételles ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX aZ ételer étellent ételer
SFX aZ teler telais teler
SFX aZ teler telait teler
SFX aZ teler telions teler
SFX aZ teler teliez teler
SFX aZ teler telaient teler
SFX aZ teler telai teler
SFX aZ teler telas teler
SFX aZ teler tela teler
SFX aZ teler telâmes teler
SFX aZ teler telâtes teler
SFX aZ teler telèrent teler
SFX aZ ételer étellerai ételer
SFX aZ ételer ételleras ételer
SFX aZ ételer étellera ételer
SFX aZ ételer étellerons ételer
SFX aZ ételer étellerez ételer
SFX aZ ételer ételleront ételer
SFX aZ ételer étellerais ételer
SFX aZ ételer étellerait ételer
SFX aZ ételer étellerions ételer
SFX aZ ételer ételleriez ételer
SFX aZ ételer ételleraient ételer
SFX aZ teler telasse teler
SFX aZ teler telasses teler
SFX aZ teler telât teler
SFX aZ teler telassions teler
SFX aZ teler telassiez teler
SFX aZ teler telassent teler
SFX aZ ételer ételle ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX dA Y 42
SFX dA peler peler/n'q'd'l'm't's' peler
SFX dA peler pelant/n'q'l'm't's' peler
SFX dA peler pelé/q' peler
SFX dA peler pelés/q' peler
SFX dA peler pelée/q' peler
SFX dA peler pelées/q' peler
SFX dA peler pelle/n'q'j'l'm't's' peler
SFX dA peler pelles/n'q'l'm' peler
SFX dA peler pelons/n'q'l't' peler
SFX dA peler pelez/n'q'l'm' peler
SFX dA peler pellent/n'q'l'm't's' peler
SFX dA peler pelais/n'q'j'l't' peler
SFX dA peler pelait/n'q'l'm't's' peler
SFX dA peler pelions/n'q'l't' peler
SFX dA peler peliez/n'q'l'm' peler
SFX dA peler pelaient/n'q'l'm't's' peler
SFX dA peler pelai/n'q'j'l't' peler
SFX dA peler pelas/n'q'l'm' peler
SFX dA peler pela/n'q'l'm't's' peler
SFX dA peler pelâmes/n'q'l't' peler
SFX dA peler pelâtes/n'q'l'm' peler
SFX dA peler pelèrent/n'q'l'm't's' peler
SFX dA peler pellerai/n'q'j'l't' peler
SFX dA peler pelleras/n'q'l'm' peler
SFX dA peler pellera/n'q'l'm't's' peler
SFX dA peler pellerons/n'q'l't' peler
SFX dA peler pellerez/n'q'l'm' peler
SFX dA peler pelleront/n'q'l'm't's' peler
SFX dA peler pellerais/n'q'j'l't' peler
SFX dA peler pellerait/n'q'l'm't's' peler
SFX dA peler pellerions/n'q'l't' peler
SFX dA peler pelleriez/n'q'l'm' peler
SFX dA peler pelleraient/n'q'l'm't's' peler
SFX dA peler pelasse/n'q'j'l't' peler
SFX dA peler pelasses/n'q'l'm' peler
SFX dA peler pelât/n'q'l'm't's' peler
SFX dA peler pelassions/n'q'l't' peler
SFX dA peler pelassiez/n'q'l'm' peler
SFX dA peler pelassent/n'q'l'm't's' peler
SFX dA peler pelle/n'l'm' peler
SFX dA peler pelons/n'l' peler
SFX dA peler pelez/n'l'm' peler
SFX f0 Y 32
SFX f0 ir issant ir
SFX f0 ir is ir
SFX f0 ir it ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f0 ir issent ir
SFX f0 ir issais ir
SFX f0 ir issait ir
SFX f0 ir issions ir
SFX f0 ir issiez ir
SFX f0 ir issaient ir
SFX f0 ir îmes ir
SFX f0 ir îtes ir
SFX f0 ir irent ir
SFX f0 ir irai ir
SFX f0 ir iras ir
SFX f0 ir ira ir
SFX f0 ir irons ir
SFX f0 ir irez ir
SFX f0 ir iront ir
SFX f0 ir irais ir
SFX f0 ir irait ir
SFX f0 ir irions ir
SFX f0 ir iriez ir
SFX f0 ir iraient ir
SFX f0 ir isse ir
SFX f0 ir isses ir
SFX f0 ir isse ir
SFX f0 ir ît ir
SFX f0 ir is ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f1 Y 33
SFX f1 ir ir/n'q'd' ir
SFX f1 ir issant/n'q' ir
SFX f1 ir is/n'j' ir
SFX f1 ir it/n'q' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f1 ir issent/n'q' ir
SFX f1 ir issais/n'j' ir
SFX f1 ir issait/n'q' ir
SFX f1 ir issions/n' ir
SFX f1 ir issiez/n' ir
SFX f1 ir issaient/n'q' ir
SFX f1 ir îmes/n' ir
SFX f1 ir îtes/n' ir
SFX f1 ir irent/n'q' ir
SFX f1 ir irai/n'j' ir
SFX f1 ir iras/n' ir
SFX f1 ir ira/n'q' ir
SFX f1 ir irons/n' ir
SFX f1 ir irez/n' ir
SFX f1 ir iront/n'q' ir
SFX f1 ir irais/n'j' ir
SFX f1 ir irait/n'q' ir
SFX f1 ir irions/n' ir
SFX f1 ir iriez/n' ir
SFX f1 ir iraient/n'q' ir
SFX f1 ir isse/n'j' ir
SFX f1 ir isses/n' ir
SFX f1 ir isse/n'q' ir
SFX f1 ir ît/n'q' ir
SFX f1 ir is/n' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f2 Y 33
SFX f2 ir ir/n'q'd'l'm't's' ir
SFX f2 ir issant/n'q'l'm't's' ir
SFX f2 ir is/n'q'j'l't' ir
SFX f2 ir it/n'q'l'm't's' ir
SFX f2 ir issons/n'q'l't' ir
SFX f2 ir issez/n'q'l'm' ir
SFX f2 ir issent/n'q'l'm't's' ir
SFX f2 ir issais/n'q'j'l't' ir
SFX f2 ir issait/n'q'l'm't's' ir
SFX f2 ir issions/n'q'l't' ir
SFX f2 ir issiez/n'q'l'm' ir
SFX f2 ir issaient/n'q'l'm't's' ir
SFX f2 ir îmes/n'q'l't' ir
SFX f2 ir îtes/n'q'l'm' ir
SFX f2 ir irent/n'q'l'm't's' ir
SFX f2 ir irai/n'q'j'l't' ir
SFX f2 ir iras/n'q'l'm't' ir
SFX f2 ir ira/n'q'l'm't's' ir
SFX f2 ir irons/n'q'l't' ir
SFX f2 ir irez/n'q'l'm' ir
SFX f2 ir iront/n'q'l'm't's' ir
SFX f2 ir irais/n'q'j'l'm't' ir
SFX f2 ir irait/n'q'l'm't's' ir
SFX f2 ir irions/n'q'l't' ir
SFX f2 ir iriez/n'q'l'm' ir
SFX f2 ir iraient/n'q'l'm't's' ir
SFX f2 ir isse/n'q'j'l't' ir
SFX f2 ir isses/n'q'l'm' ir
SFX f2 ir isse/n'q'l'm't's' ir
SFX f2 ir ît/n'q'l'm't's' ir
SFX f2 ir is/n'l'm' ir
SFX f2 ir issons/n'l' ir
SFX f2 ir issez/n'l'm' ir
SFX f3 Y 33
SFX f3 ir ir/m't's' ir
SFX f3 ir issant/m't's' ir
SFX f3 ir is/m't' ir
SFX f3 ir it/s' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f3 ir issent/s' ir
SFX f3 ir issais/m't' ir
SFX f3 ir issait/s' ir
SFX f3 ir issions ir
SFX f3 ir issiez ir
SFX f3 ir issaient/s' ir
SFX f3 ir îmes ir
SFX f3 ir îtes ir
SFX f3 ir irent/s' ir
SFX f3 ir irai/m' ir
SFX f3 ir iras/t' ir
SFX f3 ir ira/s' ir
SFX f3 ir irons ir
SFX f3 ir irez ir
SFX f3 ir iront/s' ir
SFX f3 ir irais/m't' ir
SFX f3 ir irait/s' ir
SFX f3 ir irions ir
SFX f3 ir iriez ir
SFX f3 ir iraient/s' ir
SFX f3 ir isse/m' ir
SFX f3 ir isses/t' ir
SFX f3 ir isse/s' ir
SFX f3 ir ît/s' ir
SFX f3 ir is/t' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f4 Y 33
SFX f4 ir ir/n'q'd'l'm't's' ir
SFX f4 ir issant/n'q'l'm't's' ir
SFX f4 ir is/n'q'j'l'm't' ir
SFX f4 ir it/n'q'l'm't's' ir
SFX f4 ir issons/n'q'l't' ir
SFX f4 ir issez/n'q'l'm' ir
SFX f4 ir issent/n'q'l'm't's' ir
SFX f4 ir issais/n'q'j'l'm't' ir
SFX f4 ir issait/n'q'l'm't's' ir
SFX f4 ir issions/n'q'l't' ir
SFX f4 ir issiez/n'q'l'm' ir
SFX f4 ir issaient/n'q'l'm't's' ir
SFX f4 ir îmes/n'q'l't' ir
SFX f4 ir îtes/n'q'l'm' ir
SFX f4 ir irent/n'q'l'm't's' ir
SFX f4 ir irai/n'q'j'l'm't' ir
SFX f4 ir iras/n'q'l'm't' ir
SFX f4 ir ira/n'q'l'm't's' ir
SFX f4 ir irons/n'q'l't' ir
SFX f4 ir irez/n'q'l'm' ir
SFX f4 ir iront/n'q'l'm't's' ir
SFX f4 ir irais/n'q'j'l'm't' ir
SFX f4 ir irait/n'q'l'm't's' ir
SFX f4 ir irions/n'q'l't' ir
SFX f4 ir iriez/n'q'l'm' ir
SFX f4 ir iraient/n'q'l'm't's' ir
SFX f4 ir isse/n'q'j'l'm't' ir
SFX f4 ir isses/n'q'l'm't' ir
SFX f4 ir isse/n'q'l'm't's' ir
SFX f4 ir ît/n'q'l'm't's' ir
SFX f4 ir is/n'l'm't' ir
SFX f4 ir issons/n'l' ir
SFX f4 ir issez/n'l'm' ir
SFX f5 Y 33
SFX f5 ir ir/n'q'd'm't's' ir
SFX f5 ir issant/n'q'm't's' ir
SFX f5 ir is/n'j'm't' ir
SFX f5 ir it/n'q'm't's' ir
SFX f5 ir issons/n't' ir
SFX f5 ir issez/n'm' ir
SFX f5 ir issent/n'q'm't's' ir
SFX f5 ir issais/n'j'm't' ir
SFX f5 ir issait/n'q'm't's' ir
SFX f5 ir issions/n't' ir
SFX f5 ir issiez/n'm' ir
SFX f5 ir issaient/n'q'm't's' ir
SFX f5 ir îmes/n't' ir
SFX f5 ir îtes/n'm' ir
SFX f5 ir irent/n'q'm't's' ir
SFX f5 ir irai/n'j'm't' ir
SFX f5 ir iras/n'm't' ir
SFX f5 ir ira/n'q'm't's' ir
SFX f5 ir irons/n't' ir
SFX f5 ir irez/n'm' ir
SFX f5 ir iront/n'q'm't's' ir
SFX f5 ir irais/n'j'm't' ir
SFX f5 ir irait/n'q'm't's' ir
SFX f5 ir irions/n't' ir
SFX f5 ir iriez/n'm' ir
SFX f5 ir iraient/n'q'm't's' ir
SFX f5 ir isse/n'j'm't' ir
SFX f5 ir isses/n'm't' ir
SFX f5 ir isse/n'q'm't's' ir
SFX f5 ir ît/n'q'm't's' ir
SFX f5 ir is/n'm' ir
SFX f5 ir issons/n' ir
SFX f5 ir issez/n'm' ir
SFX fA N 37
SFX fA aïr aïssant aïr
SFX fA aïr aï aïr
SFX fA aïr aïs aïr
SFX fA aïr aïe aïr
SFX fA aïr aïes aïr
SFX fA aïr ais aïr
SFX fA aïr ait aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fA aïr aïssent aïr
SFX fA aïr aïssais aïr
SFX fA aïr aïssait aïr
SFX fA aïr aïssions aïr
SFX fA aïr aïssiez aïr
SFX fA aïr aïssaient aïr
SFX fA aïr aïs aïr
SFX fA aïr aït aïr
SFX fA aïr aïmes aïr
SFX fA aïr aïtes aïr
SFX fA aïr aïrent aïr
SFX fA aïr aïrai aïr
SFX fA aïr aïras aïr
SFX fA aïr aïra aïr
SFX fA aïr aïrons aïr
SFX fA aïr aïrez aïr
SFX fA aïr aïront aïr
SFX fA aïr aïrais aïr
SFX fA aïr aïrait aïr
SFX fA aïr aïrions aïr
SFX fA aïr aïriez aïr
SFX fA aïr aïraient aïr
SFX fA aïr aïsse aïr
SFX fA aïr aïsses aïr
SFX fA aïr aïsse aïr
SFX fA aïr ais aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fB Y 29
SFX fB haïr haïr/s' aïr
SFX fB haïr haïssant/s' aïr
SFX fB haïr haï aïr
SFX fB haïr haïs aïr
SFX fB haïr haïe aïr
SFX fB haïr haïes aïr
SFX fB haïr hait/s' aïr
SFX fB haïr haïssons aïr
SFX fB haïr haïssez aïr
SFX fB haïr haïssent/s' aïr
SFX fB haïr haïssait/s' aïr
SFX fB haïr haïssions aïr
SFX fB haïr haïssiez aïr
SFX fB haïr haïssaient/s' aïr
SFX fB haïr haït/s' aïr
SFX fB haïr haïmes aïr
SFX fB haïr haïtes aïr
SFX fB haïr haïrent/s' aïr
SFX fB haïr haïra/s' aïr
SFX fB haïr haïrons aïr
SFX fB haïr haïrez aïr
SFX fB haïr haïront/s' aïr
SFX fB haïr haïrait/s' aïr
SFX fB haïr haïrions aïr
SFX fB haïr haïriez aïr
SFX fB haïr haïraient/s' aïr
SFX fB haïr haïsse/s' aïr
SFX fB haïr haïssons-nous aïr
SFX fB haïr haïssez-vous aïr
SFX fC Y 11
SFX fC partir partir/n'q'd'l'm't's' impartir
SFX fC partir partissant/n'q'l'm't's' impartir
SFX fC partir parti/q' impartir
SFX fC partir partis/q' impartir
SFX fC partir partie/q' impartir
SFX fC partir parties/q' impartir
SFX fC partir partis/n'q'j'l'm't' impartir
SFX fC partir partit/n'q'l'm't's' impartir
SFX fC partir partissons/n'q'l't' impartir
SFX fC partir partissez/n'q'l'm' impartir
SFX fC partir partissent/n'q'l'm't's' impartir
SFX fD N 11
SFX fD ortir ortissant sortir
SFX fD ortir ortit sortir
SFX fD ortir ortissent sortir
SFX fD ortir ortissait sortir
SFX fD ortir ortissaient sortir
SFX fD ortir ortira sortir
SFX fD ortir ortiront sortir
SFX fD ortir ortirait sortir
SFX fD ortir ortiraient sortir
SFX fD ortir ortisse sortir
SFX fD ortir ortît sortir
SFX fY N 37
SFX fY uïr uïr/s' uïr
SFX fY uïr uïssant/m't's' uïr
SFX fY uïr uï uïr
SFX fY uïr uïs uïr
SFX fY uïr uïe uïr
SFX fY uïr uïes uïr
SFX fY uïr uïs/m't' uïr
SFX fY uïr uït/s' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fY uïr uïssent/s' uïr
SFX fY uïr uïssais/m't' uïr
SFX fY uïr uïssait/s' uïr
SFX fY uïr uïssions uïr
SFX fY uïr uïssiez uïr
SFX fY uïr uïssaient/s' uïr
SFX fY uïr uîmes uïr
SFX fY uïr uîtes uïr
SFX fY uïr uïrent/s' uïr
SFX fY uïr uïrai/m' uïr
SFX fY uïr uïras/t' uïr
SFX fY uïr uïra/s' uïr
SFX fY uïr uïrons uïr
SFX fY uïr uïrez uïr
SFX fY uïr uïront/s' uïr
SFX fY uïr uïrais/m't' uïr
SFX fY uïr uïrait/s' uïr
SFX fY uïr uïrions uïr
SFX fY uïr uïriez uïr
SFX fY uïr uïraient/s' uïr
SFX fY uïr uïsse/m' uïr
SFX fY uïr uïsses/t' uïr
SFX fY uïr uïsse/s' uïr
SFX fY uïr uît/s' uïr
SFX fY uïr uïs/t' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fZ N 7
SFX fZ gir gissant agir
SFX fZ gir git agir
SFX fZ gir gissait agir
SFX fZ gir gira agir
SFX fZ gir girait agir
SFX fZ gir gisse agir
SFX fZ gir gît agir
SFX p+ Y 8
SFX p+ er é/L'D'Q' er
SFX p+ er és/D'Q' er
SFX p+ er ée/L'D'Q' er
SFX p+ er ées/D'Q' er
SFX p+ ir i/L'D'Q' ir
SFX p+ ir is/D'Q' ir
SFX p+ ir ie/L'D'Q' ir
SFX p+ ir ies/D'Q' ir
SFX p. Y 2
SFX p. er é/q' er
SFX p. ir i/q' ir
SFX i0 Y 39
SFX i0 enir enir/n'q'd' enir
SFX i0 enir enant/n'q' enir
SFX i0 enir iens/n'j' enir
SFX i0 enir ient/n'q' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i0 enir iennent/n'q' enir
SFX i0 enir enais/n'j' enir
SFX i0 enir enait/n'q' enir
SFX i0 enir enions/n' enir
SFX i0 enir eniez/n' enir
SFX i0 enir enaient/n'q' enir
SFX i0 enir ins/n'j' enir
SFX i0 enir int/n'q' enir
SFX i0 enir înmes/n' enir
SFX i0 enir întes/n' enir
SFX i0 enir inrent/n'q' enir
SFX i0 enir iendrai/n'j' enir
SFX i0 enir iendras/n' enir
SFX i0 enir iendra/n'q' enir
SFX i0 enir iendrons/n' enir
SFX i0 enir iendrez/n' enir
SFX i0 enir iendront/n'q' enir
SFX i0 enir iendrais/n'j' enir
SFX i0 enir iendrait/n'q' enir
SFX i0 enir iendrions/n' enir
SFX i0 enir iendriez/n' enir
SFX i0 enir iendraient/n'q' enir
SFX i0 enir ienne/n'q'j' enir
SFX i0 enir iennes/n' enir
SFX i0 enir insse/n'j' enir
SFX i0 enir insses/n' enir
SFX i0 enir înt/n'q' enir
SFX i0 enir inssions/n' enir
SFX i0 enir inssiez/n' enir
SFX i0 enir inssent/n'q' enir
SFX i0 enir iens/n' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i1 Y 39
SFX i1 enir enir/n'q'd'l'm't's' enir
SFX i1 enir enant/n'q'l'm't's' enir
SFX i1 enir iens/n'q'j'l'm't' enir
SFX i1 enir ient/n'q'l'm't's' enir
SFX i1 enir enons/n'q'l't' enir
SFX i1 enir enez/n'q'l'm' enir
SFX i1 enir iennent/n'q'l'm't's' enir
SFX i1 enir enais/n'q'j'l'm't' enir
SFX i1 enir enait/n'q'l'm't's' enir
SFX i1 enir enions/n'q'l't' enir
SFX i1 enir eniez/n'q'l'm' enir
SFX i1 enir enaient/n'q'l'm't's' enir
SFX i1 enir ins/n'q'j'l'm't' enir
SFX i1 enir int/n'q'l'm't's' enir
SFX i1 enir înmes/n'q'l't' enir
SFX i1 enir întes/n'q'l'm' enir
SFX i1 enir inrent/n'q'l'm't's' enir
SFX i1 enir iendrai/n'q'j'l'm't' enir
SFX i1 enir iendras/n'q'l'm't' enir
SFX i1 enir iendra/n'q'l'm't's' enir
SFX i1 enir iendrons/n'q'l't' enir
SFX i1 enir iendrez/n'q'l'm' enir
SFX i1 enir iendront/n'q'l'm't's' enir
SFX i1 enir iendrais/n'q'j'l'm't' enir
SFX i1 enir iendrait/n'q'l'm't's' enir
SFX i1 enir iendrions/n'q'l't' enir
SFX i1 enir iendriez/n'q'l'm' enir
SFX i1 enir iendraient/n'q'l'm't's' enir
SFX i1 enir ienne/n'q'j'l'm't's' enir
SFX i1 enir iennes/n'l'm't' enir
SFX i1 enir insse/n'q'j'l'm't' enir
SFX i1 enir insses/n'q'l'm't' enir
SFX i1 enir înt/n'q'l'm't's' enir
SFX i1 enir inssions/n'q'l't' enir
SFX i1 enir inssiez/n'q'l'm' enir
SFX i1 enir inssent/n'q'l'm't's' enir
SFX i1 enir iens/n'l'm't' enir
SFX i1 enir enons/n'l' enir
SFX i1 enir enez/n'l'm' enir
SFX i2 Y 39
SFX i2 enir enir/m't's' enir
SFX i2 enir enant/m't's' enir
SFX i2 enir iens/m't' enir
SFX i2 enir ient/s' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i2 enir iennent/s' enir
SFX i2 enir enais/m't' enir
SFX i2 enir enait/s' enir
SFX i2 enir enions enir
SFX i2 enir eniez enir
SFX i2 enir enaient/s' enir
SFX i2 enir ins/m't' enir
SFX i2 enir int/s' enir
SFX i2 enir înmes enir
SFX i2 enir întes enir
SFX i2 enir inrent/s' enir
SFX i2 enir iendrai/m' enir
SFX i2 enir iendras/t' enir
SFX i2 enir iendra/s' enir
SFX i2 enir iendrons enir
SFX i2 enir iendrez enir
SFX i2 enir iendront/s' enir
SFX i2 enir iendrais/m't' enir
SFX i2 enir iendrait/s' enir
SFX i2 enir iendrions enir
SFX i2 enir iendriez enir
SFX i2 enir iendraient/s' enir
SFX i2 enir ienne/m's' enir
SFX i2 enir iennes/t' enir
SFX i2 enir insse/m' enir
SFX i2 enir insses/t' enir
SFX i2 enir înt/s' enir
SFX i2 enir inssions enir
SFX i2 enir inssiez enir
SFX i2 enir inssent/s' enir
SFX i2 enir iens/t' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i5 N 38
SFX i5 tir tant tir
SFX i5 tir s tir
SFX i5 tir t tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX i5 tir tent tir
SFX i5 tir tais tir
SFX i5 tir tait tir
SFX i5 tir tions tir
SFX i5 tir tiez tir
SFX i5 tir taient tir
SFX i5 tir tis tir
SFX i5 tir tit tir
SFX i5 tir tîmes tir
SFX i5 tir tîtes tir
SFX i5 tir tirent tir
SFX i5 tir tirai tir
SFX i5 tir tiras tir
SFX i5 tir tira tir
SFX i5 tir tirons tir
SFX i5 tir tirez tir
SFX i5 tir tiront tir
SFX i5 tir tirais tir
SFX i5 tir tirait tir
SFX i5 tir tirions tir
SFX i5 tir tiriez tir
SFX i5 tir tiraient tir
SFX i5 tir te tir
SFX i5 tir tes tir
SFX i5 tir tisse tir
SFX i5 tir tisses tir
SFX i5 tir tît tir
SFX i5 tir tissions tir
SFX i5 tir tissiez tir
SFX i5 tir tissent tir
SFX i5 tir s tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX iA Y 19
SFX iA dvenir dvenir/n'q'd'm't' venir
SFX iA dvenir dvenant/n'q'm't' venir
SFX iA dvenir dvenu/Q' venir
SFX iA dvenir dvenus/Q' venir
SFX iA dvenir dvenue/Q' venir
SFX iA dvenir dvenues/Q' venir
SFX iA dvenir dvient/n'q'm't' venir
SFX iA dvenir dviennent/n'q' venir
SFX iA dvenir dvenait/n'q'm't' venir
SFX iA dvenir dvenaient/n'q' venir
SFX iA dvenir dvint/n'q'm't' venir
SFX iA dvenir dvinrent/n'q' venir
SFX iA dvenir dviendra/n'q'm't' venir
SFX iA dvenir dviendront/n'q' venir
SFX iA dvenir dviendrait/n'q'm't' venir
SFX iA dvenir dviendraient/n'q' venir
SFX iA dvenir dvienne/n'q'm't' venir
SFX iA dvenir dvînt/n'q'm't' venir
SFX iA dvenir dvinssent/n'q' venir
SFX iB Y 40
SFX iB partenir partenir/n'q'd'm't's' tenir
SFX iB partenir partenant/n'q'm't's' tenir
SFX iB partenir partenu/q' tenir
SFX iB partenir partiens/n'j'm't' tenir
SFX iB partenir partient/n'q'm't's' tenir
SFX iB partenir partenons/n't' tenir
SFX iB partenir partenez/n'm' tenir
SFX iB partenir partiennent/n'q'm't's' tenir
SFX iB partenir partenais/n'j'm't' tenir
SFX iB partenir partenait/n'q'm't's' tenir
SFX iB partenir partenions/n't' tenir
SFX iB partenir parteniez/n'm' tenir
SFX iB partenir partenaient/n'q'm't's' tenir
SFX iB partenir partins/n'j'm't' tenir
SFX iB partenir partint/n'q'm't's' tenir
SFX iB partenir partînmes/n't' tenir
SFX iB partenir partîntes/n'm' tenir
SFX iB partenir partinrent/n'q'm't's' tenir
SFX iB partenir partiendrai/n'j'm't' tenir
SFX iB partenir partiendras/n'm't' tenir
SFX iB partenir partiendra/n'q'm't's' tenir
SFX iB partenir partiendrons/n't' tenir
SFX iB partenir partiendrez/n'm' tenir
SFX iB partenir partiendront/n'q'm't's' tenir
SFX iB partenir partiendrais/n'j'm't' tenir
SFX iB partenir partiendrait/n'q'm't's' tenir
SFX iB partenir partiendrions/n't' tenir
SFX iB partenir partiendriez/n'm' tenir
SFX iB partenir partiendraient/n'q'm't's' tenir
SFX iB partenir partienne/n'q'j'm't's' tenir
SFX iB partenir partiennes/n'm't' tenir
SFX iB partenir partinsse/n'j'm't' tenir
SFX iB partenir partinsses/n'm't' tenir
SFX iB partenir partînt/n'q'm't's' tenir
SFX iB partenir partinssions/n't' tenir
SFX iB partenir partinssiez/n'm' tenir
SFX iB partenir partinssent/n'q'm't's' tenir
SFX iB partenir partiens/n'm't' tenir
SFX iB partenir partenons/n' tenir
SFX iB partenir partenez/n'm' tenir
SFX iC Y 41
SFX iC rir rir/n'q'd'l'm't's' [vf]rir
SFX iC rir rant/n'q'l'm't's' [vf]rir
SFX iC rir ert/L'D'Q' [vf]rir
SFX iC rir erts/D'Q' [vf]rir
SFX iC rir erte/L'D'Q' [vf]rir
SFX iC rir ertes/D'Q' [vf]rir
SFX iC rir re/n'q'j'l'm't's' [vf]rir
SFX iC rir res/n'q'l'm't' [vf]rir
SFX iC rir rons/n'q'l't' [vf]rir
SFX iC rir rez/n'q'l'm' [vf]rir
SFX iC rir rent/n'q'l'm't's' [vf]rir
SFX iC rir rais/n'q'j'l'm't' [vf]rir
SFX iC rir rait/n'q'l'm't's' [vf]rir
SFX iC rir rions/n'q'l't' [vf]rir
SFX iC rir riez/n'q'l'm' [vf]rir
SFX iC rir raient/n'q'l'm't's' [vf]rir
SFX iC rir ris/n'q'j'l'm't' [vf]rir
SFX iC rir rit/n'q'l'm't's' [vf]rir
SFX iC rir rîmes/n'q'l't' [vf]rir
SFX iC rir rîtes/n'q'l'm' [vf]rir
SFX iC rir rirent/n'q'l'm't's' [vf]rir
SFX iC rir rirai/n'q'j'l'm't' [vf]rir
SFX iC rir riras/n'q'l'm't' [vf]rir
SFX iC rir rira/n'q'l'm't's' [vf]rir
SFX iC rir rirons/n'q'l't' [vf]rir
SFX iC rir rirez/n'q'l'm' [vf]rir
SFX iC rir riront/n'q'l'm't's' [vf]rir
SFX iC rir rirais/n'q'j'l'm't' [vf]rir
SFX iC rir rirait/n'q'l'm't's' [vf]rir
SFX iC rir ririons/n'q'l't' [vf]rir
SFX iC rir ririez/n'q'l'm' [vf]rir
SFX iC rir riraient/n'q'l'm't's' [vf]rir
SFX iC rir risse/n'q'j'l'm't' [vf]rir
SFX iC rir risses/n'q'l'm't' [vf]rir
SFX iC rir rît/n'q'l'm't's' [vf]rir
SFX iC rir rissions/n'q'l't' [vf]rir
SFX iC rir rissiez/n'q'l'm' [vf]rir
SFX iC rir rissent/n'q'l'm't's' [vf]rir
SFX iC rir re/n'l'm't' [vf]rir
SFX iC rir rons/n'l' [vf]rir
SFX iC rir rez/n'l'm' [vf]rir
SFX iD Y 43
SFX iD courir courir/n'q'd' courir
SFX iD courir courant/n'q' courir
SFX iD courir couru courir
SFX iD courir courus courir
SFX iD courir courue courir
SFX iD courir courues courir
SFX iD courir cours/n'j' courir
SFX iD courir court/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iD courir courent/n' courir
SFX iD courir courais/n'j' courir
SFX iD courir courait/n' courir
SFX iD courir courions/n' courir
SFX iD courir couriez/n' courir
SFX iD courir couraient/n' courir
SFX iD courir courus/n'j' courir
SFX iD courir courut/n' courir
SFX iD courir courûmes/n' courir
SFX iD courir courûtes/n' courir
SFX iD courir coururent/n' courir
SFX iD courir courrai/n'j' courir
SFX iD courir courras/n' courir
SFX iD courir courra/n' courir
SFX iD courir courrons/n' courir
SFX iD courir courrez/n' courir
SFX iD courir courront/n' courir
SFX iD courir courrais/n'j' courir
SFX iD courir courrait/n' courir
SFX iD courir courrions/n' courir
SFX iD courir courriez/n' courir
SFX iD courir courraient/n' courir
SFX iD courir coure/n'j' courir
SFX iD courir coures/n' courir
SFX iD courir courusse/n'j' courir
SFX iD courir courusses/n' courir
SFX iD courir courût/n' courir
SFX iD courir courussions/n' courir
SFX iD courir courussiez/n' courir
SFX iD courir courussent/n' courir
SFX iD courir cours/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iE Y 43
SFX iE ourir ourir/n'q'd'l'm't's' courir
SFX iE ourir ourant/n'q'm't's' courir
SFX iE ourir ouru/L'D'Q' courir
SFX iE ourir ourus/D'Q' courir
SFX iE ourir ourue/L'D'Q' courir
SFX iE ourir ourues/D'Q' courir
SFX iE ourir ours/n'q'j'l'm't' courir
SFX iE ourir ourt/n'q'l's' courir
SFX iE ourir ourons/n'q'l' courir
SFX iE ourir ourez/n'q'l' courir
SFX iE ourir ourent/n'q'l's' courir
SFX iE ourir ourais/n'q'j'l'm't' courir
SFX iE ourir ourait/n'q'l's' courir
SFX iE ourir ourions/n'q'l' courir
SFX iE ourir ouriez/n'q'l' courir
SFX iE ourir ouraient/n'q'l's' courir
SFX iE ourir ourus/n'q'j'l'm't' courir
SFX iE ourir ourut/n'q'l's' courir
SFX iE ourir ourûmes/n'q'l' courir
SFX iE ourir ourûtes/n'q'l' courir
SFX iE ourir oururent/n'q'l's' courir
SFX iE ourir ourrai/n'q'j'l'm' courir
SFX iE ourir ourras/n'q'l't' courir
SFX iE ourir ourra/n'q'l's' courir
SFX iE ourir ourrons/n'q'l' courir
SFX iE ourir ourrez/n'q'l' courir
SFX iE ourir ourront/n'q'l's' courir
SFX iE ourir ourrais/n'q'j'l'm't' courir
SFX iE ourir ourrait/n'q'l's' courir
SFX iE ourir ourrions/n'q'l' courir
SFX iE ourir ourriez/n'q'l' courir
SFX iE ourir ourraient/n'q'l's' courir
SFX iE ourir oure/n'q'j'l'm's' courir
SFX iE ourir oures/n'l't' courir
SFX iE ourir ourusse/n'q'j'l'm' courir
SFX iE ourir ourusses/n'q'l't' courir
SFX iE ourir ourût/n'q'l's' courir
SFX iE ourir ourussions/n'q'l' courir
SFX iE ourir ourussiez/n'q'l' courir
SFX iE ourir ourussent/n'q'l's' courir
SFX iE ourir ours/n'l' courir
SFX iE ourir ourons/n'l' courir
SFX iE ourir ourez/n'l' courir
SFX iF N 42
SFX iF ervir ervant servir
SFX iF ervir ervi servir
SFX iF ervir ervis servir
SFX iF ervir ervie servir
SFX iF ervir ervies servir
SFX iF ervir ers servir
SFX iF ervir ert servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iF ervir ervent servir
SFX iF ervir ervais servir
SFX iF ervir ervait servir
SFX iF ervir ervions servir
SFX iF ervir erviez servir
SFX iF ervir ervaient servir
SFX iF ervir ervis servir
SFX iF ervir ervit servir
SFX iF ervir ervîmes servir
SFX iF ervir ervîtes servir
SFX iF ervir ervirent servir
SFX iF ervir ervirai servir
SFX iF ervir erviras servir
SFX iF ervir ervira servir
SFX iF ervir ervirons servir
SFX iF ervir ervirez servir
SFX iF ervir erviront servir
SFX iF ervir ervirais servir
SFX iF ervir ervirait servir
SFX iF ervir ervirions servir
SFX iF ervir erviriez servir
SFX iF ervir erviraient servir
SFX iF ervir erve servir
SFX iF ervir erves servir
SFX iF ervir ervisse servir
SFX iF ervir ervisses servir
SFX iF ervir ervît servir
SFX iF ervir ervissions servir
SFX iF ervir ervissiez servir
SFX iF ervir ervissent servir
SFX iF ervir ers servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iG N 42
SFX iG êtir êtant vêtir
SFX iG êtir êtu vêtir
SFX iG êtir êtus vêtir
SFX iG êtir êtue vêtir
SFX iG êtir êtues vêtir
SFX iG êtir êts vêtir
SFX iG êtir êt vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iG êtir êtent vêtir
SFX iG êtir êtais vêtir
SFX iG êtir êtait vêtir
SFX iG êtir êtions vêtir
SFX iG êtir êtiez vêtir
SFX iG êtir êtaient vêtir
SFX iG êtir êtis vêtir
SFX iG êtir êtit vêtir
SFX iG êtir êtîmes vêtir
SFX iG êtir êtîtes vêtir
SFX iG êtir êtirent vêtir
SFX iG êtir êtirai vêtir
SFX iG êtir êtiras vêtir
SFX iG êtir êtira vêtir
SFX iG êtir êtirons vêtir
SFX iG êtir êtirez vêtir
SFX iG êtir êtiront vêtir
SFX iG êtir êtirais vêtir
SFX iG êtir êtirait vêtir
SFX iG êtir êtirions vêtir
SFX iG êtir êtiriez vêtir
SFX iG êtir êtiraient vêtir
SFX iG êtir ête vêtir
SFX iG êtir êtes vêtir
SFX iG êtir êtisse vêtir
SFX iG êtir êtisses vêtir
SFX iG êtir êtît vêtir
SFX iG êtir êtissions vêtir
SFX iG êtir êtissiez vêtir
SFX iG êtir êtissent vêtir
SFX iG êtir êts vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iI N 39
SFX iI ormir ormant dormir
SFX iI ormir ormi dormir
SFX iI ormir ors dormir
SFX iI ormir ort dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iI ormir orment dormir
SFX iI ormir ormais dormir
SFX iI ormir ormait dormir
SFX iI ormir ormions dormir
SFX iI ormir ormiez dormir
SFX iI ormir ormaient dormir
SFX iI ormir ormis dormir
SFX iI ormir ormit dormir
SFX iI ormir ormîmes dormir
SFX iI ormir ormîtes dormir
SFX iI ormir ormirent dormir
SFX iI ormir ormirai dormir
SFX iI ormir ormiras dormir
SFX iI ormir ormira dormir
SFX iI ormir ormirons dormir
SFX iI ormir ormirez dormir
SFX iI ormir ormiront dormir
SFX iI ormir ormirais dormir
SFX iI ormir ormirait dormir
SFX iI ormir ormirions dormir
SFX iI ormir ormiriez dormir
SFX iI ormir ormiraient dormir
SFX iI ormir orme dormir
SFX iI ormir ormes dormir
SFX iI ormir ormisse dormir
SFX iI ormir ormisses dormir
SFX iI ormir ormît dormir
SFX iI ormir ormissions dormir
SFX iI ormir ormissiez dormir
SFX iI ormir ormissent dormir
SFX iI ormir ors dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iJ Y 43
SFX iJ dormir dormir/n'q'd'l'm't's' dormir
SFX iJ dormir dormant/n'q'l'm't's' dormir
SFX iJ dormir dormi/L'D'Q' dormir
SFX iJ dormir dormis/D'Q' dormir
SFX iJ dormir dormie/L'D'Q' dormir
SFX iJ dormir dormies/D'Q' dormir
SFX iJ dormir dors/n'q'j'l'm't' dormir
SFX iJ dormir dort/n'q'l'm't's' dormir
SFX iJ dormir dormons/n'q'l't' dormir
SFX iJ dormir dormez/n'q'l'm' dormir
SFX iJ dormir dorment/n'q'l'm't's' dormir
SFX iJ dormir dormais/n'q'j'l'm't' dormir
SFX iJ dormir dormait/n'q'l'm't's' dormir
SFX iJ dormir dormions/n'q'l't' dormir
SFX iJ dormir dormiez/n'q'l'm' dormir
SFX iJ dormir dormaient/n'q'l'm't's' dormir
SFX iJ dormir dormis/n'q'j'l'm't' dormir
SFX iJ dormir dormit/n'q'l'm't's' dormir
SFX iJ dormir dormîmes/n'q'l't' dormir
SFX iJ dormir dormîtes/n'q'l'm' dormir
SFX iJ dormir dormirent/n'q'l'm't's' dormir
SFX iJ dormir dormirai/n'q'j'l'm't' dormir
SFX iJ dormir dormiras/n'q'l'm't' dormir
SFX iJ dormir dormira/n'q'l'm't's' dormir
SFX iJ dormir dormirons/n'q'l't' dormir
SFX iJ dormir dormirez/n'q'l'm' dormir
SFX iJ dormir dormiront/n'q'l'm't's' dormir
SFX iJ dormir dormirais/n'q'j'l'm't' dormir
SFX iJ dormir dormirait/n'q'l'm't's' dormir
SFX iJ dormir dormirions/n'q'l't' dormir
SFX iJ dormir dormiriez/n'q'l'm' dormir
SFX iJ dormir dormiraient/n'q'l'm't's' dormir
SFX iJ dormir dorme/n'q'j'l'm't's' dormir
SFX iJ dormir dormes/n'l'm't' dormir
SFX iJ dormir dormisse/n'q'j'l'm't' dormir
SFX iJ dormir dormisses/n'q'l'm't' dormir
SFX iJ dormir dormît/n'q'l'm't's' dormir
SFX iJ dormir dormissions/n'q'l't' dormir
SFX iJ dormir dormissiez/n'q'l'm' dormir
SFX iJ dormir dormissent/n'q'l'm't's' dormir
SFX iJ dormir dors/n'l'm't' dormir
SFX iJ dormir dormons/n'l' dormir
SFX iJ dormir dormez/n'l'm' dormir
SFX iK Y 42
SFX iK quérir quérir/n'q'd'l'm't's' quérir
SFX iK quérir quérant/n'q'l'm't's' quérir
SFX iK quérir quis/L'D'Q' quérir
SFX iK quérir quise/L'D'Q' quérir
SFX iK quérir quises/D'Q' quérir
SFX iK quérir quiers/n'q'j'l'm't' quérir
SFX iK quérir quiert/n'q'l'm't's' quérir
SFX iK quérir quérons/n'q'l't' quérir
SFX iK quérir quérez/n'q'l'm' quérir
SFX iK quérir quièrent/n'q'l'm't's' quérir
SFX iK quérir quérais/n'q'j'l'm't' quérir
SFX iK quérir quérait/n'q'l'm't's' quérir
SFX iK quérir quérions/n'q'l't' quérir
SFX iK quérir quériez/n'q'l'm' quérir
SFX iK quérir quéraient/n'q'l'm't's' quérir
SFX iK quérir quis/n'q'j'l'm't' quérir
SFX iK quérir quit/n'q'l'm't's' quérir
SFX iK quérir quîmes/n'q'l't' quérir
SFX iK quérir quîtes/n'q'l'm' quérir
SFX iK quérir quirent/n'q'l'm't's' quérir
SFX iK quérir querrai/n'q'j'l'm't' quérir
SFX iK quérir querras/n'q'l'm't' quérir
SFX iK quérir querra/n'q'l'm't's' quérir
SFX iK quérir querrons/n'q'l't' quérir
SFX iK quérir querrez/n'q'l'm' quérir
SFX iK quérir querront/n'q'l'm't's' quérir
SFX iK quérir querrais/n'q'j'l'm't' quérir
SFX iK quérir querrait/n'q'l'm't's' quérir
SFX iK quérir querrions/n'q'l't' quérir
SFX iK quérir querriez/n'q'l'm' quérir
SFX iK quérir querraient/n'q'l'm't's' quérir
SFX iK quérir quière/n'q'j'l'm't's' quérir
SFX iK quérir quières/n'l'm't' quérir
SFX iK quérir quisse/n'q'j'l'm't' quérir
SFX iK quérir quisses/n'q'l'm't' quérir
SFX iK quérir quît/n'q'l'm't's' quérir
SFX iK quérir quissions/n'q'l't' quérir
SFX iK quérir quissiez/n'q'l'm' quérir
SFX iK quérir quissent/n'q'l'm't's' quérir
SFX iK quérir quiers/n'l'm't' quérir
SFX iK quérir quérons/n'l' quérir
SFX iK quérir quérez/n'l'm' quérir
SFX iM Y 42
SFX iM quérir quérir/m't's' quérir
SFX iM quérir quérant/m't's' quérir
SFX iM quérir quis/L'D'Q' quérir
SFX iM quérir quise/L'D'Q' quérir
SFX iM quérir quises/D'Q' quérir
SFX iM quérir quiers/m't' quérir
SFX iM quérir quiert/s' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iM quérir quièrent/s' quérir
SFX iM quérir quérais/m't' quérir
SFX iM quérir quérait/s' quérir
SFX iM quérir quérions quérir
SFX iM quérir quériez quérir
SFX iM quérir quéraient/s' quérir
SFX iM quérir quis/m't' quérir
SFX iM quérir quit/s' quérir
SFX iM quérir quîmes quérir
SFX iM quérir quîtes quérir
SFX iM quérir quirent/s' quérir
SFX iM quérir querrai/m' quérir
SFX iM quérir querras/t' quérir
SFX iM quérir querra/s' quérir
SFX iM quérir querrons quérir
SFX iM quérir querrez quérir
SFX iM quérir querront/s' quérir
SFX iM quérir querrais/m't' quérir
SFX iM quérir querrait/s' quérir
SFX iM quérir querrions quérir
SFX iM quérir querriez quérir
SFX iM quérir querraient/s' quérir
SFX iM quérir quière/m's' quérir
SFX iM quérir quières/t' quérir
SFX iM quérir quisse/m' quérir
SFX iM quérir quisses/t' quérir
SFX iM quérir quît/s' quérir
SFX iM quérir quissions quérir
SFX iM quérir quissiez quérir
SFX iM quérir quissent/s' quérir
SFX iM quérir quiers/t' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iN N 40
SFX iN uir uyant fuir
SFX iN uir ui fuir
SFX iN uir uis fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uis fuir
SFX iN uir uit fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iN uir uient fuir
SFX iN uir uyais fuir
SFX iN uir uyait fuir
SFX iN uir uyions fuir
SFX iN uir uyiez fuir
SFX iN uir uyaient fuir
SFX iN uir uîmes fuir
SFX iN uir uîtes fuir
SFX iN uir uirent fuir
SFX iN uir uirai fuir
SFX iN uir uiras fuir
SFX iN uir uira fuir
SFX iN uir uirons fuir
SFX iN uir uirez fuir
SFX iN uir uiront fuir
SFX iN uir uirais fuir
SFX iN uir uirait fuir
SFX iN uir uirions fuir
SFX iN uir uiriez fuir
SFX iN uir uiraient fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uisse fuir
SFX iN uir uisses fuir
SFX iN uir uît fuir
SFX iN uir uissions fuir
SFX iN uir uissiez fuir
SFX iN uir uissent fuir
SFX iN uir uis fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iO Y 41
SFX iO fuir fuir/m't's' enfuir
SFX iO fuir fuyant/m't's' enfuir
SFX iO fuir fui/L'D'Q' enfuir
SFX iO fuir fuis/D'Q' enfuir
SFX iO fuir fuie/L'D'Q' enfuir
SFX iO fuir fuies/D'Q' enfuir
SFX iO fuir fuis/m't' enfuir
SFX iO fuir fuit/s' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iO fuir fuient/s' enfuir
SFX iO fuir fuyais/m't' enfuir
SFX iO fuir fuyait/s' enfuir
SFX iO fuir fuyions enfuir
SFX iO fuir fuyiez enfuir
SFX iO fuir fuyaient/s' enfuir
SFX iO fuir fuîmes enfuir
SFX iO fuir fuîtes enfuir
SFX iO fuir fuirent/s' enfuir
SFX iO fuir fuirai/m' enfuir
SFX iO fuir fuiras/t' enfuir
SFX iO fuir fuira/s' enfuir
SFX iO fuir fuirons enfuir
SFX iO fuir fuirez enfuir
SFX iO fuir fuiront/s' enfuir
SFX iO fuir fuirais/m't' enfuir
SFX iO fuir fuirait/s' enfuir
SFX iO fuir fuirions enfuir
SFX iO fuir fuiriez enfuir
SFX iO fuir fuiraient/s' enfuir
SFX iO fuir fuie/m's' enfuir
SFX iO fuir fuies/t' enfuir
SFX iO fuir fuisse/m' enfuir
SFX iO fuir fuisses/t' enfuir
SFX iO fuir fuît/s' enfuir
SFX iO fuir fuissions enfuir
SFX iO fuir fuissiez enfuir
SFX iO fuir fuissent/s' enfuir
SFX iO fuir fuis/t' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iP N 42
SFX iP ourir ourant mourir
SFX iP ourir ort mourir
SFX iP ourir orts mourir
SFX iP ourir orte mourir
SFX iP ourir ortes mourir
SFX iP ourir eurs mourir
SFX iP ourir eurt mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iP ourir eurent mourir
SFX iP ourir ourais mourir
SFX iP ourir ourait mourir
SFX iP ourir ourions mourir
SFX iP ourir ouriez mourir
SFX iP ourir ouraient mourir
SFX iP ourir ourus mourir
SFX iP ourir ourut mourir
SFX iP ourir ourûmes mourir
SFX iP ourir ourûtes mourir
SFX iP ourir oururent mourir
SFX iP ourir ourrai mourir
SFX iP ourir ourras mourir
SFX iP ourir ourra mourir
SFX iP ourir ourrons mourir
SFX iP ourir ourrez mourir
SFX iP ourir ourront mourir
SFX iP ourir ourrais mourir
SFX iP ourir ourrait mourir
SFX iP ourir ourrions mourir
SFX iP ourir ourriez mourir
SFX iP ourir ourraient mourir
SFX iP ourir eure mourir
SFX iP ourir eures mourir
SFX iP ourir ourusse mourir
SFX iP ourir ourusses mourir
SFX iP ourir ourût mourir
SFX iP ourir ourussions mourir
SFX iP ourir ourussiez mourir
SFX iP ourir ourussent mourir
SFX iP ourir eurs mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iQ N 42
SFX iQ ouillir ouillant bouillir
SFX iQ ouillir ouilli bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillie bouillir
SFX iQ ouillir ouillies bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir out bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iQ ouillir ouillent bouillir
SFX iQ ouillir ouillais bouillir
SFX iQ ouillir ouillait bouillir
SFX iQ ouillir ouillions bouillir
SFX iQ ouillir ouilliez bouillir
SFX iQ ouillir ouillaient bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillit bouillir
SFX iQ ouillir ouillîmes bouillir
SFX iQ ouillir ouillîtes bouillir
SFX iQ ouillir ouillirent bouillir
SFX iQ ouillir ouillirai bouillir
SFX iQ ouillir ouilliras bouillir
SFX iQ ouillir ouillira bouillir
SFX iQ ouillir ouillirons bouillir
SFX iQ ouillir ouillirez bouillir
SFX iQ ouillir ouilliront bouillir
SFX iQ ouillir ouillirais bouillir
SFX iQ ouillir ouillirait bouillir
SFX iQ ouillir ouillirions bouillir
SFX iQ ouillir ouilliriez bouillir
SFX iQ ouillir ouilliraient bouillir
SFX iQ ouillir ouille bouillir
SFX iQ ouillir ouilles bouillir
SFX iQ ouillir ouillisse bouillir
SFX iQ ouillir ouillisses bouillir
SFX iQ ouillir ouillît bouillir
SFX iQ ouillir ouillissions bouillir
SFX iQ ouillir ouillissiez bouillir
SFX iQ ouillir ouillissent bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iR Y 41
SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir
SFX iR ueillir ueillant/n'q'l'm't's' cueillir
SFX iR ueillir ueilli/L'D'Q' cueillir
SFX iR ueillir ueillis/D'Q' cueillir
SFX iR ueillir ueillie/L'D'Q' cueillir
SFX iR ueillir ueillies/D'Q' cueillir
SFX iR ueillir ueille/n'q'j'l'm't's' cueillir
SFX iR ueillir ueilles/n'q'l'm' cueillir
SFX iR ueillir ueillons/n'q'l't' cueillir
SFX iR ueillir ueillez/n'q'l'm' cueillir
SFX iR ueillir ueillent/n'q'l'm't's' cueillir
SFX iR ueillir ueillais/n'q'j'l't' cueillir
SFX iR ueillir ueillait/n'q'l'm't's' cueillir
SFX iR ueillir ueillions/n'q'l't' cueillir
SFX iR ueillir ueilliez/n'q'l'm' cueillir
SFX iR ueillir ueillaient/n'q'l'm't's' cueillir
SFX iR ueillir ueillis/n'q'j'l't' cueillir
SFX iR ueillir ueillit/n'q'l'm't's' cueillir
SFX iR ueillir ueillîmes/n'q'l't' cueillir
SFX iR ueillir ueillîtes/n'q'l'm' cueillir
SFX iR ueillir ueillirent/n'q'l'm't's' cueillir
SFX iR ueillir ueillerai/n'q'j'l't' cueillir
SFX iR ueillir ueilleras/n'q'l'm' cueillir
SFX iR ueillir ueillera/n'q'l'm't's' cueillir
SFX iR ueillir ueillerons/n'q'l't' cueillir
SFX iR ueillir ueillerez/n'q'l'm' cueillir
SFX iR ueillir ueilleront/n'q'l'm't's' cueillir
SFX iR ueillir ueillerais/n'q'j'l't' cueillir
SFX iR ueillir ueillerait/n'q'l'm't's' cueillir
SFX iR ueillir ueillerions/n'q'l't' cueillir
SFX iR ueillir ueilleriez/n'q'l'm' cueillir
SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir
SFX iR ueillir ueillisse/n'q'j'l't' cueillir
SFX iR ueillir ueillisses/n'q'l'm' cueillir
SFX iR ueillir ueillît/n'q'l'm't's' cueillir
SFX iR ueillir ueillissions/n'q'l't' cueillir
SFX iR ueillir ueillissiez/n'q'l'm' cueillir
SFX iR ueillir ueillissent/n'q'l'm't's' cueillir
SFX iR ueillir ueille/n'l'm' cueillir
SFX iR ueillir ueillons/n'l' cueillir
SFX iR ueillir ueillez/n'l'm' cueillir
SFX iS N 37
SFX iS aillir aillant aillir
SFX iS aillir ailli aillir
SFX iS aillir aille aillir
SFX iS aillir ailles aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iS aillir aillent aillir
SFX iS aillir aillais aillir
SFX iS aillir aillait aillir
SFX iS aillir aillions aillir
SFX iS aillir ailliez aillir
SFX iS aillir aillaient aillir
SFX iS aillir aillis aillir
SFX iS aillir aillit aillir
SFX iS aillir aillîmes aillir
SFX iS aillir aillîtes aillir
SFX iS aillir aillirent aillir
SFX iS aillir aillirai aillir
SFX iS aillir ailliras aillir
SFX iS aillir aillira aillir
SFX iS aillir aillirons aillir
SFX iS aillir aillirez aillir
SFX iS aillir ailliront aillir
SFX iS aillir aillirais aillir
SFX iS aillir aillirait aillir
SFX iS aillir aillirions aillir
SFX iS aillir ailliriez aillir
SFX iS aillir ailliraient aillir
SFX iS aillir aillisse aillir
SFX iS aillir aillisses aillir
SFX iS aillir aillît aillir
SFX iS aillir aillissions aillir
SFX iS aillir aillissiez aillir
SFX iS aillir aillissent aillir
SFX iS aillir aille aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iT Y 41
SFX iT saillir saillir/n'q'd'l'm't's' aillir
SFX iT saillir saillant/n'q'l'm't's' aillir
SFX iT saillir sailli/L'D'Q' aillir
SFX iT saillir saillis/D'Q' aillir
SFX iT saillir saillie/L'D'Q' aillir
SFX iT saillir saillies/D'Q' aillir
SFX iT saillir saille/n'q'j'l'm't's' aillir
SFX iT saillir sailles/n'q'l'm't' aillir
SFX iT saillir saillons/n'q'l't' aillir
SFX iT saillir saillez/n'q'l'm' aillir
SFX iT saillir saillent/n'q'l'm't's' aillir
SFX iT saillir saillais/n'q'j'l'm't' aillir
SFX iT saillir saillait/n'q'l'm't's' aillir
SFX iT saillir saillions/n'q'l't' aillir
SFX iT saillir sailliez/n'q'l'm' aillir
SFX iT saillir saillaient/n'q'l'm't's' aillir
SFX iT saillir saillis/n'q'j'l'm't' aillir
SFX iT saillir saillit/n'q'l'm't's' aillir
SFX iT saillir saillîmes/n'q'l't' aillir
SFX iT saillir saillîtes/n'q'l'm' aillir
SFX iT saillir saillirent/n'q'l'm't's' aillir
SFX iT saillir saillirai/n'q'j'l'm't' aillir
SFX iT saillir sailliras/n'q'l'm't' aillir
SFX iT saillir saillira/n'q'l'm't's' aillir
SFX iT saillir saillirons/n'q'l't' aillir
SFX iT saillir saillirez/n'q'l'm' aillir
SFX iT saillir sailliront/n'q'l'm't's' aillir
SFX iT saillir saillirais/n'q'j'l'm't' aillir
SFX iT saillir saillirait/n'q'l'm't's' aillir
SFX iT saillir saillirions/n'q'l't' aillir
SFX iT saillir sailliriez/n'q'l'm' aillir
SFX iT saillir sailliraient/n'q'l'm't's' aillir
SFX iT saillir saillisse/n'q'j'l'm't' aillir
SFX iT saillir saillisses/n'q'l'm't' aillir
SFX iT saillir saillît/n'q'l'm't's' aillir
SFX iT saillir saillissions/n'q'l't' aillir
SFX iT saillir saillissiez/n'q'l'm' aillir
SFX iT saillir saillissent/n'q'l'm't's' aillir
SFX iT saillir saille/n'l'm' aillir
SFX iT saillir saillons/n'l' aillir
SFX iT saillir saillez/n'l'm' aillir
SFX iU N 36
SFX iU aillir aillant faillir
SFX iU aillir ailli faillir
SFX iU aillir aux faillir
SFX iU aillir aut faillir
SFX iU aillir aillons faillir
SFX iU aillir aillez faillir
SFX iU aillir aillent faillir
SFX iU aillir aillais faillir
SFX iU aillir aillait faillir
SFX iU aillir aillions faillir
SFX iU aillir ailliez faillir
SFX iU aillir aillaient faillir
SFX iU aillir aillis faillir
SFX iU aillir aillit faillir
SFX iU aillir aillîmes faillir
SFX iU aillir aillîtes faillir
SFX iU aillir aillirent faillir
SFX iU aillir aillirai faillir
SFX iU aillir ailliras faillir
SFX iU aillir aillira faillir
SFX iU aillir aillirons faillir
SFX iU aillir aillirez faillir
SFX iU aillir ailliront faillir
SFX iU aillir aillirais faillir
SFX iU aillir aillirait faillir
SFX iU aillir aillirions faillir
SFX iU aillir ailliriez faillir
SFX iU aillir ailliraient faillir
SFX iU aillir aille faillir
SFX iU aillir ailles faillir
SFX iU aillir aillisse faillir
SFX iU aillir aillisses faillir
SFX iU aillir aillît faillir
SFX iU aillir aillissions faillir
SFX iU aillir aillissiez faillir
SFX iU aillir aillissent faillir
SFX iV N 11
SFX iV ésir isant gésir
SFX iV ésir is gésir
SFX iV ésir ît gésir
SFX iV ésir isons gésir
SFX iV ésir isez gésir
SFX iV ésir isent gésir
SFX iV ésir isais gésir
SFX iV ésir isait gésir
SFX iV ésir isions gésir
SFX iV ésir isiez gésir
SFX iV ésir isaient gésir
SFX iW Y 54
SFX iW uïr uïr/n'q'd'l'm't's' ouïr
SFX iW uïr yant/n'q'l'm't's' ouïr
SFX iW uïr uï/L'D'Q' ouïr
SFX iW uïr uïs/D'Q' ouïr
SFX iW uïr uïe/L'D'Q' ouïr
SFX iW uïr uïes/D'Q' ouïr
SFX iW uïr is/n'q'j'l'm't' ouïr
SFX iW uïr it/n'q'l'm't' ouïr
SFX iW uïr yons/n'q'l't' ouïr
SFX iW uïr yez/n'q'l'm' ouïr
SFX iW uïr ient/n'q'l'm't's' ouïr
SFX iW uïr yais/n'q'j'l'm't' ouïr
SFX iW uïr yait/n'q'l'm't' ouïr
SFX iW uïr yions/n'q'l't' ouïr
SFX iW uïr yiez/n'q'l'm' ouïr
SFX iW uïr yaient/n'q'l'm't's' ouïr
SFX iW uïr uïs/n'q'j'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïmes/n'q'l't' ouïr
SFX iW uïr uïtes/n'q'l'm' ouïr
SFX iW uïr uïrent/n'q'l'm't's' ouïr
SFX iW uïr uïrai/n'q'j'l'm't' ouïr
SFX iW uïr rrai/n'q'j'l'm't' ouïr
SFX iW uïr uïras/n'q'l'm't' ouïr
SFX iW uïr rras/n'q'l'm't' ouïr
SFX iW uïr uïra/n'q'l'm't' ouïr
SFX iW uïr rra/n'q'l'm't' ouïr
SFX iW uïr uïrons/n'q'l't' ouïr
SFX iW uïr rrons/n'q'l't' ouïr
SFX iW uïr uïrez/n'q'l'm' ouïr
SFX iW uïr rrez/n'q'l'm' ouïr
SFX iW uïr uïront/n'q'l'm't's' ouïr
SFX iW uïr rront/n'q'l'm't's' ouïr
SFX iW uïr uïrais/n'q'j'l'm't' ouïr
SFX iW uïr rrais/n'q'j'l'm't' ouïr
SFX iW uïr uïrait/n'q'l'm't' ouïr
SFX iW uïr rrait/n'q'l'm't' ouïr
SFX iW uïr uïrions/n'q'l't' ouïr
SFX iW uïr rrions/n'q'l't' ouïr
SFX iW uïr uïriez/n'q'l'm' ouïr
SFX iW uïr rriez/n'q'l'm' ouïr
SFX iW uïr uïraient/n'q'l'm't's' ouïr
SFX iW uïr rraient/n'q'l'm't's' ouïr
SFX iW uïr ie/n'q'j'l'm't's' ouïr
SFX iW uïr ies/n'l'm't' ouïr
SFX iW uïr uïsse/n'q'j'l'm't' ouïr
SFX iW uïr uïsses/n'q'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïssions/n'q'l't' ouïr
SFX iW uïr uïssiez/n'q'l'm' ouïr
SFX iW uïr uïssent/n'q'l'm't's' ouïr
SFX iW uïr is/n'l'm' ouïr
SFX iW uïr yons/n'l' ouïr
SFX iW uïr yez/n'l'm' ouïr
SFX iX N 4
SFX iX érir éru férir
SFX iX érir érus férir
SFX iX érir érue férir
SFX iX érir érues férir
SFX iY Y 5
SFX iY ssir ssir/n'q'd' issir
SFX iY ssir ssu/L'D'Q' issir
SFX iY ssir ssus/D'Q' issir
SFX iY ssir ssue/L'D'Q' issir
SFX iY ssir ssues/D'Q' issir
SFX pA N 42
SFX pA ouvoir ouvant pouvoir
SFX pA ouvoir u pouvoir
SFX pA ouvoir eux pouvoir
SFX pA ouvoir uis pouvoir
SFX pA ouvoir eut pouvoir
SFX pA ouvoir ouvons pouvoir
SFX pA ouvoir ouvez pouvoir
SFX pA ouvoir euvent pouvoir
SFX pA ouvoir ouvais pouvoir
SFX pA ouvoir ouvait pouvoir
SFX pA ouvoir ouvions pouvoir
SFX pA ouvoir ouviez pouvoir
SFX pA ouvoir ouvaient pouvoir
SFX pA ouvoir us pouvoir
SFX pA ouvoir ut pouvoir
SFX pA ouvoir ûmes pouvoir
SFX pA ouvoir ûtes pouvoir
SFX pA ouvoir urent pouvoir
SFX pA ouvoir ourrai pouvoir
SFX pA ouvoir ourras pouvoir
SFX pA ouvoir ourra pouvoir
SFX pA ouvoir ourrons pouvoir
SFX pA ouvoir ourrez pouvoir
SFX pA ouvoir ourront pouvoir
SFX pA ouvoir ourrais pouvoir
SFX pA ouvoir ourrait pouvoir
SFX pA ouvoir ourrions pouvoir
SFX pA ouvoir ourriez pouvoir
SFX pA ouvoir ourraient pouvoir
SFX pA ouvoir uisse pouvoir
SFX pA ouvoir uissé pouvoir
SFX pA ouvoir uisses pouvoir
SFX pA ouvoir uissions pouvoir
SFX pA ouvoir uissiez pouvoir
SFX pA ouvoir uissent pouvoir
SFX pA ouvoir usse pouvoir
SFX pA ouvoir ussé pouvoir
SFX pA ouvoir usses pouvoir
SFX pA ouvoir ût pouvoir
SFX pA ouvoir ussions pouvoir
SFX pA ouvoir ussiez pouvoir
SFX pA ouvoir ussent pouvoir
SFX pB N 47
SFX pB ouloir oulant vouloir
SFX pB ouloir oulu vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulue vouloir
SFX pB ouloir oulues vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir eut vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir oulez vouloir
SFX pB ouloir eulent vouloir
SFX pB ouloir oulais vouloir
SFX pB ouloir oulait vouloir
SFX pB ouloir oulions vouloir
SFX pB ouloir ouliez vouloir
SFX pB ouloir oulaient vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulut vouloir
SFX pB ouloir oulûmes vouloir
SFX pB ouloir oulûtes vouloir
SFX pB ouloir oulurent vouloir
SFX pB ouloir oudrai vouloir
SFX pB ouloir oudras vouloir
SFX pB ouloir oudra vouloir
SFX pB ouloir oudrons vouloir
SFX pB ouloir oudrez vouloir
SFX pB ouloir oudront vouloir
SFX pB ouloir oudrais vouloir
SFX pB ouloir oudrait vouloir
SFX pB ouloir oudrions vouloir
SFX pB ouloir oudriez vouloir
SFX pB ouloir oudraient vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir euillé vouloir
SFX pB ouloir euilles vouloir
SFX pB ouloir euillent vouloir
SFX pB ouloir oulusse vouloir
SFX pB ouloir oulusses vouloir
SFX pB ouloir oulût vouloir
SFX pB ouloir oulussions vouloir
SFX pB ouloir oulussiez vouloir
SFX pB ouloir oulussent vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir euillons vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir euillez vouloir
SFX pB ouloir oulez vouloir
SFX pC N 43
SFX pC evoir evant devoir
SFX pC evoir û redevoir
SFX pC evoir us devoir
SFX pC evoir ue devoir
SFX pC evoir ues devoir
SFX pC evoir ois devoir
SFX pC evoir oit devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pC evoir oivent devoir
SFX pC evoir evais devoir
SFX pC evoir evait devoir
SFX pC evoir evions devoir
SFX pC evoir eviez devoir
SFX pC evoir evaient devoir
SFX pC evoir us devoir
SFX pC evoir ut devoir
SFX pC evoir ûmes devoir
SFX pC evoir ûtes devoir
SFX pC evoir urent devoir
SFX pC evoir evrai devoir
SFX pC evoir evras devoir
SFX pC evoir evra devoir
SFX pC evoir evrons devoir
SFX pC evoir evrez devoir
SFX pC evoir evront devoir
SFX pC evoir evrais devoir
SFX pC evoir evrait devoir
SFX pC evoir evrions devoir
SFX pC evoir evriez devoir
SFX pC evoir evraient devoir
SFX pC evoir oive devoir
SFX pC evoir oives devoir
SFX pC evoir usse devoir
SFX pC evoir ussé devoir
SFX pC evoir usses devoir
SFX pC evoir ût devoir
SFX pC evoir ussions devoir
SFX pC evoir ussiez devoir
SFX pC evoir ussent devoir
SFX pC evoir ois devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pD N 1
SFX pD evoir û devoir
SFX pE N 45
SFX pE avoir achant savoir
SFX pE avoir u savoir
SFX pE avoir us savoir
SFX pE avoir ue savoir
SFX pE avoir ues savoir
SFX pE avoir ais savoir
SFX pE avoir ait savoir
SFX pE avoir avons savoir
SFX pE avoir avez savoir
SFX pE avoir avent savoir
SFX pE avoir avais savoir
SFX pE avoir avait savoir
SFX pE avoir avions savoir
SFX pE avoir aviez savoir
SFX pE avoir avaient savoir
SFX pE avoir us savoir
SFX pE avoir ut savoir
SFX pE avoir ûmes savoir
SFX pE avoir ûtes savoir
SFX pE avoir urent savoir
SFX pE avoir aurai savoir
SFX pE avoir auras savoir
SFX pE avoir aura savoir
SFX pE avoir aurons savoir
SFX pE avoir aurez savoir
SFX pE avoir auront savoir
SFX pE avoir aurais savoir
SFX pE avoir aurait savoir
SFX pE avoir aurions savoir
SFX pE avoir auriez savoir
SFX pE avoir auraient savoir
SFX pE avoir ache savoir
SFX pE avoir aches savoir
SFX pE avoir achions savoir
SFX pE avoir achiez savoir
SFX pE avoir achent savoir
SFX pE avoir usse savoir
SFX pE avoir usses savoir
SFX pE avoir ût savoir
SFX pE avoir ussions savoir
SFX pE avoir ussiez savoir
SFX pE avoir ussent savoir
SFX pE avoir ache savoir
SFX pE avoir achons savoir
SFX pE avoir achez savoir
SFX pF Y 54
SFX pF oir oir/n'q'd'l'm't's' voir
SFX pF oir oyant/n'q'l'm't's' voir
SFX pF oir u/L'D'Q' voir
SFX pF oir us/D'Q' voir
SFX pF oir ue/L'D'Q' voir
SFX pF oir ues/D'Q' voir
SFX pF oir ois/n'q'j'l'm't' voir
SFX pF oir oit/n'q'l'm't's' voir
SFX pF oir oyons/n'q'l't' voir
SFX pF oir oyez/n'q'l'm' voir
SFX pF oir oient/n'q'l'm't's' voir
SFX pF oir oyais/n'q'j'l'm't' voir
SFX pF oir oyait/n'q'l'm't's' voir
SFX pF oir oyions/n'q'l't' voir
SFX pF oir oyiez/n'q'l'm' voir
SFX pF oir oyaient/n'q'l'm't's' voir
SFX pF oir is/n'q'j'l'm't' voir
SFX pF oir it/n'q'l'm't's' voir
SFX pF oir îmes/n'q'l't' voir
SFX pF oir îtes/n'q'l'm' voir
SFX pF oir irent/n'q'l'm't's' voir
SFX pF oir errai/n'q'j'l'm't' [^é]voir
SFX pF oir oirai évoir
SFX pF oir erras/n'q'l'm't' [^é]voir
SFX pF oir oiras évoir
SFX pF oir erra/n'q'l'm't's' [^é]voir
SFX pF oir oira évoir
SFX pF oir errons/n'q'l't' [^é]voir
SFX pF oir oirons évoir
SFX pF oir errez/n'q'l'm' [^é]voir
SFX pF oir oirez évoir
SFX pF oir erront/n'q'l'm't's' [^é]voir
SFX pF oir oiront évoir
SFX pF oir errais/n'q'j'l'm't' [^é]voir
SFX pF oir oirais évoir
SFX pF oir errait/n'q'l'm't's' [^é]voir
SFX pF oir oirait évoir
SFX pF oir errions/n'q'l't' [^é]voir
SFX pF oir oirions évoir
SFX pF oir erriez/n'q'l'm' [^é]voir
SFX pF oir oiriez évoir
SFX pF oir erraient/n'q'l'm't's' [^é]voir
SFX pF oir oiraient évoir
SFX pF oir oie/n'q'j'l'm't's' voir
SFX pF oir oies/n'l'm't' voir
SFX pF oir isse/n'q'j'l'm't' voir
SFX pF oir isses/n'q'l'm't' voir
SFX pF oir ît/n'q'l'm't's' voir
SFX pF oir issions/n'q'l't' voir
SFX pF oir issiez/n'q'l'm' voir
SFX pF oir issent/n'q'l'm't's' voir
SFX pF oir ois/n'l'm' voir
SFX pF oir oyons/n'l' voir
SFX pF oir oyez/n'l'm' voir
SFX pG Y 11
SFX pG oir errai voir
SFX pG oir erras voir
SFX pG oir erra voir
SFX pG oir errons voir
SFX pG oir errez voir
SFX pG oir erront voir
SFX pG oir errais voir
SFX pG oir errait voir
SFX pG oir errions voir
SFX pG oir erriez voir
SFX pG oir erraient voir
SFX pH Y 43
SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir
SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir
SFX pH ouvoir u/L'D'Q' .mouvoir
SFX pH ouvoir us/D'Q' mouvoir
SFX pH ouvoir ue/L'D'Q' mouvoir
SFX pH ouvoir ues/D'Q' mouvoir
SFX pH ouvoir eus/n'q'j'l'm't' mouvoir
SFX pH ouvoir eut/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvons/n'q'l't' mouvoir
SFX pH ouvoir ouvez/n'q'l'm' mouvoir
SFX pH ouvoir euvent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvions/n'q'l't' mouvoir
SFX pH ouvoir ouviez/n'q'l'm' mouvoir
SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir
SFX pH ouvoir us/n'q'j'l'm't' mouvoir
SFX pH ouvoir ut/n'q'l'm't's' mouvoir
SFX pH ouvoir ûmes/n'q'l't' mouvoir
SFX pH ouvoir ûtes/n'q'l'm' mouvoir
SFX pH ouvoir urent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvras/n'q'l'm't' mouvoir
SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrons/n'q'l't' mouvoir
SFX pH ouvoir ouvrez/n'q'l'm' mouvoir
SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrions/n'q'l't' mouvoir
SFX pH ouvoir ouvriez/n'q'l'm' mouvoir
SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir
SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir
SFX pH ouvoir euves/n'l'm't' mouvoir
SFX pH ouvoir usse/n'q'j'l'm't' mouvoir
SFX pH ouvoir usses/n'q'l'm't' mouvoir
SFX pH ouvoir ût/n'q'l'm't's' mouvoir
SFX pH ouvoir ussions/n'q'l't' mouvoir
SFX pH ouvoir ussiez/n'q'l'm' mouvoir
SFX pH ouvoir ussent/n'q'l'm't's' mouvoir
SFX pH ouvoir eus/n'l'm' mouvoir
SFX pH ouvoir ouvons/n'l' mouvoir
SFX pH ouvoir ouvez/n'l'm' mouvoir
SFX pI N 1
SFX pI ouvoir û/q' mouvoir
SFX pJ N 42
SFX pJ ourvoir ourvoyant pourvoir
SFX pJ ourvoir ourvu pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvue pourvoir
SFX pJ ourvoir ourvues pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoit pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pJ ourvoir ourvoient pourvoir
SFX pJ ourvoir ourvoyais pourvoir
SFX pJ ourvoir ourvoyait pourvoir
SFX pJ ourvoir ourvoyions pourvoir
SFX pJ ourvoir ourvoyiez pourvoir
SFX pJ ourvoir ourvoyaient pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvut pourvoir
SFX pJ ourvoir ourvûmes pourvoir
SFX pJ ourvoir ourvûtes pourvoir
SFX pJ ourvoir ourvurent pourvoir
SFX pJ ourvoir ourvoirai pourvoir
SFX pJ ourvoir ourvoiras pourvoir
SFX pJ ourvoir ourvoira pourvoir
SFX pJ ourvoir ourvoirons pourvoir
SFX pJ ourvoir ourvoirez pourvoir
SFX pJ ourvoir ourvoiront pourvoir
SFX pJ ourvoir ourvoirais pourvoir
SFX pJ ourvoir ourvoirait pourvoir
SFX pJ ourvoir ourvoirions pourvoir
SFX pJ ourvoir ourvoiriez pourvoir
SFX pJ ourvoir ourvoiraient pourvoir
SFX pJ ourvoir ourvoie pourvoir
SFX pJ ourvoir ourvoies pourvoir
SFX pJ ourvoir ourvusse pourvoir
SFX pJ ourvoir ourvusses pourvoir
SFX pJ ourvoir ourvût pourvoir
SFX pJ ourvoir ourvussions pourvoir
SFX pJ ourvoir ourvussiez pourvoir
SFX pJ ourvoir ourvussent pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pK Y 43
SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir
SFX pK cevoir cevant/n'q'l'm't's' cevoir
SFX pK cevoir çu/L'D'Q' cevoir
SFX pK cevoir çus/D'Q' cevoir
SFX pK cevoir çue/L'D'Q' cevoir
SFX pK cevoir çues/D'Q' cevoir
SFX pK cevoir çois/n'q'j'l'm't' cevoir
SFX pK cevoir çoit/n'q'l'm't's' cevoir
SFX pK cevoir cevons/n'q'l't' cevoir
SFX pK cevoir cevez/n'q'l'm' cevoir
SFX pK cevoir çoivent/n'q'l'm't's' cevoir
SFX pK cevoir cevais/n'q'j'l'm't' cevoir
SFX pK cevoir cevait/n'q'l'm't's' cevoir
SFX pK cevoir cevions/n'q'l't' cevoir
SFX pK cevoir ceviez/n'q'l'm' cevoir
SFX pK cevoir cevaient/n'q'l'm't's' cevoir
SFX pK cevoir çus/n'q'j'l'm't' cevoir
SFX pK cevoir çut/n'q'l'm't's' cevoir
SFX pK cevoir çûmes/n'q'l't' cevoir
SFX pK cevoir çûtes/n'q'l'm' cevoir
SFX pK cevoir çurent/n'q'l'm't's' cevoir
SFX pK cevoir cevrai/n'q'j'l'm't' cevoir
SFX pK cevoir cevras/n'q'l'm't' cevoir
SFX pK cevoir cevra/n'q'l'm't's' cevoir
SFX pK cevoir cevrons/n'q'l't' cevoir
SFX pK cevoir cevrez/n'q'l'm' cevoir
SFX pK cevoir cevront/n'q'l'm't's' cevoir
SFX pK cevoir cevrais/n'q'j'l'm't' cevoir
SFX pK cevoir cevrait/n'q'l'm't's' cevoir
SFX pK cevoir cevrions/n'q'l't' cevoir
SFX pK cevoir cevriez/n'q'l'm' cevoir
SFX pK cevoir cevraient/n'q'l'm't's' cevoir
SFX pK cevoir çoive/n'q'j'l'm't's' cevoir
SFX pK cevoir çoives/n'l'm't' cevoir
SFX pK cevoir çusse/n'q'j'l'm't' cevoir
SFX pK cevoir çusses/n'q'l'm't' cevoir
SFX pK cevoir çût/n'q'l'm't's' cevoir
SFX pK cevoir çussions/n'q'l't' cevoir
SFX pK cevoir çussiez/n'q'l'm' cevoir
SFX pK cevoir çussent/n'q'l'm't's' cevoir
SFX pK cevoir çois/n'l'm't' cevoir
SFX pK cevoir cevons/n'l' cevoir
SFX pK cevoir cevez/n'l'm' cevoir
SFX pM N 40
SFX pM aloir alant valoir
SFX pM aloir alu valoir
SFX pM aloir aux valoir
SFX pM aloir aut valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pM aloir alent valoir
SFX pM aloir alais valoir
SFX pM aloir alait valoir
SFX pM aloir alions valoir
SFX pM aloir aliez valoir
SFX pM aloir alaient valoir
SFX pM aloir alus valoir
SFX pM aloir alut valoir
SFX pM aloir alûmes valoir
SFX pM aloir alûtes valoir
SFX pM aloir alurent valoir
SFX pM aloir audrai valoir
SFX pM aloir audras valoir
SFX pM aloir audra valoir
SFX pM aloir audrons valoir
SFX pM aloir audrez valoir
SFX pM aloir audront valoir
SFX pM aloir audrais valoir
SFX pM aloir audrait valoir
SFX pM aloir audrions valoir
SFX pM aloir audriez valoir
SFX pM aloir audraient valoir
SFX pM aloir aille valoir
SFX pM aloir ailles valoir
SFX pM aloir aillent valoir
SFX pM aloir alusse valoir
SFX pM aloir alusses valoir
SFX pM aloir alût valoir
SFX pM aloir alussions valoir
SFX pM aloir alussiez valoir
SFX pM aloir alussent valoir
SFX pM aloir aux valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pN Y 43
SFX pN valoir valoir/n'q'd'm't's' valoir
SFX pN valoir valant/n'q'm't's' valoir
SFX pN valoir vaux/n'j'm't' valoir
SFX pN valoir vaut/n'm't's' valoir
SFX pN valoir valons/n't' valoir
SFX pN valoir valez/n'm' valoir
SFX pN valoir valent/n'm't's' quivaloir
SFX pN valoir valent révaloir
SFX pN valoir valais/n'j'm't' valoir
SFX pN valoir valait/n'm't's' valoir
SFX pN valoir valions/n't' valoir
SFX pN valoir valiez/n'm' valoir
SFX pN valoir valaient/n'm't's' valoir
SFX pN valoir valus/n'j'm't' valoir
SFX pN valoir valut/n'm't's' valoir
SFX pN valoir valûmes/n't' valoir
SFX pN valoir valûtes/n'm' valoir
SFX pN valoir valurent/n'm't's' valoir
SFX pN valoir vaudrai/n'j'm't' valoir
SFX pN valoir vaudras/n'm't' valoir
SFX pN valoir vaudra/n'm't's' valoir
SFX pN valoir vaudrons/n't' valoir
SFX pN valoir vaudrez/n'm' valoir
SFX pN valoir vaudront/n'm't's' valoir
SFX pN valoir vaudrais/n'j'm't' valoir
SFX pN valoir vaudrait/n'm't's' valoir
SFX pN valoir vaudrions/n't' valoir
SFX pN valoir vaudriez/n'm' valoir
SFX pN valoir vaudraient/n'm't's' valoir
SFX pN valoir vaille/n'j'm't's' quivaloir
SFX pN valoir vale révaloir
SFX pN valoir vailles/n'm't' quivaloir
SFX pN valoir vales révaloir
SFX pN valoir vaillent/n'm't's' quivaloir
SFX pN valoir valusse/n'j'm't' valoir
SFX pN valoir valusses/n'm't' valoir
SFX pN valoir valût/n'm't's' valoir
SFX pN valoir valussions/n't' valoir
SFX pN valoir valussiez/n'm' valoir
SFX pN valoir valussent/n'm't's' valoir
SFX pN valoir vaux valoir
SFX pN valoir valons valoir
SFX pN valoir valez valoir
SFX pO N 16
SFX pO valoir valant revaloir
SFX pO valoir valu revaloir
SFX pO valoir valus revaloir
SFX pO valoir value revaloir
SFX pO valoir values revaloir
SFX pO valoir vaudrai revaloir
SFX pO valoir vaudras revaloir
SFX pO valoir vaudra revaloir
SFX pO valoir vaudrons revaloir
SFX pO valoir vaudrez revaloir
SFX pO valoir vaudront revaloir
SFX pO valoir vaudrais revaloir
SFX pO valoir vaudrait revaloir
SFX pO valoir vaudrions revaloir
SFX pO valoir vaudriez revaloir
SFX pO valoir vaudraient revaloir
SFX pP N 1
SFX pP paroir parant comparoir
SFX pQ N 1
SFX pQ haloir haut chaloir
SFX pR Y 2
SFX pR pparoir pparoir/n'q'd' apparoir
SFX pR pparoir ppert/n'q' apparoir
SFX pS Y 69
SFX pS oir oir/n'q'd'l'm't's' oir
SFX pS sseoir sseyant/n'q'l'm't's' seoir
SFX pS sseoir ssoyant/n'q'l'm't's' seoir
SFX pS sseoir ssis/L'D'Q' seoir
SFX pS sseoir ssise/L'D'Q' seoir
SFX pS sseoir ssises/D'Q' seoir
SFX pS sseoir ssieds/n'q'j'l'm't' seoir
SFX pS sseoir ssied/n'q'l'm't's' seoir
SFX pS sseoir sseyons/n'q'l't' seoir
SFX pS sseoir sseyez/n'q'l'm' seoir
SFX pS sseoir sseyent/n'q'l'm't's' seoir
SFX pS sseoir ssois/n'q'j'l'm't' seoir
SFX pS sseoir ssoit/n'q'l'm't's' seoir
SFX pS sseoir ssoyons/n'q'l't' seoir
SFX pS sseoir ssoyez/n'q'l'm' seoir
SFX pS sseoir ssoient/n'q'l'm't's' seoir
SFX pS sseoir sseyais/n'q'j'l'm't' seoir
SFX pS sseoir sseyait/n'q'l'm't's' seoir
SFX pS sseoir sseyions/n'q'l't' seoir
SFX pS sseoir sseyiez/n'q'l'm' seoir
SFX pS sseoir sseyaient/n'q'l'm't's' seoir
SFX pS sseoir ssoyais/n'q'j'l'm't' seoir
SFX pS sseoir ssoyait/n'q'l'm't's' seoir
SFX pS sseoir ssoyions/n'q'l't' seoir
SFX pS sseoir ssoyiez/n'q'l'm' seoir
SFX pS sseoir ssoyaient/n'q'l'm't's' seoir
SFX pS sseoir ssis/n'q'j'l'm't' seoir
SFX pS sseoir ssit/n'q'l'm't's' seoir
SFX pS sseoir ssîmes/n'q'l't' seoir
SFX pS sseoir ssîtes/n'q'l'm' seoir
SFX pS sseoir ssirent/n'q'l'm't's' seoir
SFX pS sseoir ssiérai/n'q'j'l'm't' seoir
SFX pS sseoir ssiéras/n'q'l'm't' seoir
SFX pS sseoir ssiéra/n'q'l'm't's' seoir
SFX pS sseoir ssiérons/n'q'l't' seoir
SFX pS sseoir ssiérez/n'q'l'm' seoir
SFX pS sseoir ssiéront/n'q'l'm't's' seoir
SFX pS sseoir ssoirai/n'q'j'l'm't' seoir
SFX pS sseoir ssoiras/n'q'l'm't' seoir
SFX pS sseoir ssoira/n'q'l'm't's' seoir
SFX pS sseoir ssoirons/n'q'l't' seoir
SFX pS sseoir ssoirez/n'q'l'm' seoir
SFX pS sseoir ssoiront/n'q'l'm't's' seoir
SFX pS sseoir ssiérais/n'q'j'l'm't' seoir
SFX pS sseoir ssiérait/n'q'l'm't's' seoir
SFX pS sseoir ssiérions/n'q'l't' seoir
SFX pS sseoir ssiériez/n'q'l'm' seoir
SFX pS sseoir ssiéraient/n'q'l'm't's' seoir
SFX pS sseoir ssoirais/n'q'j'l'm't' seoir
SFX pS sseoir ssoirait/n'q'l'm't's' seoir
SFX pS sseoir ssoirions/n'q'l't' seoir
SFX pS sseoir ssoiriez/n'q'l'm' seoir
SFX pS sseoir ssoiraient/n'q'l'm't's' seoir
SFX pS sseoir sseye/n'q'j'l'm't's' seoir
SFX pS sseoir sseyes/n'l'm't' seoir
SFX pS sseoir ssoie/n'q'j'l'm't's' seoir
SFX pS sseoir ssoies/n'l'm't' seoir
SFX pS sseoir ssisse/n'q'j'l'm't' seoir
SFX pS sseoir ssisses/n'q'l'm't' seoir
SFX pS sseoir ssît/n'q'l'm't's' seoir
SFX pS sseoir ssissions/n'q'l't' seoir
SFX pS sseoir ssissiez/n'q'l'm' seoir
SFX pS sseoir ssissent/n'q'l'm't's' seoir
SFX pS sseoir ssieds/n'l'm't' seoir
SFX pS sseoir sseyons/n'l' seoir
SFX pS sseoir sseyez/n'l'm' seoir
SFX pS sseoir ssois/n'l'm't' seoir
SFX pS sseoir ssoyons/n'l' seoir
SFX pS sseoir ssoyez/n'l'm' seoir
SFX pT N 41
SFX pT urseoir ursoyant seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursise seoir
SFX pT urseoir ursises seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoit seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pT urseoir ursoient seoir
SFX pT urseoir ursoyais seoir
SFX pT urseoir ursoyait seoir
SFX pT urseoir ursoyions seoir
SFX pT urseoir ursoyiez seoir
SFX pT urseoir ursoyaient seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursit seoir
SFX pT urseoir ursîmes seoir
SFX pT urseoir ursîtes seoir
SFX pT urseoir ursirent seoir
SFX pT urseoir urseoirai seoir
SFX pT urseoir urseoiras seoir
SFX pT urseoir urseoira seoir
SFX pT urseoir urseoirons seoir
SFX pT urseoir urseoirez seoir
SFX pT urseoir urseoiront seoir
SFX pT urseoir urseoirais seoir
SFX pT urseoir urseoirait seoir
SFX pT urseoir urseoirions seoir
SFX pT urseoir urseoiriez seoir
SFX pT urseoir urseoiraient seoir
SFX pT urseoir ursoie seoir
SFX pT urseoir ursoies seoir
SFX pT urseoir ursisse seoir
SFX pT urseoir ursisses seoir
SFX pT urseoir ursît seoir
SFX pT urseoir ursissions seoir
SFX pT urseoir ursissiez seoir
SFX pT urseoir ursissent seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pU N 4
SFX pU eoir éant seoir
SFX pU eoir is seoir
SFX pU eoir ise seoir
SFX pU eoir ises seoir
SFX pV N 13
SFX pV eoir éant seoir
SFX pV eoir eyant seoir
SFX pV eoir is seoir
SFX pV eoir ied seoir
SFX pV eoir iéent seoir
SFX pV eoir eyait seoir
SFX pV eoir eyaient seoir
SFX pV eoir iéra seoir
SFX pV eoir iéront seoir
SFX pV eoir iérait seoir
SFX pV eoir iéraient seoir
SFX pV eoir iée seoir
SFX pV eoir iéent seoir
SFX pW N 11
SFX pW sseoir sséant seoir
SFX pW sseoir ssied seoir
SFX pW sseoir ssiéent seoir
SFX pW sseoir sseyait seoir
SFX pW sseoir sseyaient seoir
SFX pW sseoir ssiéra seoir
SFX pW sseoir ssiéront seoir
SFX pW sseoir ssiérait seoir
SFX pW sseoir ssiéraient seoir
SFX pW sseoir ssiée seoir
SFX pW sseoir ssiéent seoir
SFX pX N 52
SFX pX hoir hu choir
SFX pX hoir hus choir
SFX pX hoir hue choir
SFX pX hoir hues choir
SFX pX hoir hois choir
SFX pX hoir hoit choir
SFX pX hoir hoyons choir
SFX pX hoir hoyez choir
SFX pX hoir hoient choir
SFX pX hoir hoyais déchoir
SFX pX hoir hoyait déchoir
SFX pX hoir hoyions déchoir
SFX pX hoir hoyiez déchoir
SFX pX hoir hoyaient déchoir
SFX pX hoir hus choir
SFX pX hoir hut choir
SFX pX hoir hûmes choir
SFX pX hoir hûtes choir
SFX pX hoir hurent choir
SFX pX hoir hoirai choir
SFX pX hoir herrai choir
SFX pX hoir hoiras choir
SFX pX hoir herras choir
SFX pX hoir hoira choir
SFX pX hoir herra choir
SFX pX hoir hoirons choir
SFX pX hoir herrons choir
SFX pX hoir hoirez choir
SFX pX hoir herrez choir
SFX pX hoir hoiront choir
SFX pX hoir herront choir
SFX pX hoir hoirais choir
SFX pX hoir herrais choir
SFX pX hoir hoirait choir
SFX pX hoir herrait choir
SFX pX hoir hoirions choir
SFX pX hoir herrions choir
SFX pX hoir hoiriez choir
SFX pX hoir herriez choir
SFX pX hoir hoiraient choir
SFX pX hoir herraient choir
SFX pX hoir hoie choir
SFX pX hoir hoies choir
SFX pX hoir husse choir
SFX pX hoir husses choir
SFX pX hoir hût choir
SFX pX hoir hussions choir
SFX pX hoir hussiez choir
SFX pX hoir hussent choir
SFX pX hoir hois déchoir
SFX pX hoir hoyons déchoir
SFX pX hoir hoyez déchoir
SFX pY Y 26
SFX pY choir choir/n'q'd' échoir
SFX pY choir chéant/n'q' échoir
SFX pY choir chu/L'D'Q' échoir
SFX pY choir chus/D'Q' échoir
SFX pY choir chue/L'D'Q' échoir
SFX pY choir chues/D'Q' échoir
SFX pY choir choit/n'q' échoir
SFX pY choir chet/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chéent/n'q' échoir
SFX pY choir choyait/n'q' échoir
SFX pY choir choyaient/n'q' échoir
SFX pY choir chut/n'q' échoir
SFX pY choir churent/n'q' échoir
SFX pY choir choira/n'q' échoir
SFX pY choir cherra/n'q' échoir
SFX pY choir choiront/n'q' échoir
SFX pY choir cherront/n'q' échoir
SFX pY choir choirait/n'q' échoir
SFX pY choir cherrait/n'q' échoir
SFX pY choir choiraient/n'q' échoir
SFX pY choir cherraient/n'q' échoir
SFX pY choir choie/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chût/n'q' échoir
SFX pY choir chussent/n'q' échoir
SFX pZ N 18
SFX pZ euvoir euvant pleuvoir
SFX pZ euvoir u pleuvoir
SFX pZ euvoir eut pleuvoir
SFX pZ euvoir euvent pleuvoir
SFX pZ euvoir euvait pleuvoir
SFX pZ euvoir euvaient pleuvoir
SFX pZ euvoir ut pleuvoir
SFX pZ euvoir urent pleuvoir
SFX pZ euvoir euvra pleuvoir
SFX pZ euvoir euvront pleuvoir
SFX pZ euvoir euvrait pleuvoir
SFX pZ euvoir euvraient pleuvoir
SFX pZ euvoir euve pleuvoir
SFX pZ euvoir ût pleuvoir
SFX pZ euvoir ussent pleuvoir
SFX pZ euvoir eus pleuvoir
SFX pZ euvoir euvons pleuvoir
SFX pZ euvoir euvez pleuvoir
SFX qA N 8
SFX qA alloir allu falloir
SFX qA alloir aut falloir
SFX qA alloir allait falloir
SFX qA alloir allut falloir
SFX qA alloir audra falloir
SFX qA alloir audrait falloir
SFX qA alloir aille falloir
SFX qA alloir allût falloir
SFX rA Y 28
SFX rA lore lore/n'q'd'l'm't's' clore
SFX rA lore losant/n'q'l'm't's' clore
SFX rA lore los/L'D'Q' clore
SFX rA lore lose/L'D'Q' clore
SFX rA lore loses/D'Q' clore
SFX rA lore los/n'q'j'l'm't' clore
SFX rA lore lot/n'q'l'm't's' .clore
SFX rA lore losons/n'q'l't' clore
SFX rA lore losez/n'q'l'm' clore
SFX rA lore losent/n'q'l'm't's' clore
SFX rA lore lorai/n'q'j'l'm't' clore
SFX rA lore loras/n'q'l'm't' clore
SFX rA lore lora/n'q'l'm't's' clore
SFX rA lore lorons/n'q'l't' clore
SFX rA lore lorez/n'q'l'm' clore
SFX rA lore loront/n'q'l'm't's' clore
SFX rA lore lorais/n'q'j'l'm't' clore
SFX rA lore lorait/n'q'l'm't's' clore
SFX rA lore lorions/n'q'l't' clore
SFX rA lore loriez/n'q'l'm' clore
SFX rA lore loraient/n'q'l'm't's' clore
SFX rA lore lose/n'q'j'l'm't's' clore
SFX rA lore loses/n'l'm't' clore
SFX rA lore losions/n'l't' clore
SFX rA lore losiez/n'l'm' clore
SFX rA lore los/n'l'm' clore
SFX rA lore losons/n'l' clore
SFX rA lore losez/n'l'm' clore
SFX rB Y 1
SFX rB lore lôt clore
SFX rC Y 28
SFX rC clore clore/n'q'd' clore
SFX rC clore closant/n'q' clore
SFX rC clore clos/L'D'Q' clore
SFX rC clore close/L'D'Q' clore
SFX rC clore closes/D'Q' clore
SFX rC clore clos/n'j' clore
SFX rC clore clot/n'q' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rC clore closent/n'q' clore
SFX rC clore clorai/n'j' clore
SFX rC clore cloras/n' clore
SFX rC clore clora/n'q' clore
SFX rC clore clorons/n' clore
SFX rC clore clorez/n' clore
SFX rC clore cloront/n'q' clore
SFX rC clore clorais/n'j' clore
SFX rC clore clorait/n'q' clore
SFX rC clore clorions/n' clore
SFX rC clore cloriez/n' clore
SFX rC clore cloraient/n'q' clore
SFX rC clore close/n'q'j' clore
SFX rC clore closes/n' clore
SFX rC clore closions/n' clore
SFX rC clore closiez/n' clore
SFX rC clore clos/n' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rD N 3
SFX rD clore clos clore
SFX rD clore close clore
SFX rD clore closes clore
SFX tA Y 44
SFX tA re re/n'q'd'l'm't's' [dp]re
SFX tA re ant/n'q'l'm't's' [dp]re
SFX tA re u/L'D'Q' [dp]re
SFX tA re us/D'Q' [dp]re
SFX tA re ue/L'D'Q' [dp]re
SFX tA re ues/D'Q' [dp]re
SFX tA re s/n'q'j'l'm't' [dp]re
SFX tA dre d/n'q'l'm't's' dre
SFX tA pre pt/n'q'l'm't's' pre
SFX tA re ons/n'q'l't' [dp]re
SFX tA re ez/n'q'l'm' [dp]re
SFX tA re ent/n'q'l'm't's' [dp]re
SFX tA re ais/n'q'j'l'm't' [dp]re
SFX tA re ait/n'q'l'm't's' [dp]re
SFX tA re ions/n'q'l't' [dp]re
SFX tA re iez/n'q'l'm' [dp]re
SFX tA re aient/n'q'l'm't's' [dp]re
SFX tA re is/n'q'j'l'm't' [dp]re
SFX tA re it/n'q'l'm't's' [dp]re
SFX tA re îmes/n'q'l't' [dp]re
SFX tA re îtes/n'q'l'm' [dp]re
SFX tA re irent/n'q'l'm't's' [dp]re
SFX tA re rai/n'q'j'l'm't' [dp]re
SFX tA re ras/n'q'l'm't' [dp]re
SFX tA re ra/n'q'l'm't's' [dp]re
SFX tA re rons/n'q'l't' [dp]re
SFX tA re rez/n'q'l'm' [dp]re
SFX tA re ront/n'q'l'm't's' [dp]re
SFX tA re rais/n'q'j'l'm't' [dp]re
SFX tA re rait/n'q'l'm't's' [dp]re
SFX tA re rions/n'q'l't' [dp]re
SFX tA re riez/n'q'l'm' [dp]re
SFX tA re raient/n'q'l'm't's' [dp]re
SFX tA re e/n'q'j'l'm't's' [dp]re
SFX tA re es/n'l'm't' [dp]re
SFX tA re isse/n'q'j'l'm't' [dp]re
SFX tA re isses/n'q'l'm't' [dp]re
SFX tA re ît/n'q'l'm't's' [dp]re
SFX tA re issions/n'q'l't' [dp]re
SFX tA re issiez/n'q'l'm' [dp]re
SFX tA re issent/n'q'l'm't's' [dp]re
SFX tA re s/n'l'm't' [dp]re
SFX tA re ons/n'l' [dp]re
SFX tA re ez/n'l'm' [dp]re
SFX tD Y 43
SFX tD perdre perdre/m't's' perdre
SFX tD perdre perdant/m't's' perdre
SFX tD perdre perdu perdre
SFX tD perdre perdus perdre
SFX tD perdre perdue perdre
SFX tD perdre perdues perdre
SFX tD perdre perds/m't' perdre
SFX tD perdre perd/s' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tD perdre perdent/s' perdre
SFX tD perdre perdais/m't' perdre
SFX tD perdre perdait/s' perdre
SFX tD perdre perdions perdre
SFX tD perdre perdiez perdre
SFX tD perdre perdaient/s' perdre
SFX tD perdre perdis/m't' perdre
SFX tD perdre perdit/s' perdre
SFX tD perdre perdîmes perdre
SFX tD perdre perdîtes perdre
SFX tD perdre perdirent/s' perdre
SFX tD perdre perdrai/m' perdre
SFX tD perdre perdras/t' perdre
SFX tD perdre perdra/s' perdre
SFX tD perdre perdrons perdre
SFX tD perdre perdrez perdre
SFX tD perdre perdront/s' perdre
SFX tD perdre perdrais/m't' perdre
SFX tD perdre perdrait/s' perdre
SFX tD perdre perdrions perdre
SFX tD perdre perdriez perdre
SFX tD perdre perdraient/s' perdre
SFX tD perdre perde/m's' perdre
SFX tD perdre perdes/t' perdre
SFX tD perdre perdisse/m' perdre
SFX tD perdre perdisses/t' perdre
SFX tD perdre perdît/s' perdre
SFX tD perdre perdissions perdre
SFX tD perdre perdissiez perdre
SFX tD perdre perdissent/s' perdre
SFX tD perdre perds/t' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tE N 38
SFX tE dre dant dre
SFX tE dre ds dre
SFX tE dre d dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tE dre dent dre
SFX tE dre dais dre
SFX tE dre dait dre
SFX tE dre dions dre
SFX tE dre diez dre
SFX tE dre daient dre
SFX tE dre dis dre
SFX tE dre dit dre
SFX tE dre dîmes dre
SFX tE dre dîtes dre
SFX tE dre dirent dre
SFX tE dre drai dre
SFX tE dre dras dre
SFX tE dre dra dre
SFX tE dre drons dre
SFX tE dre drez dre
SFX tE dre dront dre
SFX tE dre drais dre
SFX tE dre drait dre
SFX tE dre drions dre
SFX tE dre driez dre
SFX tE dre draient dre
SFX tE dre de dre
SFX tE dre des dre
SFX tE dre disse dre
SFX tE dre disses dre
SFX tE dre dît dre
SFX tE dre dissions dre
SFX tE dre dissiez dre
SFX tE dre dissent dre
SFX tE dre ds dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tF Y 42
SFX tF rendre rendre/n'q'd'l'm't's' prendre
SFX tF rendre renant/n'q'l'm't's' prendre
SFX tF rendre ris/L'D'Q' prendre
SFX tF rendre rise/L'D'Q' prendre
SFX tF rendre rises/D'Q' prendre
SFX tF rendre rends/n'q'j'l'm't' prendre
SFX tF rendre rend/n'q'l'm't's' prendre
SFX tF rendre renons/n'q'l't' prendre
SFX tF rendre renez/n'q'l'm' prendre
SFX tF rendre rennent/n'q'l'm't's' prendre
SFX tF rendre renais/n'q'j'l'm't' prendre
SFX tF rendre renait/n'q'l'm't's' prendre
SFX tF rendre renions/n'q'l't' prendre
SFX tF rendre reniez/n'q'l'm' prendre
SFX tF rendre renaient/n'q'l'm't's' prendre
SFX tF rendre ris/n'q'j'l'm't' prendre
SFX tF rendre rit/n'q'l'm't's' prendre
SFX tF rendre rîmes/n'q'l't' prendre
SFX tF rendre rîtes/n'q'l'm' prendre
SFX tF rendre rirent/n'q'l'm't's' prendre
SFX tF rendre rendrai/n'q'j'l'm't' prendre
SFX tF rendre rendras/n'q'l'm't' prendre
SFX tF rendre rendra/n'q'l'm't's' prendre
SFX tF rendre rendrons/n'q'l't' prendre
SFX tF rendre rendrez/n'q'l'm' prendre
SFX tF rendre rendront/n'q'l'm't's' prendre
SFX tF rendre rendrais/n'q'j'l'm't' prendre
SFX tF rendre rendrait/n'q'l'm't's' prendre
SFX tF rendre rendrions/n'q'l't' prendre
SFX tF rendre rendriez/n'q'l'm' prendre
SFX tF rendre rendraient/n'q'l'm't's' prendre
SFX tF rendre renne/n'q'j'l'm't's' prendre
SFX tF rendre rennes/n'l'm't' prendre
SFX tF rendre risse/n'q'j'l'm't' prendre
SFX tF rendre risses/n'q'l'm't' prendre
SFX tF rendre rît/n'q'l'm't's' prendre
SFX tF rendre rissions/n'q'l't' prendre
SFX tF rendre rissiez/n'q'l'm' prendre
SFX tF rendre rissent/n'q'l'm't's' prendre
SFX tF rendre rends/n'l'm' prendre
SFX tF rendre renons/n'l' prendre
SFX tF rendre renez/n'l'm' prendre
SFX tG Y 42
SFX tG prendre prendre/m't's' prendre
SFX tG prendre prenant/m't's' prendre
SFX tG prendre pris/L'D'Q' prendre
SFX tG prendre prise/L'D'Q' prendre
SFX tG prendre prises/D'Q' prendre
SFX tG prendre prends/m't' prendre
SFX tG prendre prend/s' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tG prendre prennent/s' prendre
SFX tG prendre prenais/m't' prendre
SFX tG prendre prenait/s' prendre
SFX tG prendre prenions prendre
SFX tG prendre preniez prendre
SFX tG prendre prenaient/s' prendre
SFX tG prendre pris/m't' prendre
SFX tG prendre prit/s' prendre
SFX tG prendre prîmes prendre
SFX tG prendre prîtes prendre
SFX tG prendre prirent/s' prendre
SFX tG prendre prendrai/m' prendre
SFX tG prendre prendras/t' prendre
SFX tG prendre prendra/s' prendre
SFX tG prendre prendrons prendre
SFX tG prendre prendrez prendre
SFX tG prendre prendront/s' prendre
SFX tG prendre prendrais/m't' prendre
SFX tG prendre prendrait/s' prendre
SFX tG prendre prendrions prendre
SFX tG prendre prendriez prendre
SFX tG prendre prendraient/s' prendre
SFX tG prendre prenne/m's' prendre
SFX tG prendre prennes/t' prendre
SFX tG prendre prisse/m' prendre
SFX tG prendre prisses/t' prendre
SFX tG prendre prît/s' prendre
SFX tG prendre prissions prendre
SFX tG prendre prissiez prendre
SFX tG prendre prissent/s' prendre
SFX tG prendre prends/t' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tM N 31
SFX tM outre outant foutre
SFX tM outre outu foutre
SFX tM outre outus foutre
SFX tM outre outue foutre
SFX tM outre outues foutre
SFX tM outre ous foutre
SFX tM outre out foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tM outre outent foutre
SFX tM outre outais foutre
SFX tM outre outait foutre
SFX tM outre outions foutre
SFX tM outre outiez foutre
SFX tM outre outaient foutre
SFX tM outre outrai foutre
SFX tM outre outras foutre
SFX tM outre outra foutre
SFX tM outre outrons foutre
SFX tM outre outrez foutre
SFX tM outre outront foutre
SFX tM outre outrais foutre
SFX tM outre outrait foutre
SFX tM outre outrions foutre
SFX tM outre outriez foutre
SFX tM outre outraient foutre
SFX tM outre oute foutre
SFX tM outre outes foutre
SFX tM outre ous foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tU N 4
SFX tU istre issu tistre
SFX tU istre issus tistre
SFX tU istre issue tistre
SFX tU istre issues tistre
SFX uA Y 45
SFX uA tre tre/n'q'd'l'm't's' tre
SFX uA tre tant/n'q'l'm't's' tre
SFX uA tre tu/L'D'Q' tre
SFX uA tre tus/D'Q' tre
SFX uA tre tue/L'D'Q' tre
SFX uA tre tues/D'Q' tre
SFX uA ttre ts/n'q'j'l'm't' ttre
SFX uA ttre t/n'q'l'm't's' ttre
SFX uA tre ts/n'q'j'l'm't' embatre
SFX uA tre t/n'q'l'm't's' embatre
SFX uA tre tons/n'q'l't' tre
SFX uA tre tez/n'q'l'm' tre
SFX uA tre tent/n'q'l'm't's' tre
SFX uA tre tais/n'q'j'l'm't' tre
SFX uA tre tait/n'q'l'm't's' tre
SFX uA tre tions/n'q'l't' tre
SFX uA tre tiez/n'q'l'm' tre
SFX uA tre taient/n'q'l'm't's' tre
SFX uA tre tis/n'q'j'l'm't' tre
SFX uA tre tit/n'q'l'm't's' tre
SFX uA tre tîmes/n'q'l't' tre
SFX uA tre tîtes/n'q'l'm' tre
SFX uA tre tirent/n'q'l'm't's' tre
SFX uA tre trai/n'q'j'l'm't' tre
SFX uA tre tras/n'q'l'm't' tre
SFX uA tre tra/n'q'l'm't's' tre
SFX uA tre trons/n'q'l't' tre
SFX uA tre trez/n'q'l'm' tre
SFX uA tre tront/n'q'l'm't's' tre
SFX uA tre trais/n'q'j'l'm't' tre
SFX uA tre trait/n'q'l'm't's' tre
SFX uA tre trions/n'q'l't' tre
SFX uA tre triez/n'q'l'm' tre
SFX uA tre traient/n'q'l'm't's' tre
SFX uA tre te/n'q'j'l'm't's' tre
SFX uA tre tes/n'l'm't' tre
SFX uA tre tisse/n'q'j'l'm't' tre
SFX uA tre tisses/n'q'l'm't' tre
SFX uA tre tît/n'q'l'm't's' tre
SFX uA tre tissions/n'q'l't' tre
SFX uA tre tissiez/n'q'l'm' tre
SFX uA tre tissent/n'q'l'm't's' tre
SFX uA tre s/n'l'm't' tre
SFX uA tre tons/n'l' tre
SFX uA tre tez/n'l'm' tre
SFX uC Y 43
SFX uC battre battre/m't's' battre
SFX uC battre battant/m't's' battre
SFX uC battre battu battre
SFX uC battre battus battre
SFX uC battre battue battre
SFX uC battre battues battre
SFX uC battre bats/m't' battre
SFX uC battre bat/s' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uC battre battent/s' battre
SFX uC battre battais/m't' battre
SFX uC battre battait/s' battre
SFX uC battre battions battre
SFX uC battre battiez battre
SFX uC battre battaient/s' battre
SFX uC battre battis/m't' battre
SFX uC battre battit/s' battre
SFX uC battre battîmes battre
SFX uC battre battîtes battre
SFX uC battre battirent/s' battre
SFX uC battre battrai/m' battre
SFX uC battre battras/t' battre
SFX uC battre battra/s' battre
SFX uC battre battrons battre
SFX uC battre battrez battre
SFX uC battre battront/s' battre
SFX uC battre battrais/m't' battre
SFX uC battre battrait/s' battre
SFX uC battre battrions battre
SFX uC battre battriez battre
SFX uC battre battraient/s' battre
SFX uC battre batte/m's' battre
SFX uC battre battes/t' battre
SFX uC battre battisse/m' battre
SFX uC battre battisses/t' battre
SFX uC battre battît/s' battre
SFX uC battre battissions battre
SFX uC battre battissiez battre
SFX uC battre battissent/s' battre
SFX uC battre bats/t' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uD Y 33
SFX uD battre battre/s' battre
SFX uD battre battant/s' battre
SFX uD battre battu battre
SFX uD battre battus battre
SFX uD battre battue battre
SFX uD battre battues battre
SFX uD battre bat/s' battre
SFX uD battre battons battre
SFX uD battre battez battre
SFX uD battre battent/s' battre
SFX uD battre battait/s' battre
SFX uD battre battions battre
SFX uD battre battiez battre
SFX uD battre battaient/s' battre
SFX uD battre battit/s' battre
SFX uD battre battîmes battre
SFX uD battre battîtes battre
SFX uD battre battirent/s' battre
SFX uD battre battra/s' battre
SFX uD battre battrons battre
SFX uD battre battrez battre
SFX uD battre battront/s' battre
SFX uD battre battrait/s' battre
SFX uD battre battrions battre
SFX uD battre battriez battre
SFX uD battre battraient/s' battre
SFX uD battre batte/s' battre
SFX uD battre battît/s' battre
SFX uD battre battissions battre
SFX uD battre battissiez battre
SFX uD battre battissent/s' battre
SFX uD battre battons-nous battre
SFX uD battre battez-vous battre
SFX vA Y 42
SFX vA ettre ettre/n'q'd'l'm't's' mettre
SFX vA ettre ettant/n'q'l'm't's' mettre
SFX vA ettre is/L'D'Q' mettre
SFX vA ettre ise/L'D'Q' mettre
SFX vA ettre ises/D'Q' mettre
SFX vA ettre ets/n'q'j'l'm't' mettre
SFX vA ettre et/n'q'l'm't's' mettre
SFX vA ettre ettons/n'q'l't' mettre
SFX vA ettre ettez/n'q'l'm' mettre
SFX vA ettre ettent/n'q'l'm't's' mettre
SFX vA ettre ettais/n'q'j'l'm't' mettre
SFX vA ettre ettait/n'q'l'm't's' mettre
SFX vA ettre ettions/n'q'l't' mettre
SFX vA ettre ettiez/n'q'l'm' mettre
SFX vA ettre ettaient/n'q'l'm't's' mettre
SFX vA ettre is/n'q'j'l'm't' mettre
SFX vA ettre it/n'q'l'm't's' mettre
SFX vA ettre îmes/n'q'l't' mettre
SFX vA ettre îtes/n'q'l'm' mettre
SFX vA ettre irent/n'q'l'm't's' mettre
SFX vA ettre ettrai/n'q'j'l'm't' mettre
SFX vA ettre ettras/n'q'l'm't' mettre
SFX vA ettre ettra/n'q'l'm't's' mettre
SFX vA ettre ettrons/n'q'l't' mettre
SFX vA ettre ettrez/n'q'l'm' mettre
SFX vA ettre ettront/n'q'l'm't's' mettre
SFX vA ettre ettrais/n'q'j'l'm't' mettre
SFX vA ettre ettrait/n'q'l'm't's' mettre
SFX vA ettre ettrions/n'q'l't' mettre
SFX vA ettre ettriez/n'q'l'm' mettre
SFX vA ettre ettraient/n'q'l'm't's' mettre
SFX vA ettre ette/n'q'j'l'm't's' mettre
SFX vA ettre ettes/n'l'm't' mettre
SFX vA ettre isse/n'q'j'l'm't' mettre
SFX vA ettre isses/n'q'l'm't' mettre
SFX vA ettre ît/n'q'l'm't's' mettre
SFX vA ettre issions/n'q'l't' mettre
SFX vA ettre issiez/n'q'l'm' mettre
SFX vA ettre issent/n'q'l'm't's' mettre
SFX vA ettre ets/n'l'm't' mettre
SFX vA ettre ettons/n'l' mettre
SFX vA ettre ettez/n'l'm' mettre
SFX vC Y 42
SFX vC mettre mettre/m't's' mettre
SFX vC mettre mettant/m't's' mettre
SFX vC mettre mis mettre
SFX vC mettre mise mettre
SFX vC mettre mises mettre
SFX vC mettre mets/m't' mettre
SFX vC mettre met/s' mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX vC mettre mettent/s' mettre
SFX vC mettre mettais/m't' mettre
SFX vC mettre mettait/s' mettre
SFX vC mettre mettions mettre
SFX vC mettre mettiez mettre
SFX vC mettre mettaient/s' mettre
SFX vC mettre mis/m't' mettre
SFX vC mettre mit/s' mettre
SFX vC mettre mîmes mettre
SFX vC mettre mîtes mettre
SFX vC mettre mirent/s' mettre
SFX vC mettre mettrai/m' mettre
SFX vC mettre mettras/t' mettre
SFX vC mettre mettra/s' mettre
SFX vC mettre mettrons mettre
SFX vC mettre mettrez mettre
SFX vC mettre mettront/s' mettre
SFX vC mettre mettrais/m't' mettre
SFX vC mettre mettrait/s' mettre
SFX vC mettre mettrions mettre
SFX vC mettre mettriez mettre
SFX vC mettre mettraient/s' mettre
SFX vC mettre mette/m's' mettre
SFX vC mettre mettes/t' mettre
SFX vC mettre misse/m' mettre
SFX vC mettre misses/t' mettre
SFX vC mettre mît/s' mettre
SFX vC mettre missions mettre
SFX vC mettre missiez mettre
SFX vC mettre missent/s' mettre
SFX vC mettre mets mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX wA N 42
SFX wA eindre eignant eindre
SFX wA eindre eint eindre
SFX wA eindre eints eindre
SFX wA eindre einte eindre
SFX wA eindre eintes eindre
SFX wA eindre eins eindre
SFX wA eindre eint eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wA eindre eignent eindre
SFX wA eindre eignais eindre
SFX wA eindre eignait eindre
SFX wA eindre eignions eindre
SFX wA eindre eigniez eindre
SFX wA eindre eignaient eindre
SFX wA eindre eignis eindre
SFX wA eindre eignit eindre
SFX wA eindre eignîmes eindre
SFX wA eindre eignîtes eindre
SFX wA eindre eignirent eindre
SFX wA eindre eindrai eindre
SFX wA eindre eindras eindre
SFX wA eindre eindra eindre
SFX wA eindre eindrons eindre
SFX wA eindre eindrez eindre
SFX wA eindre eindront eindre
SFX wA eindre eindrais eindre
SFX wA eindre eindrait eindre
SFX wA eindre eindrions eindre
SFX wA eindre eindriez eindre
SFX wA eindre eindraient eindre
SFX wA eindre eigne eindre
SFX wA eindre eignes eindre
SFX wA eindre eignisse eindre
SFX wA eindre eignisses eindre
SFX wA eindre eignît eindre
SFX wA eindre eignissions eindre
SFX wA eindre eignissiez eindre
SFX wA eindre eignissent eindre
SFX wA eindre eins eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wB Y 43
SFX wB indre indre/n'q'd'l'm't's' indre
SFX wB indre ignant/n'q'l'm't's' indre
SFX wB indre int/L'D'Q' indre
SFX wB indre ints/D'Q' indre
SFX wB indre inte/L'D'Q' indre
SFX wB indre intes/D'Q' indre
SFX wB indre ins/n'q'j'l'm't' indre
SFX wB indre int/n'q'l'm't's' indre
SFX wB indre ignons/n'q'l't' indre
SFX wB indre ignez/n'q'l'm' indre
SFX wB indre ignent/n'q'l'm't's' indre
SFX wB indre ignais/n'q'j'l'm't' indre
SFX wB indre ignait/n'q'l'm't's' indre
SFX wB indre ignions/n'q'l't' indre
SFX wB indre igniez/n'q'l'm' indre
SFX wB indre ignaient/n'q'l'm't's' indre
SFX wB indre ignis/n'q'j'l'm't' indre
SFX wB indre ignit/n'q'l'm't's' indre
SFX wB indre ignîmes/n'q'l't' indre
SFX wB indre ignîtes/n'q'l'm' indre
SFX wB indre ignirent/n'q'l'm't's' indre
SFX wB indre indrai/n'q'j'l'm't' indre
SFX wB indre indras/n'q'l'm't' indre
SFX wB indre indra/n'q'l'm't's' indre
SFX wB indre indrons/n'q'l't' indre
SFX wB indre indrez/n'q'l'm' indre
SFX wB indre indront/n'q'l'm't's' indre
SFX wB indre indrais/n'q'j'l'm't' indre
SFX wB indre indrait/n'q'l'm't's' indre
SFX wB indre indrions/n'q'l't' indre
SFX wB indre indriez/n'q'l'm' indre
SFX wB indre indraient/n'q'l'm't's' indre
SFX wB indre igne/n'q'j'l'm't's' indre
SFX wB indre ignes/n'l'm't' indre
SFX wB indre ignisse/n'q'j'l'm't' indre
SFX wB indre ignisses/n'q'l'm't' indre
SFX wB indre ignît/n'q'l'm't's' indre
SFX wB indre ignissions/n'q'l't' indre
SFX wB indre ignissiez/n'q'l'm' indre
SFX wB indre ignissent/n'q'l'm't's' indre
SFX wB indre ins/n'l'm't' indre
SFX wB indre ignons/n'l' indre
SFX wB indre ignez/n'l'm' indre
SFX wD N 45
SFX wD aire aisant faire
SFX wD aire ait faire
SFX wD aire aits faire
SFX wD aire aite faire
SFX wD aire aites faire
SFX wD aire ais faire
SFX wD aire ait faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wD aire ont faire
SFX wD aire aisais faire
SFX wD aire aisait faire
SFX wD aire aisions faire
SFX wD aire aisiez faire
SFX wD aire aisaient faire
SFX wD aire is faire
SFX wD aire it faire
SFX wD aire îmes faire
SFX wD aire îtes faire
SFX wD aire irent faire
SFX wD aire erai faire
SFX wD aire eras faire
SFX wD aire era faire
SFX wD aire erons faire
SFX wD aire erez faire
SFX wD aire eront faire
SFX wD aire erais faire
SFX wD aire erait faire
SFX wD aire erions faire
SFX wD aire eriez faire
SFX wD aire eraient faire
SFX wD aire asse faire
SFX wD aire asses faire
SFX wD aire assions faire
SFX wD aire assiez faire
SFX wD aire assent faire
SFX wD aire isse faire
SFX wD aire isses faire
SFX wD aire ît faire
SFX wD aire issions faire
SFX wD aire issiez faire
SFX wD aire issent faire
SFX wD aire ais faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wF N 13
SFX wF faire faisant faire
SFX wF faire fait faire
SFX wF faire faits faire
SFX wF faire faite faire
SFX wF faire faites faire
SFX wF faire fais faire
SFX wF faire fait faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wF faire font faire
SFX wF faire fais faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wG N 5
SFX wG aire aisant faire
SFX wG aire ait faire
SFX wG aire aits faire
SFX wG aire aite faire
SFX wG aire aites faire
SFX wL Y 32
SFX wL raire raire/n'q'd'l'm't's' traire
SFX wL raire rayant/n'q'l'm't's' traire
SFX wL raire rait/L'D'Q' traire
SFX wL raire raits/D'Q' traire
SFX wL raire raite/L'D'Q' traire
SFX wL raire raites/D'Q' traire
SFX wL raire rais/n'q'j'l'm't' traire
SFX wL raire rait/n'q'l'm't's' traire
SFX wL raire rayons/n'q'l't' traire
SFX wL raire rayez/n'q'l'm' traire
SFX wL raire raient/n'q'l'm't's' traire
SFX wL raire rayais/n'q'j'l'm't' traire
SFX wL raire rayait/n'q'l'm't's' traire
SFX wL raire rayions/n'q'l't' traire
SFX wL raire rayiez/n'q'l'm' traire
SFX wL raire rayaient/n'q'l'm't's' traire
SFX wL raire rairai/n'q'j'l'm't' traire
SFX wL raire rairas/n'q'l'm't' traire
SFX wL raire raira/n'q'l'm't's' traire
SFX wL raire rairons/n'q'l't' traire
SFX wL raire rairez/n'q'l'm' traire
SFX wL raire rairont/n'q'l'm't's' traire
SFX wL raire rairais/n'q'j'l'm't' traire
SFX wL raire rairait/n'q'l'm't's' traire
SFX wL raire rairions/n'q'l't' traire
SFX wL raire rairiez/n'q'l'm' traire
SFX wL raire rairaient/n'q'l'm't's' traire
SFX wL raire raie/n'q'j'l'm't's' traire
SFX wL raire raies/n'q'l'm't' traire
SFX wL raire rais/n'l'm't' traire
SFX wL raire rayons/n'l' traire
SFX wL raire rayez/n'l'm' traire
SFX wM N 28
SFX wM aire ayant raire
SFX wM aire ait raire
SFX wM aire ais raire
SFX wM aire ait raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wM aire aient raire
SFX wM aire ayais raire
SFX wM aire ayait raire
SFX wM aire ayions raire
SFX wM aire ayiez raire
SFX wM aire ayaient raire
SFX wM aire airai raire
SFX wM aire airas raire
SFX wM aire aira raire
SFX wM aire airons raire
SFX wM aire airez raire
SFX wM aire airont raire
SFX wM aire airais raire
SFX wM aire airait raire
SFX wM aire airions raire
SFX wM aire airiez raire
SFX wM aire airaient raire
SFX wM aire aie raire
SFX wM aire aies raire
SFX wM aire ais raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wN N 39
SFX wN aire aisant aire
SFX wN aire ais aire
SFX wN aire ait taire
SFX wN aire aît plaire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wN aire aisent aire
SFX wN aire aisais aire
SFX wN aire aisait aire
SFX wN aire aisions aire
SFX wN aire aisiez aire
SFX wN aire aisaient aire
SFX wN aire us aire
SFX wN aire ut aire
SFX wN aire ûmes aire
SFX wN aire ûtes aire
SFX wN aire urent aire
SFX wN aire airai aire
SFX wN aire airas aire
SFX wN aire aira aire
SFX wN aire airons aire
SFX wN aire airez aire
SFX wN aire airont aire
SFX wN aire airais aire
SFX wN aire airait aire
SFX wN aire airions aire
SFX wN aire airiez aire
SFX wN aire airaient aire
SFX wN aire aise aire
SFX wN aire aises aire
SFX wN aire usse aire
SFX wN aire usses aire
SFX wN aire ût aire
SFX wN aire ussions aire
SFX wN aire ussiez aire
SFX wN aire ussent aire
SFX wN aire ais aire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wO N 42
SFX wO aindre aignant aindre
SFX wO aindre aint aindre
SFX wO aindre aints aindre
SFX wO aindre ainte aindre
SFX wO aindre aintes aindre
SFX wO aindre ains aindre
SFX wO aindre aint aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wO aindre aignent aindre
SFX wO aindre aignais aindre
SFX wO aindre aignait aindre
SFX wO aindre aignions aindre
SFX wO aindre aigniez aindre
SFX wO aindre aignaient aindre
SFX wO aindre aignis aindre
SFX wO aindre aignit aindre
SFX wO aindre aignîmes aindre
SFX wO aindre aignîtes aindre
SFX wO aindre aignirent aindre
SFX wO aindre aindrai aindre
SFX wO aindre aindras aindre
SFX wO aindre aindra aindre
SFX wO aindre aindrons aindre
SFX wO aindre aindrez aindre
SFX wO aindre aindront aindre
SFX wO aindre aindrais aindre
SFX wO aindre aindrait aindre
SFX wO aindre aindrions aindre
SFX wO aindre aindriez aindre
SFX wO aindre aindraient aindre
SFX wO aindre aigne aindre
SFX wO aindre aignes aindre
SFX wO aindre aignisse aindre
SFX wO aindre aignisses aindre
SFX wO aindre aignît aindre
SFX wO aindre aignissions aindre
SFX wO aindre aignissiez aindre
SFX wO aindre aignissent aindre
SFX wO aindre ains aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wP N 42
SFX wP aincre ainquant vaincre
SFX wP aincre aincu vaincre
SFX wP aincre aincus vaincre
SFX wP aincre aincue vaincre
SFX wP aincre aincues vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainc vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wP aincre ainquent vaincre
SFX wP aincre ainquais vaincre
SFX wP aincre ainquait vaincre
SFX wP aincre ainquions vaincre
SFX wP aincre ainquiez vaincre
SFX wP aincre ainquaient vaincre
SFX wP aincre ainquis vaincre
SFX wP aincre ainquit vaincre
SFX wP aincre ainquîmes vaincre
SFX wP aincre ainquîtes vaincre
SFX wP aincre ainquirent vaincre
SFX wP aincre aincrai vaincre
SFX wP aincre aincras vaincre
SFX wP aincre aincra vaincre
SFX wP aincre aincrons vaincre
SFX wP aincre aincrez vaincre
SFX wP aincre aincront vaincre
SFX wP aincre aincrais vaincre
SFX wP aincre aincrait vaincre
SFX wP aincre aincrions vaincre
SFX wP aincre aincriez vaincre
SFX wP aincre aincraient vaincre
SFX wP aincre ainque vaincre
SFX wP aincre ainques vaincre
SFX wP aincre ainquisse vaincre
SFX wP aincre ainquisses vaincre
SFX wP aincre ainquît vaincre
SFX wP aincre ainquissions vaincre
SFX wP aincre ainquissiez vaincre
SFX wP aincre ainquissent vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wQ Y 42
SFX wQ tre tre/n'q'd'm't's' tre
SFX wQ aître aissant/n'q'd'm't's' aître
SFX wQ aître ais/n'q'j'm't' aître
SFX wQ aître aît/n'q'm't's' aître
SFX wQ aître aissons/n'q't' aître
SFX wQ aître aissez/n'q'm' aître
SFX wQ aître aissent/n'q'm't's' aître
SFX wQ aître aissais/n'q'j'm't' aître
SFX wQ aître aissait/n'q'm't's' aître
SFX wQ aître aissions/n'q't' aître
SFX wQ aître aissiez/n'q'm' aître
SFX wQ aître aissaient/n'q'm't's' aître
SFX wQ aître us/n'q'j'm't' aître
SFX wQ aître ut/n'q'm't's' aître
SFX wQ aître ûmes/n'q't' aître
SFX wQ aître ûtes/n'q'm' aître
SFX wQ aître urent/n'q'm't's' aître
SFX wQ tre trai/n'q'j'm't' tre
SFX wQ tre tras/n'q'm't' tre
SFX wQ tre tra/n'q'm't's' tre
SFX wQ tre trons/n'q't' tre
SFX wQ tre trez/n'q'm' tre
SFX wQ tre tront/n'q'm't's' tre
SFX wQ tre trais/n'q'j'm't' tre
SFX wQ tre trait/n'q'm't's' tre
SFX wQ tre trions/n'q't' tre
SFX wQ tre triez/n'q'm' tre
SFX wQ tre traient/n'q'm't's' tre
SFX wQ aître aisse/n'q'j'm't's' aître
SFX wQ aître aisses/n'q'm't' aître
SFX wQ aître usse/n'q'j'm't' aître
SFX wQ aître usses/n'q'm't' aître
SFX wQ aître ût/n'q'm't's' aître
SFX wQ aître ussions/n'q't' aître
SFX wQ aître ussiez/n'q'm' aître
SFX wQ aître ussent/n'q'm't's' aître
SFX wQ aître ais/n'm' paraître
SFX wQ aître ais connaître
SFX wQ aître aissons/n' paraître
SFX wQ aître aissons connaître
SFX wQ aître aissez/n'm' paraître
SFX wQ aître aissez connaître
SFX wR N 42
SFX wR aître aissant naître
SFX wR aître é naître
SFX wR aître és naître
SFX wR aître ée naître
SFX wR aître ées naître
SFX wR aître ais naître
SFX wR aître aît naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wR aître aissent naître
SFX wR aître aissais naître
SFX wR aître aissait naître
SFX wR aître aissions naître
SFX wR aître aissiez naître
SFX wR aître aissaient naître
SFX wR aître aquis naître
SFX wR aître aquit naître
SFX wR aître aquîmes naître
SFX wR aître aquîtes naître
SFX wR aître aquirent naître
SFX wR tre trai tre
SFX wR tre tras tre
SFX wR tre tra tre
SFX wR tre trons tre
SFX wR tre trez tre
SFX wR tre tront tre
SFX wR tre trais tre
SFX wR tre trait tre
SFX wR tre trions tre
SFX wR tre triez tre
SFX wR tre traient tre
SFX wR aître aisse naître
SFX wR aître aisses naître
SFX wR aître aquisse naître
SFX wR aître aquisses naître
SFX wR aître aquît naître
SFX wR aître aquissions naître
SFX wR aître aquissiez naître
SFX wR aître aquissent naître
SFX wR aître ais naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wS N 42
SFX wS aître aissant paître
SFX wS aître u repaître
SFX wS aître us repaître
SFX wS aître ue repaître
SFX wS aître ues repaître
SFX wS aître ais paître
SFX wS aître aît paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wS aître aissent paître
SFX wS aître aissais paître
SFX wS aître aissait paître
SFX wS aître aissions paître
SFX wS aître aissiez paître
SFX wS aître aissaient paître
SFX wS aître us repaître
SFX wS aître ut repaître
SFX wS aître ûmes repaître
SFX wS aître ûtes repaître
SFX wS aître urent repaître
SFX wS tre trai tre
SFX wS tre tras tre
SFX wS tre tra tre
SFX wS tre trons tre
SFX wS tre trez tre
SFX wS tre tront tre
SFX wS tre trais tre
SFX wS tre trait tre
SFX wS tre trions tre
SFX wS tre triez tre
SFX wS tre traient tre
SFX wS aître aisse paître
SFX wS aître aisses paître
SFX wS aître usse repaître
SFX wS aître usses repaître
SFX wS aître ût repaître
SFX wS aître ussions repaître
SFX wS aître ussiez repaître
SFX wS aître ussent repaître
SFX wS aître ais paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wT N 46
SFX wT roître roissant croître
SFX wT roître rû recroître
SFX wT roître rûs recroître
SFX wT roître rûe recroître
SFX wT roître rûes recroître
SFX wT roître ru décroître
SFX wT roître rus décroître
SFX wT roître rue décroître
SFX wT roître rues décroître
SFX wT roître rois .croître
SFX wT roître roît .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wT roître roissent croître
SFX wT roître roissais croître
SFX wT roître roissait croître
SFX wT roître roissions croître
SFX wT roître roissiez croître
SFX wT roître roissaient croître
SFX wT roître rus .croître
SFX wT roître rut .croître
SFX wT roître rûmes croître
SFX wT roître rûtes croître
SFX wT roître rurent .croître
SFX wT tre trai tre
SFX wT tre tras tre
SFX wT tre tra tre
SFX wT tre trons tre
SFX wT tre trez tre
SFX wT tre tront tre
SFX wT tre trais tre
SFX wT tre trait tre
SFX wT tre trions tre
SFX wT tre triez tre
SFX wT tre traient tre
SFX wT roître roisse croître
SFX wT roître roisses croître
SFX wT roître russe .croître
SFX wT roître russes .croître
SFX wT roître rût croître
SFX wT roître russions .croître
SFX wT roître russiez .croître
SFX wT roître russent .croître
SFX wT roître rois .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wU N 15
SFX wU roître rû croître
SFX wU roître rûs croître
SFX wU roître rûe croître
SFX wU roître rûes croître
SFX wU roître roîs croître
SFX wU roître roît croître
SFX wU roître rûs croître
SFX wU roître rût croître
SFX wU roître rûrent croître
SFX wU roître rûsse croître
SFX wU roître rûsses croître
SFX wU roître rûssions croître
SFX wU roître rûssiez croître
SFX wU roître rûssent croître
SFX wU roître roîs croître
SFX wV Y 43
SFX wV tre tre/n'q'd'l'm't's' tre
SFX wV croître croissant/n'q'd'l'm't's' croître
SFX wV croître cru/L'D'Q' croître
SFX wV croître crus/D'Q' croître
SFX wV croître crue/L'D'Q' croître
SFX wV croître crues/D'Q' croître
SFX wV croître crois/n'q'j'l'm't' croître
SFX wV croître croît/n'q'l's' croître
SFX wV croître croissons/n'q'l' croître
SFX wV croître croissez/n'q'l' croître
SFX wV croître croissent/n'q'l's' croître
SFX wV croître croissais/n'q'j'l'm't' croître
SFX wV croître croissait/n'q'l's' croître
SFX wV croître croissions/n'q'l' croître
SFX wV croître croissiez/n'q'l' croître
SFX wV croître croissaient/n'q'l's' croître
SFX wV croître crus/n'q'j'l'm't' croître
SFX wV croître crut/n'q'l's' croître
SFX wV croître crûmes/n'q'l' croître
SFX wV croître crûtes/n'q'l' croître
SFX wV croître crurent/n'q'l's' croître
SFX wV tre trai/n'q'j'l'm' tre
SFX wV tre tras/n'q'l't' tre
SFX wV tre tra/n'q'l's' tre
SFX wV tre trons/n'q'l' tre
SFX wV tre trez/n'q'l' tre
SFX wV tre tront/n'q'l's' tre
SFX wV tre trais/n'q'j'l'm't' tre
SFX wV tre trait/n'q'l's' tre
SFX wV tre trions/n'q'l' tre
SFX wV tre triez/n'q'l' tre
SFX wV tre traient/n'q'l's' tre
SFX wV croître croisse/n'q'j'l'm's' croître
SFX wV croître croisses/n'q'l't' croître
SFX wV croître crusse/n'q'j'l'm' croître
SFX wV croître crusses/n'q'l't' croître
SFX wV croître crût/n'q'l's' croître
SFX wV croître crussions/n'q'l' croître
SFX wV croître crussiez/n'q'l' croître
SFX wV croître crussent/n'q'l's' croître
SFX wV croître crois/n'l'm' croître
SFX wV croître croissons/n'l' croître
SFX wV croître croissez/n'l'm' croître
SFX xA N 42
SFX xA roire royant croire
SFX xA roire ru croire
SFX xA roire rus croire
SFX xA roire rue croire
SFX xA roire rues croire
SFX xA roire rois croire
SFX xA roire roit croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xA roire roient croire
SFX xA roire royais croire
SFX xA roire royait croire
SFX xA roire royions croire
SFX xA roire royiez croire
SFX xA roire royaient croire
SFX xA roire rus croire
SFX xA roire rut croire
SFX xA roire rûmes croire
SFX xA roire rûtes croire
SFX xA roire rurent croire
SFX xA roire roirai croire
SFX xA roire roiras croire
SFX xA roire roira croire
SFX xA roire roirons croire
SFX xA roire roirez croire
SFX xA roire roiront croire
SFX xA roire roirais croire
SFX xA roire roirait croire
SFX xA roire roirions croire
SFX xA roire roiriez croire
SFX xA roire roiraient croire
SFX xA roire roie croire
SFX xA roire roies croire
SFX xA roire russe croire
SFX xA roire russes croire
SFX xA roire rût croire
SFX xA roire russions croire
SFX xA roire russiez croire
SFX xA roire russent croire
SFX xA roire rois croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xC N 42
SFX xC oire uvant boire
SFX xC oire u boire
SFX xC oire us boire
SFX xC oire ue boire
SFX xC oire ues boire
SFX xC oire ois boire
SFX xC oire oit boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xC oire oivent boire
SFX xC oire uvais boire
SFX xC oire uvait boire
SFX xC oire uvions boire
SFX xC oire uviez boire
SFX xC oire uvaient boire
SFX xC oire us boire
SFX xC oire ut boire
SFX xC oire ûmes boire
SFX xC oire ûtes boire
SFX xC oire urent boire
SFX xC oire oirai boire
SFX xC oire oiras boire
SFX xC oire oira boire
SFX xC oire oirons boire
SFX xC oire oirez boire
SFX xC oire oiront boire
SFX xC oire oirais boire
SFX xC oire oirait boire
SFX xC oire oirions boire
SFX xC oire oiriez boire
SFX xC oire oiraient boire
SFX xC oire oive boire
SFX xC oire oives boire
SFX xC oire usse boire
SFX xC oire usses boire
SFX xC oire ût boire
SFX xC oire ussions boire
SFX xC oire ussiez boire
SFX xC oire ussent boire
SFX xC oire ois boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xD Y 43
SFX xD boire boire/m't's' boire
SFX xD boire buvant/m't's' boire
SFX xD boire bu boire
SFX xD boire bus boire
SFX xD boire bue boire
SFX xD boire bues boire
SFX xD boire bois/m't' boire
SFX xD boire boit/s' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xD boire boivent/s' boire
SFX xD boire buvais/m't' boire
SFX xD boire buvait/s' boire
SFX xD boire buvions boire
SFX xD boire buviez boire
SFX xD boire buvaient/s' boire
SFX xD boire bus/m't' boire
SFX xD boire but/s' boire
SFX xD boire bûmes boire
SFX xD boire bûtes boire
SFX xD boire burent/s' boire
SFX xD boire boirai/m' boire
SFX xD boire boiras/t' boire
SFX xD boire boira/s' boire
SFX xD boire boirons boire
SFX xD boire boirez boire
SFX xD boire boiront/s' boire
SFX xD boire boirais/m't' boire
SFX xD boire boirait/s' boire
SFX xD boire boirions boire
SFX xD boire boiriez boire
SFX xD boire boiraient/s' boire
SFX xD boire boive/m's' boire
SFX xD boire boives/t' boire
SFX xD boire busse/m' boire
SFX xD boire busses/t' boire
SFX xD boire bût/s' boire
SFX xD boire bussions boire
SFX xD boire bussiez boire
SFX xD boire bussent/s' boire
SFX xD boire bois/t' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xJ N 3
SFX xJ clure clus clure
SFX xJ clure cluse clure
SFX xJ clure cluses clure
SFX xK Y 40
SFX xK clure clure/n'q'd'l'm't's' clure
SFX xK clure cluant/n'q'l'm't's' clure
SFX xK clure clus/L'D'Q' clure
SFX xK clure cluse/L'D'Q' clure
SFX xK clure cluses/D'Q' clure
SFX xK clure clus/n'q'j'l' clure
SFX xK clure clut/n'q'l' clure
SFX xK clure cluons/n'q'l' clure
SFX xK clure cluez/n'q'l' clure
SFX xK clure cluent/n'q'l' clure
SFX xK clure cluais/n'q'j'l' clure
SFX xK clure cluait/n'q'l' clure
SFX xK clure cluions/n'q'l' clure
SFX xK clure cluiez/n'q'l' clure
SFX xK clure cluaient/n'q'l' clure
SFX xK clure clûmes/n'q'l' clure
SFX xK clure clûtes/n'q'l' clure
SFX xK clure clurent/n'q'l' clure
SFX xK clure clurai/n'q'j'l' clure
SFX xK clure cluras/n'q'l' clure
SFX xK clure clura/n'q'l' clure
SFX xK clure clurons/n'q'l' clure
SFX xK clure clurez/n'q'l' clure
SFX xK clure cluront/n'q'l' clure
SFX xK clure clurais/n'q'j'l' clure
SFX xK clure clurait/n'q'l' clure
SFX xK clure clurions/n'q'l' clure
SFX xK clure cluriez/n'q'l' clure
SFX xK clure cluraient/n'q'l' clure
SFX xK clure clue/n'q'j'l' clure
SFX xK clure clues/n'q'l' clure
SFX xK clure clusse/n'q'j'l' clure
SFX xK clure clusses/n'q'l' clure
SFX xK clure clût/n'q'l' clure
SFX xK clure clussions/n'q'l' clure
SFX xK clure clussiez/n'q'l' clure
SFX xK clure clussent/n'q'l' clure
SFX xK clure clus/n'l' clure
SFX xK clure cluons/n'l' clure
SFX xK clure cluez/n'l' clure
SFX xL Y 44
SFX xL clure clure/n'q'd'l'm't's' clure
SFX xL clure cluant/n'q'l'm't's' clure
SFX xL clure clus/L'D'Q' inclure
SFX xL clure cluse/L'D'Q' inclure
SFX xL clure cluses/D'Q' inclure
SFX xL clure clu/L'D'Q' [eo].clure
SFX xL clure clus/D'Q' [eo].clure
SFX xL clure clue/L'D'Q' [eo].clure
SFX xL clure clues/D'Q' [eo].clure
SFX xL clure clus/n'q'j'l'm't' clure
SFX xL clure clut/n'q'l'm't's' clure
SFX xL clure cluons/n'q'l't' clure
SFX xL clure cluez/n'q'l'm' clure
SFX xL clure cluent/n'q'l'm't's' clure
SFX xL clure cluais/n'q'j'l'm't' clure
SFX xL clure cluait/n'q'l'm't's' clure
SFX xL clure cluions/n'q'l't' clure
SFX xL clure cluiez/n'q'l'm' clure
SFX xL clure cluaient/n'q'l'm't's' clure
SFX xL clure clûmes/n'q'l't' clure
SFX xL clure clûtes/n'q'l'm' clure
SFX xL clure clurent/n'q'l'm't's' clure
SFX xL clure clurai/n'q'j'l'm't' clure
SFX xL clure cluras/n'q'l'm't' clure
SFX xL clure clura/n'q'l'm't's' clure
SFX xL clure clurons/n'q'l't' clure
SFX xL clure clurez/n'q'l'm' clure
SFX xL clure cluront/n'q'l'm't's' clure
SFX xL clure clurais/n'q'j'l'm't' clure
SFX xL clure clurait/n'q'l'm't's' clure
SFX xL clure clurions/n'q'l't' clure
SFX xL clure cluriez/n'q'l'm' clure
SFX xL clure cluraient/n'q'l'm't's' clure
SFX xL clure clue/n'q'j'l'm't's' clure
SFX xL clure clues/n'l'm't' clure
SFX xL clure clusse/n'q'j'l'm't' clure
SFX xL clure clusses/n'q'l'm't' clure
SFX xL clure clût/n'q'l'm't's' clure
SFX xL clure clussions/n'q'l't' clure
SFX xL clure clussiez/n'q'l'm' clure
SFX xL clure clussent/n'q'l'm't's' clure
SFX xL clure clus/n'l'm't' clure
SFX xL clure cluons/n'l' clure
SFX xL clure cluez/n'l'm' clure
SFX xM N 14
SFX xM ourdre ourdant sourdre
SFX xM ourdre ourd sourdre
SFX xM ourdre ourdent sourdre
SFX xM ourdre ourdait sourdre
SFX xM ourdre ourdaient sourdre
SFX xM ourdre ourdit sourdre
SFX xM ourdre ourdirent sourdre
SFX xM ourdre ourdra sourdre
SFX xM ourdre ourdront sourdre
SFX xM ourdre ourdrait sourdre
SFX xM ourdre ourdraient sourdre
SFX xM ourdre ourde sourdre
SFX xM ourdre ourdît sourdre
SFX xM ourdre ourdissent sourdre
SFX xN Y 46
SFX xN soudre soudre/n'q'd'l'm't's' soudre
SFX xN soudre solvant/n'q'l'm't's' soudre
SFX xN soudre solu résoudre
SFX xN soudre solus résoudre
SFX xN soudre solue résoudre
SFX xN soudre solues résoudre
SFX xN soudre sous/L'D'Q' soudre
SFX xN soudre soute/L'D'Q' soudre
SFX xN soudre soutes/D'Q' soudre
SFX xN soudre sous/n'q'j'l'm't' soudre
SFX xN soudre sout/n'q'l'm't's' soudre
SFX xN soudre solvons/n'q'l't' soudre
SFX xN soudre solvez/n'q'l'm' soudre
SFX xN soudre solvent/n'q'l'm't's' soudre
SFX xN soudre solvais/n'q'j'l'm't' soudre
SFX xN soudre solvait/n'q'l'm't's' soudre
SFX xN soudre solvions/n'q'l't' soudre
SFX xN soudre solviez/n'q'l'm' soudre
SFX xN soudre solvaient/n'q'l'm't's' soudre
SFX xN soudre solus/n'q'j'l'm't' soudre
SFX xN soudre solut/n'q'l'm't's' soudre
SFX xN soudre solûmes/n'q'l't' soudre
SFX xN soudre solûtes/n'q'l'm' soudre
SFX xN soudre solurent/n'q'l'm't's' soudre
SFX xN soudre soudrai/n'q'j'l'm't' soudre
SFX xN soudre soudras/n'q'l'm't' soudre
SFX xN soudre soudra/n'q'l'm't's' soudre
SFX xN soudre soudrons/n'q'l't' soudre
SFX xN soudre soudrez/n'q'l'm' soudre
SFX xN soudre soudront/n'q'l'm't's' soudre
SFX xN soudre soudrais/n'q'j'l'm't' soudre
SFX xN soudre soudrait/n'q'l'm't's' soudre
SFX xN soudre soudrions/n'q'l't' soudre
SFX xN soudre soudriez/n'q'l'm' soudre
SFX xN soudre soudraient/n'q'l'm't's' soudre
SFX xN soudre solve/n'q'j'l'm't's' soudre
SFX xN soudre solves/n'l'm't' soudre
SFX xN soudre solusse/n'q'j'l'm't' soudre
SFX xN soudre solusses/n'q'l'm't' soudre
SFX xN soudre solût/n'q'l'm't's' soudre
SFX xN soudre solussions/n'q'l't' soudre
SFX xN soudre solussiez/n'q'l'm' soudre
SFX xN soudre solussent/n'q'l'm't's' soudre
SFX xN soudre sous/n'l'm' soudre
SFX xN soudre solvons/n'l' soudre
SFX xN soudre solvez/n'l'm' soudre
SFX xO N 42
SFX xO oudre ousant coudre
SFX xO oudre ousu coudre
SFX xO oudre ousus coudre
SFX xO oudre ousue coudre
SFX xO oudre ousues coudre
SFX xO oudre ouds coudre
SFX xO oudre oud coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xO oudre ousent coudre
SFX xO oudre ousais coudre
SFX xO oudre ousait coudre
SFX xO oudre ousions coudre
SFX xO oudre ousiez coudre
SFX xO oudre ousaient coudre
SFX xO oudre ousis coudre
SFX xO oudre ousit coudre
SFX xO oudre ousîmes coudre
SFX xO oudre ousîtes coudre
SFX xO oudre ousirent coudre
SFX xO oudre oudrai coudre
SFX xO oudre oudras coudre
SFX xO oudre oudra coudre
SFX xO oudre oudrons coudre
SFX xO oudre oudrez coudre
SFX xO oudre oudront coudre
SFX xO oudre oudrais coudre
SFX xO oudre oudrait coudre
SFX xO oudre oudrions coudre
SFX xO oudre oudriez coudre
SFX xO oudre oudraient coudre
SFX xO oudre ouse coudre
SFX xO oudre ouses coudre
SFX xO oudre ousisse coudre
SFX xO oudre ousisses coudre
SFX xO oudre ousît coudre
SFX xO oudre ousissions coudre
SFX xO oudre ousissiez coudre
SFX xO oudre ousissent coudre
SFX xO oudre ouds coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xP Y 43
SFX xP oudre oudre/n'q'd'l' moudre
SFX xP oudre oulant/n'q'l' moudre
SFX xP oudre oulu/L'D'Q' moudre
SFX xP oudre oulus/D'Q' moudre
SFX xP oudre oulue/L'D'Q' moudre
SFX xP oudre oulues/D'Q' moudre
SFX xP oudre ouds/n'q'l' moudre
SFX xP oudre oud/n'q'l' moudre
SFX xP oudre oulons/n'q'l' moudre
SFX xP oudre oulez/n'q'l' moudre
SFX xP oudre oulent/n'q'l' moudre
SFX xP oudre oulais/n'q'l' moudre
SFX xP oudre oulait/n'q'l' moudre
SFX xP oudre oulions/n'q'l' moudre
SFX xP oudre ouliez/n'q'l' moudre
SFX xP oudre oulaient/n'q'l' moudre
SFX xP oudre oulus/n'q'l' moudre
SFX xP oudre oulut/n'q'l' moudre
SFX xP oudre oulûmes/n'q'l' moudre
SFX xP oudre oulûtes/n'q'l' moudre
SFX xP oudre oulurent/n'q'l' moudre
SFX xP oudre oudrai/n'q'l' moudre
SFX xP oudre oudras/n'q'l' moudre
SFX xP oudre oudra/n'q'l' moudre
SFX xP oudre oudrons/n'q'l' moudre
SFX xP oudre oudrez/n'q'l' moudre
SFX xP oudre oudront/n'q'l' moudre
SFX xP oudre oudrais/n'q'l' moudre
SFX xP oudre oudrait/n'q'l' moudre
SFX xP oudre oudrions/n'q'l' moudre
SFX xP oudre oudriez/n'q'l' moudre
SFX xP oudre oudraient/n'q'l' moudre
SFX xP oudre oule/n'q'l' moudre
SFX xP oudre oules/n'l' moudre
SFX xP oudre oulusse/n'q'l' moudre
SFX xP oudre oulusses/n'q'l' moudre
SFX xP oudre oulût/n'q'l' moudre
SFX xP oudre oulussions/n'q'l' moudre
SFX xP oudre oulussiez/n'q'l' moudre
SFX xP oudre oulussent/n'q'l' moudre
SFX xP oudre ouds/n'l'm' moudre
SFX xP oudre oulons/n'l' moudre
SFX xP oudre oulez/n'l'm' moudre
SFX xQ N 42
SFX xQ uivre uivant suivre
SFX xQ uivre uivi suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivie suivre
SFX xQ uivre uivies suivre
SFX xQ uivre uis suivre
SFX xQ uivre uit suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xQ uivre uivent suivre
SFX xQ uivre uivais suivre
SFX xQ uivre uivait suivre
SFX xQ uivre uivions suivre
SFX xQ uivre uiviez suivre
SFX xQ uivre uivaient suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivit suivre
SFX xQ uivre uivîmes suivre
SFX xQ uivre uivîtes suivre
SFX xQ uivre uivirent suivre
SFX xQ uivre uivrai suivre
SFX xQ uivre uivras suivre
SFX xQ uivre uivra suivre
SFX xQ uivre uivrons suivre
SFX xQ uivre uivrez suivre
SFX xQ uivre uivront suivre
SFX xQ uivre uivrais suivre
SFX xQ uivre uivrait suivre
SFX xQ uivre uivrions suivre
SFX xQ uivre uivriez suivre
SFX xQ uivre uivraient suivre
SFX xQ uivre uive suivre
SFX xQ uivre uives suivre
SFX xQ uivre uivisse suivre
SFX xQ uivre uivisses suivre
SFX xQ uivre uivît suivre
SFX xQ uivre uivissions suivre
SFX xQ uivre uivissiez suivre
SFX xQ uivre uivissent suivre
SFX xQ uivre uis suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xR Y 16
SFX xR suivre suivre/s' suivre
SFX xR suivre suivant/s' suivre
SFX xR suivre suivi suivre
SFX xR suivre suit/s' suivre
SFX xR suivre suivent/s' suivre
SFX xR suivre suivait/s' suivre
SFX xR suivre suivaient/s' suivre
SFX xR suivre suivit/s' suivre
SFX xR suivre suivirent/s' suivre
SFX xR suivre suivra/s' suivre
SFX xR suivre suivront/s' suivre
SFX xR suivre suivrait/s' suivre
SFX xR suivre suivraient/s' suivre
SFX xR suivre suive/s' suivre
SFX xR suivre suivît/s' suivre
SFX xR suivre suivissent/s' suivre
SFX xS N 38
SFX xS ivre ivant vivre
SFX xS ivre is vivre
SFX xS ivre it vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX xS ivre ivent vivre
SFX xS ivre ivais vivre
SFX xS ivre ivait vivre
SFX xS ivre ivions vivre
SFX xS ivre iviez vivre
SFX xS ivre ivaient vivre
SFX xS ivre écus vivre
SFX xS ivre écut vivre
SFX xS ivre écûmes vivre
SFX xS ivre écûtes vivre
SFX xS ivre écurent vivre
SFX xS ivre ivrai vivre
SFX xS ivre ivras vivre
SFX xS ivre ivra vivre
SFX xS ivre ivrons vivre
SFX xS ivre ivrez vivre
SFX xS ivre ivront vivre
SFX xS ivre ivrais vivre
SFX xS ivre ivrait vivre
SFX xS ivre ivrions vivre
SFX xS ivre ivriez vivre
SFX xS ivre ivraient vivre
SFX xS ivre ive vivre
SFX xS ivre ives vivre
SFX xS ivre écusse vivre
SFX xS ivre écusses vivre
SFX xS ivre écût vivre
SFX xS ivre écussions vivre
SFX xS ivre écussiez vivre
SFX xS ivre écussent vivre
SFX xS ivre is vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX y1 Y 43
SFX y1 crire crire/n'q'd'l'm't's' crire
SFX y1 crire crivant/n'q'l'm't's' crire
SFX y1 crire crit/L'D'Q' crire
SFX y1 crire crits/D'Q' crire
SFX y1 crire crite/L'D'Q' crire
SFX y1 crire crites/D'Q' crire
SFX y1 crire cris/n'q'j'l'm't' crire
SFX y1 crire crit/n'q'l'm't's' crire
SFX y1 crire crivons/n'q'l't' crire
SFX y1 crire crivez/n'q'l'm' crire
SFX y1 crire crivent/n'q'l'm't's' crire
SFX y1 crire crivais/n'q'j'l'm't' crire
SFX y1 crire crivait/n'q'l'm't's' crire
SFX y1 crire crivions/n'q'l't' crire
SFX y1 crire criviez/n'q'l'm' crire
SFX y1 crire crivaient/n'q'l'm't's' crire
SFX y1 crire crivis/n'q'j'l'm't' crire
SFX y1 crire crivit/n'q'l'm't's' crire
SFX y1 crire crivîmes/n'q'l't' crire
SFX y1 crire crivîtes/n'q'l'm' crire
SFX y1 crire crivirent/n'q'l'm't's' crire
SFX y1 crire crirai/n'q'j'l'm't' crire
SFX y1 crire criras/n'q'l'm't' crire
SFX y1 crire crira/n'q'l'm't's' crire
SFX y1 crire crirons/n'q'l't' crire
SFX y1 crire crirez/n'q'l'm' crire
SFX y1 crire criront/n'q'l'm't's' crire
SFX y1 crire crirais/n'q'j'l'm't' crire
SFX y1 crire crirait/n'q'l'm't's' crire
SFX y1 crire cririons/n'q'l't' crire
SFX y1 crire cririez/n'q'l'm' crire
SFX y1 crire criraient/n'q'l'm't's' crire
SFX y1 crire crive/n'q'j'l'm't's' crire
SFX y1 crire crives/n'l'm't' crire
SFX y1 crire crivisse/n'q'j'l'm't' crire
SFX y1 crire crivisses/n'q'l'm't' crire
SFX y1 crire crivît/n'q'l'm't's' crire
SFX y1 crire crivissions/n'q'l't' crire
SFX y1 crire crivissiez/n'q'l'm' crire
SFX y1 crire crivissent/n'q'l'm't's' crire
SFX y1 crire cris/n'l'm't' crire
SFX y1 crire crivons/n'l' crire
SFX y1 crire crivez/n'l'm' crire
SFX yA N 42
SFX yA ire isant lire
SFX yA ire u lire
SFX yA ire us lire
SFX yA ire ue lire
SFX yA ire ues lire
SFX yA ire is lire
SFX yA ire it lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yA ire isent lire
SFX yA ire isais lire
SFX yA ire isait lire
SFX yA ire isions lire
SFX yA ire isiez lire
SFX yA ire isaient lire
SFX yA ire us lire
SFX yA ire ut lire
SFX yA ire ûmes lire
SFX yA ire ûtes lire
SFX yA ire urent lire
SFX yA ire irai lire
SFX yA ire iras lire
SFX yA ire ira lire
SFX yA ire irons lire
SFX yA ire irez lire
SFX yA ire iront lire
SFX yA ire irais lire
SFX yA ire irait lire
SFX yA ire irions lire
SFX yA ire iriez lire
SFX yA ire iraient lire
SFX yA ire ise lire
SFX yA ire ises lire
SFX yA ire usse lire
SFX yA ire usses lire
SFX yA ire ût lire
SFX yA ire ussions lire
SFX yA ire ussiez lire
SFX yA ire ussent lire
SFX yA ire is lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yB Y 43
SFX yB lire lire/n'q'd'l'm't's' lire
SFX yB lire lisant/n'q'l'm't's' lire
SFX yB lire lu/L'D'Q' lire
SFX yB lire lus/D'Q' lire
SFX yB lire lue/L'D'Q' lire
SFX yB lire lues/D'Q' lire
SFX yB lire lis/n'q'j'l'm't' lire
SFX yB lire lit/n'q'l'm't's' lire
SFX yB lire lisons/n'q'l't' lire
SFX yB lire lisez/n'q'l'm' lire
SFX yB lire lisent/n'q'l'm't's' lire
SFX yB lire lisais/n'q'j'l'm't' lire
SFX yB lire lisait/n'q'l'm't's' lire
SFX yB lire lisions/n'q'l't' lire
SFX yB lire lisiez/n'q'l'm' lire
SFX yB lire lisaient/n'q'l'm't's' lire
SFX yB lire lus/n'q'j'l'm't' lire
SFX yB lire lut/n'q'l'm't's' lire
SFX yB lire lûmes/n'q'l't' lire
SFX yB lire lûtes/n'q'l'm' lire
SFX yB lire lurent/n'q'l'm't's' lire
SFX yB lire lirai/n'q'j'l'm't' lire
SFX yB lire liras/n'q'l'm't' lire
SFX yB lire lira/n'q'l'm't's' lire
SFX yB lire lirons/n'q'l't' lire
SFX yB lire lirez/n'q'l'm' lire
SFX yB lire liront/n'q'l'm't's' lire
SFX yB lire lirais/n'q'j'l'm't' lire
SFX yB lire lirait/n'q'l'm't's' lire
SFX yB lire lirions/n'q'l't' lire
SFX yB lire liriez/n'q'l'm' lire
SFX yB lire liraient/n'q'l'm't's' lire
SFX yB lire lise/n'q'j'l'm't's' lire
SFX yB lire lises/n'l'm't' lire
SFX yB lire lusse/n'q'j'l'm't' lire
SFX yB lire lusses/n'q'l'm't' lire
SFX yB lire lût/n'q'l'm't's' lire
SFX yB lire lussions/n'q'l't' lire
SFX yB lire lussiez/n'q'l'm' lire
SFX yB lire lussent/n'q'l'm't's' lire
SFX yB lire lis/n'l'm' lire
SFX yB lire lisons/n'l' lire
SFX yB lire lisez/n'l'm' lire
SFX yC N 40
SFX yC ire isant dire
SFX yC ire it dire
SFX yC ire its dire
SFX yC ire ite dire
SFX yC ire ites dire
SFX yC ire is dire
SFX yC ire it dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yC ire isent dire
SFX yC ire isais dire
SFX yC ire isait dire
SFX yC ire isions dire
SFX yC ire isiez dire
SFX yC ire isaient dire
SFX yC ire îmes dire
SFX yC ire îtes dire
SFX yC ire irent dire
SFX yC ire irai dire
SFX yC ire iras dire
SFX yC ire ira dire
SFX yC ire irons dire
SFX yC ire irez dire
SFX yC ire iront dire
SFX yC ire irais dire
SFX yC ire irait dire
SFX yC ire irions dire
SFX yC ire iriez dire
SFX yC ire iraient dire
SFX yC ire ise dire
SFX yC ire ises dire
SFX yC ire isse dire
SFX yC ire isses dire
SFX yC ire ît dire
SFX yC ire issions dire
SFX yC ire issiez dire
SFX yC ire issent dire
SFX yC ire is dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yD Y 41
SFX yD dire dire/n'q'd'l'm't's' dire
SFX yD dire disant/n'q'l'm't's' dire
SFX yD dire dit/L'D'Q' dire
SFX yD dire dits/D'Q' dire
SFX yD dire dite/L'D'Q' dire
SFX yD dire dites/D'Q' dire
SFX yD dire dis/n'q'j'l'm't' dire
SFX yD dire dit/n'q'l'm't's' dire
SFX yD dire disons/n'q'l't' dire
SFX yD dire disez/n'q'l'm' dire
SFX yD dire disent/n'q'l'm't's' dire
SFX yD dire disais/n'q'j'l'm't' dire
SFX yD dire disait/n'q'l'm't's' dire
SFX yD dire disions/n'q'l't' dire
SFX yD dire disiez/n'q'l'm' dire
SFX yD dire disaient/n'q'l'm't's' dire
SFX yD dire dîmes/n'q'l't' dire
SFX yD dire dîtes/n'q'l'm' dire
SFX yD dire dirent/n'q'l'm't's' dire
SFX yD dire dirai/n'q'j'l'm't' dire
SFX yD dire diras/n'q'l'm't' dire
SFX yD dire dira/n'q'l'm't's' dire
SFX yD dire dirons/n'q'l't' dire
SFX yD dire direz/n'q'l'm' dire
SFX yD dire diront/n'q'l'm't's' dire
SFX yD dire dirais/n'q'j'l'm't' dire
SFX yD dire dirait/n'q'l'm't's' dire
SFX yD dire dirions/n'q'l't' dire
SFX yD dire diriez/n'q'l'm' dire
SFX yD dire diraient/n'q'l'm't's' dire
SFX yD dire dise/n'q'j'l'm't's' dire
SFX yD dire dises/n'l'm't' dire
SFX yD dire disse/n'q'j'l'm't' dire
SFX yD dire disses/n'q'l'm't' dire
SFX yD dire dît/n'q'l'm't's' dire
SFX yD dire dissions/n'q'l't' dire
SFX yD dire dissiez/n'q'l'm' dire
SFX yD dire dissent/n'q'l'm't's' dire
SFX yD dire dis/n'l'm't' dire
SFX yD dire disons/n'l' dire
SFX yD dire disez/n'l'm' dire
SFX yE N 37
SFX yE édire édisant édire
SFX yE édire édit édire
SFX yE édire édis édire
SFX yE édire édit édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yE édire édisent édire
SFX yE édire édisais édire
SFX yE édire édisait édire
SFX yE édire édisions édire
SFX yE édire édisiez édire
SFX yE édire édisaient édire
SFX yE édire édîmes édire
SFX yE édire édîtes édire
SFX yE édire édirent édire
SFX yE édire édirai édire
SFX yE édire édiras édire
SFX yE édire édira édire
SFX yE édire édirons édire
SFX yE édire édirez édire
SFX yE édire édiront édire
SFX yE édire édirais édire
SFX yE édire édirait édire
SFX yE édire édirions édire
SFX yE édire édiriez édire
SFX yE édire édiraient édire
SFX yE édire édise édire
SFX yE édire édises édire
SFX yE édire édisse édire
SFX yE édire édisses édire
SFX yE édire édît édire
SFX yE édire édissions édire
SFX yE édire édissiez édire
SFX yE édire édissent édire
SFX yE édire édis édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yF N 36
SFX yF audire audissant udire
SFX yF audire audit udire
SFX yF audire audits udire
SFX yF audire audite udire
SFX yF audire audites udire
SFX yF audire audis udire
SFX yF audire audit udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yF audire audissent udire
SFX yF audire audissais udire
SFX yF audire audissait udire
SFX yF audire audissions udire
SFX yF audire audissiez udire
SFX yF audire audissaient udire
SFX yF audire audîmes udire
SFX yF audire audîtes udire
SFX yF audire audirent udire
SFX yF audire audirai udire
SFX yF audire audiras udire
SFX yF audire audira udire
SFX yF audire audirons udire
SFX yF audire audirez udire
SFX yF audire audiront udire
SFX yF audire audirais udire
SFX yF audire audirait udire
SFX yF audire audirions udire
SFX yF audire audiriez udire
SFX yF audire audiraient udire
SFX yF audire audisse udire
SFX yF audire audisses udire
SFX yF audire audisse udire
SFX yF audire audît udire
SFX yF audire audis udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yG Y 38
SFX yG dire dire/m't's' dire
SFX yG dire disant/m't's' dire
SFX yG dire dit dire
SFX yG dire dis/m't' dire
SFX yG dire dit/s' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yG dire disent/s' dire
SFX yG dire disais/m't' dire
SFX yG dire disait/s' dire
SFX yG dire disions dire
SFX yG dire disiez dire
SFX yG dire disaient/s' dire
SFX yG dire dîmes dire
SFX yG dire dîtes dire
SFX yG dire dirent/s' dire
SFX yG dire dirai/m' dire
SFX yG dire diras/t' dire
SFX yG dire dira/s' dire
SFX yG dire dirons dire
SFX yG dire direz dire
SFX yG dire diront/s' dire
SFX yG dire dirais/m't' dire
SFX yG dire dirait/s' dire
SFX yG dire dirions dire
SFX yG dire diriez dire
SFX yG dire diraient/s' dire
SFX yG dire dise/m's' dire
SFX yG dire dises/t' dire
SFX yG dire disse/m' dire
SFX yG dire disses/t' dire
SFX yG dire dît/s' dire
SFX yG dire dissions dire
SFX yG dire dissiez dire
SFX yG dire dissent/s' dire
SFX yG dire dis/t' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yJ N 7
SFX yJ ruire ruissant uire
SFX yJ ruire rui uire
SFX yJ ruire ruit uire
SFX yJ ruire ruissent uire
SFX yJ ruire ruissait uire
SFX yJ ruire ruissaient uire
SFX yJ ruire ruisse uire
SFX yK N 4
SFX yK bduire bduit uire
SFX yK bduire bduits uire
SFX yK bduire bduite uire
SFX yK bduire bduites uire
SFX yL Y 43
SFX yL uire uire/n'q'd'l'm't's' uire
SFX yL uire uisant/n'q'l'm't's' uire
SFX yL uire uit/L'D'Q' uire
SFX yL uire uits/D'Q' uire
SFX yL uire uite/L'D'Q' uire
SFX yL uire uites/D'Q' uire
SFX yL uire uis/n'q'j'l'm't' uire
SFX yL uire uit/n'q'l'm't's' uire
SFX yL uire uisons/n'q'l't' uire
SFX yL uire uisez/n'q'l'm' uire
SFX yL uire uisent/n'q'l'm't's' uire
SFX yL uire uisais/n'q'j'l'm't' uire
SFX yL uire uisait/n'q'l'm't's' uire
SFX yL uire uisions/n'q'l't' uire
SFX yL uire uisiez/n'q'l'm' uire
SFX yL uire uisaient/n'q'l'm't's' uire
SFX yL uire uisis/n'q'j'l'm't' uire
SFX yL uire uisit/n'q'l'm't's' uire
SFX yL uire uisîmes/n'q'l't' uire
SFX yL uire uisîtes/n'q'l'm' uire
SFX yL uire uisirent/n'q'l'm't's' uire
SFX yL uire uirai/n'q'j'l't' uire
SFX yL uire uiras/n'q'l'm' uire
SFX yL uire uira/n'q'l'm't's' uire
SFX yL uire uirons/n'q'l't' uire
SFX yL uire uirez/n'q'l'm' uire
SFX yL uire uiront/n'q'l'm't's' uire
SFX yL uire uirais/n'q'j'l'm't' uire
SFX yL uire uirait/n'q'l'm't's' uire
SFX yL uire uirions/n'q'l't' uire
SFX yL uire uiriez/n'q'l'm' uire
SFX yL uire uiraient/n'q'l'm't's' uire
SFX yL uire uise/n'q'j'l'm't's' uire
SFX yL uire uises/n'l'm' uire
SFX yL uire uisisse/n'q'j'l't' uire
SFX yL uire uisisses/n'q'l'm' uire
SFX yL uire uisît/n'q'l'm't's' uire
SFX yL uire uisissions/n'q'l't' uire
SFX yL uire uisissiez/n'q'l'm' uire
SFX yL uire uisissent/n'q'l'm't's' uire
SFX yL uire uis/n'l'm' uire
SFX yL uire uisons/n'l' uire
SFX yL uire uisez/n'l'm' uire
SFX yM Y 43
SFX yM uire uire/n'q'd'l'm't's' uire
SFX yM uire uisant/n'q'l'm't's' uire
SFX yM uire uit/L'D'Q' uire
SFX yM uire uits/D'Q' uire
SFX yM uire uite/L'D'Q' uire
SFX yM uire uites/D'Q' uire
SFX yM uire uis/n'q'j'l'm't' uire
SFX yM uire uit/n'q'l'm't's' uire
SFX yM uire uisons/n'q'l't' uire
SFX yM uire uisez/n'q'l'm' uire
SFX yM uire uisent/n'q'l'm't's' uire
SFX yM uire uisais/n'q'j'l'm't' uire
SFX yM uire uisait/n'q'l'm't's' uire
SFX yM uire uisions/n'q'l't' uire
SFX yM uire uisiez/n'q'l'm' uire
SFX yM uire uisaient/n'q'l'm't's' uire
SFX yM uire uisis/n'q'j'l'm't' uire
SFX yM uire uisit/n'q'l'm't's' uire
SFX yM uire uisîmes/n'q'l't' uire
SFX yM uire uisîtes/n'q'l'm' uire
SFX yM uire uisirent/n'q'l'm't's' uire
SFX yM uire uirai/n'q'j'l'm't' uire
SFX yM uire uiras/n'q'l'm't' uire
SFX yM uire uira/n'q'l'm't's' uire
SFX yM uire uirons/n'q'l't' uire
SFX yM uire uirez/n'q'l'm' uire
SFX yM uire uiront/n'q'l'm't's' uire
SFX yM uire uirais/n'q'j'l'm't' uire
SFX yM uire uirait/n'q'l'm't's' uire
SFX yM uire uirions/n'q'l't' uire
SFX yM uire uiriez/n'q'l'm' uire
SFX yM uire uiraient/n'q'l'm't's' uire
SFX yM uire uise/n'q'j'l'm't's' uire
SFX yM uire uises/n'l'm't' uire
SFX yM uire uisisse/n'q'j'l'm't' uire
SFX yM uire uisisses/n'q'l'm't' uire
SFX yM uire uisît/n'q'l'm't's' uire
SFX yM uire uisissions/n'q'l't' uire
SFX yM uire uisissiez/n'q'l'm' uire
SFX yM uire uisissent/n'q'l'm't's' uire
SFX yM uire uis/n'l'm't' uire
SFX yM uire uisons/n'l' uire
SFX yM uire uisez/n'l'm' uire
SFX yN Y 33
SFX yN truire truire/s' uire
SFX yN truire truisant/s' uire
SFX yN truire truit uire
SFX yN truire truits uire
SFX yN truire truite uire
SFX yN truire truites uire
SFX yN truire truit/s' uire
SFX yN truire truisons uire
SFX yN truire truisez uire
SFX yN truire truisent/s' uire
SFX yN truire truisait/s' uire
SFX yN truire truisions uire
SFX yN truire truisiez uire
SFX yN truire truisaient/s' uire
SFX yN truire truisit/s' uire
SFX yN truire truisîmes uire
SFX yN truire truisîtes uire
SFX yN truire truisirent/s' uire
SFX yN truire truira/s' uire
SFX yN truire truirons uire
SFX yN truire truirez uire
SFX yN truire truiront/s' uire
SFX yN truire truirait/s' uire
SFX yN truire truirions uire
SFX yN truire truiriez uire
SFX yN truire truiraient/s' uire
SFX yN truire truise/s' uire
SFX yN truire truisît/s' uire
SFX yN truire truisissions uire
SFX yN truire truisissiez uire
SFX yN truire truisissent/s' uire
SFX yN truire truisons-nous uire
SFX yN truire truisez-vous uire
SFX yO Y 43
SFX yO détruire détruire/m't's' détruire
SFX yO détruire détruisant/m't's' détruire
SFX yO détruire détruit détruire
SFX yO détruire détruits détruire
SFX yO détruire détruite détruire
SFX yO détruire détruites détruire
SFX yO détruire détruis/m't' détruire
SFX yO détruire détruit/s' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yO détruire détruisent/s' détruire
SFX yO détruire détruisais/m't' détruire
SFX yO détruire détruisait/s' détruire
SFX yO détruire détruisions détruire
SFX yO détruire détruisiez détruire
SFX yO détruire détruisaient/s' détruire
SFX yO détruire détruisis/m't' détruire
SFX yO détruire détruisit/s' détruire
SFX yO détruire détruisîmes détruire
SFX yO détruire détruisîtes détruire
SFX yO détruire détruisirent/s' détruire
SFX yO détruire détruirai/m' détruire
SFX yO détruire détruiras/t' détruire
SFX yO détruire détruira/s' détruire
SFX yO détruire détruirons détruire
SFX yO détruire détruirez détruire
SFX yO détruire détruiront/s' détruire
SFX yO détruire détruirais/m't' détruire
SFX yO détruire détruirait/s' détruire
SFX yO détruire détruirions détruire
SFX yO détruire détruiriez détruire
SFX yO détruire détruiraient/s' détruire
SFX yO détruire détruise/m's' détruire
SFX yO détruire détruises/t' détruire
SFX yO détruire détruisisse/m' détruire
SFX yO détruire détruisisses/t' détruire
SFX yO détruire détruisît/s' détruire
SFX yO détruire détruisissions détruire
SFX yO détruire détruisissiez détruire
SFX yO détruire détruisissent/s' détruire
SFX yO détruire détruis/t' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yU N 39
SFX yU uire uisant uire
SFX yU uire ui uire
SFX yU uire uis uire
SFX yU uire uit uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yU uire uisent uire
SFX yU uire uisais uire
SFX yU uire uisait uire
SFX yU uire uisions uire
SFX yU uire uisiez uire
SFX yU uire uisaient uire
SFX yU uire uisis uire
SFX yU uire uisit uire
SFX yU uire uisîmes uire
SFX yU uire uisîtes uire
SFX yU uire uisirent uire
SFX yU uire uirai uire
SFX yU uire uiras uire
SFX yU uire uira uire
SFX yU uire uirons uire
SFX yU uire uirez uire
SFX yU uire uiront uire
SFX yU uire uirais uire
SFX yU uire uirait uire
SFX yU uire uirions uire
SFX yU uire uiriez uire
SFX yU uire uiraient uire
SFX yU uire uise uire
SFX yU uire uises uire
SFX yU uire uisisse uire
SFX yU uire uisisses uire
SFX yU uire uisît uire
SFX yU uire uisissions uire
SFX yU uire uisissiez uire
SFX yU uire uisissent uire
SFX yU uire uis uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yV N 44
SFX yV ire isant ire
SFX yV ire it nfire
SFX yV ire its nfire
SFX yV ire ite nfire
SFX yV ire ites nfire
SFX yV ire is cire
SFX yV ire ise cire
SFX yV ire ises cire
SFX yV ire i ffire
SFX yV ire is ire
SFX yV ire it ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yV ire isent ire
SFX yV ire isais ire
SFX yV ire isait ire
SFX yV ire isions ire
SFX yV ire isiez ire
SFX yV ire isaient ire
SFX yV ire îmes ire
SFX yV ire îtes ire
SFX yV ire irent ire
SFX yV ire irai ire
SFX yV ire iras ire
SFX yV ire ira ire
SFX yV ire irons ire
SFX yV ire irez ire
SFX yV ire iront ire
SFX yV ire irais ire
SFX yV ire irait ire
SFX yV ire irions ire
SFX yV ire iriez ire
SFX yV ire iraient ire
SFX yV ire ise ire
SFX yV ire ises ire
SFX yV ire isse ire
SFX yV ire isses ire
SFX yV ire ît ire
SFX yV ire issions ire
SFX yV ire issiez ire
SFX yV ire issent ire
SFX yV ire is ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yW N 37
SFX yW ire iant rire
SFX yW ire i rire
SFX yW ire is rire
SFX yW ire it rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yW ire ient rire
SFX yW ire iais rire
SFX yW ire iait rire
SFX yW ire iions rire
SFX yW ire iiez rire
SFX yW ire iaient rire
SFX yW ire îmes rire
SFX yW ire îtes rire
SFX yW ire irent rire
SFX yW ire irai rire
SFX yW ire iras rire
SFX yW ire ira rire
SFX yW ire irons rire
SFX yW ire irez rire
SFX yW ire iront rire
SFX yW ire irais rire
SFX yW ire irait rire
SFX yW ire irions rire
SFX yW ire iriez rire
SFX yW ire iraient rire
SFX yW ire ie rire
SFX yW ire ies rire
SFX yW ire isse rire
SFX yW ire isses rire
SFX yW ire ît rire
SFX yW ire issions rire
SFX yW ire issiez rire
SFX yW ire issent rire
SFX yW ire is rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yX Y 30
SFX yX nuire nuire/s' nuire
SFX yX nuire nuisant/s' nuire
SFX yX nuire nui nuire
SFX yX nuire nuit/s' nuire
SFX yX nuire nuisons nuire
SFX yX nuire nuisez nuire
SFX yX nuire nuisent/s' nuire
SFX yX nuire nuisait/s' nuire
SFX yX nuire nuisions nuire
SFX yX nuire nuisiez nuire
SFX yX nuire nuisaient/s' nuire
SFX yX nuire nuisit/s' nuire
SFX yX nuire nuisîmes nuire
SFX yX nuire nuisîtes nuire
SFX yX nuire nuisirent/s' nuire
SFX yX nuire nuira/s' nuire
SFX yX nuire nuirons nuire
SFX yX nuire nuirez nuire
SFX yX nuire nuiront/s' nuire
SFX yX nuire nuirait/s' nuire
SFX yX nuire nuirions nuire
SFX yX nuire nuiriez nuire
SFX yX nuire nuiraient/s' nuire
SFX yX nuire nuise/s' nuire
SFX yX nuire nuisît/s' nuire
SFX yX nuire nuisissions nuire
SFX yX nuire nuisissiez nuire
SFX yX nuire nuisissent/s' nuire
SFX yX nuire nuisons-nous nuire
SFX yX nuire nuisez-vous nuire
SFX yY Y 4
SFX yY ccire ccire/n'q'd'l'm't's' occire
SFX yY ccire ccis/L'D'Q' occire
SFX yY ccire ccise/L'D'Q' occire
SFX yY ccire ccises/D'Q' occire
SFX yZ N 13
SFX yZ rire risant rire
SFX yZ rire rit rire
SFX yZ rire rits rire
SFX yZ rire rite rire
SFX yZ rire rites rire
SFX yZ rire ris rire
SFX yZ rire rit rire
SFX yZ rire rirai rire
SFX yZ rire riras rire
SFX yZ rire rira rire
SFX yZ rire rirais rire
SFX yZ rire rirait rire
SFX yZ rire ris rire
SFX q+ Y 32
SFX q+ enir enu/L'D'Q' enir
SFX q+ enir enus/D'Q' enir
SFX q+ enir enue/L'D'Q' enir
SFX q+ enir enues/D'Q' enir
SFX q+ tir ti/L'D'Q' tir
SFX q+ tir tis/D'Q' tir
SFX q+ tir tie/L'D'Q' tir
SFX q+ tir ties/D'Q' tir
SFX q+ courir couru/L'D'Q' courir
SFX q+ courir courus/D'Q' courir
SFX q+ courir courue/L'D'Q' courir
SFX q+ courir courues/D'Q' courir
SFX q+ ivre écu vivre
SFX q+ ivre écus vivre
SFX q+ ivre écue vivre
SFX q+ ivre écues vivre
SFX q+ aire u aire
SFX q+ aire us aire
SFX q+ aire ue aire
SFX q+ aire ues aire
SFX q+ dre du dre
SFX q+ dre dus dre
SFX q+ dre due dre
SFX q+ dre dues dre
SFX q+ valoir valu .valoir
SFX q+ valoir valus .valoir
SFX q+ valoir value .valoir
SFX q+ valoir values .valoir
SFX q+ aître u/L'D'Q' aître
SFX q+ aître us/D'Q' aître
SFX q+ aître ue/L'D'Q' aître
SFX q+ aître ues/D'Q' aître
SFX q. Y 8
SFX q. enir enu/q' enir
SFX q. tir ti/q' tir
SFX q. courir couru/q' courir
SFX q. ivre écu vivre
SFX q. aire u aire
SFX q. dre du dre
SFX q. valoir valu/q' .valoir
SFX q. aître u/q' aître
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-moderne.dic version [6619ddfbaf].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-reforme1990.aff version [8d6758f52c].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-reforme1990.dic version [45464bd750].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-toutesvariantes.aff version [2af86dc167].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-toutesvariantes.dic version [1f00669699].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/frhyph.tex version [c1857b37d2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 |
% frhyph.tex % French hyphenation patterns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is available for free and can used and redistributed
% asis for free. Modified versions should have another name.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% *BEFORE* using this file *PLEASE* run checksum on it: %
% checksum -v frhyph.tex %
% to make sure that it hasn't been damaged. %
% Then if you notice anything wrong in french hyphenation please report to %
% R. Bastian, D. Flipo, B. Gaulle at the email address: %
% cesure-l@gutenberg.eu.org %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% checksum = "37208 1458 3078 34821"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% The most famous good guys who worked hard to obtain something usable.
% Jacques Desarmenien, Universite de Strasbourg :
% - << how to run TeX in a French environment: hyphenation, fonts,
% typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference
% - << La division par ordinateur des mots francais :
% application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-
% Gauthier-Villars
% Norman Buckle, UQAH (nb; many additions)
% Michael Ferguson, INRS-Telecommunications (mjf) June 1988
% Justin Bur, Universite de Montreal (jbb; checked against original list)
% all patterns including apostrophe missing from nb list
% after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle
% did their best effort to improve the list of patterns.
%
% -----------------------------------------------------------------
%
% Adaption of these patterns for
% - TeX Version 3.x and MLTeX 3.x (2.x)
% and
% - all fonts in T1/`Cork' and/or CM/OT1 encoding
% by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex'
% as of 1994-02-13 maintained by Bernd Raichle).
% (An adaption for the old MLTeX 2.x exists but can not be
% tested in lack of an executable.)
%
% -----------------------------------------------------------------
%
% The LaTeX2e identification of this file is done with the
% \ProvidesFile declaration. The group and \expandafter
% constructions keep \ProvidesFile undefined if this file
% is not used with LaTeX2e.
%
\begingroup \expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname ProvidesFile\endcsname\relax \else
% unfortnately Babel 3.6 destroys standard LaTeX \ProvidesFile command
% thus i check if it's still the good one. --bg 97/04/08
\def\PFnormaldef#1{%
\begingroup
\catcode`\ 10 %
\@makeother\/%
\@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}
\ifx\PFnormaldef\ProvidesFile
\ProvidesFile{frhyph.tex}[2002/12/11 %
French hyphenation patterns v2.12]
\fi
\fi
%
% Next we define some commands which are used inside the patterns.
% To keep them local, we enclose the rest of the file in a group
% (The \patterns command globally changes the hyphenation trie!).
%
\begingroup
%
% Make sure that neither quote nor doublequote are active:
\catcode`\'=12 \catcode`\"=12
%
%
% Because ^^e4 is used in the following macros which is read by
% TeX 2.x as ^^e or %, the comment character of TeX, some trick
% has to be found to avoid this problem. The same is true for
% the normally illegal character ^^? in the TeX 2.x code.
% Therefore in the code the exclamationmark ! is used instead of
% the circumflex ^ and its \catcode is set appropriately
% (normally \catcode`\!=12, in the code \catcode`\!=7).
%
% The following \catcode, \lccode assignments and macro definitions
% are defined in such a way that the following \pattern{...} list
% can be used for both, (ML)TeX 2.x and (ML)TeX 3.x.
% To implement this, distinguish version 2.x and 3.x of TeX:
%
\ifnum`\@=`\^^40 % true => TeX 3.x
%
% Assign appropriate \catcode and \lccode values for all
% accented characters used in the patterns:
\catcode"E0=11 \lccode"E0="E0 % \`a
\catcode"E2=11 \lccode"E2="E2 % \^a
\catcode"E7=11 \lccode"E7="E7 % \c{c}
\catcode"E8=11 \lccode"E8="E8 % \`e
\catcode"E9=11 \lccode"E9="E9 % \'e
\catcode"EA=11 \lccode"EA="EA % \^e
\catcode"EB=11 \lccode"EB="EB % \"e (*unused*)
\catcode"EE=11 \lccode"EE="EE % \^{\i}
\catcode"EF=11 \lccode"EF="EF % \"{\i}
\catcode"F4=11 \lccode"F4="F4 % \^o
\catcode"F7=11 \lccode"F7="F7 % \oe{}
\catcode"F9=11 \lccode"F9="F9 % \`u (*unused*)
\catcode"FB=11 \lccode"FB="FB % \^u
\catcode"FC=11 \lccode"FC="FC % \"u (*unused*)
\catcode"B8=11 \lccode"B8="B8 % \"y (*unused*)
%
\catcode`\!=7 % use !!xy instead of ^^xy
%
% Define the accent macros in such a way that they
% expand to single letters in font encoding T1.
\def\E{\errmessage{Hyphenation pattern file corrupted}}
\def\`#1{\ifx#1a!!e0\else \ifx#1e!!e8\else \E \fi\fi}
\def\'#1{\ifx#1e!!e9\else \E \fi}
\def\^#1{\ifx#1a!!e2\else \ifx#1e!!ea%
\else \ifx#1i!!ee\else \ifx#1o!!f4%
\else \ifx#1u!!fb\else \E \fi\fi\fi\fi\fi}
\def\"#1{\ifx#1i!!ef\else \ifx#1e!!eb%
\else \ifx#1o!!f6\else \E \fi\fi\fi}
\def\c#1{\ifx#1c!!e7\else \E \fi}
\def\oe{!!f7}% T1 encoded \oe
% For \oe which exists in T1 _and_ OT1 encoded fonts but with
% different glyph codes, patterns for both glyphs are included.
% Thus you can use either T1 encoded fonts, or OT1 encoded fonts
% and MLTeX's character substitution definition.
\def\n#1{#1}
\catcode'33=11 \lccode'33='33 % \oe
\def\oeOT{!![}% OT1 encoded \oe %{]} brace hack
%
\catcode`\!=12
%
\else % TeX 2
%
\expandafter\ifx\csname starthyph\endcsname\relax % MLTeX 2.x?
\message{This is TeX version 2.x without the MLTeX extensions.}
\message{I'm sorry, you cannot use these hyphenation patterns.}
\message{To process the french hyphenation patterns you need either}
\message{TeX version 3.x, MLTeX 3.x, or MLTeX based on TeX 2.x.}
\errmessage{I will ignore the hyphenation patterns.}
\endgroup \csname fi\endcsname\csname fi\endcsname\endinput
\fi
%
% Untested macros for MLTeX v2.x replaced by the following message:
\message{This is MLTeX based on TeX version 2.x. To use these}
\message{patterns please get in contact with the maintainers}
\message{mentioned in the comment at the top of this file.}
\errmessage{I will ignore the hyphenation patterns.}
\endgroup \csname fi\endcsname\endinput
%
\fi
%
\lccode`\'=`\'
%
\patterns{
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%*
2'2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%a
.a4
'a4
.\^a4
'\^a4
ab2h % df-bg 1998/02/07 for abhorrer
.ab3r\'ea
'ab3r\'ea
ad2h % df-bg 1998/02/07 for adh\`esion & co
a1\`e2dre
.ae3s4ch
'ae3s4ch
1alcool
a2l1algi
.amino1a2c
'amino1a2c
.ana3s4tr
'ana3s4tr
1a2nesth\'esi
.anti1a2
'anti1a2
.anti1e2
'anti1e2
.anti1\'e2
.anti2enne
'anti2enne
'anti1\'e2
.anti1s2
'anti1s2
.apo2s3ta
'apo2s3ta
apo2s3tr
archi1\'e2pis
.as2ta
'as2ta
a2s3tro
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%b
1ba
1b\^a
.bai2se3main % hyphen disappeared from french 5/2/94
1be
1b\'e
1b\`e
1b\^e
4be.
4bes.
2bent. % mute syllable: tombent (df) 22/02/94
1bi
1b\^i
.bi1a2c
.bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93
.bi1au
.bio1a2
.bi2s1a2
.bi1u2
1b2l
4ble.
4bles.
2blent. % mute syllable: troublent (df) 28/02/94
1bo
1b\^o
1b2r
4bre.
4bres.
2brent. % mute syllable: palabrent (df) 28/02/94
1bu
1b\^u
1by
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%c
1\c{c}
1ca
1c\^a
ca3ou3t2 % for caoutchou... added 3/1/94 df-bg
1ce
1c\'e
1c\`e
1c\^e
4ce.
4ces.
% words ending with -cent (df) 22/02/94
2cent.
ja3cent.
ac3cent.
\'e3cent.
munifi3cent.
r\'eti3cent.
privatdo3cent.
inno3cent.
es3cent.
acquies4cent.
is3cent.
immis4cent.
%
.ch4
1c2h
4ch.
2chb
4che.
4ches.
2chent. % mute syllable: touchent (df) 22/02/94
.ch\`e2vre3feuille % hyphen disappeared from french 5/2/94
2chg
ch2l
4chle.
4chles.
chlo2r3a2c
chlo2r3\'e2t
2chm
2chn
2chp
ch2r
4chre.
4chres.
2chs
2cht
2chw
1ci
1c\^i
.ci2s1alp
1c2k
4ck.
2ckb
4cke.
4ckes.
2ckent. % mute syllable: stockent (df) 22/02/94
2ckf
2ckg
2ck3h
2ckp
2cks
2ckt
1c2l
4cle.
4cles.
2clent. % mute syllable: encerclent (df) 28/02/94
1co
1c\^o
co1acc
co1acq
co1a2d
co1ap
co1ar
co1assoc
co1assur
co1au
co1ax
1c\oe0 % final zero essential to terminate cs
\n{1c\oeOT} % for \oe in OT1 _and_ T1 font encoding
co1\'e2
co1ef
co1en
co1ex
.con4 % missing from nb list
.cons4 % missing from nb list
.contre1s2c
.contre3ma\^itre % hyphen disappeared from french 5/2/94
co2nurb
.co1o2
.co2o3lie
1c2r
4cre.
4cres.
2crent. % mute syllable: massacrent (df) 28/02/94
1cu
1c\^u
1cy
.cul4 % -- as .con4 .cons4 (march 92)
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%d
1d'
1da
1d\^a
.dacryo1a2
d1d2h
1de
1d\'e
1d\`e
1d\^e
4de.
4des.
% words ending with -dent (df) 22/02/94
2dent.
d\'eca3dent.
\'e3dent.
cci3dent.
inci3dent.
confi3dent.
tri3dent.
dissi3dent.
chien3dent.
.ar3dent.
impu3dent.
pru3dent.
%
.d\'e1a2
.d\'e1io
.d\'e1o2
.d\'e2s % originaly in JD file
%.d\'e2s1a2 removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e3s2a3cr
.d\'es2a3m % .d\'es2a2mi introduced 09/17/92 bec. i
% can't see why d\'esamidonner ran in JD.
% Moved to .d\'es2a3m df 12/27/93.
.d\'e3s2a3tell
.d\'e3s2astr
.d\'e3s2c % 1 moved 3 due to .d\'e2s 09/17/92
%.d\'e2s1e2 removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e2s1\'e2
.d\'e3s2\'e3gr
.d\'e3s2ensib
.d\'e3s2ert
.d\'e3s2exu
%.d\'e2s3h removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e2s1i2
.d\'e3s2i3d
.d\'e3s2i3gn
.d\'e3s2i3li
.d\'e3s2i3nen
.d\'e3s2invo
.d\'e3s2i3r
.d\'e3s2ist
%.d\'e2s1o2 removed 09/17/92 because wrong for the
% original JD 500 words test
.d\'e3s2o3d\'e
.d\'e2s1\oe0 % final zero essential to terminate cs
\n{.d\'e2s1\oeOT} % for \oe in OT1 _and_ T1 font encoding
.d\'e3s2o3l
.d\'e3s2o3pil
.d\'e3s2orm
.d\'e3s2orp
.d\'e3s2oufr
.d\'e3s2p % 1 moved 3 due to .d\'e2s 09/17/92
.d\'e3s2t % 1 moved 3 due to .d\'e2s 09/17/92
.d\'e2s1u2n
3d2hal
3d2houd
1di
1d\^i
di2s3cop
.di1a2c\'e
.di1a2cid
.di1ald
.di1a2mi
.di1a2tom
.di1e2n
.di2s3h
2dlent. % mute syllable: jodlent (df) 28/02/94
1do
1d\^o
1d2r
4dre.
4dres.
2drent. % mute syllable: engendrent (df) 28/02/94
d1s2
1du
1d\^u
1dy
.dy2s3
.dy2s1a2
.dy2s1i2
.dy2s1o2 % missing from nb list
.dy2s1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%e
.e4
'e4
.\^e4
'\^e4
.\'e4
'\'e4
.\`e4
'\`e4
\'ed2hi % df-bg 1998/02/07 for r\'edhibitoire
1\'e2drie
1\'e2drique
1\'e2lectr
1\'e2l\'ement
.en1a2
'en1a2
1\'e2nerg
e2n1i2vr
.en1o2
'en1o2
\'epi2s3cop
\'epi3s4cope
e2s3cop
.eu2r1a2
'eu2r1a2
eu1s2tat
extra1
extra2c
extra2i
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%f
1fa
1f\^a
1fe
1f\'e
1f\`e
1f\^e
4fe.
4fes.
2fent. % mute syllable: agrafent chauffent (df) 22/02/94
%
1fi
1f\^i
1f2l
4fle.
4fles.
2flent. % mute syllable: gonflent (df) 28/02/94
1fo
1f\^o
1f2r
4fre.
4fres.
2frent. % mute syllable: balafrent (df) 28/02/94
f1s2
1fu
1f\^u
1fy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%g
1ga
1g\^a
1ge
1g\'e
1g\`e
1g\^e
4ge.
4ges.
% words ending with -gent (df) 22/02/94
2gent.
r\'e3gent.
entre3gent.
indi3gent.
dili3gent.
intelli3gent.
indul3gent.
tan3gent.
rin3gent.
contin3gent.
.ar3gent.
'ar3gent.
ser3gent.
ter3gent.
r\'esur3gent.
%
1g2ha
1g2he
1g2hi
1g2ho
1g2hy
1gi
1g\^i
1g2l
4gle.
4gles.
2glent. % mute syllable: meuglent (df) 28/02/94
1g2n
'a2g3nat % (df) 16/01/02
.a2g3nat % (df) 16/01/02
a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted)
co2g3niti % (df) 16/01/02
'i2g3n\'e % (df) 16/01/02
.i2g3n\'e % (df) 16/01/02
'i2g3ni % (df) 16/01/02
.i2g3ni % (df) 16/01/02
.ma2g3nicide % (df) 16/01/02
.ma2g3nificat % (df) 16/01/02
.ma2g3num % (df) 16/01/02
o2g3nomoni % (df) 16/01/02
o2g3nosi % (df) 16/01/02
.pro2g3nath % (df) 16/01/02
pu2g3nable % (df) 16/01/02
pu2g3nac % (df) 16/01/02
.sta2g3n
.syn2g3nath % (df) 16/01/02
wa2g3n
4gne.
4gnes.
2gnent. % mute syllable: accompagnent (df) 28/02/94
1go
1g\^o
1g2r
4gre.
4gres.
2grent. % mute syllable: immigrent (df) 28/02/94
1gu
1g\^u
g1s2
4gue.
4gues.
% words ending with -guent (df) 22/02/94
2guent.
.on3guent.
'on3guent.
%
1gy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%h
1ha
1h\^a
1he
1h\'e
1h\`e
1h\^e
h\'emi1\'e
h\'emo1p2t
4he.
4hes.
1hi
1h\^i
1ho
1h\^o
1hu
1h\^u
1hy
hypera2
hypere2
hyper\'e2
hyperi2
hypero2
hypers2
hype4r1
hyperu2
hypo1a2
hypo1e2 % missing from nb list
hypo1\'e2
hypo1i2
hypo1o2
hypo1s2
hypo1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%i
.i4
'i4
.\^i4
'\^i4
i1algi
i1arthr
i1\`e2dre
% ill patterns missing from nb list
il2l
cil3l
rcil4l
ucil4l
vacil4l
gil3l
hil3l
lil3l
l3lion
mil3l
mil4let
\'emil4l
semil4l
rmil4l
armil5l
capil3l
papil3la
papil3le
papil3li
papil3lom
pupil3l
piril3l
thril3l
cyril3l
ibril3l
pusil3l
.stil3l
distil3l
instil3l
fritil3l
boutil3l
vanil3lin
vanil3lis
vil3l
avil4l
chevil4l
uevil4l
uvil4l
xil3l
% end of ill patterns
1informat % missing from nb list
.in1a2
'in1a2
.in2a3nit
'in2a3nit
.in2augur
'in2augur
.in1e2
'in1e2
.in1\'e2
'in1\'e2
.in2effab % missing from nb list
'in2effab
.in2\'e3lucta
'in2\'e3lucta
.in2\'e3narra
'in2\'e3narra
.in2ept
'in2ept
.in2er
'in2er
.in2exora % missing from nb list
'in2exora
.in1i2
'in1i2
.in2i3miti
'in2i3miti
.in2i3q
'in2i3q
.in2i3t
'in2i3t
.in1o2
'in1o2
.in2o3cul
'in2o3cul
.in2ond
'in2ond
.in1s2tab
'in1s2tab
'inte4r3
.intera2
'intera2
.intere2
'intere2
.inter\'e2
'inter\'e2
.interi2
'interi2
.intero2
'intero2
.inte4r3
.interu2
'interu2
.inters2
'inters2
.in1u2
'in1u2
.in2uit
'in2uit
.in2u3l
'in2u3l
io1a2ct
i1oxy
i1s2tat
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%j
1j
2jk
4je.
4jes.
2jent. % mute syllable: gal\`ejent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%k
1ka
1k\^a
1ke
1k\'e
1k\`e
1k\^e
4ke.
4kes.
2kent. % mute syllable: jerkent (df) 22/02/94
1k2h
4kh.
.kh4
1ki
1k\^i
1ko
1k\^o
1k2r
1ku
1k\^u
1ky
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%l
1la
1l\^a
1l\`a
la2w3re
1le
1l\'e
1l\`e
1l\^e
4le.
4les.
% words ending with -lent (df) 22/02/94
2lent.
.ta3lent.
iva3lent.
\'equiva4lent.
monova3lent.
polyva3lent.
re3lent.
.do3lent.
indo3lent.
inso3lent.
turbu3lent.
succu3lent.
f\'ecu3lent.
trucu3lent.
opu3lent.
corpu3lent.
ru3lent.
sporu4lent.
%
1li
1l\^i
1lo
1l\^o
l1s2t
1lu
1l\^u
1ly
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%m
1ma
1m\^a
.ma2c3k
.macro1s2c
.ma2l1a2dres
.ma2l1a2dro
.ma2l1ais\'e
.ma2l1ap
.ma2l1a2v
.ma2l1en
.ma2l1int
.ma2l1oc
.ma2l1o2d
.ma2r1x % nb (jbb: ?)
1me
1m\'e
1m\`e
1m\^e
.m\'e2g1oh
.m\'e2sa % missing from nb list
.m\'e3san % missing from nb list
.m\'e2s1es
.m\'e2s1i
.m\'e2s1u2s
.m\'eta1s2ta
4me.
4mes.
% words ending with -ment (df) 22/02/94
\^a2ment.
da2ment.
fa2ment.
amalga2ment.
cla2ment.
ra2ment.
temp\'era3ment.
ta2ment.
testa3ment.
qua2ment.
\`e2ment.
car\^e2ment.
diaphrag2ment.
ryth2ment.
ai2ment.
rai3ment.
ab\^i2ment.
\'eci2ment.
vidi2ment.
subli2ment.
\'eli2ment.
reli2ment.
mi2ment.
ani2ment.
veni2ment.
ri2ment.
d\'etri3ment.
nutri3ment.
inti2ment.
esti2ment.
l2ment.
flam2ment.
gram2ment.
.gem2ment.
om2ment.
.com3ment.
\^o2ment.
slalo2ment.
chro2ment.
to2ment.
ar2ment.
.sar3ment.
er2ment.
antifer3ment.
.ser3ment.
fir2ment.
or2ment.
as2ment.
au2ment.
\'ecu2ment.
fu2ment.
hu2ment.
fichu3ment.
llu2ment.
plu2ment.
bou2ment.
bru2ment.
su2ment.
tu2ment.
%
1mi
1m\^i
.milli1am
1m2n\'emo
1m2n\`es
1m2n\'esi
1mo
1m\^o
1m\oe0 % final zero essential to terminate cs
\n{1m\oeOT} % for \oe in OT1 _and_ T1 font encoding
.mono1a2
.mono1e2
.mono1\'e2
.mono1i2
.mono1\"i2d\'e
.mono1o2
.mono1u2
.mono1s2
mon2t3r\'eal % missing from nb list
m1s2
1mu
1m\^u
1my
moye2n1\^a2g
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%n
1na
1n\^a
1ne
1n\'e
1n\`e
1n\^e
4ne.
4nes.
% words ending with -nent (df) 22/02/94
2nent. % fric-tionnent - syllable muette - bg 27/12/93
r\'ema3nent.
imma3nent.
perma3nent.
.\'emi3nent.
pr\'e\'emi3nent.
pro\'emi3nent.
sur\'emi3nent.
immi3nent.
conti3nent.
perti3nent.
absti3nent.
%
1ni
1n\^i
1no
1n\^o
1n\oe0 % final zero essential to terminate cs
\n{1n\oeOT} % for \oe in OT1 _and_ T1 font encoding
.no2n1obs
1nu
1n\^u
n3s2at.
n3s2ats.
n1x
1ny
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%o
.o4
'o4
'\^o4
.\^o4
%'\"o2 % mjf % deleted 3/1/94 df-bg
o2b3long
1octet % missing from nb list
o1d2l
o1\`e2dre
o1ioni
ombud2s3
omni1s2
o1s2tas
o1s2tat
o1s2t\'ero
o1s2tim
o1s2tom
o1s2trad
o1s2tratu
o1s2triction
.oua1ou
'oua1ou
.ovi1s2c
'ovi1s2c
oxy1a2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%p
1pa
1p\^a
pal\'eo1\'e2
.pa2n1a2f
.pa2n1a2m\'e
.pa2n1a2ra
.pa2n1is
.pa2n1o2ph
.pa2n1opt
.pa2r1a2che
.pa2r1a2ch\`e
.para1s2
.pa2r3h\'e
1pe
1p\'e
1p\`e
1p\^e
4pe.
4pes.
% words ending with -pent (df) 22/02/94
2pent.
re3pent.
.ar3pent.
'ar3pent.
ser3pent.
%
.pen2ta % pent- or penta- but never pen-ta bg 12/27/93
per3h
p\'e2nul % p\'e2n1ul moved back 09/17/92 to JD def.
.pe4r
.per1a2
.per1e2
.per1\'e2
.per1i2
.per1o2
.per1u2
p\'e1r2\'e2q % 2r1 moved 09/17/92 to 1r2(it was a typo)
.p\'eri1os
.p\'eri1s2
.p\'eri2s3s
.p\'eri2s3ta
.p\'eri1u2
1p2h
.ph4
4ph.
.phalan3s2t
4phe.
4phes.
2phent. % mute syllable: triomphent (df) 22/02/94
ph2l
4phle.
4phles.
2phn
photo1s2
ph2r
4phre.
4phres.
2phs
2pht
3ph2tal\'e
3ph2tis
%%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94
%%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92
%%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94
1pi
1p\^i
1p2l
4ple.
4ples.
2plent. % mute syllable: accouplent (df) 28/02/94
.pluri1a
1p2n\'e
1p2neu
1po
1p\^o
po1astre
poly1a2
poly1e2
poly1\'e2
poly1\`e2
poly1i2
poly1o2
poly1s2
poly1u2
.pon2tet % JD hypenated it asis 09/17/92, exception
.pos2t3h
.pos2t1in
.pos2t1o2
.pos2t3r
.post1s2
1p2r
4pre.
4pres.
2prent. % mute syllable: empourprent (df) 28/02/94
.pr\'e1a2
.pr\'e2a3la % missing from nb list
.pr\'e2au
.pr\'e1\'e2
.pr\'e1e2
.pr\'e1i2
.pr\'e1o2
.pr\'e1u2
.pr\'e1s2
.pro1\'e2
.pro1s2c\'e
pro2s3tat
.prou3d2h
1p2sych
.psycho1a2n
1p2t\`er
1p2t\'er
1pu
.pud1d2l
1p\^u
1py
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%q
1q
4que.
4ques.
% words ending with -quent (df) 22/02/94
2quent.
\'e3quent.
\'elo3quent.
grandilo3quent.
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%r
1ra
1r\^a
radio1a2 % missing from nb list
1re
1r\'e
1r\`e
1r\^e
.r\'e1a2
.r\'e2a3le
.r\'e2a3lis
.r\'e2a3lit
.r\'e2aux
.r\'e1\'e2
.r\'e1e2
.r\'e2el
.r\'e2er
.r\'e2\`er
.r\'e1i2
.r\'e2i3fi
.r\'e1o2
.re1s2
.re2s3cap
.re2s3cisi % for res-cision 09/17/92 (missing from nb)
.re2s3ciso % for res-cisoire 09/17/92(missing from nb)
.re2s3cou
.re2s3cri
.re2s3pect
.re2s3pir
.re2s3plend
.re2s3pons
.re2s3quil
.re2s3s
.re2s3t
.re3s4tab
.re3s4tag
.re3s4tand
.re3s4tat
.re3s4t\'en
.re3s4t\'er
.re3s4tim
.re3s4tip
.re3s4toc
.re3s4top
.re3s4tr
.re4s5trein
.re4s5trict
.re4s5trin
.re3s4tu
.re3s4ty
.r\'eu2 %.r\'e1u2 % pattern rejected 12/2/92
% (don't hyphenate as r\'e-union nor r\'eu-nion)
.r\'e2uss
.r\'etro1a2
4re.
4res.
% words ending with -rent (df) 22/02/94
2rent. % es-p\`erent - syllable muette - bg 27/12/93
.pa3rent.
appa3rent.
transpa3rent.
\'e3rent.
tor3rent.
cur3rent.
%
1r2h
4rhe.
4rhes.
2r3heur
2r3hydr
1ri
1r\^i
1ro
1r\^o
1ru
1r\^u
1ry
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%s
1sa
1s\^a
.sch4
1s2caph
1s2cl\'er
1s2cop
1s2ch
e2s3ch
i2s3ch\'e
i2s3chia
i2s3chio
4sch.
4sche.
4sches.
2schs
1se
1s\'e
1s\`e
1s\^e
sesqui1a2
4se.
4ses.
% words ending with -sent (df) 22/02/94
2sent. % massent - syllable muette - bg 27/12/93
ab3sent.
pr\'e3sent.
.res3sent.
%
.seu2le % jbb
.sh4
1s2h
4sh.
4she.
4shes.
2shent. % mute syllable: smashent (df) 22/02/94
2shm
2s3hom
2shr
2shs
1si
1s\^i
1s2lav
1s2lov
1so
1s\^o
1s\oe0 % final zero essential to terminate cs
\n{1s\oeOT} % for \oe in OT1 _and_ T1 font encoding
1s2patia
1s2perm
1s2por
1s2ph\`er
1s2ph\'er
1s2piel
1s2piros
1s2tandard
1s2tein
st\'er\'eo1s2
1s2tigm
1s2tock
1s2tomos
1s2troph
1s2tructu
1s2tyle
1su
1s\^u
.su2b1a2
.su3b2alt
.su2b1\'e2
.su3b2\'e3r
.su2b1in
.su2b3limin
.su2b3lin
.su2b3lu
sub1s2
.su2b1ur
supero2
supe4r1
supers2
.su2r1a2
su3r2ah
.su3r2a3t
.su2r1e2
.su3r2eau
.su3r2ell
.su3r2et
.su2r1\'e2
.su2r3h
.su2r1i2m
.su2r1inf
.su2r1int
.su2r1of
.su2r1ox
1sy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%t
1ta
1t\^a
1t\`a
tachy1a2
tchin3t2
1te
1t\'e
1t\`e
1t\^e
t\'el\'e1e2
t\'el\'e1i2
t\'el\'e1o2b
t\'el\'e1o2p
t\'el\'e1s2
4te.
4tes.
% words ending with -tent (df) 22/02/94
2tent. % mentent - syllable muette - bg 27/12/93
.la3tent.
.pa3tent.
comp\'e3tent.
\'eni3tent.
m\'econ3tent.
omnipo3tent.
ventripo3tent.
\'equipo3tent.
impo3tent.
mit3tent.
%
.th4
1t2h
4th.
4the.
4thes.
thermo1s2
2t3heur
2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93
2thm
2thn
th2r
4thre.
4thres.
2ths
1ti
1t\^i
1to
1t\^o
1t2r
tran2s1a2
tran3s2act
tran3s2ats
tran2s3h
tran2s1o2
tran2s3p
tran2s1u2
4tre.
4tres.
2trent. % mute syllable: infiltrent (df) 28/02/94
.tri1a2c
.tri1a2n
.tri1a2t
.tri1o2n
t1t2l
1tu
1t\^u
tung2s3
1ty
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%u
.u4
'u4
.\^u4
'\^u4
uni1o2v
uni1a2x
u2s3tr
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%v
1va
1v\^a
1ve
1v\'e
1v\`e
1v\^e
v\'elo1s2ki
4ve.
4ves.
% words ending with -vent (df) 22/02/94
2vent.
conni3vent.
.sou3vent.
%
1vi
1v\^i
1vo
1v\^o
vol2t1amp
1v2r
4vre.
4vres.
2vrent. % mute syllable: recouvrent (df) 28/02/94
1vu
1v\^u
1vy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%w
1wa
1we
4we.
4wes.
2went. % mute syllable: interviewent (df) 22/02/94
1wi
1wo
1wu
1w2r
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%x
2xent. % mute syllable: malaxent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%y
.y4
'y4
y1asth
y1s2tom
y1algi
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%z
1za
1ze
1z\'e
1z\`e
4ze.
4zes.
% words ending with -zent (df) 22/02/94
2zent.
privatdo3zent.
%
1zi
1zo
1zu
1zy
}
\endgroup
\endinput
%%
%% End of file `frhyph.tex'.
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/hyph-fr.tex version [394d4d9505].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 |
% This file is part of hyph-utf8 package and resulted from
% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
%
% Source: frhyph.tex <2006-10-20>
% Author: R. Bastian, D. Flipo, B. Gaulle <cesure-l at gutenberg.eu.org>
%
% The above mentioned file should become obsolete,
% and the author of the original file should preferaby modify this file instead.
%
% Modificatios were needed in order to support native UTF-8 engines,
% but functionality (hopefully) didn't change in any way, at least not intentionally.
% This file is no longer stand-alone; at least for 8-bit engines
% you probably want to use loadhyph-foo.tex (which will load this file) instead.
%
% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
% with help & support from:
% - Karl Berry, who gave us free hands and all resources
% - Taco Hoekwater, with useful macros
% - Hans Hagen, who did the unicodifisation of patterns already long before
% and helped with testing, suggestions and bug reports
% - Norbert Preining, who tested & integrated patterns into TeX Live
%
% However, the "copyright/copyleft" owner of patterns remains the original author.
%
% The copyright statement of this file is thus:
%
% Do with this file whatever needs to be done in future for the sake of
% "a better world" as long as you respect the copyright of original file.
% If you're the original author of patterns or taking over a new revolution,
% plese remove all of the TUG comments & credits that we added here -
% you are the Queen / the King, we are only the servants.
%
% If you want to change this file, rather than uploading directly to CTAN,
% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
% or ask for credentials for SVN repository and commit it yourself;
% we will then upload the whole "package" to CTAN.
%
% Before a new "pattern-revolution" starts,
% please try to follow some guidelines if possible:
%
% - \lccode is *forbidden*, and I really mean it
% - all the patterns should be in UTF-8
% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
% and if you really cannot do without, also \input and \message
% - in particular, please no \catcode or \lccode changes,
% they belong to loadhyph-foo.tex,
% and no \lefthyphenmin and \righthyphenmin,
% they have no influence here and belong elsewhere
% - \begingroup and/or \endinput is not needed
% - feel free to do whatever you want inside comments
%
% We know that TeX is extremely powerful, but give a stupid parser
% at least a chance to read your patterns.
%
% For more unformation see
%
% http://tug.org/tex-hyphen
%
%------------------------------------------------------------------------------
%
% French hyphenation patterns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is available for free and can used and redistributed
% asis for free. Modified versions should have another name.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% *BEFORE* using this file *PLEASE* run checksum on it: %
% checksum -v frhyph.tex %
% to make sure that it hasn't been damaged. %
% Then if you notice anything wrong in french hyphenation please report to %
% R. Bastian, D. Flipo, B. Gaulle at the email address: %
% cesure-l@gutenberg.eu.org %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% checksum = "37208 1458 3078 34821"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% The most famous good guys who worked hard to obtain something usable.
% Jacques Desarmenien, Universite de Strasbourg :
% - << how to run TeX in a French environment: hyphenation, fonts,
% typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference
% - << La division par ordinateur des mots francais :
% application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-
% Gauthier-Villars
% Norman Buckle, UQAH (nb; many additions)
% Michael Ferguson, INRS-Telecommunications (mjf) June 1988
% Justin Bur, Universite de Montreal (jbb; checked against original list)
% all patterns including apostrophe missing from nb list
% after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle
% did their best effort to improve the list of patterns.
%
% -----------------------------------------------------------------
%
% Adaption of these patterns for
% - TeX Version 3.x and MLTeX 3.x (2.x)
% and
% - all fonts in T1/`Cork' and/or CM/OT1 encoding
% by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex'
% as of 1994-02-13 maintained by Bernd Raichle).
% (An adaption for the old MLTeX 2.x exists but can not be
% tested in lack of an executable.)
%
% -----------------------------------------------------------------
%
\patterns{
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%*
2'2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%a
.a4
'a4
.â4
'â4
ab2h % df-bg 1998/02/07 for abhorrer
.ab3réa
'ab3réa
ad2h % df-bg 1998/02/07 for adhèsion & co
a1è2dre
.ae3s4ch
'ae3s4ch
1alcool
a2l1algi
.amino1a2c
'amino1a2c
.ana3s4tr
'ana3s4tr
1a2nesthési
.anti1a2
'anti1a2
.anti1e2
'anti1e2
.anti1é2
.anti2enne
'anti2enne
'anti1é2
.anti1s2
'anti1s2
.apo2s3ta
'apo2s3ta
apo2s3tr
archi1é2pis
.as2ta
'as2ta
a2s3tro
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%b
1ba
1bâ
.bai2se3main % hyphen disappeared from french 5/2/94
1be
1bé
1bè
1bê
4be.
4bes.
2bent. % mute syllable: tombent (df) 22/02/94
1bi
1bî
.bi1a2c
.bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93
.bi1au
.bio1a2
.bi2s1a2
.bi1u2
1b2l
4ble.
4bles.
2blent. % mute syllable: troublent (df) 28/02/94
1bo
1bô
1b2r
4bre.
4bres.
2brent. % mute syllable: palabrent (df) 28/02/94
1bu
1bû
1by
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%c
1ç
1ca
1câ
ca3ou3t2 % for caoutchou... added 3/1/94 df-bg
1ce
1cé
1cè
1cê
4ce.
4ces.
% words ending with -cent (df) 22/02/94
2cent.
ja3cent.
ac3cent.
é3cent.
munifi3cent.
réti3cent.
privatdo3cent.
inno3cent.
es3cent.
acquies4cent.
is3cent.
immis4cent.
%
.ch4
1c2h
4ch.
2chb
4che.
4ches.
2chent. % mute syllable: touchent (df) 22/02/94
.chè2vre3feuille % hyphen disappeared from french 5/2/94
2chg
ch2l
4chle.
4chles.
chlo2r3a2c
chlo2r3é2t
2chm
2chn
2chp
ch2r
4chre.
4chres.
2chs
2cht
2chw
1ci
1cî
.ci2s1alp
1c2k
4ck.
2ckb
4cke.
4ckes.
2ckent. % mute syllable: stockent (df) 22/02/94
2ckf
2ckg
2ck3h
2ckp
2cks
2ckt
1c2l
4cle.
4cles.
2clent. % mute syllable: encerclent (df) 28/02/94
1co
1cô
co1acc
co1acq
co1a2d
co1ap
co1ar
co1assoc
co1assur
co1au
co1ax
1cœ
co1é2
co1ef
co1en
co1ex
.con4 % missing from nb list
.cons4 % missing from nb list
.contre1s2c
.contre3maître % hyphen disappeared from french 5/2/94
co2nurb
.co1o2
.co2o3lie
1c2r
4cre.
4cres.
2crent. % mute syllable: massacrent (df) 28/02/94
1cu
1cû
1cy
.cul4 % -- as .con4 .cons4 (march 92)
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%d
1d'
1da
1dâ
.dacryo1a2
d1d2h
1de
1dé
1dè
1dê
4de.
4des.
% words ending with -dent (df) 22/02/94
2dent.
déca3dent.
é3dent.
cci3dent.
inci3dent.
confi3dent.
tri3dent.
dissi3dent.
chien3dent.
.ar3dent.
impu3dent.
pru3dent.
%
.dé1a2
.dé1io
.dé1o2
.dé2s % originaly in JD file
%.dé2s1a2 removed 09/17/92 because wrong for the
% original JD 500 words test
.dé3s2a3cr
.dés2a3m % .dés2a2mi introduced 09/17/92 bec. i
% can't see why désamidonner ran in JD.
% Moved to .dés2a3m df 12/27/93.
.dé3s2a3tell
.dé3s2astr
.dé3s2c % 1 moved 3 due to .dé2s 09/17/92
%.dé2s1e2 removed 09/17/92 because wrong for the
% original JD 500 words test
.dé2s1é2
.dé3s2é3gr
.dé3s2ensib
.dé3s2ert
.dé3s2exu
%.dé2s3h removed 09/17/92 because wrong for the
% original JD 500 words test
.dé2s1i2
.dé3s2i3d
.dé3s2i3gn
.dé3s2i3li
.dé3s2i3nen
.dé3s2invo
.dé3s2i3r
.dé3s2ist
%.dé2s1o2 removed 09/17/92 because wrong for the
% original JD 500 words test
.dé3s2o3dé
.dé2s1œ
.dé3s2o3l
.dé3s2o3pil
.dé3s2orm
.dé3s2orp
.dé3s2oufr
.dé3s2p % 1 moved 3 due to .dé2s 09/17/92
.dé3s2t % 1 moved 3 due to .dé2s 09/17/92
.dé2s1u2n
3d2hal
3d2houd
1di
1dî
di2s3cop
.di1a2cé
.di1a2cid
.di1ald
.di1a2mi
.di1a2tom
.di1e2n
.di2s3h
2dlent. % mute syllable: jodlent (df) 28/02/94
1do
1dô
1d2r
4dre.
4dres.
2drent. % mute syllable: engendrent (df) 28/02/94
d1s2
1du
1dû
1dy
.dy2s3
.dy2s1a2
.dy2s1i2
.dy2s1o2 % missing from nb list
.dy2s1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%e
.e4
'e4
.ê4
'ê4
.é4
'é4
.è4
'è4
éd2hi % df-bg 1998/02/07 for rédhibitoire
1é2drie
1é2drique
1é2lectr
1é2lément
.en1a2
'en1a2
1é2nerg
e2n1i2vr
.en1o2
'en1o2
épi2s3cop
épi3s4cope
e2s3cop
.eu2r1a2
'eu2r1a2
eu1s2tat
extra1
extra2c
extra2i
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%f
1fa
1fâ
1fe
1fé
1fè
1fê
4fe.
4fes.
2fent. % mute syllable: agrafent chauffent (df) 22/02/94
%
1fi
1fî
1f2l
4fle.
4fles.
2flent. % mute syllable: gonflent (df) 28/02/94
1fo
1fô
1f2r
4fre.
4fres.
2frent. % mute syllable: balafrent (df) 28/02/94
f1s2
1fu
1fû
1fy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%g
1ga
1gâ
1ge
1gé
1gè
1gê
4ge.
4ges.
% words ending with -gent (df) 22/02/94
2gent.
ré3gent.
entre3gent.
indi3gent.
dili3gent.
intelli3gent.
indul3gent.
tan3gent.
rin3gent.
contin3gent.
.ar3gent.
'ar3gent.
ser3gent.
ter3gent.
résur3gent.
%
1g2ha
1g2he
1g2hi
1g2ho
1g2hy
1gi
1gî
1g2l
4gle.
4gles.
2glent. % mute syllable: meuglent (df) 28/02/94
1g2n
'a2g3nat % (df) 16/01/02
.a2g3nat % (df) 16/01/02
a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted)
co2g3niti % (df) 16/01/02
'i2g3né % (df) 16/01/02
.i2g3né % (df) 16/01/02
'i2g3ni % (df) 16/01/02
.i2g3ni % (df) 16/01/02
.ma2g3nicide % (df) 16/01/02
.ma2g3nificat % (df) 16/01/02
.ma2g3num % (df) 16/01/02
o2g3nomoni % (df) 16/01/02
o2g3nosi % (df) 16/01/02
.pro2g3nath % (df) 16/01/02
pu2g3nable % (df) 16/01/02
pu2g3nac % (df) 16/01/02
.sta2g3n
.syn2g3nath % (df) 16/01/02
wa2g3n
4gne.
4gnes.
2gnent. % mute syllable: accompagnent (df) 28/02/94
1go
1gô
1g2r
4gre.
4gres.
2grent. % mute syllable: immigrent (df) 28/02/94
1gu
1gû
g1s2
4gue.
4gues.
% words ending with -guent (df) 22/02/94
2guent.
.on3guent.
'on3guent.
%
1gy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%h
1ha
1hâ
1he
1hé
1hè
1hê
hémi1é
hémo1p2t
4he.
4hes.
1hi
1hî
1ho
1hô
1hu
1hû
1hy
hypera2
hypere2
hyperé2
hyperi2
hypero2
hypers2
hype4r1
hyperu2
hypo1a2
hypo1e2 % missing from nb list
hypo1é2
hypo1i2
hypo1o2
hypo1s2
hypo1u2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%i
.i4
'i4
.î4
'î4
i1algi
i1arthr
i1è2dre
% ill patterns missing from nb list
il2l
cil3l
rcil4l
ucil4l
vacil4l
gil3l
hil3l
lil3l
l3lion
mil3l
mil4let
émil4l
semil4l
rmil4l
armil5l
capil3l
papil3la
papil3le
papil3li
papil3lom
pupil3l
piril3l
thril3l
cyril3l
ibril3l
pusil3l
.stil3l
distil3l
instil3l
fritil3l
boutil3l
vanil3lin
vanil3lis
vil3l
avil4l
chevil4l
uevil4l
uvil4l
xil3l
% end of ill patterns
1informat % missing from nb list
.in1a2
'in1a2
.in2a3nit
'in2a3nit
.in2augur
'in2augur
.in1e2
'in1e2
.in1é2
'in1é2
.in2effab % missing from nb list
'in2effab
.in2é3lucta
'in2é3lucta
.in2é3narra
'in2é3narra
.in2ept
'in2ept
.in2er
'in2er
.in2exora % missing from nb list
'in2exora
.in1i2
'in1i2
.in2i3miti
'in2i3miti
.in2i3q
'in2i3q
.in2i3t
'in2i3t
.in1o2
'in1o2
.in2o3cul
'in2o3cul
.in2ond
'in2ond
.in1s2tab
'in1s2tab
'inte4r3
.intera2
'intera2
.intere2
'intere2
.interé2
'interé2
.interi2
'interi2
.intero2
'intero2
.inte4r3
.interu2
'interu2
.inters2
'inters2
.in1u2
'in1u2
.in2uit
'in2uit
.in2u3l
'in2u3l
io1a2ct
i1oxy
i1s2tat
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%j
1j
2jk
4je.
4jes.
2jent. % mute syllable: galèjent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%k
1ka
1kâ
1ke
1ké
1kè
1kê
4ke.
4kes.
2kent. % mute syllable: jerkent (df) 22/02/94
1k2h
4kh.
.kh4
1ki
1kî
1ko
1kô
1k2r
1ku
1kû
1ky
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%l
1la
1lâ
1là
la2w3re
1le
1lé
1lè
1lê
4le.
4les.
% words ending with -lent (df) 22/02/94
2lent.
.ta3lent.
iva3lent.
équiva4lent.
monova3lent.
polyva3lent.
re3lent.
.do3lent.
indo3lent.
inso3lent.
turbu3lent.
succu3lent.
fécu3lent.
trucu3lent.
opu3lent.
corpu3lent.
ru3lent.
sporu4lent.
%
1li
1lî
1lo
1lô
l1s2t
1lu
1lû
1ly
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%m
1ma
1mâ
.ma2c3k
.macro1s2c
.ma2l1a2dres
.ma2l1a2dro
.ma2l1aisé
.ma2l1ap
.ma2l1a2v
.ma2l1en
.ma2l1int
.ma2l1oc
.ma2l1o2d
.ma2r1x % nb (jbb: ?)
1me
1mé
1mè
1mê
.mé2g1oh
.mé2sa % missing from nb list
.mé3san % missing from nb list
.mé2s1es
.mé2s1i
.mé2s1u2s
.méta1s2ta
4me.
4mes.
% words ending with -ment (df) 22/02/94
â2ment.
da2ment.
fa2ment.
amalga2ment.
cla2ment.
ra2ment.
tempéra3ment.
ta2ment.
testa3ment.
qua2ment.
è2ment.
carê2ment.
diaphrag2ment.
ryth2ment.
ai2ment.
rai3ment.
abî2ment.
éci2ment.
vidi2ment.
subli2ment.
éli2ment.
reli2ment.
mi2ment.
ani2ment.
veni2ment.
ri2ment.
détri3ment.
nutri3ment.
inti2ment.
esti2ment.
l2ment.
flam2ment.
gram2ment.
.gem2ment.
om2ment.
.com3ment.
ô2ment.
slalo2ment.
chro2ment.
to2ment.
ar2ment.
.sar3ment.
er2ment.
antifer3ment.
.ser3ment.
fir2ment.
or2ment.
as2ment.
au2ment.
écu2ment.
fu2ment.
hu2ment.
fichu3ment.
llu2ment.
plu2ment.
bou2ment.
bru2ment.
su2ment.
tu2ment.
%
1mi
1mî
.milli1am
1m2némo
1m2nès
1m2nési
1mo
1mô
1mœ
.mono1a2
.mono1e2
.mono1é2
.mono1i2
.mono1ï2dé
.mono1o2
.mono1u2
.mono1s2
mon2t3réal % missing from nb list
m1s2
1mu
1mû
1my
moye2n1â2g
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%n
1na
1nâ
1ne
1né
1nè
1nê
4ne.
4nes.
% words ending with -nent (df) 22/02/94
2nent. % fric-tionnent - syllable muette - bg 27/12/93
réma3nent.
imma3nent.
perma3nent.
.émi3nent.
préémi3nent.
proémi3nent.
surémi3nent.
immi3nent.
conti3nent.
perti3nent.
absti3nent.
%
1ni
1nî
1no
1nô
1nœ
.no2n1obs
1nu
1nû
n3s2at.
n3s2ats.
n1x
1ny
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%o
.o4
'o4
'ô4
.ô4
%'\"o2 % mjf % deleted 3/1/94 df-bg
o2b3long
1octet % missing from nb list
o1d2l
o1è2dre
o1ioni
ombud2s3
omni1s2
o1s2tas
o1s2tat
o1s2téro
o1s2tim
o1s2tom
o1s2trad
o1s2tratu
o1s2triction
.oua1ou
'oua1ou
.ovi1s2c
'ovi1s2c
oxy1a2
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%p
1pa
1pâ
paléo1é2
.pa2n1a2f
.pa2n1a2mé
.pa2n1a2ra
.pa2n1is
.pa2n1o2ph
.pa2n1opt
.pa2r1a2che
.pa2r1a2chè
.para1s2
.pa2r3hé
1pe
1pé
1pè
1pê
4pe.
4pes.
% words ending with -pent (df) 22/02/94
2pent.
re3pent.
.ar3pent.
'ar3pent.
ser3pent.
%
.pen2ta % pent- or penta- but never pen-ta bg 12/27/93
per3h
pé2nul % pé2n1ul moved back 09/17/92 to JD def.
.pe4r
.per1a2
.per1e2
.per1é2
.per1i2
.per1o2
.per1u2
pé1r2é2q % 2r1 moved 09/17/92 to 1r2(it was a typo)
.péri1os
.péri1s2
.péri2s3s
.péri2s3ta
.péri1u2
1p2h
.ph4
4ph.
.phalan3s2t
4phe.
4phes.
2phent. % mute syllable: triomphent (df) 22/02/94
ph2l
4phle.
4phles.
2phn
photo1s2
ph2r
4phre.
4phres.
2phs
2pht
3ph2talé
3ph2tis
%%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94
%%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92
%%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94
1pi
1pî
1p2l
4ple.
4ples.
2plent. % mute syllable: accouplent (df) 28/02/94
.pluri1a
1p2né
1p2neu
1po
1pô
po1astre
poly1a2
poly1e2
poly1é2
poly1è2
poly1i2
poly1o2
poly1s2
poly1u2
.pon2tet % JD hypenated it asis 09/17/92, exception
.pos2t3h
.pos2t1in
.pos2t1o2
.pos2t3r
.post1s2
1p2r
4pre.
4pres.
2prent. % mute syllable: empourprent (df) 28/02/94
.pré1a2
.pré2a3la % missing from nb list
.pré2au
.pré1é2
.pré1e2
.pré1i2
.pré1o2
.pré1u2
.pré1s2
.pro1é2
.pro1s2cé
pro2s3tat
.prou3d2h
1p2sych
.psycho1a2n
1p2tèr
1p2tér
1pu
.pud1d2l
1pû
1py
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%q
1q
4que.
4ques.
% words ending with -quent (df) 22/02/94
2quent.
é3quent.
élo3quent.
grandilo3quent.
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%r
1ra
1râ
radio1a2 % missing from nb list
1re
1ré
1rè
1rê
.ré1a2
.ré2a3le
.ré2a3lis
.ré2a3lit
.ré2aux
.ré1é2
.ré1e2
.ré2el
.ré2er
.ré2èr
.ré1i2
.ré2i3fi
.ré1o2
.re1s2
.re2s3cap
.re2s3cisi % for res-cision 09/17/92 (missing from nb)
.re2s3ciso % for res-cisoire 09/17/92(missing from nb)
.re2s3cou
.re2s3cri
.re2s3pect
.re2s3pir
.re2s3plend
.re2s3pons
.re2s3quil
.re2s3s
.re2s3t
.re3s4tab
.re3s4tag
.re3s4tand
.re3s4tat
.re3s4tén
.re3s4tér
.re3s4tim
.re3s4tip
.re3s4toc
.re3s4top
.re3s4tr
.re4s5trein
.re4s5trict
.re4s5trin
.re3s4tu
.re3s4ty
.réu2 %.ré1u2 % pattern rejected 12/2/92
% (don't hyphenate as ré-union nor réu-nion)
.ré2uss
.rétro1a2
4re.
4res.
% words ending with -rent (df) 22/02/94
2rent. % es-pèrent - syllable muette - bg 27/12/93
.pa3rent.
appa3rent.
transpa3rent.
é3rent.
tor3rent.
cur3rent.
%
1r2h
4rhe.
4rhes.
2r3heur
2r3hydr
1ri
1rî
1ro
1rô
1ru
1rû
1ry
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%s
1sa
1sâ
.sch4
1s2caph
1s2clér
1s2cop
1s2ch
e2s3ch
i2s3ché
i2s3chia
i2s3chio
4sch.
4sche.
4sches.
2schs
1se
1sé
1sè
1sê
sesqui1a2
4se.
4ses.
% words ending with -sent (df) 22/02/94
2sent. % massent - syllable muette - bg 27/12/93
ab3sent.
pré3sent.
.res3sent.
%
.seu2le % jbb
.sh4
1s2h
4sh.
4she.
4shes.
2shent. % mute syllable: smashent (df) 22/02/94
2shm
2s3hom
2shr
2shs
1si
1sî
1s2lav
1s2lov
1so
1sô
1sœ
1s2patia
1s2perm
1s2por
1s2phèr
1s2phér
1s2piel
1s2piros
1s2tandard
1s2tein
stéréo1s2
1s2tigm
1s2tock
1s2tomos
1s2troph
1s2tructu
1s2tyle
1su
1sû
.su2b1a2
.su3b2alt
.su2b1é2
.su3b2é3r
.su2b1in
.su2b3limin
.su2b3lin
.su2b3lu
sub1s2
.su2b1ur
supero2
supe4r1
supers2
.su2r1a2
su3r2ah
.su3r2a3t
.su2r1e2
.su3r2eau
.su3r2ell
.su3r2et
.su2r1é2
.su2r3h
.su2r1i2m
.su2r1inf
.su2r1int
.su2r1of
.su2r1ox
1sy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%t
1ta
1tâ
1tà
tachy1a2
tchin3t2
1te
1té
1tè
1tê
télé1e2
télé1i2
télé1o2b
télé1o2p
télé1s2
4te.
4tes.
% words ending with -tent (df) 22/02/94
2tent. % mentent - syllable muette - bg 27/12/93
.la3tent.
.pa3tent.
compé3tent.
éni3tent.
mécon3tent.
omnipo3tent.
ventripo3tent.
équipo3tent.
impo3tent.
mit3tent.
%
.th4
1t2h
4th.
4the.
4thes.
thermo1s2
2t3heur
2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93
2thm
2thn
th2r
4thre.
4thres.
2ths
1ti
1tî
1to
1tô
1t2r
tran2s1a2
tran3s2act
tran3s2ats
tran2s3h
tran2s1o2
tran2s3p
tran2s1u2
4tre.
4tres.
2trent. % mute syllable: infiltrent (df) 28/02/94
.tri1a2c
.tri1a2n
.tri1a2t
.tri1o2n
t1t2l
1tu
1tû
tung2s3
1ty
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%u
.u4
'u4
.û4
'û4
uni1o2v
uni1a2x
u2s3tr
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%v
1va
1vâ
1ve
1vé
1vè
1vê
vélo1s2ki
4ve.
4ves.
% words ending with -vent (df) 22/02/94
2vent.
conni3vent.
.sou3vent.
%
1vi
1vî
1vo
1vô
vol2t1amp
1v2r
4vre.
4vres.
2vrent. % mute syllable: recouvrent (df) 28/02/94
1vu
1vû
1vy
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%w
1wa
1we
4we.
4wes.
2went. % mute syllable: interviewent (df) 22/02/94
1wi
1wo
1wu
1w2r
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%x
2xent. % mute syllable: malaxent (df) 22/02/94
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%y
.y4
'y4
y1asth
y1s2tom
y1algi
%-------------------%-----------------------%
% phonetic patterns % etymological patterns %
%-------------------%-----------------------%
%%z
1za
1ze
1zé
1zè
4ze.
4zes.
% words ending with -zent (df) 22/02/94
2zent.
privatdo3zent.
%
1zi
1zo
1zu
1zy
}
|
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/hyph_fr.dic version [dcb79e8ef8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 | UTF-8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LEFTHYPHENMIN 2 RIGHTHYPHENMIN 2 COMPOUNDLEFTHYPHENMIN 2 COMPOUNDRIGHTHYPHENMIN 2 %%% Do not remove the following line %%% NEXTLEVEL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2'2 .a4 'a4 .â4 'â4 ab2h a1bî abî1me abî2ment. .a1b2r 'a1b2r .ab1ré 'ab1ré .ab3réa 'ab3réa ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h aè1d2r a1è2d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. â1me â2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1hé 1a2nesthé1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 'anti1é2 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archié1pi archi1é2pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1bâ .bai1se .baise1ma .bai2se3main 1be 1bé 1bè 1bê 4be. 2bent. 4bes. 1bi .1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1bô bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 ca1pi capil3l ca1rê carê1me carê2ment. c1ci cci1de cci3dent. 1ce 1cé 1cè 1cê 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1hè 4c4he. 2chent. 4c4hes. che1vi chevil4l .chè1v2r .chèv1re .chèvre1fe .chèvrefeuil2l .chè2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1ré chlo2r3é2t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1cî cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1cô co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1pé compé1te compé3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contremaî1t2r .cont1re3maît1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1cû .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1dâ .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1dé .1dé 1dè 1dê 4de. .dé1a2 dé1ca déca1de déca3dent. .dé1io 2dent. .dé1o2 .dé2s 4des. .dé1sa .dé3s2a3c2r .dés2a3m .dé3s2as1t2r .désa1te .dé3s2a3tell .dé3s2c .dé1se .dé2s1é2 .dé3s2é3g2r .désen1si .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3g2n .dé3s2i3li .dési1ne .dé3s2i3nen .dé3s2in1vo .dé3s2i3r .dé3s2ist .dé1so .1dé3s2o3dé .dé2s1œ .dé3s2o3l .déso1pi .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2ou1f2r .dé3s2p .dé3s2t .dé1su .dé2s1u2n dé1t2r dét1ri détri1me détri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1dî .di1a2cé .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1dô .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1dû 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .é4 'é4 .è4 'è4 .ê4 'ê4 é1ce é3cent. é1ci éci1me éci2ment. é1cu écu1me écu2ment. é1de é3dent. éd2hi é1d2r éd1ri 1é2drie édri1q 1é2drique é1le é1lé 1é2lec1t2r élé1me 1é2lément é1li éli1me éli2ment. é1lo élo1q élo3quent. è1me è2ment. é1mi .é1mi émil4l .émi1ne .émi3nent. .e1n1a2 'e1n1a2 é1ne 1é2nerg e1ni é1ni éni1te éni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. é1pi épis1co épi2s3cop épi3s4co1pe é1q é3quent. équi1po équipo1te équipo3tent. équi1va équiva1le équiva4lent. é1re é3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1fâ fa1me fa2ment. 1fe 1fé 1fè 1fê 4fe. fé1cu fécu1le fécu3lent. 2fent. 4fes. 1fi 1fî fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1fô 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1fû fu1me fu2ment. 1fy 1ga 1gâ 1ge .1ge 1gé 1gè 1gê 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1gô 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1gû 4gue. 2guent. 4gues. 1gy 1ha 1hâ 1he 1hé 1hè 1hê 4he. hé1mi hémi1é hé1mo hémo1p2t 4hes. 1hi 1hî hil3l 1ho 1hô 1hu 1hû hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1ré2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .î4 'î4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l iè1d2r i1è2d1re .i1g2n 'i1g2n .i2g3né 'i2g3né .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n1é2 'i1n1é2 .inef1fa 'inef1fa .in2effab 'in2effab .iné1lu 'iné1lu .in2é3luc1ta 'in2é3luc1ta .iné1na 'iné1na .in2é3nar1ra 'in2é3nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1ré2 'inte1ré2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1hé isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la .1la 1là 1lâ .la1te .la3tent. la1w2r la2w3re 1le 1lé 1lè 1lê 4le. 2lent. 4les. 1li 1lî lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1lô l1s2t 1lu 1lû 1ly 1ma .1ma 1mâ .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1sé .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé .1mé 1mè 1mê 4me. mé1co mécon1te mécon3tent. .mé1go .mé2g1oh 4mes. .mé2sa .mé3san .mé1se .mé2s1es .mé2s1i .mé1su .mé2s1u2s .mé1ta .mé1ta1s2ta 1mi .1mi 1mî mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1né m1nè 1m2né1mo 1m2nès 1m2né1si 1mo .1mo 1mô 1mœ mo1no .mo1no .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1ré mon2t3réal moye1nâ moye2n1â2g m1s2 1mu 1mû mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1nâ 1ne 1né 1nè 1nê 4ne. 2nent. 4nes. 1ni 1nî 1no .1no 1nô 1nœ .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1nû nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .ô4 'ô4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l oè1d2r o1è2d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 ô1me ô2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1té o1s2té1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1pâ pa1lé paléo1é2 .pa1na .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1hè .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3hé .pa1te .pa3tent. 1pe .1pe 1pé .1pé 1pè 1pê 4pe. 2pent. .pen2ta pé1nu pé2nul .pe4r .pe1r1a2 pé1ré .pe1r1e2 .pe1r1é2 pé1r2é2q pe1r3h .pé1ri .pe1r1i2 .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1lé ph1ti 3ph2tis 1pi 1pî pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2né 1p2neu 1po .1po 1pô poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1ré .p1ré 4p4re. .pré1a2 .pré2a3la .pré2au .pré1e2 .pré1é2 préé1mi préémi1ne préémi3nent. .pré1i2 2p2rent. .pré1o2 .pré1s2 4p4res. pré1se pré3sent. .pré1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro1é2 proé1mi proémi1ne proémi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2cé pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1té p1tè 1p2tér 1p2tèr 1pu .1pu 1pû .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1râ ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1ré .1ré 1rè 1rê 4re. .ré1a2 .ré2a3le .réa1li .ré2a3lis .ré2a3lit .ré2aux .ré1e2 .ré1é2 .ré2el .ré2er .ré2èr ré1ge ré3gent. .ré1i2 .ré2i3fi re1le re3lent. re1li reli1me reli2ment. ré1ma réma1ne réma3nent. 2rent. .ré1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1té .re3s4tén .re3s4tér .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty ré1su résur1ge résur3gent. ré1ti réti1ce réti3cent. .ré1t2r .rét1ro .rétro1a2 .réu2 .ré2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1rî ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1rô 1ru 1rû ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1sâ .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1lé 1s2clér s1co 1s2cop 1se .1se 1sé 1sè 1sê 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1sî s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1sô 1sœ .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1hé sp1hè 1s2phér 1s2phèr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1té 1s2tein sté1ré stéréo1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1ré .su2r1e2 .su2r1é2 .su3r2eau .su3r2ell suré1mi surémi1ne surémi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1tà 1tâ ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1té 1tè 1tê 4te. té1lé télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 tem1pé tempé1ra tempéra1me tempéra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1tî 1to 1tô to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1tû tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .û4 'û4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1vâ va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1vé 1vè 1vê 4ve. vé1lo vélo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1vî vi1di vidi1me vidi2ment. vil3l 1vo 1vô vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1vû 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1zé 1zè 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 2’2 ’a4 4a- .á4 'á4 ’á4 4á- .à4 'à4 ’à4 4à- ’â4 4â- .å4 'å4 ’å4 4å- .ä4 'ä4 ’ä4 4ä- .ã4 'ã4 ’ã4 4ã- -5a4 -5á4 -5à4 -5â4 -5å4 -5ä4 -5ã4 abî2ment- ’a1b2r -5a1b2r ’ab1ré -5ab1ré ’ab3réa -5ab3réa ab3sent- absti3nent- ac3cent- acquies4cent- .æ4 'æ4 ’æ4 4æ- -5æ4 ’ae3s4c2h -5ae3s4c2h ’a1g2n -5a1g2n ’ag1na -5ag1na ’a2g3nat -5a2g3nat ai2ment- amalga2ment- â2ment- ’a1mi -5a1mi ’ami1no -5ami1no ’amino1a2c -5amino1a2c ’a1na -5a1na ’ana3s4t2r -5ana3s4t2r ani2ment- ’an1ti -5an1ti ’anti1a2 -5anti1a2 ’anti1e2 ’anti1é2 -5anti1e2 -5anti1é2 ’anti2en1ne -5anti2en1ne antifer3ment- ’anti1s2 -5anti1s2 ’a1po -5a1po ’apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ’ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ’ar3gent- ’ar3gent. -5ar3gent. ar2ment- ’ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ’ar3pent- ’ar3pent. -5ar3pent. as2ment- ’as2ta -5as2ta au2ment- .b4 'b4 ’b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 ’c4 4c- .ç4 'ç4 ’ç4 4ç- -5c4 -5ç4 carê2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1hè 2chent- 4c4hes- -5chè1v2r -5chèv1re -5chèvre1fe -5chèvrefeuil2l -5chè2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. compé3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contremaî1t2r -5cont1re3maît1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d2’2 .d4 'd4 ’d4 4d- .ð4 'ð4 ’ð4 4ð- -5d4 -5ð4 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5dé1a2 déca3dent- -5dé1io 2dent- -5dé1o2 4des- -5dé2s -5dé1sa -5dé3s2a3c2r -5dés2a3m -5dé3s2as1t2r -5désa1te -5dé3s2a3tell -5dé3s2c -5dé1se -5dé2s1é2 -5dé3s2é3g2r -5désen1si -5dé3s2ensib -5dé3s2ert -5dé3s2exu -5dé2s1i2 -5dé3s2i3d -5dé3s2i3g2n -5dé3s2i3li -5dési1ne -5dé3s2i3nen -5dé3s2in1vo -5dé3s2i3r -5dé3s2ist -5dé1so -5dé2s1œ -5dé3s2o3l -5déso1pi -5dé3s2o3pil -5dé3s2orm -5dé3s2orp -5dé3s2ou1f2r -5dé3s2p -5dé3s2t -5dé1su -5dé2s1u2n détri3ment- -5di1a2cé -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 ’e4 4e- ’é4 4é- ’è4 4è- ’ê4 4ê- .ë4 'ë4 ’ë4 4ë- -5e4 -5é4 -5è4 -5ê4 -5ë4 é3cent- éci2ment- écu2ment- é3dent- éli2ment- élo3quent- è2ment- -5é1mi -5émi1ne -émi3nent- .émi3nent- -5émi3nent. ’e1n1a2 -5e1n1a2 éni3tent- ’e1n1o2 -5e1n1o2 entre3gent- é3quent- équipo3tent- équiva4lent- é3rent- er2ment- es3cent- esti2ment- ’eu2r1a2 -5eu2r1a2 .f4 'f4 ’f4 4f- -5f4 fa2ment- 4fe- fécu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 ’g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 ’h4 4h- -5h4 4he- 4hes- hu2ment- ’i4 4i- .í4 'í4 ’í4 4í- .ì4 'ì4 ’ì4 4ì- ’î4 4î- .ï4 'ï4 ’ï4 4ï- -5i4 -5í4 -5ì4 -5î4 -5ï4 ’i1g2n -5i1g2n ’i2g3né -5i2g3né ’i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- ’i1n1a2 -5i1n1a2 ’ina1ni -5ina1ni ’in2a3nit -5in2a3nit ’inau1gu -5inau1gu ’in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- ’i1n1e2 ’i1n1é2 -5i1n1e2 -5i1n1é2 ’inef1fa -5inef1fa ’in2effab -5in2effab ’iné1lu -5iné1lu ’in2é3luc1ta -5in2é3luc1ta ’iné1na -5iné1na ’in2é3nar1ra -5in2é3nar1ra ’in2ept -5in2ept ’in2er -5in2er ’in2exo1ra -5in2exo1ra ’i1n1i2 -5i1n1i2 ’ini1mi -5ini1mi ’in2i3mi1ti -5in2i3mi1ti ’in2i3q -5in2i3q ’in2i3t -5in2i3t inno3cent- ’i1n1o2 -5i1n1o2 ’ino1cu -5ino1cu ’in2o3cul -5in2o3cul ’in2ond -5in2ond inso3lent- ’ins1ta -5ins1ta ’in1s2tab -5in1s2tab ’in1te -5in1te intelli3gent- ’inte4r3 -5inte4r3 ’inte1ra2 -5inte1ra2 ’inte1re2 ’inte1ré2 -5inte1re2 -5inte1ré2 ’inte1ri2 -5inte1ri2 ’inte1ro2 -5inte1ro2 ’inters2 -5inters2 ’inte1ru2 -5inte1ru2 inti2ment- ’i1n1u2 -5i1n1u2 ’in2uit -5in2uit ’in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 ’j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 ’k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 ’l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 ’m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1sé -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mécon3tent- -5mé1go -5mé2g1oh 4mes- -5mé2sa -5mé3san -5mé1se -5mé2s1es -5mé2s1i -5mé1su -5mé2s1u2s -5mé1ta -5mé1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono1é2 -5mono1i2 -5mono1ï2dé -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 ’n4 4n- .ñ4 'ñ4 ’ñ4 4ñ- -5n4 -5ñ4 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- ’o4 4o- .ó4 'ó4 ’ó4 4ó- .ò4 'ò4 ’ò4 4ò- ’ô4 4ô- .õ4 'õ4 ’õ4 4õ- .ø4 'ø4 ’ø4 4ø- -5o4 -5ó4 -5ò4 -5ô4 -5õ4 -5ø4 .œ4 'œ4 ’œ4 4œ- -5œ4 ô2ment- om2ment- omnipo3tent- ’on1gu -5on1gu -on3guent- .on3guent- 'on3guent- ’on3guent- ’on3guent. -5on3guent. opu3lent- or2ment- ’oua1ou -5oua1ou ’o1vi -5o1vi ’ovi1s2c -5ovi1s2c .p4 'p4 ’p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2mé -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1hè -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3hé -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r1é2 -5pé1ri -5pe1r1i2 -5péri1os -5péri1s2 -5péri2s3s -5péri2s3ta -5péri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1ré -5pré1a2 -5pré2a3la -5pré2au -5pré1e2 -5pré1é2 préémi3nent- -5pré1i2 2p2rent- -5pré1o2 4p4res- -5pré1s2 pré3sent- -5pré1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro1é2 proémi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2cé -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 ’q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 ’r4 4r- -5r4 rai3ment- ra2ment- 4re- -5ré1a2 -5ré2a3le -5réa1li -5ré2a3lis -5ré2a3lit -5ré2aux -5ré1e2 -5ré1é2 -5ré2el -5ré2er -5ré2èr ré3gent- -5ré1i2 -5ré2i3fi re3lent- reli2ment- réma3nent- 2rent- -5ré1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1té -5re3s4tén -5re3s4tér -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty résur3gent- réti3cent- -5ré1t2r -5rét1ro -5rétro1a2 -5réu2 -5ré2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 ’s4 4s- .š4 'š4 ’š4 4š- -5s4 -5š4 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b1é2 -5su3b2é3r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r1é2 -5su3r2eau -5su3r2ell surémi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 ’t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempéra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .þ4 'þ4 ’þ4 4þ- -5þ4 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- ’u4 4u- .ú4 'ú4 ’ú4 4ú- .ù4 'ù4 ’ù4 4ù- ’û4 4û- .ü4 'ü4 ’ü4 4ü- -5u4 -5ú4 -5ù4 -5û4 -5ü4 .v4 'v4 ’v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 ’w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 ’x4 4x- -5x4 2xent- ’y4 4y- .ý4 'ý4 ’ý4 4ý- .ÿ4 'ÿ4 ’ÿ4 4ÿ- -5y4 -5ý4 -5ÿ4 .z4 'z4 ’z4 4z- .ž4 'ž4 ’ž4 4ž- -5z4 -5ž4 4ze- 2zent- 4zes- |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/hyph_fr.iso8859-1.dic version [ffb0b705c5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 | ISO8859-1 2'2 .a4 'a4 .4 '4 ab2h a1b ab1me ab2ment. .a1b2r 'a1b2r .ab1r 'ab1r .ab3ra 'ab3ra ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h a1d2r a12d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. 1me 2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1h 1a2nesth1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti12 'anti12 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archi1pi archi12pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1b .bai1se .baise1ma .bai2se3main 1be 1b 1b 1b 4be. 2bent. 4bes. 1bi .1bi 1b .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1b bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1b 1by 1 1ca 1c ca3ou3t2 ca1pi capil3l ca1r car1me car2ment. c1ci cci1de cci3dent. 1ce 1c 1c 1c 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1h 4c4he. 2chent. 4c4hes. che1vi chevil4l .ch1v2r .chv1re .chvre1fe .chvrefeuil2l .ch2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1r chlo2r32t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1c cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1c co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1c co12 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1p comp1te comp3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contrema1t2r .cont1re3mat1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1c .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1d .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1d .1d 1d 1d 4de. .d1a2 d1ca dca1de dca3dent. .d1io 2dent. .d1o2 .d2s 4des. .d1sa .d3s2a3c2r .ds2a3m .d3s2as1t2r .dsa1te .d3s2a3tell .d3s2c .d1se .d2s12 .d3s23g2r .dsen1si .d3s2ensib .d3s2ert .d3s2exu .d2s1i2 .d3s2i3d .d3s2i3g2n .d3s2i3li .dsi1ne .d3s2i3nen .d3s2in1vo .d3s2i3r .d3s2ist .d1so .1d3s2o3d .d2s1 .d3s2o3l .dso1pi .d3s2o3pil .d3s2orm .d3s2orp .d3s2ou1f2r .d3s2p .d3s2t .d1su .d2s1u2n d1t2r dt1ri dtri1me dtri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1d .di1a2c .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1d .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1d 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .4 '4 .4 '4 .4 '4 1ce 3cent. 1ci ci1me ci2ment. 1cu cu1me cu2ment. 1de 3dent. d2hi 1d2r d1ri 12drie dri1q 12drique 1le 1l 12lec1t2r l1me 12lment 1li li1me li2ment. 1lo lo1q lo3quent. 1me 2ment. 1mi .1mi mil4l .mi1ne .mi3nent. .e1n1a2 'e1n1a2 1ne 12nerg e1ni 1ni ni1te ni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. 1pi pis1co pi2s3cop pi3s4co1pe 1q 3quent. qui1po quipo1te quipo3tent. qui1va quiva1le quiva4lent. 1re 3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1f fa1me fa2ment. 1fe 1f 1f 1f 4fe. f1cu fcu1le fcu3lent. 2fent. 4fes. 1fi 1f fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1f 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1f fu1me fu2ment. 1fy 1ga 1g 1ge .1ge 1g 1g 1g 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1g gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1g 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1g 4gue. 2guent. 4gues. 1gy 1ha 1h 1he 1h 1h 1h 4he. h1mi hmi1 h1mo hmo1p2t 4hes. 1hi 1h hil3l 1ho 1h 1hu 1h hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1r2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo12 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .4 '4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l i1d2r i12d1re .i1g2n 'i1g2n .i2g3n 'i2g3n .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n12 'i1n12 .inef1fa 'inef1fa .in2effab 'in2effab .in1lu 'in1lu .in23luc1ta 'in23luc1ta .in1na 'in1na .in23nar1ra 'in23nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1r2 'inte1r2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1h isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1k 1ke 1k 1k 1k 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1k 1ko 1k 1k2r 1ku 1k 1ky 1la .1la 1l 1l .la1te .la3tent. la1w2r la2w3re 1le 1l 1l 1l 4le. 2lent. 4les. 1li 1l lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1l l1s2t 1lu 1l 1ly 1ma .1ma 1m .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1s .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1m .1m 1m 1m 4me. m1co mcon1te mcon3tent. .m1go .m2g1oh 4mes. .m2sa .m3san .m1se .m2s1es .m2s1i .m1su .m2s1u2s .m1ta .m1ta1s2ta 1mi .1mi 1m mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1n m1n 1m2n1mo 1m2ns 1m2n1si 1mo .1mo 1m 1m mo1no .mo1no .mono1a2 .mono1e2 .mono12 .mono1i2 .mono12d .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1r mon2t3ral moye1n moye2n12g m1s2 1mu 1m mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1n 1ne 1n 1n 1n 4ne. 2nent. 4nes. 1ni 1n 1no .1no 1n 1n .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1n nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .4 '4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l o1d2r o12d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 1me 2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1t o1s2t1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1p pa1l palo12 .pa1na .pa2n1a2f .pa2n1a2m .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1h .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3h .pa1te .pa3tent. 1pe .1pe 1p .1p 1p 1p 4pe. 2pent. .pen2ta p1nu p2nul .pe4r .pe1r1a2 p1r .pe1r1e2 .pe1r12 p1r22q pe1r3h .p1ri .pe1r1i2 .pri1os .pri1s2 .pri2s3s .pri2s3ta .pri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1l ph1ti 3ph2tis 1pi 1p pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2n 1p2neu 1po .1po 1p poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly12 poly12 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1r .p1r 4p4re. .pr1a2 .pr2a3la .pr2au .pr1e2 .pr12 pr1mi prmi1ne prmi3nent. .pr1i2 2p2rent. .pr1o2 .pr1s2 4p4res. pr1se pr3sent. .pr1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro12 pro1mi promi1ne promi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2c pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1t p1t 1p2tr 1p2tr 1pu .1pu 1p .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1r ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1r .1r 1r 1r 4re. .r1a2 .r2a3le .ra1li .r2a3lis .r2a3lit .r2aux .r1e2 .r12 .r2el .r2er .r2r r1ge r3gent. .r1i2 .r2i3fi re1le re3lent. re1li reli1me reli2ment. r1ma rma1ne rma3nent. 2rent. .r1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1t .re3s4tn .re3s4tr .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty r1su rsur1ge rsur3gent. r1ti rti1ce rti3cent. .r1t2r .rt1ro .rtro1a2 .ru2 .r2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1r ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1r 1ru 1r ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1s .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1l 1s2clr s1co 1s2cop 1se .1se 1s 1s 1s 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1s s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1s 1s .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1h sp1h 1s2phr 1s2phr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1t 1s2tein st1r stro1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1s .su2b1a2 .su3b2alt .su2b12 .su3b23r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1r .su2r1e2 .su2r12 .su3r2eau .su3r2ell sur1mi surmi1ne surmi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1t 1t ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1t 1t 1t 4te. t1l tl1e2 tl1i2 tl1o2b tl1o2p tl1s2 tem1p temp1ra tempra1me tempra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1t 1to 1t to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1t tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .4 '4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1v va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1v 1v 1v 4ve. v1lo vlo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1v vi1di vidi1me vidi2ment. vil3l 1vo 1v vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1v 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1z 1z 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 22 a4 4a- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- .4 '4 4 4- -5a4 -54 -54 -54 -54 -54 -54 ab2ment- a1b2r -5a1b2r ab1r -5ab1r ab3ra -5ab3ra ab3sent- absti3nent- ac3cent- acquies4cent- .4 '4 4 4- -54 ae3s4c2h -5ae3s4c2h a1g2n -5a1g2n ag1na -5ag1na a2g3nat -5a2g3nat ai2ment- amalga2ment- 2ment- a1mi -5a1mi ami1no -5ami1no amino1a2c -5amino1a2c a1na -5a1na ana3s4t2r -5ana3s4t2r ani2ment- an1ti -5an1ti anti1a2 -5anti1a2 anti1e2 anti12 -5anti1e2 -5anti12 anti2en1ne -5anti2en1ne antifer3ment- anti1s2 -5anti1s2 a1po -5a1po apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ar3gent- ar3gent. -5ar3gent. ar2ment- ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ar3pent- ar3pent. -5ar3pent. as2ment- as2ta -5as2ta au2ment- .b4 'b4 b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 c4 4c- .4 '4 4 4- -5c4 -54 car2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1h 2chent- 4c4hes- -5ch1v2r -5chv1re -5chvre1fe -5chvrefeuil2l -5ch2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. comp3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contrema1t2r -5cont1re3mat1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d22 .d4 'd4 d4 4d- .4 '4 4 4- -5d4 -54 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5d1a2 dca3dent- -5d1io 2dent- -5d1o2 4des- -5d2s -5d1sa -5d3s2a3c2r -5ds2a3m -5d3s2as1t2r -5dsa1te -5d3s2a3tell -5d3s2c -5d1se -5d2s12 -5d3s23g2r -5dsen1si -5d3s2ensib -5d3s2ert -5d3s2exu -5d2s1i2 -5d3s2i3d -5d3s2i3g2n -5d3s2i3li -5dsi1ne -5d3s2i3nen -5d3s2in1vo -5d3s2i3r -5d3s2ist -5d1so -5d2s1 -5d3s2o3l -5dso1pi -5d3s2o3pil -5d3s2orm -5d3s2orp -5d3s2ou1f2r -5d3s2p -5d3s2t -5d1su -5d2s1u2n dtri3ment- -5di1a2c -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 e4 4e- 4 4- 4 4- 4 4- .4 '4 4 4- -5e4 -54 -54 -54 -54 3cent- ci2ment- cu2ment- 3dent- li2ment- lo3quent- 2ment- -51mi -5mi1ne -mi3nent- .mi3nent- -5mi3nent. e1n1a2 -5e1n1a2 ni3tent- e1n1o2 -5e1n1o2 entre3gent- 3quent- quipo3tent- quiva4lent- 3rent- er2ment- es3cent- esti2ment- eu2r1a2 -5eu2r1a2 .f4 'f4 f4 4f- -5f4 fa2ment- 4fe- fcu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 h4 4h- -5h4 4he- 4hes- hu2ment- i4 4i- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5i4 -54 -54 -54 -54 i1g2n -5i1g2n i2g3n -5i2g3n i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- i1n1a2 -5i1n1a2 ina1ni -5ina1ni in2a3nit -5in2a3nit inau1gu -5inau1gu in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- i1n1e2 i1n12 -5i1n1e2 -5i1n12 inef1fa -5inef1fa in2effab -5in2effab in1lu -5in1lu in23luc1ta -5in23luc1ta in1na -5in1na in23nar1ra -5in23nar1ra in2ept -5in2ept in2er -5in2er in2exo1ra -5in2exo1ra i1n1i2 -5i1n1i2 ini1mi -5ini1mi in2i3mi1ti -5in2i3mi1ti in2i3q -5in2i3q in2i3t -5in2i3t inno3cent- i1n1o2 -5i1n1o2 ino1cu -5ino1cu in2o3cul -5in2o3cul in2ond -5in2ond inso3lent- ins1ta -5ins1ta in1s2tab -5in1s2tab in1te -5in1te intelli3gent- inte4r3 -5inte4r3 inte1ra2 -5inte1ra2 inte1re2 inte1r2 -5inte1re2 -5inte1r2 inte1ri2 -5inte1ri2 inte1ro2 -5inte1ro2 inters2 -5inters2 inte1ru2 -5inte1ru2 inti2ment- i1n1u2 -5i1n1u2 in2uit -5in2uit in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1s -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mcon3tent- -5m1go -5m2g1oh 4mes- -5m2sa -5m3san -5m1se -5m2s1es -5m2s1i -5m1su -5m2s1u2s -5m1ta -5m1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono12 -5mono1i2 -5mono12d -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 n4 4n- .4 '4 4 4- -5n4 -54 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- o4 4o- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- -5o4 -54 -54 -54 -54 -54 .4 '4 4 4- -54 2ment- om2ment- omnipo3tent- on1gu -5on1gu -on3guent- .on3guent- 'on3guent- on3guent- on3guent. -5on3guent. opu3lent- or2ment- oua1ou -5oua1ou o1vi -5o1vi ovi1s2c -5ovi1s2c .p4 'p4 p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2m -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1h -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3h -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r12 -5p1ri -5pe1r1i2 -5pri1os -5pri1s2 -5pri2s3s -5pri2s3ta -5pri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1r -5pr1a2 -5pr2a3la -5pr2au -5pr1e2 -5pr12 prmi3nent- -5pr1i2 2p2rent- -5pr1o2 4p4res- -5pr1s2 pr3sent- -5pr1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro12 promi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2c -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 r4 4r- -5r4 rai3ment- ra2ment- 4re- -5r1a2 -5r2a3le -5ra1li -5r2a3lis -5r2a3lit -5r2aux -5r1e2 -5r12 -5r2el -5r2er -5r2r r3gent- -5r1i2 -5r2i3fi re3lent- reli2ment- rma3nent- 2rent- -5r1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1t -5re3s4tn -5re3s4tr -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty rsur3gent- rti3cent- -5r1t2r -5rt1ro -5rtro1a2 -5ru2 -5r2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 s4 4s- .4 '4 4 4- -5s4 -54 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b12 -5su3b23r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r12 -5su3r2eau -5su3r2ell surmi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .4 '4 4 4- -54 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- u4 4u- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5u4 -54 -54 -54 -54 .v4 'v4 v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 x4 4x- -5x4 2xent- y4 4y- .4 '4 4 4- .4 '4 4 4- -5y4 -54 -54 .z4 'z4 z4 4z- .4 '4 4 4- -5z4 -54 4ze- 2zent- 4zes- |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/thes_fr.dat version [8e7389c84b].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/thes_fr.idx version [e141d55d12].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/ds_strings.py version [a63cfffb6b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# -*- encoding: UTF-8 -*-
def getUI (sLang):
if sLang in dStrings:
return dStrings[sLang]
return dStrings["fr"]
dStrings = {
"fr": {
"title": u"Orthographe française",
"choose": u"Choisissez un dictionnaire",
"select": u"Utiliser ce dictionnaire",
"moderne": u"“Moderne”",
"classique": u"“Classique” (recommandé)",
"reforme1990": u"“Réforme 1990”",
"toutesvariantes": u"“Toutes variantes”",
"descModern": u"Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot.",
"descClassic": u"Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle.",
"descReform": u"Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”.",
"descAllvar": u"Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française.",
"restart": u"Le changement ne sera effectif qu’après le redémarrage du logiciel.",
"error": u"Erreur : impossible de savoir quel dictionnaire est actif."
},
"en": {
"title": u"French spelling",
"choose": u"Choose a dictionary",
"select": u"Use this dictionary",
"moderne": u"“Modern”",
"classique": u"“Classic” (recommended)",
"reforme1990": u"“Reform 1990”",
"toutesvariantes": u"“All variants”",
"descModern": u"This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word.",
"descClassic": u"This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language.",
"descReform": u"With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erroneous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary.",
"descAllvar": u"This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who don’t know very well the French language.",
"restart": u"The modification will be effective only after restarting the software.",
"error": u"Error: enable to retrieve information about the current dictionary."
}
}
|
Added gc_lang/fr/oxt/Dictionnaires/french_flag.png version [960f4814b1].
cannot compute difference between binary files
Added gc_lang/fr/oxt/TextFormatter/TextFormatter.py version [32ab9b6099].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 |
# -*- coding: utf8 -*-
# Text Formatter
# by Olivier R.
# License: MPL 2
import unohelper
import uno
import sys
import os
import traceback
import time
if sys.version_info.major == 3:
import imp
import tf_strings
import tf_options
import helpers
from com.sun.star.task import XJobExecutor
from com.sun.star.awt import XActionListener
from com.sun.star.awt.MessageBoxButtons import BUTTONS_OK
# BUTTONS_OK, BUTTONS_OK_CANCEL, BUTTONS_YES_NO, BUTTONS_YES_NO_CANCEL, BUTTONS_RETRY_CANCEL, BUTTONS_ABORT_IGNORE_RETRY
# DEFAULT_BUTTON_OK, DEFAULT_BUTTON_CANCEL, DEFAULT_BUTTON_RETRY, DEFAULT_BUTTON_YES, DEFAULT_BUTTON_NO, DEFAULT_BUTTON_IGNORE
from com.sun.star.awt.MessageBoxType import INFOBOX # MESSAGEBOX, INFOBOX, WARNINGBOX, ERRORBOX, QUERYBOX
def MessageBox (xParentWin, sMsg, sTitle, nBoxType=INFOBOX, nBoxButtons=BUTTONS_OK):
ctx = uno.getComponentContext()
xToolkit = ctx.ServiceManager.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx)
xMsgBox = xToolkit.createMessageBox(xParentWin, nBoxType, nBoxButtons, sTitle, sMsg)
return xMsgBox.execute()
class TextFormatter (unohelper.Base, XActionListener, XJobExecutor):
def __init__ (self, ctx):
self.ctx = ctx
self.xSvMgr = self.ctx.ServiceManager
self.xContainer = None
self.xDialog = None
# XJobExecutor
def trigger (self, args):
try:
xTF = TextFormatter(self.ctx)
xTF.run()
except:
traceback.print_exc()
def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
xWidget.Name = name
xWidget.PositionX = x
xWidget.PositionY = y
xWidget.Width = w
xWidget.Height = h
for k, w in kwargs.items():
setattr(xWidget, k, w)
self.xDialog.insertByName(name, xWidget)
return xWidget
def run (self, sLang):
self.dUI = tf_strings.getUI(sLang)
## dialog
self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
self.xDialog.Width = 320
self.xDialog.Title = self.dUI.get('title', "#title#")
xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD1.Height = 12
xFD1.Name = "Verdana"
xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFD2.Height = 10
xFD2.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFD2.Name = "Verdana"
xFDsmall = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDsmall.Height = 6
xFDsmall.Name = "Verdana"
## widgets
nGroupBoxWith = (self.xDialog.Width - 15) // 2
nWidth = nGroupBoxWith-10
nWidthHalf = (nWidth // 2) - 10
nHeight = 10
nColor = 0xAA2200
# close or apply
self.bClose = False
# group box // surnumerary spaces
x = 10; y = 5
nPosRes = nGroupBoxWith - 22
gbm1 = self._addWidget('groupbox1', 'GroupBox', x-5, y, nGroupBoxWith, 90, Label = " " * len(self.dUI.get('ssp', "#err")), FontDescriptor = xFD1)
self.ssp = self._addWidget('ssp', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('ssp', "#err"), FontDescriptor = xFD1, \
FontRelief = 1, TextColor = nColor, State = True)
self.ssp1 = self._addWidget('ssp1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('ssp1', "#err"), State = True)
self.ssp2 = self._addWidget('ssp2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('ssp2', "#err"), State = True)
self.ssp3 = self._addWidget('ssp3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('ssp3', "#err"), State = True)
self.ssp4 = self._addWidget('ssp4', 'CheckBox', x, y+45, nWidth, nHeight, Label = self.dUI.get('ssp4', "#err"), State = True)
self.ssp5 = self._addWidget('ssp5', 'CheckBox', x, y+55, nWidth, nHeight, Label = self.dUI.get('ssp5', "#err"), State = True)
self.ssp6 = self._addWidget('ssp6', 'CheckBox', x, y+65, nWidth, nHeight, Label = self.dUI.get('ssp6', "#err"), State = True)
self.ssp7 = self._addWidget('ssp7', 'CheckBox', x, y+75, nWidth, nHeight, Label = self.dUI.get('ssp7', "#err"), State = True)
self.ssp1_res = self._addWidget('ssp1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2)
self.ssp2_res = self._addWidget('ssp2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2)
self.ssp3_res = self._addWidget('ssp3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2)
self.ssp4_res = self._addWidget('ssp4_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2)
self.ssp5_res = self._addWidget('ssp5_res', 'FixedText', nPosRes, y+55, 20, nHeight, Label = "", Align = 2)
self.ssp6_res = self._addWidget('ssp6_res', 'FixedText', nPosRes, y+65, 20, nHeight, Label = "", Align = 2)
self.ssp7_res = self._addWidget('ssp7_res', 'FixedText', nPosRes, y+75, 20, nHeight, Label = "", Align = 2)
# group box // missing spaces
x = 10; y = 100
gbm2 = self._addWidget('groupbox2', 'GroupBox', x-5, y, nGroupBoxWith, 40, Label = " " * len(self.dUI.get('space', "#err")), FontDescriptor = xFD1)
self.space = self._addWidget('space', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('space', "#err"), FontDescriptor = xFD1, \
FontRelief = 1, TextColor = nColor, State = True)
self.space1 = self._addWidget('space1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('space1', "#err"), State = True)
self.space2 = self._addWidget('space2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('space2', "#err"), State = True)
self.space1_res = self._addWidget('space1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2)
self.space2_res = self._addWidget('space2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2)
# group box // non-breaking spaces
x = 10; y = 145
gbm3 = self._addWidget('groupbox3', 'GroupBox', x-5, y, nGroupBoxWith, 70, Label = " " * len(self.dUI.get('nbsp', "#err")), FontDescriptor = xFD1)
self.nbsp = self._addWidget('nbsp', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('nbsp', "#err"), FontDescriptor = xFD1, \
FontRelief = 1, TextColor = nColor, State = True)
self.nbsp1 = self._addWidget('nbsp1', 'CheckBox', x, y+15, 85, nHeight, Label = self.dUI.get('nbsp1', "#err"), State = True)
self.nbsp2 = self._addWidget('nbsp2', 'CheckBox', x, y+25, 85, nHeight, Label = self.dUI.get('nbsp2', "#err"), State = True)
self.nbsp3 = self._addWidget('nbsp3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('nbsp3', "#err"), State = True)
self.nbsp4 = self._addWidget('nbsp4', 'CheckBox', x, y+45, 85, nHeight, Label = self.dUI.get('nbsp4', "#err"), State = True)
self.nbsp5 = self._addWidget('nbsp5', 'CheckBox', x, y+55, 85, nHeight, Label = self.dUI.get('nbsp5', "#err"), State = True)
self.nnbsp1 = self._addWidget('nnbsp1', 'CheckBox', x+85, y+15, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), HelpText = self.dUI.get('nnbsp_help', "#err"), State = False)
self.nnbsp2 = self._addWidget('nnbsp2', 'CheckBox', x+85, y+25, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), State = False)
self.nnbsp4 = self._addWidget('nnbsp4', 'CheckBox', x+85, y+45, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), State = False)
self.nbsp1_res = self._addWidget('nbsp1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2)
self.nbsp2_res = self._addWidget('nbsp2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2)
self.nbsp3_res = self._addWidget('nbsp3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2)
self.nbsp4_res = self._addWidget('nbsp4_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2)
self.nbsp5_res = self._addWidget('nbsp5_res', 'FixedText', nPosRes, y+55, 20, nHeight, Label = "", Align = 2)
# group box // deletion
x = 10; y = 220
gbm7 = self._addWidget('groupbox7', 'GroupBox', x-5, y, nGroupBoxWith, 50, Label = " " * len(self.dUI.get('delete', "#err")), FontDescriptor = xFD1)
self.delete = self._addWidget('delete', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('delete', "#err"), FontDescriptor = xFD1, \
FontRelief = 1, TextColor = nColor, State = True)
self.delete1 = self._addWidget('delete1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('delete1', "#err"), State = True)
self.delete2 = self._addWidget('delete2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('delete2', "#err"), State = True)
self.delete2a = self._addWidget('delete2a', 'RadioButton', x+10, y+35, 50, nHeight, Label = self.dUI.get('delete2a', "#"))
self.delete2b = self._addWidget('delete2b', 'RadioButton', x+60, y+35, 60, nHeight, Label = self.dUI.get('delete2b', "#"), State = True)
self.delete2c = self._addWidget('delete2c', 'RadioButton', x+120, y+35, 40, nHeight, Label = self.dUI.get('delete2c', "#"), \
HelpText = self.dUI.get('delete2c_help', "#err"))
self.delete1_res = self._addWidget('delete1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2)
self.delete2_res = self._addWidget('delete2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2)
# group box // typographical marks
x = 168; y = 5
nPosRes = x + nGroupBoxWith - 32
gbm4 = self._addWidget('groupbox4', 'GroupBox', x-5, y, nGroupBoxWith, 130, Label = " " * len(self.dUI.get('typo', "#err")), FontDescriptor = xFD1)
self.typo = self._addWidget('typo', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('typo', "#err"), FontDescriptor = xFD1, \
FontRelief = 1, TextColor = nColor, State = True)
self.typo1 = self._addWidget('typo1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('typo1', "#err"), State = True)
self.typo2 = self._addWidget('typo2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('typo2', "#err"), State = True)
self.typo3 = self._addWidget('typo3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('typo3', "#err"), State = True)
self.typo3a = self._addWidget('typo3a', 'RadioButton', x+10, y+45, nWidthHalf, nHeight, Label = self.dUI.get('emdash', "#err"))
self.typo3b = self._addWidget('typo3b', 'RadioButton', x+70, y+45, nWidthHalf, nHeight, Label = self.dUI.get('endash', "#err"), State = True)
self.typo4 = self._addWidget('typo4', 'CheckBox', x, y+55, nWidth, nHeight, Label = self.dUI.get('typo4', "#err"), State = True)
self.typo4a = self._addWidget('typo4a', 'RadioButton', x+10, y+65, nWidthHalf, nHeight, Label = self.dUI.get('emdash', "#err"), State = True)
self.typo4b = self._addWidget('typo4b', 'RadioButton', x+70, y+65, nWidthHalf, nHeight, Label = self.dUI.get('endash', "#err"))
self.typo5 = self._addWidget('typo5', 'CheckBox', x, y+75, nWidth, nHeight, Label = self.dUI.get('typo5', "#err"), State = True)
self.typo6 = self._addWidget('typo6', 'CheckBox', x, y+85, nWidth, nHeight, Label = self.dUI.get('typo6', "#err"), State = True)
self.typo7 = self._addWidget('typo7', 'CheckBox', x, y+95, nWidth, nHeight, Label = self.dUI.get('typo7', "#err"), State = True)
self.typo8 = self._addWidget('typo8', 'CheckBox', x, y+105, 35, nHeight, Label = self.dUI.get('typo8', "#err"), \
HelpText = self.dUI.get('typo8_help', "#err"), State = True)
self.typo8a = self._addWidget('typo8a', 'RadioButton', x+45, y+105, 30, nHeight, Label = self.dUI.get('typo8a', "#err"))
self.typo8b = self._addWidget('typo8b', 'RadioButton', x+75, y+105, 35, nHeight, Label = self.dUI.get('typo8b', "#err"), State = True)
self.typo_ff = self._addWidget('typo_ff', 'CheckBox', x+10, y+115, 18, nHeight, Label = self.dUI.get('typo_ff', "#err"), State = True)
self.typo_fi = self._addWidget('typo_fi', 'CheckBox', x+28, y+115, 18, nHeight, Label = self.dUI.get('typo_fi', "#err"), State = True)
self.typo_ffi = self._addWidget('typo_ffi', 'CheckBox', x+46, y+115, 20, nHeight, Label = self.dUI.get('typo_ffi', "#err"), State = True)
self.typo_fl = self._addWidget('typo_fl', 'CheckBox', x+66, y+115, 18, nHeight, Label = self.dUI.get('typo_fl', "#err"), State = True)
self.typo_ffl = self._addWidget('typo_ffl', 'CheckBox', x+84, y+115, 20, nHeight, Label = self.dUI.get('typo_ffl', "#err"), State = True)
self.typo_ft = self._addWidget('typo_ft', 'CheckBox', x+104, y+115, 18, nHeight, Label = self.dUI.get('typo_ft', "#err"), State = True)
self.typo_st = self._addWidget('typo_st', 'CheckBox', x+122, y+115, 18, nHeight, Label = self.dUI.get('typo_st', "#err"), State = True)
self.typo1_res = self._addWidget('typo1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2)
self.typo2_res = self._addWidget('typo2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2)
self.typo3_res = self._addWidget('typo3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2)
self.typo4_res = self._addWidget('typo4_res', 'FixedText', nPosRes, y+55, 20, nHeight, Label = "", Align = 2)
self.typo5_res = self._addWidget('typo5_res', 'FixedText', nPosRes, y+75, 20, nHeight, Label = "", Align = 2)
self.typo6_res = self._addWidget('typo6_res', 'FixedText', nPosRes, y+85, 20, nHeight, Label = "", Align = 2)
self.typo7_res = self._addWidget('typo7_res', 'FixedText', nPosRes, y+95, 20, nHeight, Label = "", Align = 2)
self.typo8_res = self._addWidget('typo8_res', 'FixedText', nPosRes, y+105, 20, nHeight, Label = "", Align = 2)
# group box // misc.
x = 168; y = 140
gbm5 = self._addWidget('groupbox5', 'GroupBox', x-5, y, nGroupBoxWith, 70, Label = " " * len(self.dUI.get('misc', "#err")), FontDescriptor = xFD1)
self.misc = self._addWidget('misc', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('misc', "#err"), FontDescriptor = xFD1, \
FontRelief = 1, TextColor = nColor, State = True)
self.misc1 = self._addWidget('misc1', 'CheckBox', x, y+15, 80, nHeight, Label = self.dUI.get('misc1', "#err"), State = True)
self.misc1a = self._addWidget('misc1a', 'CheckBox', x+80, y+15, 30, nHeight, Label = self.dUI.get('misc1a', "#err"), State = True)
self.misc2 = self._addWidget('misc2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('misc2', "#err"), State = True)
self.misc3 = self._addWidget('misc3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('misc3', "#err"), State = True)
#self.misc4 = self._addWidget('misc4', 'CheckBox', x, y+45, nWidth, nHeight, Label = self.dUI.get('misc4', "#err"), State = True)
self.misc5 = self._addWidget('misc5', 'CheckBox', x, y+45, nWidth, nHeight, Label = self.dUI.get('misc5', "#err"), State = True)
self.misc5b = self._addWidget('misc5b', 'CheckBox', x+10, y+55, nWidth-40, nHeight, Label = self.dUI.get('misc5b', "#err"), State = False)
self.misc5c = self._addWidget('misc5c', 'CheckBox', x+nWidth-25, y+55, 30, nHeight, Label = self.dUI.get('misc5c', "#err"), State = False)
self.misc1_res = self._addWidget('misc1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2)
self.misc2_res = self._addWidget('misc2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2)
self.misc3_res = self._addWidget('misc3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2)
#self.misc4_res = self._addWidget('misc4_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2)
self.misc5_res = self._addWidget('misc5_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2)
# group box // restructuration
x = 168; y = 215
gbm6 = self._addWidget('groupbox6', 'GroupBox', x-5, y, nGroupBoxWith, 50, Label = " " * len(self.dUI.get('struct', "#err")), FontDescriptor = xFD1)
self.struct = self._addWidget('struct', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('struct', "#err"), FontDescriptor = xFD1, \
FontRelief = 1, TextColor = nColor, HelpText = self.dUI.get('struct_help', "#err"), State = False)
self.struct1 = self._addWidget('struct1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('struct1', "#err"), State = True, Enabled = False)
self.struct2 = self._addWidget('struct2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('struct2', "#err"), State = True, Enabled = False)
self.struct3 = self._addWidget('struct3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('struct3', "#err"), \
HelpText = self.dUI.get('struct3_help', "#err"), State = False, Enabled = False)
self.struct1_res = self._addWidget('struct1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2)
self.struct2_res = self._addWidget('struct2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2)
self.struct3_res = self._addWidget('struct3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2)
# dialog height
self.xDialog.Height = 292
xWindowSize = helpers.getWindowSize()
self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
# lists of checkbox widgets
self.dCheckboxWidgets = {
"ssp": [self.ssp1, self.ssp2, self.ssp3, self.ssp4, self.ssp5, self.ssp6, self.ssp7],
"space": [self.space1, self.space2],
"nbsp": [self.nbsp1, self.nbsp2, self.nbsp3, self.nbsp4, self.nbsp5, self.nnbsp1, self.nnbsp2, self.nnbsp4],
"delete": [self.delete1, self.delete2, self.delete2a, self.delete2b, self.delete2c],
"typo": [self.typo1, self.typo2, self.typo3, self.typo3a, self.typo3b, self.typo4, self.typo4a, self.typo4b, self.typo5, self.typo6, \
self.typo7, self.typo8, self.typo8a, self.typo8b, self.typo_ff, self.typo_fi, self.typo_ffi, self.typo_fl, self.typo_ffl, \
self.typo_ft, self.typo_st],
"misc": [self.misc1, self.misc2, self.misc3, self.misc5, self.misc1a, self.misc5b, self.misc5c], #self.misc4,
"struct": [self.struct1, self.struct2, self.struct3]
}
# progress bar
self.pbar = self._addWidget('pbar', 'ProgressBar', 22, self.xDialog.Height-16, 215, 10)
self.pbar.ProgressValueMin = 0
self.pbar.ProgressValueMax = 31
# time counter
self.time_res = self._addWidget('time_res', 'FixedText', self.xDialog.Width-80, self.xDialog.Height-15, 20, nHeight, Label = "", Align = 2)
# buttons
self.bdefault = self._addWidget('default', 'Button', 5, self.xDialog.Height-19, 15, 15, Label = self.dUI.get('default', "#err"), \
HelpText = self.dUI.get('default_help', "#err"), FontDescriptor = xFD2, TextColor = 0x444444)
#self.bsel = self._addWidget('bsel', 'CheckBox', x, self.xDialog.Height-40, nWidth-55, nHeight, Label = self.dUI.get('bsel', "#err"))
self.bapply = self._addWidget('apply', 'Button', self.xDialog.Width-55, self.xDialog.Height-19, 50, 15, Label = self.dUI.get('apply', "#err"), \
FontDescriptor = xFD2, TextColor = 0x004400)
self.binfo = self._addWidget('info', 'Button', self.xDialog.Width-15, 0, 10, 9, Label = self.dUI.get('info', "#err"), \
HelpText = self.dUI.get('infotitle', "#err"), FontDescriptor = xFDsmall, TextColor = 0x444444)
# load configuration
self._loadConfig()
## container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.xDialog)
self.xContainer.setVisible(False)
self.xContainer.getControl('info').addActionListener(self)
self.xContainer.getControl('info').setActionCommand('Info')
self.xContainer.getControl('default').addActionListener(self)
self.xContainer.getControl('default').setActionCommand('Default')
self.xContainer.getControl('apply').addActionListener(self)
self.xContainer.getControl('apply').setActionCommand('Apply')
self.xContainer.getControl('ssp').addActionListener(self)
self.xContainer.getControl('ssp').setActionCommand('SwitchSsp')
self.xContainer.getControl('space').addActionListener(self)
self.xContainer.getControl('space').setActionCommand('SwitchSpace')
self.xContainer.getControl('nbsp').addActionListener(self)
self.xContainer.getControl('nbsp').setActionCommand('SwitchNbsp')
self.xContainer.getControl('delete').addActionListener(self)
self.xContainer.getControl('delete').setActionCommand('SwitchDelete')
self.xContainer.getControl('typo').addActionListener(self)
self.xContainer.getControl('typo').setActionCommand('SwitchTypo')
self.xContainer.getControl('misc').addActionListener(self)
self.xContainer.getControl('misc').setActionCommand('SwitchMisc')
self.xContainer.getControl('struct').addActionListener(self)
self.xContainer.getControl('struct').setActionCommand('SwitchStruct')
xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(xToolkit, None)
self.xContainer.execute()
# XActionListener
def actionPerformed (self, xActionEvent):
try:
if xActionEvent.ActionCommand == 'Apply':
if self.bClose:
self.xContainer.endExecute()
else:
xDesktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
xElem = xDesktop.getCurrentComponent()
# Writer
if True:
# no selection
self._saveConfig()
self._replaceAll(xElem)
else:
# modify selected text only
pass
#xSelecList = xDoc.getCurrentSelection()
#xSel = xSelecList.getByIndex(0)
# Impress
# Note: impossible to format text on Impress right now as ReplaceDescriptors don’t accept regex!
#xPages = xElem.getDrawPages()
#for i in range(xPages.Count):
# self._replaceAll(xPages.getByIndex(i))
#xPages = xElem.getMasterPages()
#for i in range(xPages.Count):
# self._replaceAll(xPages.getByIndex(i))
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'SwitchSsp':
self._switchCheckBox(self.ssp)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'SwitchSpace':
self._switchCheckBox(self.space)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'SwitchNbsp':
self._switchCheckBox(self.nbsp)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'SwitchDelete':
self._switchCheckBox(self.delete)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'SwitchTypo':
self._switchCheckBox(self.typo)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'SwitchMisc':
self._switchCheckBox(self.misc)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'SwitchStruct':
self._switchCheckBox(self.struct)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'Default':
self._setConfig(tf_options.dDefaultOpt)
self._setApplyButtonLabel()
elif xActionEvent.ActionCommand == 'Info':
xDesktop = self.xSvMgr.createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx)
xDoc = xDesktop.getCurrentComponent()
xWindow = xDoc.CurrentController.Frame.ContainerWindow
MessageBox (xWindow, self.dUI.get('infomsg', "#err"), self.dUI.get('infotitle', "#err"))
else:
print("Wrong command: " + xActionEvent.ActionCommand)
except:
traceback.print_exc()
def _loadConfig (self):
try:
if sys.version_info.major == 3:
imp.reload(tf_options)
else:
reload(tf_options)
self._setConfig(tf_options.dOpt)
except:
traceback.print_exc()
def _setConfig (self, d):
try:
for key, val in d.items():
w = getattr(self, key)
w.State = val
if key in self.dCheckboxWidgets:
self._switchCheckBox(w)
except:
raise
def _saveConfig (self):
try:
# create options dictionary
dOpt = {}
for key, lWidget in self.dCheckboxWidgets.items():
w = getattr(self, key)
dOpt[w.Name] = w.State
for w in lWidget:
dOpt[w.Name] = w.State
# get extension path
xDefaultContext = self.ctx.ServiceManager.DefaultContext
xPackageInfoProvider = xDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
sExtPath = xPackageInfoProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR")
sExtPath = sExtPath[8:] + "/pythonpath/tf_options.py" # remove "file:///"
sExtPath = os.path.abspath(sExtPath)
# write file
if os.path.isfile(sExtPath):
hOpt = open(sExtPath, "w")
hOpt.write("dDefaultOpt = " + str(tf_options.dDefaultOpt) + "\n")
hOpt.write("dOpt = " + str(dOpt))
hOpt.close()
except:
traceback.print_exc()
def _switchCheckBox (self, wGroupCheckbox):
for w in self.dCheckboxWidgets.get(wGroupCheckbox.Name, []):
w.Enabled = wGroupCheckbox.State
def _setApplyButtonLabel (self):
if self.ssp.State or self.space.State or self.nbsp.State or self.delete.State or self.typo.State or self.misc.State or self.struct.State:
self.bClose = False
self.bapply.Label = self.dUI.get('apply', "#err")
self.bapply.TextColor = 0x004400
else:
self.bClose = True
self.bapply.Label = self.dUI.get('close', "#err")
self.bapply.TextColor = 0x440000
self.xContainer.setVisible(True)
def _replaceAll (self, xElem):
try:
nStartTime = time.clock()
self.xContainer.setVisible(True)
# change pointer
xPointer = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.awt.Pointer", self.ctx)
xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.WAIT"))
xWindowPeer = self.xContainer.getPeer()
xWindowPeer.setPointer(xPointer)
for x in xWindowPeer.Windows:
x.setPointer(xPointer)
# NOTE: A LOT OF REGEX COULD BE MERGED IF ICU ENGINE WAS NOT SO BUGGY
# "([;?!…])(?=[:alnum:])" => "$1 " doesn’t work properly
# "(?<=[:alnum:])([;?!…])" => " $1 " doesn’t work properly
self.pbar.ProgressValue = 0
# Restructuration
if self.struct.State:
if self.struct1.State:
n = self._replaceText(xElem, "\\n", "\\n", True) # end of line => end of paragraph
self.struct1_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.struct2.State:
n = self._replaceText(xElem, "([:alpha:])- *\n([:alpha:])", "$1$2", True) # EOL
n += self._replaceHyphenAtEndOfParagraphs(xElem) # EOP
self.struct2_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.struct3.State:
n = self._mergeContiguousParagraphs(xElem)
self.struct3_res.Label = str(n)
self.pbar.ProgressValue += 1
self.struct.State = False
self._switchCheckBox(self.struct)
self.pbar.ProgressValue = 3
# espaces surnuméraires
if self.ssp.State:
if self.ssp3.State:
n = self._replaceText(xElem, "[ ]+$", "", True)
self.ssp3_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.ssp2.State:
n = self._replaceText(xElem, " ", " ", False) # espace + espace insécable -> espace
n += self._replaceText(xElem, " ", " ", False) # espace insécable + espace -> espace
n += self._replaceText(xElem, " +", " ", True) # espaces surnuméraires
n += self._replaceText(xElem, " +", " ", True) # espaces insécables surnuméraires
self.ssp2_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.ssp1.State:
n = self._replaceText(xElem, "^[ ]+", "", True)
self.ssp1_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.ssp4.State:
n = self._replaceText(xElem, " +(?=[.,…])", "", True)
self.ssp4_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.ssp5.State:
n = self._replaceText(xElem, "\\([ ]+", "(", True)
n += self._replaceText(xElem, "[ ]+\\)", ")", True)
self.ssp5_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.ssp6.State:
n = self._replaceText(xElem, "\\[[ ]+", "[", True)
n += self._replaceText(xElem, "[ ]+\\]", "]", True)
self.ssp6_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.ssp7.State:
n = self._replaceText(xElem, "“[ ]+", "“", True)
n += self._replaceText(xElem, "[ ]”", "”", True)
self.ssp7_res.Label = str(n)
self.pbar.ProgressValue += 1
self.ssp.State = False
self._switchCheckBox(self.ssp)
self.pbar.ProgressValue = 10
# espaces typographiques
if self.nbsp.State:
if self.nbsp1.State:
if self.nnbsp1.State:
# espaces insécables fines
n = self._replaceText(xElem, "(?<=[:alnum:]);", " ;", True)
n += self._replaceText(xElem, "(?<=[:alnum:])[?][ ]", " ? ", True)
n += self._replaceText(xElem, "(?<=[:alnum:])[?]$", " ?", True)
n += self._replaceText(xElem, "(?<=[:alnum:])!", " !", True)
n += self._replaceText(xElem, "(?<=[]…)»}]);", " ;", True)
n += self._replaceText(xElem, "(?<=[]…)»}])[?][ ]", " ? ", True)
n += self._replaceText(xElem, "(?<=[]…)»}])[?]$", " ?", True)
n += self._replaceText(xElem, "(?<=[]…)»}])!", " !", True)
n += self._replaceText(xElem, "[ ]+([;?!])", " $1", True)
n += self._replaceText(xElem, "(?<=[:alnum:]):[ ]", " : ", True)
n += self._replaceText(xElem, "(?<=[:alnum:]):$", " :", True)
n += self._replaceText(xElem, "(?<=[]…)»}]):", " :", True)
n += self._replaceText(xElem, "[ ]+:", " :", True)
else:
# espaces insécables
n = self._replaceText(xElem, "(?<=[:alnum:]):[ ]", " : ", True)
n += self._replaceText(xElem, "(?<=[:alnum:]):$", " :", True)
n += self._replaceText(xElem, "(?<=[:alnum:]);", " ;", True)
n += self._replaceText(xElem, "(?<=[:alnum:])[?][ ]", " ? ", True)
n += self._replaceText(xElem, "(?<=[:alnum:])[?]$", " ?", True)
n += self._replaceText(xElem, "(?<=[:alnum:])!", " !", True)
n += self._replaceText(xElem, "(?<=[]…)»}]):", " :", True)
n += self._replaceText(xElem, "(?<=[]…)»}]);", " ;", True)
n += self._replaceText(xElem, "(?<=[]…)»}])[?][ ]", " ? ", True)
n += self._replaceText(xElem, "(?<=[]…)»}])[?]$", " ?", True)
n += self._replaceText(xElem, "(?<=[]…)»}])!", " !", True)
n += self._replaceText(xElem, "[ ]+([:;?!])", " $1", True)
n -= self._replaceText(xElem, "([[(])[ ]([!?:;])", "$1$2", True)
n -= self._replaceText(xElem, "(?<=http)[ ]://", "://", True)
n -= self._replaceText(xElem, "(?<=https)[ ]://", "://", True)
n -= self._replaceText(xElem, "(?<=ftp)[ ]://", "://", True)
n -= self._replaceText(xElem, "(?<=&)amp[ ];", "amp;", True) # ICU: & is $0 in replacement field
n -= self._replaceText(xElem, "(?<=&)nbsp[ ];", "nbsp;", True) # ICU: & is $0 in replacement field
n -= self._replaceText(xElem, "(?<=&)lt[ ];", "lt;", True) # ICU: & is $0 in replacement field
n -= self._replaceText(xElem, "(?<=&)gt[ ];", "gt;", True) # ICU: & is $0 in replacement field
n -= self._replaceText(xElem, "(?<=&)apos[ ];", "apos;", True) # ICU: & is $0 in replacement field
n -= self._replaceText(xElem, "(?<=&)quot[ ];", "quot;", True) # ICU: & is $0 in replacement field
n -= self._replaceText(xElem, "(?<=&)thinsp[ ];", "thinsp;", True) # ICU: & is $0 in replacement field
self.nbsp1_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.nbsp2.State:
if self.nnbsp2.State:
# espaces insécables fines
n = self._replaceText(xElem, "«(?=[:alnum:])", "« ", True)
n += self._replaceText(xElem, "«[ ]+", "« ", True)
n += self._replaceText(xElem, "(?<=[:alnum:]|[.!?])»", " »", True)
n += self._replaceText(xElem, "[ ]+»", " »", True)
else:
# espaces insécables
n = self._replaceText(xElem, "«(?=[:alnum:])", "« ", True)
n += self._replaceText(xElem, "«[ ]+", "« ", True)
n += self._replaceText(xElem, "(?<=[:alnum:]|[.!?])»", " »", True)
n += self._replaceText(xElem, "[ ]+»", " »", True)
self.nbsp2_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.nbsp3.State:
n = self._replaceText(xElem, "([:digit:])([%‰€$£¥˚℃])", "$1 $2", True)
n += self._replaceText(xElem, "([:digit:]) ([%‰€$£¥˚℃])", "$1 $2", True)
self.nbsp3_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.nbsp4.State:
if self.nnbsp4.State:
# espaces insécables fines
n = self._replaceText(xElem, "([:digit:])[ ]([:digit:])", "$1 $2", True)
else:
# espaces insécables
n = self._replaceText(xElem, "([:digit:])[ ]([:digit:])", "$1 $2", True)
self.nbsp4_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.nbsp5.State:
n = self._replaceText(xElem, "(?<=[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµnd]?(?:[slgJKΩΩℓ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\\b", " $1", True, True)
self.nbsp5_res.Label = str(n)
self.pbar.ProgressValue += 1
if False:
n = self._replaceText(xElem, "\\b(MM?\\.|Mlle|Mgr) ", "$1 ", True)
self.nbsp3_res.Label = str(n)
self.pbar.ProgressValue += 1
self.nbsp.State = False
self._switchCheckBox(self.nbsp)
self.pbar.ProgressValue = 15
# espaces manquants
if self.typo.State:
if self.typo6.State:
n = self._replaceText(xElem, "\\bN\\.([ms])\\b", "N·$1", True, True) # N·m et N·m-1, N·s
n += self._replaceText(xElem, "\\bW\\.h\\b", "W·h", True, True)
n += self._replaceText(xElem, "\\bPa\\.s\\b", "Pa·s", True, True)
n += self._replaceText(xElem, "\\bA\\.h\\b", "A·h", True, True)
n += self._replaceText(xElem, "\\bΩ\\.m\\b", "Ω·m", True, True)
n += self._replaceText(xElem, "\\bS\\.m\\b", "S·m", True, True)
n += self._replaceText(xElem, "\\bg\\.s(?=-1)\\b", "g·s", True, True)
n += self._replaceText(xElem, "\\bm\\.s(?=-[12])\\b", "m·s", True, True)
n += self._replaceText(xElem, "\\bg\\.m(?=2|-3)\\b", "g·m", True, True)
n += self._replaceText(xElem, "\\bA\\.m(?=-1)\\b", "A·m", True, True)
n += self._replaceText(xElem, "\\bJ\\.K(?=-1)\\b", "J·K", True, True)
n += self._replaceText(xElem, "\\bW\\.m(?=-2)\\b", "W·m", True, True)
n += self._replaceText(xElem, "\\bcd\\.m(?=-2)\\b", "cd·m", True, True)
n += self._replaceText(xElem, "\\bC\\.kg(?=-1)\\b", "C·kg", True, True)
n += self._replaceText(xElem, "\\bH\\.m(?=-1)\\b", "H·m", True, True)
n += self._replaceText(xElem, "\\bJ\\.kg(?=-1)\\b", "J·kg", True, True)
n += self._replaceText(xElem, "\\bJ\\.m(?=-3)\\b", "J·m", True, True)
n += self._replaceText(xElem, "\\bm[2²]\\.s\\b", "m²·s", True, True)
n += self._replaceText(xElem, "\\bm[3³]\\.s(?=-1)\\b", "m³·s", True, True)
#n += self._replaceText(xElem, "\\bJ.kg-1.K-1\\b", "J·kg-1·K-1", True, True)
#n += self._replaceText(xElem, "\\bW.m-1.K-1\\b", "W·m-1·K-1", True, True)
#n += self._replaceText(xElem, "\\bW.m-2.K-1\\b", "W·m-2·K-1", True, True)
n += self._replaceText(xElem, "\\b(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)Ω\\b", "$1Ω", True, True)
self.typo6_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.space.State:
if self.space1.State:
n = self._replaceText(xElem, ";(?=[:alnum:])", "; ", True)
n += self._replaceText(xElem, "\\?(?=[A-ZÉÈÊÂÀÎ])", "? ", True)
n += self._replaceText(xElem, "!(?=[:alnum:])", "! ", True)
n += self._replaceText(xElem, "…(?=[:alnum:])", "… ", True)
n += self._replaceText(xElem, "\\.(?=[A-ZÉÈÎ][:alpha:])", ". ", True, True)
n += self._replaceText(xElem, "\\.(?=À)", ". ", True, True)
n += self._replaceText(xElem, ",(?=[:alpha:])", ", ", True)
n += self._replaceText(xElem, "([:alpha:]),([0-9])", "$1, $2", True)
n += self._replaceText(xElem, ":(?=[:alpha:])", ": ", True)
# exceptions:
n -= self._replaceText(xElem, "(?<=DnT), w\\b", ",w", True, True)
n -= self._replaceText(xElem, "(?<=DnT), A\\b", ",A", True, True)
self.space1_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.space2.State:
n = self._replaceText(xElem, " -(?=[:alpha:]|[\"«“'‘])", " - ", True)
n += self._replaceText(xElem, " –(?=[:alpha:]|[\"«“'‘])", " – ", True) # demi-cadratin
n += self._replaceText(xElem, " —(?=[:alpha:]|[\"«“'‘])", " — ", True) # cadratin
n += self._replaceText(xElem, "(?<=[:alpha:])– ", " – ", True)
n += self._replaceText(xElem, "(?<=[:alpha:])— ", " — ", True)
n += self._replaceText(xElem, "(?<=[:alpha:])- ", " - ", True)
n += self._replaceText(xElem, "(?<=[\"»”'’])– ", " – ", True)
n += self._replaceText(xElem, "(?<=[\"»”'’])— ", " — ", True)
n += self._replaceText(xElem, "(?<=[\"»”'’])- ", " - ", True)
self.space2_res.Label = str(n)
self.pbar.ProgressValue += 1
self.space.State = False
self._switchCheckBox(self.space)
self.pbar.ProgressValue = 17
# Suppression
if self.delete.State:
if self.delete1.State:
n = self._replaceText(xElem, "", "", False) # tiret conditionnel / soft hyphen
self.delete1_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.delete2.State:
n = self._replaceBulletsByEmDash(xElem)
self.delete2_res.Label = str(n)
self.pbar.ProgressValue += 1
self.delete.State = False
self._switchCheckBox(self.delete)
self.pbar.ProgressValue = 20
# signes typographiques
if self.typo.State:
if self.typo1.State:
n = self._replaceText(xElem, "\\bl['´‘′`](?=[:alnum:])", "l’", True, True)
n += self._replaceText(xElem, "\\bj['´‘′`](?=[:alnum:])", "j’", True, True)
n += self._replaceText(xElem, "\\bm['´‘′`](?=[:alnum:])", "m’", True, True)
n += self._replaceText(xElem, "\\bt['´‘′`](?=[:alnum:])", "t’", True, True)
n += self._replaceText(xElem, "\\bs['´‘′`](?=[:alnum:])", "s’", True, True)
n += self._replaceText(xElem, "\\bc['´‘′`](?=[:alnum:])", "c’", True, True)
n += self._replaceText(xElem, "\\bd['´‘′`](?=[:alnum:])", "d’", True, True)
n += self._replaceText(xElem, "\\bn['´‘′`](?=[:alnum:])", "n’", True, True)
n += self._replaceText(xElem, "\\bç['´‘′`](?=[:alnum:])", "ç’", True, True)
n += self._replaceText(xElem, "\\bL['´‘′`](?=[:alnum:])", "L’", True, True)
n += self._replaceText(xElem, "\\bJ['´‘′`](?=[:alnum:])", "J’", True, True)
n += self._replaceText(xElem, "\\bM['´‘′`](?=[:alnum:])", "M’", True, True)
n += self._replaceText(xElem, "\\bT['´‘′`](?=[:alnum:])", "T’", True, True)
n += self._replaceText(xElem, "\\bS['´‘′`](?=[:alnum:])", "S’", True, True)
n += self._replaceText(xElem, "\\bC['´‘′`](?=[:alnum:])", "C’", True, True)
n += self._replaceText(xElem, "\\bD['´‘′`](?=[:alnum:])", "D’", True, True)
n += self._replaceText(xElem, "\\bN['´‘′`](?=[:alnum:])", "N’", True, True)
n += self._replaceText(xElem, "\\bÇ['´‘′`](?=[:alnum:])", "Ç’", True, True)
n += self._replaceText(xElem, "(qu|jusqu|lorsqu|puisqu|quoiqu|quelqu|presqu|entr|aujourd|prud)['´‘′`]", "$1’", True)
self.typo1_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.typo2.State:
n = self._replaceText(xElem, "...", "…", False)
n += self._replaceText(xElem, "(?<=…)[.][.]", "…", True)
n += self._replaceText(xElem, "…[.](?![.])", "…", True)
self.typo2_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.typo3.State:
if self.typo3b.State:
# demi-cadratin
n = self._replaceText(xElem, " - ", " – ", False)
n += self._replaceText(xElem, " — ", " – ", False)
n += self._replaceText(xElem, " -,", " –,", False)
n += self._replaceText(xElem, " —,", " –,", False)
else:
# cadratin
n = self._replaceText(xElem, " - ", " — ", False)
n += self._replaceText(xElem, " – ", " — ", False)
n += self._replaceText(xElem, " -,", " —,", False)
n += self._replaceText(xElem, " –,", " —,", False)
self.typo3_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.typo4.State:
if self.typo4a.State:
# cadratin
n = self._replaceText(xElem, "^-[ ]", "— ", True)
n += self._replaceText(xElem, "^–[ ]", "— ", True)
n += self._replaceText(xElem, "^— ", "— ", True)
n += self._replaceText(xElem, "^«[ ][—–-][ ]", "« — ", True)
n += self._replaceText(xElem, "^[-–—](?=[:alnum:])", "— ", True)
else:
# demi-cadratin
n = self._replaceText(xElem, "^-[ ]", "– ", True)
n += self._replaceText(xElem, "^—[ ]", "– ", True)
n += self._replaceText(xElem, "^– ", "– ", True)
n += self._replaceText(xElem, "^[-–—](?=[:alnum:])", "– ", True)
self.typo4_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.typo5.State:
n = self._replaceText(xElem, '"([:alpha:]+)"', "“$1”", True)
n += self._replaceText(xElem, "''([:alpha:]+)''", "“$1”", True)
n += self._replaceText(xElem, "'([:alpha:]+)'", "“$1”", True)
n += self._replaceText(xElem, '^"(?=[:alnum:])', "« ", True)
n += self._replaceText(xElem, "^''(?=[:alnum:])", "« ", True)
n += self._replaceText(xElem, ' "(?=[:alnum:])', " « ", True)
n += self._replaceText(xElem, " ''(?=[:alnum:])", " « ", True)
n += self._replaceText(xElem, '\\("(?=[:alnum:])', "(« ", True)
n += self._replaceText(xElem, "\\(''(?=[:alnum:])", "(« ", True)
n += self._replaceText(xElem, '(?<=[:alnum:])"$', " »", True)
n += self._replaceText(xElem, "(?<=[:alnum:])''$", " »", True)
n += self._replaceText(xElem, '(?<=[:alnum:])"(?=[] ,.:;?!…)])', " »", True)
n += self._replaceText(xElem, "(?<=[:alnum:])''(?=[] ,.:;?!…)])", " »", True)
n += self._replaceText(xElem, '(?<=[.!?…])" ', " » ", True)
n += self._replaceText(xElem, '(?<=[.!?…])"$', " »", True)
self.typo5_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.typo7.State:
# ligatures: no initial cap
n = self._replaceText(xElem, "coeur", "cœur", False, True)
n += self._replaceText(xElem, "coel([aeio])", "cœl$1", True, True)
n += self._replaceText(xElem, "choeur", "chœur", False, True)
n += self._replaceText(xElem, "foet", "fœt", False, True)
n += self._replaceText(xElem, "oeil", "œil", False, True)
n += self._replaceText(xElem, "oeno", "œno", False, True)
n += self._replaceText(xElem, "oesoph", "œsoph", False, True)
n += self._replaceText(xElem, "oestro", "œstro", False, True)
n += self._replaceText(xElem, "oeuf", "œuf", False, True)
n += self._replaceText(xElem, "oeuvr", "œuvr", False, True)
n += self._replaceText(xElem, "moeur", "mœur", False, True)
n += self._replaceText(xElem, "noeu", "nœu", False, True)
n += self._replaceText(xElem, "soeur", "sœur", False, True)
n += self._replaceText(xElem, "voeu", "vœu", False, True)
n += self._replaceText(xElem, "aequo", "æquo", False, True)
# ligatures: with initial cap
n += self._replaceText(xElem, "Coeur", "Cœur", False, True)
n += self._replaceText(xElem, "Coel([aeio])", "Cœl$1", True, True)
n += self._replaceText(xElem, "Choeur", "Chœur", False, True)
n += self._replaceText(xElem, "Foet", "Fœt", False, True)
n += self._replaceText(xElem, "Oeil", "Œil", False, True)
n += self._replaceText(xElem, "Oeno", "Œno", False, True)
n += self._replaceText(xElem, "Oesoph", "Œsoph", False, True)
n += self._replaceText(xElem, "Oestro", "Œstro", False, True)
n += self._replaceText(xElem, "Oeuf", "Œuf", False, True)
n += self._replaceText(xElem, "Oeuvr", "Œuvr", False, True)
n += self._replaceText(xElem, "Moeur", "Mœur", False, True)
n += self._replaceText(xElem, "Noeu", "Nœu", False, True)
n += self._replaceText(xElem, "Soeur", "Sœur", False, True)
n += self._replaceText(xElem, "Voeu", "Vœu", False, True)
n += self._replaceText(xElem, "Aequo", "Æquo", False, True)
# common words with missing diacritics
n += self._replaceText(xElem, "\\bCa\\b", "Ça", True, True)
n += self._replaceText(xElem, " ca\\b", " ça", True, True)
n += self._replaceText(xElem, "\\bdej[aà]\\b", "déjà", True, True)
n += self._replaceText(xElem, "\\bDej[aà]\\b", "Déjà", True, True)
n += self._replaceText(xElem, "\\bplutot\\b", "plutôt", True, True)
n += self._replaceText(xElem, "\\bPlutot\\b", "Plutôt", True, True)
n += self._replaceText(xElem, "\\b([cC]e(?:ux|lles?|lui))-la\\b", "$1-là", True, True)
n += self._replaceText(xElem, "\\bmalgre\\b", "malgré", True, True)
n += self._replaceText(xElem, "\\bMalgre\\b", "Malgré", True, True)
n += self._replaceText(xElem, "\\betre\\b", "être", True, True)
n += self._replaceText(xElem, "\\bEtre\\b", "Être", True, True)
n += self._replaceText(xElem, "\\btres\\b", "très", True, True)
n += self._replaceText(xElem, "\\bTres\\b", "Très", True, True)
n += self._replaceText(xElem, "\\bEtai([ts]|ent)\\b", "Étai$1", True, True)
n += self._replaceText(xElem, "\\bE(tat|cole|crit|poque|tude|ducation|glise|conomi(?:qu|)e|videmment|lysée|tienne|thiopie|cosse|gypt(?:e|ien)|rythrée|pinal|vreux)", "É$1", True, True)
self.typo7_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.typo8.State:
# ligatures typographiques : fi, fl, ff, ffi, ffl, ft, st
n = 0
if self.typo8a.State:
if self.typo_ffi.State:
n += self._replaceText(xElem, "ffi", "ffi", False, True)
if self.typo_ffl.State:
n += self._replaceText(xElem, "ffl", "ffl", False, True)
if self.typo_fi.State:
n += self._replaceText(xElem, "fi", "fi", False, True)
if self.typo_fl.State:
n += self._replaceText(xElem, "fl", "fl", False, True)
if self.typo_ff.State:
n += self._replaceText(xElem, "ff", "ff", False, True)
if self.typo_ft.State:
n += self._replaceText(xElem, "ft", "ſt", False, True)
if self.typo_st.State:
n += self._replaceText(xElem, "st", "st", False, True)
if self.typo8b.State:
if self.typo_fi.State:
n += self._replaceText(xElem, "fi", "fi", False, True)
if self.typo_fl.State:
n += self._replaceText(xElem, "fl", "fl", False, True)
if self.typo_ff.State:
n += self._replaceText(xElem, "ff", "ff", False, True)
if self.typo_ffi.State:
n += self._replaceText(xElem, "ffi", "ffi", False, True)
if self.typo_ffl.State:
n += self._replaceText(xElem, "ffl", "ffl", False, True)
if self.typo_ft.State:
n += self._replaceText(xElem, "ſt", "ft", False, True)
if self.typo_st.State:
n += self._replaceText(xElem, "st", "st", False, True)
self.typo8_res.Label = str(n)
self.pbar.ProgressValue += 1
self.typo.State = False
self._switchCheckBox(self.typo)
self.pbar.ProgressValue = 28
# divers
if self.misc.State:
if self.misc1.State:
if self.misc1a.State:
n = self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9][0-9])(i?[èe]me|è|e)\\b", "ᵉ", True)
n += self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9])(i?[èe]me|è|e)\\b", "ᵉ", True)
n += self._replaceText(xElem, "(?<=\\b[0-9][0-9])(i?[èe]me|è|e)\\b", "ᵉ", True)
n += self._replaceText(xElem, "(?<=\\b[0-9])(i?[èe]me|è|e)\\b", "ᵉ", True)
n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL][XVICL])(i?[èe]me|è|e)\\b", "ᵉ", True, True)
n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL])(i?[èe]me|è|e)\\b", "ᵉ", True, True)
n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL])(i?[èe]me|è|e)\\b", "ᵉ", True, True)
n += self._replaceText(xElem, "(?<=\\b[XVICL])(i?[èe]me|è)\\b", "ᵉ", True, True)
n += self._replaceText(xElem, "(?<=\\b(au|l[ea]|du) [XVICL])e\\b", "ᵉ", True, True)
n += self._replaceText(xElem, "(?<=\\b[XVI])e(?= siècle)", "ᵉ", True, True)
n += self._replaceText(xElem, "(?<=\\b[1I])er\\b", "ᵉʳ", True, True)
n += self._replaceText(xElem, "(?<=\\b[1I])re\\b", "ʳᵉ", True, True)
else:
n = self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9][0-9])(i?[èe]me|è|ᵉ)\\b", "e", True)
n += self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9])(i?[èe]me|è|ᵉ)\\b", "e", True)
n += self._replaceText(xElem, "(?<=\\b[0-9][0-9])(i?[èe]me|è|ᵉ)\\b", "e", True)
n += self._replaceText(xElem, "(?<=\\b[0-9])(i?[èe]me|è|ᵉ)\\b", "e", True)
n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL][XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True)
n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True)
n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True)
n += self._replaceText(xElem, "(?<=\\b[XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True)
n += self._replaceText(xElem, "(?<=\\b[1I])ᵉʳ\\b", "er", True, True)
n += self._replaceText(xElem, "(?<=\\b[1I])ʳᵉ\\b", "er", True, True)
self.misc1_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.misc2.State:
n = self._replaceText(xElem, "etc(…|[.][.][.]?)", "etc.", True, True)
n += self._replaceText(xElem, "(?<!,) etc[.]", ", etc.", True, True)
self.misc2_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.misc3.State:
n = self._replaceText(xElem, "[ -]t[’'](?=il\\b|elle|on\\b)", "-t-", True)
n += self._replaceText(xElem, " t-(?=il|elle|on)", "-t-", True)
n += self._replaceText(xElem, "[ -]t[’'-](?=ils|elles)", "-", True)
n += self._replaceText(xElem, "(?<=[td])-t-(?=il|elle|on)", "-", True)
n += self._replaceText(xElem, "(celles?|celui|ceux) (ci|là)\\b", "$1-$2", True)
n += self._replaceText(xElem, "\\bdix (sept|huit|neuf)", "dix-$1", True)
n += self._replaceText(xElem, "quatre vingt", "quatre-vingt", False)
n += self._replaceText(xElem, "(soixante|quatre-vingt) dix", "$1-dix", True)
n += self._replaceText(xElem, "(vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)) (deux|trois|quatre|cinq|six|sept|huit|neuf)", "$1-$2", True)
n += self._replaceText(xElem, "(?<!-)\\b(ci) (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)", "$1-$2", True)
n += self._replaceText(xElem, "\\bvis à vis", "vis-à-vis", False, True)
n += self._replaceText(xElem, "\\bVis à vis", "Vis-à-vis", False, True)
n += self._replaceText(xElem, "week end", "week-end", False, True)
n += self._replaceText(xElem, "Week end", "Week-end", False, True)
n += self._replaceText(xElem, "(plus|moins) value", "$1-value", True)
self.misc3_res.Label = str(n)
self.pbar.ProgressValue += 1
if self.misc5.State:
n = self._replaceText(xElem, "(qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu) ", "$1’", True, True)
if self.misc5b.State:
n += self._replaceText(xElem, "\\bj (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "j’", True, True)
n += self._replaceText(xElem, "\\bn (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "n’", True, True)
n += self._replaceText(xElem, "\\bm (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "m’", True, True)
n += self._replaceText(xElem, "\\bt (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "t’", True, True)
n += self._replaceText(xElem, "\\bs (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "s’", True, True)
n += self._replaceText(xElem, "\\bc (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "c’", True, True)
n += self._replaceText(xElem, "\\bç (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "ç’", True, True)
n += self._replaceText(xElem, "\\bl (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "l’", True, True)
n += self._replaceText(xElem, "\\bd (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "d’", True, True)
if self.misc5c.State:
n += self._replaceText(xElem, "\\bJ (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "J’", True, True)
n += self._replaceText(xElem, "\\bN (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "N’", True, True)
n += self._replaceText(xElem, "\\bM (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "M’", True, True)
n += self._replaceText(xElem, "\\bT (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "T’", True, True)
n += self._replaceText(xElem, "\\bS (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "S’", True, True)
n += self._replaceText(xElem, "\\bC (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "C’", True, True)
n += self._replaceText(xElem, "\\bÇ (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "Ç’", True, True)
n += self._replaceText(xElem, "\\bL (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "L’", True, True)
n += self._replaceText(xElem, "\\bD (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "D’", True, True)
self.misc5_res.Label = str(n)
self.pbar.ProgressValue += 1
self.misc.State = False
self._switchCheckBox(self.misc)
self.pbar.ProgressValue = self.pbar.ProgressValueMax
# end of processing
xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.ARROW"))
xWindowPeer.setPointer(xPointer)
for x in xWindowPeer.Windows:
x.setPointer(xPointer)
self.xContainer.setVisible(True) # seems necessary to refresh the dialog box and text widgets (why?)
nEndTime = time.clock()
self.time_res.Label = getTimeRes(nEndTime-nStartTime)
except:
traceback.print_exc()
def _replaceText (self, xElem, sPattern, sRep, bRegex, bCaseSensitive=False):
try:
xRD = xElem.createReplaceDescriptor()
xRD.SearchString = sPattern
xRD.ReplaceString = sRep
xRD.SearchRegularExpression = bRegex
xRD.SearchCaseSensitive = bCaseSensitive
return xElem.replaceAll(xRD)
except:
traceback.print_exc()
return 0
def _replaceHyphenAtEndOfParagraphs (self, xDoc):
self._replaceText(xDoc, "-[ ]+$", "-", True) # remove spaces at end of paragraphs if - is the last character
xHunspell = self.xSvMgr.createInstanceWithContext("com.sun.star.linguistic2.SpellChecker", self.ctx)
xCursor = xDoc.Text.createTextCursor()
xCursor.gotoStart(False)
n = 0
while xCursor.gotoNextParagraph(False):
xCursor.goLeft(2, True)
if xCursor.String.startswith("-"):
xCursor.gotoStartOfWord(False)
xLocale = xCursor.CharLocale
xCursor.gotoEndOfWord(True)
sWord1 = xCursor.String
xCursor.gotoNextParagraph(False)
xCursor.gotoEndOfWord(True)
sWord2 = xCursor.String
if sWord1 and sWord2 and xHunspell.isValid(sWord1+sWord2, xLocale, ()):
xCursor.gotoStartOfParagraph(False)
xCursor.goLeft(2, True)
xCursor.setString("")
n += 1
else:
xCursor.goRight(2, False)
return n
def _mergeContiguousParagraphs (self, xDoc):
self._replaceText(xDoc, "^[ ]+$", "", True) # clear empty paragraphs
xCursor = xDoc.Text.createTextCursor()
xCursor.gotoStart(False)
n = 0
try:
while xCursor.gotoNextParagraph(False):
xCursor.gotoEndOfParagraph(True)
if xCursor.String != "":
xCursor.gotoStartOfParagraph(False)
xCursor.goLeft(1, True)
xCursor.setString(" ")
n += 1
except:
traceback.print_exc()
self._replaceText(xDoc, " +", " ", True)
return n
def _replaceBulletsByEmDash (self, xDoc):
xCursor = xDoc.Text.createTextCursor()
helpers.xray(xCursor)
xCursor.gotoStart(False)
sParaStyleName = ""
if not self.delete2c.State:
sParaStyleName = "Standard" if self.delete2a.State else "Text body"
n = 0
try:
if xCursor.NumberingStyleName != "":
xCursor.NumberingStyleName = ""
if sParaStyleName:
xCursor.ParaStyleName = sParaStyleName
xDoc.Text.insertString(xCursor, "— ", False)
n += 1
while xCursor.gotoNextParagraph(False):
if xCursor.NumberingStyleName != "":
xCursor.NumberingStyleName = ""
if sParaStyleName:
xCursor.ParaStyleName = sParaStyleName
xDoc.Text.insertString(xCursor, "— ", False)
n += 1
except:
traceback.print_exc()
return n
def getTimeRes (n):
"returns duration in seconds as string"
if n < 10:
return "{:.3f} s".format(n)
if n < 100:
return "{:.2f} s".format(n)
if n < 1000:
return "{:.1f} s".format(n)
return str(int(n)) + " s"
#g_ImplementationHelper = unohelper.ImplementationHelper()
#g_ImplementationHelper.addImplementation(TextFormatter, 'dicollecte.TextFormatter', ('com.sun.star.task.Job',))
|
Added gc_lang/fr/oxt/TextFormatter/tf_options.py version [2ffb289615].
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
dDefaultOpt = {
'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1,
'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
'space': 1, 'space1': 1, 'space2': 1,
'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1,
'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
}
dOpt = {
'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1,
'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
'space': 1, 'space1': 1, 'space2': 1,
'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1,
'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
}
|
Added gc_lang/fr/oxt/TextFormatter/tf_strings.py version [a143dd1d82].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# -*- encoding: UTF-8 -*-
def getUI (sLang):
if sLang in dStrings:
return dStrings[sLang]
return dStrings["fr"]
dStrings = {
"fr": {
"title": "Grammalecte · Formateur de texte [Français]",
"ssp": "Espaces ~surnuméraires",
"ssp1": "En début de paragraphe",
"ssp2": "Entre les mots",
"ssp3": "En fin de paragraphe",
"ssp4": "Avant les points (.), les virgules (,)",
"ssp5": "À l’intérieur des parenthèses",
"ssp6": "À l’intérieur des crochets",
"ssp7": "À l’intérieur des guillemets “ et ”",
"space": "Espaces ~manquants",
"space1": "Après , ; : ? ! . …",
"space2": "Autour des tirets d’incise",
"nbsp": "Espaces ~insécables",
"nbsp1": "Avant : ; ? et !",
"nbsp2": "Avec les guillemets « et »",
"nbsp3": "Avant % ‰ € $ £ ¥ ˚C",
"nbsp4": "À l’intérieur des nombres",
"nbsp5": "Avant les unités de mesure",
"nnbsp": "fins",
"nnbsp_help": "sauf avec “:”",
"delete": "Su~ppressions",
"delete1": "Tirets conditionnels",
"delete2": "Puces → tirets cadratins + style :",
"delete2a": "Standard",
"delete2b": "Corps de texte",
"delete2c": "Ø",
"delete2c_help": "Pas de changement",
"typo": "Signes ~typographiques",
"typo1": "Apostrophe (’)",
"typo2": "Points de suspension (…)",
"typo3": "Tirets d’incise :",
"typo4": "Tirets en début de paragraphe :",
"emdash": "cadratin (—)",
"endash": "demi-cadratin (–)",
"typo5": "Modifier les guillemets droits (\" et ')",
"typo6": "Points médians des unités (N·m, Ω·m…)",
"typo7": "Ligatures (cœur…) et diacritiques (ça, Égypte…)",
"typo8": "Ligatures",
"typo8_help": "Avertissement : de nombreuses polices ne contiennent pas ces caractères.",
"typo8a": "Faire",
"typo8b": "Défaire",
"typo_ff": "ff",
"typo_fi": "fi",
"typo_ffi": "ffi",
"typo_fl": "fl",
"typo_ffl": "ffl",
"typo_ft": "ft",
"typo_st": "st",
"misc": "~Divers",
"misc1": "Ordinaux (15e, XXIe…)",
"misc1a": "e → ᵉ",
"misc2": "Et cætera, etc.",
"misc3": "Traits d’union manquants",
"misc5": "Apostrophes manquantes",
"misc5b": "lettres isolées (j’ n’ m’ t’ s’ c’ d’ l’)",
"misc5c": "Maj.",
"struct": "~Restructuration [!]",
"struct_help": "Attention : la restructuration coupe ou fusionne les paragraphes.",
"struct1": "Retour à la ligne ⇒ fin de paragraphe",
"struct2": "Enlever césures en fin de ligne/paragraphe",
"struct3": "Fusionner les paragraphes contigus [!]",
"struct3_help": "Concatène tous les paragraphes non séparés par un paragraphe vide.\nAttention : LibreOffice et OpenOffice ne peuvent accepter des paragraphes de plus de 65535 caractères, ce qui fait environ 12 pages avec une police de taille 12. Un dépassement de cette limite fera planter le logiciel. À partir de LibreOffice 4.3, cette limitation n’existe plus.",
"default": "[·]",
"default_help": "Options par défaut",
"bsel": "Sur la sélection active",
"apply": "~Appliquer",
"close": "~Fermer",
"info": "(i)",
"infotitle": "Informations",
"infomsg": "Le formateur de texte est un outil qui automatise la correction d’erreurs typographiques en employant le moteur interne “Chercher & remplacer” de Writer.\n\nUtilisez l’outil avec prudence. À cause de certaines limitations, le formateur ne peut gérer tous les cas. Vérifiez votre texte après emploi."
},
"en": {
"title": "Grammalecte · Text Formatter [French]",
"ssp": "~Supernumerary spaces",
"ssp1": "At the beginning of paragraph",
"ssp2": "Between words",
"ssp3": "At the end of paragraph",
"ssp4": "Before dots (.), commas (,)",
"ssp5": "Within parenthesis",
"ssp6": "Within square brackets",
"ssp7": "Within “ and ”",
"space": "~Missing spaces",
"space1": "After , ; : ? ! . …",
"space2": "Surrounding dashes",
"nbsp": "~Non-breaking spaces ",
"nbsp1": "Before : ; ? and !",
"nbsp2": "With quoting marks « and »",
"nbsp3": "Before % ‰ € $ £ ¥ ˚C",
"nbsp4": "Within numbers",
"nbsp5": "Before units of measurement",
"nnbsp": "narrow",
"nnbsp_help": "except with “:”",
"delete": "~Deletions",
"delete1": "Soft hyphens",
"delete2": "Bullets → em-dash + style:",
"delete2a": "Standard",
"delete2b": "Text Body",
"delete2c": "Ø",
"delete2c_help": "No change",
"typo": "~Typographical signs",
"typo1": "Apostrophe (’)",
"typo2": "Ellipsis (…)",
"typo3": "Dashes:",
"typo4": "Dashes at beginning of paragraph:",
"emdash": "em dash (—)",
"endash": "en dash (–)",
"typo5": "Change quotation marks (\" and ')",
"typo6": "Interpuncts in units (N·m, Ω·m…)",
"typo7": "Ligatures (cœur…) and diacritics (ça, Égypte…)",
"typo8": "Ligatures",
"typo8_help": "Warning: many fonts don’t contain these characters.",
"typo8a": "Set",
"typo8b": "Unset",
"typo_ff": "ff",
"typo_fi": "fi",
"typo_ffi": "ffi",
"typo_fl": "fl",
"typo_ffl": "ffl",
"typo_ft": "ft",
"typo_st": "st",
"misc": "M~iscellaneous",
"misc1": "Ordinals (15e, XXIe…)",
"misc1a": "e → ᵉ",
"misc2": "Et cætera, etc.",
"misc3": "Missing hyphens",
"misc5": "Missing apostrophes",
"misc5b": "single letters (j’ n’ m’ t’ s’ c’ d’ l’)",
"misc5c": "Cap.",
"struct": "~Restructuration [!]",
"struct_help": "Caution: Restructuration cuts or merges paragraphs.",
"struct1": "End of line ⇒ end of paragraph",
"struct2": "Remove syllabification hyphens at EOL/EOP",
"struct3": "Merge contiguous paragraphs [!]",
"struct3_help": "Concatenate all paragraphs not separated by an empty paragraph.\nCaution: LibreOffice and OpenOffice can’t deal with paragraphs longer than 65,535 characters, which is about 12 pages with font size 12. Overstepping this limit will crash the software. For LibreOffice 4.3 and beyond, this limitation doesn’t exist any more.",
"default": "[·]",
"default_help": "Default options",
"bsel": "On current selection",
"apply": "~Apply",
"close": "~Close",
"info": "(i)",
"infotitle": "Informations",
"infomsg": "The text formatter is a tool which automates correction of typographical errors by using the internal engine “Search & replace” of Writer.\n\nUse this tool with caution. Due to several limitations, it cannot handle all cases. Check your text after use."
}
}
|
Added gc_lang/fr/oxt/_img/LaMouette_small.png version [6778e9b924].
cannot compute difference between binary files
Added gc_lang/fr/oxt/_img/french_flag_16.bmp version [00986ef7e9].
cannot compute difference between binary files
Added gc_lang/fr/oxt/_img/grammalecte_16.bmp version [2eb0d26658].
cannot compute difference between binary files
Added gc_lang/fr/oxt/_img/logo100.png version [137b3e197f].
cannot compute difference between binary files
Added gc_lang/fr/oxt/addons.xcu version [1d834d2bae].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
oor:package="org.openoffice.Office"
oor:name="Addons">
<node oor:name="AddonUI">
<!-- https://wiki.openoffice.org/wiki/Documentation/DevGuide/WritingUNO/AddOns/Images_for_Toolbars_and_Menus -->
<node oor:name="Images">
<node oor:name="org.dicollecte.images.grammalecte" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>org.dicollecte.images:Grammalecte</value>
</prop>
<node oor:name="UserDefinedImages">
<prop oor:name="ImageSmall">
<value>424D360400000000000036000000280000001000000010000000010020000000000000000000C30E0000C30E0000000000000000000000000000000000000000000000000000000000000000000000000000BFA0746EBFA0746700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BFA07451FFD59BFEFFD59BFEBFA0746700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040352708FFD59BB7FFD59BFFFFD59BFEBFA07467000000000000000000000000000000000000000000000000000000000000000000000000BFA07468BFA074300000000040352708FFD59BB7FFD59BFFFFD59BFEBFA0746700000000000000000000000000000000000000000000000000000000BFA0746FFFD59BFEFFD59BEC806B4E260000000040352708FFD59BB7FFD59BFFFFD59BFEBFA074670000000000000000000000000000000000000000BFA0746FFFD59BFEFFD59BFFFFD59BB040352706000000000000000040352708FFD59BB7FFD59BFFFFD59BFEBFA07467000000000000000000000000BFA0746FFFD59BFEFFD59BFFFFD59BB04035270600000000BFA07435BFA074300000000040352708FFD59BB7FFD59BFFFFD59BFEBFA0746700000000BFA0746EFFD59BFEFFD59BFFFFD59BB14035270600000000BFA07434FFD59BEFFFD59BECBFA0742F0000000040352708FFD59BB7FFD59BFFFFD59BFEBFA07466BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000BFA07424FFD59BE3FFD59BDF403527200000000040352711FFD59BCBFFD59BFFFFD59BF9BFA0744E00000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000806B4E24403527200000000040352711FFD59BCBFFD59BFFFFD59BF9BFA0744E000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E000000000000000040352711FFD59BCBFFD59BFFFFD59BF9BFA0744E0000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000806B4E22FFD59BE3FFD59BF9BFA0744E00000000000000000000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000BFA07424BFA0744A000000000000000000000000000000000000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BF9BFA0744100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BFA07455BFA0744E00000000000000000000000000000000000000000000000000000000</value>
</prop>
</node>
</node>
<node oor:name="org.dicollecte.images.frenchflag" oor:op="replace">
<prop oor:name="aURL" oor:type="xs:string">
<value>org.dicollecte.images:Frenchflag</value>
</prop>
<node oor:name="UserDefinedImages">
<prop oor:name="ImageSmall">
<value>424D360400000000000036000000280000001000000010000000010020000000000000000000C30E0000C30E00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00640B01FF750D02FF710D02FF720E03FF720800FF734C47FF747B7CFF747272FF727274FF7C7C76FF444469FF000058FF010159FF000059FF00005BFF00004CFF981203FFB51503FFAD1503FFAD1705FFAD0D00FFAE736CFFB0BABBFFB0AEADFFADADAFFFBBBBB2FF67679FFF000087FF020289FF000087FF00008BFF000073FF9C1203FFBC1704FFB51604FFB21705FFB10E00FFB3766FFFB4BFC0FFB4B2B1FFB1B1B3FFC0C0B7FF6969A3FF000089FF02028BFF00008AFF00008EFF000075FFA31403FFC51904FFC01804FFC01905FFBB0E00FFBC7C75FFBEC9CAFFBEBCBBFFBABABDFFCACAC0FF6F6FACFF000090FF020293FF000091FF000095FF00007CFFAB1504FFCE1A05FFC81905FFCA1B07FFC91000FFC7837BFFC6D2D3FFC5C2C2FFC2C2C5FFD3D3C8FF7373B3FF000098FF02029BFF000099FF00009DFF000082FFB21604FFD61B05FFD11A05FFD21C07FFD21100FFD58C84FFD4E0E2FFD0CDCDFFCBCBCDFFDCDCD1FF7A7ABBFF00009CFF0202A0FF00009EFF0000A2FF000087FFBA1704FFE01C05FFDA1B05FFDB1D07FFDA1100FFDD9289FFDFECEDFFDEDBDAFFD7D7D9FFE6E6DAFF7E7EC3FF0000A3FF0303A7FF0000A5FF0000A9FF00008CFFC11704FFE91D05FFE31C05FFE31E07FFE31200FFE6978FFFE8F5F7FFE8E5E4FFE4E4E7FFF5F5E9FF8585CCFF0000ACFF0303AFFF0000AEFF0000B2FF000093FFC91804FFF21E05FFEC1D05FFED1F08FFEC1300FFEF9E95FFF1FFFFFFF1EEEDFFEDEDF0FFFFFFF5FF8E8EDAFF0000B6FF0303B8FF0000B4FF0000B7FF000098FFCE1B07FFF82108FFF22008FFF3220BFFF31600FFF4A197FFF4FFFFFFF4F1F0FFF0F0F3FFFFFFF7FF8F8FDFFF0000BEFF0303C1FF0000C0FF0000C3FF0000A0FFD82916FFFF321BFFFE311AFFFF331CFFFF270EFFFFAEA5FFFFFFFFFFFFFCFCFFFBFBFEFFFFFFFFFF9A9AEEFF0000D3FF0C0CD5FF0909D4FF0909DAFF0808B4FFB74F44FFDD5F52FFD75D50FFD85E51FFD85749FFD8A8A2FFD8E0E1FFD8D6D6FFD6D6D8FFE2E2DAFF9B9BCFFF3C3CC1FF4646C2FF4444C1FF4545C5FF3A3AA4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00</value>
</prop>
</node>
</node>
</node>
<node oor:name="OfficeMenuBar">
<node oor:name="dicollecte.Tools" oor:op="replace">
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="fr">~Grammalecte</value>
<value xml:lang="en-US">~Grammalecte</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<node oor:name="Submenu">
<node oor:name="m1" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:net.grammalecte.AppLauncher?TF</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="fr">~Formateur de texte…</value>
<value xml:lang="en-US">Text ~Formatter…</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value>
</prop>
</node>
<node oor:name="m2" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:net.grammalecte.AppLauncher?CJ</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="fr">~Conjugueur…</value>
<value xml:lang="en-US">~Conjugator…</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
</prop>
</node>
<node oor:name="m3" oor:op="replace">
<!--<prop oor:name="URL" oor:type="xs:string">
<value>vnd.sun.star.script:basiclib.Module1.EditAuthorField?language=Basic&location=application</value>
</prop>-->
<prop oor:name="URL" oor:type="xs:string">
<value>service:net.grammalecte.AppLauncher?MA</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="fr">~Modifier le champ “Auteur”…</value>
<value xml:lang="en-US">~Modify the field “Author”…</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value>
</prop>
</node>
<node oor:name="m4" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>private:separator</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
</prop>
</node>
<node oor:name="m5" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:net.grammalecte.AppLauncher?OP</value>
</prop>
<!--<prop oor:name="URL" oor:type="xs:string">
<value>.uno:OptionsTreeDialog?OptionsPageURL:string=%origin%/dialog/fr.xdl</value>
</prop>-->
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="fr">Options ~grammaticales…</value>
<value xml:lang="en-US">~Grammar options…</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value>
</prop>
<prop oor:name="ImageIdentifier" oor:type="xs:string">
<value>org.dicollecte.images:Grammalecte</value>
</prop>
</node>
<node oor:name="m6" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:net.grammalecte.AppLauncher?DS</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="fr">~Options orthographiques…</value>
<value xml:lang="en-US">Spelling ~options…</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
</prop>
<prop oor:name="ImageIdentifier" oor:type="xs:string">
<value>org.dicollecte.images:Frenchflag</value>
</prop>
</node>
<node oor:name="m7" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>private:separator</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
</prop>
</node>
<node oor:name="m8" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:net.grammalecte.AppLauncher?About</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="fr">À ~propos de Grammalecte…</value>
<value xml:lang="en-US">~About Grammalecte…</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
</prop>
</node>
</node>
</node>
</node>
<node oor:name="OfficeMenuBarMerging">
<!--<node oor:name="TextFormatter.from.Dicollecte.by.OlivierR" oor:op="replace">
<node oor:name="S1" oor:op="replace">
<prop oor:name="MergePoint">
<value>.uno:ToolsMenu\.uno:WordCountDialog</value>
</prop>
<prop oor:name="MergeCommand">
<value>AddAfter</value>
</prop>
<prop oor:name="MergeFallback">
<value>AddPath</value>
</prop>
<prop oor:name="MergeContext" oor:type="xs:string">
<value>com.sun.star.text.TextDocument</value>
</prop>
<node oor:name="MenuItems">
<node oor:name="M1" oor:op="replace">
<prop oor:name="Title" oor:type="xs:string">
<value xml:lang="en-US">Text Formatter…</value>
<value xml:lang="fr">Formateur de texte…</value>
</prop>
<prop oor:name="URL" oor:type="xs:string">
<value>service:dicollecte.TextFormatter</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
</node>
</node>
</node>
</node>-->
<node oor:name="org.openoffice.Office.addon.FrenchDictionarySwitcher" oor:op="replace">
<node oor:name="S1" oor:op="replace">
<prop oor:name="MergePoint">
<value>.uno:ToolsMenu\.uno:LanguageMenu\.uno:Hyphenate</value>
</prop>
<prop oor:name="MergeCommand">
<value>AddAfter</value>
</prop>
<prop oor:name="MergeFallback">
<value>AddPath</value>
</prop>
<node oor:name="MenuItems">
<node oor:name="M1" oor:op="replace">
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">French spelling dictionaries…</value>
<value xml:lang="fr">Dictionnaires orthographiques français…</value>
</prop>
<prop oor:name="URL" oor:type="xs:string">
<value>service:net.grammalecte.AppLauncher?DS</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<!--<prop oor:name="ImageIdentifier" oor:type="xs:string">
<value>%origin%/img/french_flag</value>
</prop>-->
</node>
</node>
</node>
</node>
</node>
</node>
</oor:component-data>
|
Added gc_lang/fr/oxt/grammalecte.update.xml version [d312318716].
> > > > > > > > | 1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/update/2006" xmlns:xlink="http://www.w3.org/1999/xlink">
<identifier value="org.openoffice.comp.pyuno.lightproof.oxt.grammalecte"/>
<version value="0.2.8" />
<update-download>
<src xlink:href="http://www.dicollecte.org/grammalecte/oxt/old/Grammalecte-v0.2.8.oxt" />
</update-download>
</description>
|
Added gc_lang/fr/oxt/grammalecte.update03.xml version [1f181b7e63].
> > > > > > > > | 1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/update/2006" xmlns:xlink="http://www.w3.org/1999/xlink">
<identifier value="French.linguistic.resources.from.Dicollecte.by.OlivierR"/>
<version value="0.3.3" />
<update-download>
<src xlink:href="http://www.dicollecte.org/grammalecte/oxt/old/Grammalecte-v0.3.3.oxt" />
</update-download>
</description>
|
Added gc_lang/fr/oxt/helpers.py version [3ebcc78813].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# -*- coding: utf8 -*-
import uno
import traceback
from com.sun.star.beans import PropertyValue
# XRay - API explorer
from com.sun.star.uno import RuntimeException as _rtex
def xray (myObject):
try:
sm = uno.getComponentContext().ServiceManager
mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
scriptPro = mspf.createScriptProvider("")
xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application")
xScript.invoke((myObject,), (), ())
return
except:
raise _rtex("\nBasic library Xray is not installed", uno.getComponentContext())
# MRI - API Explorer
def mri (ctx, xTarget):
try:
xMri = ctx.ServiceManager.createInstanceWithContext("mytools.Mri", ctx)
xMri.inspect(xTarget)
except:
raise _rtex("\Python extension MRI is not installed", uno.getComponentContext())
def getConfigSetting (sNodeConfig, bUpdate):
"get a configuration node"
# example: xNode = getConfigSetting("/org.openoffice.Office.Common/Path/Current", False)
xSvMgr = uno.getComponentContext().ServiceManager
xConfigProvider = xSvMgr.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider", uno.getComponentContext())
xPropertyValue = uno.createUnoStruct("com.sun.star.beans.PropertyValue")
xPropertyValue.Name = "nodepath"
xPropertyValue.Value = sNodeConfig
if bUpdate:
sService = "com.sun.star.configuration.ConfigurationUpdateAccess"
else:
sService = "com.sun.star.configuration.ConfigurationAccess"
return xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,)) # return xNode
def printServices (o):
for s in o.getAvailableServiceNames():
print(' > '+s)
def getWindowSize ():
"return main window size"
xCurCtx = uno.getComponentContext()
xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx)
xContainerWindow = xDesktop.getCurrentComponent().CurrentController.Frame.ContainerWindow
xWindowSize = xContainerWindow.convertSizeToLogic(xContainerWindow.Size, uno.getConstantByName("com.sun.star.util.MeasureUnit.POINT"))
#print(xContainerWindow.Size.Width, ">", xWindowSize.Width)
#print(xContainerWindow.Size.Height, ">", xWindowSize.Height)
xWindowSize.Width = xWindowSize.Width * 0.666
xWindowSize.Height = xWindowSize.Height * 0.666
return xWindowSize
|
Added gc_lang/fr/oxt/package-description.txt version [03d52b8e2d].
> > > > | 1 2 3 4 |
Grammalecte : ${version}
Dictionnaires orthographiques : ${oxt_version}
Dictionnaire des synonymes : 2.3
Règles de césure : 3.0
|
Added gc_lang/fr/rules.grx version [c3cae4f545].
more than 10,000 changes
Added gc_lang/fr/tb/README.txt version [2d1b4f42d1].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | = GRAMMALECTE = French grammar checker By Olivier R. (olivier /at/ grammalecte /dot/ net) Website: http://www.dicollecte.org/grammalecte License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html Grammalecte for Firefox is a derivative tool born from the version for LibreOffice written in Python. Written in JavaScript ES6/ES7. |
Added gc_lang/fr/tb/chrome.manifest version [39608040f5].
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 | # https://developer.mozilla.org/en-US/docs/Chrome_Registration content grammarchecker content/ content promiseworker ./worker/ resource grammalecte ./grammalecte-js/ locale grammarchecker fr locale/fr/ locale grammarchecker en locale/en/ skin grammarchecker classic/1.0 skin/ overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://grammarchecker/content/overlay.xul style chrome://global/content/customizeToolbar.xul chrome://grammarchecker/content/overlay.css |
Added gc_lang/fr/tb/content/about.css version [d621de3251].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* CSS */
.descr {
font-size: 18px;
font-weight: bold;
text-align: center;
}
.stdlabel {
font-size: 16px;
text-align: center;
}
#website {
font-size: 16px;
font-weight: bold;
color: hsl(210, 50%, 50%);
text-align: center;
cursor: pointer;
}
#contrib {
font-size: 16px;
text-align: center;
color: hsl(210, 50%, 50%);
cursor: pointer;
}
|
Added gc_lang/fr/tb/content/about.js version [2bc9ad5ee7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// JavaScript
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
//const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
function openInBrowserURL (sURL) {
// method found in S3.Google.Translator
try {
openURL(sURL);
// Works in overlay.js, but not here… Seems there is no documentation available about this feature on Mozilla.org
}
catch (e) {
Cu.reportError(e);
}
}
function openInTabURL (sURL) {
// method found in S3.Google.Translator
try {
let xWM = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
let xWin = xWM.getMostRecentWindow("mail:3pane");
let xTabmail = xWin.document.getElementById('tabmail');
xWin.focus();
if (xTabmail) {
xTabmail.openTab('contentTab', { contentPage: sURL });
}
}
catch (e) {
Cu.reportError(e);
}
}
|
Added gc_lang/fr/tb/content/about.xul version [f56729e17b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://grammarchecker/content/about.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/about.dtd">
<dialog
id="grammalecte-about-window"
title="&windowtitle;"
orient="vertical"
buttons="accept"
width="300"
onload="document.getElementById('grammalecte-about-window').centerWindowOnScreen();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<description style="text-align: center;">
<image src="chrome://grammarchecker/skin/logo120_text.png" />
</description>
<label class="descr">&description1;</label>
<label class="descr">&description2;</label>
<label class="stdlabel" value="&version; ${version}" />
<label class="stdlabel" value="&license; GPL 3" />
<label id="website" value="Site web" onclick="openInTabURL('http://grammalecte.net');" />
<separator class="groove" orient="horizontal" style="margin: 10px;"/>
<label class="stdlabel" value="&thanks;" />
<image src="chrome://grammarchecker/skin/LaMouette_small.png" style="cursor: pointer;"
onclick="openInTabURL('http://lamouette.org/');" />
<label id="contrib" value="&contrib;"
onclick="openInTabURL('http://www.dicollecte.org/grammalecte/soutiens.php');" />
<script type="application/x-javascript" src="about.js"/>
</dialog>
|
Added gc_lang/fr/tb/content/conjugueur.css version [0ecfe596a1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
/* CSS */
#verb {
width: 200px;
}
#verb_title {
font-size: 24px;
font-weight: bold;
text-align: center;
color: hsl(210, 50%, 50%);
}
#info {
font-size: 16px;
text-align: center;
vertical-align: bottom;
}
groupbox {
width: 275px;
}
#smallnote {
font-size: 10px;
width: 250px;
}
caption {
color: hsl(0, 50%, 50%);
font-size: 16px;
font-weight: bold;
}
label.temps {
color: hsl(210, 50%, 50%);
font-size: 13px;
font-weight: bold;
}
label.cj {
font-size: 11px;
}
|
Added gc_lang/fr/tb/content/conjugueur.js version [d8559c53e4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
// JavaScript
const Cu = Components.utils;
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
const conj = require("resource://grammalecte/fr/conj.js");
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
let oConj = {
init: function () {
let that = this;
try {
// button
document.getElementById('conjugate').addEventListener("click", function (event) {
that.getVerbAndConjugate();
});
// text field
document.getElementById('verb').addEventListener("change", function (event) {
that.getVerbAndConjugate();
});
// options
document.getElementById('oneg').addEventListener("click", function (event) {
that._displayResults();
});
document.getElementById('opro').addEventListener("click", function (event) {
that._displayResults();
});
document.getElementById('oint').addEventListener("click", function (event) {
that._displayResults();
});
document.getElementById('ofem').addEventListener("click", function (event) {
that._displayResults();
});
document.getElementById('otco').addEventListener("click", function (event) {
that._displayResults();
});
}
catch (e) {
Cu.reportError(e);
}
this.conjugate("être");
},
oVerb: null,
getVerbAndConjugate: function () {
this.conjugate(document.getElementById('verb').value);
},
conjugate: function (sVerb) {
try {
document.getElementById('oneg').checked = false;
document.getElementById('opro').checked = false;
document.getElementById('oint').checked = false;
document.getElementById('otco').checked = false;
document.getElementById('ofem').checked = false;
document.getElementById('smallnote').hidden = true;
// request analyzing
sVerb = sVerb.trim().toLowerCase().replace(/’/g, "'").replace(/ +/g, " ");
if (sVerb) {
if (sVerb.startsWith("ne pas ")) {
document.getElementById('oneg').checked = true;
sVerb = sVerb.slice(7);
}
if (sVerb.startsWith("se ")) {
document.getElementById('opro').checked = true;
sVerb = sVerb.slice(3);
} else if (sVerb.startsWith("s'")) {
document.getElementById('opro').checked = true;
sVerb = sVerb.slice(2);
}
if (sVerb.endsWith("?")) {
document.getElementById('oint').checked = true;
sVerb = sVerb.slice(0,-1).trim();
}
if (!conj.isVerb(sVerb)) {
document.getElementById('verb').style = "color: #BB4411;";
} else {
document.getElementById('verb_title').textContent = sVerb;
document.getElementById('verb').style = "color: #999999;";
document.getElementById('verb').value = "";
this.oVerb = new conj.Verb(sVerb);
let sRawInfo = this.oVerb._sRawInfo;
document.getElementById('info').textContent = this.oVerb.sInfo;
document.getElementById('opro').textContent = "pronominal";
if (sRawInfo.endsWith("zz")) {
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro').style = "color: #CCC;";
document.getElementById('otco').checked = false;
document.getElementById('otco').disabled = true;
document.getElementById('otco').style = "color: #CCC;";
document.getElementById('smallnote').hidden = false;
} else {
if (sRawInfo[5] == "_") {
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro').style = "color: #CCC;";
} else if (sRawInfo[5] == "q" || sRawInfo[5] == "e") {
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = false;
document.getElementById('opro').style = "color: #000;";
} else if (sRawInfo[5] == "p" || sRawInfo[5] == "r") {
document.getElementById('opro').checked = true;
document.getElementById('opro').disabled = true;
document.getElementById('opro').style = "color: #CCC;";
} else if (sRawInfo[5] == "!") {
document.getElementById('opro').textContent = "cas particuliers";
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro').style = "color: #CCC;";
} else {
document.getElementById('opro').textContent = "# erreur #";
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro').style = "color: #CCC;";
}
document.getElementById('otco').disabled = false;
document.getElementById('otco').style = "color: #000;";
}
this._displayResults();
}
}
}
catch (e) {
Cu.reportError(e);
}
},
_displayResults: function () {
if (this.oVerb === null) {
return;
}
try {
let opro = document.getElementById('opro').checked;
let oneg = document.getElementById('oneg').checked;
let otco = document.getElementById('otco').checked;
let oint = document.getElementById('oint').checked;
let ofem = document.getElementById('ofem').checked;
// titles
this._setTitles();
// participes passés
document.getElementById('ppas1').textContent = this.oVerb.participePasse(":Q1") || " "; // something or nbsp
document.getElementById('ppas2').textContent = this.oVerb.participePasse(":Q2") || " ";
document.getElementById('ppas3').textContent = this.oVerb.participePasse(":Q3") || " ";
document.getElementById('ppas4').textContent = this.oVerb.participePasse(":Q4") || " ";
// infinitif
document.getElementById('infi').textContent = this.oVerb.infinitif(opro, oneg, otco, oint, ofem);
// participe présent
document.getElementById('ppre').textContent = this.oVerb.participePresent(opro, oneg, otco, oint, ofem) || " ";
// conjugaisons
document.getElementById('ipre1').textContent = this.oVerb.conjugue(":Ip", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre2').textContent = this.oVerb.conjugue(":Ip", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre3').textContent = this.oVerb.conjugue(":Ip", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre4').textContent = this.oVerb.conjugue(":Ip", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre5').textContent = this.oVerb.conjugue(":Ip", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre6').textContent = this.oVerb.conjugue(":Ip", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp1').textContent = this.oVerb.conjugue(":Iq", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp2').textContent = this.oVerb.conjugue(":Iq", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp3').textContent = this.oVerb.conjugue(":Iq", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp4').textContent = this.oVerb.conjugue(":Iq", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp5').textContent = this.oVerb.conjugue(":Iq", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp6').textContent = this.oVerb.conjugue(":Iq", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi1').textContent = this.oVerb.conjugue(":Is", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi2').textContent = this.oVerb.conjugue(":Is", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi3').textContent = this.oVerb.conjugue(":Is", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi4').textContent = this.oVerb.conjugue(":Is", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi5').textContent = this.oVerb.conjugue(":Is", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi6').textContent = this.oVerb.conjugue(":Is", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut1').textContent = this.oVerb.conjugue(":If", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut2').textContent = this.oVerb.conjugue(":If", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut3').textContent = this.oVerb.conjugue(":If", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut4').textContent = this.oVerb.conjugue(":If", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut5').textContent = this.oVerb.conjugue(":If", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut6').textContent = this.oVerb.conjugue(":If", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda1').textContent = this.oVerb.conjugue(":K", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda2').textContent = this.oVerb.conjugue(":K", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda3').textContent = this.oVerb.conjugue(":K", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda4').textContent = this.oVerb.conjugue(":K", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda5').textContent = this.oVerb.conjugue(":K", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda6').textContent = this.oVerb.conjugue(":K", ":3p", opro, oneg, otco, oint, ofem) || " ";
if (!oint) {
document.getElementById('spre1').textContent = this.oVerb.conjugue(":Sp", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre2').textContent = this.oVerb.conjugue(":Sp", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre3').textContent = this.oVerb.conjugue(":Sp", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre4').textContent = this.oVerb.conjugue(":Sp", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre5').textContent = this.oVerb.conjugue(":Sp", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre6').textContent = this.oVerb.conjugue(":Sp", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp1').textContent = this.oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp2').textContent = this.oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp3').textContent = this.oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp4').textContent = this.oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp5').textContent = this.oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp6').textContent = this.oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('impe1').textContent = this.oVerb.imperatif(":2s", opro, oneg, otco, ofem) || " ";
document.getElementById('impe2').textContent = this.oVerb.imperatif(":1p", opro, oneg, otco, ofem) || " ";
document.getElementById('impe3').textContent = this.oVerb.imperatif(":2p", opro, oneg, otco, ofem) || " ";
} else {
document.getElementById('spre_temps').textContent = " ";
document.getElementById('spre1').textContent = " ";
document.getElementById('spre2').textContent = " ";
document.getElementById('spre3').textContent = " ";
document.getElementById('spre4').textContent = " ";
document.getElementById('spre5').textContent = " ";
document.getElementById('spre6').textContent = " ";
document.getElementById('simp_temps').textContent = " ";
document.getElementById('simp1').textContent = " ";
document.getElementById('simp2').textContent = " ";
document.getElementById('simp3').textContent = " ";
document.getElementById('simp4').textContent = " ";
document.getElementById('simp5').textContent = " ";
document.getElementById('simp6').textContent = " ";
document.getElementById('impe_temps').textContent = " ";
document.getElementById('impe1').textContent = " ";
document.getElementById('impe2').textContent = " ";
document.getElementById('impe3').textContent = " ";
}
if (otco) {
document.getElementById('condb1').textContent = this.oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb2').textContent = this.oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb3').textContent = this.oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb4').textContent = this.oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb5').textContent = this.oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb6').textContent = this.oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " ";
} else {
document.getElementById('condb1').textContent = " ";
document.getElementById('condb2').textContent = " ";
document.getElementById('condb3').textContent = " ";
document.getElementById('condb4').textContent = " ";
document.getElementById('condb5').textContent = " ";
document.getElementById('condb6').textContent = " ";
}
document.getElementById('verb').Text = "";
}
catch (e) {
Cu.reportError(e);
}
},
_setTitles: function () {
try {
if (!document.getElementById('otco').checked) {
document.getElementById('ipre_temps').textContent = "Présent";
document.getElementById('ifut_temps').textContent = "Futur";
document.getElementById('iimp_temps').textContent = "Imparfait";
document.getElementById('ipsi_temps').textContent = "Passé simple";
document.getElementById('spre_temps').textContent = "Présent";
document.getElementById('simp_temps').textContent = "Imparfait";
document.getElementById('conda_temps').textContent = "Présent";
document.getElementById('condb_temps').textContent = " ";
document.getElementById('impe_temps').textContent = "Présent";
} else {
document.getElementById('ipre_temps').textContent = "Passé composé";
document.getElementById('ifut_temps').textContent = "Futur antérieur";
document.getElementById('iimp_temps').textContent = "Plus-que-parfait";
document.getElementById('ipsi_temps').textContent = "Passé antérieur";
document.getElementById('spre_temps').textContent = "Passé";
document.getElementById('simp_temps').textContent = "Plus-que-parfait";
document.getElementById('conda_temps').textContent = "Passé (1ʳᵉ forme)";
document.getElementById('condb_temps').textContent = "Passé (2ᵉ forme)";
document.getElementById('impe_temps').textContent = "Passé";
}
}
catch (e) {
Cu.reportError(e);
}
}
};
oConj.init();
|
Added gc_lang/fr/tb/content/conjugueur.xul version [ee8b63b554].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://grammarchecker/content/conjugueur.css" type="text/css"?>
<dialog
id="grammalecte-conjugueur-window"
title="Grammalecte · Conjugueur…"
orient="vertical"
width="550"
buttons="extra1"
buttonlabelextra1="Conjuguer"
ondialogextra1="oConj.getVerbAndConjugate();"
defaultButton="extra1"
onload=""
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<box>
<spacer flex="1"/>
<image src="chrome://grammarchecker/skin/grammarcheck.png" />
<textbox id="verb" value="" />
<button id="conjugate" label="Conjuguer" />
<spacer flex="1"/>
</box>
<box>
<spacer flex="1"/>
<checkbox id="oneg" label="Négation" />
<checkbox id="opro" label="Pronominal" />
<checkbox id="ofem" label="Féminin" />
<checkbox id="oint" label="Interrogatif" />
<checkbox id="otco" label="Temps composés" />
<spacer flex="1"/>
</box>
<box>
<spacer flex="1"/>
<box orient="vertical">
<label id="verb_title">.</label>
<label id="info">.</label>
</box>
<spacer flex="1"/>
</box>
<columns>
<column>
<groupbox id="infinitif">
<caption label="Infinitif" />
<label id="infi" class="cj">.</label>
</groupbox>
<groupbox id="imperatif">
<caption label="Impératif" />
<label id="impe_temps" class="temps">Présent</label>
<label id="impe1" class="cj">.</label>
<label id="impe2" class="cj">.</label>
<label id="impe3" class="cj">.</label>
</groupbox>
</column>
<column>
<groupbox id="partpre">
<caption label="Participe présent" />
<label id="ppre" class="cj">.</label>
</groupbox>
<groupbox id="partpas">
<caption label="Participes passés" />
<label id="ppas1" class="cj">.</label>
<label id="ppas2" class="cj">.</label>
<label id="ppas3" class="cj">.</label>
<label id="ppas4" class="cj">.</label>
</groupbox>
</column>
</columns>
<columns>
<column>
<groupbox id="indicatif">
<caption label="Indicatif" />
<label id="ipre_temps" class="temps">Présent</label>
<label id="ipre1" class="cj">.</label>
<label id="ipre2" class="cj">.</label>
<label id="ipre3" class="cj">.</label>
<label id="ipre4" class="cj">.</label>
<label id="ipre5" class="cj">.</label>
<label id="ipre6" class="cj">.</label>
<label id="iimp_temps" class="temps">Imparfait</label>
<label id="iimp1" class="cj">.</label>
<label id="iimp2" class="cj">.</label>
<label id="iimp3" class="cj">.</label>
<label id="iimp4" class="cj">.</label>
<label id="iimp5" class="cj">.</label>
<label id="iimp6" class="cj">.</label>
<label id="ipsi_temps" class="temps">Passé simple</label>
<label id="ipsi1" class="cj">.</label>
<label id="ipsi2" class="cj">.</label>
<label id="ipsi3" class="cj">.</label>
<label id="ipsi4" class="cj">.</label>
<label id="ipsi5" class="cj">.</label>
<label id="ipsi6" class="cj">.</label>
<label id="ifut_temps" class="temps">Futur</label>
<label id="ifut1" class="cj">.</label>
<label id="ifut2" class="cj">.</label>
<label id="ifut3" class="cj">.</label>
<label id="ifut4" class="cj">.</label>
<label id="ifut5" class="cj">.</label>
<label id="ifut6" class="cj">.</label>
</groupbox>
<description id="smallnote">Ce verbe n’a pas encore été vérifié. C’est pourquoi les options “pronominal” et “temps composés” sont désactivées.</description>
</column>
<column>
<groupbox id="subjonctif">
<caption label="Subjonctif" />
<label id="spre_temps" class="temps">Présent</label>
<label id="spre1" class="cj">.</label>
<label id="spre2" class="cj">.</label>
<label id="spre3" class="cj">.</label>
<label id="spre4" class="cj">.</label>
<label id="spre5" class="cj">.</label>
<label id="spre6" class="cj">.</label>
<label id="simp_temps" class="temps">Imparfait</label>
<label id="simp1" class="cj">.</label>
<label id="simp2" class="cj">.</label>
<label id="simp3" class="cj">.</label>
<label id="simp4" class="cj">.</label>
<label id="simp5" class="cj">.</label>
<label id="simp6" class="cj">.</label>
</groupbox>
<groupbox id="conditionnel">
<caption label="Conditionnel" />
<label id="conda_temps" class="temps">Présent</label>
<label id="conda1" class="cj">.</label>
<label id="conda2" class="cj">.</label>
<label id="conda3" class="cj">.</label>
<label id="conda4" class="cj">.</label>
<label id="conda5" class="cj">.</label>
<label id="conda6" class="cj">.</label>
<label id="condb_temps" class="temps">.</label>
<label id="condb1" class="cj">.</label>
<label id="condb2" class="cj">.</label>
<label id="condb3" class="cj">.</label>
<label id="condb4" class="cj">.</label>
<label id="condb5" class="cj">.</label>
<label id="condb6" class="cj">.</label>
</groupbox>
</column>
</columns>
<script type="application/x-javascript" src="conjugueur.js"/>
</dialog>
|
Added gc_lang/fr/tb/content/editor.js version [25c8a38b27].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
// JavaScript
class Editor {
constructor (sLang) {
this.xEditor = GetCurrentEditor();
this.lNode = [];
this.lParsableNodes = ["P", "LI"];
this.lRootNodes = ["DIV", "UL", "OL"];
};
* _getParsableNodes (xRootNode=this.xEditor.rootElement) {
// recursive function
try {
for (let xNode of xRootNode.childNodes) {
//echo("tag: " + xNode.tagName);
if (xNode.className !== "moz-cite-prefix" && xNode.tagName !== "BLOCKQUOTE"
&& (xNode.nodeType == Node.TEXT_NODE || (xNode.nodeType == Node.ELEMENT_NODE && !xNode.textContent.startsWith(">")))
&& xNode.textContent !== "") {
if (xNode.tagName === undefined || this.lParsableNodes.includes(xNode.tagName)) {
yield xNode;
} else if (this.lRootNodes.includes(xNode.tagName)) {
yield* this._getParsableNodes(xNode);
}
}
}
} catch (e) {
Cu.reportError(e);
}
};
* getParagraphs () {
try {
let i = 0;
for (let xNode of this._getParsableNodes()) {
this.lNode.push(xNode);
yield [i, xNode.innerHTML];
i += 1;
}
} catch (e) {
Cu.reportError(e);
}
};
getContent () {
try {
let sContent = "";
for (let [i, sHTML] of this.getParagraphs()) {
if (sContent.length > 0) {
sContent += "\n";
}
sContent += sHTML;
}
return sContent;
} catch (e) {
Cu.reportError(e);
}
};
getParagraph (iPara) {
try {
return this.lNode[iPara].innerHTML;
} catch (e) {
Cu.reportError(e);
}
};
writeParagraph (iPara, sText) {
try {
this.lNode[iPara].innerHTML = sText;
} catch (e) {
Cu.reportError(e);
}
};
changeParagraph (iPara, sModif, iStart, iEnd) {
let sText = this.getParagraph(iPara);
this.writeParagraph(iPara, sText.slice(0, iStart) + sModif + sText.slice(iEnd));
};
getLangFromSpellChecker () {
try {
let gSpellChecker = this.xEditor.getInlineSpellChecker(true);
let sLang = gSpellChecker.spellChecker.GetCurrentDictionary();
return sLang.slice(0, 2);
} catch (e) {
Cu.reportError(e);
}
};
}
|
Added gc_lang/fr/tb/content/gc_options.css version [6199209734].
> > > > > > > | 1 2 3 4 5 6 7 |
/* CSS */
.section {
font-size: 16px;
font-weight: bold;
color: hsl(210, 50%, 50%);
}
|
Added gc_lang/fr/tb/content/gc_options.js version [f85fde1089].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
// JavaScript
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
//const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
var oOptControl = {
oOptions: null,
load: function () {
this._setDialogOptions(false);
},
_setDialogOptions: function (bDefaultOptions=false) {
try {
sOptions = bDefaultOptions ? prefs.getCharPref("sGCDefaultOptions") : prefs.getCharPref("sGCOptions");
//echo(">> " + sOptions);
this.oOptions = JSON.parse(sOptions);
for (let sParam in this.oOptions) {
//echo(sParam + ":" + oOptions[sParam]);
if (document.getElementById("option_"+sParam) !== null) {
document.getElementById("option_"+sParam).checked = this.oOptions[sParam];
}
}
}
catch (e) {
Cu.reportError(e);
}
},
save: function () {
try {
for (let xNode of document.getElementsByClassName("option")) {
this.oOptions[xNode.id.slice(7)] = xNode.checked;
}
prefs.setCharPref("sGCOptions", JSON.stringify(this.oOptions));
//echo("<< " + JSON.stringify(this.oOptions));
}
catch (e) {
Cu.reportError(e);
}
},
reset: function () {
this._setDialogOptions(true);
}
}
oOptControl.load();
|
Added gc_lang/fr/tb/content/gc_options.xul version [8e6b4a963d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://grammarchecker/content/gc_options.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/gc_options.dtd">
<dialog
id="grammalecte-gcoptions-window"
title="&window.title;"
orient="vertical"
buttons="accept, cancel, extra1"
ondialogaccept="oOptControl.save();"
ondialogcancel="return;"
buttonlabelextra1="&defaultbutton.label;"
ondialogextra1="oOptControl.reset();"
defaultButton="accept"
width="400"
onload="document.getElementById('grammalecte-gcoptions-window').centerWindowOnScreen();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<dialogheader id="grammalecte-title" title="&dialogheader.label;" description="" />
<tabbox id="tabs_options" selectedIndex="0">
<tabs>
${sXULTabs}
</tabs>
<tabpanels>
${sXULTabPanels}
</tabpanels>
</tabbox>
<script type="application/x-javascript" src="gc_options.js" />
</dialog>
|
Added gc_lang/fr/tb/content/options.xul version [4daa0434f3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE prefwindow SYSTEM "chrome://grammarchecker/locale/options.dtd">
<prefwindow id="grammarcheckerPreferences"
title="&prefwindow.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<prefpane id="pane1" label="&panel.title;">
<preferences>
<preference id="gc_options" name="extensions.grammarchecker.sGCOptions" type="string" />
<preference id="tf_options" name="extensions.grammarchecker.sTFOptions" type="string" />
<!--<preference id="urlpref1" name="extensions.grammarchecker.urlpref1" type="string"/>
<preference id="urlpref2" name="extensions.grammarchecker.urlpref2" type="string"/>
<preference id="langpref" name="extensions.grammarchecker.langpref" type="string"/>
<preference id="mothertongue" name="extensions.grammarchecker.mothertongue" type="string"/>-->
</preferences>
<label accesskey="&gc_options.accesskey;" control="texturlpref1">&gc_options.label;</label><textbox id="texturlpref1" preference="gc_options"/>
<label accesskey="&tf_options.accesskey;" control="texturlpref2">&tf_options.label;</label><textbox id="texturlpref2" preference="tf_options"/>
<!--<label accesskey="&urlpref1.accesskey;" control="texturlpref1">&urlpref1.label;</label><textbox id="texturlpref1" preference="urlpref1"/>
<label accesskey="&urlpref2.accesskey;" control="texturlpref2">&urlpref2.label;</label><textbox id="texturlpref2" preference="urlpref2"/>
<label accesskey="&langpref.accesskey;" control="textlangpref">&langpref.label;</label><textbox id="textlangpref" preference="langpref"/>
<label accesskey="&mothertongue.accesskey;" control="textmothertongue">&mothertongue.label;</label><textbox id="textmothertongue" preference="mothertongue"/>-->
<description>&panel.description;</description>
</prefpane>
</prefwindow>
|
Added gc_lang/fr/tb/content/overlay.css version [778a1d344a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
#grammarchecker-toolbar-button {
list-style-image: url("chrome://grammarchecker/skin/grammarcheck.png");
}
[iconsize="small"] #grammarchecker-toolbar-button {
list-style-image: url("chrome://grammarchecker/skin/grammarcheck_small.png");
}
#grammarchecker-toolbar-button[disabled="true"] {
list-style-image: url("chrome://grammarchecker/skin/grammarcheck_disabled.png");
}
[iconsize="small"] #grammarchecker-toolbar-button[disabled="true"] {
list-style-image: url("chrome://grammarchecker/skin/grammarcheck_small_disabled.png");
}
#grammalecte-menu {
list-style-image: url("chrome://grammarchecker/skin/grammarcheck.png");
}
menuitem#gl-item-analyze {
list-style-image: url('chrome://grammarchecker/skin/grammarcheck.png');
}
#textformatter-panel {
overflow: auto;
height: 500px;
max-height: 650px;
}
#textformatter-title {
margin-top: 10px;
}
#textformatter-commands {
margin: 10px 0;
}
#textformatter-infomsg {
padding: 5px;
font-size: 10px;
}
.optiongroup {
color: hsl(210, 50%, 40%);
font-size: 14px;
font-weight: bold;
}
#grammarchecker-panel {
overflow: auto;
margin-left: 0.5em;
height: 400px;
max-height: 600px;
}
#grammalecte-title {
margin-top: 10px;
}
#grammalecte-infobox {
display: block;
margin: 20px 10px 5px 10px;
padding: 10px;
background-color: hsl(210, 20%, 40%);
border-radius: 3px;
color: hsl(210, 50%, 96%);
font-weight: bold;
}
#grammalecte-info {
padding: 1px 5px;
}
#closebutton {
padding: 1px 5px;
background-color: hsl(0, 50%, 50%);
color: hsl(0, 10%, 96%);
border-radius: 2px;
cursor: pointer;
}
#grammalecte-errors div {
display: block;
/*display: list-item;
list-style-position: inside;*/
margin-top: 10px;
}
#grammalecte-errors p {
display: block;
margin-left: 10px;
}
#grammalecte-errors p.paragraph {
margin-top: 20px;
font-size: 16px;
font-family: "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
}
#grammalecte-errors p.message {
margin-left: 20px;
}
#grammalecte-errors p.moreinfo {
margin-left: 40px;
}
#grammalecte-errors p.suggestions {
margin-left: 40px;
color: hsl(120, 5%, 33%);
}
#grammalecte-errors span.suggestions_button {
padding: 1px 6px;
background-color: hsl(120, 40%, 60%);
color: hsl(120, 10%, 96%);
border-radius: 2px;
cursor: pointer;
}
#grammalecte-errors {
display: block;
}
a {
font-weight: bold;
color: hsl(30, 50%, 50%);
text-decoration: underline;
cursor: pointer;
}
.error {
/* default color */
background-color: hsl(210, 50%, 50%);
color: hsl(210, 10%, 96%);
font-weight: bold;
border-radius: 3px;
/*border-bottom: 2px solid hsl(210, 50%, 50%);*/
}
.errornum {
color: hsl(210, 10%, 30%);
font-weight: bold;
}
.sugg {
padding: 1px 6px;
background-color: hsl(120, 50%, 30%);
color: hsl(210, 10%, 90%);
border-radius: 2px;
font-weight: bold;
cursor: pointer;
}
.debug_info {
color: hsl(0, 50%, 50%);
font-style: italic;
}
/* elems */
.spell {
background-color: hsl(0, 50%, 50%);
color: hsl(0, 0%, 96%);
border-radius: 3px;
}
/* elems */
.typo, .esp, .nbsp, .eif, .maj, .virg, .tu, .num, .unit, .nf, .liga, .mapos, .chim {
background-color: hsl(30, 70%, 50%);
color: hsl(30, 10%, 96%);
border-radius: 3px;
}
/* elems */
.apos {
background-color: hsl(40, 90%, 50%);
color: hsl(40, 10%, 96%);
border-radius: 3px;
}
/* elems */
.gn, .sgpl {
background-color: hsl(210, 50%, 50%);
color: hsl(210, 10%, 96%);
border-radius: 3px;
}
/* elems */
.conj, .infi, .imp, .inte, .ppas, .vmode {
background-color: hsl(300, 30%, 40%);
color: hsl(300, 10%, 96%);
border-radius: 3px;
}
/* elems */
.conf, .ocr {
background-color: hsl(270, 40%, 30%);
color: hsl(270, 10%, 96%);
border-radius: 3px;
}
/* elems */
.bs, .pleo, .neg, .redon1, .redon2, .mc, .date, .notype {
background-color: hsl(180, 50%, 40%);
color: hsl(180, 10%, 96%);
border-radius: 3px;
}
|
Added gc_lang/fr/tb/content/overlay.js version [e9c7e6f275].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 |
// JavaScript
"use strict";
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
const { BasePromiseWorker } = Cu.import('resource://gre/modules/PromiseWorker.jsm', {});
const Task = Cu.import("resource://gre/modules/Task.jsm").Task;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
//Cu.import("resource://gre/modules/Console.jsm"); // doesn’t work
//const xConsole = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
//xConsole.logStringMessage("Grammalecte: " + args.join(" · ")); // useless now. Use: Services.console.logStringMessage("***");
const text = require("resource://grammalecte/text.js");
const tf = require("resource://grammalecte/fr/textformatter.js");
function echo (...args) {
dump(args.join(" -- ") + "\n"); // obsolete since TB 52?
Services.console.logStringMessage("Grammalecte: " + args.join(" · "));
}
const oConverterToExponent = {
dNumbers: new Map ([
["1", "¹"], ["2", "²"], ["3", "³"], ["4", "⁴"], ["5", "⁵"],
["6", "⁶"], ["7", "⁷"], ["8", "⁸"], ["9", "⁹"], ["0", "⁰"]
]),
convert: function (sText) {
let sRes = "";
for (let c of sText) {
sRes += (this.dNumbers.has(c)) ? this.dNumbers.get(c) : "⁻";
}
return sRes;
}
};
var oGrammarChecker = {
// you must use var to be able to call this object from elsewhere
xGCEWorker: null,
bDictActive: null,
loadGC: function () {
if (this.xGCEWorker === null) {
// Grammar checker
echo('Loading Grammalecte');
this.xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js');
let xPromise = this.xGCEWorker.post('loadGrammarChecker', [prefs.getCharPref("sGCOptions")]);
xPromise.then(
function (aVal) {
echo(aVal);
prefs.setCharPref("sGCOptions", aVal);
},
function (aReason) { echo('Promise rejected - ', aReason); }
).catch(
function (aCaught) { echo('Promise Error - ', aCaught); }
);
}
},
fullTests: function () {
echo('Performing tests... Wait...');
let xPromise = this.xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']);
xPromise.then(
function (aVal) {
echo('Done.');
echo(aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
);
},
test: function (sText) {
echo("Test...");
let xPromise = this.xGCEWorker.post('parse', [sText, "FR", true]);
xPromise.then(
function (aVal) {
let lErr = JSON.parse(aVal);
if (lErr.length > 0) {
for (let dErr of lErr) {
echo(text.getReadableError(dErr));
}
} else {
echo("no error found");
}
},
function (aReason) { echo('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
);
},
setOptions: function () {
echo('Set options');
let xPromise = this.xGCEWorker.post('setOptions', [prefs.getCharPref("sGCOptions")]);
xPromise.then(
function (aVal) {
echo(aVal);
prefs.setCharPref("sGCOptions", aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
);
},
resetOptions: function () {
let xPromise = this.xGCEWorker.post('resetOptions');
xPromise.then(
function (aVal) {
echo(aVal);
prefs.setCharPref("sGCOptions", aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
);
},
_getGCResultPromise: function (sParagraph, sLang, bDebug, bContext) {
// For some reason, you can’t use result of PromiseWorker within a Task,
// you have to wrap it in a common Promise. Task and yield can be replaced with async / await when it is available.
let that = this;
return new Promise(function (resolve, reject) {
let xPromise = that.xGCEWorker.post('parseAndSpellcheck', [sParagraph, sLang, bDebug, bContext]);
xPromise.then(
function (aVal) {
resolve(aVal);
},
function (aReason) {
// rejected
resolve(aReason);
}
).catch(
function (aCaught) {
// error
reject(aCaught);
}
);
});
},
parse: function () {
this.clearPreview();
this.openPanel();
this.setInfo("Analyse en cours…");
let that = this;
Task.spawn(function* () {
let xEditor = new Editor();
let nParagraph = 0;
let bIsError = false;
for (let [iParagraph, sParagraph] of xEditor.getParagraphs()) {
if (sParagraph.trim() !== "") {
let sRes = yield that._getGCResultPromise(sParagraph, "FR", false, false);
let oRes = JSON.parse(sRes);
if (oRes.aGrammErr.length > 0 || oRes.aSpellErr.length > 0) {
document.getElementById("grammalecte-errors").appendChild(that.createResultNode(xEditor, sParagraph, iParagraph, oRes.aGrammErr, oRes.aSpellErr));
bIsError = true;
}
nParagraph += 1;
}
}
if (bIsError === false) {
let xNodeP = document.createElement("p");
xNodeP.setAttribute("class", "message");
xNodeP.textContent = "Aucune erreur détectée…";
document.getElementById("grammalecte-errors").appendChild(xNodeP);
}
return nParagraph;
}).then(function (res) {
that.setInfo("Nombre de paragraphes analysés : " + res);
}, function (e) {
that.setInfo("Erreur : " + e.message);
Cu.reportError(e);
});
},
createResultNode: function (xEditor, sParagraph, iParagraph, aGrammErr, aSpellErr) {
let xResultNode = document.createElement("div");
xResultNode.setAttribute("id", "resnode" + iParagraph);
this.fillResultNode(xResultNode, xEditor, sParagraph, iParagraph, aGrammErr, aSpellErr);
return xResultNode;
},
reparseParagraph: function (xEditor, iParagraph) {
try {
let that = this;
let xResultNode = document.getElementById("resnode"+iParagraph);
xResultNode.textContent = "…………… réanalyse en cours ……………";
let sParagraph = xEditor.getParagraph(iParagraph);
let xPromise = this._getGCResultPromise(sParagraph, "FR", false, false);
xPromise.then(function (res) {
//echo("res: " + res);
xResultNode.textContent = "";
let oRes = JSON.parse(res);
if (oRes.aGrammErr.length > 0 || oRes.aSpellErr.length > 0) {
that.fillResultNode(xResultNode, xEditor, sParagraph, iParagraph, oRes.aGrammErr, oRes.aSpellErr);
}
}, function (res) {
xResultNode.textContent = "Erreur: " + res;
});
}
catch (e) {
Cu.reportError(e);
}
},
fillResultNode: function (xResultNode, xEditor, sParagraph, iParagraph, aGrammErr, aSpellErr) {
try {
if (aGrammErr.length === 0 && aSpellErr.length === 0) {
return null;
}
aGrammErr.push(...aSpellErr);
aGrammErr.sort(function (a, b) {
if (a["nStart"] < b["nStart"])
return -1;
if (a["nStart"] > b["nStart"])
return 1;
return 0;
});
let xParagraphNode = document.createElement("p");
let lNodeError = [];
let nEndLastErr = 0;
let nError = 1;
xParagraphNode.setAttribute("class", "paragraph");
for (let dErr of aGrammErr) {
let nStart = dErr["nStart"];
let nEnd = dErr["nEnd"];
if (nStart >= nEndLastErr) {
xParagraphNode.appendChild(document.createTextNode(this._purgeTags(sParagraph.slice(nEndLastErr, nStart))));
let xNodeError = document.createElement("b");
if (dErr['sType'] !== 'WORD') {
xNodeError.setAttribute("class", "error " + dErr["sType"]);
xNodeError.textContent = oConverterToExponent.convert(nError.toString()) + sParagraph.slice(nStart, nEnd);
xParagraphNode.appendChild(xNodeError);
lNodeError.push(this._createNodeGCErrorDescription(xEditor, nError, dErr, iParagraph));
}
else {
xNodeError.setAttribute("class", "error spell");
xNodeError.textContent = oConverterToExponent.convert(nError.toString()) + sParagraph.slice(nStart, nEnd);
xParagraphNode.appendChild(xNodeError);
lNodeError.push(this._createNodeSpellErrorDescription(xEditor, nError, dErr, iParagraph));
}
nEndLastErr = nEnd;
nError += 1;
}
}
xParagraphNode.appendChild(document.createTextNode(this._purgeTags(sParagraph.slice(nEndLastErr))));
xResultNode.appendChild(xParagraphNode);
for (let xNode of lNodeError) {
xResultNode.appendChild(xNode);
}
}
catch (e) {
Cu.reportError(e);
xResultNode.textContent = "# Error: " + e.message;
}
},
_createNodeGCErrorDescription: function (xEditor, nError, dErr, iParagraph) {
let xNodeDiv = document.createElement("div");
let that = this;
// message
let xNodeMessage = document.createElement("p");
xNodeMessage.setAttribute("class", "message");
let xNodeErrorNumber = document.createElement("b");
xNodeErrorNumber.setAttribute("class", "errornum");
xNodeErrorNumber.textContent = "[" + nError + "] ";
xNodeMessage.appendChild(xNodeErrorNumber);
xNodeMessage.appendChild(document.createTextNode(" " + dErr["sMessage"].replace(/ /g, " ") + " "));
if (false) {
// debug info
let xNodeDebug = document.createElement("span");
xNodeDebug.setAttribute("class", "debug_info");
xNodeDebug.textContent = " #" + dErr["sRuleId"] + " #" + dErr["sLineId"];
xNodeMessage.appendChild(xNodeDebug);
}
xNodeDiv.appendChild(xNodeMessage);
// URL
if (dErr["URL"]) {
let xNodeP = document.createElement("p");
xNodeP.setAttribute("class", "moreinfo");
xNodeP.appendChild(document.createTextNode("→ "));
let xNodeURL = document.createElement("a");
xNodeURL.setAttribute("href", dErr["URL"]);
xNodeURL.textContent = "Plus d’informations…";
xNodeURL.addEventListener("click", function (e) {
that.openInTabURL(dErr["URL"]);
});
xNodeP.appendChild(xNodeURL);
xNodeDiv.appendChild(xNodeP);
}
// suggestions
if (dErr["aSuggestions"].length > 0) {
let xNodeSuggLine = document.createElement("p");
xNodeSuggLine.setAttribute("class", "suggestions");
xNodeSuggLine.textContent = "Suggestions : ";
let n = 0;
for (let sSugg of dErr["aSuggestions"]) {
if (n > 0) {
xNodeSuggLine.appendChild(document.createTextNode(" "));
}
let xNodeSugg = document.createElement("span");
xNodeSugg.setAttribute("class", "sugg");
xNodeSugg.textContent = sSugg;
xNodeSugg.addEventListener("click", function (e) {
xEditor.changeParagraph(iParagraph, xNodeSugg.textContent, dErr["nStart"], dErr["nEnd"]);
xNodeDiv.textContent = "";
that.reparseParagraph(xEditor, iParagraph);
});
xNodeSuggLine.appendChild(xNodeSugg);
n += 1;
}
xNodeDiv.appendChild(xNodeSuggLine);
}
return xNodeDiv;
},
_purgeTags: function (sText) {
sText = sText.replace(/<br ?\/?>/ig, " ");
return sText.replace(/<\/? ?[a-zA-Z]+ ?>/g, "");
},
_createNodeSpellErrorDescription: function (xEditor, nError, dErr, iParagraph) {
let xNodeDiv = document.createElement("div");
let that = this;
// message
let xNodeMessage = document.createElement("p");
xNodeMessage.setAttribute("class", "message");
let xNodeErrorNumber = document.createElement("b");
xNodeErrorNumber.setAttribute("class", "errornum");
xNodeErrorNumber.textContent = "[" + nError + "] ";
xNodeMessage.appendChild(xNodeErrorNumber);
xNodeMessage.appendChild(document.createTextNode(" Mot inconnu du dictionnaire. "));
xNodeDiv.appendChild(xNodeMessage);
// suggestions
let xNodeSuggLine = document.createElement("p");
xNodeSuggLine.setAttribute("class", "suggestions");
let xNodeSuggButton = document.createElement("span");
xNodeSuggButton.setAttribute("class", "suggestions_button");
xNodeSuggButton.textContent = "Suggestions : ";
xNodeSuggButton.addEventListener("click", function (e) {
if (this.bDictActive === null) {
this.bDictActive = oSpellControl.setDictionary("fr");
}
try {
let aSugg = oSpellControl.suggest(dErr['sValue']);
if (aSugg) {
let n = 0;
for (let sSugg of aSugg) {
if (true || n > 0) {
xNodeSuggLine.appendChild(document.createTextNode(" "));
}
let xNodeSugg = document.createElement("span");
xNodeSugg.setAttribute("class", "sugg");
xNodeSugg.textContent = sSugg;
xNodeSugg.addEventListener("click", function (e) {
xEditor.changeParagraph(iParagraph, xNodeSugg.textContent, dErr["nStart"], dErr["nEnd"]);
xNodeDiv.textContent = "";
that.reparseParagraph(xEditor, iParagraph);
});
xNodeSuggLine.appendChild(xNodeSugg);
n += 1;
}
} else {
xNodeSuggLine.appendChild(document.createTextNode("Aucune suggestion."));
}
}
catch (e) {
xNodeSuggLine.appendChild(document.createTextNode("# Erreur : dictionnaire orthographique introuvable."));
Cu.reportError(e);
}
});
xNodeSuggLine.appendChild(xNodeSuggButton);
xNodeDiv.appendChild(xNodeSuggLine);
return xNodeDiv;
},
loadUI: function() {
echo("loadUI");
this._strings = document.getElementById("grammarchecker-strings");
let that = this;
let nsGrammarCommand = {
isCommandEnabled: function (aCommand, dummy) {
return (IsDocumentEditable() && !IsInHTMLSourceMode());
},
getCommandStateParams: function (aCommand, aParams, aRefCon) {},
doCommandParams: function (aCommand, aParams, aRefCon) {},
doCommand: function (aCommand) {
that.onParseText(aCommand);
}
};
let xCommandTable = GetComposerCommandTable();
xCommandTable.registerCommand("cmd_grammar", nsGrammarCommand);
let sButtonId = "grammarchecker-toolbar-button";
let sButtonId2 = "grammalecte-menu";
let xNavBar = document.getElementById("composeToolbar2");
let lCurSet = xNavBar.currentSet.split(",");
if (lCurSet.indexOf(sButtonId) == -1) {
let iPos = lCurSet.indexOf("spellingButton") + 1 || lCurSet.length;
let aSet = lCurSet.slice(0, iPos).concat(sButtonId).concat(sButtonId2).concat(lCurSet.slice(iPos));
xNavBar.setAttribute("currentset", aSet.join(","));
xNavBar.currentSet = aSet.join(",");
document.persist(xNavBar.id, "currentset");
try {
BrowserToolboxCustomizeDone(true);
}
catch (e) {
Cu.reportError(e);
}
}
},
clearPreview: function() {
let xPreview = document.getElementById("grammalecte-errors");
while (xPreview.firstChild) {
xPreview.removeChild(xPreview.firstChild);
};
let xEditor = GetCurrentEditor();
if (xEditor != null) {
try {
xEditor.QueryInterface(Ci.nsIEditorStyleSheets);
xEditor.addOverrideStyleSheet("chrome://grammarchecker/content/overlay.css");
}
catch (e) {
Cu.reportError(e);
}
}
this.setInfo("[vide]");
},
setInfo: function (sText) {
document.getElementById("grammalecte-info").textContent = sText;
},
openPanel: function () {
document.getElementById("textformatter-splitter").setAttribute("state", "collapsed");
document.getElementById("grammarchecker-splitter").setAttribute("state", "open");
},
closePanel: function () {
document.getElementById("grammarchecker-splitter").setAttribute("state", "collapsed");
},
openDialog: function (sWhat, sName="", sOptions="") {
try {
window.openDialog(sWhat, sName, sOptions);
}
catch (e) {
Cu.reportError(e);
}
},
openInTabURL: function (sURL) {
// method found in S3.Google.Translator
try {
let xWM = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
let xWin = xWM.getMostRecentWindow("mail:3pane");
let xTabmail = xWin.document.getElementById('tabmail');
xWin.focus();
if (xTabmail) {
xTabmail.openTab('contentTab', { contentPage: sURL });
}
}
catch (e) {
Cu.reportError(e);
}
},
openInBrowserURL: function (sURL) {
// method found in S3.Google.Translator
try {
openURL(sURL);
}
catch (e) {
Cu.reportError(e);
}
},
onParseText: function (e) {
this.parse();
},
onClosePanel: function (e) {
this.closePanel();
},
onOpenGCOptions: function (e) {
let that = this;
let xPromise = this.xGCEWorker.post('getDefaultOptions');
xPromise.then(
function (aVal) {
echo(aVal);
prefs.setCharPref("sGCDefaultOptions", aVal);
},
function (aReason) { echo('Promise rejected', aReason); }
).catch(
function (aCaught) { echo('Promise Error', aCaught); }
).then(
function () {
that.openDialog("chrome://grammarchecker/content/gc_options.xul", "", "chrome, dialog, modal, resizable=no");
that.setOptions();
},
function (aReason) { echo('Error options dialog', aReason); }
).catch(
function (aCaught) { echo('Error', aCaught); }
);
},
onOpenSpellOptions: function (e) {
this.openDialog("chrome://grammarchecker/content/spell_options.xul", "", "chrome, dialog, modal, resizable=no");
},
onOpenTextFormatter: function (e) {
oTextFormatter.openPanel();
},
onOpenConjugueur: function (e) {
this.openDialog("chrome://grammarchecker/content/conjugueur.xul", "", "chrome, resizable=no");
},
onAbout: function (e) {
this.openDialog("chrome://grammarchecker/content/about.xul", "", "chrome, dialog, modal, resizable=no");
}
};
var oDictIgniter = {
bDone: false,
init: function () {
if (!this.bDone) {
oSpellControl.init();
this._setDictionary('fr-FR-modern', 'bDictModern');
this._setDictionary('fr-FR-classic', 'bDictClassic');
this._setDictionary('fr-FR-reform', 'bDictReform');
this._setDictionary('fr-FR-classic-reform', 'bDictClassicReform');
}
},
_setDictionary: function (sDicName, sOptName) {
try {
oSpellControl.setExtensionDictFolder(sDicName, prefs.getBoolPref(sOptName));
}
catch (e) {
Cu.reportError(e);
}
}
}
var oTextFormatter = {
init: function () {
try {
this.closePanel();
let sTFOptions = prefs.getCharPref("sTFOptions");
if (sTFOptions !== "") {
this.setOptionsInPanel(JSON.parse(sTFOptions));
this.resetProgressBar();
} else {
this.reset();
}
}
catch (e) {
Cu.reportError(e);
}
},
apply: function () {
try {
this.saveOptions();
this.resetProgressBar();
let xEditor = new Editor();
let sText = xEditor.getContent();
let iParagraph = 0;
sText = this.applyOptions(sText);
for (let sParagraph of text.getParagraph(sText)) {
xEditor.writeParagraph(iParagraph, sParagraph);
iParagraph += 1;
}
}
catch (e) {
Cu.reportError(e);
}
},
saveOptions: function () {
let oOptions = {};
for (let xNode of document.getElementsByClassName("option")) {
oOptions[xNode.id] = xNode.checked;
}
//echo("save options: " + JSON.stringify(oOptions));
prefs.setCharPref("sTFOptions", JSON.stringify(oOptions));
},
setOptionsInPanel: function (oOptions) {
for (let sOptName in oOptions) {
//console.log(sOptName + ":" + oOptions[sOptName]);
if (document.getElementById(sOptName) !== null) {
document.getElementById(sOptName).checked = oOptions[sOptName];
if (sOptName.startsWith("o_group_")) {
this.switchGroup(sOptName);
}
if (document.getElementById("res_"+sOptName) !== null) {
document.getElementById("res_"+sOptName).textContent = "";
}
}
}
},
switchGroup: function (sOptName) {
if (document.getElementById(sOptName).checked) {
document.getElementById(sOptName.slice(2)).style.opacity = 1;
} else {
document.getElementById(sOptName.slice(2)).style.opacity = 0.3;
}
},
reset: function () {
try {
this.resetProgressBar();
for (let xNode of document.getElementsByClassName('option')) {
xNode.checked = (xNode.getAttribute('data-default') === "true");
if (xNode.id.startsWith("o_group_")) {
this.switchGroup(xNode.id);
}
}
}
catch (e) {
Cu.reportError(e);
}
},
resetProgressBar: function () {
document.getElementById('progressbar').value = 0;
document.getElementById('time_res').textContent = "";
},
getTimeRes: function (n) {
// returns duration in seconds as string
if (n < 10) {
return n.toFixed(3).toString() + " s";
}
if (n < 100) {
return n.toFixed(2).toString() + " s";
}
if (n < 1000) {
return n.toFixed(1).toString() + " s";
}
return n.toFixed().toString() + " s";
},
openPanel: function () {
document.getElementById("grammarchecker-splitter").setAttribute("state", "collapsed");
document.getElementById("textformatter-splitter").setAttribute("state", "open");
},
closePanel: function () {
document.getElementById("textformatter-splitter").setAttribute("state", "collapsed");
},
onOpenPanel: function (e) {
this.openPanel();
},
onClosePanel: function (e) {
this.closePanel();
},
onApply: function (e) {
this.apply();
},
onReset: function (e) {
this.reset();
},
//
applyOptions: function (sText) {
try {
const t0 = Date.now();
//window.setCursor("wait"); // change pointer
document.getElementById('progressbar').value = 0;
document.getElementById('progressbar').max = 6;
let n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0;
// espaces surnuméraires
if (document.getElementById("o_group_ssp").checked) {
if (document.getElementById("o_end_of_paragraph").checked) {
[sText, n1] = this.formatText(sText, "end_of_paragraph");
document.getElementById('res_o_end_of_paragraph').textContent = n1;
}
if (document.getElementById("o_between_words").checked) {
[sText, n1] = this.formatText(sText, "between_words");
document.getElementById('res_o_between_words').textContent = n1;
}
if (document.getElementById("o_start_of_paragraph").checked) {
[sText, n1] = this.formatText(sText, "start_of_paragraph");
document.getElementById('res_o_start_of_paragraph').textContent = n1;
}
if (document.getElementById("o_before_punctuation").checked) {
[sText, n1] = this.formatText(sText, "before_punctuation");
document.getElementById('res_o_before_punctuation').textContent = n1;
}
if (document.getElementById("o_within_parenthesis").checked) {
[sText, n1] = this.formatText(sText, "within_parenthesis");
document.getElementById('res_o_within_parenthesis').textContent = n1;
}
if (document.getElementById("o_within_square_brackets").checked) {
[sText, n1] = this.formatText(sText, "within_square_brackets");
document.getElementById('res_o_within_square_brackets').textContent = n1;
}
if (document.getElementById("o_within_quotation_marks").checked) {
[sText, n1] = this.formatText(sText, "within_quotation_marks");
document.getElementById('res_o_within_quotation_marks').textContent = n1;
}
document.getElementById("o_group_ssp").checked = false;
this.switchGroup("o_group_ssp");
}
document.getElementById('progressbar').value = 1;
// espaces typographiques
if (document.getElementById("o_group_nbsp").checked) {
if (document.getElementById("o_nbsp_before_punctuation").checked) {
[sText, n1] = this.formatText(sText, "nbsp_before_punctuation");
[sText, n2] = this.formatText(sText, "nbsp_repair");
document.getElementById('res_o_nbsp_before_punctuation').textContent = n1 - n2;
}
if (document.getElementById("o_nbsp_within_quotation_marks").checked) {
[sText, n1] = this.formatText(sText, "nbsp_within_quotation_marks");
document.getElementById('res_o_nbsp_within_quotation_marks').textContent = n1;
}
if (document.getElementById("o_nbsp_before_symbol").checked) {
[sText, n1] = this.formatText(sText, "nbsp_before_symbol");
document.getElementById('res_o_nbsp_before_symbol').textContent = n1;
}
if (document.getElementById("o_nbsp_within_numbers").checked) {
[sText, n1] = this.formatText(sText, "nbsp_within_numbers");
document.getElementById('res_o_nbsp_within_numbers').textContent = n1;
}
if (document.getElementById("o_nbsp_before_units").checked) {
[sText, n1] = this.formatText(sText, "nbsp_before_units");
document.getElementById('res_o_nbsp_before_units').textContent = n1;
}
document.getElementById("o_group_nbsp").checked = false;
this.switchGroup("o_group_nbsp");
}
document.getElementById('progressbar').value = 2;
// espaces manquants
if (document.getElementById("o_group_typo").checked) {
if (document.getElementById("o_ts_units").checked) {
[sText, n1] = this.formatText(sText, "ts_units");
document.getElementById('res_o_ts_units').textContent = n1;
}
}
if (document.getElementById("o_group_space").checked) {
if (document.getElementById("o_add_space_after_punctuation").checked) {
[sText, n1] = this.formatText(sText, "add_space_after_punctuation");
[sText, n2] = this.formatText(sText, "add_space_repair");
document.getElementById('res_o_add_space_after_punctuation').textContent = n1 - n2;
}
if (document.getElementById("o_add_space_around_hyphens").checked) {
[sText, n1] = this.formatText(sText, "add_space_around_hyphens");
document.getElementById('res_o_add_space_around_hyphens').textContent = n1;
}
document.getElementById("o_group_space").checked = false;
this.switchGroup("o_group_space");
}
document.getElementById('progressbar').value = 3;
// suppression
if (document.getElementById("o_group_delete").checked) {
if (document.getElementById("o_erase_non_breaking_hyphens").checked) {
[sText, n1] = this.formatText(sText, "erase_non_breaking_hyphens");
document.getElementById('res_o_erase_non_breaking_hyphens').textContent = n1;
}
document.getElementById("o_group_delete").checked = false;
this.switchGroup("o_group_delete");
}
document.getElementById('progressbar').value = 4;
// signes typographiques
if (document.getElementById("o_group_typo").checked) {
if (document.getElementById("o_ts_apostrophe").checked) {
[sText, n1] = this.formatText(sText, "ts_apostrophe");
document.getElementById('res_o_ts_apostrophe').textContent = n1;
}
if (document.getElementById("o_ts_ellipsis").checked) {
[sText, n1] = this.formatText(sText, "ts_ellipsis");
document.getElementById('res_o_ts_ellipsis').textContent = n1;
}
if (document.getElementById("o_ts_dash_start").checked) {
if (document.getElementById("o_ts_m_dash_start").checked) {
[sText, n1] = this.formatText(sText, "ts_m_dash_start");
} else {
[sText, n1] = this.formatText(sText, "ts_n_dash_start");
}
document.getElementById('res_o_ts_dash_start').textContent = n1;
}
if (document.getElementById("o_ts_dash_middle").checked) {
if (document.getElementById("o_ts_m_dash_middle").checked) {
[sText, n1] = this.formatText(sText, "ts_m_dash_middle");
} else {
[sText, n1] = this.formatText(sText, "ts_n_dash_middle");
}
document.getElementById('res_o_ts_dash_middle').textContent = n1;
}
if (document.getElementById("o_ts_quotation_marks").checked) {
[sText, n1] = this.formatText(sText, "ts_quotation_marks");
document.getElementById('res_o_ts_quotation_marks').textContent = n1;
}
if (document.getElementById("o_ts_spell").checked) {
[sText, n1] = this.formatText(sText, "ts_spell");
document.getElementById('res_o_ts_spell').textContent = n1;
}
if (document.getElementById("o_ts_ligature").checked) {
// ligatures typographiques : fi, fl, ff, ffi, ffl, ft, st
if (document.getElementById("o_ts_ligature_do").checked) {
if (document.getElementById("o_ts_ligature_ffi").checked) {
[sText, n1] = this.formatText(sText, "ts_ligature_ffi_do");
}
if (document.getElementById("o_ts_ligature_ffl").checked) {
[sText, n2] = this.formatText(sText, "ts_ligature_ffl_do");
}
if (document.getElementById("o_ts_ligature_fi").checked) {
[sText, n3] = this.formatText(sText, "ts_ligature_fi_do");
}
if (document.getElementById("o_ts_ligature_fl").checked) {
[sText, n4] = this.formatText(sText, "ts_ligature_fl_do");
}
if (document.getElementById("o_ts_ligature_ff").checked) {
[sText, n5] = this.formatText(sText, "ts_ligature_ff_do");
}
if (document.getElementById("o_ts_ligature_ft").checked) {
[sText, n6] = this.formatText(sText, "ts_ligature_ft_do");
}
if (document.getElementById("o_ts_ligature_st").checked) {
[sText, n7] = this.formatText(sText, "ts_ligature_st_do");
}
}
if (document.getElementById("o_ts_ligature_undo").checked) {
if (document.getElementById("o_ts_ligature_ffi").checked) {
[sText, n1] = this.formatText(sText, "ts_ligature_ffi_undo");
}
if (document.getElementById("o_ts_ligature_ffl").checked) {
[sText, n2] = this.formatText(sText, "ts_ligature_ffl_undo");
}
if (document.getElementById("o_ts_ligature_fi").checked) {
[sText, n3] = this.formatText(sText, "ts_ligature_fi_undo");
}
if (document.getElementById("o_ts_ligature_fl").checked) {
[sText, n4] = this.formatText(sText, "ts_ligature_fl_undo");
}
if (document.getElementById("o_ts_ligature_ff").checked) {
[sText, n5] = this.formatText(sText, "ts_ligature_ff_undo");
}
if (document.getElementById("o_ts_ligature_ft").checked) {
[sText, n6] = this.formatText(sText, "ts_ligature_ft_undo");
}
if (document.getElementById("o_ts_ligature_st").checked) {
[sText, n7] = this.formatText(sText, "ts_ligature_st_undo");
}
}
document.getElementById('res_o_ts_ligature').textContent = n1 + n2 + n3 + n4 + n5 + n6 + n7;
}
document.getElementById("o_group_typo").checked = false;
this.switchGroup("o_group_typo");
}
document.getElementById('progressbar').value = 5;
// divers
if (document.getElementById("o_group_misc").checked) {
if (document.getElementById("o_ordinals_no_exponant").checked) {
if (document.getElementById("o_ordinals_exponant").checked) {
[sText, n1] = this.formatText(sText, "ordinals_exponant");
} else {
[sText, n1] = this.formatText(sText, "ordinals_no_exponant");
}
document.getElementById('res_o_ordinals_no_exponant').textContent = n1;
}
if (document.getElementById("o_etc").checked) {
[sText, n1] = this.formatText(sText, "etc");
document.getElementById('res_o_etc').textContent = n1;
}
if (document.getElementById("o_missing_hyphens").checked) {
[sText, n1] = this.formatText(sText, "missing_hyphens");
document.getElementById('res_o_missing_hyphens').textContent = n1;
}
if (document.getElementById("o_ma_word").checked) {
[sText, n1] = this.formatText(sText, "ma_word");
if (document.getElementById("o_ma_1letter_lowercase").checked) {
[sText, n1] = this.formatText(sText, "ma_1letter_lowercase");
if (document.getElementById("o_ma_1letter_uppercase").checked) {
[sText, n1] = this.formatText(sText, "ma_1letter_uppercase");
}
}
document.getElementById('res_o_ma_word').textContent = n1;
}
document.getElementById("o_group_misc").checked = false;
this.switchGroup("o_group_misc");
}
document.getElementById('progressbar').value = document.getElementById('progressbar').max;
// end of processing
//window.setCursor("auto"); // restore pointer
const t1 = Date.now();
document.getElementById('time_res').textContent = this.getTimeRes((t1-t0)/1000);
}
catch (e) {
Cu.reportError(e);
}
return sText;
},
formatText: function (sText, sOptName) {
let nCount = 0;
try {
if (!tf.oReplTable.hasOwnProperty(sOptName)) {
echo("# Error. TF: there is no option “" + sOptName+ "”.");
return [sText, nCount];
}
for (let [zRgx, sRep] of tf.oReplTable[sOptName]) {
nCount += (sText.match(zRgx) || []).length;
sText = sText.replace(zRgx, sRep);
}
}
catch (e) {
Cu.reportError(e);
}
return [sText, nCount];
}
}
/* EVENTS */
window.addEventListener("click", function (xEvent) {
let xElem = xEvent.target;
if (xElem.id && xElem.id.startsWith("o_group_")) {
oTextFormatter.switchGroup(xElem.id);
oTextFormatter.resetProgressBar();
}
}, false);
window.addEventListener("load", function (xEvent) {
oDictIgniter.init();
oGrammarChecker.loadGC();
}, false);
window.addEventListener("compose-window-init", function (xEvent) {
oGrammarChecker.loadUI();
oGrammarChecker.closePanel();
oGrammarChecker.clearPreview();
oTextFormatter.init();
}, true);
|
Added gc_lang/fr/tb/content/overlay.xul version [839d7e1171].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 |
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://grammarchecker/content/overlay.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://grammarchecker/locale/overlay.dtd">
<overlay id="grammarchecker-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
<script type="application/x-javascript" src="overlay.js"/>
<script type="application/x-javascript" src="spellchecker.js"/>
<script type="application/x-javascript" src="editor.js"/>
<stringbundleset id="stringbundleset">
<stringbundle id="grammarchecker-strings" src="chrome://grammarchecker/locale/grammarchecker.properties"/>
</stringbundleset>
<commandset id="composerEditMenuItems" commandupdater="true"
events="focus"
oncommandupdate="goUpdateCommand('cmd_grammar')">
<command id="cmd_grammar" label="&grammarchecker.button.label;" oncommand="goDoCommand('cmd_grammar')"/>
</commandset>
<menupopup id="taskPopup">
<!-- menu tools -->
<menuitem id="grammarchecker-hello" command="cmd_grammar"/>
</menupopup>
<popup id="msgComposeContext">
<!-- contextual menu -->
<menuitem id="context-grammarchecker" command="cmd_grammar"
accesskey="&grammarchecker.accesskey;"/>
</popup>
<toolbarpalette id="MsgComposeToolbarPalette">
<!-- toolbar palette -->
<toolbarbutton id="grammarchecker-toolbar-button" command="cmd_grammar"
tooltiptext="&grammarchecker.tooltip;"
class="toolbarbutton-1 chromeclass-toolbar-additional" />
<toolbarbutton id="grammalecte-menu" type="menu-button" label="Grammalecte" class="toolbarbutton-1" tooltip="&grammarchecker.tooltip;" oncommand="">
<menupopup id="gl-toolbar-popup">
<menuitem id="gl-item-conj" class="menuitem-iconic" label="&grammalectemenu.textformatter;" oncommand="oTextFormatter.onOpenPanel(event);"/>
<menuitem id="gl-item-conj" class="menuitem-iconic" label="&grammalectemenu.conjugueur;" oncommand="oGrammarChecker.onOpenConjugueur(event);"/>
<menuseparator/>
<menuitem id="gl-item-analyze" class="menuitem-iconic" label="&grammalectemenu.start;" oncommand="oGrammarChecker.onParseText(event);"/>
<menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.gc_options;" onclick="oGrammarChecker.onOpenGCOptions(event);"/>
<menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.spell_options;" onclick="oGrammarChecker.onOpenSpellOptions(event);"/>
<menuseparator/>
<menuitem id="gl-item-about" class="menuitem-iconic" label="&grammalectemenu.about;" oncommand="oGrammarChecker.onAbout(event);"/>
</menupopup>
</toolbarbutton>
</toolbarpalette>
<vbox id="appcontent">
<!--
TEXT FORMATTER PANEL
-->
<splitter id="textformatter-splitter" state="collapsed" collapse="after"><grippy /></splitter>
<vbox id="textformatter-panel">
<dialogheader id="textformatter-title" title="&textformatter;" description="&automated_replacements;" width="800"/>
<hbox id="tf-columns">
<vbox class="column" width="400">
<!-- Supernumerary spaces -->
<groupbox>
<caption><checkbox id="o_group_ssp" class="option optiongroup" data-default="true" label="&tf_ssp;" /></caption>
<vbox id="group_ssp" class="groupblock">
<hbox class="blockopt underline">
<checkbox id="o_start_of_paragraph" class="option" data-default="true" label="&tf_start_of_paragraph;" />
<spacer flex="1" />
<label id="res_o_start_of_paragraph" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_end_of_paragraph" class="option" data-default="true" label="&tf_end_of_paragraph;" />
<spacer flex="1" />
<label id="res_o_end_of_paragraph" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_between_words" class="option" data-default="true" label="&tf_between_words;" />
<spacer flex="1" />
<label id="res_o_between_words" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_before_punctuation" class="option" data-default="true" label="&tf_before_punctuation;" />
<spacer flex="1" />
<label id="res_o_before_punctuation" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_within_parenthesis" class="option" data-default="true" label="&tf_within_parenthesis;" />
<spacer flex="1" />
<label id="res_o_within_parenthesis" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_within_square_brackets" class="option" data-default="true" label="&tf_within_square_brackets;" />
<spacer flex="1" />
<label id="res_o_within_square_brackets" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_within_quotation_marks" class="option" data-default="true" label="&tf_within_quotation_marks;" />
<spacer flex="1" />
<label id="res_o_within_quotation_marks" class="result" />
</hbox>
</vbox>
</groupbox>
<!-- Missing spaces -->
<groupbox>
<caption><checkbox id="o_group_space" class="option optiongroup" data-default="true" label="&tf_space;" /></caption>
<vbox id="group_space" class="groupblock">
<hbox class="blockopt underline">
<checkbox id="o_add_space_after_punctuation" class="option" data-default="true" label="&tf_add_space_after_punctuation;" />
<spacer flex="1" />
<label id="res_o_add_space_after_punctuation" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_add_space_around_hyphens" class="option" data-default="true" label="&tf_add_space_around_hyphens;" />
<spacer flex="1" />
<label id="res_o_add_space_around_hyphens" class="result" />
</hbox>
</vbox>
</groupbox>
<!-- Non breaking spaces -->
<groupbox>
<caption><checkbox id="o_group_nbsp" class="option optiongroup" data-default="true" label="&tf_nbsp;" /></caption>
<vbox id="group_nbsp" class="groupblock">
<hbox class="blockopt underline">
<checkbox id="o_nbsp_before_punctuation" class="option" data-default="true" label="&tf_nbsp_before_punctuation;" />
<!--<div class="secondoption">
<checkbox id="o_nnbsp_before_punctuation" class="option" />
<label="o_nnbsp_before_punctuation" class="opt_lbl smallw">fines<span>sauf avec “:”</span></label>
</div>-->
<spacer flex="1" />
<label id="res_o_nbsp_before_punctuation" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_nbsp_within_quotation_marks" class="option" data-default="true" label="&tf_nbsp_within_quotation_marks;" />
<!--<div class="secondoption">
<checkbox id="o_nnbsp_within_quotation_marks" class="option" />
<label="o_nnbsp_within_quotation_marks" class="opt_lbl smallw">fines</label>
</div>-->
<spacer flex="1" />
<label id="res_o_nbsp_within_quotation_marks" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_nbsp_before_symbol" class="option" data-default="true" label="&tf_nbsp_before_symbol;" />
<spacer flex="1" />
<label id="res_o_nbsp_before_symbol" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_nbsp_within_numbers" class="option" data-default="true" label="&tf_nbsp_within_numbers;" />
<!--<div class="secondoption">
<checkbox id="o_nnbsp_within_numbers" class="option" />
<label="o_nnbsp_within_numbers" class="opt_lbl smallw">fines</label>
</div>-->
<spacer flex="1" />
<label id="res_o_nbsp_within_numbers" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_nbsp_before_units" class="option" data-default="true" label="&tf_nbsp_before_units;" />
<spacer flex="1" />
<label id="res_o_nbsp_before_units" class="result" />
</hbox>
</vbox>
</groupbox>
<!-- Deletions -->
<groupbox>
<caption><checkbox id="o_group_delete" class="option optiongroup" data-default="true" label="&tf_delete;" /></caption>
<vbox id="group_delete" class="groupblock">
<hbox class="blockopt underline">
<checkbox id="o_erase_non_breaking_hyphens" class="option" data-default="true" label="&tf_erase_non_breaking_hyphens;" />
<spacer flex="1" />
<label id="res_o_erase_non_breaking_hyphens" class="result" />
</hbox>
</vbox>
</groupbox>
</vbox>
<vbox class="column" width="400">
<!-- Typographical signs -->
<groupbox>
<caption><checkbox id="o_group_typo" class="option optiongroup" data-default="true" label="&tf_typo;" /></caption>
<vbox id="group_typo" class="groupblock">
<hbox class="blockopt underline">
<checkbox id="o_ts_apostrophe" class="option" data-default="true" label="&tf_ts_apostrophe;" />
<spacer flex="1" />
<label id="res_o_ts_apostrophe" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ts_ellipsis" class="option" data-default="true" label="&tf_ts_ellipsis;" />
<spacer flex="1" />
<label id="res_o_ts_ellipsis" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ts_dash_middle" class="option" data-default="true" label="&tf_ts_dash_middle;" />
<spacer flex="1" />
<label id="res_o_ts_dash_middle" class="result" />
</hbox>
<hbox class="blockopt">
<spacer flex="1" />
<radiogroup orient="horizontal">
<radio id="o_ts_m_dash_middle" class="option" data-default="false" label="&tf_emdash;" />
<radio id="o_ts_n_dash_middle" class="option" data-default="true" label="&tf_endash;" selected="true" />
</radiogroup>
<spacer flex="3" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ts_dash_start" class="option" data-default="true" label="&tf_ts_dash_start;" />
<spacer flex="1" />
<label id="res_o_ts_dash_start" class="result" />
</hbox>
<hbox class="blockopt">
<spacer flex="1" />
<radiogroup orient="horizontal">
<radio id="o_ts_m_dash_start" class="option" data-default="true" label="&tf_emdash;" selected="true" />
<radio id="o_ts_n_dash_start" class="option" data-default="false" label="&tf_endash;" />
</radiogroup>
<spacer flex="3" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ts_quotation_marks" class="option" data-default="true" label="&tf_ts_quotation_marks;" />
<spacer flex="1" />
<label id="res_o_ts_quotation_marks" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ts_units" class="option" data-default="true" label="&tf_ts_units;" />
<spacer flex="1" />
<label id="res_o_ts_units" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ts_spell" class="option" data-default="true" label="&tf_ts_spell;" />
<spacer flex="1" />
<label id="res_o_ts_spell" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ts_ligature" class="option" data-default="false" label="&tf_ts_ligature;" />
<input type="radio" id="o_ts_ligature_do" name="liga" class="option" data-default="false" label="&tf_ts_ligature_do;" />
<input type="radio" id="o_ts_ligature_undo" name="liga" class="option" data-default="true" label="&tf_ts_ligature_undo;" />
<spacer flex="1" />
<label id="res_o_ts_ligature" class="result" />
</hbox>
<hbox class="blockopt">
<spacer flex="1" />
<checkbox id="o_ts_ligature_ff" class="option" data-default="true" label="ff" />
<checkbox id="o_ts_ligature_fi" class="option" data-default="true" label="fi" />
<checkbox id="o_ts_ligature_ffi" class="option" data-default="true" label="ffi" />
<checkbox id="o_ts_ligature_fl" class="option" data-default="true" label="fl" />
<checkbox id="o_ts_ligature_ffl" class="option" data-default="true" label="ffl" />
<checkbox id="o_ts_ligature_ft" class="option" data-default="true" label="ft" />
<checkbox id="o_ts_ligature_st" class="option" data-default="false" label="st" />
<spacer flex="2" />
</hbox>
</vbox>
</groupbox>
<!-- Misc -->
<groupbox>
<caption><checkbox id="o_group_misc" class="option optiongroup" data-default="true" label="&tf_misc;" /></caption>
<vbox id="group_misc" class="groupblock">
<hbox class="blockopt underline">
<checkbox id="o_ordinals_no_exponant" class="option" data-default="true" label="&tf_ordinals_no_exponant;" />
<checkbox id="o_ordinals_exponant" class="option" data-default="true" label="&tf_ordinals_exponant;" />
<spacer flex="1" />
<label id="res_o_ordinals_no_exponant" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_etc" class="option" data-default="true" label="&tf_etc;" />
<spacer flex="1" />
<label id="res_o_etc" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_missing_hyphens" class="option" data-default="true" label="&tf_missing_hyphens;" />
<spacer flex="1" />
<label id="res_o_missing_hyphens" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_ma_word" class="option" data-default="true" label="&tf_ma_word;" />
<spacer flex="1" />
<label id="res_o_ma_word" class="result" />
</hbox>
<hbox class="blockopt">
<spacer flex="1" />
<checkbox id="o_ma_1letter_lowercase" class="option" label="&tf_ma_1letter_lowercase;" />
<checkbox id="o_ma_1letter_uppercase" class="option" label="&tf_ma_1letter_uppercase;" />
<spacer flex="3" />
</hbox>
</vbox>
</groupbox>
<!-- Restructuration -->
<!--<groupbox>
<caption><checkbox id="o_group_struct" class="option optiongroup" data-default="false" label="&tf_struct;" /></caption>
<vbox id="group_struct" class="groupblock">
<hbox class="blockopt underline">
<checkbox id="o_remove_hyphens_at_end_of_paragraphs" class="option" data-default="false" label="&tf_remove_hyphens_at_end_of_paragraphs;" />
<spacer flex="1" />
<label id="res_o_remove_hyphens_at_end_of_paragraphs" class="result" />
</hbox>
<hbox class="blockopt underline">
<checkbox id="o_merge_contiguous_paragraphs" class="option" data-default="false" label="&tf_merge_contiguous_paragraphs;" />
<spacer flex="1" />
<label id="res_o_merge_contiguous_paragraphs" class="result" />
</hbox>
</vbox>
</groupbox>-->
<description id="textformatter-infomsg">&tf_infomsg;</description>
</vbox>
</hbox>
<hbox id="textformatter-commands">
<button id="reset" label="&tf.button.default;" oncommand="oTextFormatter.onReset(event);" />
<progressmeter id="progressbar" mode="determined" width="470" />
<label id="time_res" width="50"></label>
<button id="apply" label="&tf.button.apply;" oncommand="oTextFormatter.onApply(event);" />
<button id="close" label="&tf.button.close;" oncommand="oTextFormatter.onClosePanel(event);" />
</hbox>
</vbox>
<!--
GRAMMAR CHECKING PANEL
-->
<splitter id="grammarchecker-splitter" state="collapsed" collapse="after"><grippy /></splitter>
<vbox id="grammarchecker-panel">
<dialogheader id="grammalecte-title" title="Grammalecte" description="&detected_mistakes;"/>
<div id="grammalecte-errors"/>
<hbox id="grammalecte-infobox">
<label id="grammalecte-info" />
<spacer flex="1" />
<label id="closebutton" value="Fermer" onclick="oGrammarChecker.onClosePanel(event);" />
</hbox>
</vbox>
</vbox>
</overlay>
|
Added gc_lang/fr/tb/content/spell_options.css version [2179034562].
> > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* CSS */
#grouptitle {
font-size: 16px;
font-weight: bold;
color: hsl(0, 50%, 50%);
}
.option {
font-size: 16px;
font-weight: bold;
color: hsl(210, 50%, 50%);
}
.dicdescr {
margin-left: 27px;
}
|
Added gc_lang/fr/tb/content/spell_options.js version [9ebffece09].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// JavaScript
"use strict";
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
function echo (...args) {
Services.console.logStringMessage(args.join(" -- ") + "\n");
}
var oDialogControl = {
load: function () {
try {
document.getElementById('fr-FR-modern').checked = prefs.getBoolPref('bDictModern');
document.getElementById('fr-FR-classic').checked = prefs.getBoolPref('bDictClassic');
document.getElementById('fr-FR-reform').checked = prefs.getBoolPref('bDictReform');
document.getElementById('fr-FR-classic-reform').checked = prefs.getBoolPref('bDictClassicReform');
document.getElementById('grammalecte-spelloptions-window').centerWindowOnScreen();
}
catch (e) {
Cu.reportError(e);
}
},
setDictionaries: function () {
oSpellControl.init();
this._setDictionary('fr-FR-modern', 'bDictModern');
this._setDictionary('fr-FR-classic', 'bDictClassic');
this._setDictionary('fr-FR-reform', 'bDictReform');
this._setDictionary('fr-FR-classic-reform', 'bDictClassicReform');
},
_setDictionary: function (sDicName, sOptName) {
try {
let bActivate = document.getElementById(sDicName).checked;
oSpellControl.setExtensionDictFolder(sDicName, bActivate);
prefs.setBoolPref(sOptName, bActivate);
}
catch (e) {
Cu.reportError(e);
}
}
};
|
Added gc_lang/fr/tb/content/spell_options.xul version [5453a7e2cc].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://grammarchecker/content/spell_options.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/spell_options.dtd">
<dialog
id="grammalecte-spelloptions-window"
title="&window.title;"
orient="vertical"
buttons="accept,cancel"
ondialogaccept="oDialogControl.setDictionaries();"
ondialogcancel="return;"
width="400"
height="660"
onload="oDialogControl.load();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
<dialogheader id="grammalecte-title" title="&dialogheader.label;" description=""/>
<groupbox id="dictchoice">
<caption id="grouptitle" label="&grouptitle;" />
<description id="warning">&warning;</description>
<checkbox id="fr-FR-modern" class="option" label="&option.modern.label;" />
<description class="dicdescr">&option.modern.descr;</description>
<checkbox id="fr-FR-classic" class="option" label="&option.classic.label;" />
<description class="dicdescr">&option.classic.descr;</description>
<checkbox id="fr-FR-reform" class="option" label="&option.reform.label;" />
<description class="dicdescr">&option.reform.descr;</description>
<checkbox id="fr-FR-classic-reform" class="option" label="&option.allvar.label;" />
<description class="dicdescr">&option.allvar.descr;</description>
</groupbox>
<script type="application/x-javascript" src="spell_options.js"/>
<script type="application/x-javascript" src="spellchecker.js"/>
</dialog>
|
Added gc_lang/fr/tb/content/spellchecker.js version [3be1484aff].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
// JavaScript
/*
Hunspell wrapper
XPCOM obsolete (?), but there is nothing else...
Overly complicated and weird. To throw away ASAP if possible.
And you can’t access to this from a PromiseWorker (it sucks).
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozISpellCheckingEngine
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Using_spell_checking_in_XUL
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile
https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm
*/
"use strict";
/*
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {});
*/
const FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils;
const AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm").AddonManager;
/*
const parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
const persodict = Cc["@mozilla.org/spellchecker/personaldictionary;1"].getService(Ci.mozIPersonalDictionary);
*/
const system = require("sdk/system");
var oSpellControl = {
xSCEngine: null,
init: function () {
if (this.xSCEngine === null) {
try {
let sSpellchecker = "@mozilla.org/spellchecker/myspell;1";
if ("@mozilla.org/spellchecker/hunspell;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/hunspell;1";
}
if ("@mozilla.org/spellchecker/engine;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/engine;1";
}
this.xSCEngine = Cc[sSpellchecker].getService(Ci.mozISpellCheckingEngine);
}
catch (e) {
echo("Can’t initiate the spellchecker.");
Cu.reportError(e);
}
}
},
getDictionariesList: function () {
this.init();
try {
let l = {};
let c = {};
this.xSCEngine.getDictionaryList(l, c);
return l.value;
}
catch (e) {
Cu.reportError(e);
return [];
}
},
setDictionary: function (sLocale) {
if (this.getDictionariesList().includes(sLocale)) {
try {
this.xSCEngine.dictionary = sLocale; // en-US, fr, etc.
return true;
}
catch (e) {
Cu.reportError(e);
return false;
}
} else {
echo("Warning. No dictionary for locale: " + sLocale);
echo("Existing dictionaries: " + this.getDictionariesList().join(" | "));
}
return false;
},
check: function (sWord) {
// todo: check in personal dict?
try {
return this.xSCEngine.check(sWord);
}
catch (e) {
Cu.reportError(e);
return false;
}
},
suggest: function (sWord) {
try {
let lSugg = {};
this.xSCEngine.suggest(sWord, lSugg, {});
return lSugg.value;
// lSugg.value is a JavaScript Array of strings
}
catch (e) {
Cu.reportError(e);
return ['#Erreur.'];
}
},
addDirectory: function (sFolder) {
try {
let xNsiFolder = new FileUtils.File(sFolder);
this.xSCEngine.addDirectory(xNsiFolder);
}
catch (e) {
echo("Unable to add directory: " + sFolder);
Cu.reportError(e);
}
},
removeDirectory: function (sFolder) {
// does not work but no exception raised (bug?)
try {
let xNsiFolder = new FileUtils.File(sFolder);
this.xSCEngine.removeDirectory(xNsiFolder);
}
catch (e) {
echo("Unable to remove directory: " + sFolder);
Cu.reportError(e);
}
},
setExtensionDictFolder: function (sDictName, bActivate) {
try {
let that = this;
let sPath = "/content/dictionaries/" + sDictName;
AddonManager.getAddonByID("French-GC-TB@grammalecte.net", function (addon) {
let xURI = addon.getResourceURI(sPath);
//console.log("> " + xURI.path);
let sFolder = xURI.path;
if (system.platform === "winnt") {
sFolder = sFolder.slice(1).replace(/\//g, "\\\\");
}
//console.log("> " + sFolder);
if (bActivate) {
that.addDirectory(sFolder);
} else {
that.removeDirectory(sFolder);
}
});
}
catch (e) {
echo("Unable to add extension folder");
Cu.reportError(e);
}
}
};
|
Added gc_lang/fr/tb/defaults/preferences/grammarchecker.js version [cf9e139e0c].
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 |
pref("extensions.grammarchecker.urlpref1", "http://localhost:8081");
pref("extensions.grammarchecker.urlpref2", "https://languagetool.org:8081/");
pref("extensions.grammarchecker.langpref", "en");
pref("extensions.grammarchecker.mothertongue", "");
pref("extensions.grammarchecker.sGCOptions", "");
pref("extensions.grammarchecker.sTFOptions", "");
pref("extensions.grammarchecker.bDictModern", false);
pref("extensions.grammarchecker.bDictClassic", true);
pref("extensions.grammarchecker.bDictReform", false);
pref("extensions.grammarchecker.bDictClassicReform", false);
|
Added gc_lang/fr/tb/icon.png version [9598be5e3c].
cannot compute difference between binary files
Added gc_lang/fr/tb/install.rdf version [5bcaa105f6].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="UTF-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>${tb_identifier}</em:id>
<em:name>${tb_name}</em:name>
<em:type>2</em:type>
<em:version>${version}</em:version>
<em:creator>${author}</em:creator>
<em:description>${description}</em:description>
<em:homepageURL>${link}</em:homepageURL>
<!--<em:optionsURL>chrome://grammarchecker/content/options.xul</em:optionsURL>-->
<em:unpack>true</em:unpack>
<em:targetApplication>
<Description>
<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> <!-- thunderbird -->
<em:minVersion>45.8</em:minVersion>
<em:maxVersion>49.0</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
|
Added gc_lang/fr/tb/locale/en/about.dtd version [586b114cab].
> > > > > > > | 1 2 3 4 5 6 7 | <!ENTITY windowtitle "About Grammalecte"> <!ENTITY description1 "French"> <!ENTITY description2 "Grammar Checker"> <!ENTITY version "Version:"> <!ENTITY license "License:"> <!ENTITY thanks "Thanks to"> <!ENTITY contrib "and those who supported us…"> |
Added gc_lang/fr/tb/locale/en/gc_options.dtd version [6feaf76b9e].
> > > > | 1 2 3 4 |
<!ENTITY window.title "Grammalecte · Grammar options">
<!ENTITY defaultbutton.label "Default">
<!ENTITY dialogheader.label "Grammar options">
${gc_options_labels_en}
|
Added gc_lang/fr/tb/locale/en/grammarchecker.properties version [ef0da976ea].
> > > | 1 2 3 | processingMessage=Parsing in progress… errorMessage=Error… noErrorMessage=No error detected. |
Added gc_lang/fr/tb/locale/en/options.dtd version [b6958607cd].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY prefwindow.title "Grammalecte · Options"> <!ENTITY panel.title "Grammar Checker preferences"> <!ENTITY panel.description "Options are available in the menu Grammalecte in composing windows."> <!ENTITY urlpref1.label "Primary LanguageTool server:"> <!ENTITY urlpref1.accesskey "P"> <!ENTITY urlpref2.label "Secondary LanguageTool server:"> <!ENTITY urlpref2.accesskey "S"> <!ENTITY langpref.label "Default language:"> <!ENTITY langpref.accesskey "L"> <!ENTITY mothertongue.label "Mother tongue:"> <!ENTITY mothertongue.accesskey "M"> <!ENTITY gc_options.label "Grammar options"> <!ENTITY gc_options.accesskey "G"> |
Added gc_lang/fr/tb/locale/en/overlay.dtd version [eb2ccc3642].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <!ENTITY grammarchecker.button.label "Grammar"> <!ENTITY grammarchecker.accesskey "G"> <!ENTITY grammarchecker.tooltip "Grammar checking"> <!ENTITY grammalectemenu.textformatter "Text formatter…"> <!ENTITY grammalectemenu.conjugueur "Conjugation tool…"> <!ENTITY grammalectemenu.start "Proofread the text…"> <!ENTITY grammalectemenu.spell_options "Spelling options…"> <!ENTITY grammalectemenu.gc_options "Grammar options…"> <!ENTITY grammalectemenu.about "About Grammalecte…"> <!ENTITY detected_mistakes "Detected mistakes"> <!ENTITY textformatter "Text Formatter"> <!ENTITY automated_replacements "Automated replacements"> <!ENTITY tf.button.default "Default"> <!ENTITY tf.button.apply "Apply"> <!ENTITY tf.button.close "Close"> <!ENTITY tf_title "Text Formatter"> <!ENTITY tf_ssp "Supernumerary spaces"> <!ENTITY tf_start_of_paragraph "At the beginning of paragraph"> <!ENTITY tf_between_words "Between words"> <!ENTITY tf_end_of_paragraph "At the end of paragraph"> <!ENTITY tf_before_punctuation "Before dots (.), commas (,)"> <!ENTITY tf_within_parenthesis "Within parenthesis"> <!ENTITY tf_within_square_brackets "Within square brackets"> <!ENTITY tf_within_quotation_marks "Within “ and ”"> <!ENTITY tf_space "Missing spaces"> <!ENTITY tf_add_space_after_punctuation "After , ; : ? ! . …"> <!ENTITY tf_add_space_around_hyphens "Surrounding dashes"> <!ENTITY tf_nbsp "Non breaking spaces"> <!ENTITY tf_nbsp_before_punctuation "Before : ; ? and !"> <!ENTITY tf_nbsp_within_quotation_marks "With quoting marks « and »"> <!ENTITY tf_nbsp_before_symbol "Before % ‰ € $ £ ¥ ˚C"> <!ENTITY tf_nbsp_within_numbers "Within numbers"> <!ENTITY tf_nbsp_before_units "Before units of measurement"> <!ENTITY tf_delete "Deletions"> <!ENTITY tf_erase_non_breaking_hyphens "Soft hyphens"> <!ENTITY tf_typo "Typographical signs"> <!ENTITY tf_ts_apostrophe "Apostrophe (’)"> <!ENTITY tf_ts_ellipsis "Ellipsis (…)"> <!ENTITY tf_ts_dash_middle "Dashes:"> <!ENTITY tf_ts_dash_start "Dashes at beginning of paragraph:"> <!ENTITY tf_emdash "em dash (—)"> <!ENTITY tf_endash "en dash (–)"> <!ENTITY tf_ts_quotation_marks "Change quotation marks (" and ')"> <!ENTITY tf_ts_units "Interpuncts in units (N·m, Ω·m…)"> <!ENTITY tf_ts_spell "Ligatures (cœur…) and diacritics (ça, État…)"> <!ENTITY tf_ts_ligature "Ligatures"> <!ENTITY tf_ts_ligature_do "Set"> <!ENTITY tf_ts_ligature_undo "Unset"> <!ENTITY tf_misc "Miscellaneous"> <!ENTITY tf_ordinals_no_exponant "Ordinals (15e, XXIe…)"> <!ENTITY tf_ordinals_exponant "e → ᵉ"> <!ENTITY tf_etc "Et cætera, etc."> <!ENTITY tf_missing_hyphens "Missing hyphens"> <!ENTITY tf_ma_word "Missing apostrophes"> <!ENTITY tf_ma_1letter_lowercase "single letters (j’ n’ m’ t’ s’ c’ d’ l’)"> <!ENTITY tf_ma_1letter_uppercase "Cap."> <!ENTITY tf_struct "Restructuration [!]"> <!ENTITY tf_remove_hyphens_at_end_of_paragraphs "Remove syllabification hyphens at EOL/EOP"> <!ENTITY tf_merge_contiguous_paragraphs "Merge contiguous paragraphs [!]"> <!ENTITY tf_apply "Apply"> <!ENTITY tf_default "Default"> <!ENTITY tf_close "Close"> <!ENTITY tf_infomsg "The text formatter is a tool which automates correction of typographical errors. Use this tool with caution. Check your text after use. If you write in HTML mode, the use of this module is at your own risk."> |
Added gc_lang/fr/tb/locale/en/spell_options.dtd version [fc660cb649].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY window.title "Grammalecte · Spelling options"> <!ENTITY dialogheader.label "Spelling options"> <!ENTITY grouptitle "Select one or several dictionaries"> <!ENTITY warning "Select dictionaries you want to see in textareas list. Selected dictionaries are added instantly. Whereas unselected dictionnaries will be removed only at Thunderbird’s restart."> <!ENTITY option.modern.label "“Modern”"> <!ENTITY option.modern.descr "This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word."> <!ENTITY option.classic.label "“Classic” (recommanded)"> <!ENTITY option.classic.descr "This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language."> <!ENTITY option.reform.label "“Reform 1990”"> <!ENTITY option.reform.descr "With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erroneous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary."> <!ENTITY option.allvar.label "“All variants”"> <!ENTITY option.allvar.descr "This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who don’t know very well the French language."> |
Added gc_lang/fr/tb/locale/fr/about.dtd version [4705e2f2e0].
> > > > > > > | 1 2 3 4 5 6 7 | <!ENTITY windowtitle "À propos de Grammalecte"> <!ENTITY description1 "Correcteur grammatical"> <!ENTITY description2 "pour le français"> <!ENTITY version "Version :"> <!ENTITY license "Licence :"> <!ENTITY thanks "Avec le soutien de"> <!ENTITY contrib "et de nombreux contributeurs…"> |
Added gc_lang/fr/tb/locale/fr/gc_options.dtd version [aa14ca951b].
> > > > | 1 2 3 4 |
<!ENTITY window.title "Grammalecte · Options grammaticales">
<!ENTITY defaultbutton.label "Par défaut">
<!ENTITY dialogheader.label "Options grammaticales">
${gc_options_labels_fr}
|
Added gc_lang/fr/tb/locale/fr/grammarchecker.properties version [e42689d6bb].
> > > | 1 2 3 | processingMessage=Analyse en cours errorMessage=Erreur… noErrorMessage=Aucune erreur détectée. |
Added gc_lang/fr/tb/locale/fr/options.dtd version [e61e5be36a].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY prefwindow.title "Grammalecte · Options"> <!ENTITY panel.title "Préférences de la correction grammaticale"> <!ENTITY panel.description "Les options sont disponibles dans le menu Grammalecte des fenêtres de rédaction."> <!ENTITY urlpref1.label "Serveur primaire:"> <!ENTITY urlpref1.accesskey "P"> <!ENTITY urlpref2.label "Serveur secondaire:"> <!ENTITY urlpref2.accesskey "S"> <!ENTITY langpref.label "Langue par défaut:"> <!ENTITY langpref.accesskey "L"> <!ENTITY mothertongue.label "Langue maternelle:"> <!ENTITY mothertongue.accesskey "M"> <!ENTITY gc_options.label "Options grammaticales"> <!ENTITY gc_options.accesskey "G"> |
Added gc_lang/fr/tb/locale/fr/overlay.dtd version [803c279517].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <!ENTITY grammarchecker.button.label "Grammaire"> <!ENTITY grammarchecker.accesskey "G"> <!ENTITY grammarchecker.tooltip "Correction grammaticale"> <!ENTITY grammalectemenu.textformatter "Formateur de texte…"> <!ENTITY grammalectemenu.conjugueur "Conjugueur…"> <!ENTITY grammalectemenu.start "Analyser le texte…"> <!ENTITY grammalectemenu.spell_options "Options orthographiques…"> <!ENTITY grammalectemenu.gc_options "Options grammaticales…"> <!ENTITY grammalectemenu.about "À propos de Grammalecte…"> <!ENTITY detected_mistakes "Erreurs détectées"> <!ENTITY textformatter "Formateur de texte"> <!ENTITY automated_replacements "Remplacements automatisés"> <!ENTITY tf.button.default "Par défaut"> <!ENTITY tf.button.apply "Appliquer"> <!ENTITY tf.button.close "Fermer"> <!ENTITY tf_title "Formateur de texte"> <!ENTITY tf_ssp "Espaces surnuméraires"> <!ENTITY tf_start_of_paragraph "En début de paragraphe"> <!ENTITY tf_between_words "Entre les mots"> <!ENTITY tf_end_of_paragraph "En fin de paragraphe"> <!ENTITY tf_before_punctuation "Avant les points (.), les virgules (,)"> <!ENTITY tf_within_parenthesis "À l’intérieur des parenthèses"> <!ENTITY tf_within_square_brackets "À l’intérieur des crochets"> <!ENTITY tf_within_quotation_marks "À l’intérieur des guillemets “ et ”"> <!ENTITY tf_space "Espaces manquants"> <!ENTITY tf_add_space_after_punctuation "Après , ; : ? ! . …"> <!ENTITY tf_add_space_around_hyphens "Autour des tirets d’incise"> <!ENTITY tf_nbsp "Espaces insécables"> <!ENTITY tf_nbsp_before_punctuation "Avant : ; ? et !"> <!ENTITY tf_nbsp_within_quotation_marks "Avec les guillemets « et »"> <!ENTITY tf_nbsp_before_symbol "Avant % ‰ € $ £ ¥ ˚C"> <!ENTITY tf_nbsp_within_numbers "À l’intérieur des nombres"> <!ENTITY tf_nbsp_before_units "Avant les unités de mesure"> <!ENTITY tf_delete "Suppressions"> <!ENTITY tf_erase_non_breaking_hyphens "Tirets conditionnels"> <!ENTITY tf_typo "Signes typographiques"> <!ENTITY tf_ts_apostrophe "Apostrophe (’)"> <!ENTITY tf_ts_ellipsis "Points de suspension (…)"> <!ENTITY tf_ts_dash_middle "Tirets d’incise :"> <!ENTITY tf_ts_dash_start "Tirets en début de paragraphe :"> <!ENTITY tf_emdash "cadratin (—)"> <!ENTITY tf_endash "demi-cadratin (–)"> <!ENTITY tf_ts_quotation_marks "Modifier les guillemets droits (" et ')"> <!ENTITY tf_ts_units "Points médians des unités (N·m, Ω·m…)"> <!ENTITY tf_ts_spell "Ligatures (cœur…) et diacritiques (ça, État…)"> <!ENTITY tf_ts_ligature "Ligatures"> <!ENTITY tf_ts_ligature_do "Faire"> <!ENTITY tf_ts_ligature_undo "Défaire"> <!ENTITY tf_misc "Divers"> <!ENTITY tf_ordinals_no_exponant "Ordinaux (15e, XXIe…)"> <!ENTITY tf_ordinals_exponant "e → ᵉ"> <!ENTITY tf_etc "Et cætera, etc."> <!ENTITY tf_missing_hyphens "Traits d’union manquants"> <!ENTITY tf_ma_word "Apostrophes manquantes"> <!ENTITY tf_ma_1letter_lowercase "lettres isolées (j’ n’ m’ t’ s’ c’ d’ l’)"> <!ENTITY tf_ma_1letter_uppercase "Maj."> <!ENTITY tf_struct "Restructuration [!]"> <!ENTITY tf_remove_hyphens_at_end_of_paragraphs "Enlever césures en fin de ligne/paragraphe [!]"> <!ENTITY tf_merge_contiguous_paragraphs "Fusionner les paragraphes contigus [!]"> <!ENTITY tf_apply "Appliquer"> <!ENTITY tf_default "Par défaut"> <!ENTITY tf_close "Fermer"> <!ENTITY tf_infomsg "Le formateur de texte est un outil qui automatise la correction d’erreurs typographiques. Utilisez l’outil avec prudence. Vérifiez votre texte après emploi. Si vous écrivez en mode HTML, l’emploi de ce module est à vos risques et périls."> |
Added gc_lang/fr/tb/locale/fr/spell_options.dtd version [43af7ee338].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY window.title "Grammalecte · Options orthographiques"> <!ENTITY dialogheader.label "Options orthographiques"> <!ENTITY grouptitle "Choisissez un ou plusieurs dictionnaires"> <!ENTITY warning "Cochez les dictionnaires que vous voulez voir apparaître dans la liste des dictionnaires utilisables. L’ajout des dictionnaires se fait instantanément. En revanche, les dictionnaires ôtés ne disparaîtront qu’au redémarrage de Thunderbird."> <!ENTITY option.modern.label "“Moderne”"> <!ENTITY option.modern.descr "Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot."> <!ENTITY option.classic.label "“Classique” (recommandé)"> <!ENTITY option.classic.descr "Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle."> <!ENTITY option.reform.label "“Réforme 1990”"> <!ENTITY option.reform.descr "Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”."> <!ENTITY option.allvar.label "“Toutes variantes”"> <!ENTITY option.allvar.descr "Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française."> |
Added gc_lang/fr/tb/skin/LaMouette_small.png version [6778e9b924].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck.png version [9598be5e3c].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck_disabled.png version [f900d73926].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck_small.png version [dcb1bf8ae0].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck_small_disabled.png version [502cc08b3e].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/logo100.png version [137b3e197f].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/logo120_text.png version [c438dd0680].
cannot compute difference between binary files
Added gc_lang/fr/xpi/README.txt version [2d1b4f42d1].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | = GRAMMALECTE = French grammar checker By Olivier R. (olivier /at/ grammalecte /dot/ net) Website: http://www.dicollecte.org/grammalecte License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html Grammalecte for Firefox is a derivative tool born from the version for LibreOffice written in Python. Written in JavaScript ES6/ES7. |
Added gc_lang/fr/xpi/chrome.manifest version [84f3dd0c20].
> > > | 1 2 3 | # https://developer.mozilla.org/en-US/docs/Chrome_Registration content promiseworker ./ resource grammalecte ./grammalecte/ |
Added gc_lang/fr/xpi/data/about_panel.css version [0df7e9268c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
/* panel.css */
@import url("common.css");
header {
background-color: hsl(0, 0%, 96%);
border-bottom: 1px solid hsl(0, 0%, 90%);
padding: 10px 0;
font-family: "Verdana", sans-serif;
color: hsl(0, 0%, 0%);
}
body {
background-color: hsl(0, 0%, 86%);
font-family: "Trebuchet MS", sans-serif;
overflow-x: hidden;
color: hsl(0, 0%, 0%);
}
h1 {
font-size: 20px;
color: hsl(210, 30%, 40%);
font-family: "Trebuchet MS", sans-serif;
}
p.underline {
padding: 5px 0;
background-color: hsl(210, 5%, 92%);
margin-bottom: 10px;
color: hsl(0, 0%, 0%);
}
.key {
width: 150px;
letter-spacing: -0.3em;
}
#links {
margin: 20px 0 10px 0;
}
a.link {
color: hsl(210, 30%, 40%);
text-decoration: none;
}
a.link:hover {
color: hsl(210, 30%, 30%);
text-shadow: 0 0 3px hsl(210, 30%, 40%);
}
#dictionaries_info {
margin: 10px 0;
padding: 10px;
border-radius: 3px;
background-color: hsl(0, 50%, 40%);
color: hsl(0, 10%, 96%);
}
.dict_section {
padding: 10px;
margin-bottom: 10px;
border-radius: 5px;
}
.dict_section label {
font-size: 16px;
line-height: 20px;
color: hsl(210, 20%, 50%);
font-weight: bold;
}
.dict_description {
padding: 5px 0 0 20px;
color: hsl(0, 0%, 0%);
}
#help_section {
background-color: hsl(0, 0%, 98%);
padding: 10px;
}
#spelling_section {
display: none;
background-color: hsl(0, 0%, 98%);
padding: 10px;
}
#grammar_section {
display: none;
background-color: hsl(0, 0%, 98%);
padding: 10px;
}
.opt_subsection {
margin: 5px 0;
padding: 10px;
background-color: hsl(0, 0%, 92%);
border-radius: 3px;
}
.opt_subsection h2 {
color: hsl(210, 30%, 50%);
margin-bottom: 3px;
font-size: 16px;
font-family: "Trebuchet MS", sans-serif;
}
.opt_subsection p {
padding: 2px 3px;
display:flex;
align-items:center;
}
.opt_subsection p:hover {
background-color: hsl(210, 10%, 86%);
border-radius: 2px;
}
.opt_subsection label {
flex: 1;
}
.opt_subsection input {
order: 1
}
#grammar_section a {
padding: 5px 10px;
background-color: hsl(210, 40%, 50%);
color: hsl(0, 0%, 96%);
text-decoration: none;
border-radius: 3px;
font-size: 16px;
}
#grammar_section a:hover {
background-color: hsl(210, 50%, 40%);
color: color: hsl(0, 10%, 98%);
}
a.bluebutton {
padding: 2px 5px;
background-color: hsl(210, 40%, 50%);
color: hsl(210, 0%, 96%);
text-decoration: none;
border-radius: 3px;
}
a.bluebutton:hover {
background-color: hsl(210, 50%, 55%);
color: hsl(210, 0%, 100%);
}
a.redbutton {
padding: 2px 5px;
background-color: hsl(0, 40%, 50%);
color: hsl(0, 0%, 96%);
text-decoration: none;
border-radius: 3px;
}
a.redbutton:hover {
background-color: hsl(0, 50%, 55%);
color: hsl(0, 0%, 100%);
}
a.greenbutton {
padding: 2px 5px;
background-color: hsl(150, 40%, 40%);
color: hsl(150, 0%, 96%);
text-decoration: none;
border-radius: 3px;
}
a.greenbutton:hover {
background-color: hsl(150, 50%, 45%);
color: hsl(0, 0%, 100%);
}
a.simplelink {
color: hsl(180, 50%, 20%);
text-decoration: none;
text-shadow: 0 0 1px hsl(180, 20%, 50%);
}
a.simplelink:hover {
color: hsl(180, 80%, 20%);
text-shadow: 0 0 1px hsl(180, 50%, 10%);
}
footer#promo {
background-color: hsl(0, 0%, 92%);
border-top: 1px solid hsl(0, 0%, 86%);
padding: 20px;
}
footer#thanks {
background-color: hsl(0, 0%, 86%);
border-top: 1px solid hsl(0, 0%, 80%);
padding: 15px 15px;
}
footer#thanks p {
margin: 3px 0;
font-size: 14px;
}
|
Added gc_lang/fr/xpi/data/about_panel.html version [c66bde17c1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="about_panel.css" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body class="panel">
<header>
<p class="center"><img src="img/logo120_text.png" alt="Grammalecte"></p>
<p class="underline center">
<b>Version ${version}</b>
</p>
<p id="links" class="center">
<a id="spelling" class="bluebutton" href="#" onclick="return false;" data-l10n-id="spelling"></a> ·
<a id="grammar" class="bluebutton" href="#" onclick="return false;" data-l10n-id="grammar"></a> ·
<a id="conjugueur" class="redbutton" href="#" onclick="return false;" data-l10n-id="conjugueur"></a>
</p>
</header>
<div id="help_section">
<p data-l10n-id="useContextMenu"></p>
<p class="right"><img src="img/contextmenu.png" title="menu contextuel sur zone de texte" /></p>
<p><b data-l10n-id="shortcuts"></b></p>
<p><span class="key" data-l10n-id="keyTF"></span> ❱ <span data-l10n-id="keyLabelTF"></span></p>
<p><span class="key" data-l10n-id="keyGC"></span> ❱ <span data-l10n-id="keyLabelGC"></span></p>
<p><span class="key" data-l10n-id="keyCJ"></span> ❱ <span data-l10n-id="keyLabelCJ"></span></p>
</div>
<div id="grammar_section">
<h1 class="center" data-l10n-id="grammar_options"></h1>
${optionsHTML}
<p class="center" style="margin: 10px 0;"><a id="default_options" href="#" onclick="return false;" data-l10n-id="default_options"></a></p>
</div>
<div id="spelling_section">
<h1 class="center" data-l10n-id="spelling_options"></h1>
<p id="dictionaries_info" data-l10n-id="dictionaries_info"></p>
<div class="dict_section" id="fr-FR-modern_box">
<p><input type="checkbox" id="fr-FR-modern" /> <label for="fr-FR-modern" data-l10n-id="dict_modern"></label></p>
<p class="dict_description" data-l10n-id="dict_modern_descr"></p>
</div>
<div class="dict_section" id="fr-FR-classic_box">
<p><input type="checkbox" id="fr-FR-classic" /> <label for="fr-FR-classic" data-l10n-id="dict_classic"></label></p>
<p class="dict_description" data-l10n-id="dict_classic_descr"></p>
</div>
<div class="dict_section" id="fr-FR-reform_box">
<p><input type="checkbox" id="fr-FR-reform" /> <label for="fr-FR-reform" data-l10n-id="dict_reform"></label></p>
<p class="dict_description" data-l10n-id="dict_reform_descr"></p>
</div>
<div class="dict_section" id="fr-FR-classic-reform_box">
<p><input type="checkbox" id="fr-FR-classic-reform" /> <label for="fr-FR-classic-reform" data-l10n-id="dict_classic_reform"></label></p>
<p class="dict_description" data-l10n-id="dict_classic_reform_descr"></p>
</div>
</div>
<footer id="promo">
<p class="center">
<span data-l10n-id="general_info"></span> ·
<a id="website" class="simplelink" href="http://www.dicollecte.org/grammalecte/" onclick="return false;" data-l10n-id="website"></a>
</p>
</footer>
<footer id="thanks">
<p class="center" data-l10n-id="thanks1"></p>
<p class="center">
<a id="mainsponsor" href="http://www.lamouette.org/" onclick="return false;">
<img src="img/LaMouette.png" style="border: 1px solid #C0C0C0" />
</a>
</p>
<p class="center">
<a id="othersponsors" class="link" href="http://www.dicollecte.org/grammalecte/soutiens.php" onclick="return false;">
<b data-l10n-id="thanks2"></b>
</a>
</p>
</footer>
</body>
</html>
|
Added gc_lang/fr/xpi/data/about_panel.js version [f7f7c93567].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
// JavaScript
let nDefaultPanelHeight = 0;
/*
Events
*/
self.port.on("sendGrammarOptionsToPanel", function (sGCOptions) {
setGrammarOptionsOnPanel(JSON.parse(sGCOptions));
});
self.port.on("sendSpellingOptionsToPanel", function (bDicMod, bDicClas, bDicRef, bDicAll) {
setPanelDictOption("fr-FR-modern", bDicMod);
setPanelDictOption("fr-FR-classic", bDicClas);
setPanelDictOption("fr-FR-reform", bDicRef);
setPanelDictOption("fr-FR-classic-reform", bDicAll);
});
self.port.on("showHelp", function () {
showHelp();
});
self.port.on("calcDefaultPanelHeight", function () {
nDefaultPanelHeight = calcPanelHeight();
});
document.getElementById('grammar').addEventListener("click", function(event) {
if (document.getElementById('grammar_section').style.display === "none" || document.getElementById('grammar_section').style.display === "") {
self.port.emit("loadGrammarOptions");
showGrammarOptions();
} else {
showHelp();
}
});
document.getElementById('spelling').addEventListener("click", function(event) {
if (document.getElementById('spelling_section').style.display === "none" || document.getElementById('spelling_section').style.display === "") {
self.port.emit("loadSpellingOptions");
showSpellingOptions();
} else {
showHelp();
}
});
document.getElementById('default_options').addEventListener("click", function (event) {
self.port.emit('resetOptions');
});
document.getElementById('conjugueur').addEventListener("click", function (event) {
self.port.emit('openConjugueur');
});
document.getElementById('website').addEventListener("click", function (event) {
self.port.emit('openURL', "http://www.dicollecte.org/grammalecte/");
});
document.getElementById('mainsponsor').addEventListener("click", function (event) {
self.port.emit('openURL', "http://www.lamouette.org/");
});
document.getElementById('othersponsors').addEventListener("click", function (event) {
self.port.emit('openURL', "http://www.dicollecte.org/grammalecte/soutiens.php");
});
window.addEventListener(
"click",
function (xEvent) {
let xElem = xEvent.target;
if (xElem.id) {
if (xElem.id.startsWith("option_") && xElem.tagName === "INPUT") {
self.port.emit("setOption", xElem.id.slice(7), xElem.checked);
}
if (xElem.id.startsWith("fr-FR-") && xElem.tagName === "INPUT") {
setPanelDictOption(xElem.id, xElem.checked);
self.port.emit("changeDictSetting", xElem.id, xElem.checked);
}
}
},
false
);
/*
Actions
*/
function calcPanelHeight () {
return document.getElementById("thanks").offsetTop + document.getElementById("thanks").offsetHeight;
}
function setHeight (n) {
self.port.emit("setHeight", n);
}
function showHelp () {
document.getElementById('spelling_section').style.display = "none";
document.getElementById('grammar_section').style.display = "none";
document.getElementById('help_section').style.display = "block";
setHeight(nDefaultPanelHeight);
}
function showGrammarOptions () {
document.getElementById('grammar_section').style.display = "block";
document.getElementById('spelling_section').style.display = "none";
document.getElementById('help_section').style.display = "none";
setHeight(1000);
}
function showSpellingOptions () {
document.getElementById('spelling_section').style.display = "block";
document.getElementById('grammar_section').style.display = "none";
document.getElementById('help_section').style.display = "none";
setHeight(1000);
}
function setGrammarOptionsOnPanel (oOptions) {
for (let sParam in oOptions) {
//console.log(sParam + ":" + oOptions[sParam]);
if (document.getElementById("option_"+sParam) !== null) {
document.getElementById("option_"+sParam).checked = oOptions[sParam];
}
}
}
function setPanelDictOption (sNode, bValue) {
document.getElementById(sNode).checked = bValue;
document.getElementById(sNode+"_box").style = bValue ? "background-color: hsl(210, 30%, 90%)" : "background-color: hsl(210, 15%, 96%)";
}
|
Added gc_lang/fr/xpi/data/common.css version [51e0dbac23].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
/*
common.css
*/
/* reset */
* { margin: 0; padding: 0; }
img { border: none; }
/* Generic classes */
.fleft {
float: left;
}
.fright {
float: right;
}
.center {
text-align: center;
}
.right {
text-align: right;
}
.left {
text-align: left;
}
.justify {
text-align: justify;
}
.hidden {
display: none;
}
.clearer {
clear: both;
font-size: 0;
height: 0;
}
/* Common */
#movewindow {
position: fixed;
right: 0;
top: 50;
width: 16px;
margin-top: 60px;
z-index: 100;
}
#movewindow .arrow {
background-color: hsl(180, 60%, 50%);
cursor: pointer;
padding: 1px 3px;
font-size: 10px;
font-weight: bold;
text-align: center;
color: hsl(180, 50%, 90%);
}
#movewindow .arrow:hover {
background-color: hsl(180, 70%, 40%);
cursor: hsl(180, 50%, 96%);
}
#rightcorner {
position: absolute;
top: 0;
right: 0;
}
a.rightcornerbutton1 {
float: right;
padding: 2px 10px 5px 10px;
border-radius: 0 0 0 3px;
font-size: 18px;
text-decoration: none;
}
a.rightcornerbutton {
float: right;
padding: 2px 10px 5px 10px;
font-size: 18px;
text-decoration: none;
}
.red {
background-color: hsl(0, 50%, 50%);
color: hsl(0, 0%, 96%);
}
.red:hover {
background-color: hsl(0, 60%, 40%);
color: hsl(0, 0%, 100%);
}
.cyan {
background-color: hsl(180, 50%, 50%);
color: hsl(0, 0%, 96%);
}
.cyan:hover {
background-color: hsl(180, 60%, 40%);
color: hsl(0, 0%, 100%);
}
.green {
background-color: hsl(120, 50%, 40%);
color: hsl(120, 10%, 96%);
}
.green:hover {
background-color: hsl(120, 60%, 30%);
color: hsl(120, 10%, 96%);
}
.blue {
background-color: hsl(210, 50%, 50%);
color: hsl(210, 10%, 96%);
}
.blue:hover {
background-color: hsl(210, 60%, 40%);
color: hsl(210, 10%, 96%);
}
/*
CSS Spinner
Double bounce
http://tobiasahlin.com/spinkit/
*/
.spinner {
width: 40px;
height: 40px;
position: absolute;
top: 2px;
right: 120px;
}
.double-bounce1, .double-bounce2 {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: hsl(180, 50%, 75%);
opacity: 0.6;
position: absolute;
top: 0;
left: 0;
animation: sk-bounce 2.0s infinite ease-in-out;
}
.double-bounce2 {
animation-delay: -1.0s;
}
@keyframes sk-bounce {
0%, 100% {
transform: scale(0.0);
} 50% {
transform: scale(1.0);
}
}
|
Added gc_lang/fr/xpi/data/conj_panel.css version [35f12336a2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
/*
CSS Document
White
Design par Olivier R.
*/
@import url("common.css");
body {
background: #FFFFFF url(img/lines.png);
font: normal 16px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif;
color: #505050;
/*text-rendering: optimizeLegibility;*/
}
.mainflow {
width: 500px;
margin: 0 auto 0 auto;
}
.logo {
position: absolute;
background-color: #FFFFFF;
border: 3px solid #F0F0F0;
border-radius: 50px;
padding: 4px 4px 0 4px;
}
/* MAIN ====================================================================== */
#main .inbox {
width: 500px;
margin: 10px auto 10px auto;
padding: 0 10px 10px 10px;
background: #FFFFFF;
border: 2px solid #F0F0F0;
border-radius: 20px;
}
#main h1 {
margin: 5px 0 2px 0;
color: hsl(210, 50%, 50%);
font: bold 30px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif;
}
#main h2 {
margin: 5px 0 2px 0;
color: hsl(0, 50%, 50%);
font: bold 16px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif;
}
#main h3 {
margin: 5px 0 2px 0;
color: hsl(210, 50%, 50%);
font: bold 14px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif;
}
#main .colonne {
float: left;
width: 240px;
}
#main .colsep {
float: left;
width: 20px;
}
.colonne p {
font-size: 12px;
}
/*.box {
border-left: 2px solid #8BC5EF;
border-bottom: 2px solid #8BC5EF;
border-radius: 5px;
padding: 0 0 2px 10px;
}*/
input#verb {
display: inline-block;
width: 230px;
margin-left: 5px;
padding: 5px 10px;
border: 2px solid hsl(0, 0%, 80%);
border-radius: 3px;
height: 24px;
background: transparent;
font: normal 20px Tahoma, "Ubuntu Condensed";
color: hsl(0, 0%, 30%);
}
input[placeholder]#verb {
color: hsl(0, 0%, 70%);
}
a#conjugate {
display: inline-block;
padding: 7px 10px;
font-size: 20px;
background-color: hsl(0, 30%, 30%);
color: hsl(0, 30%, 60%);
border-radius: 3px;
text-transform: uppercase;
text-align: center;
text-decoration: none;
}
a#conjugate:hover {
background-color: hsl(0, 60%, 40%);
color: hsl(0, 60%, 70%);
box-shadow: 0 0 2px hsl(0, 60%, 50%);
}
#options {
margin: 10px 5px 0 5px;
font-size: 16px;
text-align: center;
}
#smallnote {
float: right;
width: 190px;
margin: 15px 0 0 0;
padding: 0 5px;
font-size: 8.5px;
color: hsl(0, 0%, 60%);
text-align: center;
}
|
Added gc_lang/fr/xpi/data/conj_panel.html version [d63ac8e3c4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="conj_panel.css" />
<title>Grammalecte · Conjugueur</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<div id="rightcorner">
<a class="rightcornerbutton1 red" id="close" href="#"><b>×</b></a>
</div>
<body>
<header>
<div class="mainflow">
<div class="logo" style="margin: -5px 0 0 0px;">
<img src="img/logo2.png" alt="" />
</div>
</div>
</header>
<div id="main">
<div class="inbox">
<p class="right" style="margin: 10px 30px 0 0">
<input type="text" id="verb" name="verb" maxlength="40" value="" placeholder="entrez un verbe" autofocus />
<a id="conjugate" href="#" onclick="return false;">Conjuguer</a>
<p>
<div class="clearer"></div>
<p id="smallnote" hidden>Ce verbe n’a pas encore été vérifié. C’est pourquoi les options “pronominal” et “temps composés” sont désactivées.</p>
<p id="options">
<label for="oneg">Négation</label> <input type="checkbox" id="oneg" name="oneg" value="ON" />
· <label id="opro_lbl" for="opro">Pronominal</label> <input type="checkbox" id="opro" name="opro" value="ON" />
· <label for="ofem">Féminin</label> <input type="checkbox" id="ofem" name="ofem" value="ON" />
<br/> <label for="oint">Interrogatif</label> <input type="checkbox" id="oint" name="oint" value="ON" />
· <label id="otco_lbl" for="otco">Temps composés</label> <input type="checkbox" id="otco" name="otco" value="ON" />
</p>
<h1 id="verb_title" class="center"> </h1>
<p id="info" class="center"> </p>
<!-- section 1 -->
<div class="colonne">
<div id="infinitif" class="box">
<h2 id="infinitif_title">Infinitif</h2>
<p id="infi"> </p>
</div>
<div id="imperatif" class="box">
<h2 id="imperatif_title">Impératif</h2>
<h3 id="impe_temps">Présent</h3>
<p id="impe1"> </p>
<p id="impe2"> </p>
<p id="impe3"> </p>
</div>
</div>
<div class="colsep"> </div>
<div class="colonne">
<div id="partpre" class="box">
<h2 id="partpre_title">Participe présent</h2>
<p id="ppre"> </p>
</div>
<div id="partpas" class="box">
<h2 id="partpas_title">Participes passés</h2>
<p id="ppas1"> </p>
<p id="ppas2"> </p>
<p id="ppas3"> </p>
<p id="ppas4"> </p>
</div>
</div>
<div class="clearer"></div>
<!-- section 2 -->
<div class="colonne">
<div id="indicatif" class="box">
<h2 id="indicatif_title">Indicatif</h2>
<div id="ipre">
<h3 id="ipre_temps">Présent</h3>
<p id="ipre1"> </p>
<p id="ipre2"> </p>
<p id="ipre3"> </p>
<p id="ipre4"> </p>
<p id="ipre5"> </p>
<p id="ipre6"> </p>
</div>
<div id="iimp">
<h3 id="iimp_temps">Imparfait</h3>
<p id="iimp1"> </p>
<p id="iimp2"> </p>
<p id="iimp3"> </p>
<p id="iimp4"> </p>
<p id="iimp5"> </p>
<p id="iimp6"> </p>
</div>
<div id="ipsi">
<h3 id="ipsi_temps">Passé simple</h3>
<p id="ipsi1"> </p>
<p id="ipsi2"> </p>
<p id="ipsi3"> </p>
<p id="ipsi4"> </p>
<p id="ipsi5"> </p>
<p id="ipsi6"> </p>
</div>
<div id="ifut">
<h3 id="ifut_temps">Futur</h3>
<p id="ifut1"> </p>
<p id="ifut2"> </p>
<p id="ifut3"> </p>
<p id="ifut4"> </p>
<p id="ifut5"> </p>
<p id="ifut6"> </p>
</div>
</div>
</div>
<div class="colsep"> </div>
<div class="colonne">
<div id="subjonctif" class="box">
<h2 id="subjontif_title">Subjonctif</h2>
<div id="spre">
<h3 id="spre_temps">Présent</h3>
<p id="spre1"> </p>
<p id="spre2"> </p>
<p id="spre3"> </p>
<p id="spre4"> </p>
<p id="spre5"> </p>
<p id="spre6"> </p>
</div>
<div id="simp">
<h3 id="simp_temps">Imparfait</h3>
<p id="simp1"> </p>
<p id="simp2"> </p>
<p id="simp3"> </p>
<p id="simp4"> </p>
<p id="simp5"> </p>
<p id="simp6"> </p>
</div>
</div>
<div id="conditionnel" class="box">
<h2 id="conditionnel_title">Conditionnel</h2>
<div id="conda">
<h3 id="conda_temps">Présent</h3>
<p id="conda1"> </p>
<p id="conda2"> </p>
<p id="conda3"> </p>
<p id="conda4"> </p>
<p id="conda5"> </p>
<p id="conda6"> </p>
</div>
<div id="condb">
<h3 id="condb_temps"> </h3>
<p id="condb1"> </p>
<p id="condb2"> </p>
<p id="condb3"> </p>
<p id="condb4"> </p>
<p id="condb5"> </p>
<p id="condb6"> </p>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
</div>
</body>
</html>
|
Added gc_lang/fr/xpi/data/conj_panel.js version [d0838c414c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
// JavaScript
let oVerb = null;
self.port.on("conjugate", function (sVerb) {
createVerbAndConjugate(sVerb);
});
self.port.on("start", function () {
self.port.emit("setHeight", document.getElementById("main").offsetTop + document.getElementById("main").offsetHeight + 20);
document.getElementById("verb").focus();
});
// close
document.getElementById('close').addEventListener("click", function (event) {
self.port.emit('closePanel');
});
// button
document.getElementById('conjugate').addEventListener("click", function (event) {
createVerbAndConjugate(document.getElementById('verb').value);
});
// text field
document.getElementById('verb').addEventListener("change", function (event) {
createVerbAndConjugate(document.getElementById('verb').value);
});
// options
document.getElementById('oneg').addEventListener("click", function (event) {
_displayResults();
});
document.getElementById('opro').addEventListener("click", function (event) {
_displayResults();
});
document.getElementById('oint').addEventListener("click", function (event) {
_displayResults();
});
document.getElementById('ofem').addEventListener("click", function (event) {
_displayResults();
});
document.getElementById('otco').addEventListener("click", function (event) {
_displayResults();
});
function createVerbAndConjugate (sVerb) {
try {
document.getElementById('oneg').checked = false;
document.getElementById('opro').checked = false;
document.getElementById('oint').checked = false;
document.getElementById('otco').checked = false;
document.getElementById('ofem').checked = false;
document.getElementById('smallnote').hidden = true;
// request analyzing
sVerb = sVerb.trim().toLowerCase().replace(/’/g, "'").replace(/ +/g, " ");
if (sVerb) {
if (sVerb.startsWith("ne pas ")) {
document.getElementById('oneg').checked = true;
sVerb = sVerb.slice(7);
}
if (sVerb.startsWith("se ")) {
document.getElementById('opro').checked = true;
sVerb = sVerb.slice(3);
} else if (sVerb.startsWith("s'")) {
document.getElementById('opro').checked = true;
sVerb = sVerb.slice(2);
}
if (sVerb.endsWith("?")) {
document.getElementById('oint').checked = true;
sVerb = sVerb.slice(0,-1).trim();
}
if (!isVerb(sVerb)) {
document.getElementById('verb').style = "color: #BB4411;";
} else {
self.port.emit("show");
document.getElementById('verb_title').textContent = sVerb;
document.getElementById('verb').style = "color: #999999;";
document.getElementById('verb').value = "";
oVerb = new Verb(sVerb);
let sRawInfo = oVerb._sRawInfo;
document.getElementById('info').textContent = oVerb.sInfo;
document.getElementById('opro').textContent = "pronominal";
if (sRawInfo.endsWith("zz")) {
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro_lbl').style = "color: #CCC;";
document.getElementById('otco').checked = false;
document.getElementById('otco').disabled = true;
document.getElementById('otco_lbl').style = "color: #CCC;";
document.getElementById('smallnote').hidden = false;
} else {
if (sRawInfo[5] == "_") {
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro_lbl').style = "color: #CCC;";
} else if (sRawInfo[5] == "q" || sRawInfo[5] == "e") {
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = false;
document.getElementById('opro_lbl').style = "color: #000;";
} else if (sRawInfo[5] == "p" || sRawInfo[5] == "r") {
document.getElementById('opro').checked = true;
document.getElementById('opro').disabled = true;
document.getElementById('opro_lbl').style = "color: #CCC;";
} else if (sRawInfo[5] == "!") {
document.getElementById('opro').textContent = "cas particuliers";
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro_lbl').style = "color: #CCC;";
} else {
document.getElementById('opro').textContent = "# erreur #";
document.getElementById('opro').checked = false;
document.getElementById('opro').disabled = true;
document.getElementById('opro_lbl').style = "color: #CCC;";
}
document.getElementById('otco').disabled = false;
document.getElementById('otco_lbl').style = "color: #000;";
}
_displayResults();
}
}
}
catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
}
function _displayResults () {
if (oVerb === null) {
return;
}
try {
let opro = document.getElementById('opro').checked;
let oneg = document.getElementById('oneg').checked;
let otco = document.getElementById('otco').checked;
let oint = document.getElementById('oint').checked;
let ofem = document.getElementById('ofem').checked;
// titles
_setTitles()
// participes passés
document.getElementById('ppas1').textContent = oVerb.participePasse(":Q1") || " "; // something or nbsp
document.getElementById('ppas2').textContent = oVerb.participePasse(":Q2") || " ";
document.getElementById('ppas3').textContent = oVerb.participePasse(":Q3") || " ";
document.getElementById('ppas4').textContent = oVerb.participePasse(":Q4") || " ";
// infinitif
document.getElementById('infi').textContent = oVerb.infinitif(opro, oneg, otco, oint, ofem);
// participe présent
document.getElementById('ppre').textContent = oVerb.participePresent(opro, oneg, otco, oint, ofem) || " ";
// conjugaisons
document.getElementById('ipre1').textContent = oVerb.conjugue(":Ip", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre2').textContent = oVerb.conjugue(":Ip", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre3').textContent = oVerb.conjugue(":Ip", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre4').textContent = oVerb.conjugue(":Ip", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre5').textContent = oVerb.conjugue(":Ip", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipre6').textContent = oVerb.conjugue(":Ip", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp1').textContent = oVerb.conjugue(":Iq", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp2').textContent = oVerb.conjugue(":Iq", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp3').textContent = oVerb.conjugue(":Iq", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp4').textContent = oVerb.conjugue(":Iq", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp5').textContent = oVerb.conjugue(":Iq", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('iimp6').textContent = oVerb.conjugue(":Iq", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi1').textContent = oVerb.conjugue(":Is", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi2').textContent = oVerb.conjugue(":Is", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi3').textContent = oVerb.conjugue(":Is", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi4').textContent = oVerb.conjugue(":Is", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi5').textContent = oVerb.conjugue(":Is", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ipsi6').textContent = oVerb.conjugue(":Is", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut1').textContent = oVerb.conjugue(":If", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut2').textContent = oVerb.conjugue(":If", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut3').textContent = oVerb.conjugue(":If", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut4').textContent = oVerb.conjugue(":If", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut5').textContent = oVerb.conjugue(":If", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('ifut6').textContent = oVerb.conjugue(":If", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda1').textContent = oVerb.conjugue(":K", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda2').textContent = oVerb.conjugue(":K", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda3').textContent = oVerb.conjugue(":K", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda4').textContent = oVerb.conjugue(":K", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda5').textContent = oVerb.conjugue(":K", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('conda6').textContent = oVerb.conjugue(":K", ":3p", opro, oneg, otco, oint, ofem) || " ";
if (!oint) {
document.getElementById('spre1').textContent = oVerb.conjugue(":Sp", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre2').textContent = oVerb.conjugue(":Sp", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre3').textContent = oVerb.conjugue(":Sp", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre4').textContent = oVerb.conjugue(":Sp", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre5').textContent = oVerb.conjugue(":Sp", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('spre6').textContent = oVerb.conjugue(":Sp", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp1').textContent = oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp2').textContent = oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp3').textContent = oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp4').textContent = oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp5').textContent = oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('simp6').textContent = oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('impe1').textContent = oVerb.imperatif(":2s", opro, oneg, otco, ofem) || " ";
document.getElementById('impe2').textContent = oVerb.imperatif(":1p", opro, oneg, otco, ofem) || " ";
document.getElementById('impe3').textContent = oVerb.imperatif(":2p", opro, oneg, otco, ofem) || " ";
} else {
document.getElementById('spre_temps').textContent = " ";
document.getElementById('spre1').textContent = " ";
document.getElementById('spre2').textContent = " ";
document.getElementById('spre3').textContent = " ";
document.getElementById('spre4').textContent = " ";
document.getElementById('spre5').textContent = " ";
document.getElementById('spre6').textContent = " ";
document.getElementById('simp_temps').textContent = " ";
document.getElementById('simp1').textContent = " ";
document.getElementById('simp2').textContent = " ";
document.getElementById('simp3').textContent = " ";
document.getElementById('simp4').textContent = " ";
document.getElementById('simp5').textContent = " ";
document.getElementById('simp6').textContent = " ";
document.getElementById('impe_temps').textContent = " ";
document.getElementById('impe1').textContent = " ";
document.getElementById('impe2').textContent = " ";
document.getElementById('impe3').textContent = " ";
}
if (otco) {
document.getElementById('condb1').textContent = oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb2').textContent = oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb3').textContent = oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb4').textContent = oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb5').textContent = oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " ";
document.getElementById('condb6').textContent = oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " ";
} else {
document.getElementById('condb1').textContent = " ";
document.getElementById('condb2').textContent = " ";
document.getElementById('condb3').textContent = " ";
document.getElementById('condb4').textContent = " ";
document.getElementById('condb5').textContent = " ";
document.getElementById('condb6').textContent = " ";
}
document.getElementById('verb').Text = "";
}
catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
}
function _setTitles () {
try {
if (!document.getElementById('otco').checked) {
document.getElementById('ipre_temps').textContent = "Présent";
document.getElementById('ifut_temps').textContent = "Futur";
document.getElementById('iimp_temps').textContent = "Imparfait";
document.getElementById('ipsi_temps').textContent = "Passé simple";
document.getElementById('spre_temps').textContent = "Présent";
document.getElementById('simp_temps').textContent = "Imparfait";
document.getElementById('conda_temps').textContent = "Présent";
document.getElementById('condb_temps').textContent = " ";
document.getElementById('impe_temps').textContent = "Présent";
} else {
document.getElementById('ipre_temps').textContent = "Passé composé";
document.getElementById('ifut_temps').textContent = "Futur antérieur";
document.getElementById('iimp_temps').textContent = "Plus-que-parfait";
document.getElementById('ipsi_temps').textContent = "Passé antérieur";
document.getElementById('spre_temps').textContent = "Passé";
document.getElementById('simp_temps').textContent = "Plus-que-parfait";
document.getElementById('conda_temps').textContent = "Passé (1ʳᵉ forme)";
document.getElementById('condb_temps').textContent = "Passé (2ᵉ forme)";
document.getElementById('impe_temps').textContent = "Passé";
}
}
catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
}
|
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic-reform/fr-FR-classic-reform.aff version [2af86dc167].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic-reform/fr-FR-classic-reform.dic version [1f00669699].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic/fr-FR-classic.aff version [4d3dfc11d3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 |
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE” v6.0.3
# par Olivier R. -- licence MPL 2.0
# Généré le 25-04-2017 à 13:20
# Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/
SET UTF-8
WORDCHARS -’'1234567890.
TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ
MAP 25
MAP aàâäAÀÂÄ
MAP eéèêëEÉÈÊË
MAP iîïyIÎÏY
MAP oôöOÔÖ
MAP uùûüUÙÛÜ
MAP cçCÇ
MAP bB
MAP dD
MAP fF
MAP gG
MAP hH
MAP jJ
MAP kK
MAP lL
MAP mM
MAP nN
MAP pP
MAP qQ
MAP rR
MAP sS
MAP tT
MAP vV
MAP wW
MAP xX
MAP zZ
REP 82
REP ^Ca$ Ça
REP ^l l'
REP ^d d'
REP ^n n'
REP ^s s'
REP ^j j'
REP ^m m'
REP ^t t'
REP ^c c'
REP f ph
REP ph f
REP c qu
REP qu c
REP k qu
REP qu k
REP x ct
REP ct x
REP bb b
REP b bb
REP cc c
REP c cc
REP ff f
REP f ff
REP ll l
REP l ll
REP mm m
REP m mm
REP nn n
REP n nn
REP pp p
REP p pp
REP rr r
REP r rr
REP ss s
REP s ss
REP ss c
REP c ss
REP ss ç
REP ç ss
REP tt t
REP t tt
REP œ oe
REP oe œ
REP æ ae
REP ae æ
REP ai é
REP é ai
REP ai è
REP è ai
REP ai ê
REP ê ai
REP ei é
REP é ei
REP ei è
REP è ei
REP ei ê
REP ê ei
REP o au
REP au o
REP o eau
REP eau o
REP ett èt
REP èt ett
REP ell èl
REP èl ell
REP t th
REP th t
REP ième$ e
REP ème$ e
REP è$ e
REP mn$ min
REP ogue$ ogiste
REP ogiste$ ogue
REP disez$ dites
REP fesez$ faites
REP faisez$ faites
REP puit puits
REP sanctionnable punissable
REP questionnable discutable
REP antitartre détartrant
REP email courriel
REP construirent construisirent
KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj
ICONV 41
ICONV ’ '
ICONV ʼ '
ICONV ffi ffi
ICONV ffl ffl
ICONV ff ff
ICONV ſt ft
ICONV fi fi
ICONV fl fl
ICONV st st
ICONV à à
ICONV â â
ICONV ä ä
ICONV é é
ICONV è è
ICONV ê ê
ICONV ë ë
ICONV î î
ICONV ï ï
ICONV ô ô
ICONV ö ö
ICONV ù ù
ICONV û û
ICONV ü ü
ICONV ÿ ÿ
ICONV ç ç
ICONV À À
ICONV Â Â
ICONV Ä Ä
ICONV É É
ICONV È È
ICONV Ê Ê
ICONV Ë Ë
ICONV Î Î
ICONV Ï Ï
ICONV Ô Ô
ICONV Ö Ö
ICONV Ù Ù
ICONV Û Û
ICONV Ü Ü
ICONV Ÿ Ÿ
ICONV Ç Ç
OCONV 1
OCONV ' ’
FLAG long
FULLSTRIP
NEEDAFFIX ()
FORBIDDENWORD {}
CIRCUMFIX **
KEEPCASE ||
NOSUGGEST --
BREAK 7
BREAK -
BREAK .
BREAK ·
BREAK ^'
BREAK ^‘
BREAK '$
BREAK ’$
PFX L' Y 34
PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a l'A a
PFX L' à l'À à
PFX L' â l'Â â
PFX L' e l'E e
PFX L' é l'É é
PFX L' è l'È è
PFX L' ê l'Ê ê
PFX L' i l'I i
PFX L' î l'Î î
PFX L' o l'O o
PFX L' ô l'Ô ô
PFX L' u l'U u
PFX L' y l'Y y
PFX L' h l'H h
PFX L' œ l'Œ œ
PFX L' æ l'Æ æ
PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a L'A a
PFX L' à L'À à
PFX L' â L'Â â
PFX L' e L'E e
PFX L' é L'É é
PFX L' è L'È è
PFX L' ê L'Ê ê
PFX L' i L'I i
PFX L' î L'Î î
PFX L' o L'O o
PFX L' ô L'Ô ô
PFX L' u L'U u
PFX L' y L'Y y
PFX L' h L'H h
PFX L' œ L'Œ œ
PFX L' æ L'Æ æ
PFX D' Y 34
PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a d'A a
PFX D' à d'À à
PFX D' â d'Â â
PFX D' e d'E e
PFX D' é d'É é
PFX D' è d'È è
PFX D' ê d'Ê ê
PFX D' i d'I i
PFX D' î d'Î î
PFX D' o d'O o
PFX D' ô d'Ô ô
PFX D' u d'U u
PFX D' y d'Y y
PFX D' h d'H h
PFX D' œ d'Œ œ
PFX D' æ d'Æ æ
PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a D'A a
PFX D' à D'À à
PFX D' â D'Â â
PFX D' e D'E e
PFX D' é D'É é
PFX D' è D'È è
PFX D' ê D'Ê ê
PFX D' i D'I i
PFX D' î D'Î î
PFX D' o D'O o
PFX D' ô D'Ô ô
PFX D' u D'U u
PFX D' y D'Y y
PFX D' h D'H h
PFX D' œ D'Œ œ
PFX D' æ D'Æ æ
PFX Q' Y 34
PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a qu'A a
PFX Q' à qu'À à
PFX Q' â qu'Â â
PFX Q' e qu'E e
PFX Q' é qu'É é
PFX Q' è qu'È è
PFX Q' ê qu'Ê ê
PFX Q' i qu'I i
PFX Q' î qu'Î î
PFX Q' o qu'O o
PFX Q' ô qu'Ô ô
PFX Q' u qu'U u
PFX Q' y qu'Y y
PFX Q' h qu'H h
PFX Q' œ qu'Œ œ
PFX Q' æ qu'Æ æ
PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a Qu'A a
PFX Q' à Qu'À à
PFX Q' â Qu'Â â
PFX Q' e Qu'E e
PFX Q' é Qu'É é
PFX Q' è Qu'È è
PFX Q' ê Qu'Ê ê
PFX Q' i Qu'I i
PFX Q' î Qu'Î î
PFX Q' o Qu'O o
PFX Q' ô Qu'Ô ô
PFX Q' u Qu'U u
PFX Q' y Qu'Y y
PFX Q' h Qu'H h
PFX Q' œ Qu'Œ œ
PFX Q' æ Qu'Æ æ
PFX Q* Y 6
PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Qj Y 1
PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ]
PFX Si Y 1
PFX Si 0 s' .
SFX S. Y 1
SFX S. 0 s [^sxz]
SFX S= Y 1
SFX S= 0 s [^sxz]
SFX X. Y 3
SFX X. 0 x [aeoœ]u
SFX X. l ux al
SFX X. il ux ail
SFX A. Y 9
SFX A. 0 s [^sxz]
SFX A. an en an
SFX A. f ves f
SFX A. h hes h
SFX A. s ses s
SFX A. x xes x
SFX A. y ies y
SFX A. zz zzes zz
SFX A. z zzes [^z]z
SFX I. Y 7
SFX I. 0 s [^sxz]
SFX I. a e a
SFX I. e i e
SFX I. en ina en
SFX I. o i o
SFX I. um a um
SFX I. us i us
SFX F. Y 78
SFX F. 0 s [eë]
SFX F. e 0 [éiï]e
SFX F. e s [éiï]e
SFX F. rice eur [dt]rice
SFX F. rice eurs [dt]rice
SFX F. de d de
SFX F. de ds de
SFX F. fe f fe
SFX F. fe fs fe
SFX F. anche anc anche
SFX F. anche ancs anche
SFX F. èche ec èche
SFX F. èche ecs èche
SFX F. aiche ais aiche
SFX F. aîche ais aîche
SFX F. khe kh khe
SFX F. khe khs khe
SFX F. he h [ut]he
SFX F. he hs [ut]he
SFX F. ke k [^è]ke
SFX F. ke ks [^è]ke
SFX F. èke ek èke
SFX F. èke eks èke
SFX F. le l [aiouûh]le
SFX F. le ls [aiouûh]le
SFX F. lle l [eiu]lle
SFX F. lle ls [eiu]lle
SFX F. olle ou olle
SFX F. olle ous olle
SFX F. olle ol olle
SFX F. olle ols olle
SFX F. ne n [aiouï]ne
SFX F. ne ns [aiouï]ne
SFX F. nne n [aeo]nne
SFX F. nne ns [aeo]nne
SFX F. ène en ène
SFX F. ène ens ène
SFX F. igne in igne
SFX F. igne ins igne
SFX F. re r [aiouûy]re
SFX F. re rs [aiouûy]re
SFX F. ère er ère
SFX F. ère ers ère
SFX F. se s [^us]se
SFX F. esse e [^eo].esse
SFX F. esse es [^eo].esse
SFX F. rofesse rofès rofesse
SFX F. eresse eur eresse
SFX F. eresse eurs eresse
SFX F. oresse eur oresse
SFX F. oresse eurs oresse
SFX F. sse s [^e]sse
SFX F. use us [^eo]use
SFX F. euse eur euse
SFX F. euse eurs euse
SFX F. te t [^èt]te
SFX F. te ts [^èt]te
SFX F. tte t tte
SFX F. tte ts tte
SFX F. ète et ète
SFX F. ète ets ète
SFX F. ue u [^gq]ue
SFX F. ue us [^gq]ue
SFX F. gue g gue
SFX F. gue gs gue
SFX F. cque c cque
SFX F. cque cs cque
SFX F. que c [^c]que
SFX F. que cs [^c]que
SFX F. ève ef ève
SFX F. ève efs ève
SFX F. ve f [iïu]ve
SFX F. ve fs [iïu]ve
SFX F. uë u uë
SFX F. uë us uë
SFX F. üe u üe
SFX F. üe us üe
SFX F. ze z ze
SFX W. N 15
SFX W. e es e
SFX W. ce x ce
SFX W. use ux [eo]use
SFX W. ausse aux ausse
SFX W. ousse oux ousse
SFX W. ale al ale
SFX W. ale aux ale
SFX W. elle eau elle
SFX W. elle eaux elle
SFX W. elle el [bv]elle
SFX W. elle els [bv]elle
SFX W. ieille ieux ieille
SFX W. ieille ieil ieille
SFX W. ofolle oufou ofolle
SFX W. ofolle oufous ofolle
SFX S* Y 2
SFX S* 0 0/D'L'Q' [^sxz]
SFX S* 0 s/D'Q' [^sxz]
SFX X* Y 4
SFX X* 0 0/D'L'Q' [ul]
SFX X* 0 x/D'Q' [aeoœ]u
SFX X* l ux/D'Q' al
SFX X* il ux/D'Q' ail
SFX A* Y 20
SFX A* an an/D'L'Q' an
SFX A* an ans/D'Q' an
SFX A* an en/D'Q' an
SFX A* f f/D'L'Q' f
SFX A* f fs/D'Q' f
SFX A* f ves/D'Q' f
SFX A* h h/D'L'Q' h
SFX A* h hs/D'Q' h
SFX A* h hes/D'Q' h
SFX A* s s/D'L'Q' s
SFX A* s ses/D'Q' s
SFX A* x x/D'L'Q' x
SFX A* x xes/D'Q' x
SFX A* y y/D'L'Q' y
SFX A* y ys/D'Q' y
SFX A* y ies/D'Q' y
SFX A* zz zz/D'L'Q' zz
SFX A* zz zzes/D'Q' zz
SFX A* z z/D'L'Q' [^z]z
SFX A* z zzes/D'Q' [^z]z
SFX I* Y 17
SFX I* a a/D'L'Q' a
SFX I* a as/D'Q' a
SFX I* a e/D'Q' a
SFX I* e e/D'L'Q' e
SFX I* e es/D'Q' e
SFX I* e i/D'Q' e
SFX I* en en/D'L'Q' en
SFX I* en ens/D'Q' en
SFX I* en ina/D'Q' en
SFX I* o o/D'L'Q' o
SFX I* o os/D'Q' o
SFX I* o i/D'Q' o
SFX I* um um/D'L'Q' um
SFX I* um ums/D'Q' um
SFX I* um a/D'Q' um
SFX I* us us/D'L'Q' us
SFX I* us i/D'Q' us
SFX F* Y 59
SFX F* 0 0/D'L'Q' [eë]
SFX F* 0 s/D'Q' [eë]
SFX F* e 0/D'L'Q' [éiï]e
SFX F* e s/D'Q' [éiï]e
SFX F* rice eur/D'L'Q' [dt]rice
SFX F* rice eurs/D'Q' [dt]rice
SFX F* de d/D'L'Q' de
SFX F* de ds/D'Q' de
SFX F* he h/D'L'Q' [ut]he
SFX F* he hs/D'Q' [ut]he
SFX F* èke ek/D'L'Q' èke
SFX F* èke eks/D'Q' èke
SFX F* le l/D'L'Q' [aiouû]le
SFX F* le ls/D'Q' [aiouû]le
SFX F* lle l/D'L'Q' [eiu]lle
SFX F* lle ls/D'Q' [eiu]lle
SFX F* ne n/D'L'Q' [aiouï]ne
SFX F* ne ns/D'Q' [aiouï]ne
SFX F* nne n/D'L'Q' [aeo]nne
SFX F* nne ns/D'Q' [aeo]nne
SFX F* gne n/D'L'Q' igne
SFX F* gne ns/D'Q' igne
SFX F* re r/D'L'Q' [aiouûy]re
SFX F* re rs/D'Q' [aiouûy]re
SFX F* ère er/D'L'Q' ère
SFX F* ère ers/D'Q' ère
SFX F* se s/D'L'Q' [^us]se
SFX F* esse e/D'L'Q' [^eo].esse
SFX F* esse es/D'Q' [^eo].esse
SFX F* eresse eur/D'L'Q' eresse
SFX F* eresse eurs/D'Q' eresse
SFX F* oresse eur/D'L'Q' oresse
SFX F* oresse eurs/D'Q' oresse
SFX F* sse s/D'L'Q' [^e]sse
SFX F* use us/D'L'Q' [^eo]use
SFX F* euse eur/D'L'Q' euse
SFX F* euse eurs/D'Q' euse
SFX F* te t/D'L'Q' [^èt]te
SFX F* te ts/D'Q' [^èt]te
SFX F* tte t/D'L'Q' tte
SFX F* tte ts/D'Q' tte
SFX F* ète et/D'L'Q' ète
SFX F* ète ets/D'Q' ète
SFX F* ue u/D'L'Q' [^gq]ue
SFX F* ue us/D'Q' [^gq]ue
SFX F* gue g/D'L'Q' gue
SFX F* gue gs/D'Q' gue
SFX F* cque c/D'L'Q' cque
SFX F* cque cs/D'Q' cque
SFX F* que c/D'L'Q' [^c]que
SFX F* que cs/D'Q' [^c]que
SFX F* ève ef/D'L'Q' ève
SFX F* ève efs/D'Q' ève
SFX F* ve f/D'L'Q' [iïu]ve
SFX F* ve fs/D'Q' [iïu]ve
SFX F* uë u/D'L'Q' uë
SFX F* uë us/D'Q' uë
SFX F* üe u/D'L'Q' üe
SFX F* üe us/D'Q' üe
SFX W* Y 10
SFX W* 0 0/D'L'Q' e
SFX W* e es/D'Q' e
SFX W* ce x/D'L'Q' ce
SFX W* use ux/D'L'Q' [eo]use
SFX W* ousse oux/D'L'Q' ousse
SFX W* ausse aux/D'L'Q' ausse
SFX W* ale al/D'L'Q' ale
SFX W* ale aux/D'Q' ale
SFX W* elle eau/D'L'Q' elle
SFX W* elle eaux/D'Q' elle
PFX Um Y 29
PFX Um 0 0/S. .
PFX Um 0 l' [aàâeèéêiîoôuyœæ]
PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ]
PFX Um 0 yotta/S. .
PFX Um 0 zetta/S. .
PFX Um 0 exa/S. .
PFX Um 0 l'exa .
PFX Um 0 d'exa/S. .
PFX Um 0 peta/S. .
PFX Um 0 téra/S. .
PFX Um 0 giga/S. .
PFX Um 0 méga/S. .
PFX Um 0 kilo/S. .
PFX Um 0 hecto/S. .
PFX Um 0 l'hecto .
PFX Um 0 d'hecto/S. .
PFX Um 0 déca/S. .
PFX Um 0 déci/S. .
PFX Um 0 centi/S. .
PFX Um 0 milli/S. .
PFX Um 0 micro/S. .
PFX Um 0 nano/S. .
PFX Um 0 pico/S. .
PFX Um 0 femto/S. .
PFX Um 0 atto/S. .
PFX Um 0 l'atto .
PFX Um 0 d'atto/S. .
PFX Um 0 zepto/S. .
PFX Um 0 yocto/S. .
PFX Ui Y 28
PFX Ui 0 l' [aàâeèéêiîoôuyœæ]
PFX Ui 0 d' [aàâeèéêiîoôuyœæ]
PFX Ui 0 yotta .
PFX Ui 0 zetta .
PFX Ui 0 exa .
PFX Ui 0 l'exa .
PFX Ui 0 d'exa .
PFX Ui 0 peta .
PFX Ui 0 téra .
PFX Ui 0 giga .
PFX Ui 0 méga .
PFX Ui 0 kilo .
PFX Ui 0 hecto .
PFX Ui 0 l'hecto .
PFX Ui 0 d'hecto .
PFX Ui 0 déca .
PFX Ui 0 déci .
PFX Ui 0 centi .
PFX Ui 0 milli .
PFX Ui 0 micro .
PFX Ui 0 nano .
PFX Ui 0 pico .
PFX Ui 0 femto .
PFX Ui 0 atto .
PFX Ui 0 l'atto .
PFX Ui 0 d'atto .
PFX Ui 0 zepto .
PFX Ui 0 yocto .
PFX U. Y 20
PFX U. 0 Y .
PFX U. 0 Z .
PFX U. 0 E .
PFX U. 0 P .
PFX U. 0 T .
PFX U. 0 G .
PFX U. 0 M .
PFX U. 0 k .
PFX U. 0 h .
PFX U. 0 da .
PFX U. 0 d .
PFX U. 0 c .
PFX U. 0 m .
PFX U. 0 µ .
PFX U. 0 n .
PFX U. 0 p .
PFX U. 0 f .
PFX U. 0 a .
PFX U. 0 z .
PFX U. 0 y .
PFX n' Y 1
PFX n' 0 n' [aàâeèéêiîoôuyhœæ]
PFX q' Y 1
PFX q' 0 qu' [aàâeèéêiîoôuyhœæ]
PFX d' Y 1
PFX d' 0 d' [aàâeèéêiîoôuyhœæ]
PFX j' Y 1
PFX j' 0 j' [aàâeèéêiîoôuyhœæ]
PFX c' Y 2
PFX c' 0 c' [eé]
PFX c' 0 ç' a
PFX l' Y 1
PFX l' 0 l' [aàâeèéêiîoôuyhœæ]
PFX m' Y 1
PFX m' 0 m' [aàâeèéêiîoôuyhœæ]
PFX t' Y 1
PFX t' 0 t' [aàâeèéêiîoôuyhœæ]
PFX s' Y 1
PFX s' 0 s' [aàâeèéêiîoôuyhœæ]
SFX zA Y 49
SFX zA voir voir/n'q'd'l'm't' avoir
SFX zA voir yant/n'q'l'm't' avoir
SFX zA avoir eu avoir
SFX zA avoir eus avoir
SFX zA avoir eue avoir
SFX zA avoir eues avoir
SFX zA voir i/n'q'j'l't' avoir
SFX zA voir s/n'q'l'm't' avoir
SFX zA voir 0/n'q'c'l'm't' avoir
SFX zA voir vons/n'q'l't' avoir
SFX zA voir vez/n'q'l'm' avoir
SFX zA avoir ont/n'q'l'm't' avoir
SFX zA voir vais/n'q'j'l'm't' avoir
SFX zA voir vait/n'q'c'l'm't' avoir
SFX zA voir vions/n'q'l't' avoir
SFX zA voir viez/n'q'l'm' avoir
SFX zA voir vaient/n'q'l'm't' avoir
SFX zA avoir eus/n'q'j'l'm't' avoir
SFX zA avoir eut/n'q'c'l'm't' avoir
SFX zA avoir eûmes/n'q'l't' avoir
SFX zA avoir eûtes/n'q'l'm' avoir
SFX zA avoir eurent/n'q'l'm't' avoir
SFX zA voir urai/n'q'j'l'm't' avoir
SFX zA voir uras/n'q'l'm't' avoir
SFX zA voir ura/n'q'c'l'm't' avoir
SFX zA voir urons/n'q'l't' avoir
SFX zA voir urez/n'q'l'm' avoir
SFX zA voir uront/n'q'l'm't' avoir
SFX zA voir urais/n'q'j'l'm't' avoir
SFX zA voir urait/n'q'c'l'm't' avoir
SFX zA voir urions/n'q'l't' avoir
SFX zA voir uriez/n'q'l'm' avoir
SFX zA voir uraient/n'q'l'm't' avoir
SFX zA voir ie/n'j'l'm't' avoir
SFX zA voir ies/n'l'm't' avoir
SFX zA voir it/n'q'c'l'm't' avoir
SFX zA voir yons/n'l't' avoir
SFX zA voir yez/n'l'm' avoir
SFX zA voir ient/n'q'l'm't' avoir
SFX zA avoir eusse/n'q'j'l'm't' avoir
SFX zA avoir eussé/n'q'l'm't' avoir
SFX zA avoir eusses/n'q'l'm't' avoir
SFX zA avoir eût/n'q'c'l'm't' avoir
SFX zA avoir eussions/n'q'l't' avoir
SFX zA avoir eussiez/n'q'l'm' avoir
SFX zA avoir eussent/n'q'l'm't' avoir
SFX zA voir ie/n' avoir
SFX zA voir yons/n' avoir
SFX zA voir yez/n' avoir
SFX zE Y 45
SFX zE tre tre/n'q'd'l'm't's' être
SFX zE être étant/n'q'l'm't's' être
SFX zE être été être
SFX zE être suis être
SFX zE être es/n'q'l'm't' être
SFX zE être est/n'q'c'l'm't's' être
SFX zE être sommes être
SFX zE tre tes/n'q'l'm' être
SFX zE être sont être
SFX zE être étais/n'q'j'l'm't' être
SFX zE être était/n'q'c'l'm't's' être
SFX zE être étions/n'q'l't' être
SFX zE être étiez/n'q'l'm' être
SFX zE être étaient/n'q'c'l'm't's' être
SFX zE être fus être
SFX zE être fut être
SFX zE être fûmes être
SFX zE être fûtes être
SFX zE être furent être
SFX zE être serai être
SFX zE être seras être
SFX zE être sera être
SFX zE être serons être
SFX zE être serez être
SFX zE être seront être
SFX zE être serais être
SFX zE être serait être
SFX zE être serions être
SFX zE être seriez être
SFX zE être seraient être
SFX zE être sois être
SFX zE être soit être
SFX zE être soyons être
SFX zE être soyez être
SFX zE être soient être
SFX zE être fusse être
SFX zE être fussé être
SFX zE être fusses être
SFX zE être fût être
SFX zE être fussions être
SFX zE être fussiez être
SFX zE être fussent être
SFX zE être sois être
SFX zE être soyons être
SFX zE être soyez être
SFX a0 N 101
SFX a0 er ant [^cg]er
SFX a0 cer çant cer
SFX a0 ger geant ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er es [^y]er
SFX a0 yer yes [^ou]yer
SFX a0 yer ies [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a0 er ent [^y]er
SFX a0 yer yent [^ou]yer
SFX a0 yer ient [aou]yer
SFX a0 er ais [^cg]er
SFX a0 cer çais cer
SFX a0 ger geais ger
SFX a0 er ait [^cg]er
SFX a0 cer çait cer
SFX a0 ger geait ger
SFX a0 er ions er
SFX a0 er iez er
SFX a0 er aient [^cg]er
SFX a0 cer çaient cer
SFX a0 ger geaient ger
SFX a0 er ai [^cg]er
SFX a0 cer çai cer
SFX a0 ger geai ger
SFX a0 er as [^cg]er
SFX a0 cer ças cer
SFX a0 ger geas ger
SFX a0 er a [^cg]er
SFX a0 cer ça cer
SFX a0 ger gea ger
SFX a0 er âmes [^cg]er
SFX a0 cer çâmes cer
SFX a0 ger geâmes ger
SFX a0 er âtes [^cg]er
SFX a0 cer çâtes cer
SFX a0 ger geâtes ger
SFX a0 er èrent er
SFX a0 er erai [^y]er
SFX a0 yer yerai [^ou]yer
SFX a0 yer ierai [aou]yer
SFX a0 er eras [^y]er
SFX a0 yer yeras [^ou]yer
SFX a0 yer ieras [aou]yer
SFX a0 er era [^y]er
SFX a0 yer yera [^ou]yer
SFX a0 yer iera [aou]yer
SFX a0 er erons [^y]er
SFX a0 yer yerons [^ou]yer
SFX a0 yer ierons [aou]yer
SFX a0 er erez [^y]er
SFX a0 yer yerez [^ou]yer
SFX a0 yer ierez [aou]yer
SFX a0 er eront [^y]er
SFX a0 yer yeront [^ou]yer
SFX a0 yer ieront [aou]yer
SFX a0 er erais [^y]er
SFX a0 yer yerais [^ou]yer
SFX a0 yer ierais [aou]yer
SFX a0 er erait [^y]er
SFX a0 yer yerait [^ou]yer
SFX a0 yer ierait [aou]yer
SFX a0 er erions [^y]er
SFX a0 yer yerions [^ou]yer
SFX a0 yer ierions [aou]yer
SFX a0 er eriez [^y]er
SFX a0 yer yeriez [^ou]yer
SFX a0 yer ieriez [aou]yer
SFX a0 er eraient [^y]er
SFX a0 yer yeraient [^ou]yer
SFX a0 yer ieraient [aou]yer
SFX a0 er asse [^cg]er
SFX a0 cer çasse cer
SFX a0 ger geasse ger
SFX a0 er asses [^cg]er
SFX a0 cer çasses cer
SFX a0 ger geasses ger
SFX a0 er ât [^cg]er
SFX a0 cer çât cer
SFX a0 ger geât ger
SFX a0 er assions [^cg]er
SFX a0 cer çassions cer
SFX a0 ger geassions ger
SFX a0 er assiez [^cg]er
SFX a0 cer çassiez cer
SFX a0 ger geassiez ger
SFX a0 er assent [^cg]er
SFX a0 cer çassent cer
SFX a0 ger geassent ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a1 Y 102
SFX a1 er er/n'q'd' er
SFX a1 er ant/n'q' [^cg]er
SFX a1 cer çant/n'q' cer
SFX a1 ger geant/n'q' ger
SFX a1 er e/n'q'j' [^y]er
SFX a1 yer ye/n'q'j' [^ou]yer
SFX a1 yer ie/n'q'j' [aou]yer
SFX a1 er es/n' [^y]er
SFX a1 yer yes/n' [^ou]yer
SFX a1 yer ies/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a1 er ent/n'q' [^y]er
SFX a1 yer yent/n'q' [^ou]yer
SFX a1 yer ient/n'q' [aou]yer
SFX a1 er ais/n'j' [^cg]er
SFX a1 cer çais/n'j' cer
SFX a1 ger geais/n'j' ger
SFX a1 er ait/n'q' [^cg]er
SFX a1 cer çait/n'q' cer
SFX a1 ger geait/n'q' ger
SFX a1 er ions/n' er
SFX a1 er iez/n' er
SFX a1 er aient/n'q' [^cg]er
SFX a1 cer çaient/n'q' cer
SFX a1 ger geaient/n'q' ger
SFX a1 er ai/n'j' [^cg]er
SFX a1 cer çai/n'j' cer
SFX a1 ger geai/n'j' ger
SFX a1 er as/n' [^cg]er
SFX a1 cer ças/n' cer
SFX a1 ger geas/n' ger
SFX a1 er a/n'q' [^cg]er
SFX a1 cer ça/n'q' cer
SFX a1 ger gea/n'q' ger
SFX a1 er âmes/n' [^cg]er
SFX a1 cer çâmes/n' cer
SFX a1 ger geâmes/n' ger
SFX a1 er âtes/n' [^cg]er
SFX a1 cer çâtes/n' cer
SFX a1 ger geâtes/n' ger
SFX a1 er èrent/n'q' er
SFX a1 er erai/n'j' [^y]er
SFX a1 yer yerai/n'j' [^ou]yer
SFX a1 yer ierai/n'j' [aou]yer
SFX a1 er eras/n' [^y]er
SFX a1 yer yeras/n' [^ou]yer
SFX a1 yer ieras/n' [aou]yer
SFX a1 er era/n'q' [^y]er
SFX a1 yer yera/n'q' [^ou]yer
SFX a1 yer iera/n'q' [aou]yer
SFX a1 er erons/n' [^y]er
SFX a1 yer yerons/n' [^ou]yer
SFX a1 yer ierons/n' [aou]yer
SFX a1 er erez/n' [^y]er
SFX a1 yer yerez/n' [^ou]yer
SFX a1 yer ierez/n' [aou]yer
SFX a1 er eront/n'q' [^y]er
SFX a1 yer yeront/n'q' [^ou]yer
SFX a1 yer ieront/n'q' [aou]yer
SFX a1 er erais/n'j' [^y]er
SFX a1 yer yerais/n'j' [^ou]yer
SFX a1 yer ierais/n'j' [aou]yer
SFX a1 er erait/n'q' [^y]er
SFX a1 yer yerait/n'q' [^ou]yer
SFX a1 yer ierait/n'q' [aou]yer
SFX a1 er erions/n' [^y]er
SFX a1 yer yerions/n' [^ou]yer
SFX a1 yer ierions/n' [aou]yer
SFX a1 er eriez/n' [^y]er
SFX a1 yer yeriez/n' [^ou]yer
SFX a1 yer ieriez/n' [aou]yer
SFX a1 er eraient/n'q' [^y]er
SFX a1 yer yeraient/n'q' [^ou]yer
SFX a1 yer ieraient/n'q' [aou]yer
SFX a1 er asse/n'j' [^cg]er
SFX a1 cer çasse/n'j' cer
SFX a1 ger geasse/n'j' ger
SFX a1 er asses/n' [^cg]er
SFX a1 cer çasses/n' cer
SFX a1 ger geasses/n' ger
SFX a1 er ât/n'q' [^cg]er
SFX a1 cer çât/n'q' cer
SFX a1 ger geât/n'q' ger
SFX a1 er assions/n' [^cg]er
SFX a1 cer çassions/n' cer
SFX a1 ger geassions/n' ger
SFX a1 er assiez/n' [^cg]er
SFX a1 cer çassiez/n' cer
SFX a1 ger geassiez/n' ger
SFX a1 er assent/n'q' [^cg]er
SFX a1 cer çassent/n'q' cer
SFX a1 ger geassent/n'q' ger
SFX a1 er e/n' [^y]er
SFX a1 yer ye/n' [^ou]yer
SFX a1 yer ie/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a2 Y 102
SFX a2 er er/n'q'd'l'm't's' er
SFX a2 er ant/n'q'l'm't's' [^cg]er
SFX a2 cer çant/n'q'l'm't's' cer
SFX a2 ger geant/n'q'l'm't's' ger
SFX a2 er e/n'q'j'l'm't's' [^y]er
SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a2 yer ie/n'q'j'l'm't's' [aou]yer
SFX a2 er es/n'q'l'm' [^y]er
SFX a2 yer yes/n'q'l'm' [^ou]yer
SFX a2 yer ies/n'q'l'm' [aou]yer
SFX a2 er ons/n'q'l't' [^cg]er
SFX a2 cer çons/n'q'l't' cer
SFX a2 ger geons/n'q'l't' ger
SFX a2 er ez/n'q'l'm' er
SFX a2 er ent/n'q'l'm't's' [^y]er
SFX a2 yer yent/n'q'l'm't's' [^ou]yer
SFX a2 yer ient/n'q'l'm't's' [aou]yer
SFX a2 er ais/n'q'j'l'm't' [^cg]er
SFX a2 cer çais/n'q'j'l'm't' cer
SFX a2 ger geais/n'q'j'l'm't' ger
SFX a2 er ait/n'q'l'm't's' [^cg]er
SFX a2 cer çait/n'q'l'm't's' cer
SFX a2 ger geait/n'q'l'm't's' ger
SFX a2 er ions/n'q'l't' er
SFX a2 er iez/n'q'l'm' er
SFX a2 er aient/n'q'l'm't's' [^cg]er
SFX a2 cer çaient/n'q'l'm't's' cer
SFX a2 ger geaient/n'q'l'm't's' ger
SFX a2 er ai/n'q'j'l't' [^cg]er
SFX a2 cer çai/n'q'j'l't' cer
SFX a2 ger geai/n'q'j'l't' ger
SFX a2 er as/n'q'l'm' [^cg]er
SFX a2 cer ças/n'q'l'm' cer
SFX a2 ger geas/n'q'l'm' ger
SFX a2 er a/n'q'l'm't's' [^cg]er
SFX a2 cer ça/n'q'l'm't's' cer
SFX a2 ger gea/n'q'l'm't's' ger
SFX a2 er âmes/n'q'l't' [^cg]er
SFX a2 cer çâmes/n'q'l't' cer
SFX a2 ger geâmes/n'q'l't' ger
SFX a2 er âtes/n'q'l'm' [^cg]er
SFX a2 cer çâtes/n'q'l'm' cer
SFX a2 ger geâtes/n'q'l'm' ger
SFX a2 er èrent/n'q'l'm't's' er
SFX a2 er erai/n'q'j'l't' [^y]er
SFX a2 yer yerai/n'q'j'l't' [^ou]yer
SFX a2 yer ierai/n'q'j'l't' [aou]yer
SFX a2 er eras/n'q'l'm' [^y]er
SFX a2 yer yeras/n'q'l'm' [^ou]yer
SFX a2 yer ieras/n'q'l'm' [aou]yer
SFX a2 er era/n'q'l'm't's' [^y]er
SFX a2 yer yera/n'q'l'm't's' [^ou]yer
SFX a2 yer iera/n'q'l'm't's' [aou]yer
SFX a2 er erons/n'q'l't' [^y]er
SFX a2 yer yerons/n'q'l't' [^ou]yer
SFX a2 yer ierons/n'q'l't' [aou]yer
SFX a2 er erez/n'q'l'm' [^y]er
SFX a2 yer yerez/n'q'l'm' [^ou]yer
SFX a2 yer ierez/n'q'l'm' [aou]yer
SFX a2 er eront/n'q'l'm't's' [^y]er
SFX a2 yer yeront/n'q'l'm't's' [^ou]yer
SFX a2 yer ieront/n'q'l'm't's' [aou]yer
SFX a2 er erais/n'q'j'l'm't' [^y]er
SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a2 yer ierais/n'q'j'l'm't' [aou]yer
SFX a2 er erait/n'q'l'm't's' [^y]er
SFX a2 yer yerait/n'q'l'm't's' [^ou]yer
SFX a2 yer ierait/n'q'l'm't's' [aou]yer
SFX a2 er erions/n'q'l't' [^y]er
SFX a2 yer yerions/n'q'l't' [^ou]yer
SFX a2 yer ierions/n'q'l't' [aou]yer
SFX a2 er eriez/n'q'l'm' [^y]er
SFX a2 yer yeriez/n'q'l'm' [^ou]yer
SFX a2 yer ieriez/n'q'l'm' [aou]yer
SFX a2 er eraient/n'q'l'm't's' [^y]er
SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a2 yer ieraient/n'q'l'm't's' [aou]yer
SFX a2 er asse/n'q'j'l't' [^cg]er
SFX a2 cer çasse/n'q'j'l't' cer
SFX a2 ger geasse/n'q'j'l't' ger
SFX a2 er asses/n'q'l'm' [^cg]er
SFX a2 cer çasses/n'q'l'm' cer
SFX a2 ger geasses/n'q'l'm' ger
SFX a2 er ât/n'q'l'm't's' [^cg]er
SFX a2 cer çât/n'q'l'm't's' cer
SFX a2 ger geât/n'q'l'm't's' ger
SFX a2 er assions/n'q'l't' [^cg]er
SFX a2 cer çassions/n'q'l't' cer
SFX a2 ger geassions/n'q'l't' ger
SFX a2 er assiez/n'q'l'm' [^cg]er
SFX a2 cer çassiez/n'q'l'm' cer
SFX a2 ger geassiez/n'q'l'm' ger
SFX a2 er assent/n'q'l'm't's' [^cg]er
SFX a2 cer çassent/n'q'l'm't's' cer
SFX a2 ger geassent/n'q'l'm't's' ger
SFX a2 er e/n'l'm' [^y]er
SFX a2 yer ye/n'l'm' [^ou]yer
SFX a2 yer ie/n'l'm' [aou]yer
SFX a2 er ons/n'l' [^cg]er
SFX a2 cer çons/n'l' cer
SFX a2 ger geons/n'l' ger
SFX a2 er ez/n'l'm' er
SFX a3 Y 102
SFX a3 er er/m't's' er
SFX a3 er ant/m't's' [^cg]er
SFX a3 cer çant/m't's' cer
SFX a3 ger geant/m't's' ger
SFX a3 er e/m's' [^y]er
SFX a3 yer ye/m's' [^ou]yer
SFX a3 yer ie/m's' [aou]yer
SFX a3 er es/t' [^y]er
SFX a3 yer yes/t' [^ou]yer
SFX a3 yer ies/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 r z er
SFX a3 er ent/s' [^y]er
SFX a3 yer yent/s' [^ou]yer
SFX a3 yer ient/s' [aou]yer
SFX a3 er ais/m' [^cg]er
SFX a3 cer çais/m' cer
SFX a3 ger geais/m' ger
SFX a3 er ait/s' [^cg]er
SFX a3 cer çait/s' cer
SFX a3 ger geait/s' ger
SFX a3 er ions er
SFX a3 er iez er
SFX a3 er aient/s' [^cg]er
SFX a3 cer çaient/s' cer
SFX a3 ger geaient/s' ger
SFX a3 er ai/m' [^cg]er
SFX a3 cer çai/m' cer
SFX a3 ger geai/m' ger
SFX a3 er as/t' [^cg]er
SFX a3 cer ças/t' cer
SFX a3 ger geas/t' ger
SFX a3 er a/s' [^cg]er
SFX a3 cer ça/s' cer
SFX a3 ger gea/s' ger
SFX a3 er âmes [^cg]er
SFX a3 cer çâmes cer
SFX a3 ger geâmes ger
SFX a3 er âtes [^cg]er
SFX a3 cer çâtes/s' cer
SFX a3 ger geâtes/s' ger
SFX a3 er èrent/s' er
SFX a3 er erai/m' [^y]er
SFX a3 yer yerai/m' [^ou]yer
SFX a3 yer ierai/m' [aou]yer
SFX a3 er eras/t' [^y]er
SFX a3 yer yeras/t' [^ou]yer
SFX a3 yer ieras/t' [aou]yer
SFX a3 er era/s' [^y]er
SFX a3 yer yera/s' [^ou]yer
SFX a3 yer iera/s' [aou]yer
SFX a3 er erons [^y]er
SFX a3 yer yerons [^ou]yer
SFX a3 yer ierons [aou]yer
SFX a3 er erez [^y]er
SFX a3 yer yerez [^ou]yer
SFX a3 yer ierez [aou]yer
SFX a3 er eront/s' [^y]er
SFX a3 yer yeront/s' [^ou]yer
SFX a3 yer ieront/s' [aou]yer
SFX a3 er erais/m't' [^y]er
SFX a3 yer yerais/m't' [^ou]yer
SFX a3 yer ierais/m't' [aou]yer
SFX a3 er erait/s' [^y]er
SFX a3 yer yerait/s' [^ou]yer
SFX a3 yer ierait/s' [aou]yer
SFX a3 er erions [^y]er
SFX a3 yer yerions [^ou]yer
SFX a3 yer ierions [aou]yer
SFX a3 er eriez [^y]er
SFX a3 yer yeriez [^ou]yer
SFX a3 yer ieriez [aou]yer
SFX a3 er eraient/s' [^y]er
SFX a3 yer yeraient/s' [^ou]yer
SFX a3 yer ieraient/s' [aou]yer
SFX a3 er asse/m' [^cg]er
SFX a3 cer çasse/m' cer
SFX a3 ger geasse/m' ger
SFX a3 er asses/t' [^cg]er
SFX a3 cer çasses/t' cer
SFX a3 ger geasses/t' ger
SFX a3 er ât/s' [^cg]er
SFX a3 cer çât/s' cer
SFX a3 ger geât/s' ger
SFX a3 er assions [^cg]er
SFX a3 cer çassions cer
SFX a3 ger geassions ger
SFX a3 er assiez [^cg]er
SFX a3 cer çassiez cer
SFX a3 ger geassiez ger
SFX a3 er assent/s' [^cg]er
SFX a3 cer çassent/s' cer
SFX a3 ger geassent/s' ger
SFX a3 er e/t' [^y]er
SFX a3 yer ye/t' [^ou]yer
SFX a3 yer ie/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 er ez er
SFX a4 Y 102
SFX a4 er er/n'q'd'l'm't's' er
SFX a4 er ant/n'q'l'm't's' [^cg]er
SFX a4 cer çant/n'q'l'm't's' cer
SFX a4 ger geant/n'q'l'm't's' ger
SFX a4 er e/n'q'j'l'm't's' [^y]er
SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a4 yer ie/n'q'j'l'm't's' [aou]yer
SFX a4 er es/n'q'l'm't' [^y]er
SFX a4 yer yes/n'q'l'm't' [^ou]yer
SFX a4 yer ies/n'q'l'm't' [aou]yer
SFX a4 er ons/n'q'l't' [^cg]er
SFX a4 cer çons/n'q'l't' cer
SFX a4 ger geons/n'q'l't' ger
SFX a4 er ez/n'q'l'm' er
SFX a4 er ent/n'q'l'm't's' [^y]er
SFX a4 yer yent/n'q'l'm't's' [^ou]yer
SFX a4 yer ient/n'q'l'm't's' [aou]yer
SFX a4 er ais/n'q'j'l'm't' [^cg]er
SFX a4 cer çais/n'q'j'l'm't' cer
SFX a4 ger geais/n'q'j'l'm't' ger
SFX a4 er ait/n'q'l'm't's' [^cg]er
SFX a4 cer çait/n'q'l'm't's' cer
SFX a4 ger geait/n'q'l'm't's' ger
SFX a4 er ions/n'q'l't' er
SFX a4 er iez/n'q'l'm' er
SFX a4 er aient/n'q'l'm't's' [^cg]er
SFX a4 cer çaient/n'q'l'm't's' cer
SFX a4 ger geaient/n'q'l'm't's' ger
SFX a4 er ai/n'q'j'l'm't' [^cg]er
SFX a4 cer çai/n'q'j'l'm't' cer
SFX a4 ger geai/n'q'j'l'm't' ger
SFX a4 er as/n'q'l'm't' [^cg]er
SFX a4 cer ças/n'q'l'm't' cer
SFX a4 ger geas/n'q'l'm't' ger
SFX a4 er a/n'q'l'm't's' [^cg]er
SFX a4 cer ça/n'q'l'm't's' cer
SFX a4 ger gea/n'q'l'm't's' ger
SFX a4 er âmes/n'q'l't' [^cg]er
SFX a4 cer çâmes/n'q'l't' cer
SFX a4 ger geâmes/n'q'l't' ger
SFX a4 er âtes/n'q'l'm' [^cg]er
SFX a4 cer çâtes/n'q'l'm' cer
SFX a4 ger geâtes/n'q'l'm' ger
SFX a4 er èrent/n'q'l'm't's' er
SFX a4 er erai/n'q'j'l'm't' [^y]er
SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierai/n'q'j'l'm't' [aou]yer
SFX a4 er eras/n'q'l'm't' [^y]er
SFX a4 yer yeras/n'q'l'm't' [^ou]yer
SFX a4 yer ieras/n'q'l'm't' [aou]yer
SFX a4 er era/n'q'l'm't's' [^y]er
SFX a4 yer yera/n'q'l'm't's' [^ou]yer
SFX a4 yer iera/n'q'l'm't's' [aou]yer
SFX a4 er erons/n'q'l't' [^y]er
SFX a4 yer yerons/n'q'l't' [^ou]yer
SFX a4 yer ierons/n'q'l't' [aou]yer
SFX a4 er erez/n'q'l'm' [^y]er
SFX a4 yer yerez/n'q'l'm' [^ou]yer
SFX a4 yer ierez/n'q'l'm' [aou]yer
SFX a4 er eront/n'q'l'm't's' [^y]er
SFX a4 yer yeront/n'q'l'm't's' [^ou]yer
SFX a4 yer ieront/n'q'l'm't's' [aou]yer
SFX a4 er erais/n'q'j'l'm't' [^y]er
SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierais/n'q'j'l'm't' [aou]yer
SFX a4 er erait/n'q'l'm't's' [^y]er
SFX a4 yer yerait/n'q'l'm't's' [^ou]yer
SFX a4 yer ierait/n'q'l'm't's' [aou]yer
SFX a4 er erions/n'q'l't' [^y]er
SFX a4 yer yerions/n'q'l't' [^ou]yer
SFX a4 yer ierions/n'q'l't' [aou]yer
SFX a4 er eriez/n'q'l'm' [^y]er
SFX a4 yer yeriez/n'q'l'm' [^ou]yer
SFX a4 yer ieriez/n'q'l'm' [aou]yer
SFX a4 er eraient/n'q'l'm't's' [^y]er
SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a4 yer ieraient/n'q'l'm't's' [aou]yer
SFX a4 er asse/n'q'j'l'm't' [^cg]er
SFX a4 cer çasse/n'q'j'l'm't' cer
SFX a4 ger geasse/n'q'j'l'm't' ger
SFX a4 er asses/n'q'l'm't' [^cg]er
SFX a4 cer çasses/n'q'l'm't' cer
SFX a4 ger geasses/n'q'l'm't' ger
SFX a4 er ât/n'q'l'm't's' [^cg]er
SFX a4 cer çât/n'q'l'm't's' cer
SFX a4 ger geât/n'q'l'm't's' ger
SFX a4 er assions/n'q'l't' [^cg]er
SFX a4 cer çassions/n'q'l't' cer
SFX a4 ger geassions/n'q'l't' ger
SFX a4 er assiez/n'q'l'm' [^cg]er
SFX a4 cer çassiez/n'q'l'm' cer
SFX a4 ger geassiez/n'q'l'm' ger
SFX a4 er assent/n'q'l'm't's' [^cg]er
SFX a4 cer çassent/n'q'l'm't's' cer
SFX a4 ger geassent/n'q'l'm't's' ger
SFX a4 er e/n'l'm't' [^y]er
SFX a4 yer ye/n'l'm't' [^ou]yer
SFX a4 yer ie/n'l'm't' [aou]yer
SFX a4 er ons/n'l' [^cg]er
SFX a4 cer çons/n'l' cer
SFX a4 ger geons/n'l' ger
SFX a4 er ez/n'l'm' er
SFX a5 Y 102
SFX a5 er er/n'q'd'm't's' er
SFX a5 er ant/n'q'm't's' [^cg]er
SFX a5 cer çant/n'q'm't's' cer
SFX a5 ger geant/n'q'm't's' ger
SFX a5 er e/n'q'j'm't's' [^y]er
SFX a5 yer ye/n'q'j'm't's' [^ou]yer
SFX a5 yer ie/n'q'j'm't's' [aou]yer
SFX a5 er es/n'm't' [^y]er
SFX a5 yer yes/n'm't' [^ou]yer
SFX a5 yer ies/n'm't' [aou]yer
SFX a5 er ons/n't' [^cg]er
SFX a5 cer çons/n't' cer
SFX a5 ger geons/n't' ger
SFX a5 r z/n'm' er
SFX a5 er ent/n'q'm't's' [^y]er
SFX a5 yer yent/n'q'm't's' [^ou]yer
SFX a5 yer ient/n'q'm't's' [aou]yer
SFX a5 er ais/n'j'm't' [^cg]er
SFX a5 cer çais/n'j'm't' cer
SFX a5 ger geais/n'j'm't' ger
SFX a5 er ait/n'q'm't's' [^cg]er
SFX a5 cer çait/n'q'm't's' cer
SFX a5 ger geait/n'q'm't's' ger
SFX a5 er ions/n't' er
SFX a5 er iez/n'm' er
SFX a5 er aient/n'q'm't's' [^cg]er
SFX a5 cer çaient/n'q'm't's' cer
SFX a5 ger geaient/n'q'm't's' ger
SFX a5 er ai/n'j'm't' [^cg]er
SFX a5 cer çai/n'j'm't' cer
SFX a5 ger geai/n'j'm't' ger
SFX a5 er as/n'm't' [^cg]er
SFX a5 cer ças/n'm't' cer
SFX a5 ger geas/n'm't' ger
SFX a5 er a/n'q'm't's' [^cg]er
SFX a5 cer ça/n'q'm't's' cer
SFX a5 ger gea/n'q'm't's' ger
SFX a5 er âmes/n't' [^cg]er
SFX a5 cer çâmes/n't' cer
SFX a5 ger geâmes/n't' ger
SFX a5 er âtes/n'm' [^cg]er
SFX a5 cer çâtes/n'm' cer
SFX a5 ger geâtes/n'm' ger
SFX a5 er èrent/n'q'm't's' er
SFX a5 er erai/n'j'm't' [^y]er
SFX a5 yer yerai/n'j'm't' [^ou]yer
SFX a5 yer ierai/n'j'm't' [aou]yer
SFX a5 er eras/n'm't' [^y]er
SFX a5 yer yeras/n'm't' [^ou]yer
SFX a5 yer ieras/n'm't' [aou]yer
SFX a5 er era/n'q'm't's' [^y]er
SFX a5 yer yera/n'q'm't's' [^ou]yer
SFX a5 yer iera/n'q'm't's' [aou]yer
SFX a5 er erons/n't' [^y]er
SFX a5 yer yerons/n't' [^ou]yer
SFX a5 yer ierons/n't' [aou]yer
SFX a5 er erez/n'm' [^y]er
SFX a5 yer yerez/n'm' [^ou]yer
SFX a5 yer ierez/n'm' [aou]yer
SFX a5 er eront/n'q'm't's' [^y]er
SFX a5 yer yeront/n'q'm't's' [^ou]yer
SFX a5 yer ieront/n'q'm't's' [aou]yer
SFX a5 er erais/n'j'm't' [^y]er
SFX a5 yer yerais/n'j'm't' [^ou]yer
SFX a5 yer ierais/n'j'm't' [aou]yer
SFX a5 er erait/n'q'm't's' [^y]er
SFX a5 yer yerait/n'q'm't's' [^ou]yer
SFX a5 yer ierait/n'q'm't's' [aou]yer
SFX a5 er erions/n't' [^y]er
SFX a5 yer yerions/n't' [^ou]yer
SFX a5 yer ierions/n't' [aou]yer
SFX a5 er eriez/n'm' [^y]er
SFX a5 yer yeriez/n'm' [^ou]yer
SFX a5 yer ieriez/n'm' [aou]yer
SFX a5 er eraient/n'q'm't's' [^y]er
SFX a5 yer yeraient/n'q'm't's' [^ou]yer
SFX a5 yer ieraient/n'q'm't's' [aou]yer
SFX a5 er asse/n'j'm't' [^cg]er
SFX a5 cer çasse/n'j'm't' cer
SFX a5 ger geasse/n'j'm't' ger
SFX a5 er asses/n'm't' [^cg]er
SFX a5 cer çasses/n'm't' cer
SFX a5 ger geasses/n'm't' ger
SFX a5 er ât/n'q'm't's' [^cg]er
SFX a5 cer çât/n'q'm't's' cer
SFX a5 ger geât/n'q'm't's' ger
SFX a5 er assions/n't' [^cg]er
SFX a5 cer çassions/n't' cer
SFX a5 ger geassions/n't' ger
SFX a5 er assiez/n'm' [^cg]er
SFX a5 cer çassiez/n'm' cer
SFX a5 ger geassiez/n'm' ger
SFX a5 er assent/n'q'm't's' [^cg]er
SFX a5 cer çassent/n'q'm't's' cer
SFX a5 ger geassent/n'q'm't's' ger
SFX a5 er e/n'm' [^y]er
SFX a5 yer e/n'm' [^ou]yer
SFX a5 yer ie/n'm' [aou]yer
SFX a5 er ons/n' [^cg]er
SFX a5 cer çons/n' cer
SFX a5 ger geons/n' ger
SFX a5 er ez/n'm' er
SFX a6 Y 72
SFX a6 er er/s' er
SFX a6 er ant/s' [^cg]er
SFX a6 cer çant/s' cer
SFX a6 ger geant/s' ger
SFX a6 er e/s' [^y]er
SFX a6 yer ye/s' [^ou]yer
SFX a6 yer ie/s' [aou]yer
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a6 er ent/s' [^y]er
SFX a6 yer yent/s' [^ou]yer
SFX a6 yer ient/s' [aou]yer
SFX a6 er ait/s' [^cg]er
SFX a6 cer çait/s' cer
SFX a6 ger geait/s' ger
SFX a6 er ions er
SFX a6 er iez er
SFX a6 er aient/s' [^cg]er
SFX a6 cer çaient/s' cer
SFX a6 ger geaient/s' ger
SFX a6 er a/s' [^cg]er
SFX a6 cer ça/s' cer
SFX a6 ger gea/s' ger
SFX a6 er âmes [^cg]er
SFX a6 cer çâmes cer
SFX a6 ger geâmes ger
SFX a6 er âtes [^cg]er
SFX a6 cer çâtes/s' cer
SFX a6 ger geâtes/s' ger
SFX a6 er èrent/s' er
SFX a6 er era/s' [^y]er
SFX a6 yer yera/s' [^ou]yer
SFX a6 yer iera/s' [aou]yer
SFX a6 er erons [^y]er
SFX a6 yer yerons [^ou]yer
SFX a6 yer ierons [aou]yer
SFX a6 er erez [^y]er
SFX a6 yer yerez [^ou]yer
SFX a6 yer ierez [aou]yer
SFX a6 er eront/s' [^y]er
SFX a6 yer yeront/s' [^ou]yer
SFX a6 yer ieront/s' [aou]yer
SFX a6 er erait/s' [^y]er
SFX a6 yer yerait/s' [^ou]yer
SFX a6 yer ierait/s' [aou]yer
SFX a6 er erions [^y]er
SFX a6 yer yerions [^ou]yer
SFX a6 yer ierions [aou]yer
SFX a6 er eriez [^y]er
SFX a6 yer yeriez [^ou]yer
SFX a6 yer ieriez [aou]yer
SFX a6 er eraient/s' [^y]er
SFX a6 yer yeraient/s' [^ou]yer
SFX a6 yer ieraient/s' [aou]yer
SFX a6 er ât/s' [^cg]er
SFX a6 cer çât/s' cer
SFX a6 ger geât/s' ger
SFX a6 er assions [^cg]er
SFX a6 cer çassions cer
SFX a6 ger geassions ger
SFX a6 er assiez [^cg]er
SFX a6 cer çassiez cer
SFX a6 ger geassiez ger
SFX a6 er assent/s' [^cg]er
SFX a6 cer çassent/s' cer
SFX a6 ger geassent/s' ger
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a8 N 16
SFX a8 er er/n'd' er
SFX a8 er ant [^cg]er
SFX a8 cer çant cer
SFX a8 ger geant ger
SFX a8 er e/n' er
SFX a8 er ait/n' [^cg]er
SFX a8 cer çait/n' cer
SFX a8 ger geait/n' ger
SFX a8 er a/n' [^cg]er
SFX a8 cer ça/n' cer
SFX a8 ger gea/n' ger
SFX a8 er era/n' er
SFX a8 er erait/n' er
SFX a8 er ât/n' [^cg]er
SFX a8 cer çât/n' cer
SFX a8 ger geât/n' ger
SFX a9 N 10
SFX a9 er ent/n' er
SFX a9 er aient/n' [^cg]er
SFX a9 cer çaient/n' cer
SFX a9 ger geaient/n' ger
SFX a9 er èrent/n' er
SFX a9 er eront/n' er
SFX a9 er eraient/n' er
SFX a9 er assent/n' [^cg]er
SFX a9 cer çassent/n' cer
SFX a9 ger geassent/n' ger
SFX b0 N 189
SFX b0 er ant [^c]er
SFX b0 cer çant cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 ecer èces ecer
SFX b0 emer èmes emer
SFX b0 ener ènes ener
SFX b0 eper èpes eper
SFX b0 erer ères erer
SFX b0 eser èses eser
SFX b0 ever èves ever
SFX b0 evrer èvres evrer
SFX b0 eter ètes eter
SFX b0 eler èles eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b0 ecer ècent ecer
SFX b0 emer èment emer
SFX b0 ener ènent ener
SFX b0 eper èpent eper
SFX b0 erer èrent erer
SFX b0 eser èsent eser
SFX b0 ever èvent ever
SFX b0 evrer èvrent evrer
SFX b0 eter ètent eter
SFX b0 eler èlent eler
SFX b0 er ais [^c]er
SFX b0 cer çais cer
SFX b0 er ait [^c]er
SFX b0 cer çait cer
SFX b0 er ions er
SFX b0 er iez er
SFX b0 er aient [^c]er
SFX b0 cer çaient cer
SFX b0 er ai [^c]er
SFX b0 cer çai cer
SFX b0 er as [^c]er
SFX b0 cer ças cer
SFX b0 er a [^c]er
SFX b0 cer ça cer
SFX b0 er âmes [^c]er
SFX b0 cer çâmes cer
SFX b0 er âtes [^c]er
SFX b0 cer çâtes cer
SFX b0 er èrent er
SFX b0 ecer ècerai ecer
SFX b0 emer èmerai emer
SFX b0 ener ènerai ener
SFX b0 eper èperai eper
SFX b0 erer èrerai erer
SFX b0 eser èserai eser
SFX b0 ever èverai ever
SFX b0 evrer èvrerai evrer
SFX b0 eter èterai eter
SFX b0 eler èlerai eler
SFX b0 ecer èceras ecer
SFX b0 emer èmeras emer
SFX b0 ener èneras ener
SFX b0 eper èperas eper
SFX b0 erer èreras erer
SFX b0 eser èseras eser
SFX b0 ever èveras ever
SFX b0 evrer èvreras evrer
SFX b0 eter èteras eter
SFX b0 eler èleras eler
SFX b0 ecer ècera ecer
SFX b0 emer èmera emer
SFX b0 ener ènera ener
SFX b0 eper èpera eper
SFX b0 erer èrera erer
SFX b0 eser èsera eser
SFX b0 ever èvera ever
SFX b0 evrer èvrera evrer
SFX b0 eter ètera eter
SFX b0 eler èlera eler
SFX b0 ecer ècerons ecer
SFX b0 emer èmerons emer
SFX b0 ener ènerons ener
SFX b0 eper èperons eper
SFX b0 erer èrerons erer
SFX b0 eser èserons eser
SFX b0 ever èverons ever
SFX b0 evrer èvrerons evrer
SFX b0 eter èterons eter
SFX b0 eler èlerons eler
SFX b0 ecer ècerez ecer
SFX b0 emer èmerez emer
SFX b0 ener ènerez ener
SFX b0 eper èperez eper
SFX b0 erer èrerez erer
SFX b0 eser èserez eser
SFX b0 ever èverez ever
SFX b0 evrer èvrerez evrer
SFX b0 eter èterez eter
SFX b0 eler èlerez eler
SFX b0 ecer èceront ecer
SFX b0 emer èmeront emer
SFX b0 ener èneront ener
SFX b0 eper èperont eper
SFX b0 erer èreront erer
SFX b0 eser èseront eser
SFX b0 ever èveront ever
SFX b0 evrer èvreront evrer
SFX b0 eter èteront eter
SFX b0 eler èleront eler
SFX b0 ecer ècerais ecer
SFX b0 emer èmerais emer
SFX b0 ener ènerais ener
SFX b0 eper èperais eper
SFX b0 erer èrerais erer
SFX b0 eser èserais eser
SFX b0 ever èverais ever
SFX b0 evrer èvrerais evrer
SFX b0 eter èterais eter
SFX b0 eler èlerais eler
SFX b0 ecer ècerait ecer
SFX b0 emer èmerait emer
SFX b0 ener ènerait ener
SFX b0 eper èperait eper
SFX b0 erer èrerait erer
SFX b0 eser èserait eser
SFX b0 ever èverait ever
SFX b0 evrer èvrerait evrer
SFX b0 eter èterait eter
SFX b0 eler èlerait eler
SFX b0 ecer ècerions ecer
SFX b0 emer èmerions emer
SFX b0 ener ènerions ener
SFX b0 eper èperions eper
SFX b0 erer èrerions erer
SFX b0 eser èserions eser
SFX b0 ever èverions ever
SFX b0 evrer èvrerions evrer
SFX b0 eter èterions eter
SFX b0 eler èlerions eler
SFX b0 ecer èceriez ecer
SFX b0 emer èmeriez emer
SFX b0 ener èneriez ener
SFX b0 eper èperiez eper
SFX b0 erer èreriez erer
SFX b0 eser èseriez eser
SFX b0 ever èveriez ever
SFX b0 evrer èvreriez evrer
SFX b0 eter èteriez eter
SFX b0 eler èleriez eler
SFX b0 ecer èceraient ecer
SFX b0 emer èmeraient emer
SFX b0 ener èneraient ener
SFX b0 eper èperaient eper
SFX b0 erer èreraient erer
SFX b0 eser èseraient eser
SFX b0 ever èveraient ever
SFX b0 evrer èvreraient evrer
SFX b0 eter èteraient eter
SFX b0 eler èleraient eler
SFX b0 er asse [^c]er
SFX b0 cer çasse cer
SFX b0 er asses [^c]er
SFX b0 cer çasses cer
SFX b0 er ât [^c]er
SFX b0 cer çât cer
SFX b0 er assions [^c]er
SFX b0 cer çassions cer
SFX b0 er assiez [^c]er
SFX b0 cer çassiez cer
SFX b0 er assent [^c]er
SFX b0 cer çassent cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b1 Y 190
SFX b1 er er/n'q'd' er
SFX b1 er ant/n'q' [^c]er
SFX b1 cer çant/n'q' cer
SFX b1 ecer èce/n'j'q' ecer
SFX b1 emer ème/n'j'q' emer
SFX b1 ener ène/n'j'q' ener
SFX b1 eper èpe/n'j'q' eper
SFX b1 erer ère/n'j'q' erer
SFX b1 eser èse/n'j'q' eser
SFX b1 ever ève/n'j'q' ever
SFX b1 evrer èvre/n'j'q' evrer
SFX b1 eter ète/n'j'q' eter
SFX b1 eler èle/n'j'q' eler
SFX b1 ecer èces/n' ecer
SFX b1 emer èmes/n' emer
SFX b1 ener ènes/n' ener
SFX b1 eper èpes/n' eper
SFX b1 erer ères/n' erer
SFX b1 eser èses/n' eser
SFX b1 ever èves/n' ever
SFX b1 evrer èvres/n' evrer
SFX b1 eter ètes/n' eter
SFX b1 eler èles/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b1 ecer ècent/n'q' ecer
SFX b1 emer èment/n'q' emer
SFX b1 ener ènent/n'q' ener
SFX b1 eper èpent/n'q' eper
SFX b1 erer èrent/n'q' erer
SFX b1 eser èsent/n'q' eser
SFX b1 ever èvent/n'q' ever
SFX b1 evrer èvrent/n'q' evrer
SFX b1 eter ètent/n'q' eter
SFX b1 eler èlent/n'q' eler
SFX b1 er ais/n'j' [^c]er
SFX b1 cer çais/n'j' cer
SFX b1 er ait/n'q' [^c]er
SFX b1 cer çait/n'q' cer
SFX b1 er ions/n' er
SFX b1 er iez/n' er
SFX b1 er aient/n'q' [^c]er
SFX b1 cer çaient/n'q' cer
SFX b1 er ai/n'j' [^c]er
SFX b1 cer çai/n'j' cer
SFX b1 er as/n' [^c]er
SFX b1 cer ças/n' cer
SFX b1 er a/n'q' [^c]er
SFX b1 cer ça/n'q' cer
SFX b1 er âmes/n' [^c]er
SFX b1 cer çâmes/n' cer
SFX b1 er âtes/n' [^c]er
SFX b1 cer çâtes/n' cer
SFX b1 er èrent/n'q' er
SFX b1 ecer ècerai/n'j' ecer
SFX b1 emer èmerai/n'j' emer
SFX b1 ener ènerai/n'j' ener
SFX b1 eper èperai/n'j' eper
SFX b1 erer èrerai/n'j' erer
SFX b1 eser èserai/n'j' eser
SFX b1 ever èverai/n'j' ever
SFX b1 evrer èvrerai/n'j' evrer
SFX b1 eter èterai/n'j' eter
SFX b1 eler èlerai/n'j' eler
SFX b1 ecer èceras/n' ecer
SFX b1 emer èmeras/n' emer
SFX b1 ener èneras/n' ener
SFX b1 eper èperas/n' eper
SFX b1 erer èreras/n' erer
SFX b1 eser èseras/n' eser
SFX b1 ever èveras/n' ever
SFX b1 evrer èvreras/n' evrer
SFX b1 eter èteras/n' eter
SFX b1 eler èleras/n' eler
SFX b1 ecer ècera/n'q' ecer
SFX b1 emer èmera/n'q' emer
SFX b1 ener ènera/n'q' ener
SFX b1 eper èpera/n'q' eper
SFX b1 erer èrera/n'q' erer
SFX b1 eser èsera/n'q' eser
SFX b1 ever èvera/n'q' ever
SFX b1 evrer èvrera/n'q' evrer
SFX b1 eter ètera/n'q' eter
SFX b1 eler èlera/n'q' eler
SFX b1 ecer ècerons/n' ecer
SFX b1 emer èmerons/n' emer
SFX b1 ener ènerons/n' ener
SFX b1 eper èperons/n' eper
SFX b1 erer èrerons/n' erer
SFX b1 eser èserons/n' eser
SFX b1 ever èverons/n' ever
SFX b1 evrer èvrerons/n' evrer
SFX b1 eter èterons/n' eter
SFX b1 eler èlerons/n' eler
SFX b1 ecer ècerez/n' ecer
SFX b1 emer èmerez/n' emer
SFX b1 ener ènerez/n' ener
SFX b1 eper èperez/n' eper
SFX b1 erer èrerez/n' erer
SFX b1 eser èserez/n' eser
SFX b1 ever èverez/n' ever
SFX b1 evrer èvrerez/n' evrer
SFX b1 eter èterez/n' eter
SFX b1 eler èlerez/n' eler
SFX b1 ecer èceront/n'q' ecer
SFX b1 emer èmeront/n'q' emer
SFX b1 ener èneront/n'q' ener
SFX b1 eper èperont/n'q' eper
SFX b1 erer èreront/n'q' erer
SFX b1 eser èseront/n'q' eser
SFX b1 ever èveront/n'q' ever
SFX b1 evrer èvreront/n'q' evrer
SFX b1 eter èteront/n'q' eter
SFX b1 eler èleront/n'q' eler
SFX b1 ecer ècerais/n'j' ecer
SFX b1 emer èmerais/n'j' emer
SFX b1 ener ènerais/n'j' ener
SFX b1 eper èperais/n'j' eper
SFX b1 erer èrerais/n'j' erer
SFX b1 eser èserais/n'j' eser
SFX b1 ever èverais/n'j' ever
SFX b1 evrer èvrerais/n'j' evrer
SFX b1 eter èterais/n'j' eter
SFX b1 eler èlerais/n' eler
SFX b1 ecer ècerait/n'q' ecer
SFX b1 emer èmerait/n'q' emer
SFX b1 ener ènerait/n'q' ener
SFX b1 eper èperait/n'q' eper
SFX b1 erer èrerait/n'q' erer
SFX b1 eser èserait/n'q' eser
SFX b1 ever èverait/n'q' ever
SFX b1 evrer èvrerait/n'q' evrer
SFX b1 eter èterait/n'q' eter
SFX b1 eler èlerait/n'q' eler
SFX b1 ecer ècerions/n' ecer
SFX b1 emer èmerions/n' emer
SFX b1 ener ènerions/n' ener
SFX b1 eper èperions/n' eper
SFX b1 erer èrerions/n' erer
SFX b1 eser èserions/n' eser
SFX b1 ever èverions/n' ever
SFX b1 evrer èvrerions/n' evrer
SFX b1 eter èterions/n' eter
SFX b1 eler èlerions/n' eler
SFX b1 ecer èceriez/n' ecer
SFX b1 emer èmeriez/n' emer
SFX b1 ener èneriez/n' ener
SFX b1 eper èperiez/n' eper
SFX b1 erer èreriez/n' erer
SFX b1 eser èseriez/n' eser
SFX b1 ever èveriez/n' ever
SFX b1 evrer èvreriez/n' evrer
SFX b1 eter èteriez/n' eter
SFX b1 eler èleriez/n' eler
SFX b1 ecer èceraient/n'q' ecer
SFX b1 emer èmeraient/n'q' emer
SFX b1 ener èneraient/n'q' ener
SFX b1 eper èperaient/n'q' eper
SFX b1 erer èreraient/n'q' erer
SFX b1 eser èseraient/n'q' eser
SFX b1 ever èveraient/n'q' ever
SFX b1 evrer èvreraient/n'q' evrer
SFX b1 eter èteraient/n'q' eter
SFX b1 eler èleraient/n'q' eler
SFX b1 er asse/n'j' [^c]er
SFX b1 cer çasse/n'j' cer
SFX b1 er asses/n' [^c]er
SFX b1 cer çasses/n' cer
SFX b1 er ât/n'q' [^c]er
SFX b1 cer çât/n'q' cer
SFX b1 er assions/n' [^c]er
SFX b1 cer çassions/n' cer
SFX b1 er assiez/n' [^c]er
SFX b1 cer çassiez/n' cer
SFX b1 er assent/n'q' [^c]er
SFX b1 cer çassent/n'q' cer
SFX b1 ecer èce/n' ecer
SFX b1 emer ème/n' emer
SFX b1 ener ène/n' ener
SFX b1 eper èpe/n' eper
SFX b1 erer ère/n' erer
SFX b1 eser èse/n' eser
SFX b1 ever ève/n' ever
SFX b1 evrer èvre/n' evrer
SFX b1 eter ète/n' eter
SFX b1 eler èle/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b2 Y 190
SFX b2 er er/n'q'd'l'm't's' er
SFX b2 er ant/n'q'l'm't's' [^c]er
SFX b2 cer çant/n'q'l'm't's' cer
SFX b2 ecer èce/n'q'j'l'm't's' ecer
SFX b2 emer ème/n'q'j'l'm't's' emer
SFX b2 ener ène/n'q'j'l'm't's' ener
SFX b2 eper èpe/n'q'j'l'm't's' eper
SFX b2 erer ère/n'q'j'l'm't's' erer
SFX b2 eser èse/n'q'j'l'm't's' eser
SFX b2 ever ève/n'q'j'l'm't's' ever
SFX b2 evrer èvre/n'q'j'l'm't's' evrer
SFX b2 eter ète/n'q'j'l'm't's' eter
SFX b2 eler èle/n'q'j'l'm't's' eler
SFX b2 ecer èces/n'q'l'm' ecer
SFX b2 emer èmes/n'q'l'm' emer
SFX b2 ener ènes/n'q'l'm' ener
SFX b2 eper èpes/n'q'l'm' eper
SFX b2 erer ères/n'q'l'm' erer
SFX b2 eser èses/n'q'l'm' eser
SFX b2 ever èves/n'q'l'm' ever
SFX b2 evrer èvres/n'q'l'm' evrer
SFX b2 eter ètes/n'q'l'm' eter
SFX b2 eler èles/n'q'l'm' eler
SFX b2 er ons/n'q'l't' [^c]er
SFX b2 cer çons/n'q'l't' cer
SFX b2 er ez/n'q'l'm' er
SFX b2 ecer ècent/n'q'l'm't's' ecer
SFX b2 emer èment/n'q'l'm't's' emer
SFX b2 ener ènent/n'q'l'm't's' ener
SFX b2 eper èpent/n'q'l'm't's' eper
SFX b2 erer èrent/n'q'l'm't's' erer
SFX b2 eser èsent/n'q'l'm't's' eser
SFX b2 ever èvent/n'q'l'm't's' ever
SFX b2 evrer èvrent/n'q'l'm't's' evrer
SFX b2 eter ètent/n'q'l'm't's' eter
SFX b2 eler èlent/n'q'l'm't's' eler
SFX b2 er ais/n'q'j'l'm't' [^c]er
SFX b2 cer çais/n'q'j'l'm't' cer
SFX b2 er ait/n'q'l'm't's' [^c]er
SFX b2 cer çait/n'q'l'm't's' cer
SFX b2 er ions/n'q'l't' er
SFX b2 er iez/n'q'l'm' er
SFX b2 er aient/n'q'l'm't's' [^c]er
SFX b2 cer çaient/n'q'l'm't's' cer
SFX b2 er ai/n'q'j'l't' [^c]er
SFX b2 cer çai/n'q'j'l't' cer
SFX b2 er as/n'q'l'm' [^c]er
SFX b2 cer ças/n'q'l'm' cer
SFX b2 er a/n'q'l'm't's' [^c]er
SFX b2 cer ça/n'q'l'm't's' cer
SFX b2 er âmes/n'q'l't' [^c]er
SFX b2 cer çâmes/n'q'l't' cer
SFX b2 er âtes/n'q'l'm' [^c]er
SFX b2 cer çâtes/n'q'l'm' cer
SFX b2 er èrent/n'q'l'm't's' er
SFX b2 ecer ècerai/n'q'j'l't' ecer
SFX b2 emer èmerai/n'q'j'l't' emer
SFX b2 ener ènerai/n'q'j'l't' ener
SFX b2 eper èperai/n'q'j'l't' eper
SFX b2 erer èrerai/n'q'j'l't' erer
SFX b2 eser èserai/n'q'j'l't' eser
SFX b2 ever èverai/n'q'j'l't' ever
SFX b2 evrer èvrerai/n'q'j'l't' evrer
SFX b2 eter èterai/n'q'j'l't' eter
SFX b2 eler èlerai/n'q'j'l't' eler
SFX b2 ecer èceras/n'q'l'm' ecer
SFX b2 emer èmeras/n'q'l'm' emer
SFX b2 ener èneras/n'q'l'm' ener
SFX b2 eper èperas/n'q'l'm' eper
SFX b2 erer èreras/n'q'l'm' erer
SFX b2 eser èseras/n'q'l'm' eser
SFX b2 ever èveras/n'q'l'm' ever
SFX b2 evrer èvreras/n'q'l'm' evrer
SFX b2 eter èteras/n'q'l'm' eter
SFX b2 eler èleras/n'q'l'm' eler
SFX b2 ecer ècera/n'q'l'm't's' ecer
SFX b2 emer èmera/n'q'l'm't's' emer
SFX b2 ener ènera/n'q'l'm't's' ener
SFX b2 eper èpera/n'q'l'm't's' eper
SFX b2 erer èrera/n'q'l'm't's' erer
SFX b2 eser èsera/n'q'l'm't's' eser
SFX b2 ever èvera/n'q'l'm't's' ever
SFX b2 evrer èvrera/n'q'l'm't's' evrer
SFX b2 eter ètera/n'q'l'm't's' eter
SFX b2 eler èlera/n'q'l'm't's' eler
SFX b2 ecer ècerons/n'q'l't' ecer
SFX b2 emer èmerons/n'q'l't' emer
SFX b2 ener ènerons/n'q'l't' ener
SFX b2 eper èperons/n'q'l't' eper
SFX b2 erer èrerons/n'q'l't' erer
SFX b2 eser èserons/n'q'l't' eser
SFX b2 ever èverons/n'q'l't' ever
SFX b2 evrer èvrerons/n'q'l't' evrer
SFX b2 eter èterons/n'q'l't' eter
SFX b2 eler èlerons/n'q'l't' eler
SFX b2 ecer ècerez/n'q'l'm' ecer
SFX b2 emer èmerez/n'q'l'm' emer
SFX b2 ener ènerez/n'q'l'm' ener
SFX b2 eper èperez/n'q'l'm' eper
SFX b2 erer èrerez/n'q'l'm' erer
SFX b2 eser èserez/n'q'l'm' eser
SFX b2 ever èverez/n'q'l'm' ever
SFX b2 evrer èvrerez/n'q'l'm' evrer
SFX b2 eter èterez/n'q'l'm' eter
SFX b2 eler èlerez/n'q'l'm' eler
SFX b2 ecer èceront/n'q'l'm't's' ecer
SFX b2 emer èmeront/n'q'l'm't's' emer
SFX b2 ener èneront/n'q'l'm't's' ener
SFX b2 eper èperont/n'q'l'm't's' eper
SFX b2 erer èreront/n'q'l'm't's' erer
SFX b2 eser èseront/n'q'l'm't's' eser
SFX b2 ever èveront/n'q'l'm't's' ever
SFX b2 evrer èvreront/n'q'l'm't's' evrer
SFX b2 eter èteront/n'q'l'm't's' eter
SFX b2 eler èleront/n'q'l'm't's' eler
SFX b2 ecer ècerais/n'q'j'l'm't' ecer
SFX b2 emer èmerais/n'q'j'l'm't' emer
SFX b2 ener ènerais/n'q'j'l'm't' ener
SFX b2 eper èperais/n'q'j'l'm't' eper
SFX b2 erer èrerais/n'q'j'l'm't' erer
SFX b2 eser èserais/n'q'j'l'm't' eser
SFX b2 ever èverais/n'q'j'l'm't' ever
SFX b2 evrer èvrerais/n'q'j'l'm't' evrer
SFX b2 eter èterais/n'q'j'l'm't' eter
SFX b2 eler èlerais/n'q'j'l'm't' eler
SFX b2 ecer ècerait/n'q'l'm't's' ecer
SFX b2 emer èmerait/n'q'l'm't's' emer
SFX b2 ener ènerait/n'q'l'm't's' ener
SFX b2 eper èperait/n'q'l'm't's' eper
SFX b2 erer èrerait/n'q'l'm't's' erer
SFX b2 eser èserait/n'q'l'm't's' eser
SFX b2 ever èverait/n'q'l'm't's' ever
SFX b2 evrer èvrerait/n'q'l'm't's' evrer
SFX b2 eter èterait/n'q'l'm't's' eter
SFX b2 eler èlerait/n'q'l'm't's' eler
SFX b2 ecer ècerions/n'q'l't' ecer
SFX b2 emer èmerions/n'q'l't' emer
SFX b2 ener ènerions/n'q'l't' ener
SFX b2 eper èperions/n'q'l't' eper
SFX b2 erer èrerions/n'q'l't' erer
SFX b2 eser èserions/n'q'l't' eser
SFX b2 ever èverions/n'q'l't' ever
SFX b2 evrer èvrerions/n'q'l't' evrer
SFX b2 eter èterions/n'q'l't' eter
SFX b2 eler èlerions/n'q'l't' eler
SFX b2 ecer èceriez/n'q'l'm' ecer
SFX b2 emer èmeriez/n'q'l'm' emer
SFX b2 ener èneriez/n'q'l'm' ener
SFX b2 eper èperiez/n'q'l'm' eper
SFX b2 erer èreriez/n'q'l'm' erer
SFX b2 eser èseriez/n'q'l'm' eser
SFX b2 ever èveriez/n'q'l'm' ever
SFX b2 evrer èvreriez/n'q'l'm' evrer
SFX b2 eter èteriez/n'q'l'm' eter
SFX b2 eler èleriez/n'q'l'm' eler
SFX b2 ecer èceraient/n'q'l'm't's' ecer
SFX b2 emer èmeraient/n'q'l'm't's' emer
SFX b2 ener èneraient/n'q'l'm't's' ener
SFX b2 eper èperaient/n'q'l'm't's' eper
SFX b2 erer èreraient/n'q'l'm't's' erer
SFX b2 eser èseraient/n'q'l'm't's' eser
SFX b2 ever èveraient/n'q'l'm't's' ever
SFX b2 evrer èvreraient/n'q'l'm't's' evrer
SFX b2 eter èteraient/n'q'l'm't's' eter
SFX b2 eler èleraient/n'q'l'm't's' eler
SFX b2 er asse/n'q'j'l't' [^c]er
SFX b2 cer çasse/n'q'j'l't' cer
SFX b2 er asses/n'q'l'm' [^c]er
SFX b2 cer çasses/n'q'l'm' cer
SFX b2 er ât/n'q'l'm't's' [^c]er
SFX b2 cer çât/n'q'l'm't's' cer
SFX b2 er assions/n'q'l't' [^c]er
SFX b2 cer çassions/n'q'l't' cer
SFX b2 er assiez/n'q'l'm' [^c]er
SFX b2 cer çassiez/n'q'l'm' cer
SFX b2 er assent/n'q'l'm't's' [^c]er
SFX b2 cer çassent/n'q'l'm't's' cer
SFX b2 ecer èce/n'l'm' ecer
SFX b2 emer ème/n'l'm' emer
SFX b2 ener ène/n'l'm' ener
SFX b2 eper èpe/n'l'm' eper
SFX b2 erer ère/n'l'm' erer
SFX b2 eser èse/n'l'm' eser
SFX b2 ever ève/n'l'm' ever
SFX b2 evrer èvre/n'l'm' evrer
SFX b2 eter ète/n'l'm' eter
SFX b2 eler èle/n'l'm' eler
SFX b2 er ons/n'l' [^c]er
SFX b2 cer çons/n'l' cer
SFX b2 er ez/n'l'm' er
SFX b3 Y 190
SFX b3 er er/m't's' er
SFX b3 er ant/m't's' [^c]er
SFX b3 cer çant/m't's' cer
SFX b3 ecer èce/m's' ecer
SFX b3 emer ème/m's' emer
SFX b3 ener ène/m's' ener
SFX b3 eper èpe/m's' eper
SFX b3 erer ère/m's' erer
SFX b3 eser èse/m's' eser
SFX b3 ever ève/m's' ever
SFX b3 evrer èvre/m's' evrer
SFX b3 eter ète/m's' eter
SFX b3 eler èle/m's' eler
SFX b3 ecer èces/t' ecer
SFX b3 emer èmes/t' emer
SFX b3 ener ènes/t' ener
SFX b3 eper èpes/t' eper
SFX b3 erer ères/t' erer
SFX b3 eser èses/t' eser
SFX b3 ever èves/t' ever
SFX b3 evrer èvres/t' evrer
SFX b3 eter ètes/t' eter
SFX b3 eler èles/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b3 ecer ècent/s' ecer
SFX b3 emer èment/s' emer
SFX b3 ener ènent/s' ener
SFX b3 eper èpent/s' eper
SFX b3 erer èrent/s' erer
SFX b3 eser èsent/s' eser
SFX b3 ever èvent/s' ever
SFX b3 evrer èvrent/s' evrer
SFX b3 eter ètent/s' eter
SFX b3 eler èlent/s' eler
SFX b3 er ais/m't' [^c]er
SFX b3 cer çais/m't' cer
SFX b3 er ait/s' [^c]er
SFX b3 cer çait/s' cer
SFX b3 er ions er
SFX b3 er iez er
SFX b3 er aient/s' [^c]er
SFX b3 cer çaient/s' cer
SFX b3 er ai/m' [^c]er
SFX b3 cer çai/m' cer
SFX b3 er as/t' [^c]er
SFX b3 cer ças/t' cer
SFX b3 er a/s' [^c]er
SFX b3 cer ça/s' cer
SFX b3 er âmes [^c]er
SFX b3 cer çâmes cer
SFX b3 er âtes [^c]er
SFX b3 cer çâtes cer
SFX b3 er èrent/s' er
SFX b3 ecer ècerai/m' ecer
SFX b3 emer èmerai/m' emer
SFX b3 ener ènerai/m' ener
SFX b3 eper èperai/m' eper
SFX b3 erer èrerai/m' erer
SFX b3 eser èserai/m' eser
SFX b3 ever èverai/m' ever
SFX b3 evrer èvrerai/m' evrer
SFX b3 eter èterai/m' eter
SFX b3 eler èlerai/m' eler
SFX b3 ecer èceras/t' ecer
SFX b3 emer èmeras/t' emer
SFX b3 ener èneras/t' ener
SFX b3 eper èperas/t' eper
SFX b3 erer èreras/t' erer
SFX b3 eser èseras/t' eser
SFX b3 ever èveras/t' ever
SFX b3 evrer èvreras/t' evrer
SFX b3 eter èteras/t' eter
SFX b3 eler èleras/t' eler
SFX b3 ecer ècera/s' ecer
SFX b3 emer èmera/s' emer
SFX b3 ener ènera/s' ener
SFX b3 eper èpera/s' eper
SFX b3 erer èrera/s' erer
SFX b3 eser èsera/s' eser
SFX b3 ever èvera/s' ever
SFX b3 evrer èvrera/s' evrer
SFX b3 eter ètera/s' eter
SFX b3 eler èlera/s' eler
SFX b3 ecer ècerons ecer
SFX b3 emer èmerons emer
SFX b3 ener ènerons ener
SFX b3 eper èperons eper
SFX b3 erer èrerons erer
SFX b3 eser èserons eser
SFX b3 ever èverons ever
SFX b3 evrer èvrerons evrer
SFX b3 eter èterons eter
SFX b3 eler èlerons eler
SFX b3 ecer ècerez ecer
SFX b3 emer èmerez emer
SFX b3 ener ènerez ener
SFX b3 eper èperez eper
SFX b3 erer èrerez erer
SFX b3 eser èserez eser
SFX b3 ever èverez ever
SFX b3 evrer èvrerez evrer
SFX b3 eter èterez eter
SFX b3 eler èlerez eler
SFX b3 ecer èceront/s' ecer
SFX b3 emer èmeront/s' emer
SFX b3 ener èneront/s' ener
SFX b3 eper èperont/s' eper
SFX b3 erer èreront/s' erer
SFX b3 eser èseront/s' eser
SFX b3 ever èveront/s' ever
SFX b3 evrer èvreront/s' evrer
SFX b3 eter èteront/s' eter
SFX b3 eler èleront/s' eler
SFX b3 ecer ècerais/m't' ecer
SFX b3 emer èmerais/m't' emer
SFX b3 ener ènerais/m't' ener
SFX b3 eper èperais/m't' eper
SFX b3 erer èrerais/m't' erer
SFX b3 eser èserais/m't' eser
SFX b3 ever èverais/m't' ever
SFX b3 evrer èvrerais/m't' evrer
SFX b3 eter èterais/m't' eter
SFX b3 eler èlerais/m't' eler
SFX b3 ecer ècerait/s' ecer
SFX b3 emer èmerait/s' emer
SFX b3 ener ènerait/s' ener
SFX b3 eper èperait/s' eper
SFX b3 erer èrerait/s' erer
SFX b3 eser èserait/s' eser
SFX b3 ever èverait/s' ever
SFX b3 evrer èvrerait/s' evrer
SFX b3 eter èterait/s' eter
SFX b3 eler èlerait/s' eler
SFX b3 ecer ècerions ecer
SFX b3 emer èmerions emer
SFX b3 ener ènerions ener
SFX b3 eper èperions eper
SFX b3 erer èrerions erer
SFX b3 eser èserions eser
SFX b3 ever èverions ever
SFX b3 evrer èvrerions evrer
SFX b3 eter èterions eter
SFX b3 eler èlerions eler
SFX b3 ecer èceriez ecer
SFX b3 emer èmeriez emer
SFX b3 ener èneriez ener
SFX b3 eper èperiez eper
SFX b3 erer èreriez erer
SFX b3 eser èseriez eser
SFX b3 ever èveriez ever
SFX b3 evrer èvreriez evrer
SFX b3 eter èteriez eter
SFX b3 eler èleriez eler
SFX b3 ecer èceraient/s' ecer
SFX b3 emer èmeraient/s' emer
SFX b3 ener èneraient/s' ener
SFX b3 eper èperaient/s' eper
SFX b3 erer èreraient/s' erer
SFX b3 eser èseraient/s' eser
SFX b3 ever èveraient/s' ever
SFX b3 evrer èvreraient/s' evrer
SFX b3 eter èteraient/s' eter
SFX b3 eler èleraient/s' eler
SFX b3 er asse/m' [^c]er
SFX b3 cer çasse/m' cer
SFX b3 er asses/t' [^c]er
SFX b3 cer çasses/t' cer
SFX b3 er ât/s' [^c]er
SFX b3 cer çât/s' cer
SFX b3 er assions [^c]er
SFX b3 cer çassions cer
SFX b3 er assiez [^c]er
SFX b3 cer çassiez cer
SFX b3 er assent/s' [^c]er
SFX b3 cer çassent/s' cer
SFX b3 ecer èce/t' ecer
SFX b3 emer ème/t' emer
SFX b3 ener ène/t' ener
SFX b3 eper èpe/t' eper
SFX b3 erer ère/t' erer
SFX b3 eser èse/t' eser
SFX b3 ever ève/t' ever
SFX b3 evrer èvre/t' evrer
SFX b3 eter ète/t' eter
SFX b3 eler èle/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b4 Y 190
SFX b4 er er/n'q'd'l'm't's' er
SFX b4 er ant/n'q'l'm't's' [^c]er
SFX b4 cer çant/n'q'l'm't's' cer
SFX b4 ecer èce/n'q'j'l'm't's' ecer
SFX b4 emer ème/n'q'j'l'm't's' emer
SFX b4 ener ène/n'q'j'l'm't's' ener
SFX b4 eper èpe/n'q'j'l'm't's' eper
SFX b4 erer ère/n'q'j'l'm't's' erer
SFX b4 eser èse/n'q'j'l'm't's' eser
SFX b4 ever ève/n'q'j'l'm't's' ever
SFX b4 evrer èvre/n'q'j'l'm't's' evrer
SFX b4 eter ète/n'q'j'l'm't's' eter
SFX b4 eler èle/n'q'j'l'm't's' eler
SFX b4 ecer èces/n'q'l'm't' ecer
SFX b4 emer èmes/n'q'l'm't' emer
SFX b4 ener ènes/n'q'l'm't' ener
SFX b4 eper èpes/n'q'l'm't' eper
SFX b4 erer ères/n'q'l'm't' erer
SFX b4 eser èses/n'q'l'm't' eser
SFX b4 ever èves/n'q'l'm't' ever
SFX b4 evrer èvres/n'q'l'm't' evrer
SFX b4 eter ètes/n'q'l'm't' eter
SFX b4 eler èles/n'q'l'm't' eler
SFX b4 er ons/n'q'l't' [^c]er
SFX b4 cer çons/n'q'l't' cer
SFX b4 er ez/n'q'l'm' er
SFX b4 ecer ècent/n'q'l'm't's' ecer
SFX b4 emer èment/n'q'l'm't's' emer
SFX b4 ener ènent/n'q'l'm't's' ener
SFX b4 eper èpent/n'q'l'm't's' eper
SFX b4 erer èrent/n'q'l'm't's' erer
SFX b4 eser èsent/n'q'l'm't's' eser
SFX b4 ever èvent/n'q'l'm't's' ever
SFX b4 evrer èvrent/n'q'l'm't's' evrer
SFX b4 eter ètent/n'q'l'm't's' eter
SFX b4 eler èlent/n'q'l'm't's' eler
SFX b4 er ais/n'q'j'l'm't' [^c]er
SFX b4 cer çais/n'q'j'l'm't' cer
SFX b4 er ait/n'q'l'm't's' [^c]er
SFX b4 cer çait/n'q'l'm't's' cer
SFX b4 er ions/n'q'l't' er
SFX b4 er iez/n'q'l'm' er
SFX b4 er aient/n'q'l'm't's' [^c]er
SFX b4 cer çaient/n'q'l'm't's' cer
SFX b4 er ai/n'q'j'l'm't' [^c]er
SFX b4 cer çai/n'q'j'l'm't' cer
SFX b4 er as/n'q'l'm't' [^c]er
SFX b4 cer ças/n'q'l'm't' cer
SFX b4 er a/n'q'l'm't's' [^c]er
SFX b4 cer ça/n'q'l'm't's' cer
SFX b4 er âmes/n'q'l't' [^c]er
SFX b4 cer çâmes/n'q'l't' cer
SFX b4 er âtes/n'q'l'm' [^c]er
SFX b4 cer çâtes/n'q'l'm' cer
SFX b4 er èrent/n'q'l'm't's' er
SFX b4 ecer ècerai/n'q'j'l'm't' ecer
SFX b4 emer èmerai/n'q'j'l'm't' emer
SFX b4 ener ènerai/n'q'j'l'm't' ener
SFX b4 eper èperai/n'q'j'l'm't' eper
SFX b4 erer èrerai/n'q'j'l'm't' erer
SFX b4 eser èserai/n'q'j'l'm't' eser
SFX b4 ever èverai/n'q'j'l'm't' ever
SFX b4 evrer èvrerai/n'q'j'l'm't' evrer
SFX b4 eter èterai/n'q'j'l'm't' eter
SFX b4 eler èlerai/n'q'j'l'm't' eler
SFX b4 ecer èceras/n'q'l'm't' ecer
SFX b4 emer èmeras/n'q'l'm't' emer
SFX b4 ener èneras/n'q'l'm't' ener
SFX b4 eper èperas/n'q'l'm't' eper
SFX b4 erer èreras/n'q'l'm't' erer
SFX b4 eser èseras/n'q'l'm't' eser
SFX b4 ever èveras/n'q'l'm't' ever
SFX b4 evrer èvreras/n'q'l'm't' evrer
SFX b4 eter èteras/n'q'l'm't' eter
SFX b4 eler èleras/n'q'l'm't' eler
SFX b4 ecer ècera/n'q'l'm't's' ecer
SFX b4 emer èmera/n'q'l'm't's' emer
SFX b4 ener ènera/n'q'l'm't's' ener
SFX b4 eper èpera/n'q'l'm't's' eper
SFX b4 erer èrera/n'q'l'm't's' erer
SFX b4 eser èsera/n'q'l'm't's' eser
SFX b4 ever èvera/n'q'l'm't's' ever
SFX b4 evrer èvrera/n'q'l'm't's' evrer
SFX b4 eter ètera/n'q'l'm't's' eter
SFX b4 eler èlera/n'q'l'm't's' eler
SFX b4 ecer ècerons/n'q'l't' ecer
SFX b4 emer èmerons/n'q'l't' emer
SFX b4 ener ènerons/n'q'l't' ener
SFX b4 eper èperons/n'q'l't' eper
SFX b4 erer èrerons/n'q'l't' erer
SFX b4 eser èserons/n'q'l't' eser
SFX b4 ever èverons/n'q'l't' ever
SFX b4 evrer èvrerons/n'q'l't' evrer
SFX b4 eter èterons/n'q'l't' eter
SFX b4 eler èlerons/n'q'l't' eler
SFX b4 ecer ècerez/n'q'l'm' ecer
SFX b4 emer èmerez/n'q'l'm' emer
SFX b4 ener ènerez/n'q'l'm' ener
SFX b4 eper èperez/n'q'l'm' eper
SFX b4 erer èrerez/n'q'l'm' erer
SFX b4 eser èserez/n'q'l'm' eser
SFX b4 ever èverez/n'q'l'm' ever
SFX b4 evrer èvrerez/n'q'l'm' evrer
SFX b4 eter èterez/n'q'l'm' eter
SFX b4 eler èlerez/n'q'l'm' eler
SFX b4 ecer èceront/n'q'l'm't's' ecer
SFX b4 emer èmeront/n'q'l'm't's' emer
SFX b4 ener èneront/n'q'l'm't's' ener
SFX b4 eper èperont/n'q'l'm't's' eper
SFX b4 erer èreront/n'q'l'm't's' erer
SFX b4 eser èseront/n'q'l'm't's' eser
SFX b4 ever èveront/n'q'l'm't's' ever
SFX b4 evrer èvreront/n'q'l'm't's' evrer
SFX b4 eter èteront/n'q'l'm't's' eter
SFX b4 eler èleront/n'q'l'm't's' eler
SFX b4 ecer ècerais/n'q'j'l'm't' ecer
SFX b4 emer èmerais/n'q'j'l'm't' emer
SFX b4 ener ènerais/n'q'j'l'm't' ener
SFX b4 eper èperais/n'q'j'l'm't' eper
SFX b4 erer èrerais/n'q'j'l'm't' erer
SFX b4 eser èserais/n'q'j'l'm't' eser
SFX b4 ever èverais/n'q'j'l'm't' ever
SFX b4 evrer èvrerais/n'q'j'l'm't' evrer
SFX b4 eter èterais/n'q'j'l'm't' eter
SFX b4 eler èlerais/n'q'j'l'm't' eler
SFX b4 ecer ècerait/n'q'l'm't's' ecer
SFX b4 emer èmerait/n'q'l'm't's' emer
SFX b4 ener ènerait/n'q'l'm't's' ener
SFX b4 eper èperait/n'q'l'm't's' eper
SFX b4 erer èrerait/n'q'l'm't's' erer
SFX b4 eser èserait/n'q'l'm't's' eser
SFX b4 ever èverait/n'q'l'm't's' ever
SFX b4 evrer èvrerait/n'q'l'm't's' evrer
SFX b4 eter èterait/n'q'l'm't's' eter
SFX b4 eler èlerait/n'q'l'm't's' eler
SFX b4 ecer ècerions/n'q'l't' ecer
SFX b4 emer èmerions/n'q'l't' emer
SFX b4 ener ènerions/n'q'l't' ener
SFX b4 eper èperions/n'q'l't' eper
SFX b4 erer èrerions/n'q'l't' erer
SFX b4 eser èserions/n'q'l't' eser
SFX b4 ever èverions/n'q'l't' ever
SFX b4 evrer èvrerions/n'q'l't' evrer
SFX b4 eter èterions/n'q'l't' eter
SFX b4 eler èlerions/n'q'l't' eler
SFX b4 ecer èceriez/n'q'l'm' ecer
SFX b4 emer èmeriez/n'q'l'm' emer
SFX b4 ener èneriez/n'q'l'm' ener
SFX b4 eper èperiez/n'q'l'm' eper
SFX b4 erer èreriez/n'q'l'm' erer
SFX b4 eser èseriez/n'q'l'm' eser
SFX b4 ever èveriez/n'q'l'm' ever
SFX b4 evrer èvreriez/n'q'l'm' evrer
SFX b4 eter èteriez/n'q'l'm' eter
SFX b4 eler èleriez/n'q'l'm' eler
SFX b4 ecer èceraient/n'q'l'm't's' ecer
SFX b4 emer èmeraient/n'q'l'm't's' emer
SFX b4 ener èneraient/n'q'l'm't's' ener
SFX b4 eper èperaient/n'q'l'm't's' eper
SFX b4 erer èreraient/n'q'l'm't's' erer
SFX b4 eser èseraient/n'q'l'm't's' eser
SFX b4 ever èveraient/n'q'l'm't's' ever
SFX b4 evrer èvreraient/n'q'l'm't's' evrer
SFX b4 eter èteraient/n'q'l'm't's' eter
SFX b4 eler èleraient/n'q'l'm't's' eler
SFX b4 er asse/n'q'j'l'm't' [^c]er
SFX b4 cer çasse/n'q'j'l'm't' cer
SFX b4 er asses/n'q'l'm't' [^c]er
SFX b4 cer çasses/n'q'l'm't' cer
SFX b4 er ât/n'q'l'm't's' [^c]er
SFX b4 cer çât/n'q'l'm't's' cer
SFX b4 er assions/n'q'l't' [^c]er
SFX b4 cer çassions/n'q'l't' cer
SFX b4 er assiez/n'q'l'm' [^c]er
SFX b4 cer çassiez/n'q'l'm' cer
SFX b4 er assent/n'q'l'm't's' [^c]er
SFX b4 cer çassent/n'q'l'm't's' cer
SFX b4 ecer èce/n'l'm't' ecer
SFX b4 emer ème/n'l'm't' emer
SFX b4 ener ène/n'l'm't' ener
SFX b4 eper èpe/n'l'm't' eper
SFX b4 erer ère/n'l'm't' erer
SFX b4 eser èse/n'l'm't' eser
SFX b4 ever ève/n'l'm't' ever
SFX b4 evrer èvre/n'l'm't' evrer
SFX b4 eter ète/n'l'm't' eter
SFX b4 eler èle/n'l'm't' eler
SFX b4 er ons/n'l' [^c]er
SFX b4 cer çons/n'l' cer
SFX b4 er ez/n'l'm' er
SFX b5 Y 190
SFX b5 er er/n'q'd'm't's' er
SFX b5 er ant/n'q'm't's' [^c]er
SFX b5 cer çant/n'q'm't's' cer
SFX b5 ecer èce/n'q'j'm't's' ecer
SFX b5 emer ème/n'q'j'm't's' emer
SFX b5 ener ène/n'q'j'm't's' ener
SFX b5 eper èpe/n'q'j'm't's' eper
SFX b5 erer ère/n'q'j'm't's' erer
SFX b5 eser èse/n'q'j'm't's' eser
SFX b5 ever ève/n'q'j'm't's' ever
SFX b5 evrer èvre/n'q'j'm't's' evrer
SFX b5 eter ète/n'q'j'm't's' eter
SFX b5 eler èle/n'q'j'm't's' eler
SFX b5 ecer èces/n'm't' ecer
SFX b5 emer èmes/n'm't' emer
SFX b5 ener ènes/n'm't' ener
SFX b5 eper èpes/n'm't' eper
SFX b5 erer ères/n'm't' erer
SFX b5 eser èses/n'm't' eser
SFX b5 ever èves/n'm't' ever
SFX b5 evrer èvres/n'm't' evrer
SFX b5 eter ètes/n'm't' eter
SFX b5 eler èles/n'm't' eler
SFX b5 er ons/n't' [^c]er
SFX b5 cer çons/n't' cer
SFX b5 er ez/n'm' er
SFX b5 ecer ècent/n'q'm't's' ecer
SFX b5 emer èment/n'q'm't's' emer
SFX b5 ener ènent/n'q'm't's' ener
SFX b5 eper èpent/n'q'm't's' eper
SFX b5 erer èrent/n'q'm't's' erer
SFX b5 eser èsent/n'q'm't's' eser
SFX b5 ever èvent/n'q'm't's' ever
SFX b5 evrer èvrent/n'q'm't's' evrer
SFX b5 eter ètent/n'q'm't's' eter
SFX b5 eler èlent/n'q'm't's' eler
SFX b5 er ais/n'j'm't' [^c]er
SFX b5 cer çais/n'j'm't' cer
SFX b5 er ait/n'q'm't's' [^c]er
SFX b5 cer çait/n'q'm't's' cer
SFX b5 er ions/n't' er
SFX b5 er iez/n'm' er
SFX b5 er aient/n'q'm't's' [^c]er
SFX b5 cer çaient/n'q'm't's' cer
SFX b5 er ai/n'j'm't' [^c]er
SFX b5 cer çai/n'j'm't' cer
SFX b5 er as/n'm't' [^c]er
SFX b5 cer ças/n'm't' cer
SFX b5 er a/n'q'm't's' [^c]er
SFX b5 cer ça/n'q'm't's' cer
SFX b5 er âmes/n't' [^c]er
SFX b5 cer çâmes/n't' cer
SFX b5 er âtes/n'm' [^c]er
SFX b5 cer çâtes/n'm' cer
SFX b5 er èrent/n'q'm't's' er
SFX b5 ecer ècerai/n'j'm't' ecer
SFX b5 emer èmerai/n'j'm't' emer
SFX b5 ener ènerai/n'j'm't' ener
SFX b5 eper èperai/n'j'm't' eper
SFX b5 erer èrerai/n'j'm't' erer
SFX b5 eser èserai/n'j'm't' eser
SFX b5 ever èverai/n'j'm't' ever
SFX b5 evrer èvrerai/n'j'm't' evrer
SFX b5 eter èterai/n'j'm't' eter
SFX b5 eler èlerai/n'j'm't' eler
SFX b5 ecer èceras/n'm't' ecer
SFX b5 emer èmeras/n'm't' emer
SFX b5 ener èneras/n'm't' ener
SFX b5 eper èperas/n'm't' eper
SFX b5 erer èreras/n'm't' erer
SFX b5 eser èseras/n'm't' eser
SFX b5 ever èveras/n'm't' ever
SFX b5 evrer èvreras/n'm't' evrer
SFX b5 eter èteras/n'm't' eter
SFX b5 eler èleras/n'm't' eler
SFX b5 ecer ècera/n'q'm't's' ecer
SFX b5 emer èmera/n'q'm't's' emer
SFX b5 ener ènera/n'q'm't's' ener
SFX b5 eper èpera/n'q'm't's' eper
SFX b5 erer èrera/n'q'm't's' erer
SFX b5 eser èsera/n'q'm't's' eser
SFX b5 ever èvera/n'q'm't's' ever
SFX b5 evrer èvrera/n'q'm't's' evrer
SFX b5 eter ètera/n'q'm't's' eter
SFX b5 eler èlera/n'q'm't's' eler
SFX b5 ecer ècerons/n't' ecer
SFX b5 emer èmerons/n't' emer
SFX b5 ener ènerons/n't' ener
SFX b5 eper èperons/n't' eper
SFX b5 erer èrerons/n't' erer
SFX b5 eser èserons/n't' eser
SFX b5 ever èverons/n't' ever
SFX b5 evrer èvrerons/n't' evrer
SFX b5 eter èterons/n't' eter
SFX b5 eler èlerons/n't' eler
SFX b5 ecer ècerez/n'm' ecer
SFX b5 emer èmerez/n'm' emer
SFX b5 ener ènerez/n'm' ener
SFX b5 eper èperez/n'm' eper
SFX b5 erer èrerez/n'm' erer
SFX b5 eser èserez/n'm' eser
SFX b5 ever èverez/n'm' ever
SFX b5 evrer èvrerez/n'm' evrer
SFX b5 eter èterez/n'm' eter
SFX b5 eler èlerez/n'm' eler
SFX b5 ecer èceront/n'q'm't's' ecer
SFX b5 emer èmeront/n'q'm't's' emer
SFX b5 ener èneront/n'q'm't's' ener
SFX b5 eper èperont/n'q'm't's' eper
SFX b5 erer èreront/n'q'm't's' erer
SFX b5 eser èseront/n'q'm't's' eser
SFX b5 ever èveront/n'q'm't's' ever
SFX b5 evrer èvreront/n'q'm't's' evrer
SFX b5 eter èteront/n'q'm't's' eter
SFX b5 eler èleront/n'q'm't's' eler
SFX b5 ecer ècerais/n'j'm't' ecer
SFX b5 emer èmerais/n'j'm't' emer
SFX b5 ener ènerais/n'j'm't' ener
SFX b5 eper èperais/n'j'm't' eper
SFX b5 erer èrerais/n'j'm't' erer
SFX b5 eser èserais/n'j'm't' eser
SFX b5 ever èverais/n'j'm't' ever
SFX b5 evrer èvrerais/n'j'm't' evrer
SFX b5 eter èterais/n'j'm't' eter
SFX b5 eler èlerais/n'j'm't' eler
SFX b5 ecer ècerait/n'q'm't's' ecer
SFX b5 emer èmerait/n'q'm't's' emer
SFX b5 ener ènerait/n'q'm't's' ener
SFX b5 eper èperait/n'q'm't's' eper
SFX b5 erer èrerait/n'q'm't's' erer
SFX b5 eser èserait/n'q'm't's' eser
SFX b5 ever èverait/n'q'm't's' ever
SFX b5 evrer èvrerait/n'q'm't's' evrer
SFX b5 eter èterait/n'q'm't's' eter
SFX b5 eler èlerait/n'q'm't's' eler
SFX b5 ecer ècerions/n't' ecer
SFX b5 emer èmerions/n't' emer
SFX b5 ener ènerions/n't' ener
SFX b5 eper èperions/n't' eper
SFX b5 erer èrerions/n't' erer
SFX b5 eser èserions/n't' eser
SFX b5 ever èverions/n't' ever
SFX b5 evrer èvrerions/n't' evrer
SFX b5 eter èterions/n't' eter
SFX b5 eler èlerions/n't' eler
SFX b5 ecer èceriez/n'm' ecer
SFX b5 emer èmeriez/n'm' emer
SFX b5 ener èneriez/n'm' ener
SFX b5 eper èperiez/n'm' eper
SFX b5 erer èreriez/n'm' erer
SFX b5 eser èseriez/n'm' eser
SFX b5 ever èveriez/n'm' ever
SFX b5 evrer èvreriez/n'm' evrer
SFX b5 eter èteriez/n'm' eter
SFX b5 eler èleriez/n'm' eler
SFX b5 ecer èceraient/n'q'm't's' ecer
SFX b5 emer èmeraient/n'q'm't's' emer
SFX b5 ener èneraient/n'q'm't's' ener
SFX b5 eper èperaient/n'q'm't's' eper
SFX b5 erer èreraient/n'q'm't's' erer
SFX b5 eser èseraient/n'q'm't's' eser
SFX b5 ever èveraient/n'q'm't's' ever
SFX b5 evrer èvreraient/n'q'm't's' evrer
SFX b5 eter èteraient/n'q'm't's' eter
SFX b5 eler èleraient/n'q'm't's' eler
SFX b5 er asse/n'j'm't' [^c]er
SFX b5 cer çasse/n'j'm't' cer
SFX b5 er asses/n'm't' [^c]er
SFX b5 cer çasses/n'm't' cer
SFX b5 er ât/n'q'm't's' [^c]er
SFX b5 cer çât/n'q'm't's' cer
SFX b5 er assions/n't' [^c]er
SFX b5 cer çassions/n't' cer
SFX b5 er assiez/n'm' [^c]er
SFX b5 cer çassiez/n'm' cer
SFX b5 er assent/n'q'm't's' [^c]er
SFX b5 cer çassent/n'q'm't's' cer
SFX b5 ecer èce/n'm' ecer
SFX b5 emer ème/n'm' emer
SFX b5 ener ène/n'm' ener
SFX b5 eper èpe/n'm' eper
SFX b5 erer ère/n'm' erer
SFX b5 eser èse/n'm' eser
SFX b5 ever ève/n'm' ever
SFX b5 evrer èvre/n'm' evrer
SFX b5 eter ète/n'm' eter
SFX b5 eler èle/n'm' eler
SFX b5 er ons/n' [^c]er
SFX b5 cer çons/n' cer
SFX b5 er ez/n' er
SFX c0 N 151
SFX c0 er ant [^cg]er
SFX c0 écer éçant écer
SFX c0 éger égeant éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 ébrer èbres ébrer
SFX c0 écer èces écer
SFX c0 écher èches écher
SFX c0 écrer ècres écrer
SFX c0 éder èdes éder
SFX c0 éger èges éger
SFX c0 égler ègles égler
SFX c0 égner ègnes égner
SFX c0 égrer ègres égrer
SFX c0 éguer ègues éguer
SFX c0 éler èles éler
SFX c0 émer èmes émer
SFX c0 éner ènes éner
SFX c0 éper èpes éper
SFX c0 équer èques équer
SFX c0 érer ères érer
SFX c0 éser èses éser
SFX c0 éter ètes éter
SFX c0 étrer ètres étrer
SFX c0 évrer èvres évrer
SFX c0 éyer èyes éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c0 ébrer èbrent ébrer
SFX c0 écer ècent écer
SFX c0 écher èchent écher
SFX c0 écrer ècrent écrer
SFX c0 éder èdent éder
SFX c0 éger ègent éger
SFX c0 égler èglent égler
SFX c0 égner ègnent égner
SFX c0 égrer ègrent égrer
SFX c0 éguer èguent éguer
SFX c0 éler èlent éler
SFX c0 émer èment émer
SFX c0 éner ènent éner
SFX c0 éper èpent éper
SFX c0 équer èquent équer
SFX c0 érer èrent érer
SFX c0 éser èsent éser
SFX c0 éter ètent éter
SFX c0 étrer ètrent étrer
SFX c0 évrer èvrent évrer
SFX c0 éyer èyent éyer
SFX c0 er ais [^cg]er
SFX c0 écer éçais écer
SFX c0 éger égeais éger
SFX c0 er ait [^cg]er
SFX c0 écer éçait écer
SFX c0 éger égeait éger
SFX c0 er ions er
SFX c0 er iez er
SFX c0 er aient [^cg]er
SFX c0 écer éçaient écer
SFX c0 éger égeaient éger
SFX c0 er ai [^cg]er
SFX c0 écer éçai écer
SFX c0 éger égeai éger
SFX c0 er as [^cg]er
SFX c0 écer éças écer
SFX c0 éger égeas éger
SFX c0 er a [^cg]er
SFX c0 écer éça écer
SFX c0 éger égea éger
SFX c0 er âmes [^cg]er
SFX c0 écer éçâmes écer
SFX c0 éger égeâmes éger
SFX c0 er âtes [^cg]er
SFX c0 écer éçâtes écer
SFX c0 éger égeâtes éger
SFX c0 er èrent er
SFX c0 er erai er
SFX c0 er eras er
SFX c0 er era er
SFX c0 er erons er
SFX c0 er erez er
SFX c0 er eront er
SFX c0 er erais er
SFX c0 er erait er
SFX c0 er erions er
SFX c0 er eriez er
SFX c0 er eraient er
SFX c0 er asse [^cg]er
SFX c0 écer éçasse écer
SFX c0 éger égeasse éger
SFX c0 er asses [^cg]er
SFX c0 écer éçasses écer
SFX c0 éger égeasses éger
SFX c0 er ât [^cg]er
SFX c0 écer éçât écer
SFX c0 éger égeât éger
SFX c0 er assions [^cg]er
SFX c0 écer éçassions écer
SFX c0 éger égeassions éger
SFX c0 er assiez [^cg]er
SFX c0 écer éçassiez écer
SFX c0 éger égeassiez éger
SFX c0 er assent [^cg]er
SFX c0 écer éçassent écer
SFX c0 éger égeassent éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c1 Y 152
SFX c1 r r/n'q'd' er
SFX c1 er ant/n'q' [^cg]er
SFX c1 écer éçant/n'q' écer
SFX c1 éger égeant/n'q' éger
SFX c1 ébrer èbre/n'q'j' ébrer
SFX c1 écer èce/n'q'j' écer
SFX c1 écher èche/n'q'j' écher
SFX c1 écrer ècre/n'q'j' écrer
SFX c1 éder ède/n'q'j' éder
SFX c1 éger ège/n'q'j' éger
SFX c1 égler ègle/n'q'j' égler
SFX c1 égner ègne/n'q'j' égner
SFX c1 égrer ègre/n'q'j' égrer
SFX c1 éguer ègue/n'q'j' éguer
SFX c1 éler èle/n'q'j' éler
SFX c1 émer ème/n'q'j' émer
SFX c1 éner ène/n'q'j' éner
SFX c1 éper èpe/n'q'j' éper
SFX c1 équer èque/n'q'j' équer
SFX c1 érer ère/n'q'j' érer
SFX c1 éser èse/n'q'j' éser
SFX c1 éter ète/n'q'j' éter
SFX c1 étrer ètre/n'q'j' étrer
SFX c1 évrer èvre/n'q'j' évrer
SFX c1 éyer èye/n'q'j' éyer
SFX c1 ébrer èbres/n' ébrer
SFX c1 écer èces/n' écer
SFX c1 écher èches/n' écher
SFX c1 écrer ècres/n' écrer
SFX c1 éder èdes/n' éder
SFX c1 éger èges/n' éger
SFX c1 égler ègles/n' égler
SFX c1 égner ègnes/n' égner
SFX c1 égrer ègres/n' égrer
SFX c1 éguer ègues/n' éguer
SFX c1 éler èles/n' éler
SFX c1 émer èmes/n' émer
SFX c1 éner ènes/n' éner
SFX c1 éper èpes/n' éper
SFX c1 équer èques/n' équer
SFX c1 érer ères/n' érer
SFX c1 éser èses/n' éser
SFX c1 éter ètes/n' éter
SFX c1 étrer ètres/n' étrer
SFX c1 évrer èvres/n' évrer
SFX c1 éyer èyes/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c1 ébrer èbrent/n'q' ébrer
SFX c1 écer ècent/n'q' écer
SFX c1 écher èchent/n'q' écher
SFX c1 écrer ècrent/n'q' écrer
SFX c1 éder èdent/n'q' éder
SFX c1 éger ègent/n'q' éger
SFX c1 égler èglent/n'q' égler
SFX c1 égner ègnent/n'q' égner
SFX c1 égrer ègrent/n'q' égrer
SFX c1 éguer èguent/n'q' éguer
SFX c1 éler èlent/n'q' éler
SFX c1 émer èment/n'q' émer
SFX c1 éner ènent/n'q' éner
SFX c1 éper èpent/n'q' éper
SFX c1 équer èquent/n'q' équer
SFX c1 érer èrent/n'q' érer
SFX c1 éser èsent/n'q' éser
SFX c1 éter ètent/n'q' éter
SFX c1 étrer ètrent/n'q' étrer
SFX c1 évrer èvrent/n'q' évrer
SFX c1 éyer èyent/n'q' éyer
SFX c1 er ais/n'j' [^cg]er
SFX c1 écer éçais/n'j' écer
SFX c1 éger égeais/n'j' éger
SFX c1 er ait/n'q' [^cg]er
SFX c1 écer éçait/n'q' écer
SFX c1 éger égeait/n'q' éger
SFX c1 er ions/n' er
SFX c1 er iez/n' er
SFX c1 er aient/n'q' [^cg]er
SFX c1 écer éçaient/n'q' écer
SFX c1 éger égeaient/n'q' éger
SFX c1 er ai/n'j' [^cg]er
SFX c1 écer éçai/n'j' écer
SFX c1 éger égeai/n'j' éger
SFX c1 er as/n' [^cg]er
SFX c1 écer éças/n' écer
SFX c1 éger égeas/n' éger
SFX c1 er a/n'q' [^cg]er
SFX c1 écer éça/n'q' écer
SFX c1 éger égea/n'q' éger
SFX c1 er âmes/n' [^cg]er
SFX c1 écer éçâmes/n' écer
SFX c1 éger égeâmes/n' éger
SFX c1 er âtes/n' [^cg]er
SFX c1 écer éçâtes/n' écer
SFX c1 éger égeâtes/n' éger
SFX c1 er èrent/n'q' er
SFX c1 er erai/n'j' er
SFX c1 er eras/n' er
SFX c1 er era/n'q' er
SFX c1 er erons/n' er
SFX c1 er erez/n' er
SFX c1 er eront/n'q' er
SFX c1 er erais/n'j' er
SFX c1 er erait/n'q' er
SFX c1 er erions/n' er
SFX c1 er eriez/n' er
SFX c1 er eraient/n'q' er
SFX c1 er asse/n'j' [^cg]er
SFX c1 écer éçasse/n'j' écer
SFX c1 éger égeasse/n'j' éger
SFX c1 er asses/n' [^cg]er
SFX c1 écer éçasses/n' écer
SFX c1 éger égeasses/n' éger
SFX c1 er ât/n'q' [^cg]er
SFX c1 écer éçât/n'q' écer
SFX c1 éger égeât/n'q' éger
SFX c1 er assions/n' [^cg]er
SFX c1 écer éçassions/n' écer
SFX c1 éger égeassions/n' éger
SFX c1 er assiez/n' [^cg]er
SFX c1 écer éçassiez/n' écer
SFX c1 éger égeassiez/n' éger
SFX c1 er assent/n'q' [^cg]er
SFX c1 écer éçassent/n'q' écer
SFX c1 éger égeassent/n'q' éger
SFX c1 ébrer èbre/n' ébrer
SFX c1 écer èce/n' écer
SFX c1 écher èche/n' écher
SFX c1 écrer ècre/n' écrer
SFX c1 éder ède/n' éder
SFX c1 éger ège/n' éger
SFX c1 égler ègle/n' égler
SFX c1 égner ègne/n' égner
SFX c1 égrer ègre/n' égrer
SFX c1 éguer ègue/n' éguer
SFX c1 éler èle/n' éler
SFX c1 émer ème/n' émer
SFX c1 éner ène/n' éner
SFX c1 éper èpe/n' éper
SFX c1 équer èque/n' équer
SFX c1 érer ère/n' érer
SFX c1 éser èse/n' éser
SFX c1 éter ète/n' éter
SFX c1 étrer ètre/n' étrer
SFX c1 évrer èvre/n' évrer
SFX c1 éyer èye/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c2 Y 152
SFX c2 er er/n'q'd'l'm't's' er
SFX c2 er ant/n'q'l'm't's' [^cg]er
SFX c2 écer éçant/n'q'l'm't's' écer
SFX c2 éger égeant/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c2 écer èce/n'q'j'l'm't's' écer
SFX c2 écher èche/n'q'j'l'm't's' écher
SFX c2 écrer ècre/n'q'j'l'm't's' écrer
SFX c2 éder ède/n'q'j'l'm't's' éder
SFX c2 éger ège/n'q'j'l'm't's' éger
SFX c2 égler ègle/n'q'j'l'm't's' égler
SFX c2 égner ègne/n'q'j'l'm't's' égner
SFX c2 égrer ègre/n'q'j'l'm't's' égrer
SFX c2 éguer ègue/n'q'j'l'm't's' éguer
SFX c2 éler èle/n'q'j'l'm't's' éler
SFX c2 émer ème/n'q'j'l'm't's' émer
SFX c2 éner ène/n'q'j'l'm't's' éner
SFX c2 éper èpe/n'q'j'l'm't's' éper
SFX c2 équer èque/n'q'j'l'm't's' équer
SFX c2 érer ère/n'q'j'l'm't's' érer
SFX c2 éser èse/n'q'j'l'm't's' éser
SFX c2 éter ète/n'q'j'l'm't's' éter
SFX c2 étrer ètre/n'q'j'l'm't's' étrer
SFX c2 évrer èvre/n'q'j'l'm't's' évrer
SFX c2 éyer èye/n'q'j'l'm't's' éyer
SFX c2 ébrer èbres/n'q'l'm' ébrer
SFX c2 écer èces/n'q'l'm' écer
SFX c2 écher èches/n'q'l'm' écher
SFX c2 écrer ècres/n'q'l'm' écrer
SFX c2 éder èdes/n'q'l'm' éder
SFX c2 éger èges/n'q'l'm' éger
SFX c2 égler ègles/n'q'l'm' égler
SFX c2 égner ègnes/n'q'l'm' égner
SFX c2 égrer ègres/n'q'l'm' égrer
SFX c2 éguer ègues/n'q'l'm' éguer
SFX c2 éler èles/n'q'l'm' éler
SFX c2 émer èmes/n'q'l'm' émer
SFX c2 éner ènes/n'q'l'm' éner
SFX c2 éper èpes/n'q'l'm' éper
SFX c2 équer èques/n'q'l'm' équer
SFX c2 érer ères/n'q'l'm' érer
SFX c2 éser èses/n'q'l'm' éser
SFX c2 éter ètes/n'q'l'm' éter
SFX c2 étrer ètres/n'q'l'm' étrer
SFX c2 évrer èvres/n'q'l'm' évrer
SFX c2 éyer èyes/n'q'l'm' éyer
SFX c2 er ons/n'q'l't' [^cg]er
SFX c2 écer éçons/n'q'l't' écer
SFX c2 éger égeons/n'q'l't' éger
SFX c2 er ez/n'q'l'm' er
SFX c2 ébrer èbrent/n'q'l'm't's' ébrer
SFX c2 écer ècent/n'q'l'm't's' écer
SFX c2 écher èchent/n'q'l'm't's' écher
SFX c2 écrer ècrent/n'q'l'm't's' écrer
SFX c2 éder èdent/n'q'l'm't's' éder
SFX c2 éger ègent/n'q'l'm't's' éger
SFX c2 égler èglent/n'q'l'm't's' égler
SFX c2 égner ègnent/n'q'l'm't's' égner
SFX c2 égrer ègrent/n'q'l'm't's' égrer
SFX c2 éguer èguent/n'q'l'm't's' éguer
SFX c2 éler èlent/n'q'l'm't's' éler
SFX c2 émer èment/n'q'l'm't's' émer
SFX c2 éner ènent/n'q'l'm't's' éner
SFX c2 éper èpent/n'q'l'm't's' éper
SFX c2 équer èquent/n'q'l'm't's' équer
SFX c2 érer èrent/n'q'l'm't's' érer
SFX c2 éser èsent/n'q'l'm't's' éser
SFX c2 éter ètent/n'q'l'm't's' éter
SFX c2 étrer ètrent/n'q'l'm't's' étrer
SFX c2 évrer èvrent/n'q'l'm't's' évrer
SFX c2 éyer èyent/n'q'l'm't's' éyer
SFX c2 er ais/n'q'j'l'm't' [^cg]er
SFX c2 écer éçais/n'q'j'l'm't' écer
SFX c2 éger égeais/n'q'j'l'm't' éger
SFX c2 er ait/n'q'l'm't's' [^cg]er
SFX c2 écer éçait/n'q'l'm't's' écer
SFX c2 éger égeait/n'q'l'm't's' éger
SFX c2 er ions/n'q'l't' er
SFX c2 er iez/n'q'l'm' er
SFX c2 er aient/n'q'l'm't's' [^cg]er
SFX c2 écer éçaient/n'q'l'm't's' écer
SFX c2 éger égeaient/n'q'l'm't's' éger
SFX c2 er ai/n'q'j'l't' [^cg]er
SFX c2 écer éçai/n'q'j'l't' écer
SFX c2 éger égeai/n'q'j'l't' éger
SFX c2 er as/n'q'l'm' [^cg]er
SFX c2 écer éças/n'q'l'm' écer
SFX c2 éger égeas/n'q'l'm' éger
SFX c2 er a/n'q'l'm't's' [^cg]er
SFX c2 écer éça/n'q'l'm't's' écer
SFX c2 éger égea/n'q'l'm't's' éger
SFX c2 er âmes/n'q'l't' [^cg]er
SFX c2 écer éçâmes/n'q'l't' écer
SFX c2 éger égeâmes/n'q'l't' éger
SFX c2 er âtes/n'q'l'm' [^cg]er
SFX c2 écer éçâtes/n'q'l'm' écer
SFX c2 éger égeâtes/n'q'l'm' éger
SFX c2 er èrent/n'q'l'm't's' er
SFX c2 er erai/n'q'j'l't' er
SFX c2 er eras/n'q'l'm' er
SFX c2 er era/n'q'l'm't's' er
SFX c2 er erons/n'q'l't' er
SFX c2 er erez/n'q'l'm' er
SFX c2 er eront/n'q'l'm't's' er
SFX c2 er erais/n'q'j'l'm't' er
SFX c2 er erait/n'q'l'm't's' er
SFX c2 er erions/n'q'l't' er
SFX c2 er eriez/n'q'l'm' er
SFX c2 er eraient/n'q'l'm't's' er
SFX c2 er asse/n'q'j'l't' [^cg]er
SFX c2 écer éçasse/n'q'j'l't' écer
SFX c2 éger égeasse/n'q'j'l't' éger
SFX c2 er asses/n'q'l'm' [^cg]er
SFX c2 écer éçasses/n'q'l'm' écer
SFX c2 éger égeasses/n'q'l'm' éger
SFX c2 er ât/n'q'l'm't's' [^cg]er
SFX c2 écer éçât/n'q'l'm't's' écer
SFX c2 éger égeât/n'q'l'm't's' éger
SFX c2 er assions/n'q'l't' [^cg]er
SFX c2 écer éçassions/n'q'l't' écer
SFX c2 éger égeassions/n'q'l't' éger
SFX c2 er assiez/n'q'l'm' [^cg]er
SFX c2 écer éçassiez/n'q'l'm' écer
SFX c2 éger égeassiez/n'q'l'm' éger
SFX c2 er assent/n'q'l'm't's' [^cg]er
SFX c2 écer éçassent/n'q'l'm't's' écer
SFX c2 éger égeassent/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'l'm' ébrer
SFX c2 écer èce/n'l'm' écer
SFX c2 écher èche/n'l'm' écher
SFX c2 écrer ècre/n'l'm' écrer
SFX c2 éder ède/n'l'm' éder
SFX c2 éger ège/n'l'm' éger
SFX c2 égler ègle/n'l'm' égler
SFX c2 égner ègne/n'l'm' égner
SFX c2 égrer ègre/n'l'm' égrer
SFX c2 éguer ègue/n'l'm' éguer
SFX c2 éler èle/n'l'm' éler
SFX c2 émer ème/n'l'm' émer
SFX c2 éner ène/n'l'm' éner
SFX c2 éper èpe/n'l'm' éper
SFX c2 équer èque/n'l'm' équer
SFX c2 érer ère/n'l'm' érer
SFX c2 éser èse/n'l'm' éser
SFX c2 éter ète/n'l'm' éter
SFX c2 étrer ètre/n'l'm' étrer
SFX c2 évrer èvre/n'l'm' évrer
SFX c2 éyer èye/n'l'm' éyer
SFX c2 er ons/n'l' [^cg]er
SFX c2 écer éçons/n'l' écer
SFX c2 éger égeons/n'l' éger
SFX c2 er ez/n'l'm' er
SFX c3 Y 152
SFX c3 er er/m't's' er
SFX c3 er ant/m't's' [^cg]er
SFX c3 écer éçant/m't's' écer
SFX c3 éger égeant/m't's' éger
SFX c3 ébrer èbre/m's' ébrer
SFX c3 écer èce/m's' écer
SFX c3 écher èche/m's' écher
SFX c3 écrer ècre/m's' écrer
SFX c3 éder ède/m's' éder
SFX c3 éger ège/m's' éger
SFX c3 égler ègle/m's' égler
SFX c3 égner ègne/m's' égner
SFX c3 égrer ègre/m's' égrer
SFX c3 éguer ègue/m's' éguer
SFX c3 éler èle/m's' éler
SFX c3 émer ème/m's' émer
SFX c3 éner ène/m's' éner
SFX c3 éper èpe/m's' éper
SFX c3 équer èque/m's' équer
SFX c3 érer ère/m's' érer
SFX c3 éser èse/m's' éser
SFX c3 éter ète/m's' éter
SFX c3 étrer ètre/m's' étrer
SFX c3 évrer èvre/m's' évrer
SFX c3 éyer èye/m's' éyer
SFX c3 ébrer èbres/t' ébrer
SFX c3 écer èces/t' écer
SFX c3 écher èches/t' écher
SFX c3 écrer ècres/t' écrer
SFX c3 éder èdes/t' éder
SFX c3 éger èges/t' éger
SFX c3 égler ègles/t' égler
SFX c3 égner ègnes/t' égner
SFX c3 égrer ègres/t' égrer
SFX c3 éguer ègues/t' éguer
SFX c3 éler èles/t' éler
SFX c3 émer èmes/t' émer
SFX c3 éner ènes/t' éner
SFX c3 éper èpes/t' éper
SFX c3 équer èques/t' équer
SFX c3 érer ères/t' érer
SFX c3 éser èses/t' éser
SFX c3 éter ètes/t' éter
SFX c3 étrer ètres/t' étrer
SFX c3 évrer èvres/t' évrer
SFX c3 éyer èyes/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c3 ébrer èbrent/s' ébrer
SFX c3 écer ècent/s' écer
SFX c3 écher èchent/s' écher
SFX c3 écrer ècrent/s' écrer
SFX c3 éder èdent/s' éder
SFX c3 éger ègent/s' éger
SFX c3 égler èglent/s' égler
SFX c3 égner ègnent/s' égner
SFX c3 égrer ègrent/s' égrer
SFX c3 éguer èguent/s' éguer
SFX c3 éler èlent/s' éler
SFX c3 émer èment/s' émer
SFX c3 éner ènent/s' éner
SFX c3 éper èpent/s' éper
SFX c3 équer èquent/s' équer
SFX c3 érer èrent/s' érer
SFX c3 éser èsent/s' éser
SFX c3 éter ètent/s' éter
SFX c3 étrer ètrent/s' étrer
SFX c3 évrer èvrent/s' évrer
SFX c3 éyer èyent/s' éyer
SFX c3 er ais/m't' [^cg]er
SFX c3 écer éçais/m't' écer
SFX c3 éger égeais/m't' éger
SFX c3 er ait/s' [^cg]er
SFX c3 écer éçait/s' écer
SFX c3 éger égeait/s' éger
SFX c3 er ions er
SFX c3 er iez er
SFX c3 er aient/s' [^cg]er
SFX c3 écer éçaient/s' écer
SFX c3 éger égeaient/s' éger
SFX c3 er ai/m' [^cg]er
SFX c3 écer éçai/m' écer
SFX c3 éger égeai/m' éger
SFX c3 er as/t' [^cg]er
SFX c3 écer éças/t' écer
SFX c3 éger égeas/t' éger
SFX c3 er a/s' [^cg]er
SFX c3 écer éça/s' écer
SFX c3 éger égea/s' éger
SFX c3 er âmes [^cg]er
SFX c3 écer éçâmes écer
SFX c3 éger égeâmes éger
SFX c3 er âtes [^cg]er
SFX c3 écer éçâtes écer
SFX c3 éger égeâtes éger
SFX c3 er èrent/s' er
SFX c3 er erai/m' er
SFX c3 er eras/t' er
SFX c3 er era/s' er
SFX c3 er erons er
SFX c3 er erez er
SFX c3 er eront/s' er
SFX c3 er erais/m't' er
SFX c3 er erait/s' er
SFX c3 er erions er
SFX c3 er eriez er
SFX c3 er eraient/s' er
SFX c3 er asse/m' [^cg]er
SFX c3 écer éçasse/m' écer
SFX c3 éger égeasse/m' éger
SFX c3 er asses/t' [^cg]er
SFX c3 écer éçasses/t' écer
SFX c3 éger égeasses/t' éger
SFX c3 er ât/s' [^cg]er
SFX c3 écer éçât/s' écer
SFX c3 éger égeât/s' éger
SFX c3 er assions [^cg]er
SFX c3 écer éçassions écer
SFX c3 éger égeassions éger
SFX c3 er assiez [^cg]er
SFX c3 écer éçassiez écer
SFX c3 éger égeassiez éger
SFX c3 er assent/s' [^cg]er
SFX c3 écer éçassent/s' écer
SFX c3 éger égeassent/s' éger
SFX c3 ébrer èbre/t' ébrer
SFX c3 écer èce/t' écer
SFX c3 écher èche/t' écher
SFX c3 écrer ècre/t' écrer
SFX c3 éder ède/t' éder
SFX c3 éger ège/t' éger
SFX c3 égler ègle/t' égler
SFX c3 égner ègne/t' égner
SFX c3 égrer ègre/t' égrer
SFX c3 éguer ègue/t' éguer
SFX c3 éler èle/t' éler
SFX c3 émer ème/t' émer
SFX c3 éner ène/t' éner
SFX c3 éper èpe/t' éper
SFX c3 équer èque/t' équer
SFX c3 érer ère/t' érer
SFX c3 éser èse/t' éser
SFX c3 éter ète/t' éter
SFX c3 étrer ètre/t' étrer
SFX c3 évrer èvre/t' évrer
SFX c3 éyer èye/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c4 Y 152
SFX c4 er er/n'q'd'l'm't's' er
SFX c4 er ant/n'q'l'm't's' [^cg]er
SFX c4 écer éçant/n'q'l'm't's' écer
SFX c4 éger égeant/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c4 écer èce/n'q'j'l'm't's' écer
SFX c4 écher èche/n'q'j'l'm't's' écher
SFX c4 écrer ècre/n'q'j'l'm't's' écrer
SFX c4 éder ède/n'q'j'l'm't's' éder
SFX c4 éger ège/n'q'j'l'm't's' éger
SFX c4 égler ègle/n'q'j'l'm't's' égler
SFX c4 égner ègne/n'q'j'l'm't's' égner
SFX c4 égrer ègre/n'q'j'l'm't's' égrer
SFX c4 éguer ègue/n'q'j'l'm't's' éguer
SFX c4 éler èle/n'q'j'l'm't's' éler
SFX c4 émer ème/n'q'j'l'm't's' émer
SFX c4 éner ène/n'q'j'l'm't's' éner
SFX c4 éper èpe/n'q'j'l'm't's' éper
SFX c4 équer èque/n'q'j'l'm't's' équer
SFX c4 érer ère/n'q'j'l'm't's' érer
SFX c4 éser èse/n'q'j'l'm't's' éser
SFX c4 éter ète/n'q'j'l'm't's' éter
SFX c4 étrer ètre/n'q'j'l'm't's' étrer
SFX c4 évrer èvre/n'q'j'l'm't's' évrer
SFX c4 éyer èye/n'q'j'l'm't's' éyer
SFX c4 ébrer èbres/n'q'l'm't' ébrer
SFX c4 écer èces/n'q'l'm't' écer
SFX c4 écher èches/n'q'l'm't' écher
SFX c4 écrer ècres/n'q'l'm't' écrer
SFX c4 éder èdes/n'q'l'm't' éder
SFX c4 éger èges/n'q'l'm't' éger
SFX c4 égler ègles/n'q'l'm't' égler
SFX c4 égner ègnes/n'q'l'm't' égner
SFX c4 égrer ègres/n'q'l'm't' égrer
SFX c4 éguer ègues/n'q'l'm't' éguer
SFX c4 éler èles/n'q'l'm't' éler
SFX c4 émer èmes/n'q'l'm't' émer
SFX c4 éner ènes/n'q'l'm't' éner
SFX c4 éper èpes/n'q'l'm't' éper
SFX c4 équer èques/n'q'l'm't' équer
SFX c4 érer ères/n'q'l'm't' érer
SFX c4 éser èses/n'q'l'm't' éser
SFX c4 éter ètes/n'q'l'm't' éter
SFX c4 étrer ètres/n'q'l'm't' étrer
SFX c4 évrer èvres/n'q'l'm't' évrer
SFX c4 éyer èyes/n'q'l'm't' éyer
SFX c4 er ons/n'q'l't' [^cg]er
SFX c4 écer éçons/n'q'l't' écer
SFX c4 éger égeons/n'q'l't' éger
SFX c4 er ez/n'q'l'm' er
SFX c4 ébrer èbrent/n'q'l'm't's' ébrer
SFX c4 écer ècent/n'q'l'm't's' écer
SFX c4 écher èchent/n'q'l'm't's' écher
SFX c4 écrer ècrent/n'q'l'm't's' écrer
SFX c4 éder èdent/n'q'l'm't's' éder
SFX c4 éger ègent/n'q'l'm't's' éger
SFX c4 égler èglent/n'q'l'm't's' égler
SFX c4 égner ègnent/n'q'l'm't's' égner
SFX c4 égrer ègrent/n'q'l'm't's' égrer
SFX c4 éguer èguent/n'q'l'm't's' éguer
SFX c4 éler èlent/n'q'l'm't's' éler
SFX c4 émer èment/n'q'l'm't's' émer
SFX c4 éner ènent/n'q'l'm't's' éner
SFX c4 éper èpent/n'q'l'm't's' éper
SFX c4 équer èquent/n'q'l'm't's' équer
SFX c4 érer èrent/n'q'l'm't's' érer
SFX c4 éser èsent/n'q'l'm't's' éser
SFX c4 éter ètent/n'q'l'm't's' éter
SFX c4 étrer ètrent/n'q'l'm't's' étrer
SFX c4 évrer èvrent/n'q'l'm't's' évrer
SFX c4 éyer èyent/n'q'l'm't's' éyer
SFX c4 er ais/n'q'j'l'm't' [^cg]er
SFX c4 écer éçais/n'q'j'l'm't' écer
SFX c4 éger égeais/n'q'j'l'm't' éger
SFX c4 er ait/n'q'l'm't's' [^cg]er
SFX c4 écer éçait/n'q'l'm't's' écer
SFX c4 éger égeait/n'q'l'm't's' éger
SFX c4 er ions/n'q'l't' er
SFX c4 er iez/n'q'l'm' er
SFX c4 er aient/n'q'l'm't's' [^cg]er
SFX c4 écer éçaient/n'q'l'm't's' écer
SFX c4 éger égeaient/n'q'l'm't's' éger
SFX c4 er ai/n'q'j'l'm't' [^cg]er
SFX c4 écer éçai/n'q'j'l'm't' écer
SFX c4 éger égeai/n'q'j'l'm't' éger
SFX c4 er as/n'q'l'm't' [^cg]er
SFX c4 écer éças/n'q'l'm't' écer
SFX c4 éger égeas/n'q'l'm't' éger
SFX c4 er a/n'q'l'm't's' [^cg]er
SFX c4 écer éça/n'q'l'm't's' écer
SFX c4 éger égea/n'q'l'm't's' éger
SFX c4 er âmes/n'q'l't' [^cg]er
SFX c4 écer éçâmes/n'q'l't' écer
SFX c4 éger égeâmes/n'q'l't' éger
SFX c4 er âtes/n'q'l'm' [^cg]er
SFX c4 écer éçâtes/n'q'l'm' écer
SFX c4 éger égeâtes/n'q'l'm' éger
SFX c4 er èrent/n'q'l'm't's' er
SFX c4 er erai/n'q'j'l'm't' er
SFX c4 er eras/n'q'l'm't' er
SFX c4 er era/n'q'l'm't's' er
SFX c4 er erons/n'q'l't' er
SFX c4 er erez/n'q'l'm' er
SFX c4 er eront/n'q'l'm't's' er
SFX c4 er erais/n'q'j'l'm't' er
SFX c4 er erait/n'q'l'm't's' er
SFX c4 er erions/n'q'l't' er
SFX c4 er eriez/n'q'l'm' er
SFX c4 er eraient/n'q'l'm't's' er
SFX c4 er asse/n'q'j'l'm't' [^cg]er
SFX c4 écer éçasse/n'q'j'l'm't' écer
SFX c4 éger égeasse/n'q'j'l'm't' éger
SFX c4 er asses/n'q'l'm't' [^cg]er
SFX c4 écer éçasses/n'q'l'm't' écer
SFX c4 éger égeasses/n'q'l'm't' éger
SFX c4 er ât/n'q'l'm't's' [^cg]er
SFX c4 écer éçât/n'q'l'm't's' écer
SFX c4 éger égeât/n'q'l'm't's' éger
SFX c4 er assions/n'q'l't' [^cg]er
SFX c4 écer éçassions/n'q'l't' écer
SFX c4 éger égeassions/n'q'l't' éger
SFX c4 er assiez/n'q'l'm' [^cg]er
SFX c4 écer éçassiez/n'q'l'm' écer
SFX c4 éger égeassiez/n'q'l'm' éger
SFX c4 er assent/n'q'l'm't's' [^cg]er
SFX c4 écer éçassent/n'q'l'm't's' écer
SFX c4 éger égeassent/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'l'm't' ébrer
SFX c4 écer èce/n'l'm't' écer
SFX c4 écher èche/n'l'm't' écher
SFX c4 écrer ècre/n'l'm't' écrer
SFX c4 éder ède/n'l'm't' éder
SFX c4 éger ège/n'l'm't' éger
SFX c4 égler ègle/n'l'm't' égler
SFX c4 égner ègne/n'l'm't' égner
SFX c4 égrer ègre/n'l'm't' égrer
SFX c4 éguer ègue/n'l'm't' éguer
SFX c4 éler èle/n'l'm't' éler
SFX c4 émer ème/n'l'm't' émer
SFX c4 éner ène/n'l'm't' éner
SFX c4 éper èpe/n'l'm't' éper
SFX c4 équer èque/n'l'm't' équer
SFX c4 érer ère/n'l'm't' érer
SFX c4 éser èse/n'l'm't' éser
SFX c4 éter ète/n'l'm't' éter
SFX c4 étrer ètre/n'l'm't' étrer
SFX c4 évrer èvre/n'l'm't' évrer
SFX c4 éyer èye/n'l'm't' éyer
SFX c4 er ons/n'l' [^cg]er
SFX c4 écer éçons/n'l' écer
SFX c4 éger égeons/n'l' éger
SFX c4 er ez/n'l'm' er
SFX c5 Y 152
SFX c5 er er/n'q'd'm't's' er
SFX c5 er ant/n'q'm't's' [^cg]er
SFX c5 écer éçant/m'q'm't's' écer
SFX c5 éger égeant/m'q'l't's' éger
SFX c5 ébrer èbre/n'q'j'm't's' ébrer
SFX c5 écer èce/n'q'j'm't's' écer
SFX c5 écher èche/n'q'j'm't's' écher
SFX c5 écrer ècre/n'q'j'm't's' écrer
SFX c5 éder ède/n'q'j'm't's' éder
SFX c5 éger ège/n'q'j'm't's' éger
SFX c5 égler ègle/n'q'j'm't's' égler
SFX c5 égner ègne/n'q'j'm't's' égner
SFX c5 égrer ègre/n'q'j'm't's' égrer
SFX c5 éguer ègue/n'q'j'm't's' éguer
SFX c5 éler èle/n'q'j'm't's' éler
SFX c5 émer ème/n'q'j'm't's' émer
SFX c5 éner ène/n'q'j'm't's' éner
SFX c5 éper èpe/n'q'j'm't's' éper
SFX c5 équer èque/n'q'j'm't's' équer
SFX c5 érer ère/n'q'j'm't's' érer
SFX c5 éser èse/n'q'j'm't's' éser
SFX c5 éter ète/n'q'j'm't's' éter
SFX c5 étrer ètre/n'q'j'm't's' étrer
SFX c5 évrer èvre/n'q'j'm't's' évrer
SFX c5 éyer èye/n'q'j'm't's' éyer
SFX c5 ébrer èbres/n'm't' ébrer
SFX c5 écer èces/n'm't' écer
SFX c5 écher èches/n'm't' écher
SFX c5 écrer ècres/n'm't' écrer
SFX c5 éder èdes/n'm't' éder
SFX c5 éger èges/n'm't' éger
SFX c5 égler ègles/n'm't' égler
SFX c5 égner ègnes/n'm't' égner
SFX c5 égrer ègres/n'm't' égrer
SFX c5 éguer ègues/n'm't' éguer
SFX c5 éler èles/n'm't' éler
SFX c5 émer èmes/n'm't' émer
SFX c5 éner ènes/n'm't' éner
SFX c5 éper èpes/n'm't' éper
SFX c5 équer èques/n'm't' équer
SFX c5 érer ères/n'm't' érer
SFX c5 éser èses/n'm't' éser
SFX c5 éter ètes/n'm't' éter
SFX c5 étrer ètres/n'm't' étrer
SFX c5 évrer èvres/n'm't' évrer
SFX c5 éyer èyes/n'm't' éyer
SFX c5 er ons/n't' [^cg]er
SFX c5 écer éçons/n't' écer
SFX c5 éger égeons/n't' éger
SFX c5 er ez/n'm' er
SFX c5 ébrer èbrent/n'q'm't's' ébrer
SFX c5 écer ècent/n'q'm't's' écer
SFX c5 écher èchent/n'q'm't's' écher
SFX c5 écrer ècrent/n'q'm't's' écrer
SFX c5 éder èdent/n'q'm't's' éder
SFX c5 éger ègent/n'q'm't's' éger
SFX c5 égler èglent/n'q'm't's' égler
SFX c5 égner ègnent/n'q'm't's' égner
SFX c5 égrer ègrent/n'q'm't's' égrer
SFX c5 éguer èguent/n'q'm't's' éguer
SFX c5 éler èlent/n'q'm't's' éler
SFX c5 émer èment/n'q'm't's' émer
SFX c5 éner ènent/n'q'm't's' éner
SFX c5 éper èpent/n'q'm't's' éper
SFX c5 équer èquent/n'q'm't's' équer
SFX c5 érer èrent/n'q'm't's' érer
SFX c5 éser èsent/n'q'm't's' éser
SFX c5 éter ètent/n'q'm't's' éter
SFX c5 étrer ètrent/n'q'm't's' étrer
SFX c5 évrer èvrent/n'q'm't's' évrer
SFX c5 éyer èyent/n'q'm't's' éyer
SFX c5 er ais/n'j'm't' [^cg]er
SFX c5 écer éçais/n'j'm't' écer
SFX c5 éger égeais/n'j'm't' éger
SFX c5 er ait/n'q'm't's' [^cg]er
SFX c5 écer éçait/n'q'm't's' écer
SFX c5 éger égeait/n'q'm't's' éger
SFX c5 er ions/n't' er
SFX c5 er iez/n'm' er
SFX c5 er aient/n'q'm't's' [^cg]er
SFX c5 écer éçaient/n'q'm't's' écer
SFX c5 éger égeaient/n'q'm't's' éger
SFX c5 er ai/n'j'm't' [^cg]er
SFX c5 écer éçai/n'j'm't' écer
SFX c5 éger égeai/n'j'm't' éger
SFX c5 er as/n'm't' [^cg]er
SFX c5 écer éças/n'm't' écer
SFX c5 éger égeas/n'm't' éger
SFX c5 er a/n'q'm't's' [^cg]er
SFX c5 écer éça/n'q'm't's' écer
SFX c5 éger égea/n'q'm't's' éger
SFX c5 er âmes/n't' [^cg]er
SFX c5 écer éçâmes/n't' écer
SFX c5 éger égeâmes/n't' éger
SFX c5 er âtes/n'm' [^cg]er
SFX c5 écer éçâtes/n'm' écer
SFX c5 éger égeâtes/n'm' éger
SFX c5 er èrent/n'q'm't's' er
SFX c5 er erai/n'j'm't' er
SFX c5 er eras/n'm't' er
SFX c5 er era/n'q'm't's' er
SFX c5 er erons/n't' er
SFX c5 er erez/n'm' er
SFX c5 er eront/n'q'm't's' er
SFX c5 er erais/n'j'm't' er
SFX c5 er erait/n'q'm't's' er
SFX c5 er erions/n't' er
SFX c5 er eriez/n'm' er
SFX c5 er eraient/n'q'm't's' er
SFX c5 er asse/n'j'm't' [^cg]er
SFX c5 écer éçasse/n'j'm't' écer
SFX c5 éger égeasse/n'j'm't' éger
SFX c5 er asses/n'm't' [^cg]er
SFX c5 écer éçasses/n'm't' écer
SFX c5 éger égeasses/n'm't' éger
SFX c5 er ât/n'q'm't's' [^cg]er
SFX c5 écer éçât/n'q'm't's' écer
SFX c5 éger égeât/n'q'm't's' éger
SFX c5 er assions/n't' [^cg]er
SFX c5 écer éçassions/n't' écer
SFX c5 éger égeassions/n't' éger
SFX c5 er assiez/n'm' [^cg]er
SFX c5 écer éçassiez/n'm' écer
SFX c5 éger égeassiez/n'm' éger
SFX c5 er assent/n'q'm't's' [^cg]er
SFX c5 écer éçassent/n'q'm't's' écer
SFX c5 éger égeassent/n'q'm't's' éger
SFX c5 ébrer èbre/n'm' ébrer
SFX c5 écer èce/n'm' écer
SFX c5 écher èche/n'm' écher
SFX c5 écrer ècre/n'm' écrer
SFX c5 éder ède/n'm' éder
SFX c5 éger ège/n'm' éger
SFX c5 égler ègle/n'm' égler
SFX c5 égner ègne/n'm' égner
SFX c5 égrer ègre/n'm' égrer
SFX c5 éguer ègue/n'm' éguer
SFX c5 éler èle/n'm' éler
SFX c5 émer ème/n'm' émer
SFX c5 éner ène/n'm' éner
SFX c5 éper èpe/n'm' éper
SFX c5 équer èque/n'm' équer
SFX c5 érer ère/n'm' érer
SFX c5 éser èse/n'm' éser
SFX c5 éter ète/n'm' éter
SFX c5 étrer ètre/n'm' étrer
SFX c5 évrer èvre/n'm' évrer
SFX c5 éyer èye/n'm' éyer
SFX c5 er ons/n' [^cg]er
SFX c5 écer éçons/n' écer
SFX c5 éger égeons/n' éger
SFX c5 er ez/n' er
SFX d0 N 82
SFX d0 er ant er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 eter ettes jeter
SFX d0 eter ettes [^j]eter
SFX d0 eler elles ppeler
SFX d0 eler elles [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d0 eter ettent jeter
SFX d0 eter ettent [^j]eter
SFX d0 eler ellent ppeler
SFX d0 eler ellent [^p].eler
SFX d0 er ais er
SFX d0 er ait er
SFX d0 er ions er
SFX d0 er iez er
SFX d0 er aient er
SFX d0 er ai er
SFX d0 er as er
SFX d0 er a er
SFX d0 er âmes er
SFX d0 er âtes er
SFX d0 er èrent er
SFX d0 eter etterai jeter
SFX d0 eter etterai [^j]eter
SFX d0 eler ellerai ppeler
SFX d0 eler ellerai [^p].eler
SFX d0 eter etteras jeter
SFX d0 eter etteras [^j]eter
SFX d0 eler elleras ppeler
SFX d0 eler elleras [^p].eler
SFX d0 eter ettera jeter
SFX d0 eter ettera [^j]eter
SFX d0 eler ellera ppeler
SFX d0 eler ellera [^p].eler
SFX d0 eter etterons jeter
SFX d0 eter etterons [^j]eter
SFX d0 eler ellerons ppeler
SFX d0 eler ellerons [^p].eler
SFX d0 eter etterez jeter
SFX d0 eter etterez [^j]eter
SFX d0 eler ellerez ppeler
SFX d0 eler ellerez [^p].eler
SFX d0 eter etteront jeter
SFX d0 eter etteront [^j]eter
SFX d0 eler elleront ppeler
SFX d0 eler elleront [^p].eler
SFX d0 eter etterais jeter
SFX d0 eter etterais [^j]eter
SFX d0 eler ellerais ppeler
SFX d0 eler ellerais [^p].eler
SFX d0 eter etterait jeter
SFX d0 eter etterait [^j]eter
SFX d0 eler ellerait ppeler
SFX d0 eler ellerait [^p].eler
SFX d0 eter etterions jeter
SFX d0 eter etterions [^j]eter
SFX d0 eler ellerions ppeler
SFX d0 eler ellerions [^p].eler
SFX d0 eter etteriez jeter
SFX d0 eter etteriez [^j]eter
SFX d0 eler elleriez ppeler
SFX d0 eler elleriez [^p].eler
SFX d0 eter etteraient jeter
SFX d0 eter etteraient [^j]eter
SFX d0 eler elleraient ppeler
SFX d0 eler elleraient [^p].eler
SFX d0 er asse er
SFX d0 er asses er
SFX d0 er ât er
SFX d0 er assions er
SFX d0 er assiez er
SFX d0 er assent er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d1 Y 83
SFX d1 er er/n'q'd' er
SFX d1 er ant/n'q' er
SFX d1 eter ette/n'q'j' jeter
SFX d1 eter ette/n'q'j' [^j]eter
SFX d1 eler elle/n'q'j' ppeler
SFX d1 eler elle/n'q'j' [^p].eler
SFX d1 eter ettes/n' jeter
SFX d1 eter ettes/n' [^j]eter
SFX d1 eler elles/n' ppeler
SFX d1 eler elles/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d1 eter ettent/n'q' jeter
SFX d1 eter ettent/n'q' [^j]eter
SFX d1 eler ellent/n'q' ppeler
SFX d1 eler ellent/n'q' [^p].eler
SFX d1 er ais/n'j' er
SFX d1 er ait/n'q' er
SFX d1 er ions/n' er
SFX d1 er iez/n' er
SFX d1 er aient/n'q' er
SFX d1 er ai/n'j' er
SFX d1 er as/n' er
SFX d1 er a/n'q' er
SFX d1 er âmes/n' er
SFX d1 er âtes/n' er
SFX d1 er èrent/n'q' er
SFX d1 eter etterai/n'j' jeter
SFX d1 eter etterai/n'j' [^j]eter
SFX d1 eler ellerai/n'j' ppeler
SFX d1 eler ellerai/n'j' [^p].eler
SFX d1 eter etteras/n' jeter
SFX d1 eter etteras/n' [^j]eter
SFX d1 eler elleras/n' ppeler
SFX d1 eler elleras/n' [^p].eler
SFX d1 eter ettera/n'q' jeter
SFX d1 eter ettera/n'q' [^j]eter
SFX d1 eler ellera/n'q' ppeler
SFX d1 eler ellera/n'q' [^p].eler
SFX d1 eter etterons/n' jeter
SFX d1 eter etterons/n' [^j]eter
SFX d1 eler ellerons/n' ppeler
SFX d1 eler ellerons/n' [^p].eler
SFX d1 eter etterez/n' jeter
SFX d1 eter etterez/n' [^j]eter
SFX d1 eler ellerez/n' ppeler
SFX d1 eler ellerez/n' [^p].eler
SFX d1 eter etteront/n'q' jeter
SFX d1 eter etteront/n'q' [^j]eter
SFX d1 eler elleront/n'q' ppeler
SFX d1 eler elleront/n'q' [^p].eler
SFX d1 eter etterais/n'j' jeter
SFX d1 eter etterais/n'j' [^j]eter
SFX d1 eler ellerais/n'j' ppeler
SFX d1 eler ellerais/n'j' [^p].eler
SFX d1 eter etterait/n'q' jeter
SFX d1 eter etterait/n'q' [^j]eter
SFX d1 eler ellerait/n'q' ppeler
SFX d1 eler ellerait/n'q' [^p].eler
SFX d1 eter etterions/n' jeter
SFX d1 eter etterions/n' [^j]eter
SFX d1 eler ellerions/n' ppeler
SFX d1 eler ellerions/n' [^p].eler
SFX d1 eter etteriez/n' jeter
SFX d1 eter etteriez/n' [^j]eter
SFX d1 eler elleriez/n' ppeler
SFX d1 eler elleriez/n' [^p].eler
SFX d1 eter etteraient/n'q' jeter
SFX d1 eter etteraient/n'q' [^j]eter
SFX d1 eler elleraient/n'q' ppeler
SFX d1 eler elleraient/n'q' [^p].eler
SFX d1 er asse/n'j' er
SFX d1 er asses/n' er
SFX d1 er ât/n'q' er
SFX d1 er assions/n' er
SFX d1 er assiez/n' er
SFX d1 er assent/n'q' er
SFX d1 eter ette/n' jeter
SFX d1 eter ette/n' [^j]eter
SFX d1 eler elle/n' ppeler
SFX d1 eler elle/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d2 Y 83
SFX d2 er er/n'q'd'l'm't's' er
SFX d2 er ant/n'q'l'm't's' er
SFX d2 eter ette/n'q'j'l'm't's' jeter
SFX d2 eter ette/n'q'j'l'm't's' [^j]eter
SFX d2 eler elle/n'q'j'l'm't's' ppeler
SFX d2 eler elle/n'q'j'l'm't's' [^p].eler
SFX d2 eter ettes/n'q'l'm' jeter
SFX d2 eter ettes/n'q'l'm' [^j]eter
SFX d2 eler elles/n'q'l'm' ppeler
SFX d2 eler elles/n'q'l'm' [^p].eler
SFX d2 er ons/n'q'l't' er
SFX d2 er ez/n'q'l'm' er
SFX d2 eter ettent/n'q'l'm't's' jeter
SFX d2 eter ettent/n'q'l'm't's' [^j]eter
SFX d2 eler ellent/n'q'l'm't's' ppeler
SFX d2 eler ellent/n'q'l'm't's' [^p].eler
SFX d2 er ais/n'q'j'l'm't' er
SFX d2 er ait/n'q'l'm't's' er
SFX d2 er ions/n'q'l't' er
SFX d2 er iez/n'q'l'm' er
SFX d2 er aient/n'q'l'm't's' er
SFX d2 er ai/n'q'j'l't' er
SFX d2 er as/n'q'l'm' er
SFX d2 er a/n'q'l'm't's' er
SFX d2 er âmes/n'q'l't' er
SFX d2 er âtes/n'q'l'm' er
SFX d2 er èrent/n'q'l'm't's' er
SFX d2 eter etterai/n'q'j'l't' jeter
SFX d2 eter etterai/n'q'j'l't' [^j]eter
SFX d2 eler ellerai/n'q'j'l't' ppeler
SFX d2 eler ellerai/n'q'j'l't' [^p].eler
SFX d2 eter etteras/n'q'l'm' jeter
SFX d2 eter etteras/n'q'l'm' [^j]eter
SFX d2 eler elleras/n'q'l'm' ppeler
SFX d2 eler elleras/n'q'l'm' [^p].eler
SFX d2 eter ettera/n'q'l'm't's' jeter
SFX d2 eter ettera/n'q'l'm't's' [^j]eter
SFX d2 eler ellera/n'q'l'm't's' ppeler
SFX d2 eler ellera/n'q'l'm't's' [^p].eler
SFX d2 eter etterons/n'q'l't' jeter
SFX d2 eter etterons/n'q'l't' [^j]eter
SFX d2 eler ellerons/n'q'l't' ppeler
SFX d2 eler ellerons/n'q'l't' [^p].eler
SFX d2 eter etterez/n'q'l'm' jeter
SFX d2 eter etterez/n'q'l'm' [^j]eter
SFX d2 eler ellerez/n'q'l'm' ppeler
SFX d2 eler ellerez/n'q'l'm' [^p].eler
SFX d2 eter etteront/n'q'l'm't's' jeter
SFX d2 eter etteront/n'q'l'm't's' [^j]eter
SFX d2 eler elleront/n'q'l'm't's' ppeler
SFX d2 eler elleront/n'q'l'm't's' [^p].eler
SFX d2 eter etterais/n'q'j'l'm't' jeter
SFX d2 eter etterais/n'q'j'l'm't' [^j]eter
SFX d2 eler ellerais/n'q'j'l'm't' ppeler
SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d2 eter etterait/n'q'l'm't's' jeter
SFX d2 eter etterait/n'q'l'm't's' [^j]eter
SFX d2 eler ellerait/n'q'l'm't's' ppeler
SFX d2 eler ellerait/n'q'l'm't's' [^p].eler
SFX d2 eter etterions/n'q'l't' jeter
SFX d2 eter etterions/n'q'l't' [^j]eter
SFX d2 eler ellerions/n'q'l't' ppeler
SFX d2 eler ellerions/n'q'l't' [^p].eler
SFX d2 eter etteriez/n'q'l'm' jeter
SFX d2 eter etteriez/n'q'l'm' [^j]eter
SFX d2 eler elleriez/n'q'l'm' ppeler
SFX d2 eler elleriez/n'q'l'm' [^p].eler
SFX d2 eter etteraient/n'q'l'm't's' jeter
SFX d2 eter etteraient/n'q'l'm't's' [^j]eter
SFX d2 eler elleraient/n'q'l'm't's' ppeler
SFX d2 eler elleraient/n'q'l'm't's' [^p].eler
SFX d2 er asse/n'q'j'l't' er
SFX d2 er asses/n'q'l'm' er
SFX d2 er ât/n'q'l'm't's' er
SFX d2 er assions/n'q'l't' er
SFX d2 er assiez/n'q'l'm' er
SFX d2 er assent/n'q'l'm't's' er
SFX d2 eter ette/n'l'm' jeter
SFX d2 eter ette/n'l'm' [^j]eter
SFX d2 eler elle/n'l'm' ppeler
SFX d2 eler elle/n'l'm' [^p].eler
SFX d2 er ons/n'l' er
SFX d2 er ez/n'l'm' er
SFX d3 Y 83
SFX d3 er er/m't's' er
SFX d3 er ant/m't's' er
SFX d3 eter ette/m's' jeter
SFX d3 eter ette/m's' [^j]eter
SFX d3 eler elle/m's' ppeler
SFX d3 eler elle/m's' [^p].eler
SFX d3 eter ettes/t' jeter
SFX d3 eter ettes/t' [^j]eter
SFX d3 eler elles/t' ppeler
SFX d3 eler elles/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d3 eter ettent/s' jeter
SFX d3 eter ettent/s' [^j]eter
SFX d3 eler ellent/s' ppeler
SFX d3 eler ellent/s' [^p].eler
SFX d3 er ais/m't' er
SFX d3 er ait/s' er
SFX d3 er ions er
SFX d3 er iez er
SFX d3 er aient/s' er
SFX d3 er ai/m' er
SFX d3 er as/t' er
SFX d3 er a/s' er
SFX d3 er âmes er
SFX d3 er âtes er
SFX d3 er èrent/s' er
SFX d3 eter etterai/m' jeter
SFX d3 eter etterai/m' [^j]eter
SFX d3 eler ellerai/m' ppeler
SFX d3 eler ellerai/m' [^p].eler
SFX d3 eter etteras/t' jeter
SFX d3 eter etteras/t' [^j]eter
SFX d3 eler elleras/t' ppeler
SFX d3 eler elleras/t' [^p].eler
SFX d3 eter ettera/s' jeter
SFX d3 eter ettera/s' [^j]eter
SFX d3 eler ellera/s' ppeler
SFX d3 eler ellera/s' [^p].eler
SFX d3 eter etterons jeter
SFX d3 eter etterons [^j]eter
SFX d3 eler ellerons ppeler
SFX d3 eler ellerons [^p].eler
SFX d3 eter etterez jeter
SFX d3 eter etterez [^j]eter
SFX d3 eler ellerez ppeler
SFX d3 eler ellerez [^p].eler
SFX d3 eter etteront/s' jeter
SFX d3 eter etteront/s' [^j]eter
SFX d3 eler elleront/s' ppeler
SFX d3 eler elleront/s' [^p].eler
SFX d3 eter etterais/m't' jeter
SFX d3 eter etterais/m't' [^j]eter
SFX d3 eler ellerais/m't' ppeler
SFX d3 eler ellerais/m't' [^p].eler
SFX d3 eter etterait/s' jeter
SFX d3 eter etterait/s' [^j]eter
SFX d3 eler ellerait/s' ppeler
SFX d3 eler ellerait/s' [^p].eler
SFX d3 eter etterions jeter
SFX d3 eter etterions [^j]eter
SFX d3 eler ellerions ppeler
SFX d3 eler ellerions [^p].eler
SFX d3 eter etteriez jeter
SFX d3 eter etteriez [^j]eter
SFX d3 eler elleriez ppeler
SFX d3 eler elleriez [^p].eler
SFX d3 eter etteraient/s' jeter
SFX d3 eter etteraient/s' [^j]eter
SFX d3 eler elleraient/s' ppeler
SFX d3 eler elleraient/s' [^p].eler
SFX d3 er asse/m' er
SFX d3 er asses/t' er
SFX d3 er ât/s' er
SFX d3 er assions er
SFX d3 er assiez er
SFX d3 er assent/s' er
SFX d3 eter ette/t' jeter
SFX d3 eter ette/t' [^j]eter
SFX d3 eler elle/t' ppeler
SFX d3 eler elle/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d4 Y 98
SFX d4 er er/n'q'd'l'm't's' er
SFX d4 er ant/n'q'l'm't's' er
SFX d4 eter ette/n'q'j'l'm't's' jeter
SFX d4 eter ette/n'q'j'l'm't's' [^j]eter
SFX d4 eler elle/n'q'j'l'm't's' ppeler
SFX d4 eler elle/n'q'j'l'm't's' [^p].eler
SFX d4 eler elle/n'q'j'l'm't's' épeler
SFX d4 eter ettes/n'q'l'm't' jeter
SFX d4 eter ettes/n'q'l'm't' [^j]eter
SFX d4 eler elles/n'q'l'm't' ppeler
SFX d4 eler elles/n'q'l'm't' [^p].eler
SFX d4 eler elles/n'q'l'm't' épeler
SFX d4 er ons/n'q'l't' er
SFX d4 er ez/n'q'l'm' er
SFX d4 eter ettent/n'q'l'm't's' jeter
SFX d4 eter ettent/n'q'l'm't's' [^j]eter
SFX d4 eler ellent/n'q'l'm't's' ppeler
SFX d4 eler ellent/n'q'l'm't's' [^p].eler
SFX d4 eler ellent/n'q'l'm't's' épeler
SFX d4 er ais/n'q'j'l'm't' er
SFX d4 er ait/n'q'l'm't's' er
SFX d4 er ions/n'q'l't' er
SFX d4 er iez/n'q'l'm' er
SFX d4 er aient/n'q'l'm't's' er
SFX d4 er ai/n'q'j'l'm't' er
SFX d4 er as/n'q'l'm't' er
SFX d4 er a/n'q'l'm't's' er
SFX d4 er âmes/n'q'l't' er
SFX d4 er âtes/n'q'l'm' er
SFX d4 er èrent/n'q'l'm't's' er
SFX d4 eter etterai/n'q'j'l'm't' jeter
SFX d4 eter etterai/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerai/n'q'j'l'm't' ppeler
SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerai/n'q'j'l'm't' épeler
SFX d4 eter etteras/n'q'l'm't' jeter
SFX d4 eter etteras/n'q'l'm't' [^j]eter
SFX d4 eler elleras/n'q'l'm't' ppeler
SFX d4 eler elleras/n'q'l'm't' [^p].eler
SFX d4 eler elleras/n'q'l'm't' épeler
SFX d4 eter ettera/n'q'l'm't's' jeter
SFX d4 eter ettera/n'q'l'm't's' [^j]eter
SFX d4 eler ellera/n'q'l'm't's' ppeler
SFX d4 eler ellera/n'q'l'm't's' [^p].eler
SFX d4 eler ellera/n'q'l'm't's' épeler
SFX d4 eter etterons/n'q'l't' jeter
SFX d4 eter etterons/n'q'l't' [^j]eter
SFX d4 eler ellerons/n'q'l't' ppeler
SFX d4 eler ellerons/n'q'l't' [^p].eler
SFX d4 eler ellerons/n'q'l't' épeler
SFX d4 eter etterez/n'q'l'm' jeter
SFX d4 eter etterez/n'q'l'm' [^j]eter
SFX d4 eler ellerez/n'q'l'm' ppeler
SFX d4 eler ellerez/n'q'l'm' [^p].eler
SFX d4 eler ellerez/n'q'l'm' épeler
SFX d4 eter etteront/n'q'l'm't's' jeter
SFX d4 eter etteront/n'q'l'm't's' [^j]eter
SFX d4 eler elleront/n'q'l'm't's' ppeler
SFX d4 eler elleront/n'q'l'm't's' [^p].eler
SFX d4 eler elleront/n'q'l'm't's' épeler
SFX d4 eter etterais/n'q'j'l'm't' jeter
SFX d4 eter etterais/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerais/n'q'j'l'm't' ppeler
SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerais/n'q'j'l'm't' épeler
SFX d4 eter etterait/n'q'l'm't's' jeter
SFX d4 eter etterait/n'q'l'm't's' [^j]eter
SFX d4 eler ellerait/n'q'l'm't's' ppeler
SFX d4 eler ellerait/n'q'l'm't's' [^p].eler
SFX d4 eler ellerait/n'q'l'm't's' épeler
SFX d4 eter etterions/n'q'l't' jeter
SFX d4 eter etterions/n'q'l't' [^j]eter
SFX d4 eler ellerions/n'q'l't' ppeler
SFX d4 eler ellerions/n'q'l't' [^p].eler
SFX d4 eler ellerions/n'q'l't' épeler
SFX d4 eter etteriez/n'q'l'm' jeter
SFX d4 eter etteriez/n'q'l'm' [^j]eter
SFX d4 eler elleriez/n'q'l'm' ppeler
SFX d4 eler elleriez/n'q'l'm' [^p].eler
SFX d4 eler elleriez/n'q'l'm' épeler
SFX d4 eter etteraient/n'q'l'm't's' jeter
SFX d4 eter etteraient/n'q'l'm't's' [^j]eter
SFX d4 eler elleraient/n'q'l'm't's' ppeler
SFX d4 eler elleraient/n'q'l'm't's' [^p].eler
SFX d4 eler elleraient/n'q'l'm't's' épeler
SFX d4 er asse/n'q'j'l'm't' er
SFX d4 er asses/n'q'l'm't' er
SFX d4 er ât/n'q'l'm't's' er
SFX d4 er assions/n'q'l't' er
SFX d4 er assiez/n'q'l'm' er
SFX d4 er assent/n'q'l'm't's' er
SFX d4 eter ette/n'l'm't' jeter
SFX d4 eter ette/n'l'm't' [^j]eter
SFX d4 eler elle/n'l'm't' ppeler
SFX d4 eler elle/n'l'm't' [^p].eler
SFX d4 eler elle/n'l'm't' épeler
SFX d4 er ons/n'l' er
SFX d4 er ez/n'l'm' er
SFX d5 Y 83
SFX d5 er er/m'q'd'm't's' er
SFX d5 er ant/m'q'd'm't's' er
SFX d5 eter ette/n'q'j'm't's' jeter
SFX d5 eter ette/n'q'j'm't's' [^j]eter
SFX d5 eler elle/n'q'j'm't's' ppeler
SFX d5 eler elle/n'q'j'm't's' [^p].eler
SFX d5 eter ettes/n'm't' jeter
SFX d5 eter ettes/n'm't' [^j]eter
SFX d5 eler elles/n'm't' ppeler
SFX d5 eler elles/n'm't' [^p].eler
SFX d5 er ons/n't' er
SFX d5 er ez/n'm' er
SFX d5 eter ettent/n'q'm't's' jeter
SFX d5 eter ettent/n'q'm't's' [^j]eter
SFX d5 eler ellent/n'q'm't's' ppeler
SFX d5 eler ellent/n'q'm't's' [^p].eler
SFX d5 er ais/n'j'm't' er
SFX d5 er ait/n'q'm't's' er
SFX d5 er ions/n't' er
SFX d5 er iez/n'm' er
SFX d5 er aient/n'q'm't's' er
SFX d5 er ai/n'j'm't' er
SFX d5 er as/n'm't' er
SFX d5 er a/n'q'm't's' er
SFX d5 er âmes/n't' er
SFX d5 er âtes/n'm' er
SFX d5 er èrent/n'q'm't's' er
SFX d5 eter etterai/n'j'm't' jeter
SFX d5 eter etterai/n'j'm't' [^j]eter
SFX d5 eler ellerai/n'j'm't' ppeler
SFX d5 eler ellerai/n'j'm't' [^p].eler
SFX d5 eter etteras/n'm't' jeter
SFX d5 eter etteras/n'm't' [^j]eter
SFX d5 eler elleras/n'm't' ppeler
SFX d5 eler elleras/n'm't' [^p].eler
SFX d5 eter ettera/n'q'm't's' jeter
SFX d5 eter ettera/n'q'm't's' [^j]eter
SFX d5 eler ellera/n'q'm't's' ppeler
SFX d5 eler ellera/n'q'm't's' [^p].eler
SFX d5 eter etterons/n't' jeter
SFX d5 eter etterons/n't' [^j]eter
SFX d5 eler ellerons/n't' ppeler
SFX d5 eler ellerons/n't' [^p].eler
SFX d5 eter etterez/n'm' jeter
SFX d5 eter etterez/n'm' [^j]eter
SFX d5 eler ellerez/n'm' ppeler
SFX d5 eler ellerez/n'm' [^p].eler
SFX d5 eter etteront/n'q'm't's' jeter
SFX d5 eter etteront/n'q'm't's' [^j]eter
SFX d5 eler elleront/n'q'm't's' ppeler
SFX d5 eler elleront/n'q'm't's' [^p].eler
SFX d5 eter etterais/n'j'm't' jeter
SFX d5 eter etterais/n'j'm't' [^j]eter
SFX d5 eler ellerais/n'j'm't' ppeler
SFX d5 eler ellerais/n'j'm't' [^p].eler
SFX d5 eter etterait/n'q'm't's' jeter
SFX d5 eter etterait/n'q'm't's' [^j]eter
SFX d5 eler ellerait/n'q'm't's' ppeler
SFX d5 eler ellerait/n'q'm't's' [^p].eler
SFX d5 eter etterions/n't' jeter
SFX d5 eter etterions/n't' [^j]eter
SFX d5 eler ellerions/n't' ppeler
SFX d5 eler ellerions/n't' [^p].eler
SFX d5 eter etteriez/n'm' jeter
SFX d5 eter etteriez/n'm' [^j]eter
SFX d5 eler elleriez/n'm' ppeler
SFX d5 eler elleriez/n'm' [^p].eler
SFX d5 eter etteraient/n'q'm't's' jeter
SFX d5 eter etteraient/n'q'm't's' [^j]eter
SFX d5 eler elleraient/n'q'm't's' ppeler
SFX d5 eler elleraient/n'q'm't's' [^p].eler
SFX d5 er asse/n'j'm't' er
SFX d5 er asses/n'm't' er
SFX d5 er ât/n'q'm't's' er
SFX d5 er assions/n't' er
SFX d5 er assiez/n'm' er
SFX d5 er assent/n'q'm't's' er
SFX d5 eter ette/m' jeter
SFX d5 eter ette/m' [^j]eter
SFX d5 eler elle/m' ppeler
SFX d5 eler elle/m' [^p].eler
SFX d5 er ons er
SFX d5 er ez er
SFX aA Y 54
SFX aA ller ller/n'q'd'm't' aller
SFX aA ller llant/n'q'm't' aller
SFX aA ller llé/q' aller
SFX aA ller llés/q' aller
SFX aA ller llée/q' aller
SFX aA ller llées/q' aller
SFX aA aller vais aller
SFX aA aller vas aller
SFX aA aller va aller
SFX aA ller llons/n'q' aller
SFX aA ller llez/n'q' aller
SFX aA aller vont aller
SFX aA ller llais/n'q'j' aller
SFX aA ller llait/n'q'm't' aller
SFX aA ller llions/n'q' aller
SFX aA ller lliez/n'q' aller
SFX aA ller llaient/n'q'm't' aller
SFX aA ller llai/n'q'j' aller
SFX aA ller llas/n'q' aller
SFX aA ller lla/n'q'm't' aller
SFX aA ller llâmes/n'q' aller
SFX aA ller llâtes/n'q' aller
SFX aA ller llèrent/n'q'm't' aller
SFX aA aller irai/n'q'j' aller
SFX aA aller iras/n'q' aller
SFX aA aller ira/n'q'm't' aller
SFX aA aller irons/n'q' aller
SFX aA aller irez/n'q'm't' aller
SFX aA aller iront/n'q' aller
SFX aA aller irais/n'q'j' aller
SFX aA aller irait/n'q'm't' aller
SFX aA aller irions/n'q' aller
SFX aA aller iriez/n'q' aller
SFX aA aller iraient/n'q'm't' aller
SFX aA ller ille/n'q'j'm't' aller
SFX aA ller illes/n' aller
SFX aA ller llions/n' aller
SFX aA ller lliez/n' aller
SFX aA ller illent/n'q'm't' aller
SFX aA ller llasse/n'q'j' aller
SFX aA ller llasses/n'q' aller
SFX aA ller llât/n'q'm't' aller
SFX aA ller llassions/n'q' aller
SFX aA ller llassiez/n'q' aller
SFX aA ller llassent/n'q'm't' aller
SFX aA ller llons/n' aller
SFX aA aller va aller
SFX aA aller vas-y aller
SFX aA aller va-t'en aller
SFX aA ller llons-y aller
SFX aA ller llons-nous-en aller
SFX aA ller llez/n' aller
SFX aA ller llez-y aller
SFX aA ller llez-vous-en aller
SFX aD Y 44
SFX aD voyer voyer/n'q'd'l'm't's' envoyer
SFX aD voyer voyant/n'q'l'm't's' envoyer
SFX aD voyer voyé/q' envoyer
SFX aD voyer voyés/q' envoyer
SFX aD voyer voyée/q' envoyer
SFX aD voyer voyées/q' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'q'l'm't' envoyer
SFX aD voyer voyons/n'q'l't' envoyer
SFX aD voyer voyez/n'q'l'm' envoyer
SFX aD voyer voient/n'q'l'm't's' envoyer
SFX aD voyer voyais/n'q'j'l'm't' envoyer
SFX aD voyer voyait/n'q'l'm't's' envoyer
SFX aD voyer voyions/n'q'l't' envoyer
SFX aD voyer voyiez/n'q'l'm' envoyer
SFX aD voyer voyaient/n'q'l'm't's' envoyer
SFX aD voyer voyai/n'q'j'l'm't' envoyer
SFX aD voyer voyas/n'q'l'm't' envoyer
SFX aD voyer voya/n'q'l'm't's' envoyer
SFX aD voyer voyâmes/n'q'l't' envoyer
SFX aD voyer voyâtes/n'q'l'm' envoyer
SFX aD voyer voyèrent/n'q'l'm't's' envoyer
SFX aD voyer verrai/n'q'j'l'm't' envoyer
SFX aD voyer verras/n'q'l'm't' envoyer
SFX aD voyer verra/n'q'l'm't's' envoyer
SFX aD voyer verrons/n'q'l't' envoyer
SFX aD voyer verrez/n'q'l'm' envoyer
SFX aD voyer verront/n'q'l'm't's' envoyer
SFX aD voyer verrais/n'q'j'l'm't' envoyer
SFX aD voyer verrait/n'q'l'm't's' envoyer
SFX aD voyer verrions/n'q'l't' envoyer
SFX aD voyer verriez/n'q'l'm' envoyer
SFX aD voyer verraient/n'q'l'm't's' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'l'm't' envoyer
SFX aD voyer voyasse/n'q'j'l'm't' envoyer
SFX aD voyer voyasses/n'q'l'm't' envoyer
SFX aD voyer voyât/n'q'l'm't's' envoyer
SFX aD voyer voyassions/n'q'l't' envoyer
SFX aD voyer voyassiez/n'q'l'm' envoyer
SFX aD voyer voyassent/n'q'l'm't's' envoyer
SFX aD voyer voie/n'l'm't' envoyer
SFX aD voyer voyons/n'l' envoyer
SFX aD voyer voyez/n'l'm' envoyer
SFX aE Y 6
SFX aE direr direr/n'q'd'l'm't's' direr
SFX aE direr dirant/n'q'l'm't's' direr
SFX aE direr diré/q' direr
SFX aE direr dirés/q' direr
SFX aE direr dirée/q' direr
SFX aE direr dirées/q' direr
SFX aF N 17
SFX aF cerner cernant er
SFX aF cerner cerné er
SFX aF cerner cernés er
SFX aF cerner cernée er
SFX aF cerner cernées er
SFX aF cerner cerne er
SFX aF cerner cernent er
SFX aF cerner cernait er
SFX aF cerner cernaient er
SFX aF cerner cerna er
SFX aF cerner cernèrent er
SFX aF cerner cernera er
SFX aF cerner cerneront er
SFX aF cerner cernerait er
SFX aF cerner cerneraient er
SFX aF cerner cernât er
SFX aF cerner cernassent er
SFX aG Y 19
SFX aG er er/n'q'd'm't' er
SFX aG er ant/n'q'm't' er
SFX aG mber mbé mber
SFX aG lter lté lter
SFX aG lter ltés lter
SFX aG lter ltée lter
SFX aG lter ltées lter
SFX aG er e/n'q'm't' er
SFX aG er ent/n'q'm't' er
SFX aG er ait/n'q'm't' er
SFX aG er aient/n'q'm't' er
SFX aG er a/n'q'm't' er
SFX aG er èrent/n'q'm't' er
SFX aG er era/n'q'm't' er
SFX aG er eront/n'q'm't' er
SFX aG er erait/n'q'm't' er
SFX aG er eraient/n'q'm't' er
SFX aG er ât/n'q'm't' er
SFX aG er assent/n'q'm't' er
SFX aH N 38
SFX aH er ant gger
SFX aH er é gger
SFX aH er e gger
SFX aH er es gger
SFX aH er ons gger
SFX aH er ez gger
SFX aH er ent gger
SFX aH er ais gger
SFX aH er ait gger
SFX aH er ions gger
SFX aH er iez gger
SFX aH er aient gger
SFX aH er ai gger
SFX aH er as gger
SFX aH er a gger
SFX aH er âmes gger
SFX aH er âtes gger
SFX aH er èrent gger
SFX aH er erai gger
SFX aH er eras gger
SFX aH er era gger
SFX aH er erons gger
SFX aH er erez gger
SFX aH er eront gger
SFX aH er erais gger
SFX aH er erait gger
SFX aH er erions gger
SFX aH er eriez gger
SFX aH er eraient gger
SFX aH er asse gger
SFX aH er asses gger
SFX aH er ât gger
SFX aH er assions gger
SFX aH er assiez gger
SFX aH er assent gger
SFX aH er e gger
SFX aH er ons gger
SFX aH er ez gger
SFX aY N 41
SFX aY neler nelant neler
SFX aY neler nelé neler
SFX aY neler nelés neler
SFX aY neler nelée neler
SFX aY neler nelées neler
SFX aY éneler énelle éneler
SFX aY éneler énelles éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aY éneler énellent éneler
SFX aY neler nelais neler
SFX aY neler nelait neler
SFX aY neler nelions neler
SFX aY neler neliez neler
SFX aY neler nelaient neler
SFX aY neler nelai neler
SFX aY neler nelas neler
SFX aY neler nela neler
SFX aY neler nelâmes neler
SFX aY neler nelâtes neler
SFX aY neler nelèrent neler
SFX aY éneler énellerai éneler
SFX aY éneler énelleras éneler
SFX aY éneler énellera éneler
SFX aY éneler énellerons éneler
SFX aY éneler énellerez éneler
SFX aY éneler énelleront éneler
SFX aY éneler énellerais éneler
SFX aY éneler énellerait éneler
SFX aY éneler énellerions éneler
SFX aY éneler énelleriez éneler
SFX aY éneler énelleraient éneler
SFX aY neler nelasse neler
SFX aY neler nelasses neler
SFX aY neler nelât neler
SFX aY neler nelassions neler
SFX aY neler nelassiez neler
SFX aY neler nelassent neler
SFX aY éneler énelle éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aZ N 41
SFX aZ teler telant teler
SFX aZ teler telé teler
SFX aZ teler telés teler
SFX aZ teler telée teler
SFX aZ teler telées teler
SFX aZ ételer ételle ételer
SFX aZ ételer ételles ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX aZ ételer étellent ételer
SFX aZ teler telais teler
SFX aZ teler telait teler
SFX aZ teler telions teler
SFX aZ teler teliez teler
SFX aZ teler telaient teler
SFX aZ teler telai teler
SFX aZ teler telas teler
SFX aZ teler tela teler
SFX aZ teler telâmes teler
SFX aZ teler telâtes teler
SFX aZ teler telèrent teler
SFX aZ ételer étellerai ételer
SFX aZ ételer ételleras ételer
SFX aZ ételer étellera ételer
SFX aZ ételer étellerons ételer
SFX aZ ételer étellerez ételer
SFX aZ ételer ételleront ételer
SFX aZ ételer étellerais ételer
SFX aZ ételer étellerait ételer
SFX aZ ételer étellerions ételer
SFX aZ ételer ételleriez ételer
SFX aZ ételer ételleraient ételer
SFX aZ teler telasse teler
SFX aZ teler telasses teler
SFX aZ teler telât teler
SFX aZ teler telassions teler
SFX aZ teler telassiez teler
SFX aZ teler telassent teler
SFX aZ ételer ételle ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX dA Y 42
SFX dA peler peler/n'q'd'l'm't's' peler
SFX dA peler pelant/n'q'l'm't's' peler
SFX dA peler pelé/q' peler
SFX dA peler pelés/q' peler
SFX dA peler pelée/q' peler
SFX dA peler pelées/q' peler
SFX dA peler pelle/n'q'j'l'm't's' peler
SFX dA peler pelles/n'q'l'm' peler
SFX dA peler pelons/n'q'l't' peler
SFX dA peler pelez/n'q'l'm' peler
SFX dA peler pellent/n'q'l'm't's' peler
SFX dA peler pelais/n'q'j'l't' peler
SFX dA peler pelait/n'q'l'm't's' peler
SFX dA peler pelions/n'q'l't' peler
SFX dA peler peliez/n'q'l'm' peler
SFX dA peler pelaient/n'q'l'm't's' peler
SFX dA peler pelai/n'q'j'l't' peler
SFX dA peler pelas/n'q'l'm' peler
SFX dA peler pela/n'q'l'm't's' peler
SFX dA peler pelâmes/n'q'l't' peler
SFX dA peler pelâtes/n'q'l'm' peler
SFX dA peler pelèrent/n'q'l'm't's' peler
SFX dA peler pellerai/n'q'j'l't' peler
SFX dA peler pelleras/n'q'l'm' peler
SFX dA peler pellera/n'q'l'm't's' peler
SFX dA peler pellerons/n'q'l't' peler
SFX dA peler pellerez/n'q'l'm' peler
SFX dA peler pelleront/n'q'l'm't's' peler
SFX dA peler pellerais/n'q'j'l't' peler
SFX dA peler pellerait/n'q'l'm't's' peler
SFX dA peler pellerions/n'q'l't' peler
SFX dA peler pelleriez/n'q'l'm' peler
SFX dA peler pelleraient/n'q'l'm't's' peler
SFX dA peler pelasse/n'q'j'l't' peler
SFX dA peler pelasses/n'q'l'm' peler
SFX dA peler pelât/n'q'l'm't's' peler
SFX dA peler pelassions/n'q'l't' peler
SFX dA peler pelassiez/n'q'l'm' peler
SFX dA peler pelassent/n'q'l'm't's' peler
SFX dA peler pelle/n'l'm' peler
SFX dA peler pelons/n'l' peler
SFX dA peler pelez/n'l'm' peler
SFX f0 Y 32
SFX f0 ir issant ir
SFX f0 ir is ir
SFX f0 ir it ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f0 ir issent ir
SFX f0 ir issais ir
SFX f0 ir issait ir
SFX f0 ir issions ir
SFX f0 ir issiez ir
SFX f0 ir issaient ir
SFX f0 ir îmes ir
SFX f0 ir îtes ir
SFX f0 ir irent ir
SFX f0 ir irai ir
SFX f0 ir iras ir
SFX f0 ir ira ir
SFX f0 ir irons ir
SFX f0 ir irez ir
SFX f0 ir iront ir
SFX f0 ir irais ir
SFX f0 ir irait ir
SFX f0 ir irions ir
SFX f0 ir iriez ir
SFX f0 ir iraient ir
SFX f0 ir isse ir
SFX f0 ir isses ir
SFX f0 ir isse ir
SFX f0 ir ît ir
SFX f0 ir is ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f1 Y 33
SFX f1 ir ir/n'q'd' ir
SFX f1 ir issant/n'q' ir
SFX f1 ir is/n'j' ir
SFX f1 ir it/n'q' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f1 ir issent/n'q' ir
SFX f1 ir issais/n'j' ir
SFX f1 ir issait/n'q' ir
SFX f1 ir issions/n' ir
SFX f1 ir issiez/n' ir
SFX f1 ir issaient/n'q' ir
SFX f1 ir îmes/n' ir
SFX f1 ir îtes/n' ir
SFX f1 ir irent/n'q' ir
SFX f1 ir irai/n'j' ir
SFX f1 ir iras/n' ir
SFX f1 ir ira/n'q' ir
SFX f1 ir irons/n' ir
SFX f1 ir irez/n' ir
SFX f1 ir iront/n'q' ir
SFX f1 ir irais/n'j' ir
SFX f1 ir irait/n'q' ir
SFX f1 ir irions/n' ir
SFX f1 ir iriez/n' ir
SFX f1 ir iraient/n'q' ir
SFX f1 ir isse/n'j' ir
SFX f1 ir isses/n' ir
SFX f1 ir isse/n'q' ir
SFX f1 ir ît/n'q' ir
SFX f1 ir is/n' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f2 Y 33
SFX f2 ir ir/n'q'd'l'm't's' ir
SFX f2 ir issant/n'q'l'm't's' ir
SFX f2 ir is/n'q'j'l't' ir
SFX f2 ir it/n'q'l'm't's' ir
SFX f2 ir issons/n'q'l't' ir
SFX f2 ir issez/n'q'l'm' ir
SFX f2 ir issent/n'q'l'm't's' ir
SFX f2 ir issais/n'q'j'l't' ir
SFX f2 ir issait/n'q'l'm't's' ir
SFX f2 ir issions/n'q'l't' ir
SFX f2 ir issiez/n'q'l'm' ir
SFX f2 ir issaient/n'q'l'm't's' ir
SFX f2 ir îmes/n'q'l't' ir
SFX f2 ir îtes/n'q'l'm' ir
SFX f2 ir irent/n'q'l'm't's' ir
SFX f2 ir irai/n'q'j'l't' ir
SFX f2 ir iras/n'q'l'm't' ir
SFX f2 ir ira/n'q'l'm't's' ir
SFX f2 ir irons/n'q'l't' ir
SFX f2 ir irez/n'q'l'm' ir
SFX f2 ir iront/n'q'l'm't's' ir
SFX f2 ir irais/n'q'j'l'm't' ir
SFX f2 ir irait/n'q'l'm't's' ir
SFX f2 ir irions/n'q'l't' ir
SFX f2 ir iriez/n'q'l'm' ir
SFX f2 ir iraient/n'q'l'm't's' ir
SFX f2 ir isse/n'q'j'l't' ir
SFX f2 ir isses/n'q'l'm' ir
SFX f2 ir isse/n'q'l'm't's' ir
SFX f2 ir ît/n'q'l'm't's' ir
SFX f2 ir is/n'l'm' ir
SFX f2 ir issons/n'l' ir
SFX f2 ir issez/n'l'm' ir
SFX f3 Y 33
SFX f3 ir ir/m't's' ir
SFX f3 ir issant/m't's' ir
SFX f3 ir is/m't' ir
SFX f3 ir it/s' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f3 ir issent/s' ir
SFX f3 ir issais/m't' ir
SFX f3 ir issait/s' ir
SFX f3 ir issions ir
SFX f3 ir issiez ir
SFX f3 ir issaient/s' ir
SFX f3 ir îmes ir
SFX f3 ir îtes ir
SFX f3 ir irent/s' ir
SFX f3 ir irai/m' ir
SFX f3 ir iras/t' ir
SFX f3 ir ira/s' ir
SFX f3 ir irons ir
SFX f3 ir irez ir
SFX f3 ir iront/s' ir
SFX f3 ir irais/m't' ir
SFX f3 ir irait/s' ir
SFX f3 ir irions ir
SFX f3 ir iriez ir
SFX f3 ir iraient/s' ir
SFX f3 ir isse/m' ir
SFX f3 ir isses/t' ir
SFX f3 ir isse/s' ir
SFX f3 ir ît/s' ir
SFX f3 ir is/t' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f4 Y 33
SFX f4 ir ir/n'q'd'l'm't's' ir
SFX f4 ir issant/n'q'l'm't's' ir
SFX f4 ir is/n'q'j'l'm't' ir
SFX f4 ir it/n'q'l'm't's' ir
SFX f4 ir issons/n'q'l't' ir
SFX f4 ir issez/n'q'l'm' ir
SFX f4 ir issent/n'q'l'm't's' ir
SFX f4 ir issais/n'q'j'l'm't' ir
SFX f4 ir issait/n'q'l'm't's' ir
SFX f4 ir issions/n'q'l't' ir
SFX f4 ir issiez/n'q'l'm' ir
SFX f4 ir issaient/n'q'l'm't's' ir
SFX f4 ir îmes/n'q'l't' ir
SFX f4 ir îtes/n'q'l'm' ir
SFX f4 ir irent/n'q'l'm't's' ir
SFX f4 ir irai/n'q'j'l'm't' ir
SFX f4 ir iras/n'q'l'm't' ir
SFX f4 ir ira/n'q'l'm't's' ir
SFX f4 ir irons/n'q'l't' ir
SFX f4 ir irez/n'q'l'm' ir
SFX f4 ir iront/n'q'l'm't's' ir
SFX f4 ir irais/n'q'j'l'm't' ir
SFX f4 ir irait/n'q'l'm't's' ir
SFX f4 ir irions/n'q'l't' ir
SFX f4 ir iriez/n'q'l'm' ir
SFX f4 ir iraient/n'q'l'm't's' ir
SFX f4 ir isse/n'q'j'l'm't' ir
SFX f4 ir isses/n'q'l'm't' ir
SFX f4 ir isse/n'q'l'm't's' ir
SFX f4 ir ît/n'q'l'm't's' ir
SFX f4 ir is/n'l'm't' ir
SFX f4 ir issons/n'l' ir
SFX f4 ir issez/n'l'm' ir
SFX f5 Y 33
SFX f5 ir ir/n'q'd'm't's' ir
SFX f5 ir issant/n'q'm't's' ir
SFX f5 ir is/n'j'm't' ir
SFX f5 ir it/n'q'm't's' ir
SFX f5 ir issons/n't' ir
SFX f5 ir issez/n'm' ir
SFX f5 ir issent/n'q'm't's' ir
SFX f5 ir issais/n'j'm't' ir
SFX f5 ir issait/n'q'm't's' ir
SFX f5 ir issions/n't' ir
SFX f5 ir issiez/n'm' ir
SFX f5 ir issaient/n'q'm't's' ir
SFX f5 ir îmes/n't' ir
SFX f5 ir îtes/n'm' ir
SFX f5 ir irent/n'q'm't's' ir
SFX f5 ir irai/n'j'm't' ir
SFX f5 ir iras/n'm't' ir
SFX f5 ir ira/n'q'm't's' ir
SFX f5 ir irons/n't' ir
SFX f5 ir irez/n'm' ir
SFX f5 ir iront/n'q'm't's' ir
SFX f5 ir irais/n'j'm't' ir
SFX f5 ir irait/n'q'm't's' ir
SFX f5 ir irions/n't' ir
SFX f5 ir iriez/n'm' ir
SFX f5 ir iraient/n'q'm't's' ir
SFX f5 ir isse/n'j'm't' ir
SFX f5 ir isses/n'm't' ir
SFX f5 ir isse/n'q'm't's' ir
SFX f5 ir ît/n'q'm't's' ir
SFX f5 ir is/n'm' ir
SFX f5 ir issons/n' ir
SFX f5 ir issez/n'm' ir
SFX fA N 37
SFX fA aïr aïssant aïr
SFX fA aïr aï aïr
SFX fA aïr aïs aïr
SFX fA aïr aïe aïr
SFX fA aïr aïes aïr
SFX fA aïr ais aïr
SFX fA aïr ait aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fA aïr aïssent aïr
SFX fA aïr aïssais aïr
SFX fA aïr aïssait aïr
SFX fA aïr aïssions aïr
SFX fA aïr aïssiez aïr
SFX fA aïr aïssaient aïr
SFX fA aïr aïs aïr
SFX fA aïr aït aïr
SFX fA aïr aïmes aïr
SFX fA aïr aïtes aïr
SFX fA aïr aïrent aïr
SFX fA aïr aïrai aïr
SFX fA aïr aïras aïr
SFX fA aïr aïra aïr
SFX fA aïr aïrons aïr
SFX fA aïr aïrez aïr
SFX fA aïr aïront aïr
SFX fA aïr aïrais aïr
SFX fA aïr aïrait aïr
SFX fA aïr aïrions aïr
SFX fA aïr aïriez aïr
SFX fA aïr aïraient aïr
SFX fA aïr aïsse aïr
SFX fA aïr aïsses aïr
SFX fA aïr aïsse aïr
SFX fA aïr ais aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fB Y 29
SFX fB haïr haïr/s' aïr
SFX fB haïr haïssant/s' aïr
SFX fB haïr haï aïr
SFX fB haïr haïs aïr
SFX fB haïr haïe aïr
SFX fB haïr haïes aïr
SFX fB haïr hait/s' aïr
SFX fB haïr haïssons aïr
SFX fB haïr haïssez aïr
SFX fB haïr haïssent/s' aïr
SFX fB haïr haïssait/s' aïr
SFX fB haïr haïssions aïr
SFX fB haïr haïssiez aïr
SFX fB haïr haïssaient/s' aïr
SFX fB haïr haït/s' aïr
SFX fB haïr haïmes aïr
SFX fB haïr haïtes aïr
SFX fB haïr haïrent/s' aïr
SFX fB haïr haïra/s' aïr
SFX fB haïr haïrons aïr
SFX fB haïr haïrez aïr
SFX fB haïr haïront/s' aïr
SFX fB haïr haïrait/s' aïr
SFX fB haïr haïrions aïr
SFX fB haïr haïriez aïr
SFX fB haïr haïraient/s' aïr
SFX fB haïr haïsse/s' aïr
SFX fB haïr haïssons-nous aïr
SFX fB haïr haïssez-vous aïr
SFX fC Y 11
SFX fC partir partir/n'q'd'l'm't's' impartir
SFX fC partir partissant/n'q'l'm't's' impartir
SFX fC partir parti/q' impartir
SFX fC partir partis/q' impartir
SFX fC partir partie/q' impartir
SFX fC partir parties/q' impartir
SFX fC partir partis/n'q'j'l'm't' impartir
SFX fC partir partit/n'q'l'm't's' impartir
SFX fC partir partissons/n'q'l't' impartir
SFX fC partir partissez/n'q'l'm' impartir
SFX fC partir partissent/n'q'l'm't's' impartir
SFX fD N 11
SFX fD ortir ortissant sortir
SFX fD ortir ortit sortir
SFX fD ortir ortissent sortir
SFX fD ortir ortissait sortir
SFX fD ortir ortissaient sortir
SFX fD ortir ortira sortir
SFX fD ortir ortiront sortir
SFX fD ortir ortirait sortir
SFX fD ortir ortiraient sortir
SFX fD ortir ortisse sortir
SFX fD ortir ortît sortir
SFX fY N 37
SFX fY uïr uïr/s' uïr
SFX fY uïr uïssant/m't's' uïr
SFX fY uïr uï uïr
SFX fY uïr uïs uïr
SFX fY uïr uïe uïr
SFX fY uïr uïes uïr
SFX fY uïr uïs/m't' uïr
SFX fY uïr uït/s' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fY uïr uïssent/s' uïr
SFX fY uïr uïssais/m't' uïr
SFX fY uïr uïssait/s' uïr
SFX fY uïr uïssions uïr
SFX fY uïr uïssiez uïr
SFX fY uïr uïssaient/s' uïr
SFX fY uïr uîmes uïr
SFX fY uïr uîtes uïr
SFX fY uïr uïrent/s' uïr
SFX fY uïr uïrai/m' uïr
SFX fY uïr uïras/t' uïr
SFX fY uïr uïra/s' uïr
SFX fY uïr uïrons uïr
SFX fY uïr uïrez uïr
SFX fY uïr uïront/s' uïr
SFX fY uïr uïrais/m't' uïr
SFX fY uïr uïrait/s' uïr
SFX fY uïr uïrions uïr
SFX fY uïr uïriez uïr
SFX fY uïr uïraient/s' uïr
SFX fY uïr uïsse/m' uïr
SFX fY uïr uïsses/t' uïr
SFX fY uïr uïsse/s' uïr
SFX fY uïr uît/s' uïr
SFX fY uïr uïs/t' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fZ N 7
SFX fZ gir gissant agir
SFX fZ gir git agir
SFX fZ gir gissait agir
SFX fZ gir gira agir
SFX fZ gir girait agir
SFX fZ gir gisse agir
SFX fZ gir gît agir
SFX p+ Y 8
SFX p+ er é/L'D'Q' er
SFX p+ er és/D'Q' er
SFX p+ er ée/L'D'Q' er
SFX p+ er ées/D'Q' er
SFX p+ ir i/L'D'Q' ir
SFX p+ ir is/D'Q' ir
SFX p+ ir ie/L'D'Q' ir
SFX p+ ir ies/D'Q' ir
SFX p. Y 2
SFX p. er é/q' er
SFX p. ir i/q' ir
SFX i0 Y 39
SFX i0 enir enir/n'q'd' enir
SFX i0 enir enant/n'q' enir
SFX i0 enir iens/n'j' enir
SFX i0 enir ient/n'q' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i0 enir iennent/n'q' enir
SFX i0 enir enais/n'j' enir
SFX i0 enir enait/n'q' enir
SFX i0 enir enions/n' enir
SFX i0 enir eniez/n' enir
SFX i0 enir enaient/n'q' enir
SFX i0 enir ins/n'j' enir
SFX i0 enir int/n'q' enir
SFX i0 enir înmes/n' enir
SFX i0 enir întes/n' enir
SFX i0 enir inrent/n'q' enir
SFX i0 enir iendrai/n'j' enir
SFX i0 enir iendras/n' enir
SFX i0 enir iendra/n'q' enir
SFX i0 enir iendrons/n' enir
SFX i0 enir iendrez/n' enir
SFX i0 enir iendront/n'q' enir
SFX i0 enir iendrais/n'j' enir
SFX i0 enir iendrait/n'q' enir
SFX i0 enir iendrions/n' enir
SFX i0 enir iendriez/n' enir
SFX i0 enir iendraient/n'q' enir
SFX i0 enir ienne/n'q'j' enir
SFX i0 enir iennes/n' enir
SFX i0 enir insse/n'j' enir
SFX i0 enir insses/n' enir
SFX i0 enir înt/n'q' enir
SFX i0 enir inssions/n' enir
SFX i0 enir inssiez/n' enir
SFX i0 enir inssent/n'q' enir
SFX i0 enir iens/n' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i1 Y 39
SFX i1 enir enir/n'q'd'l'm't's' enir
SFX i1 enir enant/n'q'l'm't's' enir
SFX i1 enir iens/n'q'j'l'm't' enir
SFX i1 enir ient/n'q'l'm't's' enir
SFX i1 enir enons/n'q'l't' enir
SFX i1 enir enez/n'q'l'm' enir
SFX i1 enir iennent/n'q'l'm't's' enir
SFX i1 enir enais/n'q'j'l'm't' enir
SFX i1 enir enait/n'q'l'm't's' enir
SFX i1 enir enions/n'q'l't' enir
SFX i1 enir eniez/n'q'l'm' enir
SFX i1 enir enaient/n'q'l'm't's' enir
SFX i1 enir ins/n'q'j'l'm't' enir
SFX i1 enir int/n'q'l'm't's' enir
SFX i1 enir înmes/n'q'l't' enir
SFX i1 enir întes/n'q'l'm' enir
SFX i1 enir inrent/n'q'l'm't's' enir
SFX i1 enir iendrai/n'q'j'l'm't' enir
SFX i1 enir iendras/n'q'l'm't' enir
SFX i1 enir iendra/n'q'l'm't's' enir
SFX i1 enir iendrons/n'q'l't' enir
SFX i1 enir iendrez/n'q'l'm' enir
SFX i1 enir iendront/n'q'l'm't's' enir
SFX i1 enir iendrais/n'q'j'l'm't' enir
SFX i1 enir iendrait/n'q'l'm't's' enir
SFX i1 enir iendrions/n'q'l't' enir
SFX i1 enir iendriez/n'q'l'm' enir
SFX i1 enir iendraient/n'q'l'm't's' enir
SFX i1 enir ienne/n'q'j'l'm't's' enir
SFX i1 enir iennes/n'l'm't' enir
SFX i1 enir insse/n'q'j'l'm't' enir
SFX i1 enir insses/n'q'l'm't' enir
SFX i1 enir înt/n'q'l'm't's' enir
SFX i1 enir inssions/n'q'l't' enir
SFX i1 enir inssiez/n'q'l'm' enir
SFX i1 enir inssent/n'q'l'm't's' enir
SFX i1 enir iens/n'l'm't' enir
SFX i1 enir enons/n'l' enir
SFX i1 enir enez/n'l'm' enir
SFX i2 Y 39
SFX i2 enir enir/m't's' enir
SFX i2 enir enant/m't's' enir
SFX i2 enir iens/m't' enir
SFX i2 enir ient/s' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i2 enir iennent/s' enir
SFX i2 enir enais/m't' enir
SFX i2 enir enait/s' enir
SFX i2 enir enions enir
SFX i2 enir eniez enir
SFX i2 enir enaient/s' enir
SFX i2 enir ins/m't' enir
SFX i2 enir int/s' enir
SFX i2 enir înmes enir
SFX i2 enir întes enir
SFX i2 enir inrent/s' enir
SFX i2 enir iendrai/m' enir
SFX i2 enir iendras/t' enir
SFX i2 enir iendra/s' enir
SFX i2 enir iendrons enir
SFX i2 enir iendrez enir
SFX i2 enir iendront/s' enir
SFX i2 enir iendrais/m't' enir
SFX i2 enir iendrait/s' enir
SFX i2 enir iendrions enir
SFX i2 enir iendriez enir
SFX i2 enir iendraient/s' enir
SFX i2 enir ienne/m's' enir
SFX i2 enir iennes/t' enir
SFX i2 enir insse/m' enir
SFX i2 enir insses/t' enir
SFX i2 enir înt/s' enir
SFX i2 enir inssions enir
SFX i2 enir inssiez enir
SFX i2 enir inssent/s' enir
SFX i2 enir iens/t' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i5 N 38
SFX i5 tir tant tir
SFX i5 tir s tir
SFX i5 tir t tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX i5 tir tent tir
SFX i5 tir tais tir
SFX i5 tir tait tir
SFX i5 tir tions tir
SFX i5 tir tiez tir
SFX i5 tir taient tir
SFX i5 tir tis tir
SFX i5 tir tit tir
SFX i5 tir tîmes tir
SFX i5 tir tîtes tir
SFX i5 tir tirent tir
SFX i5 tir tirai tir
SFX i5 tir tiras tir
SFX i5 tir tira tir
SFX i5 tir tirons tir
SFX i5 tir tirez tir
SFX i5 tir tiront tir
SFX i5 tir tirais tir
SFX i5 tir tirait tir
SFX i5 tir tirions tir
SFX i5 tir tiriez tir
SFX i5 tir tiraient tir
SFX i5 tir te tir
SFX i5 tir tes tir
SFX i5 tir tisse tir
SFX i5 tir tisses tir
SFX i5 tir tît tir
SFX i5 tir tissions tir
SFX i5 tir tissiez tir
SFX i5 tir tissent tir
SFX i5 tir s tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX iA Y 19
SFX iA dvenir dvenir/n'q'd'm't' venir
SFX iA dvenir dvenant/n'q'm't' venir
SFX iA dvenir dvenu/Q' venir
SFX iA dvenir dvenus/Q' venir
SFX iA dvenir dvenue/Q' venir
SFX iA dvenir dvenues/Q' venir
SFX iA dvenir dvient/n'q'm't' venir
SFX iA dvenir dviennent/n'q' venir
SFX iA dvenir dvenait/n'q'm't' venir
SFX iA dvenir dvenaient/n'q' venir
SFX iA dvenir dvint/n'q'm't' venir
SFX iA dvenir dvinrent/n'q' venir
SFX iA dvenir dviendra/n'q'm't' venir
SFX iA dvenir dviendront/n'q' venir
SFX iA dvenir dviendrait/n'q'm't' venir
SFX iA dvenir dviendraient/n'q' venir
SFX iA dvenir dvienne/n'q'm't' venir
SFX iA dvenir dvînt/n'q'm't' venir
SFX iA dvenir dvinssent/n'q' venir
SFX iB Y 40
SFX iB partenir partenir/n'q'd'm't's' tenir
SFX iB partenir partenant/n'q'm't's' tenir
SFX iB partenir partenu/q' tenir
SFX iB partenir partiens/n'j'm't' tenir
SFX iB partenir partient/n'q'm't's' tenir
SFX iB partenir partenons/n't' tenir
SFX iB partenir partenez/n'm' tenir
SFX iB partenir partiennent/n'q'm't's' tenir
SFX iB partenir partenais/n'j'm't' tenir
SFX iB partenir partenait/n'q'm't's' tenir
SFX iB partenir partenions/n't' tenir
SFX iB partenir parteniez/n'm' tenir
SFX iB partenir partenaient/n'q'm't's' tenir
SFX iB partenir partins/n'j'm't' tenir
SFX iB partenir partint/n'q'm't's' tenir
SFX iB partenir partînmes/n't' tenir
SFX iB partenir partîntes/n'm' tenir
SFX iB partenir partinrent/n'q'm't's' tenir
SFX iB partenir partiendrai/n'j'm't' tenir
SFX iB partenir partiendras/n'm't' tenir
SFX iB partenir partiendra/n'q'm't's' tenir
SFX iB partenir partiendrons/n't' tenir
SFX iB partenir partiendrez/n'm' tenir
SFX iB partenir partiendront/n'q'm't's' tenir
SFX iB partenir partiendrais/n'j'm't' tenir
SFX iB partenir partiendrait/n'q'm't's' tenir
SFX iB partenir partiendrions/n't' tenir
SFX iB partenir partiendriez/n'm' tenir
SFX iB partenir partiendraient/n'q'm't's' tenir
SFX iB partenir partienne/n'q'j'm't's' tenir
SFX iB partenir partiennes/n'm't' tenir
SFX iB partenir partinsse/n'j'm't' tenir
SFX iB partenir partinsses/n'm't' tenir
SFX iB partenir partînt/n'q'm't's' tenir
SFX iB partenir partinssions/n't' tenir
SFX iB partenir partinssiez/n'm' tenir
SFX iB partenir partinssent/n'q'm't's' tenir
SFX iB partenir partiens/n'm't' tenir
SFX iB partenir partenons/n' tenir
SFX iB partenir partenez/n'm' tenir
SFX iC Y 41
SFX iC rir rir/n'q'd'l'm't's' [vf]rir
SFX iC rir rant/n'q'l'm't's' [vf]rir
SFX iC rir ert/L'D'Q' [vf]rir
SFX iC rir erts/D'Q' [vf]rir
SFX iC rir erte/L'D'Q' [vf]rir
SFX iC rir ertes/D'Q' [vf]rir
SFX iC rir re/n'q'j'l'm't's' [vf]rir
SFX iC rir res/n'q'l'm't' [vf]rir
SFX iC rir rons/n'q'l't' [vf]rir
SFX iC rir rez/n'q'l'm' [vf]rir
SFX iC rir rent/n'q'l'm't's' [vf]rir
SFX iC rir rais/n'q'j'l'm't' [vf]rir
SFX iC rir rait/n'q'l'm't's' [vf]rir
SFX iC rir rions/n'q'l't' [vf]rir
SFX iC rir riez/n'q'l'm' [vf]rir
SFX iC rir raient/n'q'l'm't's' [vf]rir
SFX iC rir ris/n'q'j'l'm't' [vf]rir
SFX iC rir rit/n'q'l'm't's' [vf]rir
SFX iC rir rîmes/n'q'l't' [vf]rir
SFX iC rir rîtes/n'q'l'm' [vf]rir
SFX iC rir rirent/n'q'l'm't's' [vf]rir
SFX iC rir rirai/n'q'j'l'm't' [vf]rir
SFX iC rir riras/n'q'l'm't' [vf]rir
SFX iC rir rira/n'q'l'm't's' [vf]rir
SFX iC rir rirons/n'q'l't' [vf]rir
SFX iC rir rirez/n'q'l'm' [vf]rir
SFX iC rir riront/n'q'l'm't's' [vf]rir
SFX iC rir rirais/n'q'j'l'm't' [vf]rir
SFX iC rir rirait/n'q'l'm't's' [vf]rir
SFX iC rir ririons/n'q'l't' [vf]rir
SFX iC rir ririez/n'q'l'm' [vf]rir
SFX iC rir riraient/n'q'l'm't's' [vf]rir
SFX iC rir risse/n'q'j'l'm't' [vf]rir
SFX iC rir risses/n'q'l'm't' [vf]rir
SFX iC rir rît/n'q'l'm't's' [vf]rir
SFX iC rir rissions/n'q'l't' [vf]rir
SFX iC rir rissiez/n'q'l'm' [vf]rir
SFX iC rir rissent/n'q'l'm't's' [vf]rir
SFX iC rir re/n'l'm't' [vf]rir
SFX iC rir rons/n'l' [vf]rir
SFX iC rir rez/n'l'm' [vf]rir
SFX iD Y 43
SFX iD courir courir/n'q'd' courir
SFX iD courir courant/n'q' courir
SFX iD courir couru courir
SFX iD courir courus courir
SFX iD courir courue courir
SFX iD courir courues courir
SFX iD courir cours/n'j' courir
SFX iD courir court/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iD courir courent/n' courir
SFX iD courir courais/n'j' courir
SFX iD courir courait/n' courir
SFX iD courir courions/n' courir
SFX iD courir couriez/n' courir
SFX iD courir couraient/n' courir
SFX iD courir courus/n'j' courir
SFX iD courir courut/n' courir
SFX iD courir courûmes/n' courir
SFX iD courir courûtes/n' courir
SFX iD courir coururent/n' courir
SFX iD courir courrai/n'j' courir
SFX iD courir courras/n' courir
SFX iD courir courra/n' courir
SFX iD courir courrons/n' courir
SFX iD courir courrez/n' courir
SFX iD courir courront/n' courir
SFX iD courir courrais/n'j' courir
SFX iD courir courrait/n' courir
SFX iD courir courrions/n' courir
SFX iD courir courriez/n' courir
SFX iD courir courraient/n' courir
SFX iD courir coure/n'j' courir
SFX iD courir coures/n' courir
SFX iD courir courusse/n'j' courir
SFX iD courir courusses/n' courir
SFX iD courir courût/n' courir
SFX iD courir courussions/n' courir
SFX iD courir courussiez/n' courir
SFX iD courir courussent/n' courir
SFX iD courir cours/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iE Y 43
SFX iE ourir ourir/n'q'd'l'm't's' courir
SFX iE ourir ourant/n'q'm't's' courir
SFX iE ourir ouru/L'D'Q' courir
SFX iE ourir ourus/D'Q' courir
SFX iE ourir ourue/L'D'Q' courir
SFX iE ourir ourues/D'Q' courir
SFX iE ourir ours/n'q'j'l'm't' courir
SFX iE ourir ourt/n'q'l's' courir
SFX iE ourir ourons/n'q'l' courir
SFX iE ourir ourez/n'q'l' courir
SFX iE ourir ourent/n'q'l's' courir
SFX iE ourir ourais/n'q'j'l'm't' courir
SFX iE ourir ourait/n'q'l's' courir
SFX iE ourir ourions/n'q'l' courir
SFX iE ourir ouriez/n'q'l' courir
SFX iE ourir ouraient/n'q'l's' courir
SFX iE ourir ourus/n'q'j'l'm't' courir
SFX iE ourir ourut/n'q'l's' courir
SFX iE ourir ourûmes/n'q'l' courir
SFX iE ourir ourûtes/n'q'l' courir
SFX iE ourir oururent/n'q'l's' courir
SFX iE ourir ourrai/n'q'j'l'm' courir
SFX iE ourir ourras/n'q'l't' courir
SFX iE ourir ourra/n'q'l's' courir
SFX iE ourir ourrons/n'q'l' courir
SFX iE ourir ourrez/n'q'l' courir
SFX iE ourir ourront/n'q'l's' courir
SFX iE ourir ourrais/n'q'j'l'm't' courir
SFX iE ourir ourrait/n'q'l's' courir
SFX iE ourir ourrions/n'q'l' courir
SFX iE ourir ourriez/n'q'l' courir
SFX iE ourir ourraient/n'q'l's' courir
SFX iE ourir oure/n'q'j'l'm's' courir
SFX iE ourir oures/n'l't' courir
SFX iE ourir ourusse/n'q'j'l'm' courir
SFX iE ourir ourusses/n'q'l't' courir
SFX iE ourir ourût/n'q'l's' courir
SFX iE ourir ourussions/n'q'l' courir
SFX iE ourir ourussiez/n'q'l' courir
SFX iE ourir ourussent/n'q'l's' courir
SFX iE ourir ours/n'l' courir
SFX iE ourir ourons/n'l' courir
SFX iE ourir ourez/n'l' courir
SFX iF N 42
SFX iF ervir ervant servir
SFX iF ervir ervi servir
SFX iF ervir ervis servir
SFX iF ervir ervie servir
SFX iF ervir ervies servir
SFX iF ervir ers servir
SFX iF ervir ert servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iF ervir ervent servir
SFX iF ervir ervais servir
SFX iF ervir ervait servir
SFX iF ervir ervions servir
SFX iF ervir erviez servir
SFX iF ervir ervaient servir
SFX iF ervir ervis servir
SFX iF ervir ervit servir
SFX iF ervir ervîmes servir
SFX iF ervir ervîtes servir
SFX iF ervir ervirent servir
SFX iF ervir ervirai servir
SFX iF ervir erviras servir
SFX iF ervir ervira servir
SFX iF ervir ervirons servir
SFX iF ervir ervirez servir
SFX iF ervir erviront servir
SFX iF ervir ervirais servir
SFX iF ervir ervirait servir
SFX iF ervir ervirions servir
SFX iF ervir erviriez servir
SFX iF ervir erviraient servir
SFX iF ervir erve servir
SFX iF ervir erves servir
SFX iF ervir ervisse servir
SFX iF ervir ervisses servir
SFX iF ervir ervît servir
SFX iF ervir ervissions servir
SFX iF ervir ervissiez servir
SFX iF ervir ervissent servir
SFX iF ervir ers servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iG N 42
SFX iG êtir êtant vêtir
SFX iG êtir êtu vêtir
SFX iG êtir êtus vêtir
SFX iG êtir êtue vêtir
SFX iG êtir êtues vêtir
SFX iG êtir êts vêtir
SFX iG êtir êt vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iG êtir êtent vêtir
SFX iG êtir êtais vêtir
SFX iG êtir êtait vêtir
SFX iG êtir êtions vêtir
SFX iG êtir êtiez vêtir
SFX iG êtir êtaient vêtir
SFX iG êtir êtis vêtir
SFX iG êtir êtit vêtir
SFX iG êtir êtîmes vêtir
SFX iG êtir êtîtes vêtir
SFX iG êtir êtirent vêtir
SFX iG êtir êtirai vêtir
SFX iG êtir êtiras vêtir
SFX iG êtir êtira vêtir
SFX iG êtir êtirons vêtir
SFX iG êtir êtirez vêtir
SFX iG êtir êtiront vêtir
SFX iG êtir êtirais vêtir
SFX iG êtir êtirait vêtir
SFX iG êtir êtirions vêtir
SFX iG êtir êtiriez vêtir
SFX iG êtir êtiraient vêtir
SFX iG êtir ête vêtir
SFX iG êtir êtes vêtir
SFX iG êtir êtisse vêtir
SFX iG êtir êtisses vêtir
SFX iG êtir êtît vêtir
SFX iG êtir êtissions vêtir
SFX iG êtir êtissiez vêtir
SFX iG êtir êtissent vêtir
SFX iG êtir êts vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iI N 39
SFX iI ormir ormant dormir
SFX iI ormir ormi dormir
SFX iI ormir ors dormir
SFX iI ormir ort dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iI ormir orment dormir
SFX iI ormir ormais dormir
SFX iI ormir ormait dormir
SFX iI ormir ormions dormir
SFX iI ormir ormiez dormir
SFX iI ormir ormaient dormir
SFX iI ormir ormis dormir
SFX iI ormir ormit dormir
SFX iI ormir ormîmes dormir
SFX iI ormir ormîtes dormir
SFX iI ormir ormirent dormir
SFX iI ormir ormirai dormir
SFX iI ormir ormiras dormir
SFX iI ormir ormira dormir
SFX iI ormir ormirons dormir
SFX iI ormir ormirez dormir
SFX iI ormir ormiront dormir
SFX iI ormir ormirais dormir
SFX iI ormir ormirait dormir
SFX iI ormir ormirions dormir
SFX iI ormir ormiriez dormir
SFX iI ormir ormiraient dormir
SFX iI ormir orme dormir
SFX iI ormir ormes dormir
SFX iI ormir ormisse dormir
SFX iI ormir ormisses dormir
SFX iI ormir ormît dormir
SFX iI ormir ormissions dormir
SFX iI ormir ormissiez dormir
SFX iI ormir ormissent dormir
SFX iI ormir ors dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iJ Y 43
SFX iJ dormir dormir/n'q'd'l'm't's' dormir
SFX iJ dormir dormant/n'q'l'm't's' dormir
SFX iJ dormir dormi/L'D'Q' dormir
SFX iJ dormir dormis/D'Q' dormir
SFX iJ dormir dormie/L'D'Q' dormir
SFX iJ dormir dormies/D'Q' dormir
SFX iJ dormir dors/n'q'j'l'm't' dormir
SFX iJ dormir dort/n'q'l'm't's' dormir
SFX iJ dormir dormons/n'q'l't' dormir
SFX iJ dormir dormez/n'q'l'm' dormir
SFX iJ dormir dorment/n'q'l'm't's' dormir
SFX iJ dormir dormais/n'q'j'l'm't' dormir
SFX iJ dormir dormait/n'q'l'm't's' dormir
SFX iJ dormir dormions/n'q'l't' dormir
SFX iJ dormir dormiez/n'q'l'm' dormir
SFX iJ dormir dormaient/n'q'l'm't's' dormir
SFX iJ dormir dormis/n'q'j'l'm't' dormir
SFX iJ dormir dormit/n'q'l'm't's' dormir
SFX iJ dormir dormîmes/n'q'l't' dormir
SFX iJ dormir dormîtes/n'q'l'm' dormir
SFX iJ dormir dormirent/n'q'l'm't's' dormir
SFX iJ dormir dormirai/n'q'j'l'm't' dormir
SFX iJ dormir dormiras/n'q'l'm't' dormir
SFX iJ dormir dormira/n'q'l'm't's' dormir
SFX iJ dormir dormirons/n'q'l't' dormir
SFX iJ dormir dormirez/n'q'l'm' dormir
SFX iJ dormir dormiront/n'q'l'm't's' dormir
SFX iJ dormir dormirais/n'q'j'l'm't' dormir
SFX iJ dormir dormirait/n'q'l'm't's' dormir
SFX iJ dormir dormirions/n'q'l't' dormir
SFX iJ dormir dormiriez/n'q'l'm' dormir
SFX iJ dormir dormiraient/n'q'l'm't's' dormir
SFX iJ dormir dorme/n'q'j'l'm't's' dormir
SFX iJ dormir dormes/n'l'm't' dormir
SFX iJ dormir dormisse/n'q'j'l'm't' dormir
SFX iJ dormir dormisses/n'q'l'm't' dormir
SFX iJ dormir dormît/n'q'l'm't's' dormir
SFX iJ dormir dormissions/n'q'l't' dormir
SFX iJ dormir dormissiez/n'q'l'm' dormir
SFX iJ dormir dormissent/n'q'l'm't's' dormir
SFX iJ dormir dors/n'l'm't' dormir
SFX iJ dormir dormons/n'l' dormir
SFX iJ dormir dormez/n'l'm' dormir
SFX iK Y 42
SFX iK quérir quérir/n'q'd'l'm't's' quérir
SFX iK quérir quérant/n'q'l'm't's' quérir
SFX iK quérir quis/L'D'Q' quérir
SFX iK quérir quise/L'D'Q' quérir
SFX iK quérir quises/D'Q' quérir
SFX iK quérir quiers/n'q'j'l'm't' quérir
SFX iK quérir quiert/n'q'l'm't's' quérir
SFX iK quérir quérons/n'q'l't' quérir
SFX iK quérir quérez/n'q'l'm' quérir
SFX iK quérir quièrent/n'q'l'm't's' quérir
SFX iK quérir quérais/n'q'j'l'm't' quérir
SFX iK quérir quérait/n'q'l'm't's' quérir
SFX iK quérir quérions/n'q'l't' quérir
SFX iK quérir quériez/n'q'l'm' quérir
SFX iK quérir quéraient/n'q'l'm't's' quérir
SFX iK quérir quis/n'q'j'l'm't' quérir
SFX iK quérir quit/n'q'l'm't's' quérir
SFX iK quérir quîmes/n'q'l't' quérir
SFX iK quérir quîtes/n'q'l'm' quérir
SFX iK quérir quirent/n'q'l'm't's' quérir
SFX iK quérir querrai/n'q'j'l'm't' quérir
SFX iK quérir querras/n'q'l'm't' quérir
SFX iK quérir querra/n'q'l'm't's' quérir
SFX iK quérir querrons/n'q'l't' quérir
SFX iK quérir querrez/n'q'l'm' quérir
SFX iK quérir querront/n'q'l'm't's' quérir
SFX iK quérir querrais/n'q'j'l'm't' quérir
SFX iK quérir querrait/n'q'l'm't's' quérir
SFX iK quérir querrions/n'q'l't' quérir
SFX iK quérir querriez/n'q'l'm' quérir
SFX iK quérir querraient/n'q'l'm't's' quérir
SFX iK quérir quière/n'q'j'l'm't's' quérir
SFX iK quérir quières/n'l'm't' quérir
SFX iK quérir quisse/n'q'j'l'm't' quérir
SFX iK quérir quisses/n'q'l'm't' quérir
SFX iK quérir quît/n'q'l'm't's' quérir
SFX iK quérir quissions/n'q'l't' quérir
SFX iK quérir quissiez/n'q'l'm' quérir
SFX iK quérir quissent/n'q'l'm't's' quérir
SFX iK quérir quiers/n'l'm't' quérir
SFX iK quérir quérons/n'l' quérir
SFX iK quérir quérez/n'l'm' quérir
SFX iM Y 42
SFX iM quérir quérir/m't's' quérir
SFX iM quérir quérant/m't's' quérir
SFX iM quérir quis/L'D'Q' quérir
SFX iM quérir quise/L'D'Q' quérir
SFX iM quérir quises/D'Q' quérir
SFX iM quérir quiers/m't' quérir
SFX iM quérir quiert/s' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iM quérir quièrent/s' quérir
SFX iM quérir quérais/m't' quérir
SFX iM quérir quérait/s' quérir
SFX iM quérir quérions quérir
SFX iM quérir quériez quérir
SFX iM quérir quéraient/s' quérir
SFX iM quérir quis/m't' quérir
SFX iM quérir quit/s' quérir
SFX iM quérir quîmes quérir
SFX iM quérir quîtes quérir
SFX iM quérir quirent/s' quérir
SFX iM quérir querrai/m' quérir
SFX iM quérir querras/t' quérir
SFX iM quérir querra/s' quérir
SFX iM quérir querrons quérir
SFX iM quérir querrez quérir
SFX iM quérir querront/s' quérir
SFX iM quérir querrais/m't' quérir
SFX iM quérir querrait/s' quérir
SFX iM quérir querrions quérir
SFX iM quérir querriez quérir
SFX iM quérir querraient/s' quérir
SFX iM quérir quière/m's' quérir
SFX iM quérir quières/t' quérir
SFX iM quérir quisse/m' quérir
SFX iM quérir quisses/t' quérir
SFX iM quérir quît/s' quérir
SFX iM quérir quissions quérir
SFX iM quérir quissiez quérir
SFX iM quérir quissent/s' quérir
SFX iM quérir quiers/t' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iN N 40
SFX iN uir uyant fuir
SFX iN uir ui fuir
SFX iN uir uis fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uis fuir
SFX iN uir uit fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iN uir uient fuir
SFX iN uir uyais fuir
SFX iN uir uyait fuir
SFX iN uir uyions fuir
SFX iN uir uyiez fuir
SFX iN uir uyaient fuir
SFX iN uir uîmes fuir
SFX iN uir uîtes fuir
SFX iN uir uirent fuir
SFX iN uir uirai fuir
SFX iN uir uiras fuir
SFX iN uir uira fuir
SFX iN uir uirons fuir
SFX iN uir uirez fuir
SFX iN uir uiront fuir
SFX iN uir uirais fuir
SFX iN uir uirait fuir
SFX iN uir uirions fuir
SFX iN uir uiriez fuir
SFX iN uir uiraient fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uisse fuir
SFX iN uir uisses fuir
SFX iN uir uît fuir
SFX iN uir uissions fuir
SFX iN uir uissiez fuir
SFX iN uir uissent fuir
SFX iN uir uis fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iO Y 41
SFX iO fuir fuir/m't's' enfuir
SFX iO fuir fuyant/m't's' enfuir
SFX iO fuir fui/L'D'Q' enfuir
SFX iO fuir fuis/D'Q' enfuir
SFX iO fuir fuie/L'D'Q' enfuir
SFX iO fuir fuies/D'Q' enfuir
SFX iO fuir fuis/m't' enfuir
SFX iO fuir fuit/s' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iO fuir fuient/s' enfuir
SFX iO fuir fuyais/m't' enfuir
SFX iO fuir fuyait/s' enfuir
SFX iO fuir fuyions enfuir
SFX iO fuir fuyiez enfuir
SFX iO fuir fuyaient/s' enfuir
SFX iO fuir fuîmes enfuir
SFX iO fuir fuîtes enfuir
SFX iO fuir fuirent/s' enfuir
SFX iO fuir fuirai/m' enfuir
SFX iO fuir fuiras/t' enfuir
SFX iO fuir fuira/s' enfuir
SFX iO fuir fuirons enfuir
SFX iO fuir fuirez enfuir
SFX iO fuir fuiront/s' enfuir
SFX iO fuir fuirais/m't' enfuir
SFX iO fuir fuirait/s' enfuir
SFX iO fuir fuirions enfuir
SFX iO fuir fuiriez enfuir
SFX iO fuir fuiraient/s' enfuir
SFX iO fuir fuie/m's' enfuir
SFX iO fuir fuies/t' enfuir
SFX iO fuir fuisse/m' enfuir
SFX iO fuir fuisses/t' enfuir
SFX iO fuir fuît/s' enfuir
SFX iO fuir fuissions enfuir
SFX iO fuir fuissiez enfuir
SFX iO fuir fuissent/s' enfuir
SFX iO fuir fuis/t' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iP N 42
SFX iP ourir ourant mourir
SFX iP ourir ort mourir
SFX iP ourir orts mourir
SFX iP ourir orte mourir
SFX iP ourir ortes mourir
SFX iP ourir eurs mourir
SFX iP ourir eurt mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iP ourir eurent mourir
SFX iP ourir ourais mourir
SFX iP ourir ourait mourir
SFX iP ourir ourions mourir
SFX iP ourir ouriez mourir
SFX iP ourir ouraient mourir
SFX iP ourir ourus mourir
SFX iP ourir ourut mourir
SFX iP ourir ourûmes mourir
SFX iP ourir ourûtes mourir
SFX iP ourir oururent mourir
SFX iP ourir ourrai mourir
SFX iP ourir ourras mourir
SFX iP ourir ourra mourir
SFX iP ourir ourrons mourir
SFX iP ourir ourrez mourir
SFX iP ourir ourront mourir
SFX iP ourir ourrais mourir
SFX iP ourir ourrait mourir
SFX iP ourir ourrions mourir
SFX iP ourir ourriez mourir
SFX iP ourir ourraient mourir
SFX iP ourir eure mourir
SFX iP ourir eures mourir
SFX iP ourir ourusse mourir
SFX iP ourir ourusses mourir
SFX iP ourir ourût mourir
SFX iP ourir ourussions mourir
SFX iP ourir ourussiez mourir
SFX iP ourir ourussent mourir
SFX iP ourir eurs mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iQ N 42
SFX iQ ouillir ouillant bouillir
SFX iQ ouillir ouilli bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillie bouillir
SFX iQ ouillir ouillies bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir out bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iQ ouillir ouillent bouillir
SFX iQ ouillir ouillais bouillir
SFX iQ ouillir ouillait bouillir
SFX iQ ouillir ouillions bouillir
SFX iQ ouillir ouilliez bouillir
SFX iQ ouillir ouillaient bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillit bouillir
SFX iQ ouillir ouillîmes bouillir
SFX iQ ouillir ouillîtes bouillir
SFX iQ ouillir ouillirent bouillir
SFX iQ ouillir ouillirai bouillir
SFX iQ ouillir ouilliras bouillir
SFX iQ ouillir ouillira bouillir
SFX iQ ouillir ouillirons bouillir
SFX iQ ouillir ouillirez bouillir
SFX iQ ouillir ouilliront bouillir
SFX iQ ouillir ouillirais bouillir
SFX iQ ouillir ouillirait bouillir
SFX iQ ouillir ouillirions bouillir
SFX iQ ouillir ouilliriez bouillir
SFX iQ ouillir ouilliraient bouillir
SFX iQ ouillir ouille bouillir
SFX iQ ouillir ouilles bouillir
SFX iQ ouillir ouillisse bouillir
SFX iQ ouillir ouillisses bouillir
SFX iQ ouillir ouillît bouillir
SFX iQ ouillir ouillissions bouillir
SFX iQ ouillir ouillissiez bouillir
SFX iQ ouillir ouillissent bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iR Y 41
SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir
SFX iR ueillir ueillant/n'q'l'm't's' cueillir
SFX iR ueillir ueilli/L'D'Q' cueillir
SFX iR ueillir ueillis/D'Q' cueillir
SFX iR ueillir ueillie/L'D'Q' cueillir
SFX iR ueillir ueillies/D'Q' cueillir
SFX iR ueillir ueille/n'q'j'l'm't's' cueillir
SFX iR ueillir ueilles/n'q'l'm' cueillir
SFX iR ueillir ueillons/n'q'l't' cueillir
SFX iR ueillir ueillez/n'q'l'm' cueillir
SFX iR ueillir ueillent/n'q'l'm't's' cueillir
SFX iR ueillir ueillais/n'q'j'l't' cueillir
SFX iR ueillir ueillait/n'q'l'm't's' cueillir
SFX iR ueillir ueillions/n'q'l't' cueillir
SFX iR ueillir ueilliez/n'q'l'm' cueillir
SFX iR ueillir ueillaient/n'q'l'm't's' cueillir
SFX iR ueillir ueillis/n'q'j'l't' cueillir
SFX iR ueillir ueillit/n'q'l'm't's' cueillir
SFX iR ueillir ueillîmes/n'q'l't' cueillir
SFX iR ueillir ueillîtes/n'q'l'm' cueillir
SFX iR ueillir ueillirent/n'q'l'm't's' cueillir
SFX iR ueillir ueillerai/n'q'j'l't' cueillir
SFX iR ueillir ueilleras/n'q'l'm' cueillir
SFX iR ueillir ueillera/n'q'l'm't's' cueillir
SFX iR ueillir ueillerons/n'q'l't' cueillir
SFX iR ueillir ueillerez/n'q'l'm' cueillir
SFX iR ueillir ueilleront/n'q'l'm't's' cueillir
SFX iR ueillir ueillerais/n'q'j'l't' cueillir
SFX iR ueillir ueillerait/n'q'l'm't's' cueillir
SFX iR ueillir ueillerions/n'q'l't' cueillir
SFX iR ueillir ueilleriez/n'q'l'm' cueillir
SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir
SFX iR ueillir ueillisse/n'q'j'l't' cueillir
SFX iR ueillir ueillisses/n'q'l'm' cueillir
SFX iR ueillir ueillît/n'q'l'm't's' cueillir
SFX iR ueillir ueillissions/n'q'l't' cueillir
SFX iR ueillir ueillissiez/n'q'l'm' cueillir
SFX iR ueillir ueillissent/n'q'l'm't's' cueillir
SFX iR ueillir ueille/n'l'm' cueillir
SFX iR ueillir ueillons/n'l' cueillir
SFX iR ueillir ueillez/n'l'm' cueillir
SFX iS N 37
SFX iS aillir aillant aillir
SFX iS aillir ailli aillir
SFX iS aillir aille aillir
SFX iS aillir ailles aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iS aillir aillent aillir
SFX iS aillir aillais aillir
SFX iS aillir aillait aillir
SFX iS aillir aillions aillir
SFX iS aillir ailliez aillir
SFX iS aillir aillaient aillir
SFX iS aillir aillis aillir
SFX iS aillir aillit aillir
SFX iS aillir aillîmes aillir
SFX iS aillir aillîtes aillir
SFX iS aillir aillirent aillir
SFX iS aillir aillirai aillir
SFX iS aillir ailliras aillir
SFX iS aillir aillira aillir
SFX iS aillir aillirons aillir
SFX iS aillir aillirez aillir
SFX iS aillir ailliront aillir
SFX iS aillir aillirais aillir
SFX iS aillir aillirait aillir
SFX iS aillir aillirions aillir
SFX iS aillir ailliriez aillir
SFX iS aillir ailliraient aillir
SFX iS aillir aillisse aillir
SFX iS aillir aillisses aillir
SFX iS aillir aillît aillir
SFX iS aillir aillissions aillir
SFX iS aillir aillissiez aillir
SFX iS aillir aillissent aillir
SFX iS aillir aille aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iT Y 41
SFX iT saillir saillir/n'q'd'l'm't's' aillir
SFX iT saillir saillant/n'q'l'm't's' aillir
SFX iT saillir sailli/L'D'Q' aillir
SFX iT saillir saillis/D'Q' aillir
SFX iT saillir saillie/L'D'Q' aillir
SFX iT saillir saillies/D'Q' aillir
SFX iT saillir saille/n'q'j'l'm't's' aillir
SFX iT saillir sailles/n'q'l'm't' aillir
SFX iT saillir saillons/n'q'l't' aillir
SFX iT saillir saillez/n'q'l'm' aillir
SFX iT saillir saillent/n'q'l'm't's' aillir
SFX iT saillir saillais/n'q'j'l'm't' aillir
SFX iT saillir saillait/n'q'l'm't's' aillir
SFX iT saillir saillions/n'q'l't' aillir
SFX iT saillir sailliez/n'q'l'm' aillir
SFX iT saillir saillaient/n'q'l'm't's' aillir
SFX iT saillir saillis/n'q'j'l'm't' aillir
SFX iT saillir saillit/n'q'l'm't's' aillir
SFX iT saillir saillîmes/n'q'l't' aillir
SFX iT saillir saillîtes/n'q'l'm' aillir
SFX iT saillir saillirent/n'q'l'm't's' aillir
SFX iT saillir saillirai/n'q'j'l'm't' aillir
SFX iT saillir sailliras/n'q'l'm't' aillir
SFX iT saillir saillira/n'q'l'm't's' aillir
SFX iT saillir saillirons/n'q'l't' aillir
SFX iT saillir saillirez/n'q'l'm' aillir
SFX iT saillir sailliront/n'q'l'm't's' aillir
SFX iT saillir saillirais/n'q'j'l'm't' aillir
SFX iT saillir saillirait/n'q'l'm't's' aillir
SFX iT saillir saillirions/n'q'l't' aillir
SFX iT saillir sailliriez/n'q'l'm' aillir
SFX iT saillir sailliraient/n'q'l'm't's' aillir
SFX iT saillir saillisse/n'q'j'l'm't' aillir
SFX iT saillir saillisses/n'q'l'm't' aillir
SFX iT saillir saillît/n'q'l'm't's' aillir
SFX iT saillir saillissions/n'q'l't' aillir
SFX iT saillir saillissiez/n'q'l'm' aillir
SFX iT saillir saillissent/n'q'l'm't's' aillir
SFX iT saillir saille/n'l'm' aillir
SFX iT saillir saillons/n'l' aillir
SFX iT saillir saillez/n'l'm' aillir
SFX iU N 36
SFX iU aillir aillant faillir
SFX iU aillir ailli faillir
SFX iU aillir aux faillir
SFX iU aillir aut faillir
SFX iU aillir aillons faillir
SFX iU aillir aillez faillir
SFX iU aillir aillent faillir
SFX iU aillir aillais faillir
SFX iU aillir aillait faillir
SFX iU aillir aillions faillir
SFX iU aillir ailliez faillir
SFX iU aillir aillaient faillir
SFX iU aillir aillis faillir
SFX iU aillir aillit faillir
SFX iU aillir aillîmes faillir
SFX iU aillir aillîtes faillir
SFX iU aillir aillirent faillir
SFX iU aillir aillirai faillir
SFX iU aillir ailliras faillir
SFX iU aillir aillira faillir
SFX iU aillir aillirons faillir
SFX iU aillir aillirez faillir
SFX iU aillir ailliront faillir
SFX iU aillir aillirais faillir
SFX iU aillir aillirait faillir
SFX iU aillir aillirions faillir
SFX iU aillir ailliriez faillir
SFX iU aillir ailliraient faillir
SFX iU aillir aille faillir
SFX iU aillir ailles faillir
SFX iU aillir aillisse faillir
SFX iU aillir aillisses faillir
SFX iU aillir aillît faillir
SFX iU aillir aillissions faillir
SFX iU aillir aillissiez faillir
SFX iU aillir aillissent faillir
SFX iV N 11
SFX iV ésir isant gésir
SFX iV ésir is gésir
SFX iV ésir ît gésir
SFX iV ésir isons gésir
SFX iV ésir isez gésir
SFX iV ésir isent gésir
SFX iV ésir isais gésir
SFX iV ésir isait gésir
SFX iV ésir isions gésir
SFX iV ésir isiez gésir
SFX iV ésir isaient gésir
SFX iW Y 54
SFX iW uïr uïr/n'q'd'l'm't's' ouïr
SFX iW uïr yant/n'q'l'm't's' ouïr
SFX iW uïr uï/L'D'Q' ouïr
SFX iW uïr uïs/D'Q' ouïr
SFX iW uïr uïe/L'D'Q' ouïr
SFX iW uïr uïes/D'Q' ouïr
SFX iW uïr is/n'q'j'l'm't' ouïr
SFX iW uïr it/n'q'l'm't' ouïr
SFX iW uïr yons/n'q'l't' ouïr
SFX iW uïr yez/n'q'l'm' ouïr
SFX iW uïr ient/n'q'l'm't's' ouïr
SFX iW uïr yais/n'q'j'l'm't' ouïr
SFX iW uïr yait/n'q'l'm't' ouïr
SFX iW uïr yions/n'q'l't' ouïr
SFX iW uïr yiez/n'q'l'm' ouïr
SFX iW uïr yaient/n'q'l'm't's' ouïr
SFX iW uïr uïs/n'q'j'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïmes/n'q'l't' ouïr
SFX iW uïr uïtes/n'q'l'm' ouïr
SFX iW uïr uïrent/n'q'l'm't's' ouïr
SFX iW uïr uïrai/n'q'j'l'm't' ouïr
SFX iW uïr rrai/n'q'j'l'm't' ouïr
SFX iW uïr uïras/n'q'l'm't' ouïr
SFX iW uïr rras/n'q'l'm't' ouïr
SFX iW uïr uïra/n'q'l'm't' ouïr
SFX iW uïr rra/n'q'l'm't' ouïr
SFX iW uïr uïrons/n'q'l't' ouïr
SFX iW uïr rrons/n'q'l't' ouïr
SFX iW uïr uïrez/n'q'l'm' ouïr
SFX iW uïr rrez/n'q'l'm' ouïr
SFX iW uïr uïront/n'q'l'm't's' ouïr
SFX iW uïr rront/n'q'l'm't's' ouïr
SFX iW uïr uïrais/n'q'j'l'm't' ouïr
SFX iW uïr rrais/n'q'j'l'm't' ouïr
SFX iW uïr uïrait/n'q'l'm't' ouïr
SFX iW uïr rrait/n'q'l'm't' ouïr
SFX iW uïr uïrions/n'q'l't' ouïr
SFX iW uïr rrions/n'q'l't' ouïr
SFX iW uïr uïriez/n'q'l'm' ouïr
SFX iW uïr rriez/n'q'l'm' ouïr
SFX iW uïr uïraient/n'q'l'm't's' ouïr
SFX iW uïr rraient/n'q'l'm't's' ouïr
SFX iW uïr ie/n'q'j'l'm't's' ouïr
SFX iW uïr ies/n'l'm't' ouïr
SFX iW uïr uïsse/n'q'j'l'm't' ouïr
SFX iW uïr uïsses/n'q'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïssions/n'q'l't' ouïr
SFX iW uïr uïssiez/n'q'l'm' ouïr
SFX iW uïr uïssent/n'q'l'm't's' ouïr
SFX iW uïr is/n'l'm' ouïr
SFX iW uïr yons/n'l' ouïr
SFX iW uïr yez/n'l'm' ouïr
SFX iX N 4
SFX iX érir éru férir
SFX iX érir érus férir
SFX iX érir érue férir
SFX iX érir érues férir
SFX iY Y 5
SFX iY ssir ssir/n'q'd' issir
SFX iY ssir ssu/L'D'Q' issir
SFX iY ssir ssus/D'Q' issir
SFX iY ssir ssue/L'D'Q' issir
SFX iY ssir ssues/D'Q' issir
SFX pA N 42
SFX pA ouvoir ouvant pouvoir
SFX pA ouvoir u pouvoir
SFX pA ouvoir eux pouvoir
SFX pA ouvoir uis pouvoir
SFX pA ouvoir eut pouvoir
SFX pA ouvoir ouvons pouvoir
SFX pA ouvoir ouvez pouvoir
SFX pA ouvoir euvent pouvoir
SFX pA ouvoir ouvais pouvoir
SFX pA ouvoir ouvait pouvoir
SFX pA ouvoir ouvions pouvoir
SFX pA ouvoir ouviez pouvoir
SFX pA ouvoir ouvaient pouvoir
SFX pA ouvoir us pouvoir
SFX pA ouvoir ut pouvoir
SFX pA ouvoir ûmes pouvoir
SFX pA ouvoir ûtes pouvoir
SFX pA ouvoir urent pouvoir
SFX pA ouvoir ourrai pouvoir
SFX pA ouvoir ourras pouvoir
SFX pA ouvoir ourra pouvoir
SFX pA ouvoir ourrons pouvoir
SFX pA ouvoir ourrez pouvoir
SFX pA ouvoir ourront pouvoir
SFX pA ouvoir ourrais pouvoir
SFX pA ouvoir ourrait pouvoir
SFX pA ouvoir ourrions pouvoir
SFX pA ouvoir ourriez pouvoir
SFX pA ouvoir ourraient pouvoir
SFX pA ouvoir uisse pouvoir
SFX pA ouvoir uissé pouvoir
SFX pA ouvoir uisses pouvoir
SFX pA ouvoir uissions pouvoir
SFX pA ouvoir uissiez pouvoir
SFX pA ouvoir uissent pouvoir
SFX pA ouvoir usse pouvoir
SFX pA ouvoir ussé pouvoir
SFX pA ouvoir usses pouvoir
SFX pA ouvoir ût pouvoir
SFX pA ouvoir ussions pouvoir
SFX pA ouvoir ussiez pouvoir
SFX pA ouvoir ussent pouvoir
SFX pB N 47
SFX pB ouloir oulant vouloir
SFX pB ouloir oulu vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulue vouloir
SFX pB ouloir oulues vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir eut vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir oulez vouloir
SFX pB ouloir eulent vouloir
SFX pB ouloir oulais vouloir
SFX pB ouloir oulait vouloir
SFX pB ouloir oulions vouloir
SFX pB ouloir ouliez vouloir
SFX pB ouloir oulaient vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulut vouloir
SFX pB ouloir oulûmes vouloir
SFX pB ouloir oulûtes vouloir
SFX pB ouloir oulurent vouloir
SFX pB ouloir oudrai vouloir
SFX pB ouloir oudras vouloir
SFX pB ouloir oudra vouloir
SFX pB ouloir oudrons vouloir
SFX pB ouloir oudrez vouloir
SFX pB ouloir oudront vouloir
SFX pB ouloir oudrais vouloir
SFX pB ouloir oudrait vouloir
SFX pB ouloir oudrions vouloir
SFX pB ouloir oudriez vouloir
SFX pB ouloir oudraient vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir euillé vouloir
SFX pB ouloir euilles vouloir
SFX pB ouloir euillent vouloir
SFX pB ouloir oulusse vouloir
SFX pB ouloir oulusses vouloir
SFX pB ouloir oulût vouloir
SFX pB ouloir oulussions vouloir
SFX pB ouloir oulussiez vouloir
SFX pB ouloir oulussent vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir euillons vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir euillez vouloir
SFX pB ouloir oulez vouloir
SFX pC N 43
SFX pC evoir evant devoir
SFX pC evoir û redevoir
SFX pC evoir us devoir
SFX pC evoir ue devoir
SFX pC evoir ues devoir
SFX pC evoir ois devoir
SFX pC evoir oit devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pC evoir oivent devoir
SFX pC evoir evais devoir
SFX pC evoir evait devoir
SFX pC evoir evions devoir
SFX pC evoir eviez devoir
SFX pC evoir evaient devoir
SFX pC evoir us devoir
SFX pC evoir ut devoir
SFX pC evoir ûmes devoir
SFX pC evoir ûtes devoir
SFX pC evoir urent devoir
SFX pC evoir evrai devoir
SFX pC evoir evras devoir
SFX pC evoir evra devoir
SFX pC evoir evrons devoir
SFX pC evoir evrez devoir
SFX pC evoir evront devoir
SFX pC evoir evrais devoir
SFX pC evoir evrait devoir
SFX pC evoir evrions devoir
SFX pC evoir evriez devoir
SFX pC evoir evraient devoir
SFX pC evoir oive devoir
SFX pC evoir oives devoir
SFX pC evoir usse devoir
SFX pC evoir ussé devoir
SFX pC evoir usses devoir
SFX pC evoir ût devoir
SFX pC evoir ussions devoir
SFX pC evoir ussiez devoir
SFX pC evoir ussent devoir
SFX pC evoir ois devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pD N 1
SFX pD evoir û devoir
SFX pE N 45
SFX pE avoir achant savoir
SFX pE avoir u savoir
SFX pE avoir us savoir
SFX pE avoir ue savoir
SFX pE avoir ues savoir
SFX pE avoir ais savoir
SFX pE avoir ait savoir
SFX pE avoir avons savoir
SFX pE avoir avez savoir
SFX pE avoir avent savoir
SFX pE avoir avais savoir
SFX pE avoir avait savoir
SFX pE avoir avions savoir
SFX pE avoir aviez savoir
SFX pE avoir avaient savoir
SFX pE avoir us savoir
SFX pE avoir ut savoir
SFX pE avoir ûmes savoir
SFX pE avoir ûtes savoir
SFX pE avoir urent savoir
SFX pE avoir aurai savoir
SFX pE avoir auras savoir
SFX pE avoir aura savoir
SFX pE avoir aurons savoir
SFX pE avoir aurez savoir
SFX pE avoir auront savoir
SFX pE avoir aurais savoir
SFX pE avoir aurait savoir
SFX pE avoir aurions savoir
SFX pE avoir auriez savoir
SFX pE avoir auraient savoir
SFX pE avoir ache savoir
SFX pE avoir aches savoir
SFX pE avoir achions savoir
SFX pE avoir achiez savoir
SFX pE avoir achent savoir
SFX pE avoir usse savoir
SFX pE avoir usses savoir
SFX pE avoir ût savoir
SFX pE avoir ussions savoir
SFX pE avoir ussiez savoir
SFX pE avoir ussent savoir
SFX pE avoir ache savoir
SFX pE avoir achons savoir
SFX pE avoir achez savoir
SFX pF Y 54
SFX pF oir oir/n'q'd'l'm't's' voir
SFX pF oir oyant/n'q'l'm't's' voir
SFX pF oir u/L'D'Q' voir
SFX pF oir us/D'Q' voir
SFX pF oir ue/L'D'Q' voir
SFX pF oir ues/D'Q' voir
SFX pF oir ois/n'q'j'l'm't' voir
SFX pF oir oit/n'q'l'm't's' voir
SFX pF oir oyons/n'q'l't' voir
SFX pF oir oyez/n'q'l'm' voir
SFX pF oir oient/n'q'l'm't's' voir
SFX pF oir oyais/n'q'j'l'm't' voir
SFX pF oir oyait/n'q'l'm't's' voir
SFX pF oir oyions/n'q'l't' voir
SFX pF oir oyiez/n'q'l'm' voir
SFX pF oir oyaient/n'q'l'm't's' voir
SFX pF oir is/n'q'j'l'm't' voir
SFX pF oir it/n'q'l'm't's' voir
SFX pF oir îmes/n'q'l't' voir
SFX pF oir îtes/n'q'l'm' voir
SFX pF oir irent/n'q'l'm't's' voir
SFX pF oir errai/n'q'j'l'm't' [^é]voir
SFX pF oir oirai évoir
SFX pF oir erras/n'q'l'm't' [^é]voir
SFX pF oir oiras évoir
SFX pF oir erra/n'q'l'm't's' [^é]voir
SFX pF oir oira évoir
SFX pF oir errons/n'q'l't' [^é]voir
SFX pF oir oirons évoir
SFX pF oir errez/n'q'l'm' [^é]voir
SFX pF oir oirez évoir
SFX pF oir erront/n'q'l'm't's' [^é]voir
SFX pF oir oiront évoir
SFX pF oir errais/n'q'j'l'm't' [^é]voir
SFX pF oir oirais évoir
SFX pF oir errait/n'q'l'm't's' [^é]voir
SFX pF oir oirait évoir
SFX pF oir errions/n'q'l't' [^é]voir
SFX pF oir oirions évoir
SFX pF oir erriez/n'q'l'm' [^é]voir
SFX pF oir oiriez évoir
SFX pF oir erraient/n'q'l'm't's' [^é]voir
SFX pF oir oiraient évoir
SFX pF oir oie/n'q'j'l'm't's' voir
SFX pF oir oies/n'l'm't' voir
SFX pF oir isse/n'q'j'l'm't' voir
SFX pF oir isses/n'q'l'm't' voir
SFX pF oir ît/n'q'l'm't's' voir
SFX pF oir issions/n'q'l't' voir
SFX pF oir issiez/n'q'l'm' voir
SFX pF oir issent/n'q'l'm't's' voir
SFX pF oir ois/n'l'm' voir
SFX pF oir oyons/n'l' voir
SFX pF oir oyez/n'l'm' voir
SFX pG Y 11
SFX pG oir errai voir
SFX pG oir erras voir
SFX pG oir erra voir
SFX pG oir errons voir
SFX pG oir errez voir
SFX pG oir erront voir
SFX pG oir errais voir
SFX pG oir errait voir
SFX pG oir errions voir
SFX pG oir erriez voir
SFX pG oir erraient voir
SFX pH Y 43
SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir
SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir
SFX pH ouvoir u/L'D'Q' .mouvoir
SFX pH ouvoir us/D'Q' mouvoir
SFX pH ouvoir ue/L'D'Q' mouvoir
SFX pH ouvoir ues/D'Q' mouvoir
SFX pH ouvoir eus/n'q'j'l'm't' mouvoir
SFX pH ouvoir eut/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvons/n'q'l't' mouvoir
SFX pH ouvoir ouvez/n'q'l'm' mouvoir
SFX pH ouvoir euvent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvions/n'q'l't' mouvoir
SFX pH ouvoir ouviez/n'q'l'm' mouvoir
SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir
SFX pH ouvoir us/n'q'j'l'm't' mouvoir
SFX pH ouvoir ut/n'q'l'm't's' mouvoir
SFX pH ouvoir ûmes/n'q'l't' mouvoir
SFX pH ouvoir ûtes/n'q'l'm' mouvoir
SFX pH ouvoir urent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvras/n'q'l'm't' mouvoir
SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrons/n'q'l't' mouvoir
SFX pH ouvoir ouvrez/n'q'l'm' mouvoir
SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrions/n'q'l't' mouvoir
SFX pH ouvoir ouvriez/n'q'l'm' mouvoir
SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir
SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir
SFX pH ouvoir euves/n'l'm't' mouvoir
SFX pH ouvoir usse/n'q'j'l'm't' mouvoir
SFX pH ouvoir usses/n'q'l'm't' mouvoir
SFX pH ouvoir ût/n'q'l'm't's' mouvoir
SFX pH ouvoir ussions/n'q'l't' mouvoir
SFX pH ouvoir ussiez/n'q'l'm' mouvoir
SFX pH ouvoir ussent/n'q'l'm't's' mouvoir
SFX pH ouvoir eus/n'l'm' mouvoir
SFX pH ouvoir ouvons/n'l' mouvoir
SFX pH ouvoir ouvez/n'l'm' mouvoir
SFX pI N 1
SFX pI ouvoir û/q' mouvoir
SFX pJ N 42
SFX pJ ourvoir ourvoyant pourvoir
SFX pJ ourvoir ourvu pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvue pourvoir
SFX pJ ourvoir ourvues pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoit pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pJ ourvoir ourvoient pourvoir
SFX pJ ourvoir ourvoyais pourvoir
SFX pJ ourvoir ourvoyait pourvoir
SFX pJ ourvoir ourvoyions pourvoir
SFX pJ ourvoir ourvoyiez pourvoir
SFX pJ ourvoir ourvoyaient pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvut pourvoir
SFX pJ ourvoir ourvûmes pourvoir
SFX pJ ourvoir ourvûtes pourvoir
SFX pJ ourvoir ourvurent pourvoir
SFX pJ ourvoir ourvoirai pourvoir
SFX pJ ourvoir ourvoiras pourvoir
SFX pJ ourvoir ourvoira pourvoir
SFX pJ ourvoir ourvoirons pourvoir
SFX pJ ourvoir ourvoirez pourvoir
SFX pJ ourvoir ourvoiront pourvoir
SFX pJ ourvoir ourvoirais pourvoir
SFX pJ ourvoir ourvoirait pourvoir
SFX pJ ourvoir ourvoirions pourvoir
SFX pJ ourvoir ourvoiriez pourvoir
SFX pJ ourvoir ourvoiraient pourvoir
SFX pJ ourvoir ourvoie pourvoir
SFX pJ ourvoir ourvoies pourvoir
SFX pJ ourvoir ourvusse pourvoir
SFX pJ ourvoir ourvusses pourvoir
SFX pJ ourvoir ourvût pourvoir
SFX pJ ourvoir ourvussions pourvoir
SFX pJ ourvoir ourvussiez pourvoir
SFX pJ ourvoir ourvussent pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pK Y 43
SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir
SFX pK cevoir cevant/n'q'l'm't's' cevoir
SFX pK cevoir çu/L'D'Q' cevoir
SFX pK cevoir çus/D'Q' cevoir
SFX pK cevoir çue/L'D'Q' cevoir
SFX pK cevoir çues/D'Q' cevoir
SFX pK cevoir çois/n'q'j'l'm't' cevoir
SFX pK cevoir çoit/n'q'l'm't's' cevoir
SFX pK cevoir cevons/n'q'l't' cevoir
SFX pK cevoir cevez/n'q'l'm' cevoir
SFX pK cevoir çoivent/n'q'l'm't's' cevoir
SFX pK cevoir cevais/n'q'j'l'm't' cevoir
SFX pK cevoir cevait/n'q'l'm't's' cevoir
SFX pK cevoir cevions/n'q'l't' cevoir
SFX pK cevoir ceviez/n'q'l'm' cevoir
SFX pK cevoir cevaient/n'q'l'm't's' cevoir
SFX pK cevoir çus/n'q'j'l'm't' cevoir
SFX pK cevoir çut/n'q'l'm't's' cevoir
SFX pK cevoir çûmes/n'q'l't' cevoir
SFX pK cevoir çûtes/n'q'l'm' cevoir
SFX pK cevoir çurent/n'q'l'm't's' cevoir
SFX pK cevoir cevrai/n'q'j'l'm't' cevoir
SFX pK cevoir cevras/n'q'l'm't' cevoir
SFX pK cevoir cevra/n'q'l'm't's' cevoir
SFX pK cevoir cevrons/n'q'l't' cevoir
SFX pK cevoir cevrez/n'q'l'm' cevoir
SFX pK cevoir cevront/n'q'l'm't's' cevoir
SFX pK cevoir cevrais/n'q'j'l'm't' cevoir
SFX pK cevoir cevrait/n'q'l'm't's' cevoir
SFX pK cevoir cevrions/n'q'l't' cevoir
SFX pK cevoir cevriez/n'q'l'm' cevoir
SFX pK cevoir cevraient/n'q'l'm't's' cevoir
SFX pK cevoir çoive/n'q'j'l'm't's' cevoir
SFX pK cevoir çoives/n'l'm't' cevoir
SFX pK cevoir çusse/n'q'j'l'm't' cevoir
SFX pK cevoir çusses/n'q'l'm't' cevoir
SFX pK cevoir çût/n'q'l'm't's' cevoir
SFX pK cevoir çussions/n'q'l't' cevoir
SFX pK cevoir çussiez/n'q'l'm' cevoir
SFX pK cevoir çussent/n'q'l'm't's' cevoir
SFX pK cevoir çois/n'l'm't' cevoir
SFX pK cevoir cevons/n'l' cevoir
SFX pK cevoir cevez/n'l'm' cevoir
SFX pM N 40
SFX pM aloir alant valoir
SFX pM aloir alu valoir
SFX pM aloir aux valoir
SFX pM aloir aut valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pM aloir alent valoir
SFX pM aloir alais valoir
SFX pM aloir alait valoir
SFX pM aloir alions valoir
SFX pM aloir aliez valoir
SFX pM aloir alaient valoir
SFX pM aloir alus valoir
SFX pM aloir alut valoir
SFX pM aloir alûmes valoir
SFX pM aloir alûtes valoir
SFX pM aloir alurent valoir
SFX pM aloir audrai valoir
SFX pM aloir audras valoir
SFX pM aloir audra valoir
SFX pM aloir audrons valoir
SFX pM aloir audrez valoir
SFX pM aloir audront valoir
SFX pM aloir audrais valoir
SFX pM aloir audrait valoir
SFX pM aloir audrions valoir
SFX pM aloir audriez valoir
SFX pM aloir audraient valoir
SFX pM aloir aille valoir
SFX pM aloir ailles valoir
SFX pM aloir aillent valoir
SFX pM aloir alusse valoir
SFX pM aloir alusses valoir
SFX pM aloir alût valoir
SFX pM aloir alussions valoir
SFX pM aloir alussiez valoir
SFX pM aloir alussent valoir
SFX pM aloir aux valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pN Y 43
SFX pN valoir valoir/n'q'd'm't's' valoir
SFX pN valoir valant/n'q'm't's' valoir
SFX pN valoir vaux/n'j'm't' valoir
SFX pN valoir vaut/n'm't's' valoir
SFX pN valoir valons/n't' valoir
SFX pN valoir valez/n'm' valoir
SFX pN valoir valent/n'm't's' quivaloir
SFX pN valoir valent révaloir
SFX pN valoir valais/n'j'm't' valoir
SFX pN valoir valait/n'm't's' valoir
SFX pN valoir valions/n't' valoir
SFX pN valoir valiez/n'm' valoir
SFX pN valoir valaient/n'm't's' valoir
SFX pN valoir valus/n'j'm't' valoir
SFX pN valoir valut/n'm't's' valoir
SFX pN valoir valûmes/n't' valoir
SFX pN valoir valûtes/n'm' valoir
SFX pN valoir valurent/n'm't's' valoir
SFX pN valoir vaudrai/n'j'm't' valoir
SFX pN valoir vaudras/n'm't' valoir
SFX pN valoir vaudra/n'm't's' valoir
SFX pN valoir vaudrons/n't' valoir
SFX pN valoir vaudrez/n'm' valoir
SFX pN valoir vaudront/n'm't's' valoir
SFX pN valoir vaudrais/n'j'm't' valoir
SFX pN valoir vaudrait/n'm't's' valoir
SFX pN valoir vaudrions/n't' valoir
SFX pN valoir vaudriez/n'm' valoir
SFX pN valoir vaudraient/n'm't's' valoir
SFX pN valoir vaille/n'j'm't's' quivaloir
SFX pN valoir vale révaloir
SFX pN valoir vailles/n'm't' quivaloir
SFX pN valoir vales révaloir
SFX pN valoir vaillent/n'm't's' quivaloir
SFX pN valoir valusse/n'j'm't' valoir
SFX pN valoir valusses/n'm't' valoir
SFX pN valoir valût/n'm't's' valoir
SFX pN valoir valussions/n't' valoir
SFX pN valoir valussiez/n'm' valoir
SFX pN valoir valussent/n'm't's' valoir
SFX pN valoir vaux valoir
SFX pN valoir valons valoir
SFX pN valoir valez valoir
SFX pO N 16
SFX pO valoir valant revaloir
SFX pO valoir valu revaloir
SFX pO valoir valus revaloir
SFX pO valoir value revaloir
SFX pO valoir values revaloir
SFX pO valoir vaudrai revaloir
SFX pO valoir vaudras revaloir
SFX pO valoir vaudra revaloir
SFX pO valoir vaudrons revaloir
SFX pO valoir vaudrez revaloir
SFX pO valoir vaudront revaloir
SFX pO valoir vaudrais revaloir
SFX pO valoir vaudrait revaloir
SFX pO valoir vaudrions revaloir
SFX pO valoir vaudriez revaloir
SFX pO valoir vaudraient revaloir
SFX pP N 1
SFX pP paroir parant comparoir
SFX pQ N 1
SFX pQ haloir haut chaloir
SFX pR Y 2
SFX pR pparoir pparoir/n'q'd' apparoir
SFX pR pparoir ppert/n'q' apparoir
SFX pS Y 69
SFX pS oir oir/n'q'd'l'm't's' oir
SFX pS sseoir sseyant/n'q'l'm't's' seoir
SFX pS sseoir ssoyant/n'q'l'm't's' seoir
SFX pS sseoir ssis/L'D'Q' seoir
SFX pS sseoir ssise/L'D'Q' seoir
SFX pS sseoir ssises/D'Q' seoir
SFX pS sseoir ssieds/n'q'j'l'm't' seoir
SFX pS sseoir ssied/n'q'l'm't's' seoir
SFX pS sseoir sseyons/n'q'l't' seoir
SFX pS sseoir sseyez/n'q'l'm' seoir
SFX pS sseoir sseyent/n'q'l'm't's' seoir
SFX pS sseoir ssois/n'q'j'l'm't' seoir
SFX pS sseoir ssoit/n'q'l'm't's' seoir
SFX pS sseoir ssoyons/n'q'l't' seoir
SFX pS sseoir ssoyez/n'q'l'm' seoir
SFX pS sseoir ssoient/n'q'l'm't's' seoir
SFX pS sseoir sseyais/n'q'j'l'm't' seoir
SFX pS sseoir sseyait/n'q'l'm't's' seoir
SFX pS sseoir sseyions/n'q'l't' seoir
SFX pS sseoir sseyiez/n'q'l'm' seoir
SFX pS sseoir sseyaient/n'q'l'm't's' seoir
SFX pS sseoir ssoyais/n'q'j'l'm't' seoir
SFX pS sseoir ssoyait/n'q'l'm't's' seoir
SFX pS sseoir ssoyions/n'q'l't' seoir
SFX pS sseoir ssoyiez/n'q'l'm' seoir
SFX pS sseoir ssoyaient/n'q'l'm't's' seoir
SFX pS sseoir ssis/n'q'j'l'm't' seoir
SFX pS sseoir ssit/n'q'l'm't's' seoir
SFX pS sseoir ssîmes/n'q'l't' seoir
SFX pS sseoir ssîtes/n'q'l'm' seoir
SFX pS sseoir ssirent/n'q'l'm't's' seoir
SFX pS sseoir ssiérai/n'q'j'l'm't' seoir
SFX pS sseoir ssiéras/n'q'l'm't' seoir
SFX pS sseoir ssiéra/n'q'l'm't's' seoir
SFX pS sseoir ssiérons/n'q'l't' seoir
SFX pS sseoir ssiérez/n'q'l'm' seoir
SFX pS sseoir ssiéront/n'q'l'm't's' seoir
SFX pS sseoir ssoirai/n'q'j'l'm't' seoir
SFX pS sseoir ssoiras/n'q'l'm't' seoir
SFX pS sseoir ssoira/n'q'l'm't's' seoir
SFX pS sseoir ssoirons/n'q'l't' seoir
SFX pS sseoir ssoirez/n'q'l'm' seoir
SFX pS sseoir ssoiront/n'q'l'm't's' seoir
SFX pS sseoir ssiérais/n'q'j'l'm't' seoir
SFX pS sseoir ssiérait/n'q'l'm't's' seoir
SFX pS sseoir ssiérions/n'q'l't' seoir
SFX pS sseoir ssiériez/n'q'l'm' seoir
SFX pS sseoir ssiéraient/n'q'l'm't's' seoir
SFX pS sseoir ssoirais/n'q'j'l'm't' seoir
SFX pS sseoir ssoirait/n'q'l'm't's' seoir
SFX pS sseoir ssoirions/n'q'l't' seoir
SFX pS sseoir ssoiriez/n'q'l'm' seoir
SFX pS sseoir ssoiraient/n'q'l'm't's' seoir
SFX pS sseoir sseye/n'q'j'l'm't's' seoir
SFX pS sseoir sseyes/n'l'm't' seoir
SFX pS sseoir ssoie/n'q'j'l'm't's' seoir
SFX pS sseoir ssoies/n'l'm't' seoir
SFX pS sseoir ssisse/n'q'j'l'm't' seoir
SFX pS sseoir ssisses/n'q'l'm't' seoir
SFX pS sseoir ssît/n'q'l'm't's' seoir
SFX pS sseoir ssissions/n'q'l't' seoir
SFX pS sseoir ssissiez/n'q'l'm' seoir
SFX pS sseoir ssissent/n'q'l'm't's' seoir
SFX pS sseoir ssieds/n'l'm't' seoir
SFX pS sseoir sseyons/n'l' seoir
SFX pS sseoir sseyez/n'l'm' seoir
SFX pS sseoir ssois/n'l'm't' seoir
SFX pS sseoir ssoyons/n'l' seoir
SFX pS sseoir ssoyez/n'l'm' seoir
SFX pT N 41
SFX pT urseoir ursoyant seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursise seoir
SFX pT urseoir ursises seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoit seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pT urseoir ursoient seoir
SFX pT urseoir ursoyais seoir
SFX pT urseoir ursoyait seoir
SFX pT urseoir ursoyions seoir
SFX pT urseoir ursoyiez seoir
SFX pT urseoir ursoyaient seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursit seoir
SFX pT urseoir ursîmes seoir
SFX pT urseoir ursîtes seoir
SFX pT urseoir ursirent seoir
SFX pT urseoir urseoirai seoir
SFX pT urseoir urseoiras seoir
SFX pT urseoir urseoira seoir
SFX pT urseoir urseoirons seoir
SFX pT urseoir urseoirez seoir
SFX pT urseoir urseoiront seoir
SFX pT urseoir urseoirais seoir
SFX pT urseoir urseoirait seoir
SFX pT urseoir urseoirions seoir
SFX pT urseoir urseoiriez seoir
SFX pT urseoir urseoiraient seoir
SFX pT urseoir ursoie seoir
SFX pT urseoir ursoies seoir
SFX pT urseoir ursisse seoir
SFX pT urseoir ursisses seoir
SFX pT urseoir ursît seoir
SFX pT urseoir ursissions seoir
SFX pT urseoir ursissiez seoir
SFX pT urseoir ursissent seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pU N 4
SFX pU eoir éant seoir
SFX pU eoir is seoir
SFX pU eoir ise seoir
SFX pU eoir ises seoir
SFX pV N 13
SFX pV eoir éant seoir
SFX pV eoir eyant seoir
SFX pV eoir is seoir
SFX pV eoir ied seoir
SFX pV eoir iéent seoir
SFX pV eoir eyait seoir
SFX pV eoir eyaient seoir
SFX pV eoir iéra seoir
SFX pV eoir iéront seoir
SFX pV eoir iérait seoir
SFX pV eoir iéraient seoir
SFX pV eoir iée seoir
SFX pV eoir iéent seoir
SFX pW N 11
SFX pW sseoir sséant seoir
SFX pW sseoir ssied seoir
SFX pW sseoir ssiéent seoir
SFX pW sseoir sseyait seoir
SFX pW sseoir sseyaient seoir
SFX pW sseoir ssiéra seoir
SFX pW sseoir ssiéront seoir
SFX pW sseoir ssiérait seoir
SFX pW sseoir ssiéraient seoir
SFX pW sseoir ssiée seoir
SFX pW sseoir ssiéent seoir
SFX pX N 52
SFX pX hoir hu choir
SFX pX hoir hus choir
SFX pX hoir hue choir
SFX pX hoir hues choir
SFX pX hoir hois choir
SFX pX hoir hoit choir
SFX pX hoir hoyons choir
SFX pX hoir hoyez choir
SFX pX hoir hoient choir
SFX pX hoir hoyais déchoir
SFX pX hoir hoyait déchoir
SFX pX hoir hoyions déchoir
SFX pX hoir hoyiez déchoir
SFX pX hoir hoyaient déchoir
SFX pX hoir hus choir
SFX pX hoir hut choir
SFX pX hoir hûmes choir
SFX pX hoir hûtes choir
SFX pX hoir hurent choir
SFX pX hoir hoirai choir
SFX pX hoir herrai choir
SFX pX hoir hoiras choir
SFX pX hoir herras choir
SFX pX hoir hoira choir
SFX pX hoir herra choir
SFX pX hoir hoirons choir
SFX pX hoir herrons choir
SFX pX hoir hoirez choir
SFX pX hoir herrez choir
SFX pX hoir hoiront choir
SFX pX hoir herront choir
SFX pX hoir hoirais choir
SFX pX hoir herrais choir
SFX pX hoir hoirait choir
SFX pX hoir herrait choir
SFX pX hoir hoirions choir
SFX pX hoir herrions choir
SFX pX hoir hoiriez choir
SFX pX hoir herriez choir
SFX pX hoir hoiraient choir
SFX pX hoir herraient choir
SFX pX hoir hoie choir
SFX pX hoir hoies choir
SFX pX hoir husse choir
SFX pX hoir husses choir
SFX pX hoir hût choir
SFX pX hoir hussions choir
SFX pX hoir hussiez choir
SFX pX hoir hussent choir
SFX pX hoir hois déchoir
SFX pX hoir hoyons déchoir
SFX pX hoir hoyez déchoir
SFX pY Y 26
SFX pY choir choir/n'q'd' échoir
SFX pY choir chéant/n'q' échoir
SFX pY choir chu/L'D'Q' échoir
SFX pY choir chus/D'Q' échoir
SFX pY choir chue/L'D'Q' échoir
SFX pY choir chues/D'Q' échoir
SFX pY choir choit/n'q' échoir
SFX pY choir chet/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chéent/n'q' échoir
SFX pY choir choyait/n'q' échoir
SFX pY choir choyaient/n'q' échoir
SFX pY choir chut/n'q' échoir
SFX pY choir churent/n'q' échoir
SFX pY choir choira/n'q' échoir
SFX pY choir cherra/n'q' échoir
SFX pY choir choiront/n'q' échoir
SFX pY choir cherront/n'q' échoir
SFX pY choir choirait/n'q' échoir
SFX pY choir cherrait/n'q' échoir
SFX pY choir choiraient/n'q' échoir
SFX pY choir cherraient/n'q' échoir
SFX pY choir choie/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chût/n'q' échoir
SFX pY choir chussent/n'q' échoir
SFX pZ N 18
SFX pZ euvoir euvant pleuvoir
SFX pZ euvoir u pleuvoir
SFX pZ euvoir eut pleuvoir
SFX pZ euvoir euvent pleuvoir
SFX pZ euvoir euvait pleuvoir
SFX pZ euvoir euvaient pleuvoir
SFX pZ euvoir ut pleuvoir
SFX pZ euvoir urent pleuvoir
SFX pZ euvoir euvra pleuvoir
SFX pZ euvoir euvront pleuvoir
SFX pZ euvoir euvrait pleuvoir
SFX pZ euvoir euvraient pleuvoir
SFX pZ euvoir euve pleuvoir
SFX pZ euvoir ût pleuvoir
SFX pZ euvoir ussent pleuvoir
SFX pZ euvoir eus pleuvoir
SFX pZ euvoir euvons pleuvoir
SFX pZ euvoir euvez pleuvoir
SFX qA N 8
SFX qA alloir allu falloir
SFX qA alloir aut falloir
SFX qA alloir allait falloir
SFX qA alloir allut falloir
SFX qA alloir audra falloir
SFX qA alloir audrait falloir
SFX qA alloir aille falloir
SFX qA alloir allût falloir
SFX rA Y 28
SFX rA lore lore/n'q'd'l'm't's' clore
SFX rA lore losant/n'q'l'm't's' clore
SFX rA lore los/L'D'Q' clore
SFX rA lore lose/L'D'Q' clore
SFX rA lore loses/D'Q' clore
SFX rA lore los/n'q'j'l'm't' clore
SFX rA lore lot/n'q'l'm't's' .clore
SFX rA lore losons/n'q'l't' clore
SFX rA lore losez/n'q'l'm' clore
SFX rA lore losent/n'q'l'm't's' clore
SFX rA lore lorai/n'q'j'l'm't' clore
SFX rA lore loras/n'q'l'm't' clore
SFX rA lore lora/n'q'l'm't's' clore
SFX rA lore lorons/n'q'l't' clore
SFX rA lore lorez/n'q'l'm' clore
SFX rA lore loront/n'q'l'm't's' clore
SFX rA lore lorais/n'q'j'l'm't' clore
SFX rA lore lorait/n'q'l'm't's' clore
SFX rA lore lorions/n'q'l't' clore
SFX rA lore loriez/n'q'l'm' clore
SFX rA lore loraient/n'q'l'm't's' clore
SFX rA lore lose/n'q'j'l'm't's' clore
SFX rA lore loses/n'l'm't' clore
SFX rA lore losions/n'l't' clore
SFX rA lore losiez/n'l'm' clore
SFX rA lore los/n'l'm' clore
SFX rA lore losons/n'l' clore
SFX rA lore losez/n'l'm' clore
SFX rB Y 1
SFX rB lore lôt clore
SFX rC Y 28
SFX rC clore clore/n'q'd' clore
SFX rC clore closant/n'q' clore
SFX rC clore clos/L'D'Q' clore
SFX rC clore close/L'D'Q' clore
SFX rC clore closes/D'Q' clore
SFX rC clore clos/n'j' clore
SFX rC clore clot/n'q' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rC clore closent/n'q' clore
SFX rC clore clorai/n'j' clore
SFX rC clore cloras/n' clore
SFX rC clore clora/n'q' clore
SFX rC clore clorons/n' clore
SFX rC clore clorez/n' clore
SFX rC clore cloront/n'q' clore
SFX rC clore clorais/n'j' clore
SFX rC clore clorait/n'q' clore
SFX rC clore clorions/n' clore
SFX rC clore cloriez/n' clore
SFX rC clore cloraient/n'q' clore
SFX rC clore close/n'q'j' clore
SFX rC clore closes/n' clore
SFX rC clore closions/n' clore
SFX rC clore closiez/n' clore
SFX rC clore clos/n' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rD N 3
SFX rD clore clos clore
SFX rD clore close clore
SFX rD clore closes clore
SFX tA Y 44
SFX tA re re/n'q'd'l'm't's' [dp]re
SFX tA re ant/n'q'l'm't's' [dp]re
SFX tA re u/L'D'Q' [dp]re
SFX tA re us/D'Q' [dp]re
SFX tA re ue/L'D'Q' [dp]re
SFX tA re ues/D'Q' [dp]re
SFX tA re s/n'q'j'l'm't' [dp]re
SFX tA dre d/n'q'l'm't's' dre
SFX tA pre pt/n'q'l'm't's' pre
SFX tA re ons/n'q'l't' [dp]re
SFX tA re ez/n'q'l'm' [dp]re
SFX tA re ent/n'q'l'm't's' [dp]re
SFX tA re ais/n'q'j'l'm't' [dp]re
SFX tA re ait/n'q'l'm't's' [dp]re
SFX tA re ions/n'q'l't' [dp]re
SFX tA re iez/n'q'l'm' [dp]re
SFX tA re aient/n'q'l'm't's' [dp]re
SFX tA re is/n'q'j'l'm't' [dp]re
SFX tA re it/n'q'l'm't's' [dp]re
SFX tA re îmes/n'q'l't' [dp]re
SFX tA re îtes/n'q'l'm' [dp]re
SFX tA re irent/n'q'l'm't's' [dp]re
SFX tA re rai/n'q'j'l'm't' [dp]re
SFX tA re ras/n'q'l'm't' [dp]re
SFX tA re ra/n'q'l'm't's' [dp]re
SFX tA re rons/n'q'l't' [dp]re
SFX tA re rez/n'q'l'm' [dp]re
SFX tA re ront/n'q'l'm't's' [dp]re
SFX tA re rais/n'q'j'l'm't' [dp]re
SFX tA re rait/n'q'l'm't's' [dp]re
SFX tA re rions/n'q'l't' [dp]re
SFX tA re riez/n'q'l'm' [dp]re
SFX tA re raient/n'q'l'm't's' [dp]re
SFX tA re e/n'q'j'l'm't's' [dp]re
SFX tA re es/n'l'm't' [dp]re
SFX tA re isse/n'q'j'l'm't' [dp]re
SFX tA re isses/n'q'l'm't' [dp]re
SFX tA re ît/n'q'l'm't's' [dp]re
SFX tA re issions/n'q'l't' [dp]re
SFX tA re issiez/n'q'l'm' [dp]re
SFX tA re issent/n'q'l'm't's' [dp]re
SFX tA re s/n'l'm't' [dp]re
SFX tA re ons/n'l' [dp]re
SFX tA re ez/n'l'm' [dp]re
SFX tD Y 43
SFX tD perdre perdre/m't's' perdre
SFX tD perdre perdant/m't's' perdre
SFX tD perdre perdu perdre
SFX tD perdre perdus perdre
SFX tD perdre perdue perdre
SFX tD perdre perdues perdre
SFX tD perdre perds/m't' perdre
SFX tD perdre perd/s' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tD perdre perdent/s' perdre
SFX tD perdre perdais/m't' perdre
SFX tD perdre perdait/s' perdre
SFX tD perdre perdions perdre
SFX tD perdre perdiez perdre
SFX tD perdre perdaient/s' perdre
SFX tD perdre perdis/m't' perdre
SFX tD perdre perdit/s' perdre
SFX tD perdre perdîmes perdre
SFX tD perdre perdîtes perdre
SFX tD perdre perdirent/s' perdre
SFX tD perdre perdrai/m' perdre
SFX tD perdre perdras/t' perdre
SFX tD perdre perdra/s' perdre
SFX tD perdre perdrons perdre
SFX tD perdre perdrez perdre
SFX tD perdre perdront/s' perdre
SFX tD perdre perdrais/m't' perdre
SFX tD perdre perdrait/s' perdre
SFX tD perdre perdrions perdre
SFX tD perdre perdriez perdre
SFX tD perdre perdraient/s' perdre
SFX tD perdre perde/m's' perdre
SFX tD perdre perdes/t' perdre
SFX tD perdre perdisse/m' perdre
SFX tD perdre perdisses/t' perdre
SFX tD perdre perdît/s' perdre
SFX tD perdre perdissions perdre
SFX tD perdre perdissiez perdre
SFX tD perdre perdissent/s' perdre
SFX tD perdre perds/t' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tE N 38
SFX tE dre dant dre
SFX tE dre ds dre
SFX tE dre d dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tE dre dent dre
SFX tE dre dais dre
SFX tE dre dait dre
SFX tE dre dions dre
SFX tE dre diez dre
SFX tE dre daient dre
SFX tE dre dis dre
SFX tE dre dit dre
SFX tE dre dîmes dre
SFX tE dre dîtes dre
SFX tE dre dirent dre
SFX tE dre drai dre
SFX tE dre dras dre
SFX tE dre dra dre
SFX tE dre drons dre
SFX tE dre drez dre
SFX tE dre dront dre
SFX tE dre drais dre
SFX tE dre drait dre
SFX tE dre drions dre
SFX tE dre driez dre
SFX tE dre draient dre
SFX tE dre de dre
SFX tE dre des dre
SFX tE dre disse dre
SFX tE dre disses dre
SFX tE dre dît dre
SFX tE dre dissions dre
SFX tE dre dissiez dre
SFX tE dre dissent dre
SFX tE dre ds dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tF Y 42
SFX tF rendre rendre/n'q'd'l'm't's' prendre
SFX tF rendre renant/n'q'l'm't's' prendre
SFX tF rendre ris/L'D'Q' prendre
SFX tF rendre rise/L'D'Q' prendre
SFX tF rendre rises/D'Q' prendre
SFX tF rendre rends/n'q'j'l'm't' prendre
SFX tF rendre rend/n'q'l'm't's' prendre
SFX tF rendre renons/n'q'l't' prendre
SFX tF rendre renez/n'q'l'm' prendre
SFX tF rendre rennent/n'q'l'm't's' prendre
SFX tF rendre renais/n'q'j'l'm't' prendre
SFX tF rendre renait/n'q'l'm't's' prendre
SFX tF rendre renions/n'q'l't' prendre
SFX tF rendre reniez/n'q'l'm' prendre
SFX tF rendre renaient/n'q'l'm't's' prendre
SFX tF rendre ris/n'q'j'l'm't' prendre
SFX tF rendre rit/n'q'l'm't's' prendre
SFX tF rendre rîmes/n'q'l't' prendre
SFX tF rendre rîtes/n'q'l'm' prendre
SFX tF rendre rirent/n'q'l'm't's' prendre
SFX tF rendre rendrai/n'q'j'l'm't' prendre
SFX tF rendre rendras/n'q'l'm't' prendre
SFX tF rendre rendra/n'q'l'm't's' prendre
SFX tF rendre rendrons/n'q'l't' prendre
SFX tF rendre rendrez/n'q'l'm' prendre
SFX tF rendre rendront/n'q'l'm't's' prendre
SFX tF rendre rendrais/n'q'j'l'm't' prendre
SFX tF rendre rendrait/n'q'l'm't's' prendre
SFX tF rendre rendrions/n'q'l't' prendre
SFX tF rendre rendriez/n'q'l'm' prendre
SFX tF rendre rendraient/n'q'l'm't's' prendre
SFX tF rendre renne/n'q'j'l'm't's' prendre
SFX tF rendre rennes/n'l'm't' prendre
SFX tF rendre risse/n'q'j'l'm't' prendre
SFX tF rendre risses/n'q'l'm't' prendre
SFX tF rendre rît/n'q'l'm't's' prendre
SFX tF rendre rissions/n'q'l't' prendre
SFX tF rendre rissiez/n'q'l'm' prendre
SFX tF rendre rissent/n'q'l'm't's' prendre
SFX tF rendre rends/n'l'm' prendre
SFX tF rendre renons/n'l' prendre
SFX tF rendre renez/n'l'm' prendre
SFX tG Y 42
SFX tG prendre prendre/m't's' prendre
SFX tG prendre prenant/m't's' prendre
SFX tG prendre pris/L'D'Q' prendre
SFX tG prendre prise/L'D'Q' prendre
SFX tG prendre prises/D'Q' prendre
SFX tG prendre prends/m't' prendre
SFX tG prendre prend/s' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tG prendre prennent/s' prendre
SFX tG prendre prenais/m't' prendre
SFX tG prendre prenait/s' prendre
SFX tG prendre prenions prendre
SFX tG prendre preniez prendre
SFX tG prendre prenaient/s' prendre
SFX tG prendre pris/m't' prendre
SFX tG prendre prit/s' prendre
SFX tG prendre prîmes prendre
SFX tG prendre prîtes prendre
SFX tG prendre prirent/s' prendre
SFX tG prendre prendrai/m' prendre
SFX tG prendre prendras/t' prendre
SFX tG prendre prendra/s' prendre
SFX tG prendre prendrons prendre
SFX tG prendre prendrez prendre
SFX tG prendre prendront/s' prendre
SFX tG prendre prendrais/m't' prendre
SFX tG prendre prendrait/s' prendre
SFX tG prendre prendrions prendre
SFX tG prendre prendriez prendre
SFX tG prendre prendraient/s' prendre
SFX tG prendre prenne/m's' prendre
SFX tG prendre prennes/t' prendre
SFX tG prendre prisse/m' prendre
SFX tG prendre prisses/t' prendre
SFX tG prendre prît/s' prendre
SFX tG prendre prissions prendre
SFX tG prendre prissiez prendre
SFX tG prendre prissent/s' prendre
SFX tG prendre prends/t' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tM N 31
SFX tM outre outant foutre
SFX tM outre outu foutre
SFX tM outre outus foutre
SFX tM outre outue foutre
SFX tM outre outues foutre
SFX tM outre ous foutre
SFX tM outre out foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tM outre outent foutre
SFX tM outre outais foutre
SFX tM outre outait foutre
SFX tM outre outions foutre
SFX tM outre outiez foutre
SFX tM outre outaient foutre
SFX tM outre outrai foutre
SFX tM outre outras foutre
SFX tM outre outra foutre
SFX tM outre outrons foutre
SFX tM outre outrez foutre
SFX tM outre outront foutre
SFX tM outre outrais foutre
SFX tM outre outrait foutre
SFX tM outre outrions foutre
SFX tM outre outriez foutre
SFX tM outre outraient foutre
SFX tM outre oute foutre
SFX tM outre outes foutre
SFX tM outre ous foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tU N 4
SFX tU istre issu tistre
SFX tU istre issus tistre
SFX tU istre issue tistre
SFX tU istre issues tistre
SFX uA Y 45
SFX uA tre tre/n'q'd'l'm't's' tre
SFX uA tre tant/n'q'l'm't's' tre
SFX uA tre tu/L'D'Q' tre
SFX uA tre tus/D'Q' tre
SFX uA tre tue/L'D'Q' tre
SFX uA tre tues/D'Q' tre
SFX uA ttre ts/n'q'j'l'm't' ttre
SFX uA ttre t/n'q'l'm't's' ttre
SFX uA tre ts/n'q'j'l'm't' embatre
SFX uA tre t/n'q'l'm't's' embatre
SFX uA tre tons/n'q'l't' tre
SFX uA tre tez/n'q'l'm' tre
SFX uA tre tent/n'q'l'm't's' tre
SFX uA tre tais/n'q'j'l'm't' tre
SFX uA tre tait/n'q'l'm't's' tre
SFX uA tre tions/n'q'l't' tre
SFX uA tre tiez/n'q'l'm' tre
SFX uA tre taient/n'q'l'm't's' tre
SFX uA tre tis/n'q'j'l'm't' tre
SFX uA tre tit/n'q'l'm't's' tre
SFX uA tre tîmes/n'q'l't' tre
SFX uA tre tîtes/n'q'l'm' tre
SFX uA tre tirent/n'q'l'm't's' tre
SFX uA tre trai/n'q'j'l'm't' tre
SFX uA tre tras/n'q'l'm't' tre
SFX uA tre tra/n'q'l'm't's' tre
SFX uA tre trons/n'q'l't' tre
SFX uA tre trez/n'q'l'm' tre
SFX uA tre tront/n'q'l'm't's' tre
SFX uA tre trais/n'q'j'l'm't' tre
SFX uA tre trait/n'q'l'm't's' tre
SFX uA tre trions/n'q'l't' tre
SFX uA tre triez/n'q'l'm' tre
SFX uA tre traient/n'q'l'm't's' tre
SFX uA tre te/n'q'j'l'm't's' tre
SFX uA tre tes/n'l'm't' tre
SFX uA tre tisse/n'q'j'l'm't' tre
SFX uA tre tisses/n'q'l'm't' tre
SFX uA tre tît/n'q'l'm't's' tre
SFX uA tre tissions/n'q'l't' tre
SFX uA tre tissiez/n'q'l'm' tre
SFX uA tre tissent/n'q'l'm't's' tre
SFX uA tre s/n'l'm't' tre
SFX uA tre tons/n'l' tre
SFX uA tre tez/n'l'm' tre
SFX uC Y 43
SFX uC battre battre/m't's' battre
SFX uC battre battant/m't's' battre
SFX uC battre battu battre
SFX uC battre battus battre
SFX uC battre battue battre
SFX uC battre battues battre
SFX uC battre bats/m't' battre
SFX uC battre bat/s' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uC battre battent/s' battre
SFX uC battre battais/m't' battre
SFX uC battre battait/s' battre
SFX uC battre battions battre
SFX uC battre battiez battre
SFX uC battre battaient/s' battre
SFX uC battre battis/m't' battre
SFX uC battre battit/s' battre
SFX uC battre battîmes battre
SFX uC battre battîtes battre
SFX uC battre battirent/s' battre
SFX uC battre battrai/m' battre
SFX uC battre battras/t' battre
SFX uC battre battra/s' battre
SFX uC battre battrons battre
SFX uC battre battrez battre
SFX uC battre battront/s' battre
SFX uC battre battrais/m't' battre
SFX uC battre battrait/s' battre
SFX uC battre battrions battre
SFX uC battre battriez battre
SFX uC battre battraient/s' battre
SFX uC battre batte/m's' battre
SFX uC battre battes/t' battre
SFX uC battre battisse/m' battre
SFX uC battre battisses/t' battre
SFX uC battre battît/s' battre
SFX uC battre battissions battre
SFX uC battre battissiez battre
SFX uC battre battissent/s' battre
SFX uC battre bats/t' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uD Y 33
SFX uD battre battre/s' battre
SFX uD battre battant/s' battre
SFX uD battre battu battre
SFX uD battre battus battre
SFX uD battre battue battre
SFX uD battre battues battre
SFX uD battre bat/s' battre
SFX uD battre battons battre
SFX uD battre battez battre
SFX uD battre battent/s' battre
SFX uD battre battait/s' battre
SFX uD battre battions battre
SFX uD battre battiez battre
SFX uD battre battaient/s' battre
SFX uD battre battit/s' battre
SFX uD battre battîmes battre
SFX uD battre battîtes battre
SFX uD battre battirent/s' battre
SFX uD battre battra/s' battre
SFX uD battre battrons battre
SFX uD battre battrez battre
SFX uD battre battront/s' battre
SFX uD battre battrait/s' battre
SFX uD battre battrions battre
SFX uD battre battriez battre
SFX uD battre battraient/s' battre
SFX uD battre batte/s' battre
SFX uD battre battît/s' battre
SFX uD battre battissions battre
SFX uD battre battissiez battre
SFX uD battre battissent/s' battre
SFX uD battre battons-nous battre
SFX uD battre battez-vous battre
SFX vA Y 42
SFX vA ettre ettre/n'q'd'l'm't's' mettre
SFX vA ettre ettant/n'q'l'm't's' mettre
SFX vA ettre is/L'D'Q' mettre
SFX vA ettre ise/L'D'Q' mettre
SFX vA ettre ises/D'Q' mettre
SFX vA ettre ets/n'q'j'l'm't' mettre
SFX vA ettre et/n'q'l'm't's' mettre
SFX vA ettre ettons/n'q'l't' mettre
SFX vA ettre ettez/n'q'l'm' mettre
SFX vA ettre ettent/n'q'l'm't's' mettre
SFX vA ettre ettais/n'q'j'l'm't' mettre
SFX vA ettre ettait/n'q'l'm't's' mettre
SFX vA ettre ettions/n'q'l't' mettre
SFX vA ettre ettiez/n'q'l'm' mettre
SFX vA ettre ettaient/n'q'l'm't's' mettre
SFX vA ettre is/n'q'j'l'm't' mettre
SFX vA ettre it/n'q'l'm't's' mettre
SFX vA ettre îmes/n'q'l't' mettre
SFX vA ettre îtes/n'q'l'm' mettre
SFX vA ettre irent/n'q'l'm't's' mettre
SFX vA ettre ettrai/n'q'j'l'm't' mettre
SFX vA ettre ettras/n'q'l'm't' mettre
SFX vA ettre ettra/n'q'l'm't's' mettre
SFX vA ettre ettrons/n'q'l't' mettre
SFX vA ettre ettrez/n'q'l'm' mettre
SFX vA ettre ettront/n'q'l'm't's' mettre
SFX vA ettre ettrais/n'q'j'l'm't' mettre
SFX vA ettre ettrait/n'q'l'm't's' mettre
SFX vA ettre ettrions/n'q'l't' mettre
SFX vA ettre ettriez/n'q'l'm' mettre
SFX vA ettre ettraient/n'q'l'm't's' mettre
SFX vA ettre ette/n'q'j'l'm't's' mettre
SFX vA ettre ettes/n'l'm't' mettre
SFX vA ettre isse/n'q'j'l'm't' mettre
SFX vA ettre isses/n'q'l'm't' mettre
SFX vA ettre ît/n'q'l'm't's' mettre
SFX vA ettre issions/n'q'l't' mettre
SFX vA ettre issiez/n'q'l'm' mettre
SFX vA ettre issent/n'q'l'm't's' mettre
SFX vA ettre ets/n'l'm't' mettre
SFX vA ettre ettons/n'l' mettre
SFX vA ettre ettez/n'l'm' mettre
SFX vC Y 42
SFX vC mettre mettre/m't's' mettre
SFX vC mettre mettant/m't's' mettre
SFX vC mettre mis mettre
SFX vC mettre mise mettre
SFX vC mettre mises mettre
SFX vC mettre mets/m't' mettre
SFX vC mettre met/s' mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX vC mettre mettent/s' mettre
SFX vC mettre mettais/m't' mettre
SFX vC mettre mettait/s' mettre
SFX vC mettre mettions mettre
SFX vC mettre mettiez mettre
SFX vC mettre mettaient/s' mettre
SFX vC mettre mis/m't' mettre
SFX vC mettre mit/s' mettre
SFX vC mettre mîmes mettre
SFX vC mettre mîtes mettre
SFX vC mettre mirent/s' mettre
SFX vC mettre mettrai/m' mettre
SFX vC mettre mettras/t' mettre
SFX vC mettre mettra/s' mettre
SFX vC mettre mettrons mettre
SFX vC mettre mettrez mettre
SFX vC mettre mettront/s' mettre
SFX vC mettre mettrais/m't' mettre
SFX vC mettre mettrait/s' mettre
SFX vC mettre mettrions mettre
SFX vC mettre mettriez mettre
SFX vC mettre mettraient/s' mettre
SFX vC mettre mette/m's' mettre
SFX vC mettre mettes/t' mettre
SFX vC mettre misse/m' mettre
SFX vC mettre misses/t' mettre
SFX vC mettre mît/s' mettre
SFX vC mettre missions mettre
SFX vC mettre missiez mettre
SFX vC mettre missent/s' mettre
SFX vC mettre mets mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX wA N 42
SFX wA eindre eignant eindre
SFX wA eindre eint eindre
SFX wA eindre eints eindre
SFX wA eindre einte eindre
SFX wA eindre eintes eindre
SFX wA eindre eins eindre
SFX wA eindre eint eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wA eindre eignent eindre
SFX wA eindre eignais eindre
SFX wA eindre eignait eindre
SFX wA eindre eignions eindre
SFX wA eindre eigniez eindre
SFX wA eindre eignaient eindre
SFX wA eindre eignis eindre
SFX wA eindre eignit eindre
SFX wA eindre eignîmes eindre
SFX wA eindre eignîtes eindre
SFX wA eindre eignirent eindre
SFX wA eindre eindrai eindre
SFX wA eindre eindras eindre
SFX wA eindre eindra eindre
SFX wA eindre eindrons eindre
SFX wA eindre eindrez eindre
SFX wA eindre eindront eindre
SFX wA eindre eindrais eindre
SFX wA eindre eindrait eindre
SFX wA eindre eindrions eindre
SFX wA eindre eindriez eindre
SFX wA eindre eindraient eindre
SFX wA eindre eigne eindre
SFX wA eindre eignes eindre
SFX wA eindre eignisse eindre
SFX wA eindre eignisses eindre
SFX wA eindre eignît eindre
SFX wA eindre eignissions eindre
SFX wA eindre eignissiez eindre
SFX wA eindre eignissent eindre
SFX wA eindre eins eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wB Y 43
SFX wB indre indre/n'q'd'l'm't's' indre
SFX wB indre ignant/n'q'l'm't's' indre
SFX wB indre int/L'D'Q' indre
SFX wB indre ints/D'Q' indre
SFX wB indre inte/L'D'Q' indre
SFX wB indre intes/D'Q' indre
SFX wB indre ins/n'q'j'l'm't' indre
SFX wB indre int/n'q'l'm't's' indre
SFX wB indre ignons/n'q'l't' indre
SFX wB indre ignez/n'q'l'm' indre
SFX wB indre ignent/n'q'l'm't's' indre
SFX wB indre ignais/n'q'j'l'm't' indre
SFX wB indre ignait/n'q'l'm't's' indre
SFX wB indre ignions/n'q'l't' indre
SFX wB indre igniez/n'q'l'm' indre
SFX wB indre ignaient/n'q'l'm't's' indre
SFX wB indre ignis/n'q'j'l'm't' indre
SFX wB indre ignit/n'q'l'm't's' indre
SFX wB indre ignîmes/n'q'l't' indre
SFX wB indre ignîtes/n'q'l'm' indre
SFX wB indre ignirent/n'q'l'm't's' indre
SFX wB indre indrai/n'q'j'l'm't' indre
SFX wB indre indras/n'q'l'm't' indre
SFX wB indre indra/n'q'l'm't's' indre
SFX wB indre indrons/n'q'l't' indre
SFX wB indre indrez/n'q'l'm' indre
SFX wB indre indront/n'q'l'm't's' indre
SFX wB indre indrais/n'q'j'l'm't' indre
SFX wB indre indrait/n'q'l'm't's' indre
SFX wB indre indrions/n'q'l't' indre
SFX wB indre indriez/n'q'l'm' indre
SFX wB indre indraient/n'q'l'm't's' indre
SFX wB indre igne/n'q'j'l'm't's' indre
SFX wB indre ignes/n'l'm't' indre
SFX wB indre ignisse/n'q'j'l'm't' indre
SFX wB indre ignisses/n'q'l'm't' indre
SFX wB indre ignît/n'q'l'm't's' indre
SFX wB indre ignissions/n'q'l't' indre
SFX wB indre ignissiez/n'q'l'm' indre
SFX wB indre ignissent/n'q'l'm't's' indre
SFX wB indre ins/n'l'm't' indre
SFX wB indre ignons/n'l' indre
SFX wB indre ignez/n'l'm' indre
SFX wD N 45
SFX wD aire aisant faire
SFX wD aire ait faire
SFX wD aire aits faire
SFX wD aire aite faire
SFX wD aire aites faire
SFX wD aire ais faire
SFX wD aire ait faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wD aire ont faire
SFX wD aire aisais faire
SFX wD aire aisait faire
SFX wD aire aisions faire
SFX wD aire aisiez faire
SFX wD aire aisaient faire
SFX wD aire is faire
SFX wD aire it faire
SFX wD aire îmes faire
SFX wD aire îtes faire
SFX wD aire irent faire
SFX wD aire erai faire
SFX wD aire eras faire
SFX wD aire era faire
SFX wD aire erons faire
SFX wD aire erez faire
SFX wD aire eront faire
SFX wD aire erais faire
SFX wD aire erait faire
SFX wD aire erions faire
SFX wD aire eriez faire
SFX wD aire eraient faire
SFX wD aire asse faire
SFX wD aire asses faire
SFX wD aire assions faire
SFX wD aire assiez faire
SFX wD aire assent faire
SFX wD aire isse faire
SFX wD aire isses faire
SFX wD aire ît faire
SFX wD aire issions faire
SFX wD aire issiez faire
SFX wD aire issent faire
SFX wD aire ais faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wF N 13
SFX wF faire faisant faire
SFX wF faire fait faire
SFX wF faire faits faire
SFX wF faire faite faire
SFX wF faire faites faire
SFX wF faire fais faire
SFX wF faire fait faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wF faire font faire
SFX wF faire fais faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wG N 5
SFX wG aire aisant faire
SFX wG aire ait faire
SFX wG aire aits faire
SFX wG aire aite faire
SFX wG aire aites faire
SFX wL Y 32
SFX wL raire raire/n'q'd'l'm't's' traire
SFX wL raire rayant/n'q'l'm't's' traire
SFX wL raire rait/L'D'Q' traire
SFX wL raire raits/D'Q' traire
SFX wL raire raite/L'D'Q' traire
SFX wL raire raites/D'Q' traire
SFX wL raire rais/n'q'j'l'm't' traire
SFX wL raire rait/n'q'l'm't's' traire
SFX wL raire rayons/n'q'l't' traire
SFX wL raire rayez/n'q'l'm' traire
SFX wL raire raient/n'q'l'm't's' traire
SFX wL raire rayais/n'q'j'l'm't' traire
SFX wL raire rayait/n'q'l'm't's' traire
SFX wL raire rayions/n'q'l't' traire
SFX wL raire rayiez/n'q'l'm' traire
SFX wL raire rayaient/n'q'l'm't's' traire
SFX wL raire rairai/n'q'j'l'm't' traire
SFX wL raire rairas/n'q'l'm't' traire
SFX wL raire raira/n'q'l'm't's' traire
SFX wL raire rairons/n'q'l't' traire
SFX wL raire rairez/n'q'l'm' traire
SFX wL raire rairont/n'q'l'm't's' traire
SFX wL raire rairais/n'q'j'l'm't' traire
SFX wL raire rairait/n'q'l'm't's' traire
SFX wL raire rairions/n'q'l't' traire
SFX wL raire rairiez/n'q'l'm' traire
SFX wL raire rairaient/n'q'l'm't's' traire
SFX wL raire raie/n'q'j'l'm't's' traire
SFX wL raire raies/n'q'l'm't' traire
SFX wL raire rais/n'l'm't' traire
SFX wL raire rayons/n'l' traire
SFX wL raire rayez/n'l'm' traire
SFX wM N 28
SFX wM aire ayant raire
SFX wM aire ait raire
SFX wM aire ais raire
SFX wM aire ait raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wM aire aient raire
SFX wM aire ayais raire
SFX wM aire ayait raire
SFX wM aire ayions raire
SFX wM aire ayiez raire
SFX wM aire ayaient raire
SFX wM aire airai raire
SFX wM aire airas raire
SFX wM aire aira raire
SFX wM aire airons raire
SFX wM aire airez raire
SFX wM aire airont raire
SFX wM aire airais raire
SFX wM aire airait raire
SFX wM aire airions raire
SFX wM aire airiez raire
SFX wM aire airaient raire
SFX wM aire aie raire
SFX wM aire aies raire
SFX wM aire ais raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wN N 39
SFX wN aire aisant aire
SFX wN aire ais aire
SFX wN aire ait taire
SFX wN aire aît plaire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wN aire aisent aire
SFX wN aire aisais aire
SFX wN aire aisait aire
SFX wN aire aisions aire
SFX wN aire aisiez aire
SFX wN aire aisaient aire
SFX wN aire us aire
SFX wN aire ut aire
SFX wN aire ûmes aire
SFX wN aire ûtes aire
SFX wN aire urent aire
SFX wN aire airai aire
SFX wN aire airas aire
SFX wN aire aira aire
SFX wN aire airons aire
SFX wN aire airez aire
SFX wN aire airont aire
SFX wN aire airais aire
SFX wN aire airait aire
SFX wN aire airions aire
SFX wN aire airiez aire
SFX wN aire airaient aire
SFX wN aire aise aire
SFX wN aire aises aire
SFX wN aire usse aire
SFX wN aire usses aire
SFX wN aire ût aire
SFX wN aire ussions aire
SFX wN aire ussiez aire
SFX wN aire ussent aire
SFX wN aire ais aire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wO N 42
SFX wO aindre aignant aindre
SFX wO aindre aint aindre
SFX wO aindre aints aindre
SFX wO aindre ainte aindre
SFX wO aindre aintes aindre
SFX wO aindre ains aindre
SFX wO aindre aint aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wO aindre aignent aindre
SFX wO aindre aignais aindre
SFX wO aindre aignait aindre
SFX wO aindre aignions aindre
SFX wO aindre aigniez aindre
SFX wO aindre aignaient aindre
SFX wO aindre aignis aindre
SFX wO aindre aignit aindre
SFX wO aindre aignîmes aindre
SFX wO aindre aignîtes aindre
SFX wO aindre aignirent aindre
SFX wO aindre aindrai aindre
SFX wO aindre aindras aindre
SFX wO aindre aindra aindre
SFX wO aindre aindrons aindre
SFX wO aindre aindrez aindre
SFX wO aindre aindront aindre
SFX wO aindre aindrais aindre
SFX wO aindre aindrait aindre
SFX wO aindre aindrions aindre
SFX wO aindre aindriez aindre
SFX wO aindre aindraient aindre
SFX wO aindre aigne aindre
SFX wO aindre aignes aindre
SFX wO aindre aignisse aindre
SFX wO aindre aignisses aindre
SFX wO aindre aignît aindre
SFX wO aindre aignissions aindre
SFX wO aindre aignissiez aindre
SFX wO aindre aignissent aindre
SFX wO aindre ains aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wP N 42
SFX wP aincre ainquant vaincre
SFX wP aincre aincu vaincre
SFX wP aincre aincus vaincre
SFX wP aincre aincue vaincre
SFX wP aincre aincues vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainc vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wP aincre ainquent vaincre
SFX wP aincre ainquais vaincre
SFX wP aincre ainquait vaincre
SFX wP aincre ainquions vaincre
SFX wP aincre ainquiez vaincre
SFX wP aincre ainquaient vaincre
SFX wP aincre ainquis vaincre
SFX wP aincre ainquit vaincre
SFX wP aincre ainquîmes vaincre
SFX wP aincre ainquîtes vaincre
SFX wP aincre ainquirent vaincre
SFX wP aincre aincrai vaincre
SFX wP aincre aincras vaincre
SFX wP aincre aincra vaincre
SFX wP aincre aincrons vaincre
SFX wP aincre aincrez vaincre
SFX wP aincre aincront vaincre
SFX wP aincre aincrais vaincre
SFX wP aincre aincrait vaincre
SFX wP aincre aincrions vaincre
SFX wP aincre aincriez vaincre
SFX wP aincre aincraient vaincre
SFX wP aincre ainque vaincre
SFX wP aincre ainques vaincre
SFX wP aincre ainquisse vaincre
SFX wP aincre ainquisses vaincre
SFX wP aincre ainquît vaincre
SFX wP aincre ainquissions vaincre
SFX wP aincre ainquissiez vaincre
SFX wP aincre ainquissent vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wQ Y 42
SFX wQ tre tre/n'q'd'm't's' tre
SFX wQ aître aissant/n'q'd'm't's' aître
SFX wQ aître ais/n'q'j'm't' aître
SFX wQ aître aît/n'q'm't's' aître
SFX wQ aître aissons/n'q't' aître
SFX wQ aître aissez/n'q'm' aître
SFX wQ aître aissent/n'q'm't's' aître
SFX wQ aître aissais/n'q'j'm't' aître
SFX wQ aître aissait/n'q'm't's' aître
SFX wQ aître aissions/n'q't' aître
SFX wQ aître aissiez/n'q'm' aître
SFX wQ aître aissaient/n'q'm't's' aître
SFX wQ aître us/n'q'j'm't' aître
SFX wQ aître ut/n'q'm't's' aître
SFX wQ aître ûmes/n'q't' aître
SFX wQ aître ûtes/n'q'm' aître
SFX wQ aître urent/n'q'm't's' aître
SFX wQ tre trai/n'q'j'm't' tre
SFX wQ tre tras/n'q'm't' tre
SFX wQ tre tra/n'q'm't's' tre
SFX wQ tre trons/n'q't' tre
SFX wQ tre trez/n'q'm' tre
SFX wQ tre tront/n'q'm't's' tre
SFX wQ tre trais/n'q'j'm't' tre
SFX wQ tre trait/n'q'm't's' tre
SFX wQ tre trions/n'q't' tre
SFX wQ tre triez/n'q'm' tre
SFX wQ tre traient/n'q'm't's' tre
SFX wQ aître aisse/n'q'j'm't's' aître
SFX wQ aître aisses/n'q'm't' aître
SFX wQ aître usse/n'q'j'm't' aître
SFX wQ aître usses/n'q'm't' aître
SFX wQ aître ût/n'q'm't's' aître
SFX wQ aître ussions/n'q't' aître
SFX wQ aître ussiez/n'q'm' aître
SFX wQ aître ussent/n'q'm't's' aître
SFX wQ aître ais/n'm' paraître
SFX wQ aître ais connaître
SFX wQ aître aissons/n' paraître
SFX wQ aître aissons connaître
SFX wQ aître aissez/n'm' paraître
SFX wQ aître aissez connaître
SFX wR N 42
SFX wR aître aissant naître
SFX wR aître é naître
SFX wR aître és naître
SFX wR aître ée naître
SFX wR aître ées naître
SFX wR aître ais naître
SFX wR aître aît naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wR aître aissent naître
SFX wR aître aissais naître
SFX wR aître aissait naître
SFX wR aître aissions naître
SFX wR aître aissiez naître
SFX wR aître aissaient naître
SFX wR aître aquis naître
SFX wR aître aquit naître
SFX wR aître aquîmes naître
SFX wR aître aquîtes naître
SFX wR aître aquirent naître
SFX wR tre trai tre
SFX wR tre tras tre
SFX wR tre tra tre
SFX wR tre trons tre
SFX wR tre trez tre
SFX wR tre tront tre
SFX wR tre trais tre
SFX wR tre trait tre
SFX wR tre trions tre
SFX wR tre triez tre
SFX wR tre traient tre
SFX wR aître aisse naître
SFX wR aître aisses naître
SFX wR aître aquisse naître
SFX wR aître aquisses naître
SFX wR aître aquît naître
SFX wR aître aquissions naître
SFX wR aître aquissiez naître
SFX wR aître aquissent naître
SFX wR aître ais naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wS N 42
SFX wS aître aissant paître
SFX wS aître u repaître
SFX wS aître us repaître
SFX wS aître ue repaître
SFX wS aître ues repaître
SFX wS aître ais paître
SFX wS aître aît paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wS aître aissent paître
SFX wS aître aissais paître
SFX wS aître aissait paître
SFX wS aître aissions paître
SFX wS aître aissiez paître
SFX wS aître aissaient paître
SFX wS aître us repaître
SFX wS aître ut repaître
SFX wS aître ûmes repaître
SFX wS aître ûtes repaître
SFX wS aître urent repaître
SFX wS tre trai tre
SFX wS tre tras tre
SFX wS tre tra tre
SFX wS tre trons tre
SFX wS tre trez tre
SFX wS tre tront tre
SFX wS tre trais tre
SFX wS tre trait tre
SFX wS tre trions tre
SFX wS tre triez tre
SFX wS tre traient tre
SFX wS aître aisse paître
SFX wS aître aisses paître
SFX wS aître usse repaître
SFX wS aître usses repaître
SFX wS aître ût repaître
SFX wS aître ussions repaître
SFX wS aître ussiez repaître
SFX wS aître ussent repaître
SFX wS aître ais paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wT N 46
SFX wT roître roissant croître
SFX wT roître rû recroître
SFX wT roître rûs recroître
SFX wT roître rûe recroître
SFX wT roître rûes recroître
SFX wT roître ru décroître
SFX wT roître rus décroître
SFX wT roître rue décroître
SFX wT roître rues décroître
SFX wT roître rois .croître
SFX wT roître roît .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wT roître roissent croître
SFX wT roître roissais croître
SFX wT roître roissait croître
SFX wT roître roissions croître
SFX wT roître roissiez croître
SFX wT roître roissaient croître
SFX wT roître rus .croître
SFX wT roître rut .croître
SFX wT roître rûmes croître
SFX wT roître rûtes croître
SFX wT roître rurent .croître
SFX wT tre trai tre
SFX wT tre tras tre
SFX wT tre tra tre
SFX wT tre trons tre
SFX wT tre trez tre
SFX wT tre tront tre
SFX wT tre trais tre
SFX wT tre trait tre
SFX wT tre trions tre
SFX wT tre triez tre
SFX wT tre traient tre
SFX wT roître roisse croître
SFX wT roître roisses croître
SFX wT roître russe .croître
SFX wT roître russes .croître
SFX wT roître rût croître
SFX wT roître russions .croître
SFX wT roître russiez .croître
SFX wT roître russent .croître
SFX wT roître rois .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wU N 15
SFX wU roître rû croître
SFX wU roître rûs croître
SFX wU roître rûe croître
SFX wU roître rûes croître
SFX wU roître roîs croître
SFX wU roître roît croître
SFX wU roître rûs croître
SFX wU roître rût croître
SFX wU roître rûrent croître
SFX wU roître rûsse croître
SFX wU roître rûsses croître
SFX wU roître rûssions croître
SFX wU roître rûssiez croître
SFX wU roître rûssent croître
SFX wU roître roîs croître
SFX wV Y 43
SFX wV tre tre/n'q'd'l'm't's' tre
SFX wV croître croissant/n'q'd'l'm't's' croître
SFX wV croître cru/L'D'Q' croître
SFX wV croître crus/D'Q' croître
SFX wV croître crue/L'D'Q' croître
SFX wV croître crues/D'Q' croître
SFX wV croître crois/n'q'j'l'm't' croître
SFX wV croître croît/n'q'l's' croître
SFX wV croître croissons/n'q'l' croître
SFX wV croître croissez/n'q'l' croître
SFX wV croître croissent/n'q'l's' croître
SFX wV croître croissais/n'q'j'l'm't' croître
SFX wV croître croissait/n'q'l's' croître
SFX wV croître croissions/n'q'l' croître
SFX wV croître croissiez/n'q'l' croître
SFX wV croître croissaient/n'q'l's' croître
SFX wV croître crus/n'q'j'l'm't' croître
SFX wV croître crut/n'q'l's' croître
SFX wV croître crûmes/n'q'l' croître
SFX wV croître crûtes/n'q'l' croître
SFX wV croître crurent/n'q'l's' croître
SFX wV tre trai/n'q'j'l'm' tre
SFX wV tre tras/n'q'l't' tre
SFX wV tre tra/n'q'l's' tre
SFX wV tre trons/n'q'l' tre
SFX wV tre trez/n'q'l' tre
SFX wV tre tront/n'q'l's' tre
SFX wV tre trais/n'q'j'l'm't' tre
SFX wV tre trait/n'q'l's' tre
SFX wV tre trions/n'q'l' tre
SFX wV tre triez/n'q'l' tre
SFX wV tre traient/n'q'l's' tre
SFX wV croître croisse/n'q'j'l'm's' croître
SFX wV croître croisses/n'q'l't' croître
SFX wV croître crusse/n'q'j'l'm' croître
SFX wV croître crusses/n'q'l't' croître
SFX wV croître crût/n'q'l's' croître
SFX wV croître crussions/n'q'l' croître
SFX wV croître crussiez/n'q'l' croître
SFX wV croître crussent/n'q'l's' croître
SFX wV croître crois/n'l'm' croître
SFX wV croître croissons/n'l' croître
SFX wV croître croissez/n'l'm' croître
SFX xA N 42
SFX xA roire royant croire
SFX xA roire ru croire
SFX xA roire rus croire
SFX xA roire rue croire
SFX xA roire rues croire
SFX xA roire rois croire
SFX xA roire roit croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xA roire roient croire
SFX xA roire royais croire
SFX xA roire royait croire
SFX xA roire royions croire
SFX xA roire royiez croire
SFX xA roire royaient croire
SFX xA roire rus croire
SFX xA roire rut croire
SFX xA roire rûmes croire
SFX xA roire rûtes croire
SFX xA roire rurent croire
SFX xA roire roirai croire
SFX xA roire roiras croire
SFX xA roire roira croire
SFX xA roire roirons croire
SFX xA roire roirez croire
SFX xA roire roiront croire
SFX xA roire roirais croire
SFX xA roire roirait croire
SFX xA roire roirions croire
SFX xA roire roiriez croire
SFX xA roire roiraient croire
SFX xA roire roie croire
SFX xA roire roies croire
SFX xA roire russe croire
SFX xA roire russes croire
SFX xA roire rût croire
SFX xA roire russions croire
SFX xA roire russiez croire
SFX xA roire russent croire
SFX xA roire rois croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xC N 42
SFX xC oire uvant boire
SFX xC oire u boire
SFX xC oire us boire
SFX xC oire ue boire
SFX xC oire ues boire
SFX xC oire ois boire
SFX xC oire oit boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xC oire oivent boire
SFX xC oire uvais boire
SFX xC oire uvait boire
SFX xC oire uvions boire
SFX xC oire uviez boire
SFX xC oire uvaient boire
SFX xC oire us boire
SFX xC oire ut boire
SFX xC oire ûmes boire
SFX xC oire ûtes boire
SFX xC oire urent boire
SFX xC oire oirai boire
SFX xC oire oiras boire
SFX xC oire oira boire
SFX xC oire oirons boire
SFX xC oire oirez boire
SFX xC oire oiront boire
SFX xC oire oirais boire
SFX xC oire oirait boire
SFX xC oire oirions boire
SFX xC oire oiriez boire
SFX xC oire oiraient boire
SFX xC oire oive boire
SFX xC oire oives boire
SFX xC oire usse boire
SFX xC oire usses boire
SFX xC oire ût boire
SFX xC oire ussions boire
SFX xC oire ussiez boire
SFX xC oire ussent boire
SFX xC oire ois boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xD Y 43
SFX xD boire boire/m't's' boire
SFX xD boire buvant/m't's' boire
SFX xD boire bu boire
SFX xD boire bus boire
SFX xD boire bue boire
SFX xD boire bues boire
SFX xD boire bois/m't' boire
SFX xD boire boit/s' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xD boire boivent/s' boire
SFX xD boire buvais/m't' boire
SFX xD boire buvait/s' boire
SFX xD boire buvions boire
SFX xD boire buviez boire
SFX xD boire buvaient/s' boire
SFX xD boire bus/m't' boire
SFX xD boire but/s' boire
SFX xD boire bûmes boire
SFX xD boire bûtes boire
SFX xD boire burent/s' boire
SFX xD boire boirai/m' boire
SFX xD boire boiras/t' boire
SFX xD boire boira/s' boire
SFX xD boire boirons boire
SFX xD boire boirez boire
SFX xD boire boiront/s' boire
SFX xD boire boirais/m't' boire
SFX xD boire boirait/s' boire
SFX xD boire boirions boire
SFX xD boire boiriez boire
SFX xD boire boiraient/s' boire
SFX xD boire boive/m's' boire
SFX xD boire boives/t' boire
SFX xD boire busse/m' boire
SFX xD boire busses/t' boire
SFX xD boire bût/s' boire
SFX xD boire bussions boire
SFX xD boire bussiez boire
SFX xD boire bussent/s' boire
SFX xD boire bois/t' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xJ N 3
SFX xJ clure clus clure
SFX xJ clure cluse clure
SFX xJ clure cluses clure
SFX xK Y 40
SFX xK clure clure/n'q'd'l'm't's' clure
SFX xK clure cluant/n'q'l'm't's' clure
SFX xK clure clus/L'D'Q' clure
SFX xK clure cluse/L'D'Q' clure
SFX xK clure cluses/D'Q' clure
SFX xK clure clus/n'q'j'l' clure
SFX xK clure clut/n'q'l' clure
SFX xK clure cluons/n'q'l' clure
SFX xK clure cluez/n'q'l' clure
SFX xK clure cluent/n'q'l' clure
SFX xK clure cluais/n'q'j'l' clure
SFX xK clure cluait/n'q'l' clure
SFX xK clure cluions/n'q'l' clure
SFX xK clure cluiez/n'q'l' clure
SFX xK clure cluaient/n'q'l' clure
SFX xK clure clûmes/n'q'l' clure
SFX xK clure clûtes/n'q'l' clure
SFX xK clure clurent/n'q'l' clure
SFX xK clure clurai/n'q'j'l' clure
SFX xK clure cluras/n'q'l' clure
SFX xK clure clura/n'q'l' clure
SFX xK clure clurons/n'q'l' clure
SFX xK clure clurez/n'q'l' clure
SFX xK clure cluront/n'q'l' clure
SFX xK clure clurais/n'q'j'l' clure
SFX xK clure clurait/n'q'l' clure
SFX xK clure clurions/n'q'l' clure
SFX xK clure cluriez/n'q'l' clure
SFX xK clure cluraient/n'q'l' clure
SFX xK clure clue/n'q'j'l' clure
SFX xK clure clues/n'q'l' clure
SFX xK clure clusse/n'q'j'l' clure
SFX xK clure clusses/n'q'l' clure
SFX xK clure clût/n'q'l' clure
SFX xK clure clussions/n'q'l' clure
SFX xK clure clussiez/n'q'l' clure
SFX xK clure clussent/n'q'l' clure
SFX xK clure clus/n'l' clure
SFX xK clure cluons/n'l' clure
SFX xK clure cluez/n'l' clure
SFX xL Y 44
SFX xL clure clure/n'q'd'l'm't's' clure
SFX xL clure cluant/n'q'l'm't's' clure
SFX xL clure clus/L'D'Q' inclure
SFX xL clure cluse/L'D'Q' inclure
SFX xL clure cluses/D'Q' inclure
SFX xL clure clu/L'D'Q' [eo].clure
SFX xL clure clus/D'Q' [eo].clure
SFX xL clure clue/L'D'Q' [eo].clure
SFX xL clure clues/D'Q' [eo].clure
SFX xL clure clus/n'q'j'l'm't' clure
SFX xL clure clut/n'q'l'm't's' clure
SFX xL clure cluons/n'q'l't' clure
SFX xL clure cluez/n'q'l'm' clure
SFX xL clure cluent/n'q'l'm't's' clure
SFX xL clure cluais/n'q'j'l'm't' clure
SFX xL clure cluait/n'q'l'm't's' clure
SFX xL clure cluions/n'q'l't' clure
SFX xL clure cluiez/n'q'l'm' clure
SFX xL clure cluaient/n'q'l'm't's' clure
SFX xL clure clûmes/n'q'l't' clure
SFX xL clure clûtes/n'q'l'm' clure
SFX xL clure clurent/n'q'l'm't's' clure
SFX xL clure clurai/n'q'j'l'm't' clure
SFX xL clure cluras/n'q'l'm't' clure
SFX xL clure clura/n'q'l'm't's' clure
SFX xL clure clurons/n'q'l't' clure
SFX xL clure clurez/n'q'l'm' clure
SFX xL clure cluront/n'q'l'm't's' clure
SFX xL clure clurais/n'q'j'l'm't' clure
SFX xL clure clurait/n'q'l'm't's' clure
SFX xL clure clurions/n'q'l't' clure
SFX xL clure cluriez/n'q'l'm' clure
SFX xL clure cluraient/n'q'l'm't's' clure
SFX xL clure clue/n'q'j'l'm't's' clure
SFX xL clure clues/n'l'm't' clure
SFX xL clure clusse/n'q'j'l'm't' clure
SFX xL clure clusses/n'q'l'm't' clure
SFX xL clure clût/n'q'l'm't's' clure
SFX xL clure clussions/n'q'l't' clure
SFX xL clure clussiez/n'q'l'm' clure
SFX xL clure clussent/n'q'l'm't's' clure
SFX xL clure clus/n'l'm't' clure
SFX xL clure cluons/n'l' clure
SFX xL clure cluez/n'l'm' clure
SFX xM N 14
SFX xM ourdre ourdant sourdre
SFX xM ourdre ourd sourdre
SFX xM ourdre ourdent sourdre
SFX xM ourdre ourdait sourdre
SFX xM ourdre ourdaient sourdre
SFX xM ourdre ourdit sourdre
SFX xM ourdre ourdirent sourdre
SFX xM ourdre ourdra sourdre
SFX xM ourdre ourdront sourdre
SFX xM ourdre ourdrait sourdre
SFX xM ourdre ourdraient sourdre
SFX xM ourdre ourde sourdre
SFX xM ourdre ourdît sourdre
SFX xM ourdre ourdissent sourdre
SFX xN Y 46
SFX xN soudre soudre/n'q'd'l'm't's' soudre
SFX xN soudre solvant/n'q'l'm't's' soudre
SFX xN soudre solu résoudre
SFX xN soudre solus résoudre
SFX xN soudre solue résoudre
SFX xN soudre solues résoudre
SFX xN soudre sous/L'D'Q' soudre
SFX xN soudre soute/L'D'Q' soudre
SFX xN soudre soutes/D'Q' soudre
SFX xN soudre sous/n'q'j'l'm't' soudre
SFX xN soudre sout/n'q'l'm't's' soudre
SFX xN soudre solvons/n'q'l't' soudre
SFX xN soudre solvez/n'q'l'm' soudre
SFX xN soudre solvent/n'q'l'm't's' soudre
SFX xN soudre solvais/n'q'j'l'm't' soudre
SFX xN soudre solvait/n'q'l'm't's' soudre
SFX xN soudre solvions/n'q'l't' soudre
SFX xN soudre solviez/n'q'l'm' soudre
SFX xN soudre solvaient/n'q'l'm't's' soudre
SFX xN soudre solus/n'q'j'l'm't' soudre
SFX xN soudre solut/n'q'l'm't's' soudre
SFX xN soudre solûmes/n'q'l't' soudre
SFX xN soudre solûtes/n'q'l'm' soudre
SFX xN soudre solurent/n'q'l'm't's' soudre
SFX xN soudre soudrai/n'q'j'l'm't' soudre
SFX xN soudre soudras/n'q'l'm't' soudre
SFX xN soudre soudra/n'q'l'm't's' soudre
SFX xN soudre soudrons/n'q'l't' soudre
SFX xN soudre soudrez/n'q'l'm' soudre
SFX xN soudre soudront/n'q'l'm't's' soudre
SFX xN soudre soudrais/n'q'j'l'm't' soudre
SFX xN soudre soudrait/n'q'l'm't's' soudre
SFX xN soudre soudrions/n'q'l't' soudre
SFX xN soudre soudriez/n'q'l'm' soudre
SFX xN soudre soudraient/n'q'l'm't's' soudre
SFX xN soudre solve/n'q'j'l'm't's' soudre
SFX xN soudre solves/n'l'm't' soudre
SFX xN soudre solusse/n'q'j'l'm't' soudre
SFX xN soudre solusses/n'q'l'm't' soudre
SFX xN soudre solût/n'q'l'm't's' soudre
SFX xN soudre solussions/n'q'l't' soudre
SFX xN soudre solussiez/n'q'l'm' soudre
SFX xN soudre solussent/n'q'l'm't's' soudre
SFX xN soudre sous/n'l'm' soudre
SFX xN soudre solvons/n'l' soudre
SFX xN soudre solvez/n'l'm' soudre
SFX xO N 42
SFX xO oudre ousant coudre
SFX xO oudre ousu coudre
SFX xO oudre ousus coudre
SFX xO oudre ousue coudre
SFX xO oudre ousues coudre
SFX xO oudre ouds coudre
SFX xO oudre oud coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xO oudre ousent coudre
SFX xO oudre ousais coudre
SFX xO oudre ousait coudre
SFX xO oudre ousions coudre
SFX xO oudre ousiez coudre
SFX xO oudre ousaient coudre
SFX xO oudre ousis coudre
SFX xO oudre ousit coudre
SFX xO oudre ousîmes coudre
SFX xO oudre ousîtes coudre
SFX xO oudre ousirent coudre
SFX xO oudre oudrai coudre
SFX xO oudre oudras coudre
SFX xO oudre oudra coudre
SFX xO oudre oudrons coudre
SFX xO oudre oudrez coudre
SFX xO oudre oudront coudre
SFX xO oudre oudrais coudre
SFX xO oudre oudrait coudre
SFX xO oudre oudrions coudre
SFX xO oudre oudriez coudre
SFX xO oudre oudraient coudre
SFX xO oudre ouse coudre
SFX xO oudre ouses coudre
SFX xO oudre ousisse coudre
SFX xO oudre ousisses coudre
SFX xO oudre ousît coudre
SFX xO oudre ousissions coudre
SFX xO oudre ousissiez coudre
SFX xO oudre ousissent coudre
SFX xO oudre ouds coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xP Y 43
SFX xP oudre oudre/n'q'd'l' moudre
SFX xP oudre oulant/n'q'l' moudre
SFX xP oudre oulu/L'D'Q' moudre
SFX xP oudre oulus/D'Q' moudre
SFX xP oudre oulue/L'D'Q' moudre
SFX xP oudre oulues/D'Q' moudre
SFX xP oudre ouds/n'q'l' moudre
SFX xP oudre oud/n'q'l' moudre
SFX xP oudre oulons/n'q'l' moudre
SFX xP oudre oulez/n'q'l' moudre
SFX xP oudre oulent/n'q'l' moudre
SFX xP oudre oulais/n'q'l' moudre
SFX xP oudre oulait/n'q'l' moudre
SFX xP oudre oulions/n'q'l' moudre
SFX xP oudre ouliez/n'q'l' moudre
SFX xP oudre oulaient/n'q'l' moudre
SFX xP oudre oulus/n'q'l' moudre
SFX xP oudre oulut/n'q'l' moudre
SFX xP oudre oulûmes/n'q'l' moudre
SFX xP oudre oulûtes/n'q'l' moudre
SFX xP oudre oulurent/n'q'l' moudre
SFX xP oudre oudrai/n'q'l' moudre
SFX xP oudre oudras/n'q'l' moudre
SFX xP oudre oudra/n'q'l' moudre
SFX xP oudre oudrons/n'q'l' moudre
SFX xP oudre oudrez/n'q'l' moudre
SFX xP oudre oudront/n'q'l' moudre
SFX xP oudre oudrais/n'q'l' moudre
SFX xP oudre oudrait/n'q'l' moudre
SFX xP oudre oudrions/n'q'l' moudre
SFX xP oudre oudriez/n'q'l' moudre
SFX xP oudre oudraient/n'q'l' moudre
SFX xP oudre oule/n'q'l' moudre
SFX xP oudre oules/n'l' moudre
SFX xP oudre oulusse/n'q'l' moudre
SFX xP oudre oulusses/n'q'l' moudre
SFX xP oudre oulût/n'q'l' moudre
SFX xP oudre oulussions/n'q'l' moudre
SFX xP oudre oulussiez/n'q'l' moudre
SFX xP oudre oulussent/n'q'l' moudre
SFX xP oudre ouds/n'l'm' moudre
SFX xP oudre oulons/n'l' moudre
SFX xP oudre oulez/n'l'm' moudre
SFX xQ N 42
SFX xQ uivre uivant suivre
SFX xQ uivre uivi suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivie suivre
SFX xQ uivre uivies suivre
SFX xQ uivre uis suivre
SFX xQ uivre uit suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xQ uivre uivent suivre
SFX xQ uivre uivais suivre
SFX xQ uivre uivait suivre
SFX xQ uivre uivions suivre
SFX xQ uivre uiviez suivre
SFX xQ uivre uivaient suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivit suivre
SFX xQ uivre uivîmes suivre
SFX xQ uivre uivîtes suivre
SFX xQ uivre uivirent suivre
SFX xQ uivre uivrai suivre
SFX xQ uivre uivras suivre
SFX xQ uivre uivra suivre
SFX xQ uivre uivrons suivre
SFX xQ uivre uivrez suivre
SFX xQ uivre uivront suivre
SFX xQ uivre uivrais suivre
SFX xQ uivre uivrait suivre
SFX xQ uivre uivrions suivre
SFX xQ uivre uivriez suivre
SFX xQ uivre uivraient suivre
SFX xQ uivre uive suivre
SFX xQ uivre uives suivre
SFX xQ uivre uivisse suivre
SFX xQ uivre uivisses suivre
SFX xQ uivre uivît suivre
SFX xQ uivre uivissions suivre
SFX xQ uivre uivissiez suivre
SFX xQ uivre uivissent suivre
SFX xQ uivre uis suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xR Y 16
SFX xR suivre suivre/s' suivre
SFX xR suivre suivant/s' suivre
SFX xR suivre suivi suivre
SFX xR suivre suit/s' suivre
SFX xR suivre suivent/s' suivre
SFX xR suivre suivait/s' suivre
SFX xR suivre suivaient/s' suivre
SFX xR suivre suivit/s' suivre
SFX xR suivre suivirent/s' suivre
SFX xR suivre suivra/s' suivre
SFX xR suivre suivront/s' suivre
SFX xR suivre suivrait/s' suivre
SFX xR suivre suivraient/s' suivre
SFX xR suivre suive/s' suivre
SFX xR suivre suivît/s' suivre
SFX xR suivre suivissent/s' suivre
SFX xS N 38
SFX xS ivre ivant vivre
SFX xS ivre is vivre
SFX xS ivre it vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX xS ivre ivent vivre
SFX xS ivre ivais vivre
SFX xS ivre ivait vivre
SFX xS ivre ivions vivre
SFX xS ivre iviez vivre
SFX xS ivre ivaient vivre
SFX xS ivre écus vivre
SFX xS ivre écut vivre
SFX xS ivre écûmes vivre
SFX xS ivre écûtes vivre
SFX xS ivre écurent vivre
SFX xS ivre ivrai vivre
SFX xS ivre ivras vivre
SFX xS ivre ivra vivre
SFX xS ivre ivrons vivre
SFX xS ivre ivrez vivre
SFX xS ivre ivront vivre
SFX xS ivre ivrais vivre
SFX xS ivre ivrait vivre
SFX xS ivre ivrions vivre
SFX xS ivre ivriez vivre
SFX xS ivre ivraient vivre
SFX xS ivre ive vivre
SFX xS ivre ives vivre
SFX xS ivre écusse vivre
SFX xS ivre écusses vivre
SFX xS ivre écût vivre
SFX xS ivre écussions vivre
SFX xS ivre écussiez vivre
SFX xS ivre écussent vivre
SFX xS ivre is vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX y1 Y 43
SFX y1 crire crire/n'q'd'l'm't's' crire
SFX y1 crire crivant/n'q'l'm't's' crire
SFX y1 crire crit/L'D'Q' crire
SFX y1 crire crits/D'Q' crire
SFX y1 crire crite/L'D'Q' crire
SFX y1 crire crites/D'Q' crire
SFX y1 crire cris/n'q'j'l'm't' crire
SFX y1 crire crit/n'q'l'm't's' crire
SFX y1 crire crivons/n'q'l't' crire
SFX y1 crire crivez/n'q'l'm' crire
SFX y1 crire crivent/n'q'l'm't's' crire
SFX y1 crire crivais/n'q'j'l'm't' crire
SFX y1 crire crivait/n'q'l'm't's' crire
SFX y1 crire crivions/n'q'l't' crire
SFX y1 crire criviez/n'q'l'm' crire
SFX y1 crire crivaient/n'q'l'm't's' crire
SFX y1 crire crivis/n'q'j'l'm't' crire
SFX y1 crire crivit/n'q'l'm't's' crire
SFX y1 crire crivîmes/n'q'l't' crire
SFX y1 crire crivîtes/n'q'l'm' crire
SFX y1 crire crivirent/n'q'l'm't's' crire
SFX y1 crire crirai/n'q'j'l'm't' crire
SFX y1 crire criras/n'q'l'm't' crire
SFX y1 crire crira/n'q'l'm't's' crire
SFX y1 crire crirons/n'q'l't' crire
SFX y1 crire crirez/n'q'l'm' crire
SFX y1 crire criront/n'q'l'm't's' crire
SFX y1 crire crirais/n'q'j'l'm't' crire
SFX y1 crire crirait/n'q'l'm't's' crire
SFX y1 crire cririons/n'q'l't' crire
SFX y1 crire cririez/n'q'l'm' crire
SFX y1 crire criraient/n'q'l'm't's' crire
SFX y1 crire crive/n'q'j'l'm't's' crire
SFX y1 crire crives/n'l'm't' crire
SFX y1 crire crivisse/n'q'j'l'm't' crire
SFX y1 crire crivisses/n'q'l'm't' crire
SFX y1 crire crivît/n'q'l'm't's' crire
SFX y1 crire crivissions/n'q'l't' crire
SFX y1 crire crivissiez/n'q'l'm' crire
SFX y1 crire crivissent/n'q'l'm't's' crire
SFX y1 crire cris/n'l'm't' crire
SFX y1 crire crivons/n'l' crire
SFX y1 crire crivez/n'l'm' crire
SFX yA N 42
SFX yA ire isant lire
SFX yA ire u lire
SFX yA ire us lire
SFX yA ire ue lire
SFX yA ire ues lire
SFX yA ire is lire
SFX yA ire it lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yA ire isent lire
SFX yA ire isais lire
SFX yA ire isait lire
SFX yA ire isions lire
SFX yA ire isiez lire
SFX yA ire isaient lire
SFX yA ire us lire
SFX yA ire ut lire
SFX yA ire ûmes lire
SFX yA ire ûtes lire
SFX yA ire urent lire
SFX yA ire irai lire
SFX yA ire iras lire
SFX yA ire ira lire
SFX yA ire irons lire
SFX yA ire irez lire
SFX yA ire iront lire
SFX yA ire irais lire
SFX yA ire irait lire
SFX yA ire irions lire
SFX yA ire iriez lire
SFX yA ire iraient lire
SFX yA ire ise lire
SFX yA ire ises lire
SFX yA ire usse lire
SFX yA ire usses lire
SFX yA ire ût lire
SFX yA ire ussions lire
SFX yA ire ussiez lire
SFX yA ire ussent lire
SFX yA ire is lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yB Y 43
SFX yB lire lire/n'q'd'l'm't's' lire
SFX yB lire lisant/n'q'l'm't's' lire
SFX yB lire lu/L'D'Q' lire
SFX yB lire lus/D'Q' lire
SFX yB lire lue/L'D'Q' lire
SFX yB lire lues/D'Q' lire
SFX yB lire lis/n'q'j'l'm't' lire
SFX yB lire lit/n'q'l'm't's' lire
SFX yB lire lisons/n'q'l't' lire
SFX yB lire lisez/n'q'l'm' lire
SFX yB lire lisent/n'q'l'm't's' lire
SFX yB lire lisais/n'q'j'l'm't' lire
SFX yB lire lisait/n'q'l'm't's' lire
SFX yB lire lisions/n'q'l't' lire
SFX yB lire lisiez/n'q'l'm' lire
SFX yB lire lisaient/n'q'l'm't's' lire
SFX yB lire lus/n'q'j'l'm't' lire
SFX yB lire lut/n'q'l'm't's' lire
SFX yB lire lûmes/n'q'l't' lire
SFX yB lire lûtes/n'q'l'm' lire
SFX yB lire lurent/n'q'l'm't's' lire
SFX yB lire lirai/n'q'j'l'm't' lire
SFX yB lire liras/n'q'l'm't' lire
SFX yB lire lira/n'q'l'm't's' lire
SFX yB lire lirons/n'q'l't' lire
SFX yB lire lirez/n'q'l'm' lire
SFX yB lire liront/n'q'l'm't's' lire
SFX yB lire lirais/n'q'j'l'm't' lire
SFX yB lire lirait/n'q'l'm't's' lire
SFX yB lire lirions/n'q'l't' lire
SFX yB lire liriez/n'q'l'm' lire
SFX yB lire liraient/n'q'l'm't's' lire
SFX yB lire lise/n'q'j'l'm't's' lire
SFX yB lire lises/n'l'm't' lire
SFX yB lire lusse/n'q'j'l'm't' lire
SFX yB lire lusses/n'q'l'm't' lire
SFX yB lire lût/n'q'l'm't's' lire
SFX yB lire lussions/n'q'l't' lire
SFX yB lire lussiez/n'q'l'm' lire
SFX yB lire lussent/n'q'l'm't's' lire
SFX yB lire lis/n'l'm' lire
SFX yB lire lisons/n'l' lire
SFX yB lire lisez/n'l'm' lire
SFX yC N 40
SFX yC ire isant dire
SFX yC ire it dire
SFX yC ire its dire
SFX yC ire ite dire
SFX yC ire ites dire
SFX yC ire is dire
SFX yC ire it dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yC ire isent dire
SFX yC ire isais dire
SFX yC ire isait dire
SFX yC ire isions dire
SFX yC ire isiez dire
SFX yC ire isaient dire
SFX yC ire îmes dire
SFX yC ire îtes dire
SFX yC ire irent dire
SFX yC ire irai dire
SFX yC ire iras dire
SFX yC ire ira dire
SFX yC ire irons dire
SFX yC ire irez dire
SFX yC ire iront dire
SFX yC ire irais dire
SFX yC ire irait dire
SFX yC ire irions dire
SFX yC ire iriez dire
SFX yC ire iraient dire
SFX yC ire ise dire
SFX yC ire ises dire
SFX yC ire isse dire
SFX yC ire isses dire
SFX yC ire ît dire
SFX yC ire issions dire
SFX yC ire issiez dire
SFX yC ire issent dire
SFX yC ire is dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yD Y 41
SFX yD dire dire/n'q'd'l'm't's' dire
SFX yD dire disant/n'q'l'm't's' dire
SFX yD dire dit/L'D'Q' dire
SFX yD dire dits/D'Q' dire
SFX yD dire dite/L'D'Q' dire
SFX yD dire dites/D'Q' dire
SFX yD dire dis/n'q'j'l'm't' dire
SFX yD dire dit/n'q'l'm't's' dire
SFX yD dire disons/n'q'l't' dire
SFX yD dire disez/n'q'l'm' dire
SFX yD dire disent/n'q'l'm't's' dire
SFX yD dire disais/n'q'j'l'm't' dire
SFX yD dire disait/n'q'l'm't's' dire
SFX yD dire disions/n'q'l't' dire
SFX yD dire disiez/n'q'l'm' dire
SFX yD dire disaient/n'q'l'm't's' dire
SFX yD dire dîmes/n'q'l't' dire
SFX yD dire dîtes/n'q'l'm' dire
SFX yD dire dirent/n'q'l'm't's' dire
SFX yD dire dirai/n'q'j'l'm't' dire
SFX yD dire diras/n'q'l'm't' dire
SFX yD dire dira/n'q'l'm't's' dire
SFX yD dire dirons/n'q'l't' dire
SFX yD dire direz/n'q'l'm' dire
SFX yD dire diront/n'q'l'm't's' dire
SFX yD dire dirais/n'q'j'l'm't' dire
SFX yD dire dirait/n'q'l'm't's' dire
SFX yD dire dirions/n'q'l't' dire
SFX yD dire diriez/n'q'l'm' dire
SFX yD dire diraient/n'q'l'm't's' dire
SFX yD dire dise/n'q'j'l'm't's' dire
SFX yD dire dises/n'l'm't' dire
SFX yD dire disse/n'q'j'l'm't' dire
SFX yD dire disses/n'q'l'm't' dire
SFX yD dire dît/n'q'l'm't's' dire
SFX yD dire dissions/n'q'l't' dire
SFX yD dire dissiez/n'q'l'm' dire
SFX yD dire dissent/n'q'l'm't's' dire
SFX yD dire dis/n'l'm't' dire
SFX yD dire disons/n'l' dire
SFX yD dire disez/n'l'm' dire
SFX yE N 37
SFX yE édire édisant édire
SFX yE édire édit édire
SFX yE édire édis édire
SFX yE édire édit édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yE édire édisent édire
SFX yE édire édisais édire
SFX yE édire édisait édire
SFX yE édire édisions édire
SFX yE édire édisiez édire
SFX yE édire édisaient édire
SFX yE édire édîmes édire
SFX yE édire édîtes édire
SFX yE édire édirent édire
SFX yE édire édirai édire
SFX yE édire édiras édire
SFX yE édire édira édire
SFX yE édire édirons édire
SFX yE édire édirez édire
SFX yE édire édiront édire
SFX yE édire édirais édire
SFX yE édire édirait édire
SFX yE édire édirions édire
SFX yE édire édiriez édire
SFX yE édire édiraient édire
SFX yE édire édise édire
SFX yE édire édises édire
SFX yE édire édisse édire
SFX yE édire édisses édire
SFX yE édire édît édire
SFX yE édire édissions édire
SFX yE édire édissiez édire
SFX yE édire édissent édire
SFX yE édire édis édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yF N 36
SFX yF audire audissant udire
SFX yF audire audit udire
SFX yF audire audits udire
SFX yF audire audite udire
SFX yF audire audites udire
SFX yF audire audis udire
SFX yF audire audit udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yF audire audissent udire
SFX yF audire audissais udire
SFX yF audire audissait udire
SFX yF audire audissions udire
SFX yF audire audissiez udire
SFX yF audire audissaient udire
SFX yF audire audîmes udire
SFX yF audire audîtes udire
SFX yF audire audirent udire
SFX yF audire audirai udire
SFX yF audire audiras udire
SFX yF audire audira udire
SFX yF audire audirons udire
SFX yF audire audirez udire
SFX yF audire audiront udire
SFX yF audire audirais udire
SFX yF audire audirait udire
SFX yF audire audirions udire
SFX yF audire audiriez udire
SFX yF audire audiraient udire
SFX yF audire audisse udire
SFX yF audire audisses udire
SFX yF audire audisse udire
SFX yF audire audît udire
SFX yF audire audis udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yG Y 38
SFX yG dire dire/m't's' dire
SFX yG dire disant/m't's' dire
SFX yG dire dit dire
SFX yG dire dis/m't' dire
SFX yG dire dit/s' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yG dire disent/s' dire
SFX yG dire disais/m't' dire
SFX yG dire disait/s' dire
SFX yG dire disions dire
SFX yG dire disiez dire
SFX yG dire disaient/s' dire
SFX yG dire dîmes dire
SFX yG dire dîtes dire
SFX yG dire dirent/s' dire
SFX yG dire dirai/m' dire
SFX yG dire diras/t' dire
SFX yG dire dira/s' dire
SFX yG dire dirons dire
SFX yG dire direz dire
SFX yG dire diront/s' dire
SFX yG dire dirais/m't' dire
SFX yG dire dirait/s' dire
SFX yG dire dirions dire
SFX yG dire diriez dire
SFX yG dire diraient/s' dire
SFX yG dire dise/m's' dire
SFX yG dire dises/t' dire
SFX yG dire disse/m' dire
SFX yG dire disses/t' dire
SFX yG dire dît/s' dire
SFX yG dire dissions dire
SFX yG dire dissiez dire
SFX yG dire dissent/s' dire
SFX yG dire dis/t' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yJ N 7
SFX yJ ruire ruissant uire
SFX yJ ruire rui uire
SFX yJ ruire ruit uire
SFX yJ ruire ruissent uire
SFX yJ ruire ruissait uire
SFX yJ ruire ruissaient uire
SFX yJ ruire ruisse uire
SFX yK N 4
SFX yK bduire bduit uire
SFX yK bduire bduits uire
SFX yK bduire bduite uire
SFX yK bduire bduites uire
SFX yL Y 43
SFX yL uire uire/n'q'd'l'm't's' uire
SFX yL uire uisant/n'q'l'm't's' uire
SFX yL uire uit/L'D'Q' uire
SFX yL uire uits/D'Q' uire
SFX yL uire uite/L'D'Q' uire
SFX yL uire uites/D'Q' uire
SFX yL uire uis/n'q'j'l'm't' uire
SFX yL uire uit/n'q'l'm't's' uire
SFX yL uire uisons/n'q'l't' uire
SFX yL uire uisez/n'q'l'm' uire
SFX yL uire uisent/n'q'l'm't's' uire
SFX yL uire uisais/n'q'j'l'm't' uire
SFX yL uire uisait/n'q'l'm't's' uire
SFX yL uire uisions/n'q'l't' uire
SFX yL uire uisiez/n'q'l'm' uire
SFX yL uire uisaient/n'q'l'm't's' uire
SFX yL uire uisis/n'q'j'l'm't' uire
SFX yL uire uisit/n'q'l'm't's' uire
SFX yL uire uisîmes/n'q'l't' uire
SFX yL uire uisîtes/n'q'l'm' uire
SFX yL uire uisirent/n'q'l'm't's' uire
SFX yL uire uirai/n'q'j'l't' uire
SFX yL uire uiras/n'q'l'm' uire
SFX yL uire uira/n'q'l'm't's' uire
SFX yL uire uirons/n'q'l't' uire
SFX yL uire uirez/n'q'l'm' uire
SFX yL uire uiront/n'q'l'm't's' uire
SFX yL uire uirais/n'q'j'l'm't' uire
SFX yL uire uirait/n'q'l'm't's' uire
SFX yL uire uirions/n'q'l't' uire
SFX yL uire uiriez/n'q'l'm' uire
SFX yL uire uiraient/n'q'l'm't's' uire
SFX yL uire uise/n'q'j'l'm't's' uire
SFX yL uire uises/n'l'm' uire
SFX yL uire uisisse/n'q'j'l't' uire
SFX yL uire uisisses/n'q'l'm' uire
SFX yL uire uisît/n'q'l'm't's' uire
SFX yL uire uisissions/n'q'l't' uire
SFX yL uire uisissiez/n'q'l'm' uire
SFX yL uire uisissent/n'q'l'm't's' uire
SFX yL uire uis/n'l'm' uire
SFX yL uire uisons/n'l' uire
SFX yL uire uisez/n'l'm' uire
SFX yM Y 43
SFX yM uire uire/n'q'd'l'm't's' uire
SFX yM uire uisant/n'q'l'm't's' uire
SFX yM uire uit/L'D'Q' uire
SFX yM uire uits/D'Q' uire
SFX yM uire uite/L'D'Q' uire
SFX yM uire uites/D'Q' uire
SFX yM uire uis/n'q'j'l'm't' uire
SFX yM uire uit/n'q'l'm't's' uire
SFX yM uire uisons/n'q'l't' uire
SFX yM uire uisez/n'q'l'm' uire
SFX yM uire uisent/n'q'l'm't's' uire
SFX yM uire uisais/n'q'j'l'm't' uire
SFX yM uire uisait/n'q'l'm't's' uire
SFX yM uire uisions/n'q'l't' uire
SFX yM uire uisiez/n'q'l'm' uire
SFX yM uire uisaient/n'q'l'm't's' uire
SFX yM uire uisis/n'q'j'l'm't' uire
SFX yM uire uisit/n'q'l'm't's' uire
SFX yM uire uisîmes/n'q'l't' uire
SFX yM uire uisîtes/n'q'l'm' uire
SFX yM uire uisirent/n'q'l'm't's' uire
SFX yM uire uirai/n'q'j'l'm't' uire
SFX yM uire uiras/n'q'l'm't' uire
SFX yM uire uira/n'q'l'm't's' uire
SFX yM uire uirons/n'q'l't' uire
SFX yM uire uirez/n'q'l'm' uire
SFX yM uire uiront/n'q'l'm't's' uire
SFX yM uire uirais/n'q'j'l'm't' uire
SFX yM uire uirait/n'q'l'm't's' uire
SFX yM uire uirions/n'q'l't' uire
SFX yM uire uiriez/n'q'l'm' uire
SFX yM uire uiraient/n'q'l'm't's' uire
SFX yM uire uise/n'q'j'l'm't's' uire
SFX yM uire uises/n'l'm't' uire
SFX yM uire uisisse/n'q'j'l'm't' uire
SFX yM uire uisisses/n'q'l'm't' uire
SFX yM uire uisît/n'q'l'm't's' uire
SFX yM uire uisissions/n'q'l't' uire
SFX yM uire uisissiez/n'q'l'm' uire
SFX yM uire uisissent/n'q'l'm't's' uire
SFX yM uire uis/n'l'm't' uire
SFX yM uire uisons/n'l' uire
SFX yM uire uisez/n'l'm' uire
SFX yN Y 33
SFX yN truire truire/s' uire
SFX yN truire truisant/s' uire
SFX yN truire truit uire
SFX yN truire truits uire
SFX yN truire truite uire
SFX yN truire truites uire
SFX yN truire truit/s' uire
SFX yN truire truisons uire
SFX yN truire truisez uire
SFX yN truire truisent/s' uire
SFX yN truire truisait/s' uire
SFX yN truire truisions uire
SFX yN truire truisiez uire
SFX yN truire truisaient/s' uire
SFX yN truire truisit/s' uire
SFX yN truire truisîmes uire
SFX yN truire truisîtes uire
SFX yN truire truisirent/s' uire
SFX yN truire truira/s' uire
SFX yN truire truirons uire
SFX yN truire truirez uire
SFX yN truire truiront/s' uire
SFX yN truire truirait/s' uire
SFX yN truire truirions uire
SFX yN truire truiriez uire
SFX yN truire truiraient/s' uire
SFX yN truire truise/s' uire
SFX yN truire truisît/s' uire
SFX yN truire truisissions uire
SFX yN truire truisissiez uire
SFX yN truire truisissent/s' uire
SFX yN truire truisons-nous uire
SFX yN truire truisez-vous uire
SFX yO Y 43
SFX yO détruire détruire/m't's' détruire
SFX yO détruire détruisant/m't's' détruire
SFX yO détruire détruit détruire
SFX yO détruire détruits détruire
SFX yO détruire détruite détruire
SFX yO détruire détruites détruire
SFX yO détruire détruis/m't' détruire
SFX yO détruire détruit/s' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yO détruire détruisent/s' détruire
SFX yO détruire détruisais/m't' détruire
SFX yO détruire détruisait/s' détruire
SFX yO détruire détruisions détruire
SFX yO détruire détruisiez détruire
SFX yO détruire détruisaient/s' détruire
SFX yO détruire détruisis/m't' détruire
SFX yO détruire détruisit/s' détruire
SFX yO détruire détruisîmes détruire
SFX yO détruire détruisîtes détruire
SFX yO détruire détruisirent/s' détruire
SFX yO détruire détruirai/m' détruire
SFX yO détruire détruiras/t' détruire
SFX yO détruire détruira/s' détruire
SFX yO détruire détruirons détruire
SFX yO détruire détruirez détruire
SFX yO détruire détruiront/s' détruire
SFX yO détruire détruirais/m't' détruire
SFX yO détruire détruirait/s' détruire
SFX yO détruire détruirions détruire
SFX yO détruire détruiriez détruire
SFX yO détruire détruiraient/s' détruire
SFX yO détruire détruise/m's' détruire
SFX yO détruire détruises/t' détruire
SFX yO détruire détruisisse/m' détruire
SFX yO détruire détruisisses/t' détruire
SFX yO détruire détruisît/s' détruire
SFX yO détruire détruisissions détruire
SFX yO détruire détruisissiez détruire
SFX yO détruire détruisissent/s' détruire
SFX yO détruire détruis/t' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yU N 39
SFX yU uire uisant uire
SFX yU uire ui uire
SFX yU uire uis uire
SFX yU uire uit uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yU uire uisent uire
SFX yU uire uisais uire
SFX yU uire uisait uire
SFX yU uire uisions uire
SFX yU uire uisiez uire
SFX yU uire uisaient uire
SFX yU uire uisis uire
SFX yU uire uisit uire
SFX yU uire uisîmes uire
SFX yU uire uisîtes uire
SFX yU uire uisirent uire
SFX yU uire uirai uire
SFX yU uire uiras uire
SFX yU uire uira uire
SFX yU uire uirons uire
SFX yU uire uirez uire
SFX yU uire uiront uire
SFX yU uire uirais uire
SFX yU uire uirait uire
SFX yU uire uirions uire
SFX yU uire uiriez uire
SFX yU uire uiraient uire
SFX yU uire uise uire
SFX yU uire uises uire
SFX yU uire uisisse uire
SFX yU uire uisisses uire
SFX yU uire uisît uire
SFX yU uire uisissions uire
SFX yU uire uisissiez uire
SFX yU uire uisissent uire
SFX yU uire uis uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yV N 44
SFX yV ire isant ire
SFX yV ire it nfire
SFX yV ire its nfire
SFX yV ire ite nfire
SFX yV ire ites nfire
SFX yV ire is cire
SFX yV ire ise cire
SFX yV ire ises cire
SFX yV ire i ffire
SFX yV ire is ire
SFX yV ire it ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yV ire isent ire
SFX yV ire isais ire
SFX yV ire isait ire
SFX yV ire isions ire
SFX yV ire isiez ire
SFX yV ire isaient ire
SFX yV ire îmes ire
SFX yV ire îtes ire
SFX yV ire irent ire
SFX yV ire irai ire
SFX yV ire iras ire
SFX yV ire ira ire
SFX yV ire irons ire
SFX yV ire irez ire
SFX yV ire iront ire
SFX yV ire irais ire
SFX yV ire irait ire
SFX yV ire irions ire
SFX yV ire iriez ire
SFX yV ire iraient ire
SFX yV ire ise ire
SFX yV ire ises ire
SFX yV ire isse ire
SFX yV ire isses ire
SFX yV ire ît ire
SFX yV ire issions ire
SFX yV ire issiez ire
SFX yV ire issent ire
SFX yV ire is ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yW N 37
SFX yW ire iant rire
SFX yW ire i rire
SFX yW ire is rire
SFX yW ire it rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yW ire ient rire
SFX yW ire iais rire
SFX yW ire iait rire
SFX yW ire iions rire
SFX yW ire iiez rire
SFX yW ire iaient rire
SFX yW ire îmes rire
SFX yW ire îtes rire
SFX yW ire irent rire
SFX yW ire irai rire
SFX yW ire iras rire
SFX yW ire ira rire
SFX yW ire irons rire
SFX yW ire irez rire
SFX yW ire iront rire
SFX yW ire irais rire
SFX yW ire irait rire
SFX yW ire irions rire
SFX yW ire iriez rire
SFX yW ire iraient rire
SFX yW ire ie rire
SFX yW ire ies rire
SFX yW ire isse rire
SFX yW ire isses rire
SFX yW ire ît rire
SFX yW ire issions rire
SFX yW ire issiez rire
SFX yW ire issent rire
SFX yW ire is rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yX Y 30
SFX yX nuire nuire/s' nuire
SFX yX nuire nuisant/s' nuire
SFX yX nuire nui nuire
SFX yX nuire nuit/s' nuire
SFX yX nuire nuisons nuire
SFX yX nuire nuisez nuire
SFX yX nuire nuisent/s' nuire
SFX yX nuire nuisait/s' nuire
SFX yX nuire nuisions nuire
SFX yX nuire nuisiez nuire
SFX yX nuire nuisaient/s' nuire
SFX yX nuire nuisit/s' nuire
SFX yX nuire nuisîmes nuire
SFX yX nuire nuisîtes nuire
SFX yX nuire nuisirent/s' nuire
SFX yX nuire nuira/s' nuire
SFX yX nuire nuirons nuire
SFX yX nuire nuirez nuire
SFX yX nuire nuiront/s' nuire
SFX yX nuire nuirait/s' nuire
SFX yX nuire nuirions nuire
SFX yX nuire nuiriez nuire
SFX yX nuire nuiraient/s' nuire
SFX yX nuire nuise/s' nuire
SFX yX nuire nuisît/s' nuire
SFX yX nuire nuisissions nuire
SFX yX nuire nuisissiez nuire
SFX yX nuire nuisissent/s' nuire
SFX yX nuire nuisons-nous nuire
SFX yX nuire nuisez-vous nuire
SFX yY Y 4
SFX yY ccire ccire/n'q'd'l'm't's' occire
SFX yY ccire ccis/L'D'Q' occire
SFX yY ccire ccise/L'D'Q' occire
SFX yY ccire ccises/D'Q' occire
SFX yZ N 13
SFX yZ rire risant rire
SFX yZ rire rit rire
SFX yZ rire rits rire
SFX yZ rire rite rire
SFX yZ rire rites rire
SFX yZ rire ris rire
SFX yZ rire rit rire
SFX yZ rire rirai rire
SFX yZ rire riras rire
SFX yZ rire rira rire
SFX yZ rire rirais rire
SFX yZ rire rirait rire
SFX yZ rire ris rire
SFX q+ Y 32
SFX q+ enir enu/L'D'Q' enir
SFX q+ enir enus/D'Q' enir
SFX q+ enir enue/L'D'Q' enir
SFX q+ enir enues/D'Q' enir
SFX q+ tir ti/L'D'Q' tir
SFX q+ tir tis/D'Q' tir
SFX q+ tir tie/L'D'Q' tir
SFX q+ tir ties/D'Q' tir
SFX q+ courir couru/L'D'Q' courir
SFX q+ courir courus/D'Q' courir
SFX q+ courir courue/L'D'Q' courir
SFX q+ courir courues/D'Q' courir
SFX q+ ivre écu vivre
SFX q+ ivre écus vivre
SFX q+ ivre écue vivre
SFX q+ ivre écues vivre
SFX q+ aire u aire
SFX q+ aire us aire
SFX q+ aire ue aire
SFX q+ aire ues aire
SFX q+ dre du dre
SFX q+ dre dus dre
SFX q+ dre due dre
SFX q+ dre dues dre
SFX q+ valoir valu .valoir
SFX q+ valoir valus .valoir
SFX q+ valoir value .valoir
SFX q+ valoir values .valoir
SFX q+ aître u/L'D'Q' aître
SFX q+ aître us/D'Q' aître
SFX q+ aître ue/L'D'Q' aître
SFX q+ aître ues/D'Q' aître
SFX q. Y 8
SFX q. enir enu/q' enir
SFX q. tir ti/q' tir
SFX q. courir couru/q' courir
SFX q. ivre écu vivre
SFX q. aire u aire
SFX q. dre du dre
SFX q. valoir valu/q' .valoir
SFX q. aître u/q' aître
|
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic/fr-FR-classic.dic version [8624e8d9fb].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-modern/fr-FR-modern.aff version [31703ae008].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 |
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “MODERNE” v6.0.3
# par Olivier R. -- licence MPL 2.0
# Généré le 25-04-2017 à 13:20
# Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/
SET UTF-8
WORDCHARS -’'1234567890.
TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ
MAP 25
MAP aàâäAÀÂÄ
MAP eéèêëEÉÈÊË
MAP iîïyIÎÏY
MAP oôöOÔÖ
MAP uùûüUÙÛÜ
MAP cçCÇ
MAP bB
MAP dD
MAP fF
MAP gG
MAP hH
MAP jJ
MAP kK
MAP lL
MAP mM
MAP nN
MAP pP
MAP qQ
MAP rR
MAP sS
MAP tT
MAP vV
MAP wW
MAP xX
MAP zZ
REP 82
REP ^Ca$ Ça
REP ^l l'
REP ^d d'
REP ^n n'
REP ^s s'
REP ^j j'
REP ^m m'
REP ^t t'
REP ^c c'
REP f ph
REP ph f
REP c qu
REP qu c
REP k qu
REP qu k
REP x ct
REP ct x
REP bb b
REP b bb
REP cc c
REP c cc
REP ff f
REP f ff
REP ll l
REP l ll
REP mm m
REP m mm
REP nn n
REP n nn
REP pp p
REP p pp
REP rr r
REP r rr
REP ss s
REP s ss
REP ss c
REP c ss
REP ss ç
REP ç ss
REP tt t
REP t tt
REP œ oe
REP oe œ
REP æ ae
REP ae æ
REP ai é
REP é ai
REP ai è
REP è ai
REP ai ê
REP ê ai
REP ei é
REP é ei
REP ei è
REP è ei
REP ei ê
REP ê ei
REP o au
REP au o
REP o eau
REP eau o
REP ett èt
REP èt ett
REP ell èl
REP èl ell
REP t th
REP th t
REP ième$ e
REP ème$ e
REP è$ e
REP mn$ min
REP ogue$ ogiste
REP ogiste$ ogue
REP disez$ dites
REP fesez$ faites
REP faisez$ faites
REP puit puits
REP sanctionnable punissable
REP questionnable discutable
REP antitartre détartrant
REP email courriel
REP construirent construisirent
KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj
ICONV 41
ICONV ’ '
ICONV ʼ '
ICONV ffi ffi
ICONV ffl ffl
ICONV ff ff
ICONV ſt ft
ICONV fi fi
ICONV fl fl
ICONV st st
ICONV à à
ICONV â â
ICONV ä ä
ICONV é é
ICONV è è
ICONV ê ê
ICONV ë ë
ICONV î î
ICONV ï ï
ICONV ô ô
ICONV ö ö
ICONV ù ù
ICONV û û
ICONV ü ü
ICONV ÿ ÿ
ICONV ç ç
ICONV À À
ICONV Â Â
ICONV Ä Ä
ICONV É É
ICONV È È
ICONV Ê Ê
ICONV Ë Ë
ICONV Î Î
ICONV Ï Ï
ICONV Ô Ô
ICONV Ö Ö
ICONV Ù Ù
ICONV Û Û
ICONV Ü Ü
ICONV Ÿ Ÿ
ICONV Ç Ç
OCONV 1
OCONV ' ’
FLAG long
FULLSTRIP
NEEDAFFIX ()
FORBIDDENWORD {}
CIRCUMFIX **
KEEPCASE ||
NOSUGGEST --
BREAK 7
BREAK -
BREAK .
BREAK ·
BREAK ^'
BREAK ^‘
BREAK '$
BREAK ’$
PFX L' Y 34
PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a l'A a
PFX L' à l'À à
PFX L' â l'Â â
PFX L' e l'E e
PFX L' é l'É é
PFX L' è l'È è
PFX L' ê l'Ê ê
PFX L' i l'I i
PFX L' î l'Î î
PFX L' o l'O o
PFX L' ô l'Ô ô
PFX L' u l'U u
PFX L' y l'Y y
PFX L' h l'H h
PFX L' œ l'Œ œ
PFX L' æ l'Æ æ
PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX L' a L'A a
PFX L' à L'À à
PFX L' â L'Â â
PFX L' e L'E e
PFX L' é L'É é
PFX L' è L'È è
PFX L' ê L'Ê ê
PFX L' i L'I i
PFX L' î L'Î î
PFX L' o L'O o
PFX L' ô L'Ô ô
PFX L' u L'U u
PFX L' y L'Y y
PFX L' h L'H h
PFX L' œ L'Œ œ
PFX L' æ L'Æ æ
PFX D' Y 34
PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a d'A a
PFX D' à d'À à
PFX D' â d'Â â
PFX D' e d'E e
PFX D' é d'É é
PFX D' è d'È è
PFX D' ê d'Ê ê
PFX D' i d'I i
PFX D' î d'Î î
PFX D' o d'O o
PFX D' ô d'Ô ô
PFX D' u d'U u
PFX D' y d'Y y
PFX D' h d'H h
PFX D' œ d'Œ œ
PFX D' æ d'Æ æ
PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX D' a D'A a
PFX D' à D'À à
PFX D' â D'Â â
PFX D' e D'E e
PFX D' é D'É é
PFX D' è D'È è
PFX D' ê D'Ê ê
PFX D' i D'I i
PFX D' î D'Î î
PFX D' o D'O o
PFX D' ô D'Ô ô
PFX D' u D'U u
PFX D' y D'Y y
PFX D' h D'H h
PFX D' œ D'Œ œ
PFX D' æ D'Æ æ
PFX Q' Y 34
PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a qu'A a
PFX Q' à qu'À à
PFX Q' â qu'Â â
PFX Q' e qu'E e
PFX Q' é qu'É é
PFX Q' è qu'È è
PFX Q' ê qu'Ê ê
PFX Q' i qu'I i
PFX Q' î qu'Î î
PFX Q' o qu'O o
PFX Q' ô qu'Ô ô
PFX Q' u qu'U u
PFX Q' y qu'Y y
PFX Q' h qu'H h
PFX Q' œ qu'Œ œ
PFX Q' æ qu'Æ æ
PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q' a Qu'A a
PFX Q' à Qu'À à
PFX Q' â Qu'Â â
PFX Q' e Qu'E e
PFX Q' é Qu'É é
PFX Q' è Qu'È è
PFX Q' ê Qu'Ê ê
PFX Q' i Qu'I i
PFX Q' î Qu'Î î
PFX Q' o Qu'O o
PFX Q' ô Qu'Ô ô
PFX Q' u Qu'U u
PFX Q' y Qu'Y y
PFX Q' h Qu'H h
PFX Q' œ Qu'Œ œ
PFX Q' æ Qu'Æ æ
PFX Q* Y 6
PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ]
PFX Qj Y 1
PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ]
PFX Si Y 1
PFX Si 0 s' .
SFX S. Y 1
SFX S. 0 s [^sxz]
SFX S= Y 1
SFX S= 0 s [^sxz]
SFX X. Y 3
SFX X. 0 x [aeoœ]u
SFX X. l ux al
SFX X. il ux ail
SFX A. Y 1
SFX A. 0 s [^sxz]
SFX I. Y 1
SFX I. 0 s [^sxz]
SFX F. Y 78
SFX F. 0 s [eë]
SFX F. e 0 [éiï]e
SFX F. e s [éiï]e
SFX F. rice eur [dt]rice
SFX F. rice eurs [dt]rice
SFX F. de d de
SFX F. de ds de
SFX F. fe f fe
SFX F. fe fs fe
SFX F. anche anc anche
SFX F. anche ancs anche
SFX F. èche ec èche
SFX F. èche ecs èche
SFX F. aiche ais aiche
SFX F. aîche ais aîche
SFX F. khe kh khe
SFX F. khe khs khe
SFX F. he h [ut]he
SFX F. he hs [ut]he
SFX F. ke k [^è]ke
SFX F. ke ks [^è]ke
SFX F. èke ek èke
SFX F. èke eks èke
SFX F. le l [aiouûh]le
SFX F. le ls [aiouûh]le
SFX F. lle l [eiu]lle
SFX F. lle ls [eiu]lle
SFX F. olle ou olle
SFX F. olle ous olle
SFX F. olle ol olle
SFX F. olle ols olle
SFX F. ne n [aiouï]ne
SFX F. ne ns [aiouï]ne
SFX F. nne n [aeo]nne
SFX F. nne ns [aeo]nne
SFX F. ène en ène
SFX F. ène ens ène
SFX F. igne in igne
SFX F. igne ins igne
SFX F. re r [aiouûy]re
SFX F. re rs [aiouûy]re
SFX F. ère er ère
SFX F. ère ers ère
SFX F. se s [^us]se
SFX F. esse e [^eo].esse
SFX F. esse es [^eo].esse
SFX F. rofesse rofès rofesse
SFX F. eresse eur eresse
SFX F. eresse eurs eresse
SFX F. oresse eur oresse
SFX F. oresse eurs oresse
SFX F. sse s [^e]sse
SFX F. use us [^eo]use
SFX F. euse eur euse
SFX F. euse eurs euse
SFX F. te t [^èt]te
SFX F. te ts [^èt]te
SFX F. tte t tte
SFX F. tte ts tte
SFX F. ète et ète
SFX F. ète ets ète
SFX F. ue u [^gq]ue
SFX F. ue us [^gq]ue
SFX F. gue g gue
SFX F. gue gs gue
SFX F. cque c cque
SFX F. cque cs cque
SFX F. que c [^c]que
SFX F. que cs [^c]que
SFX F. ève ef ève
SFX F. ève efs ève
SFX F. ve f [iïu]ve
SFX F. ve fs [iïu]ve
SFX F. uë u uë
SFX F. uë us uë
SFX F. üe u üe
SFX F. üe us üe
SFX F. ze z ze
SFX W. N 15
SFX W. e es e
SFX W. ce x ce
SFX W. use ux [eo]use
SFX W. ausse aux ausse
SFX W. ousse oux ousse
SFX W. ale al ale
SFX W. ale aux ale
SFX W. elle eau elle
SFX W. elle eaux elle
SFX W. elle el [bv]elle
SFX W. elle els [bv]elle
SFX W. ieille ieux ieille
SFX W. ieille ieil ieille
SFX W. ofolle oufou ofolle
SFX W. ofolle oufous ofolle
SFX S* Y 2
SFX S* 0 0/D'L'Q' [^sxz]
SFX S* 0 s/D'Q' [^sxz]
SFX X* Y 4
SFX X* 0 0/D'L'Q' [ul]
SFX X* 0 x/D'Q' [aeoœ]u
SFX X* l ux/D'Q' al
SFX X* il ux/D'Q' ail
SFX A* Y 12
SFX A* an an/D'L'Q' an
SFX A* an ans/D'Q' an
SFX A* f f/D'L'Q' f
SFX A* f fs/D'Q' f
SFX A* h h/D'L'Q' h
SFX A* h hs/D'Q' h
SFX A* s s/D'L'Q' s
SFX A* x x/D'L'Q' x
SFX A* y y/D'L'Q' y
SFX A* y ys/D'Q' y
SFX A* zz zz/D'L'Q' zz
SFX A* z z/D'L'Q' [^z]z
SFX I* Y 11
SFX I* a a/D'L'Q' a
SFX I* a as/D'Q' a
SFX I* e e/D'L'Q' e
SFX I* e es/D'Q' e
SFX I* en en/D'L'Q' en
SFX I* en ens/D'Q' en
SFX I* o o/D'L'Q' o
SFX I* o os/D'Q' o
SFX I* um um/D'L'Q' um
SFX I* um ums/D'Q' um
SFX I* us us/D'L'Q' us
SFX F* Y 59
SFX F* 0 0/D'L'Q' [eë]
SFX F* 0 s/D'Q' [eë]
SFX F* e 0/D'L'Q' [éiï]e
SFX F* e s/D'Q' [éiï]e
SFX F* rice eur/D'L'Q' [dt]rice
SFX F* rice eurs/D'Q' [dt]rice
SFX F* de d/D'L'Q' de
SFX F* de ds/D'Q' de
SFX F* he h/D'L'Q' [ut]he
SFX F* he hs/D'Q' [ut]he
SFX F* èke ek/D'L'Q' èke
SFX F* èke eks/D'Q' èke
SFX F* le l/D'L'Q' [aiouû]le
SFX F* le ls/D'Q' [aiouû]le
SFX F* lle l/D'L'Q' [eiu]lle
SFX F* lle ls/D'Q' [eiu]lle
SFX F* ne n/D'L'Q' [aiouï]ne
SFX F* ne ns/D'Q' [aiouï]ne
SFX F* nne n/D'L'Q' [aeo]nne
SFX F* nne ns/D'Q' [aeo]nne
SFX F* gne n/D'L'Q' igne
SFX F* gne ns/D'Q' igne
SFX F* re r/D'L'Q' [aiouûy]re
SFX F* re rs/D'Q' [aiouûy]re
SFX F* ère er/D'L'Q' ère
SFX F* ère ers/D'Q' ère
SFX F* se s/D'L'Q' [^us]se
SFX F* esse e/D'L'Q' [^eo].esse
SFX F* esse es/D'Q' [^eo].esse
SFX F* eresse eur/D'L'Q' eresse
SFX F* eresse eurs/D'Q' eresse
SFX F* oresse eur/D'L'Q' oresse
SFX F* oresse eurs/D'Q' oresse
SFX F* sse s/D'L'Q' [^e]sse
SFX F* use us/D'L'Q' [^eo]use
SFX F* euse eur/D'L'Q' euse
SFX F* euse eurs/D'Q' euse
SFX F* te t/D'L'Q' [^èt]te
SFX F* te ts/D'Q' [^èt]te
SFX F* tte t/D'L'Q' tte
SFX F* tte ts/D'Q' tte
SFX F* ète et/D'L'Q' ète
SFX F* ète ets/D'Q' ète
SFX F* ue u/D'L'Q' [^gq]ue
SFX F* ue us/D'Q' [^gq]ue
SFX F* gue g/D'L'Q' gue
SFX F* gue gs/D'Q' gue
SFX F* cque c/D'L'Q' cque
SFX F* cque cs/D'Q' cque
SFX F* que c/D'L'Q' [^c]que
SFX F* que cs/D'Q' [^c]que
SFX F* ève ef/D'L'Q' ève
SFX F* ève efs/D'Q' ève
SFX F* ve f/D'L'Q' [iïu]ve
SFX F* ve fs/D'Q' [iïu]ve
SFX F* uë u/D'L'Q' uë
SFX F* uë us/D'Q' uë
SFX F* üe u/D'L'Q' üe
SFX F* üe us/D'Q' üe
SFX W* Y 10
SFX W* 0 0/D'L'Q' e
SFX W* e es/D'Q' e
SFX W* ce x/D'L'Q' ce
SFX W* use ux/D'L'Q' [eo]use
SFX W* ousse oux/D'L'Q' ousse
SFX W* ausse aux/D'L'Q' ausse
SFX W* ale al/D'L'Q' ale
SFX W* ale aux/D'Q' ale
SFX W* elle eau/D'L'Q' elle
SFX W* elle eaux/D'Q' elle
PFX Um Y 29
PFX Um 0 0/S. .
PFX Um 0 l' [aàâeèéêiîoôuyœæ]
PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ]
PFX Um 0 yotta/S. .
PFX Um 0 zetta/S. .
PFX Um 0 exa/S. .
PFX Um 0 l'exa .
PFX Um 0 d'exa/S. .
PFX Um 0 peta/S. .
PFX Um 0 téra/S. .
PFX Um 0 giga/S. .
PFX Um 0 méga/S. .
PFX Um 0 kilo/S. .
PFX Um 0 hecto/S. .
PFX Um 0 l'hecto .
PFX Um 0 d'hecto/S. .
PFX Um 0 déca/S. .
PFX Um 0 déci/S. .
PFX Um 0 centi/S. .
PFX Um 0 milli/S. .
PFX Um 0 micro/S. .
PFX Um 0 nano/S. .
PFX Um 0 pico/S. .
PFX Um 0 femto/S. .
PFX Um 0 atto/S. .
PFX Um 0 l'atto .
PFX Um 0 d'atto/S. .
PFX Um 0 zepto/S. .
PFX Um 0 yocto/S. .
PFX Ui Y 28
PFX Ui 0 l' [aàâeèéêiîoôuyœæ]
PFX Ui 0 d' [aàâeèéêiîoôuyœæ]
PFX Ui 0 yotta .
PFX Ui 0 zetta .
PFX Ui 0 exa .
PFX Ui 0 l'exa .
PFX Ui 0 d'exa .
PFX Ui 0 peta .
PFX Ui 0 téra .
PFX Ui 0 giga .
PFX Ui 0 méga .
PFX Ui 0 kilo .
PFX Ui 0 hecto .
PFX Ui 0 l'hecto .
PFX Ui 0 d'hecto .
PFX Ui 0 déca .
PFX Ui 0 déci .
PFX Ui 0 centi .
PFX Ui 0 milli .
PFX Ui 0 micro .
PFX Ui 0 nano .
PFX Ui 0 pico .
PFX Ui 0 femto .
PFX Ui 0 atto .
PFX Ui 0 l'atto .
PFX Ui 0 d'atto .
PFX Ui 0 zepto .
PFX Ui 0 yocto .
PFX U. Y 20
PFX U. 0 Y .
PFX U. 0 Z .
PFX U. 0 E .
PFX U. 0 P .
PFX U. 0 T .
PFX U. 0 G .
PFX U. 0 M .
PFX U. 0 k .
PFX U. 0 h .
PFX U. 0 da .
PFX U. 0 d .
PFX U. 0 c .
PFX U. 0 m .
PFX U. 0 µ .
PFX U. 0 n .
PFX U. 0 p .
PFX U. 0 f .
PFX U. 0 a .
PFX U. 0 z .
PFX U. 0 y .
PFX n' Y 1
PFX n' 0 n' [aàâeèéêiîoôuyhœæ]
PFX q' Y 1
PFX q' 0 qu' [aàâeèéêiîoôuyhœæ]
PFX d' Y 1
PFX d' 0 d' [aàâeèéêiîoôuyhœæ]
PFX j' Y 1
PFX j' 0 j' [aàâeèéêiîoôuyhœæ]
PFX c' Y 2
PFX c' 0 c' [eé]
PFX c' 0 ç' a
PFX l' Y 1
PFX l' 0 l' [aàâeèéêiîoôuyhœæ]
PFX m' Y 1
PFX m' 0 m' [aàâeèéêiîoôuyhœæ]
PFX t' Y 1
PFX t' 0 t' [aàâeèéêiîoôuyhœæ]
PFX s' Y 1
PFX s' 0 s' [aàâeèéêiîoôuyhœæ]
SFX zA Y 49
SFX zA voir voir/n'q'd'l'm't' avoir
SFX zA voir yant/n'q'l'm't' avoir
SFX zA avoir eu avoir
SFX zA avoir eus avoir
SFX zA avoir eue avoir
SFX zA avoir eues avoir
SFX zA voir i/n'q'j'l't' avoir
SFX zA voir s/n'q'l'm't' avoir
SFX zA voir 0/n'q'c'l'm't' avoir
SFX zA voir vons/n'q'l't' avoir
SFX zA voir vez/n'q'l'm' avoir
SFX zA avoir ont/n'q'l'm't' avoir
SFX zA voir vais/n'q'j'l'm't' avoir
SFX zA voir vait/n'q'c'l'm't' avoir
SFX zA voir vions/n'q'l't' avoir
SFX zA voir viez/n'q'l'm' avoir
SFX zA voir vaient/n'q'l'm't' avoir
SFX zA avoir eus/n'q'j'l'm't' avoir
SFX zA avoir eut/n'q'c'l'm't' avoir
SFX zA avoir eûmes/n'q'l't' avoir
SFX zA avoir eûtes/n'q'l'm' avoir
SFX zA avoir eurent/n'q'l'm't' avoir
SFX zA voir urai/n'q'j'l'm't' avoir
SFX zA voir uras/n'q'l'm't' avoir
SFX zA voir ura/n'q'c'l'm't' avoir
SFX zA voir urons/n'q'l't' avoir
SFX zA voir urez/n'q'l'm' avoir
SFX zA voir uront/n'q'l'm't' avoir
SFX zA voir urais/n'q'j'l'm't' avoir
SFX zA voir urait/n'q'c'l'm't' avoir
SFX zA voir urions/n'q'l't' avoir
SFX zA voir uriez/n'q'l'm' avoir
SFX zA voir uraient/n'q'l'm't' avoir
SFX zA voir ie/n'j'l'm't' avoir
SFX zA voir ies/n'l'm't' avoir
SFX zA voir it/n'q'c'l'm't' avoir
SFX zA voir yons/n'l't' avoir
SFX zA voir yez/n'l'm' avoir
SFX zA voir ient/n'q'l'm't' avoir
SFX zA avoir eusse/n'q'j'l'm't' avoir
SFX zA avoir eussé/n'q'l'm't' avoir
SFX zA avoir eusses/n'q'l'm't' avoir
SFX zA avoir eût/n'q'c'l'm't' avoir
SFX zA avoir eussions/n'q'l't' avoir
SFX zA avoir eussiez/n'q'l'm' avoir
SFX zA avoir eussent/n'q'l'm't' avoir
SFX zA voir ie/n' avoir
SFX zA voir yons/n' avoir
SFX zA voir yez/n' avoir
SFX zE Y 45
SFX zE tre tre/n'q'd'l'm't's' être
SFX zE être étant/n'q'l'm't's' être
SFX zE être été être
SFX zE être suis être
SFX zE être es/n'q'l'm't' être
SFX zE être est/n'q'c'l'm't's' être
SFX zE être sommes être
SFX zE tre tes/n'q'l'm' être
SFX zE être sont être
SFX zE être étais/n'q'j'l'm't' être
SFX zE être était/n'q'c'l'm't's' être
SFX zE être étions/n'q'l't' être
SFX zE être étiez/n'q'l'm' être
SFX zE être étaient/n'q'c'l'm't's' être
SFX zE être fus être
SFX zE être fut être
SFX zE être fûmes être
SFX zE être fûtes être
SFX zE être furent être
SFX zE être serai être
SFX zE être seras être
SFX zE être sera être
SFX zE être serons être
SFX zE être serez être
SFX zE être seront être
SFX zE être serais être
SFX zE être serait être
SFX zE être serions être
SFX zE être seriez être
SFX zE être seraient être
SFX zE être sois être
SFX zE être soit être
SFX zE être soyons être
SFX zE être soyez être
SFX zE être soient être
SFX zE être fusse être
SFX zE être fussé être
SFX zE être fusses être
SFX zE être fût être
SFX zE être fussions être
SFX zE être fussiez être
SFX zE être fussent être
SFX zE être sois être
SFX zE être soyons être
SFX zE être soyez être
SFX a0 N 101
SFX a0 er ant [^cg]er
SFX a0 cer çant cer
SFX a0 ger geant ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er es [^y]er
SFX a0 yer yes [^ou]yer
SFX a0 yer ies [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a0 er ent [^y]er
SFX a0 yer yent [^ou]yer
SFX a0 yer ient [aou]yer
SFX a0 er ais [^cg]er
SFX a0 cer çais cer
SFX a0 ger geais ger
SFX a0 er ait [^cg]er
SFX a0 cer çait cer
SFX a0 ger geait ger
SFX a0 er ions er
SFX a0 er iez er
SFX a0 er aient [^cg]er
SFX a0 cer çaient cer
SFX a0 ger geaient ger
SFX a0 er ai [^cg]er
SFX a0 cer çai cer
SFX a0 ger geai ger
SFX a0 er as [^cg]er
SFX a0 cer ças cer
SFX a0 ger geas ger
SFX a0 er a [^cg]er
SFX a0 cer ça cer
SFX a0 ger gea ger
SFX a0 er âmes [^cg]er
SFX a0 cer çâmes cer
SFX a0 ger geâmes ger
SFX a0 er âtes [^cg]er
SFX a0 cer çâtes cer
SFX a0 ger geâtes ger
SFX a0 er èrent er
SFX a0 er erai [^y]er
SFX a0 yer yerai [^ou]yer
SFX a0 yer ierai [aou]yer
SFX a0 er eras [^y]er
SFX a0 yer yeras [^ou]yer
SFX a0 yer ieras [aou]yer
SFX a0 er era [^y]er
SFX a0 yer yera [^ou]yer
SFX a0 yer iera [aou]yer
SFX a0 er erons [^y]er
SFX a0 yer yerons [^ou]yer
SFX a0 yer ierons [aou]yer
SFX a0 er erez [^y]er
SFX a0 yer yerez [^ou]yer
SFX a0 yer ierez [aou]yer
SFX a0 er eront [^y]er
SFX a0 yer yeront [^ou]yer
SFX a0 yer ieront [aou]yer
SFX a0 er erais [^y]er
SFX a0 yer yerais [^ou]yer
SFX a0 yer ierais [aou]yer
SFX a0 er erait [^y]er
SFX a0 yer yerait [^ou]yer
SFX a0 yer ierait [aou]yer
SFX a0 er erions [^y]er
SFX a0 yer yerions [^ou]yer
SFX a0 yer ierions [aou]yer
SFX a0 er eriez [^y]er
SFX a0 yer yeriez [^ou]yer
SFX a0 yer ieriez [aou]yer
SFX a0 er eraient [^y]er
SFX a0 yer yeraient [^ou]yer
SFX a0 yer ieraient [aou]yer
SFX a0 er asse [^cg]er
SFX a0 cer çasse cer
SFX a0 ger geasse ger
SFX a0 er asses [^cg]er
SFX a0 cer çasses cer
SFX a0 ger geasses ger
SFX a0 er ât [^cg]er
SFX a0 cer çât cer
SFX a0 ger geât ger
SFX a0 er assions [^cg]er
SFX a0 cer çassions cer
SFX a0 ger geassions ger
SFX a0 er assiez [^cg]er
SFX a0 cer çassiez cer
SFX a0 ger geassiez ger
SFX a0 er assent [^cg]er
SFX a0 cer çassent cer
SFX a0 ger geassent ger
SFX a0 er e [^y]er
SFX a0 yer ye [^ou]yer
SFX a0 yer ie [aou]yer
SFX a0 er ons [^cg]er
SFX a0 cer çons cer
SFX a0 ger geons ger
SFX a0 er ez er
SFX a1 Y 102
SFX a1 er er/n'q'd' er
SFX a1 er ant/n'q' [^cg]er
SFX a1 cer çant/n'q' cer
SFX a1 ger geant/n'q' ger
SFX a1 er e/n'q'j' [^y]er
SFX a1 yer ye/n'q'j' [^ou]yer
SFX a1 yer ie/n'q'j' [aou]yer
SFX a1 er es/n' [^y]er
SFX a1 yer yes/n' [^ou]yer
SFX a1 yer ies/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a1 er ent/n'q' [^y]er
SFX a1 yer yent/n'q' [^ou]yer
SFX a1 yer ient/n'q' [aou]yer
SFX a1 er ais/n'j' [^cg]er
SFX a1 cer çais/n'j' cer
SFX a1 ger geais/n'j' ger
SFX a1 er ait/n'q' [^cg]er
SFX a1 cer çait/n'q' cer
SFX a1 ger geait/n'q' ger
SFX a1 er ions/n' er
SFX a1 er iez/n' er
SFX a1 er aient/n'q' [^cg]er
SFX a1 cer çaient/n'q' cer
SFX a1 ger geaient/n'q' ger
SFX a1 er ai/n'j' [^cg]er
SFX a1 cer çai/n'j' cer
SFX a1 ger geai/n'j' ger
SFX a1 er as/n' [^cg]er
SFX a1 cer ças/n' cer
SFX a1 ger geas/n' ger
SFX a1 er a/n'q' [^cg]er
SFX a1 cer ça/n'q' cer
SFX a1 ger gea/n'q' ger
SFX a1 er âmes/n' [^cg]er
SFX a1 cer çâmes/n' cer
SFX a1 ger geâmes/n' ger
SFX a1 er âtes/n' [^cg]er
SFX a1 cer çâtes/n' cer
SFX a1 ger geâtes/n' ger
SFX a1 er èrent/n'q' er
SFX a1 er erai/n'j' [^y]er
SFX a1 yer yerai/n'j' [^ou]yer
SFX a1 yer ierai/n'j' [aou]yer
SFX a1 er eras/n' [^y]er
SFX a1 yer yeras/n' [^ou]yer
SFX a1 yer ieras/n' [aou]yer
SFX a1 er era/n'q' [^y]er
SFX a1 yer yera/n'q' [^ou]yer
SFX a1 yer iera/n'q' [aou]yer
SFX a1 er erons/n' [^y]er
SFX a1 yer yerons/n' [^ou]yer
SFX a1 yer ierons/n' [aou]yer
SFX a1 er erez/n' [^y]er
SFX a1 yer yerez/n' [^ou]yer
SFX a1 yer ierez/n' [aou]yer
SFX a1 er eront/n'q' [^y]er
SFX a1 yer yeront/n'q' [^ou]yer
SFX a1 yer ieront/n'q' [aou]yer
SFX a1 er erais/n'j' [^y]er
SFX a1 yer yerais/n'j' [^ou]yer
SFX a1 yer ierais/n'j' [aou]yer
SFX a1 er erait/n'q' [^y]er
SFX a1 yer yerait/n'q' [^ou]yer
SFX a1 yer ierait/n'q' [aou]yer
SFX a1 er erions/n' [^y]er
SFX a1 yer yerions/n' [^ou]yer
SFX a1 yer ierions/n' [aou]yer
SFX a1 er eriez/n' [^y]er
SFX a1 yer yeriez/n' [^ou]yer
SFX a1 yer ieriez/n' [aou]yer
SFX a1 er eraient/n'q' [^y]er
SFX a1 yer yeraient/n'q' [^ou]yer
SFX a1 yer ieraient/n'q' [aou]yer
SFX a1 er asse/n'j' [^cg]er
SFX a1 cer çasse/n'j' cer
SFX a1 ger geasse/n'j' ger
SFX a1 er asses/n' [^cg]er
SFX a1 cer çasses/n' cer
SFX a1 ger geasses/n' ger
SFX a1 er ât/n'q' [^cg]er
SFX a1 cer çât/n'q' cer
SFX a1 ger geât/n'q' ger
SFX a1 er assions/n' [^cg]er
SFX a1 cer çassions/n' cer
SFX a1 ger geassions/n' ger
SFX a1 er assiez/n' [^cg]er
SFX a1 cer çassiez/n' cer
SFX a1 ger geassiez/n' ger
SFX a1 er assent/n'q' [^cg]er
SFX a1 cer çassent/n'q' cer
SFX a1 ger geassent/n'q' ger
SFX a1 er e/n' [^y]er
SFX a1 yer ye/n' [^ou]yer
SFX a1 yer ie/n' [aou]yer
SFX a1 er ons/n' [^cg]er
SFX a1 cer çons/n' cer
SFX a1 ger geons/n' ger
SFX a1 er ez/n' er
SFX a2 Y 102
SFX a2 er er/n'q'd'l'm't's' er
SFX a2 er ant/n'q'l'm't's' [^cg]er
SFX a2 cer çant/n'q'l'm't's' cer
SFX a2 ger geant/n'q'l'm't's' ger
SFX a2 er e/n'q'j'l'm't's' [^y]er
SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a2 yer ie/n'q'j'l'm't's' [aou]yer
SFX a2 er es/n'q'l'm' [^y]er
SFX a2 yer yes/n'q'l'm' [^ou]yer
SFX a2 yer ies/n'q'l'm' [aou]yer
SFX a2 er ons/n'q'l't' [^cg]er
SFX a2 cer çons/n'q'l't' cer
SFX a2 ger geons/n'q'l't' ger
SFX a2 er ez/n'q'l'm' er
SFX a2 er ent/n'q'l'm't's' [^y]er
SFX a2 yer yent/n'q'l'm't's' [^ou]yer
SFX a2 yer ient/n'q'l'm't's' [aou]yer
SFX a2 er ais/n'q'j'l'm't' [^cg]er
SFX a2 cer çais/n'q'j'l'm't' cer
SFX a2 ger geais/n'q'j'l'm't' ger
SFX a2 er ait/n'q'l'm't's' [^cg]er
SFX a2 cer çait/n'q'l'm't's' cer
SFX a2 ger geait/n'q'l'm't's' ger
SFX a2 er ions/n'q'l't' er
SFX a2 er iez/n'q'l'm' er
SFX a2 er aient/n'q'l'm't's' [^cg]er
SFX a2 cer çaient/n'q'l'm't's' cer
SFX a2 ger geaient/n'q'l'm't's' ger
SFX a2 er ai/n'q'j'l't' [^cg]er
SFX a2 cer çai/n'q'j'l't' cer
SFX a2 ger geai/n'q'j'l't' ger
SFX a2 er as/n'q'l'm' [^cg]er
SFX a2 cer ças/n'q'l'm' cer
SFX a2 ger geas/n'q'l'm' ger
SFX a2 er a/n'q'l'm't's' [^cg]er
SFX a2 cer ça/n'q'l'm't's' cer
SFX a2 ger gea/n'q'l'm't's' ger
SFX a2 er âmes/n'q'l't' [^cg]er
SFX a2 cer çâmes/n'q'l't' cer
SFX a2 ger geâmes/n'q'l't' ger
SFX a2 er âtes/n'q'l'm' [^cg]er
SFX a2 cer çâtes/n'q'l'm' cer
SFX a2 ger geâtes/n'q'l'm' ger
SFX a2 er èrent/n'q'l'm't's' er
SFX a2 er erai/n'q'j'l't' [^y]er
SFX a2 yer yerai/n'q'j'l't' [^ou]yer
SFX a2 yer ierai/n'q'j'l't' [aou]yer
SFX a2 er eras/n'q'l'm' [^y]er
SFX a2 yer yeras/n'q'l'm' [^ou]yer
SFX a2 yer ieras/n'q'l'm' [aou]yer
SFX a2 er era/n'q'l'm't's' [^y]er
SFX a2 yer yera/n'q'l'm't's' [^ou]yer
SFX a2 yer iera/n'q'l'm't's' [aou]yer
SFX a2 er erons/n'q'l't' [^y]er
SFX a2 yer yerons/n'q'l't' [^ou]yer
SFX a2 yer ierons/n'q'l't' [aou]yer
SFX a2 er erez/n'q'l'm' [^y]er
SFX a2 yer yerez/n'q'l'm' [^ou]yer
SFX a2 yer ierez/n'q'l'm' [aou]yer
SFX a2 er eront/n'q'l'm't's' [^y]er
SFX a2 yer yeront/n'q'l'm't's' [^ou]yer
SFX a2 yer ieront/n'q'l'm't's' [aou]yer
SFX a2 er erais/n'q'j'l'm't' [^y]er
SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a2 yer ierais/n'q'j'l'm't' [aou]yer
SFX a2 er erait/n'q'l'm't's' [^y]er
SFX a2 yer yerait/n'q'l'm't's' [^ou]yer
SFX a2 yer ierait/n'q'l'm't's' [aou]yer
SFX a2 er erions/n'q'l't' [^y]er
SFX a2 yer yerions/n'q'l't' [^ou]yer
SFX a2 yer ierions/n'q'l't' [aou]yer
SFX a2 er eriez/n'q'l'm' [^y]er
SFX a2 yer yeriez/n'q'l'm' [^ou]yer
SFX a2 yer ieriez/n'q'l'm' [aou]yer
SFX a2 er eraient/n'q'l'm't's' [^y]er
SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a2 yer ieraient/n'q'l'm't's' [aou]yer
SFX a2 er asse/n'q'j'l't' [^cg]er
SFX a2 cer çasse/n'q'j'l't' cer
SFX a2 ger geasse/n'q'j'l't' ger
SFX a2 er asses/n'q'l'm' [^cg]er
SFX a2 cer çasses/n'q'l'm' cer
SFX a2 ger geasses/n'q'l'm' ger
SFX a2 er ât/n'q'l'm't's' [^cg]er
SFX a2 cer çât/n'q'l'm't's' cer
SFX a2 ger geât/n'q'l'm't's' ger
SFX a2 er assions/n'q'l't' [^cg]er
SFX a2 cer çassions/n'q'l't' cer
SFX a2 ger geassions/n'q'l't' ger
SFX a2 er assiez/n'q'l'm' [^cg]er
SFX a2 cer çassiez/n'q'l'm' cer
SFX a2 ger geassiez/n'q'l'm' ger
SFX a2 er assent/n'q'l'm't's' [^cg]er
SFX a2 cer çassent/n'q'l'm't's' cer
SFX a2 ger geassent/n'q'l'm't's' ger
SFX a2 er e/n'l'm' [^y]er
SFX a2 yer ye/n'l'm' [^ou]yer
SFX a2 yer ie/n'l'm' [aou]yer
SFX a2 er ons/n'l' [^cg]er
SFX a2 cer çons/n'l' cer
SFX a2 ger geons/n'l' ger
SFX a2 er ez/n'l'm' er
SFX a3 Y 102
SFX a3 er er/m't's' er
SFX a3 er ant/m't's' [^cg]er
SFX a3 cer çant/m't's' cer
SFX a3 ger geant/m't's' ger
SFX a3 er e/m's' [^y]er
SFX a3 yer ye/m's' [^ou]yer
SFX a3 yer ie/m's' [aou]yer
SFX a3 er es/t' [^y]er
SFX a3 yer yes/t' [^ou]yer
SFX a3 yer ies/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 r z er
SFX a3 er ent/s' [^y]er
SFX a3 yer yent/s' [^ou]yer
SFX a3 yer ient/s' [aou]yer
SFX a3 er ais/m' [^cg]er
SFX a3 cer çais/m' cer
SFX a3 ger geais/m' ger
SFX a3 er ait/s' [^cg]er
SFX a3 cer çait/s' cer
SFX a3 ger geait/s' ger
SFX a3 er ions er
SFX a3 er iez er
SFX a3 er aient/s' [^cg]er
SFX a3 cer çaient/s' cer
SFX a3 ger geaient/s' ger
SFX a3 er ai/m' [^cg]er
SFX a3 cer çai/m' cer
SFX a3 ger geai/m' ger
SFX a3 er as/t' [^cg]er
SFX a3 cer ças/t' cer
SFX a3 ger geas/t' ger
SFX a3 er a/s' [^cg]er
SFX a3 cer ça/s' cer
SFX a3 ger gea/s' ger
SFX a3 er âmes [^cg]er
SFX a3 cer çâmes cer
SFX a3 ger geâmes ger
SFX a3 er âtes [^cg]er
SFX a3 cer çâtes/s' cer
SFX a3 ger geâtes/s' ger
SFX a3 er èrent/s' er
SFX a3 er erai/m' [^y]er
SFX a3 yer yerai/m' [^ou]yer
SFX a3 yer ierai/m' [aou]yer
SFX a3 er eras/t' [^y]er
SFX a3 yer yeras/t' [^ou]yer
SFX a3 yer ieras/t' [aou]yer
SFX a3 er era/s' [^y]er
SFX a3 yer yera/s' [^ou]yer
SFX a3 yer iera/s' [aou]yer
SFX a3 er erons [^y]er
SFX a3 yer yerons [^ou]yer
SFX a3 yer ierons [aou]yer
SFX a3 er erez [^y]er
SFX a3 yer yerez [^ou]yer
SFX a3 yer ierez [aou]yer
SFX a3 er eront/s' [^y]er
SFX a3 yer yeront/s' [^ou]yer
SFX a3 yer ieront/s' [aou]yer
SFX a3 er erais/m't' [^y]er
SFX a3 yer yerais/m't' [^ou]yer
SFX a3 yer ierais/m't' [aou]yer
SFX a3 er erait/s' [^y]er
SFX a3 yer yerait/s' [^ou]yer
SFX a3 yer ierait/s' [aou]yer
SFX a3 er erions [^y]er
SFX a3 yer yerions [^ou]yer
SFX a3 yer ierions [aou]yer
SFX a3 er eriez [^y]er
SFX a3 yer yeriez [^ou]yer
SFX a3 yer ieriez [aou]yer
SFX a3 er eraient/s' [^y]er
SFX a3 yer yeraient/s' [^ou]yer
SFX a3 yer ieraient/s' [aou]yer
SFX a3 er asse/m' [^cg]er
SFX a3 cer çasse/m' cer
SFX a3 ger geasse/m' ger
SFX a3 er asses/t' [^cg]er
SFX a3 cer çasses/t' cer
SFX a3 ger geasses/t' ger
SFX a3 er ât/s' [^cg]er
SFX a3 cer çât/s' cer
SFX a3 ger geât/s' ger
SFX a3 er assions [^cg]er
SFX a3 cer çassions cer
SFX a3 ger geassions ger
SFX a3 er assiez [^cg]er
SFX a3 cer çassiez cer
SFX a3 ger geassiez ger
SFX a3 er assent/s' [^cg]er
SFX a3 cer çassent/s' cer
SFX a3 ger geassent/s' ger
SFX a3 er e/t' [^y]er
SFX a3 yer ye/t' [^ou]yer
SFX a3 yer ie/t' [aou]yer
SFX a3 er ons [^cg]er
SFX a3 cer çons cer
SFX a3 ger geons ger
SFX a3 er ez er
SFX a4 Y 102
SFX a4 er er/n'q'd'l'm't's' er
SFX a4 er ant/n'q'l'm't's' [^cg]er
SFX a4 cer çant/n'q'l'm't's' cer
SFX a4 ger geant/n'q'l'm't's' ger
SFX a4 er e/n'q'j'l'm't's' [^y]er
SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer
SFX a4 yer ie/n'q'j'l'm't's' [aou]yer
SFX a4 er es/n'q'l'm't' [^y]er
SFX a4 yer yes/n'q'l'm't' [^ou]yer
SFX a4 yer ies/n'q'l'm't' [aou]yer
SFX a4 er ons/n'q'l't' [^cg]er
SFX a4 cer çons/n'q'l't' cer
SFX a4 ger geons/n'q'l't' ger
SFX a4 er ez/n'q'l'm' er
SFX a4 er ent/n'q'l'm't's' [^y]er
SFX a4 yer yent/n'q'l'm't's' [^ou]yer
SFX a4 yer ient/n'q'l'm't's' [aou]yer
SFX a4 er ais/n'q'j'l'm't' [^cg]er
SFX a4 cer çais/n'q'j'l'm't' cer
SFX a4 ger geais/n'q'j'l'm't' ger
SFX a4 er ait/n'q'l'm't's' [^cg]er
SFX a4 cer çait/n'q'l'm't's' cer
SFX a4 ger geait/n'q'l'm't's' ger
SFX a4 er ions/n'q'l't' er
SFX a4 er iez/n'q'l'm' er
SFX a4 er aient/n'q'l'm't's' [^cg]er
SFX a4 cer çaient/n'q'l'm't's' cer
SFX a4 ger geaient/n'q'l'm't's' ger
SFX a4 er ai/n'q'j'l'm't' [^cg]er
SFX a4 cer çai/n'q'j'l'm't' cer
SFX a4 ger geai/n'q'j'l'm't' ger
SFX a4 er as/n'q'l'm't' [^cg]er
SFX a4 cer ças/n'q'l'm't' cer
SFX a4 ger geas/n'q'l'm't' ger
SFX a4 er a/n'q'l'm't's' [^cg]er
SFX a4 cer ça/n'q'l'm't's' cer
SFX a4 ger gea/n'q'l'm't's' ger
SFX a4 er âmes/n'q'l't' [^cg]er
SFX a4 cer çâmes/n'q'l't' cer
SFX a4 ger geâmes/n'q'l't' ger
SFX a4 er âtes/n'q'l'm' [^cg]er
SFX a4 cer çâtes/n'q'l'm' cer
SFX a4 ger geâtes/n'q'l'm' ger
SFX a4 er èrent/n'q'l'm't's' er
SFX a4 er erai/n'q'j'l'm't' [^y]er
SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierai/n'q'j'l'm't' [aou]yer
SFX a4 er eras/n'q'l'm't' [^y]er
SFX a4 yer yeras/n'q'l'm't' [^ou]yer
SFX a4 yer ieras/n'q'l'm't' [aou]yer
SFX a4 er era/n'q'l'm't's' [^y]er
SFX a4 yer yera/n'q'l'm't's' [^ou]yer
SFX a4 yer iera/n'q'l'm't's' [aou]yer
SFX a4 er erons/n'q'l't' [^y]er
SFX a4 yer yerons/n'q'l't' [^ou]yer
SFX a4 yer ierons/n'q'l't' [aou]yer
SFX a4 er erez/n'q'l'm' [^y]er
SFX a4 yer yerez/n'q'l'm' [^ou]yer
SFX a4 yer ierez/n'q'l'm' [aou]yer
SFX a4 er eront/n'q'l'm't's' [^y]er
SFX a4 yer yeront/n'q'l'm't's' [^ou]yer
SFX a4 yer ieront/n'q'l'm't's' [aou]yer
SFX a4 er erais/n'q'j'l'm't' [^y]er
SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer
SFX a4 yer ierais/n'q'j'l'm't' [aou]yer
SFX a4 er erait/n'q'l'm't's' [^y]er
SFX a4 yer yerait/n'q'l'm't's' [^ou]yer
SFX a4 yer ierait/n'q'l'm't's' [aou]yer
SFX a4 er erions/n'q'l't' [^y]er
SFX a4 yer yerions/n'q'l't' [^ou]yer
SFX a4 yer ierions/n'q'l't' [aou]yer
SFX a4 er eriez/n'q'l'm' [^y]er
SFX a4 yer yeriez/n'q'l'm' [^ou]yer
SFX a4 yer ieriez/n'q'l'm' [aou]yer
SFX a4 er eraient/n'q'l'm't's' [^y]er
SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer
SFX a4 yer ieraient/n'q'l'm't's' [aou]yer
SFX a4 er asse/n'q'j'l'm't' [^cg]er
SFX a4 cer çasse/n'q'j'l'm't' cer
SFX a4 ger geasse/n'q'j'l'm't' ger
SFX a4 er asses/n'q'l'm't' [^cg]er
SFX a4 cer çasses/n'q'l'm't' cer
SFX a4 ger geasses/n'q'l'm't' ger
SFX a4 er ât/n'q'l'm't's' [^cg]er
SFX a4 cer çât/n'q'l'm't's' cer
SFX a4 ger geât/n'q'l'm't's' ger
SFX a4 er assions/n'q'l't' [^cg]er
SFX a4 cer çassions/n'q'l't' cer
SFX a4 ger geassions/n'q'l't' ger
SFX a4 er assiez/n'q'l'm' [^cg]er
SFX a4 cer çassiez/n'q'l'm' cer
SFX a4 ger geassiez/n'q'l'm' ger
SFX a4 er assent/n'q'l'm't's' [^cg]er
SFX a4 cer çassent/n'q'l'm't's' cer
SFX a4 ger geassent/n'q'l'm't's' ger
SFX a4 er e/n'l'm't' [^y]er
SFX a4 yer ye/n'l'm't' [^ou]yer
SFX a4 yer ie/n'l'm't' [aou]yer
SFX a4 er ons/n'l' [^cg]er
SFX a4 cer çons/n'l' cer
SFX a4 ger geons/n'l' ger
SFX a4 er ez/n'l'm' er
SFX a5 Y 102
SFX a5 er er/n'q'd'm't's' er
SFX a5 er ant/n'q'm't's' [^cg]er
SFX a5 cer çant/n'q'm't's' cer
SFX a5 ger geant/n'q'm't's' ger
SFX a5 er e/n'q'j'm't's' [^y]er
SFX a5 yer ye/n'q'j'm't's' [^ou]yer
SFX a5 yer ie/n'q'j'm't's' [aou]yer
SFX a5 er es/n'm't' [^y]er
SFX a5 yer yes/n'm't' [^ou]yer
SFX a5 yer ies/n'm't' [aou]yer
SFX a5 er ons/n't' [^cg]er
SFX a5 cer çons/n't' cer
SFX a5 ger geons/n't' ger
SFX a5 r z/n'm' er
SFX a5 er ent/n'q'm't's' [^y]er
SFX a5 yer yent/n'q'm't's' [^ou]yer
SFX a5 yer ient/n'q'm't's' [aou]yer
SFX a5 er ais/n'j'm't' [^cg]er
SFX a5 cer çais/n'j'm't' cer
SFX a5 ger geais/n'j'm't' ger
SFX a5 er ait/n'q'm't's' [^cg]er
SFX a5 cer çait/n'q'm't's' cer
SFX a5 ger geait/n'q'm't's' ger
SFX a5 er ions/n't' er
SFX a5 er iez/n'm' er
SFX a5 er aient/n'q'm't's' [^cg]er
SFX a5 cer çaient/n'q'm't's' cer
SFX a5 ger geaient/n'q'm't's' ger
SFX a5 er ai/n'j'm't' [^cg]er
SFX a5 cer çai/n'j'm't' cer
SFX a5 ger geai/n'j'm't' ger
SFX a5 er as/n'm't' [^cg]er
SFX a5 cer ças/n'm't' cer
SFX a5 ger geas/n'm't' ger
SFX a5 er a/n'q'm't's' [^cg]er
SFX a5 cer ça/n'q'm't's' cer
SFX a5 ger gea/n'q'm't's' ger
SFX a5 er âmes/n't' [^cg]er
SFX a5 cer çâmes/n't' cer
SFX a5 ger geâmes/n't' ger
SFX a5 er âtes/n'm' [^cg]er
SFX a5 cer çâtes/n'm' cer
SFX a5 ger geâtes/n'm' ger
SFX a5 er èrent/n'q'm't's' er
SFX a5 er erai/n'j'm't' [^y]er
SFX a5 yer yerai/n'j'm't' [^ou]yer
SFX a5 yer ierai/n'j'm't' [aou]yer
SFX a5 er eras/n'm't' [^y]er
SFX a5 yer yeras/n'm't' [^ou]yer
SFX a5 yer ieras/n'm't' [aou]yer
SFX a5 er era/n'q'm't's' [^y]er
SFX a5 yer yera/n'q'm't's' [^ou]yer
SFX a5 yer iera/n'q'm't's' [aou]yer
SFX a5 er erons/n't' [^y]er
SFX a5 yer yerons/n't' [^ou]yer
SFX a5 yer ierons/n't' [aou]yer
SFX a5 er erez/n'm' [^y]er
SFX a5 yer yerez/n'm' [^ou]yer
SFX a5 yer ierez/n'm' [aou]yer
SFX a5 er eront/n'q'm't's' [^y]er
SFX a5 yer yeront/n'q'm't's' [^ou]yer
SFX a5 yer ieront/n'q'm't's' [aou]yer
SFX a5 er erais/n'j'm't' [^y]er
SFX a5 yer yerais/n'j'm't' [^ou]yer
SFX a5 yer ierais/n'j'm't' [aou]yer
SFX a5 er erait/n'q'm't's' [^y]er
SFX a5 yer yerait/n'q'm't's' [^ou]yer
SFX a5 yer ierait/n'q'm't's' [aou]yer
SFX a5 er erions/n't' [^y]er
SFX a5 yer yerions/n't' [^ou]yer
SFX a5 yer ierions/n't' [aou]yer
SFX a5 er eriez/n'm' [^y]er
SFX a5 yer yeriez/n'm' [^ou]yer
SFX a5 yer ieriez/n'm' [aou]yer
SFX a5 er eraient/n'q'm't's' [^y]er
SFX a5 yer yeraient/n'q'm't's' [^ou]yer
SFX a5 yer ieraient/n'q'm't's' [aou]yer
SFX a5 er asse/n'j'm't' [^cg]er
SFX a5 cer çasse/n'j'm't' cer
SFX a5 ger geasse/n'j'm't' ger
SFX a5 er asses/n'm't' [^cg]er
SFX a5 cer çasses/n'm't' cer
SFX a5 ger geasses/n'm't' ger
SFX a5 er ât/n'q'm't's' [^cg]er
SFX a5 cer çât/n'q'm't's' cer
SFX a5 ger geât/n'q'm't's' ger
SFX a5 er assions/n't' [^cg]er
SFX a5 cer çassions/n't' cer
SFX a5 ger geassions/n't' ger
SFX a5 er assiez/n'm' [^cg]er
SFX a5 cer çassiez/n'm' cer
SFX a5 ger geassiez/n'm' ger
SFX a5 er assent/n'q'm't's' [^cg]er
SFX a5 cer çassent/n'q'm't's' cer
SFX a5 ger geassent/n'q'm't's' ger
SFX a5 er e/n'm' [^y]er
SFX a5 yer e/n'm' [^ou]yer
SFX a5 yer ie/n'm' [aou]yer
SFX a5 er ons/n' [^cg]er
SFX a5 cer çons/n' cer
SFX a5 ger geons/n' ger
SFX a5 er ez/n'm' er
SFX a6 Y 72
SFX a6 er er/s' er
SFX a6 er ant/s' [^cg]er
SFX a6 cer çant/s' cer
SFX a6 ger geant/s' ger
SFX a6 er e/s' [^y]er
SFX a6 yer ye/s' [^ou]yer
SFX a6 yer ie/s' [aou]yer
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a6 er ent/s' [^y]er
SFX a6 yer yent/s' [^ou]yer
SFX a6 yer ient/s' [aou]yer
SFX a6 er ait/s' [^cg]er
SFX a6 cer çait/s' cer
SFX a6 ger geait/s' ger
SFX a6 er ions er
SFX a6 er iez er
SFX a6 er aient/s' [^cg]er
SFX a6 cer çaient/s' cer
SFX a6 ger geaient/s' ger
SFX a6 er a/s' [^cg]er
SFX a6 cer ça/s' cer
SFX a6 ger gea/s' ger
SFX a6 er âmes [^cg]er
SFX a6 cer çâmes cer
SFX a6 ger geâmes ger
SFX a6 er âtes [^cg]er
SFX a6 cer çâtes/s' cer
SFX a6 ger geâtes/s' ger
SFX a6 er èrent/s' er
SFX a6 er era/s' [^y]er
SFX a6 yer yera/s' [^ou]yer
SFX a6 yer iera/s' [aou]yer
SFX a6 er erons [^y]er
SFX a6 yer yerons [^ou]yer
SFX a6 yer ierons [aou]yer
SFX a6 er erez [^y]er
SFX a6 yer yerez [^ou]yer
SFX a6 yer ierez [aou]yer
SFX a6 er eront/s' [^y]er
SFX a6 yer yeront/s' [^ou]yer
SFX a6 yer ieront/s' [aou]yer
SFX a6 er erait/s' [^y]er
SFX a6 yer yerait/s' [^ou]yer
SFX a6 yer ierait/s' [aou]yer
SFX a6 er erions [^y]er
SFX a6 yer yerions [^ou]yer
SFX a6 yer ierions [aou]yer
SFX a6 er eriez [^y]er
SFX a6 yer yeriez [^ou]yer
SFX a6 yer ieriez [aou]yer
SFX a6 er eraient/s' [^y]er
SFX a6 yer yeraient/s' [^ou]yer
SFX a6 yer ieraient/s' [aou]yer
SFX a6 er ât/s' [^cg]er
SFX a6 cer çât/s' cer
SFX a6 ger geât/s' ger
SFX a6 er assions [^cg]er
SFX a6 cer çassions cer
SFX a6 ger geassions ger
SFX a6 er assiez [^cg]er
SFX a6 cer çassiez cer
SFX a6 ger geassiez ger
SFX a6 er assent/s' [^cg]er
SFX a6 cer çassent/s' cer
SFX a6 ger geassent/s' ger
SFX a6 er ons [^cg]er
SFX a6 cer çons cer
SFX a6 ger geons ger
SFX a6 er ez er
SFX a8 N 16
SFX a8 er er/n'd' er
SFX a8 er ant [^cg]er
SFX a8 cer çant cer
SFX a8 ger geant ger
SFX a8 er e/n' er
SFX a8 er ait/n' [^cg]er
SFX a8 cer çait/n' cer
SFX a8 ger geait/n' ger
SFX a8 er a/n' [^cg]er
SFX a8 cer ça/n' cer
SFX a8 ger gea/n' ger
SFX a8 er era/n' er
SFX a8 er erait/n' er
SFX a8 er ât/n' [^cg]er
SFX a8 cer çât/n' cer
SFX a8 ger geât/n' ger
SFX a9 N 10
SFX a9 er ent/n' er
SFX a9 er aient/n' [^cg]er
SFX a9 cer çaient/n' cer
SFX a9 ger geaient/n' ger
SFX a9 er èrent/n' er
SFX a9 er eront/n' er
SFX a9 er eraient/n' er
SFX a9 er assent/n' [^cg]er
SFX a9 cer çassent/n' cer
SFX a9 ger geassent/n' ger
SFX b0 N 189
SFX b0 er ant [^c]er
SFX b0 cer çant cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 ecer èces ecer
SFX b0 emer èmes emer
SFX b0 ener ènes ener
SFX b0 eper èpes eper
SFX b0 erer ères erer
SFX b0 eser èses eser
SFX b0 ever èves ever
SFX b0 evrer èvres evrer
SFX b0 eter ètes eter
SFX b0 eler èles eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b0 ecer ècent ecer
SFX b0 emer èment emer
SFX b0 ener ènent ener
SFX b0 eper èpent eper
SFX b0 erer èrent erer
SFX b0 eser èsent eser
SFX b0 ever èvent ever
SFX b0 evrer èvrent evrer
SFX b0 eter ètent eter
SFX b0 eler èlent eler
SFX b0 er ais [^c]er
SFX b0 cer çais cer
SFX b0 er ait [^c]er
SFX b0 cer çait cer
SFX b0 er ions er
SFX b0 er iez er
SFX b0 er aient [^c]er
SFX b0 cer çaient cer
SFX b0 er ai [^c]er
SFX b0 cer çai cer
SFX b0 er as [^c]er
SFX b0 cer ças cer
SFX b0 er a [^c]er
SFX b0 cer ça cer
SFX b0 er âmes [^c]er
SFX b0 cer çâmes cer
SFX b0 er âtes [^c]er
SFX b0 cer çâtes cer
SFX b0 er èrent er
SFX b0 ecer ècerai ecer
SFX b0 emer èmerai emer
SFX b0 ener ènerai ener
SFX b0 eper èperai eper
SFX b0 erer èrerai erer
SFX b0 eser èserai eser
SFX b0 ever èverai ever
SFX b0 evrer èvrerai evrer
SFX b0 eter èterai eter
SFX b0 eler èlerai eler
SFX b0 ecer èceras ecer
SFX b0 emer èmeras emer
SFX b0 ener èneras ener
SFX b0 eper èperas eper
SFX b0 erer èreras erer
SFX b0 eser èseras eser
SFX b0 ever èveras ever
SFX b0 evrer èvreras evrer
SFX b0 eter èteras eter
SFX b0 eler èleras eler
SFX b0 ecer ècera ecer
SFX b0 emer èmera emer
SFX b0 ener ènera ener
SFX b0 eper èpera eper
SFX b0 erer èrera erer
SFX b0 eser èsera eser
SFX b0 ever èvera ever
SFX b0 evrer èvrera evrer
SFX b0 eter ètera eter
SFX b0 eler èlera eler
SFX b0 ecer ècerons ecer
SFX b0 emer èmerons emer
SFX b0 ener ènerons ener
SFX b0 eper èperons eper
SFX b0 erer èrerons erer
SFX b0 eser èserons eser
SFX b0 ever èverons ever
SFX b0 evrer èvrerons evrer
SFX b0 eter èterons eter
SFX b0 eler èlerons eler
SFX b0 ecer ècerez ecer
SFX b0 emer èmerez emer
SFX b0 ener ènerez ener
SFX b0 eper èperez eper
SFX b0 erer èrerez erer
SFX b0 eser èserez eser
SFX b0 ever èverez ever
SFX b0 evrer èvrerez evrer
SFX b0 eter èterez eter
SFX b0 eler èlerez eler
SFX b0 ecer èceront ecer
SFX b0 emer èmeront emer
SFX b0 ener èneront ener
SFX b0 eper èperont eper
SFX b0 erer èreront erer
SFX b0 eser èseront eser
SFX b0 ever èveront ever
SFX b0 evrer èvreront evrer
SFX b0 eter èteront eter
SFX b0 eler èleront eler
SFX b0 ecer ècerais ecer
SFX b0 emer èmerais emer
SFX b0 ener ènerais ener
SFX b0 eper èperais eper
SFX b0 erer èrerais erer
SFX b0 eser èserais eser
SFX b0 ever èverais ever
SFX b0 evrer èvrerais evrer
SFX b0 eter èterais eter
SFX b0 eler èlerais eler
SFX b0 ecer ècerait ecer
SFX b0 emer èmerait emer
SFX b0 ener ènerait ener
SFX b0 eper èperait eper
SFX b0 erer èrerait erer
SFX b0 eser èserait eser
SFX b0 ever èverait ever
SFX b0 evrer èvrerait evrer
SFX b0 eter èterait eter
SFX b0 eler èlerait eler
SFX b0 ecer ècerions ecer
SFX b0 emer èmerions emer
SFX b0 ener ènerions ener
SFX b0 eper èperions eper
SFX b0 erer èrerions erer
SFX b0 eser èserions eser
SFX b0 ever èverions ever
SFX b0 evrer èvrerions evrer
SFX b0 eter èterions eter
SFX b0 eler èlerions eler
SFX b0 ecer èceriez ecer
SFX b0 emer èmeriez emer
SFX b0 ener èneriez ener
SFX b0 eper èperiez eper
SFX b0 erer èreriez erer
SFX b0 eser èseriez eser
SFX b0 ever èveriez ever
SFX b0 evrer èvreriez evrer
SFX b0 eter èteriez eter
SFX b0 eler èleriez eler
SFX b0 ecer èceraient ecer
SFX b0 emer èmeraient emer
SFX b0 ener èneraient ener
SFX b0 eper èperaient eper
SFX b0 erer èreraient erer
SFX b0 eser èseraient eser
SFX b0 ever èveraient ever
SFX b0 evrer èvreraient evrer
SFX b0 eter èteraient eter
SFX b0 eler èleraient eler
SFX b0 er asse [^c]er
SFX b0 cer çasse cer
SFX b0 er asses [^c]er
SFX b0 cer çasses cer
SFX b0 er ât [^c]er
SFX b0 cer çât cer
SFX b0 er assions [^c]er
SFX b0 cer çassions cer
SFX b0 er assiez [^c]er
SFX b0 cer çassiez cer
SFX b0 er assent [^c]er
SFX b0 cer çassent cer
SFX b0 ecer èce ecer
SFX b0 emer ème emer
SFX b0 ener ène ener
SFX b0 eper èpe eper
SFX b0 erer ère erer
SFX b0 eser èse eser
SFX b0 ever ève ever
SFX b0 evrer èvre evrer
SFX b0 eter ète eter
SFX b0 eler èle eler
SFX b0 er ons [^c]er
SFX b0 cer çons cer
SFX b0 er ez er
SFX b1 Y 190
SFX b1 er er/n'q'd' er
SFX b1 er ant/n'q' [^c]er
SFX b1 cer çant/n'q' cer
SFX b1 ecer èce/n'j'q' ecer
SFX b1 emer ème/n'j'q' emer
SFX b1 ener ène/n'j'q' ener
SFX b1 eper èpe/n'j'q' eper
SFX b1 erer ère/n'j'q' erer
SFX b1 eser èse/n'j'q' eser
SFX b1 ever ève/n'j'q' ever
SFX b1 evrer èvre/n'j'q' evrer
SFX b1 eter ète/n'j'q' eter
SFX b1 eler èle/n'j'q' eler
SFX b1 ecer èces/n' ecer
SFX b1 emer èmes/n' emer
SFX b1 ener ènes/n' ener
SFX b1 eper èpes/n' eper
SFX b1 erer ères/n' erer
SFX b1 eser èses/n' eser
SFX b1 ever èves/n' ever
SFX b1 evrer èvres/n' evrer
SFX b1 eter ètes/n' eter
SFX b1 eler èles/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b1 ecer ècent/n'q' ecer
SFX b1 emer èment/n'q' emer
SFX b1 ener ènent/n'q' ener
SFX b1 eper èpent/n'q' eper
SFX b1 erer èrent/n'q' erer
SFX b1 eser èsent/n'q' eser
SFX b1 ever èvent/n'q' ever
SFX b1 evrer èvrent/n'q' evrer
SFX b1 eter ètent/n'q' eter
SFX b1 eler èlent/n'q' eler
SFX b1 er ais/n'j' [^c]er
SFX b1 cer çais/n'j' cer
SFX b1 er ait/n'q' [^c]er
SFX b1 cer çait/n'q' cer
SFX b1 er ions/n' er
SFX b1 er iez/n' er
SFX b1 er aient/n'q' [^c]er
SFX b1 cer çaient/n'q' cer
SFX b1 er ai/n'j' [^c]er
SFX b1 cer çai/n'j' cer
SFX b1 er as/n' [^c]er
SFX b1 cer ças/n' cer
SFX b1 er a/n'q' [^c]er
SFX b1 cer ça/n'q' cer
SFX b1 er âmes/n' [^c]er
SFX b1 cer çâmes/n' cer
SFX b1 er âtes/n' [^c]er
SFX b1 cer çâtes/n' cer
SFX b1 er èrent/n'q' er
SFX b1 ecer ècerai/n'j' ecer
SFX b1 emer èmerai/n'j' emer
SFX b1 ener ènerai/n'j' ener
SFX b1 eper èperai/n'j' eper
SFX b1 erer èrerai/n'j' erer
SFX b1 eser èserai/n'j' eser
SFX b1 ever èverai/n'j' ever
SFX b1 evrer èvrerai/n'j' evrer
SFX b1 eter èterai/n'j' eter
SFX b1 eler èlerai/n'j' eler
SFX b1 ecer èceras/n' ecer
SFX b1 emer èmeras/n' emer
SFX b1 ener èneras/n' ener
SFX b1 eper èperas/n' eper
SFX b1 erer èreras/n' erer
SFX b1 eser èseras/n' eser
SFX b1 ever èveras/n' ever
SFX b1 evrer èvreras/n' evrer
SFX b1 eter èteras/n' eter
SFX b1 eler èleras/n' eler
SFX b1 ecer ècera/n'q' ecer
SFX b1 emer èmera/n'q' emer
SFX b1 ener ènera/n'q' ener
SFX b1 eper èpera/n'q' eper
SFX b1 erer èrera/n'q' erer
SFX b1 eser èsera/n'q' eser
SFX b1 ever èvera/n'q' ever
SFX b1 evrer èvrera/n'q' evrer
SFX b1 eter ètera/n'q' eter
SFX b1 eler èlera/n'q' eler
SFX b1 ecer ècerons/n' ecer
SFX b1 emer èmerons/n' emer
SFX b1 ener ènerons/n' ener
SFX b1 eper èperons/n' eper
SFX b1 erer èrerons/n' erer
SFX b1 eser èserons/n' eser
SFX b1 ever èverons/n' ever
SFX b1 evrer èvrerons/n' evrer
SFX b1 eter èterons/n' eter
SFX b1 eler èlerons/n' eler
SFX b1 ecer ècerez/n' ecer
SFX b1 emer èmerez/n' emer
SFX b1 ener ènerez/n' ener
SFX b1 eper èperez/n' eper
SFX b1 erer èrerez/n' erer
SFX b1 eser èserez/n' eser
SFX b1 ever èverez/n' ever
SFX b1 evrer èvrerez/n' evrer
SFX b1 eter èterez/n' eter
SFX b1 eler èlerez/n' eler
SFX b1 ecer èceront/n'q' ecer
SFX b1 emer èmeront/n'q' emer
SFX b1 ener èneront/n'q' ener
SFX b1 eper èperont/n'q' eper
SFX b1 erer èreront/n'q' erer
SFX b1 eser èseront/n'q' eser
SFX b1 ever èveront/n'q' ever
SFX b1 evrer èvreront/n'q' evrer
SFX b1 eter èteront/n'q' eter
SFX b1 eler èleront/n'q' eler
SFX b1 ecer ècerais/n'j' ecer
SFX b1 emer èmerais/n'j' emer
SFX b1 ener ènerais/n'j' ener
SFX b1 eper èperais/n'j' eper
SFX b1 erer èrerais/n'j' erer
SFX b1 eser èserais/n'j' eser
SFX b1 ever èverais/n'j' ever
SFX b1 evrer èvrerais/n'j' evrer
SFX b1 eter èterais/n'j' eter
SFX b1 eler èlerais/n' eler
SFX b1 ecer ècerait/n'q' ecer
SFX b1 emer èmerait/n'q' emer
SFX b1 ener ènerait/n'q' ener
SFX b1 eper èperait/n'q' eper
SFX b1 erer èrerait/n'q' erer
SFX b1 eser èserait/n'q' eser
SFX b1 ever èverait/n'q' ever
SFX b1 evrer èvrerait/n'q' evrer
SFX b1 eter èterait/n'q' eter
SFX b1 eler èlerait/n'q' eler
SFX b1 ecer ècerions/n' ecer
SFX b1 emer èmerions/n' emer
SFX b1 ener ènerions/n' ener
SFX b1 eper èperions/n' eper
SFX b1 erer èrerions/n' erer
SFX b1 eser èserions/n' eser
SFX b1 ever èverions/n' ever
SFX b1 evrer èvrerions/n' evrer
SFX b1 eter èterions/n' eter
SFX b1 eler èlerions/n' eler
SFX b1 ecer èceriez/n' ecer
SFX b1 emer èmeriez/n' emer
SFX b1 ener èneriez/n' ener
SFX b1 eper èperiez/n' eper
SFX b1 erer èreriez/n' erer
SFX b1 eser èseriez/n' eser
SFX b1 ever èveriez/n' ever
SFX b1 evrer èvreriez/n' evrer
SFX b1 eter èteriez/n' eter
SFX b1 eler èleriez/n' eler
SFX b1 ecer èceraient/n'q' ecer
SFX b1 emer èmeraient/n'q' emer
SFX b1 ener èneraient/n'q' ener
SFX b1 eper èperaient/n'q' eper
SFX b1 erer èreraient/n'q' erer
SFX b1 eser èseraient/n'q' eser
SFX b1 ever èveraient/n'q' ever
SFX b1 evrer èvreraient/n'q' evrer
SFX b1 eter èteraient/n'q' eter
SFX b1 eler èleraient/n'q' eler
SFX b1 er asse/n'j' [^c]er
SFX b1 cer çasse/n'j' cer
SFX b1 er asses/n' [^c]er
SFX b1 cer çasses/n' cer
SFX b1 er ât/n'q' [^c]er
SFX b1 cer çât/n'q' cer
SFX b1 er assions/n' [^c]er
SFX b1 cer çassions/n' cer
SFX b1 er assiez/n' [^c]er
SFX b1 cer çassiez/n' cer
SFX b1 er assent/n'q' [^c]er
SFX b1 cer çassent/n'q' cer
SFX b1 ecer èce/n' ecer
SFX b1 emer ème/n' emer
SFX b1 ener ène/n' ener
SFX b1 eper èpe/n' eper
SFX b1 erer ère/n' erer
SFX b1 eser èse/n' eser
SFX b1 ever ève/n' ever
SFX b1 evrer èvre/n' evrer
SFX b1 eter ète/n' eter
SFX b1 eler èle/n' eler
SFX b1 er ons/n' [^c]er
SFX b1 cer çons/n' cer
SFX b1 er ez/n' er
SFX b2 Y 190
SFX b2 er er/n'q'd'l'm't's' er
SFX b2 er ant/n'q'l'm't's' [^c]er
SFX b2 cer çant/n'q'l'm't's' cer
SFX b2 ecer èce/n'q'j'l'm't's' ecer
SFX b2 emer ème/n'q'j'l'm't's' emer
SFX b2 ener ène/n'q'j'l'm't's' ener
SFX b2 eper èpe/n'q'j'l'm't's' eper
SFX b2 erer ère/n'q'j'l'm't's' erer
SFX b2 eser èse/n'q'j'l'm't's' eser
SFX b2 ever ève/n'q'j'l'm't's' ever
SFX b2 evrer èvre/n'q'j'l'm't's' evrer
SFX b2 eter ète/n'q'j'l'm't's' eter
SFX b2 eler èle/n'q'j'l'm't's' eler
SFX b2 ecer èces/n'q'l'm' ecer
SFX b2 emer èmes/n'q'l'm' emer
SFX b2 ener ènes/n'q'l'm' ener
SFX b2 eper èpes/n'q'l'm' eper
SFX b2 erer ères/n'q'l'm' erer
SFX b2 eser èses/n'q'l'm' eser
SFX b2 ever èves/n'q'l'm' ever
SFX b2 evrer èvres/n'q'l'm' evrer
SFX b2 eter ètes/n'q'l'm' eter
SFX b2 eler èles/n'q'l'm' eler
SFX b2 er ons/n'q'l't' [^c]er
SFX b2 cer çons/n'q'l't' cer
SFX b2 er ez/n'q'l'm' er
SFX b2 ecer ècent/n'q'l'm't's' ecer
SFX b2 emer èment/n'q'l'm't's' emer
SFX b2 ener ènent/n'q'l'm't's' ener
SFX b2 eper èpent/n'q'l'm't's' eper
SFX b2 erer èrent/n'q'l'm't's' erer
SFX b2 eser èsent/n'q'l'm't's' eser
SFX b2 ever èvent/n'q'l'm't's' ever
SFX b2 evrer èvrent/n'q'l'm't's' evrer
SFX b2 eter ètent/n'q'l'm't's' eter
SFX b2 eler èlent/n'q'l'm't's' eler
SFX b2 er ais/n'q'j'l'm't' [^c]er
SFX b2 cer çais/n'q'j'l'm't' cer
SFX b2 er ait/n'q'l'm't's' [^c]er
SFX b2 cer çait/n'q'l'm't's' cer
SFX b2 er ions/n'q'l't' er
SFX b2 er iez/n'q'l'm' er
SFX b2 er aient/n'q'l'm't's' [^c]er
SFX b2 cer çaient/n'q'l'm't's' cer
SFX b2 er ai/n'q'j'l't' [^c]er
SFX b2 cer çai/n'q'j'l't' cer
SFX b2 er as/n'q'l'm' [^c]er
SFX b2 cer ças/n'q'l'm' cer
SFX b2 er a/n'q'l'm't's' [^c]er
SFX b2 cer ça/n'q'l'm't's' cer
SFX b2 er âmes/n'q'l't' [^c]er
SFX b2 cer çâmes/n'q'l't' cer
SFX b2 er âtes/n'q'l'm' [^c]er
SFX b2 cer çâtes/n'q'l'm' cer
SFX b2 er èrent/n'q'l'm't's' er
SFX b2 ecer ècerai/n'q'j'l't' ecer
SFX b2 emer èmerai/n'q'j'l't' emer
SFX b2 ener ènerai/n'q'j'l't' ener
SFX b2 eper èperai/n'q'j'l't' eper
SFX b2 erer èrerai/n'q'j'l't' erer
SFX b2 eser èserai/n'q'j'l't' eser
SFX b2 ever èverai/n'q'j'l't' ever
SFX b2 evrer èvrerai/n'q'j'l't' evrer
SFX b2 eter èterai/n'q'j'l't' eter
SFX b2 eler èlerai/n'q'j'l't' eler
SFX b2 ecer èceras/n'q'l'm' ecer
SFX b2 emer èmeras/n'q'l'm' emer
SFX b2 ener èneras/n'q'l'm' ener
SFX b2 eper èperas/n'q'l'm' eper
SFX b2 erer èreras/n'q'l'm' erer
SFX b2 eser èseras/n'q'l'm' eser
SFX b2 ever èveras/n'q'l'm' ever
SFX b2 evrer èvreras/n'q'l'm' evrer
SFX b2 eter èteras/n'q'l'm' eter
SFX b2 eler èleras/n'q'l'm' eler
SFX b2 ecer ècera/n'q'l'm't's' ecer
SFX b2 emer èmera/n'q'l'm't's' emer
SFX b2 ener ènera/n'q'l'm't's' ener
SFX b2 eper èpera/n'q'l'm't's' eper
SFX b2 erer èrera/n'q'l'm't's' erer
SFX b2 eser èsera/n'q'l'm't's' eser
SFX b2 ever èvera/n'q'l'm't's' ever
SFX b2 evrer èvrera/n'q'l'm't's' evrer
SFX b2 eter ètera/n'q'l'm't's' eter
SFX b2 eler èlera/n'q'l'm't's' eler
SFX b2 ecer ècerons/n'q'l't' ecer
SFX b2 emer èmerons/n'q'l't' emer
SFX b2 ener ènerons/n'q'l't' ener
SFX b2 eper èperons/n'q'l't' eper
SFX b2 erer èrerons/n'q'l't' erer
SFX b2 eser èserons/n'q'l't' eser
SFX b2 ever èverons/n'q'l't' ever
SFX b2 evrer èvrerons/n'q'l't' evrer
SFX b2 eter èterons/n'q'l't' eter
SFX b2 eler èlerons/n'q'l't' eler
SFX b2 ecer ècerez/n'q'l'm' ecer
SFX b2 emer èmerez/n'q'l'm' emer
SFX b2 ener ènerez/n'q'l'm' ener
SFX b2 eper èperez/n'q'l'm' eper
SFX b2 erer èrerez/n'q'l'm' erer
SFX b2 eser èserez/n'q'l'm' eser
SFX b2 ever èverez/n'q'l'm' ever
SFX b2 evrer èvrerez/n'q'l'm' evrer
SFX b2 eter èterez/n'q'l'm' eter
SFX b2 eler èlerez/n'q'l'm' eler
SFX b2 ecer èceront/n'q'l'm't's' ecer
SFX b2 emer èmeront/n'q'l'm't's' emer
SFX b2 ener èneront/n'q'l'm't's' ener
SFX b2 eper èperont/n'q'l'm't's' eper
SFX b2 erer èreront/n'q'l'm't's' erer
SFX b2 eser èseront/n'q'l'm't's' eser
SFX b2 ever èveront/n'q'l'm't's' ever
SFX b2 evrer èvreront/n'q'l'm't's' evrer
SFX b2 eter èteront/n'q'l'm't's' eter
SFX b2 eler èleront/n'q'l'm't's' eler
SFX b2 ecer ècerais/n'q'j'l'm't' ecer
SFX b2 emer èmerais/n'q'j'l'm't' emer
SFX b2 ener ènerais/n'q'j'l'm't' ener
SFX b2 eper èperais/n'q'j'l'm't' eper
SFX b2 erer èrerais/n'q'j'l'm't' erer
SFX b2 eser èserais/n'q'j'l'm't' eser
SFX b2 ever èverais/n'q'j'l'm't' ever
SFX b2 evrer èvrerais/n'q'j'l'm't' evrer
SFX b2 eter èterais/n'q'j'l'm't' eter
SFX b2 eler èlerais/n'q'j'l'm't' eler
SFX b2 ecer ècerait/n'q'l'm't's' ecer
SFX b2 emer èmerait/n'q'l'm't's' emer
SFX b2 ener ènerait/n'q'l'm't's' ener
SFX b2 eper èperait/n'q'l'm't's' eper
SFX b2 erer èrerait/n'q'l'm't's' erer
SFX b2 eser èserait/n'q'l'm't's' eser
SFX b2 ever èverait/n'q'l'm't's' ever
SFX b2 evrer èvrerait/n'q'l'm't's' evrer
SFX b2 eter èterait/n'q'l'm't's' eter
SFX b2 eler èlerait/n'q'l'm't's' eler
SFX b2 ecer ècerions/n'q'l't' ecer
SFX b2 emer èmerions/n'q'l't' emer
SFX b2 ener ènerions/n'q'l't' ener
SFX b2 eper èperions/n'q'l't' eper
SFX b2 erer èrerions/n'q'l't' erer
SFX b2 eser èserions/n'q'l't' eser
SFX b2 ever èverions/n'q'l't' ever
SFX b2 evrer èvrerions/n'q'l't' evrer
SFX b2 eter èterions/n'q'l't' eter
SFX b2 eler èlerions/n'q'l't' eler
SFX b2 ecer èceriez/n'q'l'm' ecer
SFX b2 emer èmeriez/n'q'l'm' emer
SFX b2 ener èneriez/n'q'l'm' ener
SFX b2 eper èperiez/n'q'l'm' eper
SFX b2 erer èreriez/n'q'l'm' erer
SFX b2 eser èseriez/n'q'l'm' eser
SFX b2 ever èveriez/n'q'l'm' ever
SFX b2 evrer èvreriez/n'q'l'm' evrer
SFX b2 eter èteriez/n'q'l'm' eter
SFX b2 eler èleriez/n'q'l'm' eler
SFX b2 ecer èceraient/n'q'l'm't's' ecer
SFX b2 emer èmeraient/n'q'l'm't's' emer
SFX b2 ener èneraient/n'q'l'm't's' ener
SFX b2 eper èperaient/n'q'l'm't's' eper
SFX b2 erer èreraient/n'q'l'm't's' erer
SFX b2 eser èseraient/n'q'l'm't's' eser
SFX b2 ever èveraient/n'q'l'm't's' ever
SFX b2 evrer èvreraient/n'q'l'm't's' evrer
SFX b2 eter èteraient/n'q'l'm't's' eter
SFX b2 eler èleraient/n'q'l'm't's' eler
SFX b2 er asse/n'q'j'l't' [^c]er
SFX b2 cer çasse/n'q'j'l't' cer
SFX b2 er asses/n'q'l'm' [^c]er
SFX b2 cer çasses/n'q'l'm' cer
SFX b2 er ât/n'q'l'm't's' [^c]er
SFX b2 cer çât/n'q'l'm't's' cer
SFX b2 er assions/n'q'l't' [^c]er
SFX b2 cer çassions/n'q'l't' cer
SFX b2 er assiez/n'q'l'm' [^c]er
SFX b2 cer çassiez/n'q'l'm' cer
SFX b2 er assent/n'q'l'm't's' [^c]er
SFX b2 cer çassent/n'q'l'm't's' cer
SFX b2 ecer èce/n'l'm' ecer
SFX b2 emer ème/n'l'm' emer
SFX b2 ener ène/n'l'm' ener
SFX b2 eper èpe/n'l'm' eper
SFX b2 erer ère/n'l'm' erer
SFX b2 eser èse/n'l'm' eser
SFX b2 ever ève/n'l'm' ever
SFX b2 evrer èvre/n'l'm' evrer
SFX b2 eter ète/n'l'm' eter
SFX b2 eler èle/n'l'm' eler
SFX b2 er ons/n'l' [^c]er
SFX b2 cer çons/n'l' cer
SFX b2 er ez/n'l'm' er
SFX b3 Y 190
SFX b3 er er/m't's' er
SFX b3 er ant/m't's' [^c]er
SFX b3 cer çant/m't's' cer
SFX b3 ecer èce/m's' ecer
SFX b3 emer ème/m's' emer
SFX b3 ener ène/m's' ener
SFX b3 eper èpe/m's' eper
SFX b3 erer ère/m's' erer
SFX b3 eser èse/m's' eser
SFX b3 ever ève/m's' ever
SFX b3 evrer èvre/m's' evrer
SFX b3 eter ète/m's' eter
SFX b3 eler èle/m's' eler
SFX b3 ecer èces/t' ecer
SFX b3 emer èmes/t' emer
SFX b3 ener ènes/t' ener
SFX b3 eper èpes/t' eper
SFX b3 erer ères/t' erer
SFX b3 eser èses/t' eser
SFX b3 ever èves/t' ever
SFX b3 evrer èvres/t' evrer
SFX b3 eter ètes/t' eter
SFX b3 eler èles/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b3 ecer ècent/s' ecer
SFX b3 emer èment/s' emer
SFX b3 ener ènent/s' ener
SFX b3 eper èpent/s' eper
SFX b3 erer èrent/s' erer
SFX b3 eser èsent/s' eser
SFX b3 ever èvent/s' ever
SFX b3 evrer èvrent/s' evrer
SFX b3 eter ètent/s' eter
SFX b3 eler èlent/s' eler
SFX b3 er ais/m't' [^c]er
SFX b3 cer çais/m't' cer
SFX b3 er ait/s' [^c]er
SFX b3 cer çait/s' cer
SFX b3 er ions er
SFX b3 er iez er
SFX b3 er aient/s' [^c]er
SFX b3 cer çaient/s' cer
SFX b3 er ai/m' [^c]er
SFX b3 cer çai/m' cer
SFX b3 er as/t' [^c]er
SFX b3 cer ças/t' cer
SFX b3 er a/s' [^c]er
SFX b3 cer ça/s' cer
SFX b3 er âmes [^c]er
SFX b3 cer çâmes cer
SFX b3 er âtes [^c]er
SFX b3 cer çâtes cer
SFX b3 er èrent/s' er
SFX b3 ecer ècerai/m' ecer
SFX b3 emer èmerai/m' emer
SFX b3 ener ènerai/m' ener
SFX b3 eper èperai/m' eper
SFX b3 erer èrerai/m' erer
SFX b3 eser èserai/m' eser
SFX b3 ever èverai/m' ever
SFX b3 evrer èvrerai/m' evrer
SFX b3 eter èterai/m' eter
SFX b3 eler èlerai/m' eler
SFX b3 ecer èceras/t' ecer
SFX b3 emer èmeras/t' emer
SFX b3 ener èneras/t' ener
SFX b3 eper èperas/t' eper
SFX b3 erer èreras/t' erer
SFX b3 eser èseras/t' eser
SFX b3 ever èveras/t' ever
SFX b3 evrer èvreras/t' evrer
SFX b3 eter èteras/t' eter
SFX b3 eler èleras/t' eler
SFX b3 ecer ècera/s' ecer
SFX b3 emer èmera/s' emer
SFX b3 ener ènera/s' ener
SFX b3 eper èpera/s' eper
SFX b3 erer èrera/s' erer
SFX b3 eser èsera/s' eser
SFX b3 ever èvera/s' ever
SFX b3 evrer èvrera/s' evrer
SFX b3 eter ètera/s' eter
SFX b3 eler èlera/s' eler
SFX b3 ecer ècerons ecer
SFX b3 emer èmerons emer
SFX b3 ener ènerons ener
SFX b3 eper èperons eper
SFX b3 erer èrerons erer
SFX b3 eser èserons eser
SFX b3 ever èverons ever
SFX b3 evrer èvrerons evrer
SFX b3 eter èterons eter
SFX b3 eler èlerons eler
SFX b3 ecer ècerez ecer
SFX b3 emer èmerez emer
SFX b3 ener ènerez ener
SFX b3 eper èperez eper
SFX b3 erer èrerez erer
SFX b3 eser èserez eser
SFX b3 ever èverez ever
SFX b3 evrer èvrerez evrer
SFX b3 eter èterez eter
SFX b3 eler èlerez eler
SFX b3 ecer èceront/s' ecer
SFX b3 emer èmeront/s' emer
SFX b3 ener èneront/s' ener
SFX b3 eper èperont/s' eper
SFX b3 erer èreront/s' erer
SFX b3 eser èseront/s' eser
SFX b3 ever èveront/s' ever
SFX b3 evrer èvreront/s' evrer
SFX b3 eter èteront/s' eter
SFX b3 eler èleront/s' eler
SFX b3 ecer ècerais/m't' ecer
SFX b3 emer èmerais/m't' emer
SFX b3 ener ènerais/m't' ener
SFX b3 eper èperais/m't' eper
SFX b3 erer èrerais/m't' erer
SFX b3 eser èserais/m't' eser
SFX b3 ever èverais/m't' ever
SFX b3 evrer èvrerais/m't' evrer
SFX b3 eter èterais/m't' eter
SFX b3 eler èlerais/m't' eler
SFX b3 ecer ècerait/s' ecer
SFX b3 emer èmerait/s' emer
SFX b3 ener ènerait/s' ener
SFX b3 eper èperait/s' eper
SFX b3 erer èrerait/s' erer
SFX b3 eser èserait/s' eser
SFX b3 ever èverait/s' ever
SFX b3 evrer èvrerait/s' evrer
SFX b3 eter èterait/s' eter
SFX b3 eler èlerait/s' eler
SFX b3 ecer ècerions ecer
SFX b3 emer èmerions emer
SFX b3 ener ènerions ener
SFX b3 eper èperions eper
SFX b3 erer èrerions erer
SFX b3 eser èserions eser
SFX b3 ever èverions ever
SFX b3 evrer èvrerions evrer
SFX b3 eter èterions eter
SFX b3 eler èlerions eler
SFX b3 ecer èceriez ecer
SFX b3 emer èmeriez emer
SFX b3 ener èneriez ener
SFX b3 eper èperiez eper
SFX b3 erer èreriez erer
SFX b3 eser èseriez eser
SFX b3 ever èveriez ever
SFX b3 evrer èvreriez evrer
SFX b3 eter èteriez eter
SFX b3 eler èleriez eler
SFX b3 ecer èceraient/s' ecer
SFX b3 emer èmeraient/s' emer
SFX b3 ener èneraient/s' ener
SFX b3 eper èperaient/s' eper
SFX b3 erer èreraient/s' erer
SFX b3 eser èseraient/s' eser
SFX b3 ever èveraient/s' ever
SFX b3 evrer èvreraient/s' evrer
SFX b3 eter èteraient/s' eter
SFX b3 eler èleraient/s' eler
SFX b3 er asse/m' [^c]er
SFX b3 cer çasse/m' cer
SFX b3 er asses/t' [^c]er
SFX b3 cer çasses/t' cer
SFX b3 er ât/s' [^c]er
SFX b3 cer çât/s' cer
SFX b3 er assions [^c]er
SFX b3 cer çassions cer
SFX b3 er assiez [^c]er
SFX b3 cer çassiez cer
SFX b3 er assent/s' [^c]er
SFX b3 cer çassent/s' cer
SFX b3 ecer èce/t' ecer
SFX b3 emer ème/t' emer
SFX b3 ener ène/t' ener
SFX b3 eper èpe/t' eper
SFX b3 erer ère/t' erer
SFX b3 eser èse/t' eser
SFX b3 ever ève/t' ever
SFX b3 evrer èvre/t' evrer
SFX b3 eter ète/t' eter
SFX b3 eler èle/t' eler
SFX b3 er ons [^c]er
SFX b3 cer çons cer
SFX b3 er ez er
SFX b4 Y 190
SFX b4 er er/n'q'd'l'm't's' er
SFX b4 er ant/n'q'l'm't's' [^c]er
SFX b4 cer çant/n'q'l'm't's' cer
SFX b4 ecer èce/n'q'j'l'm't's' ecer
SFX b4 emer ème/n'q'j'l'm't's' emer
SFX b4 ener ène/n'q'j'l'm't's' ener
SFX b4 eper èpe/n'q'j'l'm't's' eper
SFX b4 erer ère/n'q'j'l'm't's' erer
SFX b4 eser èse/n'q'j'l'm't's' eser
SFX b4 ever ève/n'q'j'l'm't's' ever
SFX b4 evrer èvre/n'q'j'l'm't's' evrer
SFX b4 eter ète/n'q'j'l'm't's' eter
SFX b4 eler èle/n'q'j'l'm't's' eler
SFX b4 ecer èces/n'q'l'm't' ecer
SFX b4 emer èmes/n'q'l'm't' emer
SFX b4 ener ènes/n'q'l'm't' ener
SFX b4 eper èpes/n'q'l'm't' eper
SFX b4 erer ères/n'q'l'm't' erer
SFX b4 eser èses/n'q'l'm't' eser
SFX b4 ever èves/n'q'l'm't' ever
SFX b4 evrer èvres/n'q'l'm't' evrer
SFX b4 eter ètes/n'q'l'm't' eter
SFX b4 eler èles/n'q'l'm't' eler
SFX b4 er ons/n'q'l't' [^c]er
SFX b4 cer çons/n'q'l't' cer
SFX b4 er ez/n'q'l'm' er
SFX b4 ecer ècent/n'q'l'm't's' ecer
SFX b4 emer èment/n'q'l'm't's' emer
SFX b4 ener ènent/n'q'l'm't's' ener
SFX b4 eper èpent/n'q'l'm't's' eper
SFX b4 erer èrent/n'q'l'm't's' erer
SFX b4 eser èsent/n'q'l'm't's' eser
SFX b4 ever èvent/n'q'l'm't's' ever
SFX b4 evrer èvrent/n'q'l'm't's' evrer
SFX b4 eter ètent/n'q'l'm't's' eter
SFX b4 eler èlent/n'q'l'm't's' eler
SFX b4 er ais/n'q'j'l'm't' [^c]er
SFX b4 cer çais/n'q'j'l'm't' cer
SFX b4 er ait/n'q'l'm't's' [^c]er
SFX b4 cer çait/n'q'l'm't's' cer
SFX b4 er ions/n'q'l't' er
SFX b4 er iez/n'q'l'm' er
SFX b4 er aient/n'q'l'm't's' [^c]er
SFX b4 cer çaient/n'q'l'm't's' cer
SFX b4 er ai/n'q'j'l'm't' [^c]er
SFX b4 cer çai/n'q'j'l'm't' cer
SFX b4 er as/n'q'l'm't' [^c]er
SFX b4 cer ças/n'q'l'm't' cer
SFX b4 er a/n'q'l'm't's' [^c]er
SFX b4 cer ça/n'q'l'm't's' cer
SFX b4 er âmes/n'q'l't' [^c]er
SFX b4 cer çâmes/n'q'l't' cer
SFX b4 er âtes/n'q'l'm' [^c]er
SFX b4 cer çâtes/n'q'l'm' cer
SFX b4 er èrent/n'q'l'm't's' er
SFX b4 ecer ècerai/n'q'j'l'm't' ecer
SFX b4 emer èmerai/n'q'j'l'm't' emer
SFX b4 ener ènerai/n'q'j'l'm't' ener
SFX b4 eper èperai/n'q'j'l'm't' eper
SFX b4 erer èrerai/n'q'j'l'm't' erer
SFX b4 eser èserai/n'q'j'l'm't' eser
SFX b4 ever èverai/n'q'j'l'm't' ever
SFX b4 evrer èvrerai/n'q'j'l'm't' evrer
SFX b4 eter èterai/n'q'j'l'm't' eter
SFX b4 eler èlerai/n'q'j'l'm't' eler
SFX b4 ecer èceras/n'q'l'm't' ecer
SFX b4 emer èmeras/n'q'l'm't' emer
SFX b4 ener èneras/n'q'l'm't' ener
SFX b4 eper èperas/n'q'l'm't' eper
SFX b4 erer èreras/n'q'l'm't' erer
SFX b4 eser èseras/n'q'l'm't' eser
SFX b4 ever èveras/n'q'l'm't' ever
SFX b4 evrer èvreras/n'q'l'm't' evrer
SFX b4 eter èteras/n'q'l'm't' eter
SFX b4 eler èleras/n'q'l'm't' eler
SFX b4 ecer ècera/n'q'l'm't's' ecer
SFX b4 emer èmera/n'q'l'm't's' emer
SFX b4 ener ènera/n'q'l'm't's' ener
SFX b4 eper èpera/n'q'l'm't's' eper
SFX b4 erer èrera/n'q'l'm't's' erer
SFX b4 eser èsera/n'q'l'm't's' eser
SFX b4 ever èvera/n'q'l'm't's' ever
SFX b4 evrer èvrera/n'q'l'm't's' evrer
SFX b4 eter ètera/n'q'l'm't's' eter
SFX b4 eler èlera/n'q'l'm't's' eler
SFX b4 ecer ècerons/n'q'l't' ecer
SFX b4 emer èmerons/n'q'l't' emer
SFX b4 ener ènerons/n'q'l't' ener
SFX b4 eper èperons/n'q'l't' eper
SFX b4 erer èrerons/n'q'l't' erer
SFX b4 eser èserons/n'q'l't' eser
SFX b4 ever èverons/n'q'l't' ever
SFX b4 evrer èvrerons/n'q'l't' evrer
SFX b4 eter èterons/n'q'l't' eter
SFX b4 eler èlerons/n'q'l't' eler
SFX b4 ecer ècerez/n'q'l'm' ecer
SFX b4 emer èmerez/n'q'l'm' emer
SFX b4 ener ènerez/n'q'l'm' ener
SFX b4 eper èperez/n'q'l'm' eper
SFX b4 erer èrerez/n'q'l'm' erer
SFX b4 eser èserez/n'q'l'm' eser
SFX b4 ever èverez/n'q'l'm' ever
SFX b4 evrer èvrerez/n'q'l'm' evrer
SFX b4 eter èterez/n'q'l'm' eter
SFX b4 eler èlerez/n'q'l'm' eler
SFX b4 ecer èceront/n'q'l'm't's' ecer
SFX b4 emer èmeront/n'q'l'm't's' emer
SFX b4 ener èneront/n'q'l'm't's' ener
SFX b4 eper èperont/n'q'l'm't's' eper
SFX b4 erer èreront/n'q'l'm't's' erer
SFX b4 eser èseront/n'q'l'm't's' eser
SFX b4 ever èveront/n'q'l'm't's' ever
SFX b4 evrer èvreront/n'q'l'm't's' evrer
SFX b4 eter èteront/n'q'l'm't's' eter
SFX b4 eler èleront/n'q'l'm't's' eler
SFX b4 ecer ècerais/n'q'j'l'm't' ecer
SFX b4 emer èmerais/n'q'j'l'm't' emer
SFX b4 ener ènerais/n'q'j'l'm't' ener
SFX b4 eper èperais/n'q'j'l'm't' eper
SFX b4 erer èrerais/n'q'j'l'm't' erer
SFX b4 eser èserais/n'q'j'l'm't' eser
SFX b4 ever èverais/n'q'j'l'm't' ever
SFX b4 evrer èvrerais/n'q'j'l'm't' evrer
SFX b4 eter èterais/n'q'j'l'm't' eter
SFX b4 eler èlerais/n'q'j'l'm't' eler
SFX b4 ecer ècerait/n'q'l'm't's' ecer
SFX b4 emer èmerait/n'q'l'm't's' emer
SFX b4 ener ènerait/n'q'l'm't's' ener
SFX b4 eper èperait/n'q'l'm't's' eper
SFX b4 erer èrerait/n'q'l'm't's' erer
SFX b4 eser èserait/n'q'l'm't's' eser
SFX b4 ever èverait/n'q'l'm't's' ever
SFX b4 evrer èvrerait/n'q'l'm't's' evrer
SFX b4 eter èterait/n'q'l'm't's' eter
SFX b4 eler èlerait/n'q'l'm't's' eler
SFX b4 ecer ècerions/n'q'l't' ecer
SFX b4 emer èmerions/n'q'l't' emer
SFX b4 ener ènerions/n'q'l't' ener
SFX b4 eper èperions/n'q'l't' eper
SFX b4 erer èrerions/n'q'l't' erer
SFX b4 eser èserions/n'q'l't' eser
SFX b4 ever èverions/n'q'l't' ever
SFX b4 evrer èvrerions/n'q'l't' evrer
SFX b4 eter èterions/n'q'l't' eter
SFX b4 eler èlerions/n'q'l't' eler
SFX b4 ecer èceriez/n'q'l'm' ecer
SFX b4 emer èmeriez/n'q'l'm' emer
SFX b4 ener èneriez/n'q'l'm' ener
SFX b4 eper èperiez/n'q'l'm' eper
SFX b4 erer èreriez/n'q'l'm' erer
SFX b4 eser èseriez/n'q'l'm' eser
SFX b4 ever èveriez/n'q'l'm' ever
SFX b4 evrer èvreriez/n'q'l'm' evrer
SFX b4 eter èteriez/n'q'l'm' eter
SFX b4 eler èleriez/n'q'l'm' eler
SFX b4 ecer èceraient/n'q'l'm't's' ecer
SFX b4 emer èmeraient/n'q'l'm't's' emer
SFX b4 ener èneraient/n'q'l'm't's' ener
SFX b4 eper èperaient/n'q'l'm't's' eper
SFX b4 erer èreraient/n'q'l'm't's' erer
SFX b4 eser èseraient/n'q'l'm't's' eser
SFX b4 ever èveraient/n'q'l'm't's' ever
SFX b4 evrer èvreraient/n'q'l'm't's' evrer
SFX b4 eter èteraient/n'q'l'm't's' eter
SFX b4 eler èleraient/n'q'l'm't's' eler
SFX b4 er asse/n'q'j'l'm't' [^c]er
SFX b4 cer çasse/n'q'j'l'm't' cer
SFX b4 er asses/n'q'l'm't' [^c]er
SFX b4 cer çasses/n'q'l'm't' cer
SFX b4 er ât/n'q'l'm't's' [^c]er
SFX b4 cer çât/n'q'l'm't's' cer
SFX b4 er assions/n'q'l't' [^c]er
SFX b4 cer çassions/n'q'l't' cer
SFX b4 er assiez/n'q'l'm' [^c]er
SFX b4 cer çassiez/n'q'l'm' cer
SFX b4 er assent/n'q'l'm't's' [^c]er
SFX b4 cer çassent/n'q'l'm't's' cer
SFX b4 ecer èce/n'l'm't' ecer
SFX b4 emer ème/n'l'm't' emer
SFX b4 ener ène/n'l'm't' ener
SFX b4 eper èpe/n'l'm't' eper
SFX b4 erer ère/n'l'm't' erer
SFX b4 eser èse/n'l'm't' eser
SFX b4 ever ève/n'l'm't' ever
SFX b4 evrer èvre/n'l'm't' evrer
SFX b4 eter ète/n'l'm't' eter
SFX b4 eler èle/n'l'm't' eler
SFX b4 er ons/n'l' [^c]er
SFX b4 cer çons/n'l' cer
SFX b4 er ez/n'l'm' er
SFX b5 Y 190
SFX b5 er er/n'q'd'm't's' er
SFX b5 er ant/n'q'm't's' [^c]er
SFX b5 cer çant/n'q'm't's' cer
SFX b5 ecer èce/n'q'j'm't's' ecer
SFX b5 emer ème/n'q'j'm't's' emer
SFX b5 ener ène/n'q'j'm't's' ener
SFX b5 eper èpe/n'q'j'm't's' eper
SFX b5 erer ère/n'q'j'm't's' erer
SFX b5 eser èse/n'q'j'm't's' eser
SFX b5 ever ève/n'q'j'm't's' ever
SFX b5 evrer èvre/n'q'j'm't's' evrer
SFX b5 eter ète/n'q'j'm't's' eter
SFX b5 eler èle/n'q'j'm't's' eler
SFX b5 ecer èces/n'm't' ecer
SFX b5 emer èmes/n'm't' emer
SFX b5 ener ènes/n'm't' ener
SFX b5 eper èpes/n'm't' eper
SFX b5 erer ères/n'm't' erer
SFX b5 eser èses/n'm't' eser
SFX b5 ever èves/n'm't' ever
SFX b5 evrer èvres/n'm't' evrer
SFX b5 eter ètes/n'm't' eter
SFX b5 eler èles/n'm't' eler
SFX b5 er ons/n't' [^c]er
SFX b5 cer çons/n't' cer
SFX b5 er ez/n'm' er
SFX b5 ecer ècent/n'q'm't's' ecer
SFX b5 emer èment/n'q'm't's' emer
SFX b5 ener ènent/n'q'm't's' ener
SFX b5 eper èpent/n'q'm't's' eper
SFX b5 erer èrent/n'q'm't's' erer
SFX b5 eser èsent/n'q'm't's' eser
SFX b5 ever èvent/n'q'm't's' ever
SFX b5 evrer èvrent/n'q'm't's' evrer
SFX b5 eter ètent/n'q'm't's' eter
SFX b5 eler èlent/n'q'm't's' eler
SFX b5 er ais/n'j'm't' [^c]er
SFX b5 cer çais/n'j'm't' cer
SFX b5 er ait/n'q'm't's' [^c]er
SFX b5 cer çait/n'q'm't's' cer
SFX b5 er ions/n't' er
SFX b5 er iez/n'm' er
SFX b5 er aient/n'q'm't's' [^c]er
SFX b5 cer çaient/n'q'm't's' cer
SFX b5 er ai/n'j'm't' [^c]er
SFX b5 cer çai/n'j'm't' cer
SFX b5 er as/n'm't' [^c]er
SFX b5 cer ças/n'm't' cer
SFX b5 er a/n'q'm't's' [^c]er
SFX b5 cer ça/n'q'm't's' cer
SFX b5 er âmes/n't' [^c]er
SFX b5 cer çâmes/n't' cer
SFX b5 er âtes/n'm' [^c]er
SFX b5 cer çâtes/n'm' cer
SFX b5 er èrent/n'q'm't's' er
SFX b5 ecer ècerai/n'j'm't' ecer
SFX b5 emer èmerai/n'j'm't' emer
SFX b5 ener ènerai/n'j'm't' ener
SFX b5 eper èperai/n'j'm't' eper
SFX b5 erer èrerai/n'j'm't' erer
SFX b5 eser èserai/n'j'm't' eser
SFX b5 ever èverai/n'j'm't' ever
SFX b5 evrer èvrerai/n'j'm't' evrer
SFX b5 eter èterai/n'j'm't' eter
SFX b5 eler èlerai/n'j'm't' eler
SFX b5 ecer èceras/n'm't' ecer
SFX b5 emer èmeras/n'm't' emer
SFX b5 ener èneras/n'm't' ener
SFX b5 eper èperas/n'm't' eper
SFX b5 erer èreras/n'm't' erer
SFX b5 eser èseras/n'm't' eser
SFX b5 ever èveras/n'm't' ever
SFX b5 evrer èvreras/n'm't' evrer
SFX b5 eter èteras/n'm't' eter
SFX b5 eler èleras/n'm't' eler
SFX b5 ecer ècera/n'q'm't's' ecer
SFX b5 emer èmera/n'q'm't's' emer
SFX b5 ener ènera/n'q'm't's' ener
SFX b5 eper èpera/n'q'm't's' eper
SFX b5 erer èrera/n'q'm't's' erer
SFX b5 eser èsera/n'q'm't's' eser
SFX b5 ever èvera/n'q'm't's' ever
SFX b5 evrer èvrera/n'q'm't's' evrer
SFX b5 eter ètera/n'q'm't's' eter
SFX b5 eler èlera/n'q'm't's' eler
SFX b5 ecer ècerons/n't' ecer
SFX b5 emer èmerons/n't' emer
SFX b5 ener ènerons/n't' ener
SFX b5 eper èperons/n't' eper
SFX b5 erer èrerons/n't' erer
SFX b5 eser èserons/n't' eser
SFX b5 ever èverons/n't' ever
SFX b5 evrer èvrerons/n't' evrer
SFX b5 eter èterons/n't' eter
SFX b5 eler èlerons/n't' eler
SFX b5 ecer ècerez/n'm' ecer
SFX b5 emer èmerez/n'm' emer
SFX b5 ener ènerez/n'm' ener
SFX b5 eper èperez/n'm' eper
SFX b5 erer èrerez/n'm' erer
SFX b5 eser èserez/n'm' eser
SFX b5 ever èverez/n'm' ever
SFX b5 evrer èvrerez/n'm' evrer
SFX b5 eter èterez/n'm' eter
SFX b5 eler èlerez/n'm' eler
SFX b5 ecer èceront/n'q'm't's' ecer
SFX b5 emer èmeront/n'q'm't's' emer
SFX b5 ener èneront/n'q'm't's' ener
SFX b5 eper èperont/n'q'm't's' eper
SFX b5 erer èreront/n'q'm't's' erer
SFX b5 eser èseront/n'q'm't's' eser
SFX b5 ever èveront/n'q'm't's' ever
SFX b5 evrer èvreront/n'q'm't's' evrer
SFX b5 eter èteront/n'q'm't's' eter
SFX b5 eler èleront/n'q'm't's' eler
SFX b5 ecer ècerais/n'j'm't' ecer
SFX b5 emer èmerais/n'j'm't' emer
SFX b5 ener ènerais/n'j'm't' ener
SFX b5 eper èperais/n'j'm't' eper
SFX b5 erer èrerais/n'j'm't' erer
SFX b5 eser èserais/n'j'm't' eser
SFX b5 ever èverais/n'j'm't' ever
SFX b5 evrer èvrerais/n'j'm't' evrer
SFX b5 eter èterais/n'j'm't' eter
SFX b5 eler èlerais/n'j'm't' eler
SFX b5 ecer ècerait/n'q'm't's' ecer
SFX b5 emer èmerait/n'q'm't's' emer
SFX b5 ener ènerait/n'q'm't's' ener
SFX b5 eper èperait/n'q'm't's' eper
SFX b5 erer èrerait/n'q'm't's' erer
SFX b5 eser èserait/n'q'm't's' eser
SFX b5 ever èverait/n'q'm't's' ever
SFX b5 evrer èvrerait/n'q'm't's' evrer
SFX b5 eter èterait/n'q'm't's' eter
SFX b5 eler èlerait/n'q'm't's' eler
SFX b5 ecer ècerions/n't' ecer
SFX b5 emer èmerions/n't' emer
SFX b5 ener ènerions/n't' ener
SFX b5 eper èperions/n't' eper
SFX b5 erer èrerions/n't' erer
SFX b5 eser èserions/n't' eser
SFX b5 ever èverions/n't' ever
SFX b5 evrer èvrerions/n't' evrer
SFX b5 eter èterions/n't' eter
SFX b5 eler èlerions/n't' eler
SFX b5 ecer èceriez/n'm' ecer
SFX b5 emer èmeriez/n'm' emer
SFX b5 ener èneriez/n'm' ener
SFX b5 eper èperiez/n'm' eper
SFX b5 erer èreriez/n'm' erer
SFX b5 eser èseriez/n'm' eser
SFX b5 ever èveriez/n'm' ever
SFX b5 evrer èvreriez/n'm' evrer
SFX b5 eter èteriez/n'm' eter
SFX b5 eler èleriez/n'm' eler
SFX b5 ecer èceraient/n'q'm't's' ecer
SFX b5 emer èmeraient/n'q'm't's' emer
SFX b5 ener èneraient/n'q'm't's' ener
SFX b5 eper èperaient/n'q'm't's' eper
SFX b5 erer èreraient/n'q'm't's' erer
SFX b5 eser èseraient/n'q'm't's' eser
SFX b5 ever èveraient/n'q'm't's' ever
SFX b5 evrer èvreraient/n'q'm't's' evrer
SFX b5 eter èteraient/n'q'm't's' eter
SFX b5 eler èleraient/n'q'm't's' eler
SFX b5 er asse/n'j'm't' [^c]er
SFX b5 cer çasse/n'j'm't' cer
SFX b5 er asses/n'm't' [^c]er
SFX b5 cer çasses/n'm't' cer
SFX b5 er ât/n'q'm't's' [^c]er
SFX b5 cer çât/n'q'm't's' cer
SFX b5 er assions/n't' [^c]er
SFX b5 cer çassions/n't' cer
SFX b5 er assiez/n'm' [^c]er
SFX b5 cer çassiez/n'm' cer
SFX b5 er assent/n'q'm't's' [^c]er
SFX b5 cer çassent/n'q'm't's' cer
SFX b5 ecer èce/n'm' ecer
SFX b5 emer ème/n'm' emer
SFX b5 ener ène/n'm' ener
SFX b5 eper èpe/n'm' eper
SFX b5 erer ère/n'm' erer
SFX b5 eser èse/n'm' eser
SFX b5 ever ève/n'm' ever
SFX b5 evrer èvre/n'm' evrer
SFX b5 eter ète/n'm' eter
SFX b5 eler èle/n'm' eler
SFX b5 er ons/n' [^c]er
SFX b5 cer çons/n' cer
SFX b5 er ez/n' er
SFX c0 N 151
SFX c0 er ant [^cg]er
SFX c0 écer éçant écer
SFX c0 éger égeant éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 ébrer èbres ébrer
SFX c0 écer èces écer
SFX c0 écher èches écher
SFX c0 écrer ècres écrer
SFX c0 éder èdes éder
SFX c0 éger èges éger
SFX c0 égler ègles égler
SFX c0 égner ègnes égner
SFX c0 égrer ègres égrer
SFX c0 éguer ègues éguer
SFX c0 éler èles éler
SFX c0 émer èmes émer
SFX c0 éner ènes éner
SFX c0 éper èpes éper
SFX c0 équer èques équer
SFX c0 érer ères érer
SFX c0 éser èses éser
SFX c0 éter ètes éter
SFX c0 étrer ètres étrer
SFX c0 évrer èvres évrer
SFX c0 éyer èyes éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c0 ébrer èbrent ébrer
SFX c0 écer ècent écer
SFX c0 écher èchent écher
SFX c0 écrer ècrent écrer
SFX c0 éder èdent éder
SFX c0 éger ègent éger
SFX c0 égler èglent égler
SFX c0 égner ègnent égner
SFX c0 égrer ègrent égrer
SFX c0 éguer èguent éguer
SFX c0 éler èlent éler
SFX c0 émer èment émer
SFX c0 éner ènent éner
SFX c0 éper èpent éper
SFX c0 équer èquent équer
SFX c0 érer èrent érer
SFX c0 éser èsent éser
SFX c0 éter ètent éter
SFX c0 étrer ètrent étrer
SFX c0 évrer èvrent évrer
SFX c0 éyer èyent éyer
SFX c0 er ais [^cg]er
SFX c0 écer éçais écer
SFX c0 éger égeais éger
SFX c0 er ait [^cg]er
SFX c0 écer éçait écer
SFX c0 éger égeait éger
SFX c0 er ions er
SFX c0 er iez er
SFX c0 er aient [^cg]er
SFX c0 écer éçaient écer
SFX c0 éger égeaient éger
SFX c0 er ai [^cg]er
SFX c0 écer éçai écer
SFX c0 éger égeai éger
SFX c0 er as [^cg]er
SFX c0 écer éças écer
SFX c0 éger égeas éger
SFX c0 er a [^cg]er
SFX c0 écer éça écer
SFX c0 éger égea éger
SFX c0 er âmes [^cg]er
SFX c0 écer éçâmes écer
SFX c0 éger égeâmes éger
SFX c0 er âtes [^cg]er
SFX c0 écer éçâtes écer
SFX c0 éger égeâtes éger
SFX c0 er èrent er
SFX c0 er erai er
SFX c0 er eras er
SFX c0 er era er
SFX c0 er erons er
SFX c0 er erez er
SFX c0 er eront er
SFX c0 er erais er
SFX c0 er erait er
SFX c0 er erions er
SFX c0 er eriez er
SFX c0 er eraient er
SFX c0 er asse [^cg]er
SFX c0 écer éçasse écer
SFX c0 éger égeasse éger
SFX c0 er asses [^cg]er
SFX c0 écer éçasses écer
SFX c0 éger égeasses éger
SFX c0 er ât [^cg]er
SFX c0 écer éçât écer
SFX c0 éger égeât éger
SFX c0 er assions [^cg]er
SFX c0 écer éçassions écer
SFX c0 éger égeassions éger
SFX c0 er assiez [^cg]er
SFX c0 écer éçassiez écer
SFX c0 éger égeassiez éger
SFX c0 er assent [^cg]er
SFX c0 écer éçassent écer
SFX c0 éger égeassent éger
SFX c0 ébrer èbre ébrer
SFX c0 écer èce écer
SFX c0 écher èche écher
SFX c0 écrer ècre écrer
SFX c0 éder ède éder
SFX c0 éger ège éger
SFX c0 égler ègle égler
SFX c0 égner ègne égner
SFX c0 égrer ègre égrer
SFX c0 éguer ègue éguer
SFX c0 éler èle éler
SFX c0 émer ème émer
SFX c0 éner ène éner
SFX c0 éper èpe éper
SFX c0 équer èque équer
SFX c0 érer ère érer
SFX c0 éser èse éser
SFX c0 éter ète éter
SFX c0 étrer ètre étrer
SFX c0 évrer èvre évrer
SFX c0 éyer èye éyer
SFX c0 er ons [^cg]er
SFX c0 écer éçons écer
SFX c0 éger égeons éger
SFX c0 er ez er
SFX c1 Y 152
SFX c1 r r/n'q'd' er
SFX c1 er ant/n'q' [^cg]er
SFX c1 écer éçant/n'q' écer
SFX c1 éger égeant/n'q' éger
SFX c1 ébrer èbre/n'q'j' ébrer
SFX c1 écer èce/n'q'j' écer
SFX c1 écher èche/n'q'j' écher
SFX c1 écrer ècre/n'q'j' écrer
SFX c1 éder ède/n'q'j' éder
SFX c1 éger ège/n'q'j' éger
SFX c1 égler ègle/n'q'j' égler
SFX c1 égner ègne/n'q'j' égner
SFX c1 égrer ègre/n'q'j' égrer
SFX c1 éguer ègue/n'q'j' éguer
SFX c1 éler èle/n'q'j' éler
SFX c1 émer ème/n'q'j' émer
SFX c1 éner ène/n'q'j' éner
SFX c1 éper èpe/n'q'j' éper
SFX c1 équer èque/n'q'j' équer
SFX c1 érer ère/n'q'j' érer
SFX c1 éser èse/n'q'j' éser
SFX c1 éter ète/n'q'j' éter
SFX c1 étrer ètre/n'q'j' étrer
SFX c1 évrer èvre/n'q'j' évrer
SFX c1 éyer èye/n'q'j' éyer
SFX c1 ébrer èbres/n' ébrer
SFX c1 écer èces/n' écer
SFX c1 écher èches/n' écher
SFX c1 écrer ècres/n' écrer
SFX c1 éder èdes/n' éder
SFX c1 éger èges/n' éger
SFX c1 égler ègles/n' égler
SFX c1 égner ègnes/n' égner
SFX c1 égrer ègres/n' égrer
SFX c1 éguer ègues/n' éguer
SFX c1 éler èles/n' éler
SFX c1 émer èmes/n' émer
SFX c1 éner ènes/n' éner
SFX c1 éper èpes/n' éper
SFX c1 équer èques/n' équer
SFX c1 érer ères/n' érer
SFX c1 éser èses/n' éser
SFX c1 éter ètes/n' éter
SFX c1 étrer ètres/n' étrer
SFX c1 évrer èvres/n' évrer
SFX c1 éyer èyes/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c1 ébrer èbrent/n'q' ébrer
SFX c1 écer ècent/n'q' écer
SFX c1 écher èchent/n'q' écher
SFX c1 écrer ècrent/n'q' écrer
SFX c1 éder èdent/n'q' éder
SFX c1 éger ègent/n'q' éger
SFX c1 égler èglent/n'q' égler
SFX c1 égner ègnent/n'q' égner
SFX c1 égrer ègrent/n'q' égrer
SFX c1 éguer èguent/n'q' éguer
SFX c1 éler èlent/n'q' éler
SFX c1 émer èment/n'q' émer
SFX c1 éner ènent/n'q' éner
SFX c1 éper èpent/n'q' éper
SFX c1 équer èquent/n'q' équer
SFX c1 érer èrent/n'q' érer
SFX c1 éser èsent/n'q' éser
SFX c1 éter ètent/n'q' éter
SFX c1 étrer ètrent/n'q' étrer
SFX c1 évrer èvrent/n'q' évrer
SFX c1 éyer èyent/n'q' éyer
SFX c1 er ais/n'j' [^cg]er
SFX c1 écer éçais/n'j' écer
SFX c1 éger égeais/n'j' éger
SFX c1 er ait/n'q' [^cg]er
SFX c1 écer éçait/n'q' écer
SFX c1 éger égeait/n'q' éger
SFX c1 er ions/n' er
SFX c1 er iez/n' er
SFX c1 er aient/n'q' [^cg]er
SFX c1 écer éçaient/n'q' écer
SFX c1 éger égeaient/n'q' éger
SFX c1 er ai/n'j' [^cg]er
SFX c1 écer éçai/n'j' écer
SFX c1 éger égeai/n'j' éger
SFX c1 er as/n' [^cg]er
SFX c1 écer éças/n' écer
SFX c1 éger égeas/n' éger
SFX c1 er a/n'q' [^cg]er
SFX c1 écer éça/n'q' écer
SFX c1 éger égea/n'q' éger
SFX c1 er âmes/n' [^cg]er
SFX c1 écer éçâmes/n' écer
SFX c1 éger égeâmes/n' éger
SFX c1 er âtes/n' [^cg]er
SFX c1 écer éçâtes/n' écer
SFX c1 éger égeâtes/n' éger
SFX c1 er èrent/n'q' er
SFX c1 er erai/n'j' er
SFX c1 er eras/n' er
SFX c1 er era/n'q' er
SFX c1 er erons/n' er
SFX c1 er erez/n' er
SFX c1 er eront/n'q' er
SFX c1 er erais/n'j' er
SFX c1 er erait/n'q' er
SFX c1 er erions/n' er
SFX c1 er eriez/n' er
SFX c1 er eraient/n'q' er
SFX c1 er asse/n'j' [^cg]er
SFX c1 écer éçasse/n'j' écer
SFX c1 éger égeasse/n'j' éger
SFX c1 er asses/n' [^cg]er
SFX c1 écer éçasses/n' écer
SFX c1 éger égeasses/n' éger
SFX c1 er ât/n'q' [^cg]er
SFX c1 écer éçât/n'q' écer
SFX c1 éger égeât/n'q' éger
SFX c1 er assions/n' [^cg]er
SFX c1 écer éçassions/n' écer
SFX c1 éger égeassions/n' éger
SFX c1 er assiez/n' [^cg]er
SFX c1 écer éçassiez/n' écer
SFX c1 éger égeassiez/n' éger
SFX c1 er assent/n'q' [^cg]er
SFX c1 écer éçassent/n'q' écer
SFX c1 éger égeassent/n'q' éger
SFX c1 ébrer èbre/n' ébrer
SFX c1 écer èce/n' écer
SFX c1 écher èche/n' écher
SFX c1 écrer ècre/n' écrer
SFX c1 éder ède/n' éder
SFX c1 éger ège/n' éger
SFX c1 égler ègle/n' égler
SFX c1 égner ègne/n' égner
SFX c1 égrer ègre/n' égrer
SFX c1 éguer ègue/n' éguer
SFX c1 éler èle/n' éler
SFX c1 émer ème/n' émer
SFX c1 éner ène/n' éner
SFX c1 éper èpe/n' éper
SFX c1 équer èque/n' équer
SFX c1 érer ère/n' érer
SFX c1 éser èse/n' éser
SFX c1 éter ète/n' éter
SFX c1 étrer ètre/n' étrer
SFX c1 évrer èvre/n' évrer
SFX c1 éyer èye/n' éyer
SFX c1 er ons/n' [^cg]er
SFX c1 écer éçons/n' écer
SFX c1 éger égeons/n' éger
SFX c1 er ez/n' er
SFX c2 Y 152
SFX c2 er er/n'q'd'l'm't's' er
SFX c2 er ant/n'q'l'm't's' [^cg]er
SFX c2 écer éçant/n'q'l'm't's' écer
SFX c2 éger égeant/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c2 écer èce/n'q'j'l'm't's' écer
SFX c2 écher èche/n'q'j'l'm't's' écher
SFX c2 écrer ècre/n'q'j'l'm't's' écrer
SFX c2 éder ède/n'q'j'l'm't's' éder
SFX c2 éger ège/n'q'j'l'm't's' éger
SFX c2 égler ègle/n'q'j'l'm't's' égler
SFX c2 égner ègne/n'q'j'l'm't's' égner
SFX c2 égrer ègre/n'q'j'l'm't's' égrer
SFX c2 éguer ègue/n'q'j'l'm't's' éguer
SFX c2 éler èle/n'q'j'l'm't's' éler
SFX c2 émer ème/n'q'j'l'm't's' émer
SFX c2 éner ène/n'q'j'l'm't's' éner
SFX c2 éper èpe/n'q'j'l'm't's' éper
SFX c2 équer èque/n'q'j'l'm't's' équer
SFX c2 érer ère/n'q'j'l'm't's' érer
SFX c2 éser èse/n'q'j'l'm't's' éser
SFX c2 éter ète/n'q'j'l'm't's' éter
SFX c2 étrer ètre/n'q'j'l'm't's' étrer
SFX c2 évrer èvre/n'q'j'l'm't's' évrer
SFX c2 éyer èye/n'q'j'l'm't's' éyer
SFX c2 ébrer èbres/n'q'l'm' ébrer
SFX c2 écer èces/n'q'l'm' écer
SFX c2 écher èches/n'q'l'm' écher
SFX c2 écrer ècres/n'q'l'm' écrer
SFX c2 éder èdes/n'q'l'm' éder
SFX c2 éger èges/n'q'l'm' éger
SFX c2 égler ègles/n'q'l'm' égler
SFX c2 égner ègnes/n'q'l'm' égner
SFX c2 égrer ègres/n'q'l'm' égrer
SFX c2 éguer ègues/n'q'l'm' éguer
SFX c2 éler èles/n'q'l'm' éler
SFX c2 émer èmes/n'q'l'm' émer
SFX c2 éner ènes/n'q'l'm' éner
SFX c2 éper èpes/n'q'l'm' éper
SFX c2 équer èques/n'q'l'm' équer
SFX c2 érer ères/n'q'l'm' érer
SFX c2 éser èses/n'q'l'm' éser
SFX c2 éter ètes/n'q'l'm' éter
SFX c2 étrer ètres/n'q'l'm' étrer
SFX c2 évrer èvres/n'q'l'm' évrer
SFX c2 éyer èyes/n'q'l'm' éyer
SFX c2 er ons/n'q'l't' [^cg]er
SFX c2 écer éçons/n'q'l't' écer
SFX c2 éger égeons/n'q'l't' éger
SFX c2 er ez/n'q'l'm' er
SFX c2 ébrer èbrent/n'q'l'm't's' ébrer
SFX c2 écer ècent/n'q'l'm't's' écer
SFX c2 écher èchent/n'q'l'm't's' écher
SFX c2 écrer ècrent/n'q'l'm't's' écrer
SFX c2 éder èdent/n'q'l'm't's' éder
SFX c2 éger ègent/n'q'l'm't's' éger
SFX c2 égler èglent/n'q'l'm't's' égler
SFX c2 égner ègnent/n'q'l'm't's' égner
SFX c2 égrer ègrent/n'q'l'm't's' égrer
SFX c2 éguer èguent/n'q'l'm't's' éguer
SFX c2 éler èlent/n'q'l'm't's' éler
SFX c2 émer èment/n'q'l'm't's' émer
SFX c2 éner ènent/n'q'l'm't's' éner
SFX c2 éper èpent/n'q'l'm't's' éper
SFX c2 équer èquent/n'q'l'm't's' équer
SFX c2 érer èrent/n'q'l'm't's' érer
SFX c2 éser èsent/n'q'l'm't's' éser
SFX c2 éter ètent/n'q'l'm't's' éter
SFX c2 étrer ètrent/n'q'l'm't's' étrer
SFX c2 évrer èvrent/n'q'l'm't's' évrer
SFX c2 éyer èyent/n'q'l'm't's' éyer
SFX c2 er ais/n'q'j'l'm't' [^cg]er
SFX c2 écer éçais/n'q'j'l'm't' écer
SFX c2 éger égeais/n'q'j'l'm't' éger
SFX c2 er ait/n'q'l'm't's' [^cg]er
SFX c2 écer éçait/n'q'l'm't's' écer
SFX c2 éger égeait/n'q'l'm't's' éger
SFX c2 er ions/n'q'l't' er
SFX c2 er iez/n'q'l'm' er
SFX c2 er aient/n'q'l'm't's' [^cg]er
SFX c2 écer éçaient/n'q'l'm't's' écer
SFX c2 éger égeaient/n'q'l'm't's' éger
SFX c2 er ai/n'q'j'l't' [^cg]er
SFX c2 écer éçai/n'q'j'l't' écer
SFX c2 éger égeai/n'q'j'l't' éger
SFX c2 er as/n'q'l'm' [^cg]er
SFX c2 écer éças/n'q'l'm' écer
SFX c2 éger égeas/n'q'l'm' éger
SFX c2 er a/n'q'l'm't's' [^cg]er
SFX c2 écer éça/n'q'l'm't's' écer
SFX c2 éger égea/n'q'l'm't's' éger
SFX c2 er âmes/n'q'l't' [^cg]er
SFX c2 écer éçâmes/n'q'l't' écer
SFX c2 éger égeâmes/n'q'l't' éger
SFX c2 er âtes/n'q'l'm' [^cg]er
SFX c2 écer éçâtes/n'q'l'm' écer
SFX c2 éger égeâtes/n'q'l'm' éger
SFX c2 er èrent/n'q'l'm't's' er
SFX c2 er erai/n'q'j'l't' er
SFX c2 er eras/n'q'l'm' er
SFX c2 er era/n'q'l'm't's' er
SFX c2 er erons/n'q'l't' er
SFX c2 er erez/n'q'l'm' er
SFX c2 er eront/n'q'l'm't's' er
SFX c2 er erais/n'q'j'l'm't' er
SFX c2 er erait/n'q'l'm't's' er
SFX c2 er erions/n'q'l't' er
SFX c2 er eriez/n'q'l'm' er
SFX c2 er eraient/n'q'l'm't's' er
SFX c2 er asse/n'q'j'l't' [^cg]er
SFX c2 écer éçasse/n'q'j'l't' écer
SFX c2 éger égeasse/n'q'j'l't' éger
SFX c2 er asses/n'q'l'm' [^cg]er
SFX c2 écer éçasses/n'q'l'm' écer
SFX c2 éger égeasses/n'q'l'm' éger
SFX c2 er ât/n'q'l'm't's' [^cg]er
SFX c2 écer éçât/n'q'l'm't's' écer
SFX c2 éger égeât/n'q'l'm't's' éger
SFX c2 er assions/n'q'l't' [^cg]er
SFX c2 écer éçassions/n'q'l't' écer
SFX c2 éger égeassions/n'q'l't' éger
SFX c2 er assiez/n'q'l'm' [^cg]er
SFX c2 écer éçassiez/n'q'l'm' écer
SFX c2 éger égeassiez/n'q'l'm' éger
SFX c2 er assent/n'q'l'm't's' [^cg]er
SFX c2 écer éçassent/n'q'l'm't's' écer
SFX c2 éger égeassent/n'q'l'm't's' éger
SFX c2 ébrer èbre/n'l'm' ébrer
SFX c2 écer èce/n'l'm' écer
SFX c2 écher èche/n'l'm' écher
SFX c2 écrer ècre/n'l'm' écrer
SFX c2 éder ède/n'l'm' éder
SFX c2 éger ège/n'l'm' éger
SFX c2 égler ègle/n'l'm' égler
SFX c2 égner ègne/n'l'm' égner
SFX c2 égrer ègre/n'l'm' égrer
SFX c2 éguer ègue/n'l'm' éguer
SFX c2 éler èle/n'l'm' éler
SFX c2 émer ème/n'l'm' émer
SFX c2 éner ène/n'l'm' éner
SFX c2 éper èpe/n'l'm' éper
SFX c2 équer èque/n'l'm' équer
SFX c2 érer ère/n'l'm' érer
SFX c2 éser èse/n'l'm' éser
SFX c2 éter ète/n'l'm' éter
SFX c2 étrer ètre/n'l'm' étrer
SFX c2 évrer èvre/n'l'm' évrer
SFX c2 éyer èye/n'l'm' éyer
SFX c2 er ons/n'l' [^cg]er
SFX c2 écer éçons/n'l' écer
SFX c2 éger égeons/n'l' éger
SFX c2 er ez/n'l'm' er
SFX c3 Y 152
SFX c3 er er/m't's' er
SFX c3 er ant/m't's' [^cg]er
SFX c3 écer éçant/m't's' écer
SFX c3 éger égeant/m't's' éger
SFX c3 ébrer èbre/m's' ébrer
SFX c3 écer èce/m's' écer
SFX c3 écher èche/m's' écher
SFX c3 écrer ècre/m's' écrer
SFX c3 éder ède/m's' éder
SFX c3 éger ège/m's' éger
SFX c3 égler ègle/m's' égler
SFX c3 égner ègne/m's' égner
SFX c3 égrer ègre/m's' égrer
SFX c3 éguer ègue/m's' éguer
SFX c3 éler èle/m's' éler
SFX c3 émer ème/m's' émer
SFX c3 éner ène/m's' éner
SFX c3 éper èpe/m's' éper
SFX c3 équer èque/m's' équer
SFX c3 érer ère/m's' érer
SFX c3 éser èse/m's' éser
SFX c3 éter ète/m's' éter
SFX c3 étrer ètre/m's' étrer
SFX c3 évrer èvre/m's' évrer
SFX c3 éyer èye/m's' éyer
SFX c3 ébrer èbres/t' ébrer
SFX c3 écer èces/t' écer
SFX c3 écher èches/t' écher
SFX c3 écrer ècres/t' écrer
SFX c3 éder èdes/t' éder
SFX c3 éger èges/t' éger
SFX c3 égler ègles/t' égler
SFX c3 égner ègnes/t' égner
SFX c3 égrer ègres/t' égrer
SFX c3 éguer ègues/t' éguer
SFX c3 éler èles/t' éler
SFX c3 émer èmes/t' émer
SFX c3 éner ènes/t' éner
SFX c3 éper èpes/t' éper
SFX c3 équer èques/t' équer
SFX c3 érer ères/t' érer
SFX c3 éser èses/t' éser
SFX c3 éter ètes/t' éter
SFX c3 étrer ètres/t' étrer
SFX c3 évrer èvres/t' évrer
SFX c3 éyer èyes/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c3 ébrer èbrent/s' ébrer
SFX c3 écer ècent/s' écer
SFX c3 écher èchent/s' écher
SFX c3 écrer ècrent/s' écrer
SFX c3 éder èdent/s' éder
SFX c3 éger ègent/s' éger
SFX c3 égler èglent/s' égler
SFX c3 égner ègnent/s' égner
SFX c3 égrer ègrent/s' égrer
SFX c3 éguer èguent/s' éguer
SFX c3 éler èlent/s' éler
SFX c3 émer èment/s' émer
SFX c3 éner ènent/s' éner
SFX c3 éper èpent/s' éper
SFX c3 équer èquent/s' équer
SFX c3 érer èrent/s' érer
SFX c3 éser èsent/s' éser
SFX c3 éter ètent/s' éter
SFX c3 étrer ètrent/s' étrer
SFX c3 évrer èvrent/s' évrer
SFX c3 éyer èyent/s' éyer
SFX c3 er ais/m't' [^cg]er
SFX c3 écer éçais/m't' écer
SFX c3 éger égeais/m't' éger
SFX c3 er ait/s' [^cg]er
SFX c3 écer éçait/s' écer
SFX c3 éger égeait/s' éger
SFX c3 er ions er
SFX c3 er iez er
SFX c3 er aient/s' [^cg]er
SFX c3 écer éçaient/s' écer
SFX c3 éger égeaient/s' éger
SFX c3 er ai/m' [^cg]er
SFX c3 écer éçai/m' écer
SFX c3 éger égeai/m' éger
SFX c3 er as/t' [^cg]er
SFX c3 écer éças/t' écer
SFX c3 éger égeas/t' éger
SFX c3 er a/s' [^cg]er
SFX c3 écer éça/s' écer
SFX c3 éger égea/s' éger
SFX c3 er âmes [^cg]er
SFX c3 écer éçâmes écer
SFX c3 éger égeâmes éger
SFX c3 er âtes [^cg]er
SFX c3 écer éçâtes écer
SFX c3 éger égeâtes éger
SFX c3 er èrent/s' er
SFX c3 er erai/m' er
SFX c3 er eras/t' er
SFX c3 er era/s' er
SFX c3 er erons er
SFX c3 er erez er
SFX c3 er eront/s' er
SFX c3 er erais/m't' er
SFX c3 er erait/s' er
SFX c3 er erions er
SFX c3 er eriez er
SFX c3 er eraient/s' er
SFX c3 er asse/m' [^cg]er
SFX c3 écer éçasse/m' écer
SFX c3 éger égeasse/m' éger
SFX c3 er asses/t' [^cg]er
SFX c3 écer éçasses/t' écer
SFX c3 éger égeasses/t' éger
SFX c3 er ât/s' [^cg]er
SFX c3 écer éçât/s' écer
SFX c3 éger égeât/s' éger
SFX c3 er assions [^cg]er
SFX c3 écer éçassions écer
SFX c3 éger égeassions éger
SFX c3 er assiez [^cg]er
SFX c3 écer éçassiez écer
SFX c3 éger égeassiez éger
SFX c3 er assent/s' [^cg]er
SFX c3 écer éçassent/s' écer
SFX c3 éger égeassent/s' éger
SFX c3 ébrer èbre/t' ébrer
SFX c3 écer èce/t' écer
SFX c3 écher èche/t' écher
SFX c3 écrer ècre/t' écrer
SFX c3 éder ède/t' éder
SFX c3 éger ège/t' éger
SFX c3 égler ègle/t' égler
SFX c3 égner ègne/t' égner
SFX c3 égrer ègre/t' égrer
SFX c3 éguer ègue/t' éguer
SFX c3 éler èle/t' éler
SFX c3 émer ème/t' émer
SFX c3 éner ène/t' éner
SFX c3 éper èpe/t' éper
SFX c3 équer èque/t' équer
SFX c3 érer ère/t' érer
SFX c3 éser èse/t' éser
SFX c3 éter ète/t' éter
SFX c3 étrer ètre/t' étrer
SFX c3 évrer èvre/t' évrer
SFX c3 éyer èye/t' éyer
SFX c3 er ons [^cg]er
SFX c3 écer éçons écer
SFX c3 éger égeons éger
SFX c3 er ez er
SFX c4 Y 152
SFX c4 er er/n'q'd'l'm't's' er
SFX c4 er ant/n'q'l'm't's' [^cg]er
SFX c4 écer éçant/n'q'l'm't's' écer
SFX c4 éger égeant/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer
SFX c4 écer èce/n'q'j'l'm't's' écer
SFX c4 écher èche/n'q'j'l'm't's' écher
SFX c4 écrer ècre/n'q'j'l'm't's' écrer
SFX c4 éder ède/n'q'j'l'm't's' éder
SFX c4 éger ège/n'q'j'l'm't's' éger
SFX c4 égler ègle/n'q'j'l'm't's' égler
SFX c4 égner ègne/n'q'j'l'm't's' égner
SFX c4 égrer ègre/n'q'j'l'm't's' égrer
SFX c4 éguer ègue/n'q'j'l'm't's' éguer
SFX c4 éler èle/n'q'j'l'm't's' éler
SFX c4 émer ème/n'q'j'l'm't's' émer
SFX c4 éner ène/n'q'j'l'm't's' éner
SFX c4 éper èpe/n'q'j'l'm't's' éper
SFX c4 équer èque/n'q'j'l'm't's' équer
SFX c4 érer ère/n'q'j'l'm't's' érer
SFX c4 éser èse/n'q'j'l'm't's' éser
SFX c4 éter ète/n'q'j'l'm't's' éter
SFX c4 étrer ètre/n'q'j'l'm't's' étrer
SFX c4 évrer èvre/n'q'j'l'm't's' évrer
SFX c4 éyer èye/n'q'j'l'm't's' éyer
SFX c4 ébrer èbres/n'q'l'm't' ébrer
SFX c4 écer èces/n'q'l'm't' écer
SFX c4 écher èches/n'q'l'm't' écher
SFX c4 écrer ècres/n'q'l'm't' écrer
SFX c4 éder èdes/n'q'l'm't' éder
SFX c4 éger èges/n'q'l'm't' éger
SFX c4 égler ègles/n'q'l'm't' égler
SFX c4 égner ègnes/n'q'l'm't' égner
SFX c4 égrer ègres/n'q'l'm't' égrer
SFX c4 éguer ègues/n'q'l'm't' éguer
SFX c4 éler èles/n'q'l'm't' éler
SFX c4 émer èmes/n'q'l'm't' émer
SFX c4 éner ènes/n'q'l'm't' éner
SFX c4 éper èpes/n'q'l'm't' éper
SFX c4 équer èques/n'q'l'm't' équer
SFX c4 érer ères/n'q'l'm't' érer
SFX c4 éser èses/n'q'l'm't' éser
SFX c4 éter ètes/n'q'l'm't' éter
SFX c4 étrer ètres/n'q'l'm't' étrer
SFX c4 évrer èvres/n'q'l'm't' évrer
SFX c4 éyer èyes/n'q'l'm't' éyer
SFX c4 er ons/n'q'l't' [^cg]er
SFX c4 écer éçons/n'q'l't' écer
SFX c4 éger égeons/n'q'l't' éger
SFX c4 er ez/n'q'l'm' er
SFX c4 ébrer èbrent/n'q'l'm't's' ébrer
SFX c4 écer ècent/n'q'l'm't's' écer
SFX c4 écher èchent/n'q'l'm't's' écher
SFX c4 écrer ècrent/n'q'l'm't's' écrer
SFX c4 éder èdent/n'q'l'm't's' éder
SFX c4 éger ègent/n'q'l'm't's' éger
SFX c4 égler èglent/n'q'l'm't's' égler
SFX c4 égner ègnent/n'q'l'm't's' égner
SFX c4 égrer ègrent/n'q'l'm't's' égrer
SFX c4 éguer èguent/n'q'l'm't's' éguer
SFX c4 éler èlent/n'q'l'm't's' éler
SFX c4 émer èment/n'q'l'm't's' émer
SFX c4 éner ènent/n'q'l'm't's' éner
SFX c4 éper èpent/n'q'l'm't's' éper
SFX c4 équer èquent/n'q'l'm't's' équer
SFX c4 érer èrent/n'q'l'm't's' érer
SFX c4 éser èsent/n'q'l'm't's' éser
SFX c4 éter ètent/n'q'l'm't's' éter
SFX c4 étrer ètrent/n'q'l'm't's' étrer
SFX c4 évrer èvrent/n'q'l'm't's' évrer
SFX c4 éyer èyent/n'q'l'm't's' éyer
SFX c4 er ais/n'q'j'l'm't' [^cg]er
SFX c4 écer éçais/n'q'j'l'm't' écer
SFX c4 éger égeais/n'q'j'l'm't' éger
SFX c4 er ait/n'q'l'm't's' [^cg]er
SFX c4 écer éçait/n'q'l'm't's' écer
SFX c4 éger égeait/n'q'l'm't's' éger
SFX c4 er ions/n'q'l't' er
SFX c4 er iez/n'q'l'm' er
SFX c4 er aient/n'q'l'm't's' [^cg]er
SFX c4 écer éçaient/n'q'l'm't's' écer
SFX c4 éger égeaient/n'q'l'm't's' éger
SFX c4 er ai/n'q'j'l'm't' [^cg]er
SFX c4 écer éçai/n'q'j'l'm't' écer
SFX c4 éger égeai/n'q'j'l'm't' éger
SFX c4 er as/n'q'l'm't' [^cg]er
SFX c4 écer éças/n'q'l'm't' écer
SFX c4 éger égeas/n'q'l'm't' éger
SFX c4 er a/n'q'l'm't's' [^cg]er
SFX c4 écer éça/n'q'l'm't's' écer
SFX c4 éger égea/n'q'l'm't's' éger
SFX c4 er âmes/n'q'l't' [^cg]er
SFX c4 écer éçâmes/n'q'l't' écer
SFX c4 éger égeâmes/n'q'l't' éger
SFX c4 er âtes/n'q'l'm' [^cg]er
SFX c4 écer éçâtes/n'q'l'm' écer
SFX c4 éger égeâtes/n'q'l'm' éger
SFX c4 er èrent/n'q'l'm't's' er
SFX c4 er erai/n'q'j'l'm't' er
SFX c4 er eras/n'q'l'm't' er
SFX c4 er era/n'q'l'm't's' er
SFX c4 er erons/n'q'l't' er
SFX c4 er erez/n'q'l'm' er
SFX c4 er eront/n'q'l'm't's' er
SFX c4 er erais/n'q'j'l'm't' er
SFX c4 er erait/n'q'l'm't's' er
SFX c4 er erions/n'q'l't' er
SFX c4 er eriez/n'q'l'm' er
SFX c4 er eraient/n'q'l'm't's' er
SFX c4 er asse/n'q'j'l'm't' [^cg]er
SFX c4 écer éçasse/n'q'j'l'm't' écer
SFX c4 éger égeasse/n'q'j'l'm't' éger
SFX c4 er asses/n'q'l'm't' [^cg]er
SFX c4 écer éçasses/n'q'l'm't' écer
SFX c4 éger égeasses/n'q'l'm't' éger
SFX c4 er ât/n'q'l'm't's' [^cg]er
SFX c4 écer éçât/n'q'l'm't's' écer
SFX c4 éger égeât/n'q'l'm't's' éger
SFX c4 er assions/n'q'l't' [^cg]er
SFX c4 écer éçassions/n'q'l't' écer
SFX c4 éger égeassions/n'q'l't' éger
SFX c4 er assiez/n'q'l'm' [^cg]er
SFX c4 écer éçassiez/n'q'l'm' écer
SFX c4 éger égeassiez/n'q'l'm' éger
SFX c4 er assent/n'q'l'm't's' [^cg]er
SFX c4 écer éçassent/n'q'l'm't's' écer
SFX c4 éger égeassent/n'q'l'm't's' éger
SFX c4 ébrer èbre/n'l'm't' ébrer
SFX c4 écer èce/n'l'm't' écer
SFX c4 écher èche/n'l'm't' écher
SFX c4 écrer ècre/n'l'm't' écrer
SFX c4 éder ède/n'l'm't' éder
SFX c4 éger ège/n'l'm't' éger
SFX c4 égler ègle/n'l'm't' égler
SFX c4 égner ègne/n'l'm't' égner
SFX c4 égrer ègre/n'l'm't' égrer
SFX c4 éguer ègue/n'l'm't' éguer
SFX c4 éler èle/n'l'm't' éler
SFX c4 émer ème/n'l'm't' émer
SFX c4 éner ène/n'l'm't' éner
SFX c4 éper èpe/n'l'm't' éper
SFX c4 équer èque/n'l'm't' équer
SFX c4 érer ère/n'l'm't' érer
SFX c4 éser èse/n'l'm't' éser
SFX c4 éter ète/n'l'm't' éter
SFX c4 étrer ètre/n'l'm't' étrer
SFX c4 évrer èvre/n'l'm't' évrer
SFX c4 éyer èye/n'l'm't' éyer
SFX c4 er ons/n'l' [^cg]er
SFX c4 écer éçons/n'l' écer
SFX c4 éger égeons/n'l' éger
SFX c4 er ez/n'l'm' er
SFX c5 Y 152
SFX c5 er er/n'q'd'm't's' er
SFX c5 er ant/n'q'm't's' [^cg]er
SFX c5 écer éçant/m'q'm't's' écer
SFX c5 éger égeant/m'q'l't's' éger
SFX c5 ébrer èbre/n'q'j'm't's' ébrer
SFX c5 écer èce/n'q'j'm't's' écer
SFX c5 écher èche/n'q'j'm't's' écher
SFX c5 écrer ècre/n'q'j'm't's' écrer
SFX c5 éder ède/n'q'j'm't's' éder
SFX c5 éger ège/n'q'j'm't's' éger
SFX c5 égler ègle/n'q'j'm't's' égler
SFX c5 égner ègne/n'q'j'm't's' égner
SFX c5 égrer ègre/n'q'j'm't's' égrer
SFX c5 éguer ègue/n'q'j'm't's' éguer
SFX c5 éler èle/n'q'j'm't's' éler
SFX c5 émer ème/n'q'j'm't's' émer
SFX c5 éner ène/n'q'j'm't's' éner
SFX c5 éper èpe/n'q'j'm't's' éper
SFX c5 équer èque/n'q'j'm't's' équer
SFX c5 érer ère/n'q'j'm't's' érer
SFX c5 éser èse/n'q'j'm't's' éser
SFX c5 éter ète/n'q'j'm't's' éter
SFX c5 étrer ètre/n'q'j'm't's' étrer
SFX c5 évrer èvre/n'q'j'm't's' évrer
SFX c5 éyer èye/n'q'j'm't's' éyer
SFX c5 ébrer èbres/n'm't' ébrer
SFX c5 écer èces/n'm't' écer
SFX c5 écher èches/n'm't' écher
SFX c5 écrer ècres/n'm't' écrer
SFX c5 éder èdes/n'm't' éder
SFX c5 éger èges/n'm't' éger
SFX c5 égler ègles/n'm't' égler
SFX c5 égner ègnes/n'm't' égner
SFX c5 égrer ègres/n'm't' égrer
SFX c5 éguer ègues/n'm't' éguer
SFX c5 éler èles/n'm't' éler
SFX c5 émer èmes/n'm't' émer
SFX c5 éner ènes/n'm't' éner
SFX c5 éper èpes/n'm't' éper
SFX c5 équer èques/n'm't' équer
SFX c5 érer ères/n'm't' érer
SFX c5 éser èses/n'm't' éser
SFX c5 éter ètes/n'm't' éter
SFX c5 étrer ètres/n'm't' étrer
SFX c5 évrer èvres/n'm't' évrer
SFX c5 éyer èyes/n'm't' éyer
SFX c5 er ons/n't' [^cg]er
SFX c5 écer éçons/n't' écer
SFX c5 éger égeons/n't' éger
SFX c5 er ez/n'm' er
SFX c5 ébrer èbrent/n'q'm't's' ébrer
SFX c5 écer ècent/n'q'm't's' écer
SFX c5 écher èchent/n'q'm't's' écher
SFX c5 écrer ècrent/n'q'm't's' écrer
SFX c5 éder èdent/n'q'm't's' éder
SFX c5 éger ègent/n'q'm't's' éger
SFX c5 égler èglent/n'q'm't's' égler
SFX c5 égner ègnent/n'q'm't's' égner
SFX c5 égrer ègrent/n'q'm't's' égrer
SFX c5 éguer èguent/n'q'm't's' éguer
SFX c5 éler èlent/n'q'm't's' éler
SFX c5 émer èment/n'q'm't's' émer
SFX c5 éner ènent/n'q'm't's' éner
SFX c5 éper èpent/n'q'm't's' éper
SFX c5 équer èquent/n'q'm't's' équer
SFX c5 érer èrent/n'q'm't's' érer
SFX c5 éser èsent/n'q'm't's' éser
SFX c5 éter ètent/n'q'm't's' éter
SFX c5 étrer ètrent/n'q'm't's' étrer
SFX c5 évrer èvrent/n'q'm't's' évrer
SFX c5 éyer èyent/n'q'm't's' éyer
SFX c5 er ais/n'j'm't' [^cg]er
SFX c5 écer éçais/n'j'm't' écer
SFX c5 éger égeais/n'j'm't' éger
SFX c5 er ait/n'q'm't's' [^cg]er
SFX c5 écer éçait/n'q'm't's' écer
SFX c5 éger égeait/n'q'm't's' éger
SFX c5 er ions/n't' er
SFX c5 er iez/n'm' er
SFX c5 er aient/n'q'm't's' [^cg]er
SFX c5 écer éçaient/n'q'm't's' écer
SFX c5 éger égeaient/n'q'm't's' éger
SFX c5 er ai/n'j'm't' [^cg]er
SFX c5 écer éçai/n'j'm't' écer
SFX c5 éger égeai/n'j'm't' éger
SFX c5 er as/n'm't' [^cg]er
SFX c5 écer éças/n'm't' écer
SFX c5 éger égeas/n'm't' éger
SFX c5 er a/n'q'm't's' [^cg]er
SFX c5 écer éça/n'q'm't's' écer
SFX c5 éger égea/n'q'm't's' éger
SFX c5 er âmes/n't' [^cg]er
SFX c5 écer éçâmes/n't' écer
SFX c5 éger égeâmes/n't' éger
SFX c5 er âtes/n'm' [^cg]er
SFX c5 écer éçâtes/n'm' écer
SFX c5 éger égeâtes/n'm' éger
SFX c5 er èrent/n'q'm't's' er
SFX c5 er erai/n'j'm't' er
SFX c5 er eras/n'm't' er
SFX c5 er era/n'q'm't's' er
SFX c5 er erons/n't' er
SFX c5 er erez/n'm' er
SFX c5 er eront/n'q'm't's' er
SFX c5 er erais/n'j'm't' er
SFX c5 er erait/n'q'm't's' er
SFX c5 er erions/n't' er
SFX c5 er eriez/n'm' er
SFX c5 er eraient/n'q'm't's' er
SFX c5 er asse/n'j'm't' [^cg]er
SFX c5 écer éçasse/n'j'm't' écer
SFX c5 éger égeasse/n'j'm't' éger
SFX c5 er asses/n'm't' [^cg]er
SFX c5 écer éçasses/n'm't' écer
SFX c5 éger égeasses/n'm't' éger
SFX c5 er ât/n'q'm't's' [^cg]er
SFX c5 écer éçât/n'q'm't's' écer
SFX c5 éger égeât/n'q'm't's' éger
SFX c5 er assions/n't' [^cg]er
SFX c5 écer éçassions/n't' écer
SFX c5 éger égeassions/n't' éger
SFX c5 er assiez/n'm' [^cg]er
SFX c5 écer éçassiez/n'm' écer
SFX c5 éger égeassiez/n'm' éger
SFX c5 er assent/n'q'm't's' [^cg]er
SFX c5 écer éçassent/n'q'm't's' écer
SFX c5 éger égeassent/n'q'm't's' éger
SFX c5 ébrer èbre/n'm' ébrer
SFX c5 écer èce/n'm' écer
SFX c5 écher èche/n'm' écher
SFX c5 écrer ècre/n'm' écrer
SFX c5 éder ède/n'm' éder
SFX c5 éger ège/n'm' éger
SFX c5 égler ègle/n'm' égler
SFX c5 égner ègne/n'm' égner
SFX c5 égrer ègre/n'm' égrer
SFX c5 éguer ègue/n'm' éguer
SFX c5 éler èle/n'm' éler
SFX c5 émer ème/n'm' émer
SFX c5 éner ène/n'm' éner
SFX c5 éper èpe/n'm' éper
SFX c5 équer èque/n'm' équer
SFX c5 érer ère/n'm' érer
SFX c5 éser èse/n'm' éser
SFX c5 éter ète/n'm' éter
SFX c5 étrer ètre/n'm' étrer
SFX c5 évrer èvre/n'm' évrer
SFX c5 éyer èye/n'm' éyer
SFX c5 er ons/n' [^cg]er
SFX c5 écer éçons/n' écer
SFX c5 éger égeons/n' éger
SFX c5 er ez/n' er
SFX d0 N 82
SFX d0 er ant er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 eter ettes jeter
SFX d0 eter ettes [^j]eter
SFX d0 eler elles ppeler
SFX d0 eler elles [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d0 eter ettent jeter
SFX d0 eter ettent [^j]eter
SFX d0 eler ellent ppeler
SFX d0 eler ellent [^p].eler
SFX d0 er ais er
SFX d0 er ait er
SFX d0 er ions er
SFX d0 er iez er
SFX d0 er aient er
SFX d0 er ai er
SFX d0 er as er
SFX d0 er a er
SFX d0 er âmes er
SFX d0 er âtes er
SFX d0 er èrent er
SFX d0 eter etterai jeter
SFX d0 eter etterai [^j]eter
SFX d0 eler ellerai ppeler
SFX d0 eler ellerai [^p].eler
SFX d0 eter etteras jeter
SFX d0 eter etteras [^j]eter
SFX d0 eler elleras ppeler
SFX d0 eler elleras [^p].eler
SFX d0 eter ettera jeter
SFX d0 eter ettera [^j]eter
SFX d0 eler ellera ppeler
SFX d0 eler ellera [^p].eler
SFX d0 eter etterons jeter
SFX d0 eter etterons [^j]eter
SFX d0 eler ellerons ppeler
SFX d0 eler ellerons [^p].eler
SFX d0 eter etterez jeter
SFX d0 eter etterez [^j]eter
SFX d0 eler ellerez ppeler
SFX d0 eler ellerez [^p].eler
SFX d0 eter etteront jeter
SFX d0 eter etteront [^j]eter
SFX d0 eler elleront ppeler
SFX d0 eler elleront [^p].eler
SFX d0 eter etterais jeter
SFX d0 eter etterais [^j]eter
SFX d0 eler ellerais ppeler
SFX d0 eler ellerais [^p].eler
SFX d0 eter etterait jeter
SFX d0 eter etterait [^j]eter
SFX d0 eler ellerait ppeler
SFX d0 eler ellerait [^p].eler
SFX d0 eter etterions jeter
SFX d0 eter etterions [^j]eter
SFX d0 eler ellerions ppeler
SFX d0 eler ellerions [^p].eler
SFX d0 eter etteriez jeter
SFX d0 eter etteriez [^j]eter
SFX d0 eler elleriez ppeler
SFX d0 eler elleriez [^p].eler
SFX d0 eter etteraient jeter
SFX d0 eter etteraient [^j]eter
SFX d0 eler elleraient ppeler
SFX d0 eler elleraient [^p].eler
SFX d0 er asse er
SFX d0 er asses er
SFX d0 er ât er
SFX d0 er assions er
SFX d0 er assiez er
SFX d0 er assent er
SFX d0 eter ette jeter
SFX d0 eter ette [^j]eter
SFX d0 eler elle ppeler
SFX d0 eler elle [^p].eler
SFX d0 er ons er
SFX d0 er ez er
SFX d1 Y 83
SFX d1 er er/n'q'd' er
SFX d1 er ant/n'q' er
SFX d1 eter ette/n'q'j' jeter
SFX d1 eter ette/n'q'j' [^j]eter
SFX d1 eler elle/n'q'j' ppeler
SFX d1 eler elle/n'q'j' [^p].eler
SFX d1 eter ettes/n' jeter
SFX d1 eter ettes/n' [^j]eter
SFX d1 eler elles/n' ppeler
SFX d1 eler elles/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d1 eter ettent/n'q' jeter
SFX d1 eter ettent/n'q' [^j]eter
SFX d1 eler ellent/n'q' ppeler
SFX d1 eler ellent/n'q' [^p].eler
SFX d1 er ais/n'j' er
SFX d1 er ait/n'q' er
SFX d1 er ions/n' er
SFX d1 er iez/n' er
SFX d1 er aient/n'q' er
SFX d1 er ai/n'j' er
SFX d1 er as/n' er
SFX d1 er a/n'q' er
SFX d1 er âmes/n' er
SFX d1 er âtes/n' er
SFX d1 er èrent/n'q' er
SFX d1 eter etterai/n'j' jeter
SFX d1 eter etterai/n'j' [^j]eter
SFX d1 eler ellerai/n'j' ppeler
SFX d1 eler ellerai/n'j' [^p].eler
SFX d1 eter etteras/n' jeter
SFX d1 eter etteras/n' [^j]eter
SFX d1 eler elleras/n' ppeler
SFX d1 eler elleras/n' [^p].eler
SFX d1 eter ettera/n'q' jeter
SFX d1 eter ettera/n'q' [^j]eter
SFX d1 eler ellera/n'q' ppeler
SFX d1 eler ellera/n'q' [^p].eler
SFX d1 eter etterons/n' jeter
SFX d1 eter etterons/n' [^j]eter
SFX d1 eler ellerons/n' ppeler
SFX d1 eler ellerons/n' [^p].eler
SFX d1 eter etterez/n' jeter
SFX d1 eter etterez/n' [^j]eter
SFX d1 eler ellerez/n' ppeler
SFX d1 eler ellerez/n' [^p].eler
SFX d1 eter etteront/n'q' jeter
SFX d1 eter etteront/n'q' [^j]eter
SFX d1 eler elleront/n'q' ppeler
SFX d1 eler elleront/n'q' [^p].eler
SFX d1 eter etterais/n'j' jeter
SFX d1 eter etterais/n'j' [^j]eter
SFX d1 eler ellerais/n'j' ppeler
SFX d1 eler ellerais/n'j' [^p].eler
SFX d1 eter etterait/n'q' jeter
SFX d1 eter etterait/n'q' [^j]eter
SFX d1 eler ellerait/n'q' ppeler
SFX d1 eler ellerait/n'q' [^p].eler
SFX d1 eter etterions/n' jeter
SFX d1 eter etterions/n' [^j]eter
SFX d1 eler ellerions/n' ppeler
SFX d1 eler ellerions/n' [^p].eler
SFX d1 eter etteriez/n' jeter
SFX d1 eter etteriez/n' [^j]eter
SFX d1 eler elleriez/n' ppeler
SFX d1 eler elleriez/n' [^p].eler
SFX d1 eter etteraient/n'q' jeter
SFX d1 eter etteraient/n'q' [^j]eter
SFX d1 eler elleraient/n'q' ppeler
SFX d1 eler elleraient/n'q' [^p].eler
SFX d1 er asse/n'j' er
SFX d1 er asses/n' er
SFX d1 er ât/n'q' er
SFX d1 er assions/n' er
SFX d1 er assiez/n' er
SFX d1 er assent/n'q' er
SFX d1 eter ette/n' jeter
SFX d1 eter ette/n' [^j]eter
SFX d1 eler elle/n' ppeler
SFX d1 eler elle/n' [^p].eler
SFX d1 er ons/n' er
SFX d1 er ez/n' er
SFX d2 Y 83
SFX d2 er er/n'q'd'l'm't's' er
SFX d2 er ant/n'q'l'm't's' er
SFX d2 eter ette/n'q'j'l'm't's' jeter
SFX d2 eter ette/n'q'j'l'm't's' [^j]eter
SFX d2 eler elle/n'q'j'l'm't's' ppeler
SFX d2 eler elle/n'q'j'l'm't's' [^p].eler
SFX d2 eter ettes/n'q'l'm' jeter
SFX d2 eter ettes/n'q'l'm' [^j]eter
SFX d2 eler elles/n'q'l'm' ppeler
SFX d2 eler elles/n'q'l'm' [^p].eler
SFX d2 er ons/n'q'l't' er
SFX d2 er ez/n'q'l'm' er
SFX d2 eter ettent/n'q'l'm't's' jeter
SFX d2 eter ettent/n'q'l'm't's' [^j]eter
SFX d2 eler ellent/n'q'l'm't's' ppeler
SFX d2 eler ellent/n'q'l'm't's' [^p].eler
SFX d2 er ais/n'q'j'l'm't' er
SFX d2 er ait/n'q'l'm't's' er
SFX d2 er ions/n'q'l't' er
SFX d2 er iez/n'q'l'm' er
SFX d2 er aient/n'q'l'm't's' er
SFX d2 er ai/n'q'j'l't' er
SFX d2 er as/n'q'l'm' er
SFX d2 er a/n'q'l'm't's' er
SFX d2 er âmes/n'q'l't' er
SFX d2 er âtes/n'q'l'm' er
SFX d2 er èrent/n'q'l'm't's' er
SFX d2 eter etterai/n'q'j'l't' jeter
SFX d2 eter etterai/n'q'j'l't' [^j]eter
SFX d2 eler ellerai/n'q'j'l't' ppeler
SFX d2 eler ellerai/n'q'j'l't' [^p].eler
SFX d2 eter etteras/n'q'l'm' jeter
SFX d2 eter etteras/n'q'l'm' [^j]eter
SFX d2 eler elleras/n'q'l'm' ppeler
SFX d2 eler elleras/n'q'l'm' [^p].eler
SFX d2 eter ettera/n'q'l'm't's' jeter
SFX d2 eter ettera/n'q'l'm't's' [^j]eter
SFX d2 eler ellera/n'q'l'm't's' ppeler
SFX d2 eler ellera/n'q'l'm't's' [^p].eler
SFX d2 eter etterons/n'q'l't' jeter
SFX d2 eter etterons/n'q'l't' [^j]eter
SFX d2 eler ellerons/n'q'l't' ppeler
SFX d2 eler ellerons/n'q'l't' [^p].eler
SFX d2 eter etterez/n'q'l'm' jeter
SFX d2 eter etterez/n'q'l'm' [^j]eter
SFX d2 eler ellerez/n'q'l'm' ppeler
SFX d2 eler ellerez/n'q'l'm' [^p].eler
SFX d2 eter etteront/n'q'l'm't's' jeter
SFX d2 eter etteront/n'q'l'm't's' [^j]eter
SFX d2 eler elleront/n'q'l'm't's' ppeler
SFX d2 eler elleront/n'q'l'm't's' [^p].eler
SFX d2 eter etterais/n'q'j'l'm't' jeter
SFX d2 eter etterais/n'q'j'l'm't' [^j]eter
SFX d2 eler ellerais/n'q'j'l'm't' ppeler
SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d2 eter etterait/n'q'l'm't's' jeter
SFX d2 eter etterait/n'q'l'm't's' [^j]eter
SFX d2 eler ellerait/n'q'l'm't's' ppeler
SFX d2 eler ellerait/n'q'l'm't's' [^p].eler
SFX d2 eter etterions/n'q'l't' jeter
SFX d2 eter etterions/n'q'l't' [^j]eter
SFX d2 eler ellerions/n'q'l't' ppeler
SFX d2 eler ellerions/n'q'l't' [^p].eler
SFX d2 eter etteriez/n'q'l'm' jeter
SFX d2 eter etteriez/n'q'l'm' [^j]eter
SFX d2 eler elleriez/n'q'l'm' ppeler
SFX d2 eler elleriez/n'q'l'm' [^p].eler
SFX d2 eter etteraient/n'q'l'm't's' jeter
SFX d2 eter etteraient/n'q'l'm't's' [^j]eter
SFX d2 eler elleraient/n'q'l'm't's' ppeler
SFX d2 eler elleraient/n'q'l'm't's' [^p].eler
SFX d2 er asse/n'q'j'l't' er
SFX d2 er asses/n'q'l'm' er
SFX d2 er ât/n'q'l'm't's' er
SFX d2 er assions/n'q'l't' er
SFX d2 er assiez/n'q'l'm' er
SFX d2 er assent/n'q'l'm't's' er
SFX d2 eter ette/n'l'm' jeter
SFX d2 eter ette/n'l'm' [^j]eter
SFX d2 eler elle/n'l'm' ppeler
SFX d2 eler elle/n'l'm' [^p].eler
SFX d2 er ons/n'l' er
SFX d2 er ez/n'l'm' er
SFX d3 Y 83
SFX d3 er er/m't's' er
SFX d3 er ant/m't's' er
SFX d3 eter ette/m's' jeter
SFX d3 eter ette/m's' [^j]eter
SFX d3 eler elle/m's' ppeler
SFX d3 eler elle/m's' [^p].eler
SFX d3 eter ettes/t' jeter
SFX d3 eter ettes/t' [^j]eter
SFX d3 eler elles/t' ppeler
SFX d3 eler elles/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d3 eter ettent/s' jeter
SFX d3 eter ettent/s' [^j]eter
SFX d3 eler ellent/s' ppeler
SFX d3 eler ellent/s' [^p].eler
SFX d3 er ais/m't' er
SFX d3 er ait/s' er
SFX d3 er ions er
SFX d3 er iez er
SFX d3 er aient/s' er
SFX d3 er ai/m' er
SFX d3 er as/t' er
SFX d3 er a/s' er
SFX d3 er âmes er
SFX d3 er âtes er
SFX d3 er èrent/s' er
SFX d3 eter etterai/m' jeter
SFX d3 eter etterai/m' [^j]eter
SFX d3 eler ellerai/m' ppeler
SFX d3 eler ellerai/m' [^p].eler
SFX d3 eter etteras/t' jeter
SFX d3 eter etteras/t' [^j]eter
SFX d3 eler elleras/t' ppeler
SFX d3 eler elleras/t' [^p].eler
SFX d3 eter ettera/s' jeter
SFX d3 eter ettera/s' [^j]eter
SFX d3 eler ellera/s' ppeler
SFX d3 eler ellera/s' [^p].eler
SFX d3 eter etterons jeter
SFX d3 eter etterons [^j]eter
SFX d3 eler ellerons ppeler
SFX d3 eler ellerons [^p].eler
SFX d3 eter etterez jeter
SFX d3 eter etterez [^j]eter
SFX d3 eler ellerez ppeler
SFX d3 eler ellerez [^p].eler
SFX d3 eter etteront/s' jeter
SFX d3 eter etteront/s' [^j]eter
SFX d3 eler elleront/s' ppeler
SFX d3 eler elleront/s' [^p].eler
SFX d3 eter etterais/m't' jeter
SFX d3 eter etterais/m't' [^j]eter
SFX d3 eler ellerais/m't' ppeler
SFX d3 eler ellerais/m't' [^p].eler
SFX d3 eter etterait/s' jeter
SFX d3 eter etterait/s' [^j]eter
SFX d3 eler ellerait/s' ppeler
SFX d3 eler ellerait/s' [^p].eler
SFX d3 eter etterions jeter
SFX d3 eter etterions [^j]eter
SFX d3 eler ellerions ppeler
SFX d3 eler ellerions [^p].eler
SFX d3 eter etteriez jeter
SFX d3 eter etteriez [^j]eter
SFX d3 eler elleriez ppeler
SFX d3 eler elleriez [^p].eler
SFX d3 eter etteraient/s' jeter
SFX d3 eter etteraient/s' [^j]eter
SFX d3 eler elleraient/s' ppeler
SFX d3 eler elleraient/s' [^p].eler
SFX d3 er asse/m' er
SFX d3 er asses/t' er
SFX d3 er ât/s' er
SFX d3 er assions er
SFX d3 er assiez er
SFX d3 er assent/s' er
SFX d3 eter ette/t' jeter
SFX d3 eter ette/t' [^j]eter
SFX d3 eler elle/t' ppeler
SFX d3 eler elle/t' [^p].eler
SFX d3 er ons er
SFX d3 er ez er
SFX d4 Y 98
SFX d4 er er/n'q'd'l'm't's' er
SFX d4 er ant/n'q'l'm't's' er
SFX d4 eter ette/n'q'j'l'm't's' jeter
SFX d4 eter ette/n'q'j'l'm't's' [^j]eter
SFX d4 eler elle/n'q'j'l'm't's' ppeler
SFX d4 eler elle/n'q'j'l'm't's' [^p].eler
SFX d4 eler elle/n'q'j'l'm't's' épeler
SFX d4 eter ettes/n'q'l'm't' jeter
SFX d4 eter ettes/n'q'l'm't' [^j]eter
SFX d4 eler elles/n'q'l'm't' ppeler
SFX d4 eler elles/n'q'l'm't' [^p].eler
SFX d4 eler elles/n'q'l'm't' épeler
SFX d4 er ons/n'q'l't' er
SFX d4 er ez/n'q'l'm' er
SFX d4 eter ettent/n'q'l'm't's' jeter
SFX d4 eter ettent/n'q'l'm't's' [^j]eter
SFX d4 eler ellent/n'q'l'm't's' ppeler
SFX d4 eler ellent/n'q'l'm't's' [^p].eler
SFX d4 eler ellent/n'q'l'm't's' épeler
SFX d4 er ais/n'q'j'l'm't' er
SFX d4 er ait/n'q'l'm't's' er
SFX d4 er ions/n'q'l't' er
SFX d4 er iez/n'q'l'm' er
SFX d4 er aient/n'q'l'm't's' er
SFX d4 er ai/n'q'j'l'm't' er
SFX d4 er as/n'q'l'm't' er
SFX d4 er a/n'q'l'm't's' er
SFX d4 er âmes/n'q'l't' er
SFX d4 er âtes/n'q'l'm' er
SFX d4 er èrent/n'q'l'm't's' er
SFX d4 eter etterai/n'q'j'l'm't' jeter
SFX d4 eter etterai/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerai/n'q'j'l'm't' ppeler
SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerai/n'q'j'l'm't' épeler
SFX d4 eter etteras/n'q'l'm't' jeter
SFX d4 eter etteras/n'q'l'm't' [^j]eter
SFX d4 eler elleras/n'q'l'm't' ppeler
SFX d4 eler elleras/n'q'l'm't' [^p].eler
SFX d4 eler elleras/n'q'l'm't' épeler
SFX d4 eter ettera/n'q'l'm't's' jeter
SFX d4 eter ettera/n'q'l'm't's' [^j]eter
SFX d4 eler ellera/n'q'l'm't's' ppeler
SFX d4 eler ellera/n'q'l'm't's' [^p].eler
SFX d4 eler ellera/n'q'l'm't's' épeler
SFX d4 eter etterons/n'q'l't' jeter
SFX d4 eter etterons/n'q'l't' [^j]eter
SFX d4 eler ellerons/n'q'l't' ppeler
SFX d4 eler ellerons/n'q'l't' [^p].eler
SFX d4 eler ellerons/n'q'l't' épeler
SFX d4 eter etterez/n'q'l'm' jeter
SFX d4 eter etterez/n'q'l'm' [^j]eter
SFX d4 eler ellerez/n'q'l'm' ppeler
SFX d4 eler ellerez/n'q'l'm' [^p].eler
SFX d4 eler ellerez/n'q'l'm' épeler
SFX d4 eter etteront/n'q'l'm't's' jeter
SFX d4 eter etteront/n'q'l'm't's' [^j]eter
SFX d4 eler elleront/n'q'l'm't's' ppeler
SFX d4 eler elleront/n'q'l'm't's' [^p].eler
SFX d4 eler elleront/n'q'l'm't's' épeler
SFX d4 eter etterais/n'q'j'l'm't' jeter
SFX d4 eter etterais/n'q'j'l'm't' [^j]eter
SFX d4 eler ellerais/n'q'j'l'm't' ppeler
SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler
SFX d4 eler ellerais/n'q'j'l'm't' épeler
SFX d4 eter etterait/n'q'l'm't's' jeter
SFX d4 eter etterait/n'q'l'm't's' [^j]eter
SFX d4 eler ellerait/n'q'l'm't's' ppeler
SFX d4 eler ellerait/n'q'l'm't's' [^p].eler
SFX d4 eler ellerait/n'q'l'm't's' épeler
SFX d4 eter etterions/n'q'l't' jeter
SFX d4 eter etterions/n'q'l't' [^j]eter
SFX d4 eler ellerions/n'q'l't' ppeler
SFX d4 eler ellerions/n'q'l't' [^p].eler
SFX d4 eler ellerions/n'q'l't' épeler
SFX d4 eter etteriez/n'q'l'm' jeter
SFX d4 eter etteriez/n'q'l'm' [^j]eter
SFX d4 eler elleriez/n'q'l'm' ppeler
SFX d4 eler elleriez/n'q'l'm' [^p].eler
SFX d4 eler elleriez/n'q'l'm' épeler
SFX d4 eter etteraient/n'q'l'm't's' jeter
SFX d4 eter etteraient/n'q'l'm't's' [^j]eter
SFX d4 eler elleraient/n'q'l'm't's' ppeler
SFX d4 eler elleraient/n'q'l'm't's' [^p].eler
SFX d4 eler elleraient/n'q'l'm't's' épeler
SFX d4 er asse/n'q'j'l'm't' er
SFX d4 er asses/n'q'l'm't' er
SFX d4 er ât/n'q'l'm't's' er
SFX d4 er assions/n'q'l't' er
SFX d4 er assiez/n'q'l'm' er
SFX d4 er assent/n'q'l'm't's' er
SFX d4 eter ette/n'l'm't' jeter
SFX d4 eter ette/n'l'm't' [^j]eter
SFX d4 eler elle/n'l'm't' ppeler
SFX d4 eler elle/n'l'm't' [^p].eler
SFX d4 eler elle/n'l'm't' épeler
SFX d4 er ons/n'l' er
SFX d4 er ez/n'l'm' er
SFX d5 Y 83
SFX d5 er er/m'q'd'm't's' er
SFX d5 er ant/m'q'd'm't's' er
SFX d5 eter ette/n'q'j'm't's' jeter
SFX d5 eter ette/n'q'j'm't's' [^j]eter
SFX d5 eler elle/n'q'j'm't's' ppeler
SFX d5 eler elle/n'q'j'm't's' [^p].eler
SFX d5 eter ettes/n'm't' jeter
SFX d5 eter ettes/n'm't' [^j]eter
SFX d5 eler elles/n'm't' ppeler
SFX d5 eler elles/n'm't' [^p].eler
SFX d5 er ons/n't' er
SFX d5 er ez/n'm' er
SFX d5 eter ettent/n'q'm't's' jeter
SFX d5 eter ettent/n'q'm't's' [^j]eter
SFX d5 eler ellent/n'q'm't's' ppeler
SFX d5 eler ellent/n'q'm't's' [^p].eler
SFX d5 er ais/n'j'm't' er
SFX d5 er ait/n'q'm't's' er
SFX d5 er ions/n't' er
SFX d5 er iez/n'm' er
SFX d5 er aient/n'q'm't's' er
SFX d5 er ai/n'j'm't' er
SFX d5 er as/n'm't' er
SFX d5 er a/n'q'm't's' er
SFX d5 er âmes/n't' er
SFX d5 er âtes/n'm' er
SFX d5 er èrent/n'q'm't's' er
SFX d5 eter etterai/n'j'm't' jeter
SFX d5 eter etterai/n'j'm't' [^j]eter
SFX d5 eler ellerai/n'j'm't' ppeler
SFX d5 eler ellerai/n'j'm't' [^p].eler
SFX d5 eter etteras/n'm't' jeter
SFX d5 eter etteras/n'm't' [^j]eter
SFX d5 eler elleras/n'm't' ppeler
SFX d5 eler elleras/n'm't' [^p].eler
SFX d5 eter ettera/n'q'm't's' jeter
SFX d5 eter ettera/n'q'm't's' [^j]eter
SFX d5 eler ellera/n'q'm't's' ppeler
SFX d5 eler ellera/n'q'm't's' [^p].eler
SFX d5 eter etterons/n't' jeter
SFX d5 eter etterons/n't' [^j]eter
SFX d5 eler ellerons/n't' ppeler
SFX d5 eler ellerons/n't' [^p].eler
SFX d5 eter etterez/n'm' jeter
SFX d5 eter etterez/n'm' [^j]eter
SFX d5 eler ellerez/n'm' ppeler
SFX d5 eler ellerez/n'm' [^p].eler
SFX d5 eter etteront/n'q'm't's' jeter
SFX d5 eter etteront/n'q'm't's' [^j]eter
SFX d5 eler elleront/n'q'm't's' ppeler
SFX d5 eler elleront/n'q'm't's' [^p].eler
SFX d5 eter etterais/n'j'm't' jeter
SFX d5 eter etterais/n'j'm't' [^j]eter
SFX d5 eler ellerais/n'j'm't' ppeler
SFX d5 eler ellerais/n'j'm't' [^p].eler
SFX d5 eter etterait/n'q'm't's' jeter
SFX d5 eter etterait/n'q'm't's' [^j]eter
SFX d5 eler ellerait/n'q'm't's' ppeler
SFX d5 eler ellerait/n'q'm't's' [^p].eler
SFX d5 eter etterions/n't' jeter
SFX d5 eter etterions/n't' [^j]eter
SFX d5 eler ellerions/n't' ppeler
SFX d5 eler ellerions/n't' [^p].eler
SFX d5 eter etteriez/n'm' jeter
SFX d5 eter etteriez/n'm' [^j]eter
SFX d5 eler elleriez/n'm' ppeler
SFX d5 eler elleriez/n'm' [^p].eler
SFX d5 eter etteraient/n'q'm't's' jeter
SFX d5 eter etteraient/n'q'm't's' [^j]eter
SFX d5 eler elleraient/n'q'm't's' ppeler
SFX d5 eler elleraient/n'q'm't's' [^p].eler
SFX d5 er asse/n'j'm't' er
SFX d5 er asses/n'm't' er
SFX d5 er ât/n'q'm't's' er
SFX d5 er assions/n't' er
SFX d5 er assiez/n'm' er
SFX d5 er assent/n'q'm't's' er
SFX d5 eter ette/m' jeter
SFX d5 eter ette/m' [^j]eter
SFX d5 eler elle/m' ppeler
SFX d5 eler elle/m' [^p].eler
SFX d5 er ons er
SFX d5 er ez er
SFX aA Y 54
SFX aA ller ller/n'q'd'm't' aller
SFX aA ller llant/n'q'm't' aller
SFX aA ller llé/q' aller
SFX aA ller llés/q' aller
SFX aA ller llée/q' aller
SFX aA ller llées/q' aller
SFX aA aller vais aller
SFX aA aller vas aller
SFX aA aller va aller
SFX aA ller llons/n'q' aller
SFX aA ller llez/n'q' aller
SFX aA aller vont aller
SFX aA ller llais/n'q'j' aller
SFX aA ller llait/n'q'm't' aller
SFX aA ller llions/n'q' aller
SFX aA ller lliez/n'q' aller
SFX aA ller llaient/n'q'm't' aller
SFX aA ller llai/n'q'j' aller
SFX aA ller llas/n'q' aller
SFX aA ller lla/n'q'm't' aller
SFX aA ller llâmes/n'q' aller
SFX aA ller llâtes/n'q' aller
SFX aA ller llèrent/n'q'm't' aller
SFX aA aller irai/n'q'j' aller
SFX aA aller iras/n'q' aller
SFX aA aller ira/n'q'm't' aller
SFX aA aller irons/n'q' aller
SFX aA aller irez/n'q'm't' aller
SFX aA aller iront/n'q' aller
SFX aA aller irais/n'q'j' aller
SFX aA aller irait/n'q'm't' aller
SFX aA aller irions/n'q' aller
SFX aA aller iriez/n'q' aller
SFX aA aller iraient/n'q'm't' aller
SFX aA ller ille/n'q'j'm't' aller
SFX aA ller illes/n' aller
SFX aA ller llions/n' aller
SFX aA ller lliez/n' aller
SFX aA ller illent/n'q'm't' aller
SFX aA ller llasse/n'q'j' aller
SFX aA ller llasses/n'q' aller
SFX aA ller llât/n'q'm't' aller
SFX aA ller llassions/n'q' aller
SFX aA ller llassiez/n'q' aller
SFX aA ller llassent/n'q'm't' aller
SFX aA ller llons/n' aller
SFX aA aller va aller
SFX aA aller vas-y aller
SFX aA aller va-t'en aller
SFX aA ller llons-y aller
SFX aA ller llons-nous-en aller
SFX aA ller llez/n' aller
SFX aA ller llez-y aller
SFX aA ller llez-vous-en aller
SFX aD Y 44
SFX aD voyer voyer/n'q'd'l'm't's' envoyer
SFX aD voyer voyant/n'q'l'm't's' envoyer
SFX aD voyer voyé/q' envoyer
SFX aD voyer voyés/q' envoyer
SFX aD voyer voyée/q' envoyer
SFX aD voyer voyées/q' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'q'l'm't' envoyer
SFX aD voyer voyons/n'q'l't' envoyer
SFX aD voyer voyez/n'q'l'm' envoyer
SFX aD voyer voient/n'q'l'm't's' envoyer
SFX aD voyer voyais/n'q'j'l'm't' envoyer
SFX aD voyer voyait/n'q'l'm't's' envoyer
SFX aD voyer voyions/n'q'l't' envoyer
SFX aD voyer voyiez/n'q'l'm' envoyer
SFX aD voyer voyaient/n'q'l'm't's' envoyer
SFX aD voyer voyai/n'q'j'l'm't' envoyer
SFX aD voyer voyas/n'q'l'm't' envoyer
SFX aD voyer voya/n'q'l'm't's' envoyer
SFX aD voyer voyâmes/n'q'l't' envoyer
SFX aD voyer voyâtes/n'q'l'm' envoyer
SFX aD voyer voyèrent/n'q'l'm't's' envoyer
SFX aD voyer verrai/n'q'j'l'm't' envoyer
SFX aD voyer verras/n'q'l'm't' envoyer
SFX aD voyer verra/n'q'l'm't's' envoyer
SFX aD voyer verrons/n'q'l't' envoyer
SFX aD voyer verrez/n'q'l'm' envoyer
SFX aD voyer verront/n'q'l'm't's' envoyer
SFX aD voyer verrais/n'q'j'l'm't' envoyer
SFX aD voyer verrait/n'q'l'm't's' envoyer
SFX aD voyer verrions/n'q'l't' envoyer
SFX aD voyer verriez/n'q'l'm' envoyer
SFX aD voyer verraient/n'q'l'm't's' envoyer
SFX aD voyer voie/n'q'j'l'm't's' envoyer
SFX aD voyer voies/n'l'm't' envoyer
SFX aD voyer voyasse/n'q'j'l'm't' envoyer
SFX aD voyer voyasses/n'q'l'm't' envoyer
SFX aD voyer voyât/n'q'l'm't's' envoyer
SFX aD voyer voyassions/n'q'l't' envoyer
SFX aD voyer voyassiez/n'q'l'm' envoyer
SFX aD voyer voyassent/n'q'l'm't's' envoyer
SFX aD voyer voie/n'l'm't' envoyer
SFX aD voyer voyons/n'l' envoyer
SFX aD voyer voyez/n'l'm' envoyer
SFX aE Y 6
SFX aE direr direr/n'q'd'l'm't's' direr
SFX aE direr dirant/n'q'l'm't's' direr
SFX aE direr diré/q' direr
SFX aE direr dirés/q' direr
SFX aE direr dirée/q' direr
SFX aE direr dirées/q' direr
SFX aF N 17
SFX aF cerner cernant er
SFX aF cerner cerné er
SFX aF cerner cernés er
SFX aF cerner cernée er
SFX aF cerner cernées er
SFX aF cerner cerne er
SFX aF cerner cernent er
SFX aF cerner cernait er
SFX aF cerner cernaient er
SFX aF cerner cerna er
SFX aF cerner cernèrent er
SFX aF cerner cernera er
SFX aF cerner cerneront er
SFX aF cerner cernerait er
SFX aF cerner cerneraient er
SFX aF cerner cernât er
SFX aF cerner cernassent er
SFX aG Y 19
SFX aG er er/n'q'd'm't' er
SFX aG er ant/n'q'm't' er
SFX aG mber mbé mber
SFX aG lter lté lter
SFX aG lter ltés lter
SFX aG lter ltée lter
SFX aG lter ltées lter
SFX aG er e/n'q'm't' er
SFX aG er ent/n'q'm't' er
SFX aG er ait/n'q'm't' er
SFX aG er aient/n'q'm't' er
SFX aG er a/n'q'm't' er
SFX aG er èrent/n'q'm't' er
SFX aG er era/n'q'm't' er
SFX aG er eront/n'q'm't' er
SFX aG er erait/n'q'm't' er
SFX aG er eraient/n'q'm't' er
SFX aG er ât/n'q'm't' er
SFX aG er assent/n'q'm't' er
SFX aH N 38
SFX aH er ant gger
SFX aH er é gger
SFX aH er e gger
SFX aH er es gger
SFX aH er ons gger
SFX aH er ez gger
SFX aH er ent gger
SFX aH er ais gger
SFX aH er ait gger
SFX aH er ions gger
SFX aH er iez gger
SFX aH er aient gger
SFX aH er ai gger
SFX aH er as gger
SFX aH er a gger
SFX aH er âmes gger
SFX aH er âtes gger
SFX aH er èrent gger
SFX aH er erai gger
SFX aH er eras gger
SFX aH er era gger
SFX aH er erons gger
SFX aH er erez gger
SFX aH er eront gger
SFX aH er erais gger
SFX aH er erait gger
SFX aH er erions gger
SFX aH er eriez gger
SFX aH er eraient gger
SFX aH er asse gger
SFX aH er asses gger
SFX aH er ât gger
SFX aH er assions gger
SFX aH er assiez gger
SFX aH er assent gger
SFX aH er e gger
SFX aH er ons gger
SFX aH er ez gger
SFX aY N 41
SFX aY neler nelant neler
SFX aY neler nelé neler
SFX aY neler nelés neler
SFX aY neler nelée neler
SFX aY neler nelées neler
SFX aY éneler énelle éneler
SFX aY éneler énelles éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aY éneler énellent éneler
SFX aY neler nelais neler
SFX aY neler nelait neler
SFX aY neler nelions neler
SFX aY neler neliez neler
SFX aY neler nelaient neler
SFX aY neler nelai neler
SFX aY neler nelas neler
SFX aY neler nela neler
SFX aY neler nelâmes neler
SFX aY neler nelâtes neler
SFX aY neler nelèrent neler
SFX aY éneler énellerai éneler
SFX aY éneler énelleras éneler
SFX aY éneler énellera éneler
SFX aY éneler énellerons éneler
SFX aY éneler énellerez éneler
SFX aY éneler énelleront éneler
SFX aY éneler énellerais éneler
SFX aY éneler énellerait éneler
SFX aY éneler énellerions éneler
SFX aY éneler énelleriez éneler
SFX aY éneler énelleraient éneler
SFX aY neler nelasse neler
SFX aY neler nelasses neler
SFX aY neler nelât neler
SFX aY neler nelassions neler
SFX aY neler nelassiez neler
SFX aY neler nelassent neler
SFX aY éneler énelle éneler
SFX aY neler nelons neler
SFX aY neler nelez neler
SFX aZ N 41
SFX aZ teler telant teler
SFX aZ teler telé teler
SFX aZ teler telés teler
SFX aZ teler telée teler
SFX aZ teler telées teler
SFX aZ ételer ételle ételer
SFX aZ ételer ételles ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX aZ ételer étellent ételer
SFX aZ teler telais teler
SFX aZ teler telait teler
SFX aZ teler telions teler
SFX aZ teler teliez teler
SFX aZ teler telaient teler
SFX aZ teler telai teler
SFX aZ teler telas teler
SFX aZ teler tela teler
SFX aZ teler telâmes teler
SFX aZ teler telâtes teler
SFX aZ teler telèrent teler
SFX aZ ételer étellerai ételer
SFX aZ ételer ételleras ételer
SFX aZ ételer étellera ételer
SFX aZ ételer étellerons ételer
SFX aZ ételer étellerez ételer
SFX aZ ételer ételleront ételer
SFX aZ ételer étellerais ételer
SFX aZ ételer étellerait ételer
SFX aZ ételer étellerions ételer
SFX aZ ételer ételleriez ételer
SFX aZ ételer ételleraient ételer
SFX aZ teler telasse teler
SFX aZ teler telasses teler
SFX aZ teler telât teler
SFX aZ teler telassions teler
SFX aZ teler telassiez teler
SFX aZ teler telassent teler
SFX aZ ételer ételle ételer
SFX aZ teler telons teler
SFX aZ teler telez teler
SFX dA Y 42
SFX dA peler peler/n'q'd'l'm't's' peler
SFX dA peler pelant/n'q'l'm't's' peler
SFX dA peler pelé/q' peler
SFX dA peler pelés/q' peler
SFX dA peler pelée/q' peler
SFX dA peler pelées/q' peler
SFX dA peler pelle/n'q'j'l'm't's' peler
SFX dA peler pelles/n'q'l'm' peler
SFX dA peler pelons/n'q'l't' peler
SFX dA peler pelez/n'q'l'm' peler
SFX dA peler pellent/n'q'l'm't's' peler
SFX dA peler pelais/n'q'j'l't' peler
SFX dA peler pelait/n'q'l'm't's' peler
SFX dA peler pelions/n'q'l't' peler
SFX dA peler peliez/n'q'l'm' peler
SFX dA peler pelaient/n'q'l'm't's' peler
SFX dA peler pelai/n'q'j'l't' peler
SFX dA peler pelas/n'q'l'm' peler
SFX dA peler pela/n'q'l'm't's' peler
SFX dA peler pelâmes/n'q'l't' peler
SFX dA peler pelâtes/n'q'l'm' peler
SFX dA peler pelèrent/n'q'l'm't's' peler
SFX dA peler pellerai/n'q'j'l't' peler
SFX dA peler pelleras/n'q'l'm' peler
SFX dA peler pellera/n'q'l'm't's' peler
SFX dA peler pellerons/n'q'l't' peler
SFX dA peler pellerez/n'q'l'm' peler
SFX dA peler pelleront/n'q'l'm't's' peler
SFX dA peler pellerais/n'q'j'l't' peler
SFX dA peler pellerait/n'q'l'm't's' peler
SFX dA peler pellerions/n'q'l't' peler
SFX dA peler pelleriez/n'q'l'm' peler
SFX dA peler pelleraient/n'q'l'm't's' peler
SFX dA peler pelasse/n'q'j'l't' peler
SFX dA peler pelasses/n'q'l'm' peler
SFX dA peler pelât/n'q'l'm't's' peler
SFX dA peler pelassions/n'q'l't' peler
SFX dA peler pelassiez/n'q'l'm' peler
SFX dA peler pelassent/n'q'l'm't's' peler
SFX dA peler pelle/n'l'm' peler
SFX dA peler pelons/n'l' peler
SFX dA peler pelez/n'l'm' peler
SFX f0 Y 32
SFX f0 ir issant ir
SFX f0 ir is ir
SFX f0 ir it ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f0 ir issent ir
SFX f0 ir issais ir
SFX f0 ir issait ir
SFX f0 ir issions ir
SFX f0 ir issiez ir
SFX f0 ir issaient ir
SFX f0 ir îmes ir
SFX f0 ir îtes ir
SFX f0 ir irent ir
SFX f0 ir irai ir
SFX f0 ir iras ir
SFX f0 ir ira ir
SFX f0 ir irons ir
SFX f0 ir irez ir
SFX f0 ir iront ir
SFX f0 ir irais ir
SFX f0 ir irait ir
SFX f0 ir irions ir
SFX f0 ir iriez ir
SFX f0 ir iraient ir
SFX f0 ir isse ir
SFX f0 ir isses ir
SFX f0 ir isse ir
SFX f0 ir ît ir
SFX f0 ir is ir
SFX f0 ir issons ir
SFX f0 ir issez ir
SFX f1 Y 33
SFX f1 ir ir/n'q'd' ir
SFX f1 ir issant/n'q' ir
SFX f1 ir is/n'j' ir
SFX f1 ir it/n'q' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f1 ir issent/n'q' ir
SFX f1 ir issais/n'j' ir
SFX f1 ir issait/n'q' ir
SFX f1 ir issions/n' ir
SFX f1 ir issiez/n' ir
SFX f1 ir issaient/n'q' ir
SFX f1 ir îmes/n' ir
SFX f1 ir îtes/n' ir
SFX f1 ir irent/n'q' ir
SFX f1 ir irai/n'j' ir
SFX f1 ir iras/n' ir
SFX f1 ir ira/n'q' ir
SFX f1 ir irons/n' ir
SFX f1 ir irez/n' ir
SFX f1 ir iront/n'q' ir
SFX f1 ir irais/n'j' ir
SFX f1 ir irait/n'q' ir
SFX f1 ir irions/n' ir
SFX f1 ir iriez/n' ir
SFX f1 ir iraient/n'q' ir
SFX f1 ir isse/n'j' ir
SFX f1 ir isses/n' ir
SFX f1 ir isse/n'q' ir
SFX f1 ir ît/n'q' ir
SFX f1 ir is/n' ir
SFX f1 ir issons/n' ir
SFX f1 ir issez/n' ir
SFX f2 Y 33
SFX f2 ir ir/n'q'd'l'm't's' ir
SFX f2 ir issant/n'q'l'm't's' ir
SFX f2 ir is/n'q'j'l't' ir
SFX f2 ir it/n'q'l'm't's' ir
SFX f2 ir issons/n'q'l't' ir
SFX f2 ir issez/n'q'l'm' ir
SFX f2 ir issent/n'q'l'm't's' ir
SFX f2 ir issais/n'q'j'l't' ir
SFX f2 ir issait/n'q'l'm't's' ir
SFX f2 ir issions/n'q'l't' ir
SFX f2 ir issiez/n'q'l'm' ir
SFX f2 ir issaient/n'q'l'm't's' ir
SFX f2 ir îmes/n'q'l't' ir
SFX f2 ir îtes/n'q'l'm' ir
SFX f2 ir irent/n'q'l'm't's' ir
SFX f2 ir irai/n'q'j'l't' ir
SFX f2 ir iras/n'q'l'm't' ir
SFX f2 ir ira/n'q'l'm't's' ir
SFX f2 ir irons/n'q'l't' ir
SFX f2 ir irez/n'q'l'm' ir
SFX f2 ir iront/n'q'l'm't's' ir
SFX f2 ir irais/n'q'j'l'm't' ir
SFX f2 ir irait/n'q'l'm't's' ir
SFX f2 ir irions/n'q'l't' ir
SFX f2 ir iriez/n'q'l'm' ir
SFX f2 ir iraient/n'q'l'm't's' ir
SFX f2 ir isse/n'q'j'l't' ir
SFX f2 ir isses/n'q'l'm' ir
SFX f2 ir isse/n'q'l'm't's' ir
SFX f2 ir ît/n'q'l'm't's' ir
SFX f2 ir is/n'l'm' ir
SFX f2 ir issons/n'l' ir
SFX f2 ir issez/n'l'm' ir
SFX f3 Y 33
SFX f3 ir ir/m't's' ir
SFX f3 ir issant/m't's' ir
SFX f3 ir is/m't' ir
SFX f3 ir it/s' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f3 ir issent/s' ir
SFX f3 ir issais/m't' ir
SFX f3 ir issait/s' ir
SFX f3 ir issions ir
SFX f3 ir issiez ir
SFX f3 ir issaient/s' ir
SFX f3 ir îmes ir
SFX f3 ir îtes ir
SFX f3 ir irent/s' ir
SFX f3 ir irai/m' ir
SFX f3 ir iras/t' ir
SFX f3 ir ira/s' ir
SFX f3 ir irons ir
SFX f3 ir irez ir
SFX f3 ir iront/s' ir
SFX f3 ir irais/m't' ir
SFX f3 ir irait/s' ir
SFX f3 ir irions ir
SFX f3 ir iriez ir
SFX f3 ir iraient/s' ir
SFX f3 ir isse/m' ir
SFX f3 ir isses/t' ir
SFX f3 ir isse/s' ir
SFX f3 ir ît/s' ir
SFX f3 ir is/t' ir
SFX f3 ir issons ir
SFX f3 ir issez ir
SFX f4 Y 33
SFX f4 ir ir/n'q'd'l'm't's' ir
SFX f4 ir issant/n'q'l'm't's' ir
SFX f4 ir is/n'q'j'l'm't' ir
SFX f4 ir it/n'q'l'm't's' ir
SFX f4 ir issons/n'q'l't' ir
SFX f4 ir issez/n'q'l'm' ir
SFX f4 ir issent/n'q'l'm't's' ir
SFX f4 ir issais/n'q'j'l'm't' ir
SFX f4 ir issait/n'q'l'm't's' ir
SFX f4 ir issions/n'q'l't' ir
SFX f4 ir issiez/n'q'l'm' ir
SFX f4 ir issaient/n'q'l'm't's' ir
SFX f4 ir îmes/n'q'l't' ir
SFX f4 ir îtes/n'q'l'm' ir
SFX f4 ir irent/n'q'l'm't's' ir
SFX f4 ir irai/n'q'j'l'm't' ir
SFX f4 ir iras/n'q'l'm't' ir
SFX f4 ir ira/n'q'l'm't's' ir
SFX f4 ir irons/n'q'l't' ir
SFX f4 ir irez/n'q'l'm' ir
SFX f4 ir iront/n'q'l'm't's' ir
SFX f4 ir irais/n'q'j'l'm't' ir
SFX f4 ir irait/n'q'l'm't's' ir
SFX f4 ir irions/n'q'l't' ir
SFX f4 ir iriez/n'q'l'm' ir
SFX f4 ir iraient/n'q'l'm't's' ir
SFX f4 ir isse/n'q'j'l'm't' ir
SFX f4 ir isses/n'q'l'm't' ir
SFX f4 ir isse/n'q'l'm't's' ir
SFX f4 ir ît/n'q'l'm't's' ir
SFX f4 ir is/n'l'm't' ir
SFX f4 ir issons/n'l' ir
SFX f4 ir issez/n'l'm' ir
SFX f5 Y 33
SFX f5 ir ir/n'q'd'm't's' ir
SFX f5 ir issant/n'q'm't's' ir
SFX f5 ir is/n'j'm't' ir
SFX f5 ir it/n'q'm't's' ir
SFX f5 ir issons/n't' ir
SFX f5 ir issez/n'm' ir
SFX f5 ir issent/n'q'm't's' ir
SFX f5 ir issais/n'j'm't' ir
SFX f5 ir issait/n'q'm't's' ir
SFX f5 ir issions/n't' ir
SFX f5 ir issiez/n'm' ir
SFX f5 ir issaient/n'q'm't's' ir
SFX f5 ir îmes/n't' ir
SFX f5 ir îtes/n'm' ir
SFX f5 ir irent/n'q'm't's' ir
SFX f5 ir irai/n'j'm't' ir
SFX f5 ir iras/n'm't' ir
SFX f5 ir ira/n'q'm't's' ir
SFX f5 ir irons/n't' ir
SFX f5 ir irez/n'm' ir
SFX f5 ir iront/n'q'm't's' ir
SFX f5 ir irais/n'j'm't' ir
SFX f5 ir irait/n'q'm't's' ir
SFX f5 ir irions/n't' ir
SFX f5 ir iriez/n'm' ir
SFX f5 ir iraient/n'q'm't's' ir
SFX f5 ir isse/n'j'm't' ir
SFX f5 ir isses/n'm't' ir
SFX f5 ir isse/n'q'm't's' ir
SFX f5 ir ît/n'q'm't's' ir
SFX f5 ir is/n'm' ir
SFX f5 ir issons/n' ir
SFX f5 ir issez/n'm' ir
SFX fA N 37
SFX fA aïr aïssant aïr
SFX fA aïr aï aïr
SFX fA aïr aïs aïr
SFX fA aïr aïe aïr
SFX fA aïr aïes aïr
SFX fA aïr ais aïr
SFX fA aïr ait aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fA aïr aïssent aïr
SFX fA aïr aïssais aïr
SFX fA aïr aïssait aïr
SFX fA aïr aïssions aïr
SFX fA aïr aïssiez aïr
SFX fA aïr aïssaient aïr
SFX fA aïr aïs aïr
SFX fA aïr aït aïr
SFX fA aïr aïmes aïr
SFX fA aïr aïtes aïr
SFX fA aïr aïrent aïr
SFX fA aïr aïrai aïr
SFX fA aïr aïras aïr
SFX fA aïr aïra aïr
SFX fA aïr aïrons aïr
SFX fA aïr aïrez aïr
SFX fA aïr aïront aïr
SFX fA aïr aïrais aïr
SFX fA aïr aïrait aïr
SFX fA aïr aïrions aïr
SFX fA aïr aïriez aïr
SFX fA aïr aïraient aïr
SFX fA aïr aïsse aïr
SFX fA aïr aïsses aïr
SFX fA aïr aïsse aïr
SFX fA aïr ais aïr
SFX fA aïr aïssons aïr
SFX fA aïr aïssez aïr
SFX fB Y 29
SFX fB haïr haïr/s' aïr
SFX fB haïr haïssant/s' aïr
SFX fB haïr haï aïr
SFX fB haïr haïs aïr
SFX fB haïr haïe aïr
SFX fB haïr haïes aïr
SFX fB haïr hait/s' aïr
SFX fB haïr haïssons aïr
SFX fB haïr haïssez aïr
SFX fB haïr haïssent/s' aïr
SFX fB haïr haïssait/s' aïr
SFX fB haïr haïssions aïr
SFX fB haïr haïssiez aïr
SFX fB haïr haïssaient/s' aïr
SFX fB haïr haït/s' aïr
SFX fB haïr haïmes aïr
SFX fB haïr haïtes aïr
SFX fB haïr haïrent/s' aïr
SFX fB haïr haïra/s' aïr
SFX fB haïr haïrons aïr
SFX fB haïr haïrez aïr
SFX fB haïr haïront/s' aïr
SFX fB haïr haïrait/s' aïr
SFX fB haïr haïrions aïr
SFX fB haïr haïriez aïr
SFX fB haïr haïraient/s' aïr
SFX fB haïr haïsse/s' aïr
SFX fB haïr haïssons-nous aïr
SFX fB haïr haïssez-vous aïr
SFX fC Y 11
SFX fC partir partir/n'q'd'l'm't's' impartir
SFX fC partir partissant/n'q'l'm't's' impartir
SFX fC partir parti/q' impartir
SFX fC partir partis/q' impartir
SFX fC partir partie/q' impartir
SFX fC partir parties/q' impartir
SFX fC partir partis/n'q'j'l'm't' impartir
SFX fC partir partit/n'q'l'm't's' impartir
SFX fC partir partissons/n'q'l't' impartir
SFX fC partir partissez/n'q'l'm' impartir
SFX fC partir partissent/n'q'l'm't's' impartir
SFX fD N 11
SFX fD ortir ortissant sortir
SFX fD ortir ortit sortir
SFX fD ortir ortissent sortir
SFX fD ortir ortissait sortir
SFX fD ortir ortissaient sortir
SFX fD ortir ortira sortir
SFX fD ortir ortiront sortir
SFX fD ortir ortirait sortir
SFX fD ortir ortiraient sortir
SFX fD ortir ortisse sortir
SFX fD ortir ortît sortir
SFX fY N 37
SFX fY uïr uïr/s' uïr
SFX fY uïr uïssant/m't's' uïr
SFX fY uïr uï uïr
SFX fY uïr uïs uïr
SFX fY uïr uïe uïr
SFX fY uïr uïes uïr
SFX fY uïr uïs/m't' uïr
SFX fY uïr uït/s' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fY uïr uïssent/s' uïr
SFX fY uïr uïssais/m't' uïr
SFX fY uïr uïssait/s' uïr
SFX fY uïr uïssions uïr
SFX fY uïr uïssiez uïr
SFX fY uïr uïssaient/s' uïr
SFX fY uïr uîmes uïr
SFX fY uïr uîtes uïr
SFX fY uïr uïrent/s' uïr
SFX fY uïr uïrai/m' uïr
SFX fY uïr uïras/t' uïr
SFX fY uïr uïra/s' uïr
SFX fY uïr uïrons uïr
SFX fY uïr uïrez uïr
SFX fY uïr uïront/s' uïr
SFX fY uïr uïrais/m't' uïr
SFX fY uïr uïrait/s' uïr
SFX fY uïr uïrions uïr
SFX fY uïr uïriez uïr
SFX fY uïr uïraient/s' uïr
SFX fY uïr uïsse/m' uïr
SFX fY uïr uïsses/t' uïr
SFX fY uïr uïsse/s' uïr
SFX fY uïr uît/s' uïr
SFX fY uïr uïs/t' uïr
SFX fY uïr uïssons uïr
SFX fY uïr uïssez uïr
SFX fZ N 7
SFX fZ gir gissant agir
SFX fZ gir git agir
SFX fZ gir gissait agir
SFX fZ gir gira agir
SFX fZ gir girait agir
SFX fZ gir gisse agir
SFX fZ gir gît agir
SFX p+ Y 8
SFX p+ er é/L'D'Q' er
SFX p+ er és/D'Q' er
SFX p+ er ée/L'D'Q' er
SFX p+ er ées/D'Q' er
SFX p+ ir i/L'D'Q' ir
SFX p+ ir is/D'Q' ir
SFX p+ ir ie/L'D'Q' ir
SFX p+ ir ies/D'Q' ir
SFX p. Y 2
SFX p. er é/q' er
SFX p. ir i/q' ir
SFX i0 Y 39
SFX i0 enir enir/n'q'd' enir
SFX i0 enir enant/n'q' enir
SFX i0 enir iens/n'j' enir
SFX i0 enir ient/n'q' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i0 enir iennent/n'q' enir
SFX i0 enir enais/n'j' enir
SFX i0 enir enait/n'q' enir
SFX i0 enir enions/n' enir
SFX i0 enir eniez/n' enir
SFX i0 enir enaient/n'q' enir
SFX i0 enir ins/n'j' enir
SFX i0 enir int/n'q' enir
SFX i0 enir înmes/n' enir
SFX i0 enir întes/n' enir
SFX i0 enir inrent/n'q' enir
SFX i0 enir iendrai/n'j' enir
SFX i0 enir iendras/n' enir
SFX i0 enir iendra/n'q' enir
SFX i0 enir iendrons/n' enir
SFX i0 enir iendrez/n' enir
SFX i0 enir iendront/n'q' enir
SFX i0 enir iendrais/n'j' enir
SFX i0 enir iendrait/n'q' enir
SFX i0 enir iendrions/n' enir
SFX i0 enir iendriez/n' enir
SFX i0 enir iendraient/n'q' enir
SFX i0 enir ienne/n'q'j' enir
SFX i0 enir iennes/n' enir
SFX i0 enir insse/n'j' enir
SFX i0 enir insses/n' enir
SFX i0 enir înt/n'q' enir
SFX i0 enir inssions/n' enir
SFX i0 enir inssiez/n' enir
SFX i0 enir inssent/n'q' enir
SFX i0 enir iens/n' enir
SFX i0 enir enons/n' enir
SFX i0 enir enez/n' enir
SFX i1 Y 39
SFX i1 enir enir/n'q'd'l'm't's' enir
SFX i1 enir enant/n'q'l'm't's' enir
SFX i1 enir iens/n'q'j'l'm't' enir
SFX i1 enir ient/n'q'l'm't's' enir
SFX i1 enir enons/n'q'l't' enir
SFX i1 enir enez/n'q'l'm' enir
SFX i1 enir iennent/n'q'l'm't's' enir
SFX i1 enir enais/n'q'j'l'm't' enir
SFX i1 enir enait/n'q'l'm't's' enir
SFX i1 enir enions/n'q'l't' enir
SFX i1 enir eniez/n'q'l'm' enir
SFX i1 enir enaient/n'q'l'm't's' enir
SFX i1 enir ins/n'q'j'l'm't' enir
SFX i1 enir int/n'q'l'm't's' enir
SFX i1 enir înmes/n'q'l't' enir
SFX i1 enir întes/n'q'l'm' enir
SFX i1 enir inrent/n'q'l'm't's' enir
SFX i1 enir iendrai/n'q'j'l'm't' enir
SFX i1 enir iendras/n'q'l'm't' enir
SFX i1 enir iendra/n'q'l'm't's' enir
SFX i1 enir iendrons/n'q'l't' enir
SFX i1 enir iendrez/n'q'l'm' enir
SFX i1 enir iendront/n'q'l'm't's' enir
SFX i1 enir iendrais/n'q'j'l'm't' enir
SFX i1 enir iendrait/n'q'l'm't's' enir
SFX i1 enir iendrions/n'q'l't' enir
SFX i1 enir iendriez/n'q'l'm' enir
SFX i1 enir iendraient/n'q'l'm't's' enir
SFX i1 enir ienne/n'q'j'l'm't's' enir
SFX i1 enir iennes/n'l'm't' enir
SFX i1 enir insse/n'q'j'l'm't' enir
SFX i1 enir insses/n'q'l'm't' enir
SFX i1 enir înt/n'q'l'm't's' enir
SFX i1 enir inssions/n'q'l't' enir
SFX i1 enir inssiez/n'q'l'm' enir
SFX i1 enir inssent/n'q'l'm't's' enir
SFX i1 enir iens/n'l'm't' enir
SFX i1 enir enons/n'l' enir
SFX i1 enir enez/n'l'm' enir
SFX i2 Y 39
SFX i2 enir enir/m't's' enir
SFX i2 enir enant/m't's' enir
SFX i2 enir iens/m't' enir
SFX i2 enir ient/s' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i2 enir iennent/s' enir
SFX i2 enir enais/m't' enir
SFX i2 enir enait/s' enir
SFX i2 enir enions enir
SFX i2 enir eniez enir
SFX i2 enir enaient/s' enir
SFX i2 enir ins/m't' enir
SFX i2 enir int/s' enir
SFX i2 enir înmes enir
SFX i2 enir întes enir
SFX i2 enir inrent/s' enir
SFX i2 enir iendrai/m' enir
SFX i2 enir iendras/t' enir
SFX i2 enir iendra/s' enir
SFX i2 enir iendrons enir
SFX i2 enir iendrez enir
SFX i2 enir iendront/s' enir
SFX i2 enir iendrais/m't' enir
SFX i2 enir iendrait/s' enir
SFX i2 enir iendrions enir
SFX i2 enir iendriez enir
SFX i2 enir iendraient/s' enir
SFX i2 enir ienne/m's' enir
SFX i2 enir iennes/t' enir
SFX i2 enir insse/m' enir
SFX i2 enir insses/t' enir
SFX i2 enir înt/s' enir
SFX i2 enir inssions enir
SFX i2 enir inssiez enir
SFX i2 enir inssent/s' enir
SFX i2 enir iens/t' enir
SFX i2 enir enons enir
SFX i2 enir enez enir
SFX i5 N 38
SFX i5 tir tant tir
SFX i5 tir s tir
SFX i5 tir t tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX i5 tir tent tir
SFX i5 tir tais tir
SFX i5 tir tait tir
SFX i5 tir tions tir
SFX i5 tir tiez tir
SFX i5 tir taient tir
SFX i5 tir tis tir
SFX i5 tir tit tir
SFX i5 tir tîmes tir
SFX i5 tir tîtes tir
SFX i5 tir tirent tir
SFX i5 tir tirai tir
SFX i5 tir tiras tir
SFX i5 tir tira tir
SFX i5 tir tirons tir
SFX i5 tir tirez tir
SFX i5 tir tiront tir
SFX i5 tir tirais tir
SFX i5 tir tirait tir
SFX i5 tir tirions tir
SFX i5 tir tiriez tir
SFX i5 tir tiraient tir
SFX i5 tir te tir
SFX i5 tir tes tir
SFX i5 tir tisse tir
SFX i5 tir tisses tir
SFX i5 tir tît tir
SFX i5 tir tissions tir
SFX i5 tir tissiez tir
SFX i5 tir tissent tir
SFX i5 tir s tir
SFX i5 tir tons tir
SFX i5 tir tez tir
SFX iA Y 19
SFX iA dvenir dvenir/n'q'd'm't' venir
SFX iA dvenir dvenant/n'q'm't' venir
SFX iA dvenir dvenu/Q' venir
SFX iA dvenir dvenus/Q' venir
SFX iA dvenir dvenue/Q' venir
SFX iA dvenir dvenues/Q' venir
SFX iA dvenir dvient/n'q'm't' venir
SFX iA dvenir dviennent/n'q' venir
SFX iA dvenir dvenait/n'q'm't' venir
SFX iA dvenir dvenaient/n'q' venir
SFX iA dvenir dvint/n'q'm't' venir
SFX iA dvenir dvinrent/n'q' venir
SFX iA dvenir dviendra/n'q'm't' venir
SFX iA dvenir dviendront/n'q' venir
SFX iA dvenir dviendrait/n'q'm't' venir
SFX iA dvenir dviendraient/n'q' venir
SFX iA dvenir dvienne/n'q'm't' venir
SFX iA dvenir dvînt/n'q'm't' venir
SFX iA dvenir dvinssent/n'q' venir
SFX iB Y 40
SFX iB partenir partenir/n'q'd'm't's' tenir
SFX iB partenir partenant/n'q'm't's' tenir
SFX iB partenir partenu/q' tenir
SFX iB partenir partiens/n'j'm't' tenir
SFX iB partenir partient/n'q'm't's' tenir
SFX iB partenir partenons/n't' tenir
SFX iB partenir partenez/n'm' tenir
SFX iB partenir partiennent/n'q'm't's' tenir
SFX iB partenir partenais/n'j'm't' tenir
SFX iB partenir partenait/n'q'm't's' tenir
SFX iB partenir partenions/n't' tenir
SFX iB partenir parteniez/n'm' tenir
SFX iB partenir partenaient/n'q'm't's' tenir
SFX iB partenir partins/n'j'm't' tenir
SFX iB partenir partint/n'q'm't's' tenir
SFX iB partenir partînmes/n't' tenir
SFX iB partenir partîntes/n'm' tenir
SFX iB partenir partinrent/n'q'm't's' tenir
SFX iB partenir partiendrai/n'j'm't' tenir
SFX iB partenir partiendras/n'm't' tenir
SFX iB partenir partiendra/n'q'm't's' tenir
SFX iB partenir partiendrons/n't' tenir
SFX iB partenir partiendrez/n'm' tenir
SFX iB partenir partiendront/n'q'm't's' tenir
SFX iB partenir partiendrais/n'j'm't' tenir
SFX iB partenir partiendrait/n'q'm't's' tenir
SFX iB partenir partiendrions/n't' tenir
SFX iB partenir partiendriez/n'm' tenir
SFX iB partenir partiendraient/n'q'm't's' tenir
SFX iB partenir partienne/n'q'j'm't's' tenir
SFX iB partenir partiennes/n'm't' tenir
SFX iB partenir partinsse/n'j'm't' tenir
SFX iB partenir partinsses/n'm't' tenir
SFX iB partenir partînt/n'q'm't's' tenir
SFX iB partenir partinssions/n't' tenir
SFX iB partenir partinssiez/n'm' tenir
SFX iB partenir partinssent/n'q'm't's' tenir
SFX iB partenir partiens/n'm't' tenir
SFX iB partenir partenons/n' tenir
SFX iB partenir partenez/n'm' tenir
SFX iC Y 41
SFX iC rir rir/n'q'd'l'm't's' [vf]rir
SFX iC rir rant/n'q'l'm't's' [vf]rir
SFX iC rir ert/L'D'Q' [vf]rir
SFX iC rir erts/D'Q' [vf]rir
SFX iC rir erte/L'D'Q' [vf]rir
SFX iC rir ertes/D'Q' [vf]rir
SFX iC rir re/n'q'j'l'm't's' [vf]rir
SFX iC rir res/n'q'l'm't' [vf]rir
SFX iC rir rons/n'q'l't' [vf]rir
SFX iC rir rez/n'q'l'm' [vf]rir
SFX iC rir rent/n'q'l'm't's' [vf]rir
SFX iC rir rais/n'q'j'l'm't' [vf]rir
SFX iC rir rait/n'q'l'm't's' [vf]rir
SFX iC rir rions/n'q'l't' [vf]rir
SFX iC rir riez/n'q'l'm' [vf]rir
SFX iC rir raient/n'q'l'm't's' [vf]rir
SFX iC rir ris/n'q'j'l'm't' [vf]rir
SFX iC rir rit/n'q'l'm't's' [vf]rir
SFX iC rir rîmes/n'q'l't' [vf]rir
SFX iC rir rîtes/n'q'l'm' [vf]rir
SFX iC rir rirent/n'q'l'm't's' [vf]rir
SFX iC rir rirai/n'q'j'l'm't' [vf]rir
SFX iC rir riras/n'q'l'm't' [vf]rir
SFX iC rir rira/n'q'l'm't's' [vf]rir
SFX iC rir rirons/n'q'l't' [vf]rir
SFX iC rir rirez/n'q'l'm' [vf]rir
SFX iC rir riront/n'q'l'm't's' [vf]rir
SFX iC rir rirais/n'q'j'l'm't' [vf]rir
SFX iC rir rirait/n'q'l'm't's' [vf]rir
SFX iC rir ririons/n'q'l't' [vf]rir
SFX iC rir ririez/n'q'l'm' [vf]rir
SFX iC rir riraient/n'q'l'm't's' [vf]rir
SFX iC rir risse/n'q'j'l'm't' [vf]rir
SFX iC rir risses/n'q'l'm't' [vf]rir
SFX iC rir rît/n'q'l'm't's' [vf]rir
SFX iC rir rissions/n'q'l't' [vf]rir
SFX iC rir rissiez/n'q'l'm' [vf]rir
SFX iC rir rissent/n'q'l'm't's' [vf]rir
SFX iC rir re/n'l'm't' [vf]rir
SFX iC rir rons/n'l' [vf]rir
SFX iC rir rez/n'l'm' [vf]rir
SFX iD Y 43
SFX iD courir courir/n'q'd' courir
SFX iD courir courant/n'q' courir
SFX iD courir couru courir
SFX iD courir courus courir
SFX iD courir courue courir
SFX iD courir courues courir
SFX iD courir cours/n'j' courir
SFX iD courir court/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iD courir courent/n' courir
SFX iD courir courais/n'j' courir
SFX iD courir courait/n' courir
SFX iD courir courions/n' courir
SFX iD courir couriez/n' courir
SFX iD courir couraient/n' courir
SFX iD courir courus/n'j' courir
SFX iD courir courut/n' courir
SFX iD courir courûmes/n' courir
SFX iD courir courûtes/n' courir
SFX iD courir coururent/n' courir
SFX iD courir courrai/n'j' courir
SFX iD courir courras/n' courir
SFX iD courir courra/n' courir
SFX iD courir courrons/n' courir
SFX iD courir courrez/n' courir
SFX iD courir courront/n' courir
SFX iD courir courrais/n'j' courir
SFX iD courir courrait/n' courir
SFX iD courir courrions/n' courir
SFX iD courir courriez/n' courir
SFX iD courir courraient/n' courir
SFX iD courir coure/n'j' courir
SFX iD courir coures/n' courir
SFX iD courir courusse/n'j' courir
SFX iD courir courusses/n' courir
SFX iD courir courût/n' courir
SFX iD courir courussions/n' courir
SFX iD courir courussiez/n' courir
SFX iD courir courussent/n' courir
SFX iD courir cours/n' courir
SFX iD courir courons/n' courir
SFX iD courir courez/n' courir
SFX iE Y 43
SFX iE ourir ourir/n'q'd'l'm't's' courir
SFX iE ourir ourant/n'q'm't's' courir
SFX iE ourir ouru/L'D'Q' courir
SFX iE ourir ourus/D'Q' courir
SFX iE ourir ourue/L'D'Q' courir
SFX iE ourir ourues/D'Q' courir
SFX iE ourir ours/n'q'j'l'm't' courir
SFX iE ourir ourt/n'q'l's' courir
SFX iE ourir ourons/n'q'l' courir
SFX iE ourir ourez/n'q'l' courir
SFX iE ourir ourent/n'q'l's' courir
SFX iE ourir ourais/n'q'j'l'm't' courir
SFX iE ourir ourait/n'q'l's' courir
SFX iE ourir ourions/n'q'l' courir
SFX iE ourir ouriez/n'q'l' courir
SFX iE ourir ouraient/n'q'l's' courir
SFX iE ourir ourus/n'q'j'l'm't' courir
SFX iE ourir ourut/n'q'l's' courir
SFX iE ourir ourûmes/n'q'l' courir
SFX iE ourir ourûtes/n'q'l' courir
SFX iE ourir oururent/n'q'l's' courir
SFX iE ourir ourrai/n'q'j'l'm' courir
SFX iE ourir ourras/n'q'l't' courir
SFX iE ourir ourra/n'q'l's' courir
SFX iE ourir ourrons/n'q'l' courir
SFX iE ourir ourrez/n'q'l' courir
SFX iE ourir ourront/n'q'l's' courir
SFX iE ourir ourrais/n'q'j'l'm't' courir
SFX iE ourir ourrait/n'q'l's' courir
SFX iE ourir ourrions/n'q'l' courir
SFX iE ourir ourriez/n'q'l' courir
SFX iE ourir ourraient/n'q'l's' courir
SFX iE ourir oure/n'q'j'l'm's' courir
SFX iE ourir oures/n'l't' courir
SFX iE ourir ourusse/n'q'j'l'm' courir
SFX iE ourir ourusses/n'q'l't' courir
SFX iE ourir ourût/n'q'l's' courir
SFX iE ourir ourussions/n'q'l' courir
SFX iE ourir ourussiez/n'q'l' courir
SFX iE ourir ourussent/n'q'l's' courir
SFX iE ourir ours/n'l' courir
SFX iE ourir ourons/n'l' courir
SFX iE ourir ourez/n'l' courir
SFX iF N 42
SFX iF ervir ervant servir
SFX iF ervir ervi servir
SFX iF ervir ervis servir
SFX iF ervir ervie servir
SFX iF ervir ervies servir
SFX iF ervir ers servir
SFX iF ervir ert servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iF ervir ervent servir
SFX iF ervir ervais servir
SFX iF ervir ervait servir
SFX iF ervir ervions servir
SFX iF ervir erviez servir
SFX iF ervir ervaient servir
SFX iF ervir ervis servir
SFX iF ervir ervit servir
SFX iF ervir ervîmes servir
SFX iF ervir ervîtes servir
SFX iF ervir ervirent servir
SFX iF ervir ervirai servir
SFX iF ervir erviras servir
SFX iF ervir ervira servir
SFX iF ervir ervirons servir
SFX iF ervir ervirez servir
SFX iF ervir erviront servir
SFX iF ervir ervirais servir
SFX iF ervir ervirait servir
SFX iF ervir ervirions servir
SFX iF ervir erviriez servir
SFX iF ervir erviraient servir
SFX iF ervir erve servir
SFX iF ervir erves servir
SFX iF ervir ervisse servir
SFX iF ervir ervisses servir
SFX iF ervir ervît servir
SFX iF ervir ervissions servir
SFX iF ervir ervissiez servir
SFX iF ervir ervissent servir
SFX iF ervir ers servir
SFX iF ervir ervons servir
SFX iF ervir ervez servir
SFX iG N 42
SFX iG êtir êtant vêtir
SFX iG êtir êtu vêtir
SFX iG êtir êtus vêtir
SFX iG êtir êtue vêtir
SFX iG êtir êtues vêtir
SFX iG êtir êts vêtir
SFX iG êtir êt vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iG êtir êtent vêtir
SFX iG êtir êtais vêtir
SFX iG êtir êtait vêtir
SFX iG êtir êtions vêtir
SFX iG êtir êtiez vêtir
SFX iG êtir êtaient vêtir
SFX iG êtir êtis vêtir
SFX iG êtir êtit vêtir
SFX iG êtir êtîmes vêtir
SFX iG êtir êtîtes vêtir
SFX iG êtir êtirent vêtir
SFX iG êtir êtirai vêtir
SFX iG êtir êtiras vêtir
SFX iG êtir êtira vêtir
SFX iG êtir êtirons vêtir
SFX iG êtir êtirez vêtir
SFX iG êtir êtiront vêtir
SFX iG êtir êtirais vêtir
SFX iG êtir êtirait vêtir
SFX iG êtir êtirions vêtir
SFX iG êtir êtiriez vêtir
SFX iG êtir êtiraient vêtir
SFX iG êtir ête vêtir
SFX iG êtir êtes vêtir
SFX iG êtir êtisse vêtir
SFX iG êtir êtisses vêtir
SFX iG êtir êtît vêtir
SFX iG êtir êtissions vêtir
SFX iG êtir êtissiez vêtir
SFX iG êtir êtissent vêtir
SFX iG êtir êts vêtir
SFX iG êtir êtons vêtir
SFX iG êtir êtez vêtir
SFX iI N 39
SFX iI ormir ormant dormir
SFX iI ormir ormi dormir
SFX iI ormir ors dormir
SFX iI ormir ort dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iI ormir orment dormir
SFX iI ormir ormais dormir
SFX iI ormir ormait dormir
SFX iI ormir ormions dormir
SFX iI ormir ormiez dormir
SFX iI ormir ormaient dormir
SFX iI ormir ormis dormir
SFX iI ormir ormit dormir
SFX iI ormir ormîmes dormir
SFX iI ormir ormîtes dormir
SFX iI ormir ormirent dormir
SFX iI ormir ormirai dormir
SFX iI ormir ormiras dormir
SFX iI ormir ormira dormir
SFX iI ormir ormirons dormir
SFX iI ormir ormirez dormir
SFX iI ormir ormiront dormir
SFX iI ormir ormirais dormir
SFX iI ormir ormirait dormir
SFX iI ormir ormirions dormir
SFX iI ormir ormiriez dormir
SFX iI ormir ormiraient dormir
SFX iI ormir orme dormir
SFX iI ormir ormes dormir
SFX iI ormir ormisse dormir
SFX iI ormir ormisses dormir
SFX iI ormir ormît dormir
SFX iI ormir ormissions dormir
SFX iI ormir ormissiez dormir
SFX iI ormir ormissent dormir
SFX iI ormir ors dormir
SFX iI ormir ormons dormir
SFX iI ormir ormez dormir
SFX iJ Y 43
SFX iJ dormir dormir/n'q'd'l'm't's' dormir
SFX iJ dormir dormant/n'q'l'm't's' dormir
SFX iJ dormir dormi/L'D'Q' dormir
SFX iJ dormir dormis/D'Q' dormir
SFX iJ dormir dormie/L'D'Q' dormir
SFX iJ dormir dormies/D'Q' dormir
SFX iJ dormir dors/n'q'j'l'm't' dormir
SFX iJ dormir dort/n'q'l'm't's' dormir
SFX iJ dormir dormons/n'q'l't' dormir
SFX iJ dormir dormez/n'q'l'm' dormir
SFX iJ dormir dorment/n'q'l'm't's' dormir
SFX iJ dormir dormais/n'q'j'l'm't' dormir
SFX iJ dormir dormait/n'q'l'm't's' dormir
SFX iJ dormir dormions/n'q'l't' dormir
SFX iJ dormir dormiez/n'q'l'm' dormir
SFX iJ dormir dormaient/n'q'l'm't's' dormir
SFX iJ dormir dormis/n'q'j'l'm't' dormir
SFX iJ dormir dormit/n'q'l'm't's' dormir
SFX iJ dormir dormîmes/n'q'l't' dormir
SFX iJ dormir dormîtes/n'q'l'm' dormir
SFX iJ dormir dormirent/n'q'l'm't's' dormir
SFX iJ dormir dormirai/n'q'j'l'm't' dormir
SFX iJ dormir dormiras/n'q'l'm't' dormir
SFX iJ dormir dormira/n'q'l'm't's' dormir
SFX iJ dormir dormirons/n'q'l't' dormir
SFX iJ dormir dormirez/n'q'l'm' dormir
SFX iJ dormir dormiront/n'q'l'm't's' dormir
SFX iJ dormir dormirais/n'q'j'l'm't' dormir
SFX iJ dormir dormirait/n'q'l'm't's' dormir
SFX iJ dormir dormirions/n'q'l't' dormir
SFX iJ dormir dormiriez/n'q'l'm' dormir
SFX iJ dormir dormiraient/n'q'l'm't's' dormir
SFX iJ dormir dorme/n'q'j'l'm't's' dormir
SFX iJ dormir dormes/n'l'm't' dormir
SFX iJ dormir dormisse/n'q'j'l'm't' dormir
SFX iJ dormir dormisses/n'q'l'm't' dormir
SFX iJ dormir dormît/n'q'l'm't's' dormir
SFX iJ dormir dormissions/n'q'l't' dormir
SFX iJ dormir dormissiez/n'q'l'm' dormir
SFX iJ dormir dormissent/n'q'l'm't's' dormir
SFX iJ dormir dors/n'l'm't' dormir
SFX iJ dormir dormons/n'l' dormir
SFX iJ dormir dormez/n'l'm' dormir
SFX iK Y 42
SFX iK quérir quérir/n'q'd'l'm't's' quérir
SFX iK quérir quérant/n'q'l'm't's' quérir
SFX iK quérir quis/L'D'Q' quérir
SFX iK quérir quise/L'D'Q' quérir
SFX iK quérir quises/D'Q' quérir
SFX iK quérir quiers/n'q'j'l'm't' quérir
SFX iK quérir quiert/n'q'l'm't's' quérir
SFX iK quérir quérons/n'q'l't' quérir
SFX iK quérir quérez/n'q'l'm' quérir
SFX iK quérir quièrent/n'q'l'm't's' quérir
SFX iK quérir quérais/n'q'j'l'm't' quérir
SFX iK quérir quérait/n'q'l'm't's' quérir
SFX iK quérir quérions/n'q'l't' quérir
SFX iK quérir quériez/n'q'l'm' quérir
SFX iK quérir quéraient/n'q'l'm't's' quérir
SFX iK quérir quis/n'q'j'l'm't' quérir
SFX iK quérir quit/n'q'l'm't's' quérir
SFX iK quérir quîmes/n'q'l't' quérir
SFX iK quérir quîtes/n'q'l'm' quérir
SFX iK quérir quirent/n'q'l'm't's' quérir
SFX iK quérir querrai/n'q'j'l'm't' quérir
SFX iK quérir querras/n'q'l'm't' quérir
SFX iK quérir querra/n'q'l'm't's' quérir
SFX iK quérir querrons/n'q'l't' quérir
SFX iK quérir querrez/n'q'l'm' quérir
SFX iK quérir querront/n'q'l'm't's' quérir
SFX iK quérir querrais/n'q'j'l'm't' quérir
SFX iK quérir querrait/n'q'l'm't's' quérir
SFX iK quérir querrions/n'q'l't' quérir
SFX iK quérir querriez/n'q'l'm' quérir
SFX iK quérir querraient/n'q'l'm't's' quérir
SFX iK quérir quière/n'q'j'l'm't's' quérir
SFX iK quérir quières/n'l'm't' quérir
SFX iK quérir quisse/n'q'j'l'm't' quérir
SFX iK quérir quisses/n'q'l'm't' quérir
SFX iK quérir quît/n'q'l'm't's' quérir
SFX iK quérir quissions/n'q'l't' quérir
SFX iK quérir quissiez/n'q'l'm' quérir
SFX iK quérir quissent/n'q'l'm't's' quérir
SFX iK quérir quiers/n'l'm't' quérir
SFX iK quérir quérons/n'l' quérir
SFX iK quérir quérez/n'l'm' quérir
SFX iM Y 42
SFX iM quérir quérir/m't's' quérir
SFX iM quérir quérant/m't's' quérir
SFX iM quérir quis/L'D'Q' quérir
SFX iM quérir quise/L'D'Q' quérir
SFX iM quérir quises/D'Q' quérir
SFX iM quérir quiers/m't' quérir
SFX iM quérir quiert/s' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iM quérir quièrent/s' quérir
SFX iM quérir quérais/m't' quérir
SFX iM quérir quérait/s' quérir
SFX iM quérir quérions quérir
SFX iM quérir quériez quérir
SFX iM quérir quéraient/s' quérir
SFX iM quérir quis/m't' quérir
SFX iM quérir quit/s' quérir
SFX iM quérir quîmes quérir
SFX iM quérir quîtes quérir
SFX iM quérir quirent/s' quérir
SFX iM quérir querrai/m' quérir
SFX iM quérir querras/t' quérir
SFX iM quérir querra/s' quérir
SFX iM quérir querrons quérir
SFX iM quérir querrez quérir
SFX iM quérir querront/s' quérir
SFX iM quérir querrais/m't' quérir
SFX iM quérir querrait/s' quérir
SFX iM quérir querrions quérir
SFX iM quérir querriez quérir
SFX iM quérir querraient/s' quérir
SFX iM quérir quière/m's' quérir
SFX iM quérir quières/t' quérir
SFX iM quérir quisse/m' quérir
SFX iM quérir quisses/t' quérir
SFX iM quérir quît/s' quérir
SFX iM quérir quissions quérir
SFX iM quérir quissiez quérir
SFX iM quérir quissent/s' quérir
SFX iM quérir quiers/t' quérir
SFX iM quérir quérons quérir
SFX iM quérir quérez quérir
SFX iN N 40
SFX iN uir uyant fuir
SFX iN uir ui fuir
SFX iN uir uis fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uis fuir
SFX iN uir uit fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iN uir uient fuir
SFX iN uir uyais fuir
SFX iN uir uyait fuir
SFX iN uir uyions fuir
SFX iN uir uyiez fuir
SFX iN uir uyaient fuir
SFX iN uir uîmes fuir
SFX iN uir uîtes fuir
SFX iN uir uirent fuir
SFX iN uir uirai fuir
SFX iN uir uiras fuir
SFX iN uir uira fuir
SFX iN uir uirons fuir
SFX iN uir uirez fuir
SFX iN uir uiront fuir
SFX iN uir uirais fuir
SFX iN uir uirait fuir
SFX iN uir uirions fuir
SFX iN uir uiriez fuir
SFX iN uir uiraient fuir
SFX iN uir uie fuir
SFX iN uir uies fuir
SFX iN uir uisse fuir
SFX iN uir uisses fuir
SFX iN uir uît fuir
SFX iN uir uissions fuir
SFX iN uir uissiez fuir
SFX iN uir uissent fuir
SFX iN uir uis fuir
SFX iN uir uyons fuir
SFX iN uir uyez fuir
SFX iO Y 41
SFX iO fuir fuir/m't's' enfuir
SFX iO fuir fuyant/m't's' enfuir
SFX iO fuir fui/L'D'Q' enfuir
SFX iO fuir fuis/D'Q' enfuir
SFX iO fuir fuie/L'D'Q' enfuir
SFX iO fuir fuies/D'Q' enfuir
SFX iO fuir fuis/m't' enfuir
SFX iO fuir fuit/s' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iO fuir fuient/s' enfuir
SFX iO fuir fuyais/m't' enfuir
SFX iO fuir fuyait/s' enfuir
SFX iO fuir fuyions enfuir
SFX iO fuir fuyiez enfuir
SFX iO fuir fuyaient/s' enfuir
SFX iO fuir fuîmes enfuir
SFX iO fuir fuîtes enfuir
SFX iO fuir fuirent/s' enfuir
SFX iO fuir fuirai/m' enfuir
SFX iO fuir fuiras/t' enfuir
SFX iO fuir fuira/s' enfuir
SFX iO fuir fuirons enfuir
SFX iO fuir fuirez enfuir
SFX iO fuir fuiront/s' enfuir
SFX iO fuir fuirais/m't' enfuir
SFX iO fuir fuirait/s' enfuir
SFX iO fuir fuirions enfuir
SFX iO fuir fuiriez enfuir
SFX iO fuir fuiraient/s' enfuir
SFX iO fuir fuie/m's' enfuir
SFX iO fuir fuies/t' enfuir
SFX iO fuir fuisse/m' enfuir
SFX iO fuir fuisses/t' enfuir
SFX iO fuir fuît/s' enfuir
SFX iO fuir fuissions enfuir
SFX iO fuir fuissiez enfuir
SFX iO fuir fuissent/s' enfuir
SFX iO fuir fuis/t' enfuir
SFX iO fuir fuyons enfuir
SFX iO fuir fuyez enfuir
SFX iP N 42
SFX iP ourir ourant mourir
SFX iP ourir ort mourir
SFX iP ourir orts mourir
SFX iP ourir orte mourir
SFX iP ourir ortes mourir
SFX iP ourir eurs mourir
SFX iP ourir eurt mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iP ourir eurent mourir
SFX iP ourir ourais mourir
SFX iP ourir ourait mourir
SFX iP ourir ourions mourir
SFX iP ourir ouriez mourir
SFX iP ourir ouraient mourir
SFX iP ourir ourus mourir
SFX iP ourir ourut mourir
SFX iP ourir ourûmes mourir
SFX iP ourir ourûtes mourir
SFX iP ourir oururent mourir
SFX iP ourir ourrai mourir
SFX iP ourir ourras mourir
SFX iP ourir ourra mourir
SFX iP ourir ourrons mourir
SFX iP ourir ourrez mourir
SFX iP ourir ourront mourir
SFX iP ourir ourrais mourir
SFX iP ourir ourrait mourir
SFX iP ourir ourrions mourir
SFX iP ourir ourriez mourir
SFX iP ourir ourraient mourir
SFX iP ourir eure mourir
SFX iP ourir eures mourir
SFX iP ourir ourusse mourir
SFX iP ourir ourusses mourir
SFX iP ourir ourût mourir
SFX iP ourir ourussions mourir
SFX iP ourir ourussiez mourir
SFX iP ourir ourussent mourir
SFX iP ourir eurs mourir
SFX iP ourir ourons mourir
SFX iP ourir ourez mourir
SFX iQ N 42
SFX iQ ouillir ouillant bouillir
SFX iQ ouillir ouilli bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillie bouillir
SFX iQ ouillir ouillies bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir out bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iQ ouillir ouillent bouillir
SFX iQ ouillir ouillais bouillir
SFX iQ ouillir ouillait bouillir
SFX iQ ouillir ouillions bouillir
SFX iQ ouillir ouilliez bouillir
SFX iQ ouillir ouillaient bouillir
SFX iQ ouillir ouillis bouillir
SFX iQ ouillir ouillit bouillir
SFX iQ ouillir ouillîmes bouillir
SFX iQ ouillir ouillîtes bouillir
SFX iQ ouillir ouillirent bouillir
SFX iQ ouillir ouillirai bouillir
SFX iQ ouillir ouilliras bouillir
SFX iQ ouillir ouillira bouillir
SFX iQ ouillir ouillirons bouillir
SFX iQ ouillir ouillirez bouillir
SFX iQ ouillir ouilliront bouillir
SFX iQ ouillir ouillirais bouillir
SFX iQ ouillir ouillirait bouillir
SFX iQ ouillir ouillirions bouillir
SFX iQ ouillir ouilliriez bouillir
SFX iQ ouillir ouilliraient bouillir
SFX iQ ouillir ouille bouillir
SFX iQ ouillir ouilles bouillir
SFX iQ ouillir ouillisse bouillir
SFX iQ ouillir ouillisses bouillir
SFX iQ ouillir ouillît bouillir
SFX iQ ouillir ouillissions bouillir
SFX iQ ouillir ouillissiez bouillir
SFX iQ ouillir ouillissent bouillir
SFX iQ ouillir ous bouillir
SFX iQ ouillir ouillons bouillir
SFX iQ ouillir ouillez bouillir
SFX iR Y 41
SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir
SFX iR ueillir ueillant/n'q'l'm't's' cueillir
SFX iR ueillir ueilli/L'D'Q' cueillir
SFX iR ueillir ueillis/D'Q' cueillir
SFX iR ueillir ueillie/L'D'Q' cueillir
SFX iR ueillir ueillies/D'Q' cueillir
SFX iR ueillir ueille/n'q'j'l'm't's' cueillir
SFX iR ueillir ueilles/n'q'l'm' cueillir
SFX iR ueillir ueillons/n'q'l't' cueillir
SFX iR ueillir ueillez/n'q'l'm' cueillir
SFX iR ueillir ueillent/n'q'l'm't's' cueillir
SFX iR ueillir ueillais/n'q'j'l't' cueillir
SFX iR ueillir ueillait/n'q'l'm't's' cueillir
SFX iR ueillir ueillions/n'q'l't' cueillir
SFX iR ueillir ueilliez/n'q'l'm' cueillir
SFX iR ueillir ueillaient/n'q'l'm't's' cueillir
SFX iR ueillir ueillis/n'q'j'l't' cueillir
SFX iR ueillir ueillit/n'q'l'm't's' cueillir
SFX iR ueillir ueillîmes/n'q'l't' cueillir
SFX iR ueillir ueillîtes/n'q'l'm' cueillir
SFX iR ueillir ueillirent/n'q'l'm't's' cueillir
SFX iR ueillir ueillerai/n'q'j'l't' cueillir
SFX iR ueillir ueilleras/n'q'l'm' cueillir
SFX iR ueillir ueillera/n'q'l'm't's' cueillir
SFX iR ueillir ueillerons/n'q'l't' cueillir
SFX iR ueillir ueillerez/n'q'l'm' cueillir
SFX iR ueillir ueilleront/n'q'l'm't's' cueillir
SFX iR ueillir ueillerais/n'q'j'l't' cueillir
SFX iR ueillir ueillerait/n'q'l'm't's' cueillir
SFX iR ueillir ueillerions/n'q'l't' cueillir
SFX iR ueillir ueilleriez/n'q'l'm' cueillir
SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir
SFX iR ueillir ueillisse/n'q'j'l't' cueillir
SFX iR ueillir ueillisses/n'q'l'm' cueillir
SFX iR ueillir ueillît/n'q'l'm't's' cueillir
SFX iR ueillir ueillissions/n'q'l't' cueillir
SFX iR ueillir ueillissiez/n'q'l'm' cueillir
SFX iR ueillir ueillissent/n'q'l'm't's' cueillir
SFX iR ueillir ueille/n'l'm' cueillir
SFX iR ueillir ueillons/n'l' cueillir
SFX iR ueillir ueillez/n'l'm' cueillir
SFX iS N 37
SFX iS aillir aillant aillir
SFX iS aillir ailli aillir
SFX iS aillir aille aillir
SFX iS aillir ailles aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iS aillir aillent aillir
SFX iS aillir aillais aillir
SFX iS aillir aillait aillir
SFX iS aillir aillions aillir
SFX iS aillir ailliez aillir
SFX iS aillir aillaient aillir
SFX iS aillir aillis aillir
SFX iS aillir aillit aillir
SFX iS aillir aillîmes aillir
SFX iS aillir aillîtes aillir
SFX iS aillir aillirent aillir
SFX iS aillir aillirai aillir
SFX iS aillir ailliras aillir
SFX iS aillir aillira aillir
SFX iS aillir aillirons aillir
SFX iS aillir aillirez aillir
SFX iS aillir ailliront aillir
SFX iS aillir aillirais aillir
SFX iS aillir aillirait aillir
SFX iS aillir aillirions aillir
SFX iS aillir ailliriez aillir
SFX iS aillir ailliraient aillir
SFX iS aillir aillisse aillir
SFX iS aillir aillisses aillir
SFX iS aillir aillît aillir
SFX iS aillir aillissions aillir
SFX iS aillir aillissiez aillir
SFX iS aillir aillissent aillir
SFX iS aillir aille aillir
SFX iS aillir aillons aillir
SFX iS aillir aillez aillir
SFX iT Y 41
SFX iT saillir saillir/n'q'd'l'm't's' aillir
SFX iT saillir saillant/n'q'l'm't's' aillir
SFX iT saillir sailli/L'D'Q' aillir
SFX iT saillir saillis/D'Q' aillir
SFX iT saillir saillie/L'D'Q' aillir
SFX iT saillir saillies/D'Q' aillir
SFX iT saillir saille/n'q'j'l'm't's' aillir
SFX iT saillir sailles/n'q'l'm't' aillir
SFX iT saillir saillons/n'q'l't' aillir
SFX iT saillir saillez/n'q'l'm' aillir
SFX iT saillir saillent/n'q'l'm't's' aillir
SFX iT saillir saillais/n'q'j'l'm't' aillir
SFX iT saillir saillait/n'q'l'm't's' aillir
SFX iT saillir saillions/n'q'l't' aillir
SFX iT saillir sailliez/n'q'l'm' aillir
SFX iT saillir saillaient/n'q'l'm't's' aillir
SFX iT saillir saillis/n'q'j'l'm't' aillir
SFX iT saillir saillit/n'q'l'm't's' aillir
SFX iT saillir saillîmes/n'q'l't' aillir
SFX iT saillir saillîtes/n'q'l'm' aillir
SFX iT saillir saillirent/n'q'l'm't's' aillir
SFX iT saillir saillirai/n'q'j'l'm't' aillir
SFX iT saillir sailliras/n'q'l'm't' aillir
SFX iT saillir saillira/n'q'l'm't's' aillir
SFX iT saillir saillirons/n'q'l't' aillir
SFX iT saillir saillirez/n'q'l'm' aillir
SFX iT saillir sailliront/n'q'l'm't's' aillir
SFX iT saillir saillirais/n'q'j'l'm't' aillir
SFX iT saillir saillirait/n'q'l'm't's' aillir
SFX iT saillir saillirions/n'q'l't' aillir
SFX iT saillir sailliriez/n'q'l'm' aillir
SFX iT saillir sailliraient/n'q'l'm't's' aillir
SFX iT saillir saillisse/n'q'j'l'm't' aillir
SFX iT saillir saillisses/n'q'l'm't' aillir
SFX iT saillir saillît/n'q'l'm't's' aillir
SFX iT saillir saillissions/n'q'l't' aillir
SFX iT saillir saillissiez/n'q'l'm' aillir
SFX iT saillir saillissent/n'q'l'm't's' aillir
SFX iT saillir saille/n'l'm' aillir
SFX iT saillir saillons/n'l' aillir
SFX iT saillir saillez/n'l'm' aillir
SFX iU N 36
SFX iU aillir aillant faillir
SFX iU aillir ailli faillir
SFX iU aillir aux faillir
SFX iU aillir aut faillir
SFX iU aillir aillons faillir
SFX iU aillir aillez faillir
SFX iU aillir aillent faillir
SFX iU aillir aillais faillir
SFX iU aillir aillait faillir
SFX iU aillir aillions faillir
SFX iU aillir ailliez faillir
SFX iU aillir aillaient faillir
SFX iU aillir aillis faillir
SFX iU aillir aillit faillir
SFX iU aillir aillîmes faillir
SFX iU aillir aillîtes faillir
SFX iU aillir aillirent faillir
SFX iU aillir aillirai faillir
SFX iU aillir ailliras faillir
SFX iU aillir aillira faillir
SFX iU aillir aillirons faillir
SFX iU aillir aillirez faillir
SFX iU aillir ailliront faillir
SFX iU aillir aillirais faillir
SFX iU aillir aillirait faillir
SFX iU aillir aillirions faillir
SFX iU aillir ailliriez faillir
SFX iU aillir ailliraient faillir
SFX iU aillir aille faillir
SFX iU aillir ailles faillir
SFX iU aillir aillisse faillir
SFX iU aillir aillisses faillir
SFX iU aillir aillît faillir
SFX iU aillir aillissions faillir
SFX iU aillir aillissiez faillir
SFX iU aillir aillissent faillir
SFX iV N 11
SFX iV ésir isant gésir
SFX iV ésir is gésir
SFX iV ésir ît gésir
SFX iV ésir isons gésir
SFX iV ésir isez gésir
SFX iV ésir isent gésir
SFX iV ésir isais gésir
SFX iV ésir isait gésir
SFX iV ésir isions gésir
SFX iV ésir isiez gésir
SFX iV ésir isaient gésir
SFX iW Y 54
SFX iW uïr uïr/n'q'd'l'm't's' ouïr
SFX iW uïr yant/n'q'l'm't's' ouïr
SFX iW uïr uï/L'D'Q' ouïr
SFX iW uïr uïs/D'Q' ouïr
SFX iW uïr uïe/L'D'Q' ouïr
SFX iW uïr uïes/D'Q' ouïr
SFX iW uïr is/n'q'j'l'm't' ouïr
SFX iW uïr it/n'q'l'm't' ouïr
SFX iW uïr yons/n'q'l't' ouïr
SFX iW uïr yez/n'q'l'm' ouïr
SFX iW uïr ient/n'q'l'm't's' ouïr
SFX iW uïr yais/n'q'j'l'm't' ouïr
SFX iW uïr yait/n'q'l'm't' ouïr
SFX iW uïr yions/n'q'l't' ouïr
SFX iW uïr yiez/n'q'l'm' ouïr
SFX iW uïr yaient/n'q'l'm't's' ouïr
SFX iW uïr uïs/n'q'j'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïmes/n'q'l't' ouïr
SFX iW uïr uïtes/n'q'l'm' ouïr
SFX iW uïr uïrent/n'q'l'm't's' ouïr
SFX iW uïr uïrai/n'q'j'l'm't' ouïr
SFX iW uïr rrai/n'q'j'l'm't' ouïr
SFX iW uïr uïras/n'q'l'm't' ouïr
SFX iW uïr rras/n'q'l'm't' ouïr
SFX iW uïr uïra/n'q'l'm't' ouïr
SFX iW uïr rra/n'q'l'm't' ouïr
SFX iW uïr uïrons/n'q'l't' ouïr
SFX iW uïr rrons/n'q'l't' ouïr
SFX iW uïr uïrez/n'q'l'm' ouïr
SFX iW uïr rrez/n'q'l'm' ouïr
SFX iW uïr uïront/n'q'l'm't's' ouïr
SFX iW uïr rront/n'q'l'm't's' ouïr
SFX iW uïr uïrais/n'q'j'l'm't' ouïr
SFX iW uïr rrais/n'q'j'l'm't' ouïr
SFX iW uïr uïrait/n'q'l'm't' ouïr
SFX iW uïr rrait/n'q'l'm't' ouïr
SFX iW uïr uïrions/n'q'l't' ouïr
SFX iW uïr rrions/n'q'l't' ouïr
SFX iW uïr uïriez/n'q'l'm' ouïr
SFX iW uïr rriez/n'q'l'm' ouïr
SFX iW uïr uïraient/n'q'l'm't's' ouïr
SFX iW uïr rraient/n'q'l'm't's' ouïr
SFX iW uïr ie/n'q'j'l'm't's' ouïr
SFX iW uïr ies/n'l'm't' ouïr
SFX iW uïr uïsse/n'q'j'l'm't' ouïr
SFX iW uïr uïsses/n'q'l'm't' ouïr
SFX iW uïr uït/n'q'l'm't' ouïr
SFX iW uïr uïssions/n'q'l't' ouïr
SFX iW uïr uïssiez/n'q'l'm' ouïr
SFX iW uïr uïssent/n'q'l'm't's' ouïr
SFX iW uïr is/n'l'm' ouïr
SFX iW uïr yons/n'l' ouïr
SFX iW uïr yez/n'l'm' ouïr
SFX iX N 4
SFX iX érir éru férir
SFX iX érir érus férir
SFX iX érir érue férir
SFX iX érir érues férir
SFX iY Y 5
SFX iY ssir ssir/n'q'd' issir
SFX iY ssir ssu/L'D'Q' issir
SFX iY ssir ssus/D'Q' issir
SFX iY ssir ssue/L'D'Q' issir
SFX iY ssir ssues/D'Q' issir
SFX pA N 42
SFX pA ouvoir ouvant pouvoir
SFX pA ouvoir u pouvoir
SFX pA ouvoir eux pouvoir
SFX pA ouvoir uis pouvoir
SFX pA ouvoir eut pouvoir
SFX pA ouvoir ouvons pouvoir
SFX pA ouvoir ouvez pouvoir
SFX pA ouvoir euvent pouvoir
SFX pA ouvoir ouvais pouvoir
SFX pA ouvoir ouvait pouvoir
SFX pA ouvoir ouvions pouvoir
SFX pA ouvoir ouviez pouvoir
SFX pA ouvoir ouvaient pouvoir
SFX pA ouvoir us pouvoir
SFX pA ouvoir ut pouvoir
SFX pA ouvoir ûmes pouvoir
SFX pA ouvoir ûtes pouvoir
SFX pA ouvoir urent pouvoir
SFX pA ouvoir ourrai pouvoir
SFX pA ouvoir ourras pouvoir
SFX pA ouvoir ourra pouvoir
SFX pA ouvoir ourrons pouvoir
SFX pA ouvoir ourrez pouvoir
SFX pA ouvoir ourront pouvoir
SFX pA ouvoir ourrais pouvoir
SFX pA ouvoir ourrait pouvoir
SFX pA ouvoir ourrions pouvoir
SFX pA ouvoir ourriez pouvoir
SFX pA ouvoir ourraient pouvoir
SFX pA ouvoir uisse pouvoir
SFX pA ouvoir uissé pouvoir
SFX pA ouvoir uisses pouvoir
SFX pA ouvoir uissions pouvoir
SFX pA ouvoir uissiez pouvoir
SFX pA ouvoir uissent pouvoir
SFX pA ouvoir usse pouvoir
SFX pA ouvoir ussé pouvoir
SFX pA ouvoir usses pouvoir
SFX pA ouvoir ût pouvoir
SFX pA ouvoir ussions pouvoir
SFX pA ouvoir ussiez pouvoir
SFX pA ouvoir ussent pouvoir
SFX pB N 47
SFX pB ouloir oulant vouloir
SFX pB ouloir oulu vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulue vouloir
SFX pB ouloir oulues vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir eut vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir oulez vouloir
SFX pB ouloir eulent vouloir
SFX pB ouloir oulais vouloir
SFX pB ouloir oulait vouloir
SFX pB ouloir oulions vouloir
SFX pB ouloir ouliez vouloir
SFX pB ouloir oulaient vouloir
SFX pB ouloir oulus vouloir
SFX pB ouloir oulut vouloir
SFX pB ouloir oulûmes vouloir
SFX pB ouloir oulûtes vouloir
SFX pB ouloir oulurent vouloir
SFX pB ouloir oudrai vouloir
SFX pB ouloir oudras vouloir
SFX pB ouloir oudra vouloir
SFX pB ouloir oudrons vouloir
SFX pB ouloir oudrez vouloir
SFX pB ouloir oudront vouloir
SFX pB ouloir oudrais vouloir
SFX pB ouloir oudrait vouloir
SFX pB ouloir oudrions vouloir
SFX pB ouloir oudriez vouloir
SFX pB ouloir oudraient vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir euillé vouloir
SFX pB ouloir euilles vouloir
SFX pB ouloir euillent vouloir
SFX pB ouloir oulusse vouloir
SFX pB ouloir oulusses vouloir
SFX pB ouloir oulût vouloir
SFX pB ouloir oulussions vouloir
SFX pB ouloir oulussiez vouloir
SFX pB ouloir oulussent vouloir
SFX pB ouloir euille vouloir
SFX pB ouloir eux vouloir
SFX pB ouloir euillons vouloir
SFX pB ouloir oulons vouloir
SFX pB ouloir euillez vouloir
SFX pB ouloir oulez vouloir
SFX pC N 43
SFX pC evoir evant devoir
SFX pC evoir û redevoir
SFX pC evoir us devoir
SFX pC evoir ue devoir
SFX pC evoir ues devoir
SFX pC evoir ois devoir
SFX pC evoir oit devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pC evoir oivent devoir
SFX pC evoir evais devoir
SFX pC evoir evait devoir
SFX pC evoir evions devoir
SFX pC evoir eviez devoir
SFX pC evoir evaient devoir
SFX pC evoir us devoir
SFX pC evoir ut devoir
SFX pC evoir ûmes devoir
SFX pC evoir ûtes devoir
SFX pC evoir urent devoir
SFX pC evoir evrai devoir
SFX pC evoir evras devoir
SFX pC evoir evra devoir
SFX pC evoir evrons devoir
SFX pC evoir evrez devoir
SFX pC evoir evront devoir
SFX pC evoir evrais devoir
SFX pC evoir evrait devoir
SFX pC evoir evrions devoir
SFX pC evoir evriez devoir
SFX pC evoir evraient devoir
SFX pC evoir oive devoir
SFX pC evoir oives devoir
SFX pC evoir usse devoir
SFX pC evoir ussé devoir
SFX pC evoir usses devoir
SFX pC evoir ût devoir
SFX pC evoir ussions devoir
SFX pC evoir ussiez devoir
SFX pC evoir ussent devoir
SFX pC evoir ois devoir
SFX pC evoir evons devoir
SFX pC evoir evez devoir
SFX pD N 1
SFX pD evoir û devoir
SFX pE N 45
SFX pE avoir achant savoir
SFX pE avoir u savoir
SFX pE avoir us savoir
SFX pE avoir ue savoir
SFX pE avoir ues savoir
SFX pE avoir ais savoir
SFX pE avoir ait savoir
SFX pE avoir avons savoir
SFX pE avoir avez savoir
SFX pE avoir avent savoir
SFX pE avoir avais savoir
SFX pE avoir avait savoir
SFX pE avoir avions savoir
SFX pE avoir aviez savoir
SFX pE avoir avaient savoir
SFX pE avoir us savoir
SFX pE avoir ut savoir
SFX pE avoir ûmes savoir
SFX pE avoir ûtes savoir
SFX pE avoir urent savoir
SFX pE avoir aurai savoir
SFX pE avoir auras savoir
SFX pE avoir aura savoir
SFX pE avoir aurons savoir
SFX pE avoir aurez savoir
SFX pE avoir auront savoir
SFX pE avoir aurais savoir
SFX pE avoir aurait savoir
SFX pE avoir aurions savoir
SFX pE avoir auriez savoir
SFX pE avoir auraient savoir
SFX pE avoir ache savoir
SFX pE avoir aches savoir
SFX pE avoir achions savoir
SFX pE avoir achiez savoir
SFX pE avoir achent savoir
SFX pE avoir usse savoir
SFX pE avoir usses savoir
SFX pE avoir ût savoir
SFX pE avoir ussions savoir
SFX pE avoir ussiez savoir
SFX pE avoir ussent savoir
SFX pE avoir ache savoir
SFX pE avoir achons savoir
SFX pE avoir achez savoir
SFX pF Y 54
SFX pF oir oir/n'q'd'l'm't's' voir
SFX pF oir oyant/n'q'l'm't's' voir
SFX pF oir u/L'D'Q' voir
SFX pF oir us/D'Q' voir
SFX pF oir ue/L'D'Q' voir
SFX pF oir ues/D'Q' voir
SFX pF oir ois/n'q'j'l'm't' voir
SFX pF oir oit/n'q'l'm't's' voir
SFX pF oir oyons/n'q'l't' voir
SFX pF oir oyez/n'q'l'm' voir
SFX pF oir oient/n'q'l'm't's' voir
SFX pF oir oyais/n'q'j'l'm't' voir
SFX pF oir oyait/n'q'l'm't's' voir
SFX pF oir oyions/n'q'l't' voir
SFX pF oir oyiez/n'q'l'm' voir
SFX pF oir oyaient/n'q'l'm't's' voir
SFX pF oir is/n'q'j'l'm't' voir
SFX pF oir it/n'q'l'm't's' voir
SFX pF oir îmes/n'q'l't' voir
SFX pF oir îtes/n'q'l'm' voir
SFX pF oir irent/n'q'l'm't's' voir
SFX pF oir errai/n'q'j'l'm't' [^é]voir
SFX pF oir oirai évoir
SFX pF oir erras/n'q'l'm't' [^é]voir
SFX pF oir oiras évoir
SFX pF oir erra/n'q'l'm't's' [^é]voir
SFX pF oir oira évoir
SFX pF oir errons/n'q'l't' [^é]voir
SFX pF oir oirons évoir
SFX pF oir errez/n'q'l'm' [^é]voir
SFX pF oir oirez évoir
SFX pF oir erront/n'q'l'm't's' [^é]voir
SFX pF oir oiront évoir
SFX pF oir errais/n'q'j'l'm't' [^é]voir
SFX pF oir oirais évoir
SFX pF oir errait/n'q'l'm't's' [^é]voir
SFX pF oir oirait évoir
SFX pF oir errions/n'q'l't' [^é]voir
SFX pF oir oirions évoir
SFX pF oir erriez/n'q'l'm' [^é]voir
SFX pF oir oiriez évoir
SFX pF oir erraient/n'q'l'm't's' [^é]voir
SFX pF oir oiraient évoir
SFX pF oir oie/n'q'j'l'm't's' voir
SFX pF oir oies/n'l'm't' voir
SFX pF oir isse/n'q'j'l'm't' voir
SFX pF oir isses/n'q'l'm't' voir
SFX pF oir ît/n'q'l'm't's' voir
SFX pF oir issions/n'q'l't' voir
SFX pF oir issiez/n'q'l'm' voir
SFX pF oir issent/n'q'l'm't's' voir
SFX pF oir ois/n'l'm' voir
SFX pF oir oyons/n'l' voir
SFX pF oir oyez/n'l'm' voir
SFX pG Y 11
SFX pG oir errai voir
SFX pG oir erras voir
SFX pG oir erra voir
SFX pG oir errons voir
SFX pG oir errez voir
SFX pG oir erront voir
SFX pG oir errais voir
SFX pG oir errait voir
SFX pG oir errions voir
SFX pG oir erriez voir
SFX pG oir erraient voir
SFX pH Y 43
SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir
SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir
SFX pH ouvoir u/L'D'Q' .mouvoir
SFX pH ouvoir us/D'Q' mouvoir
SFX pH ouvoir ue/L'D'Q' mouvoir
SFX pH ouvoir ues/D'Q' mouvoir
SFX pH ouvoir eus/n'q'j'l'm't' mouvoir
SFX pH ouvoir eut/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvons/n'q'l't' mouvoir
SFX pH ouvoir ouvez/n'q'l'm' mouvoir
SFX pH ouvoir euvent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvions/n'q'l't' mouvoir
SFX pH ouvoir ouviez/n'q'l'm' mouvoir
SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir
SFX pH ouvoir us/n'q'j'l'm't' mouvoir
SFX pH ouvoir ut/n'q'l'm't's' mouvoir
SFX pH ouvoir ûmes/n'q'l't' mouvoir
SFX pH ouvoir ûtes/n'q'l'm' mouvoir
SFX pH ouvoir urent/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvras/n'q'l'm't' mouvoir
SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrons/n'q'l't' mouvoir
SFX pH ouvoir ouvrez/n'q'l'm' mouvoir
SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir
SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir
SFX pH ouvoir ouvrions/n'q'l't' mouvoir
SFX pH ouvoir ouvriez/n'q'l'm' mouvoir
SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir
SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir
SFX pH ouvoir euves/n'l'm't' mouvoir
SFX pH ouvoir usse/n'q'j'l'm't' mouvoir
SFX pH ouvoir usses/n'q'l'm't' mouvoir
SFX pH ouvoir ût/n'q'l'm't's' mouvoir
SFX pH ouvoir ussions/n'q'l't' mouvoir
SFX pH ouvoir ussiez/n'q'l'm' mouvoir
SFX pH ouvoir ussent/n'q'l'm't's' mouvoir
SFX pH ouvoir eus/n'l'm' mouvoir
SFX pH ouvoir ouvons/n'l' mouvoir
SFX pH ouvoir ouvez/n'l'm' mouvoir
SFX pI N 1
SFX pI ouvoir û/q' mouvoir
SFX pJ N 42
SFX pJ ourvoir ourvoyant pourvoir
SFX pJ ourvoir ourvu pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvue pourvoir
SFX pJ ourvoir ourvues pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoit pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pJ ourvoir ourvoient pourvoir
SFX pJ ourvoir ourvoyais pourvoir
SFX pJ ourvoir ourvoyait pourvoir
SFX pJ ourvoir ourvoyions pourvoir
SFX pJ ourvoir ourvoyiez pourvoir
SFX pJ ourvoir ourvoyaient pourvoir
SFX pJ ourvoir ourvus pourvoir
SFX pJ ourvoir ourvut pourvoir
SFX pJ ourvoir ourvûmes pourvoir
SFX pJ ourvoir ourvûtes pourvoir
SFX pJ ourvoir ourvurent pourvoir
SFX pJ ourvoir ourvoirai pourvoir
SFX pJ ourvoir ourvoiras pourvoir
SFX pJ ourvoir ourvoira pourvoir
SFX pJ ourvoir ourvoirons pourvoir
SFX pJ ourvoir ourvoirez pourvoir
SFX pJ ourvoir ourvoiront pourvoir
SFX pJ ourvoir ourvoirais pourvoir
SFX pJ ourvoir ourvoirait pourvoir
SFX pJ ourvoir ourvoirions pourvoir
SFX pJ ourvoir ourvoiriez pourvoir
SFX pJ ourvoir ourvoiraient pourvoir
SFX pJ ourvoir ourvoie pourvoir
SFX pJ ourvoir ourvoies pourvoir
SFX pJ ourvoir ourvusse pourvoir
SFX pJ ourvoir ourvusses pourvoir
SFX pJ ourvoir ourvût pourvoir
SFX pJ ourvoir ourvussions pourvoir
SFX pJ ourvoir ourvussiez pourvoir
SFX pJ ourvoir ourvussent pourvoir
SFX pJ ourvoir ourvois pourvoir
SFX pJ ourvoir ourvoyons pourvoir
SFX pJ ourvoir ourvoyez pourvoir
SFX pK Y 43
SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir
SFX pK cevoir cevant/n'q'l'm't's' cevoir
SFX pK cevoir çu/L'D'Q' cevoir
SFX pK cevoir çus/D'Q' cevoir
SFX pK cevoir çue/L'D'Q' cevoir
SFX pK cevoir çues/D'Q' cevoir
SFX pK cevoir çois/n'q'j'l'm't' cevoir
SFX pK cevoir çoit/n'q'l'm't's' cevoir
SFX pK cevoir cevons/n'q'l't' cevoir
SFX pK cevoir cevez/n'q'l'm' cevoir
SFX pK cevoir çoivent/n'q'l'm't's' cevoir
SFX pK cevoir cevais/n'q'j'l'm't' cevoir
SFX pK cevoir cevait/n'q'l'm't's' cevoir
SFX pK cevoir cevions/n'q'l't' cevoir
SFX pK cevoir ceviez/n'q'l'm' cevoir
SFX pK cevoir cevaient/n'q'l'm't's' cevoir
SFX pK cevoir çus/n'q'j'l'm't' cevoir
SFX pK cevoir çut/n'q'l'm't's' cevoir
SFX pK cevoir çûmes/n'q'l't' cevoir
SFX pK cevoir çûtes/n'q'l'm' cevoir
SFX pK cevoir çurent/n'q'l'm't's' cevoir
SFX pK cevoir cevrai/n'q'j'l'm't' cevoir
SFX pK cevoir cevras/n'q'l'm't' cevoir
SFX pK cevoir cevra/n'q'l'm't's' cevoir
SFX pK cevoir cevrons/n'q'l't' cevoir
SFX pK cevoir cevrez/n'q'l'm' cevoir
SFX pK cevoir cevront/n'q'l'm't's' cevoir
SFX pK cevoir cevrais/n'q'j'l'm't' cevoir
SFX pK cevoir cevrait/n'q'l'm't's' cevoir
SFX pK cevoir cevrions/n'q'l't' cevoir
SFX pK cevoir cevriez/n'q'l'm' cevoir
SFX pK cevoir cevraient/n'q'l'm't's' cevoir
SFX pK cevoir çoive/n'q'j'l'm't's' cevoir
SFX pK cevoir çoives/n'l'm't' cevoir
SFX pK cevoir çusse/n'q'j'l'm't' cevoir
SFX pK cevoir çusses/n'q'l'm't' cevoir
SFX pK cevoir çût/n'q'l'm't's' cevoir
SFX pK cevoir çussions/n'q'l't' cevoir
SFX pK cevoir çussiez/n'q'l'm' cevoir
SFX pK cevoir çussent/n'q'l'm't's' cevoir
SFX pK cevoir çois/n'l'm't' cevoir
SFX pK cevoir cevons/n'l' cevoir
SFX pK cevoir cevez/n'l'm' cevoir
SFX pM N 40
SFX pM aloir alant valoir
SFX pM aloir alu valoir
SFX pM aloir aux valoir
SFX pM aloir aut valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pM aloir alent valoir
SFX pM aloir alais valoir
SFX pM aloir alait valoir
SFX pM aloir alions valoir
SFX pM aloir aliez valoir
SFX pM aloir alaient valoir
SFX pM aloir alus valoir
SFX pM aloir alut valoir
SFX pM aloir alûmes valoir
SFX pM aloir alûtes valoir
SFX pM aloir alurent valoir
SFX pM aloir audrai valoir
SFX pM aloir audras valoir
SFX pM aloir audra valoir
SFX pM aloir audrons valoir
SFX pM aloir audrez valoir
SFX pM aloir audront valoir
SFX pM aloir audrais valoir
SFX pM aloir audrait valoir
SFX pM aloir audrions valoir
SFX pM aloir audriez valoir
SFX pM aloir audraient valoir
SFX pM aloir aille valoir
SFX pM aloir ailles valoir
SFX pM aloir aillent valoir
SFX pM aloir alusse valoir
SFX pM aloir alusses valoir
SFX pM aloir alût valoir
SFX pM aloir alussions valoir
SFX pM aloir alussiez valoir
SFX pM aloir alussent valoir
SFX pM aloir aux valoir
SFX pM aloir alons valoir
SFX pM aloir alez valoir
SFX pN Y 43
SFX pN valoir valoir/n'q'd'm't's' valoir
SFX pN valoir valant/n'q'm't's' valoir
SFX pN valoir vaux/n'j'm't' valoir
SFX pN valoir vaut/n'm't's' valoir
SFX pN valoir valons/n't' valoir
SFX pN valoir valez/n'm' valoir
SFX pN valoir valent/n'm't's' quivaloir
SFX pN valoir valent révaloir
SFX pN valoir valais/n'j'm't' valoir
SFX pN valoir valait/n'm't's' valoir
SFX pN valoir valions/n't' valoir
SFX pN valoir valiez/n'm' valoir
SFX pN valoir valaient/n'm't's' valoir
SFX pN valoir valus/n'j'm't' valoir
SFX pN valoir valut/n'm't's' valoir
SFX pN valoir valûmes/n't' valoir
SFX pN valoir valûtes/n'm' valoir
SFX pN valoir valurent/n'm't's' valoir
SFX pN valoir vaudrai/n'j'm't' valoir
SFX pN valoir vaudras/n'm't' valoir
SFX pN valoir vaudra/n'm't's' valoir
SFX pN valoir vaudrons/n't' valoir
SFX pN valoir vaudrez/n'm' valoir
SFX pN valoir vaudront/n'm't's' valoir
SFX pN valoir vaudrais/n'j'm't' valoir
SFX pN valoir vaudrait/n'm't's' valoir
SFX pN valoir vaudrions/n't' valoir
SFX pN valoir vaudriez/n'm' valoir
SFX pN valoir vaudraient/n'm't's' valoir
SFX pN valoir vaille/n'j'm't's' quivaloir
SFX pN valoir vale révaloir
SFX pN valoir vailles/n'm't' quivaloir
SFX pN valoir vales révaloir
SFX pN valoir vaillent/n'm't's' quivaloir
SFX pN valoir valusse/n'j'm't' valoir
SFX pN valoir valusses/n'm't' valoir
SFX pN valoir valût/n'm't's' valoir
SFX pN valoir valussions/n't' valoir
SFX pN valoir valussiez/n'm' valoir
SFX pN valoir valussent/n'm't's' valoir
SFX pN valoir vaux valoir
SFX pN valoir valons valoir
SFX pN valoir valez valoir
SFX pO N 16
SFX pO valoir valant revaloir
SFX pO valoir valu revaloir
SFX pO valoir valus revaloir
SFX pO valoir value revaloir
SFX pO valoir values revaloir
SFX pO valoir vaudrai revaloir
SFX pO valoir vaudras revaloir
SFX pO valoir vaudra revaloir
SFX pO valoir vaudrons revaloir
SFX pO valoir vaudrez revaloir
SFX pO valoir vaudront revaloir
SFX pO valoir vaudrais revaloir
SFX pO valoir vaudrait revaloir
SFX pO valoir vaudrions revaloir
SFX pO valoir vaudriez revaloir
SFX pO valoir vaudraient revaloir
SFX pP N 1
SFX pP paroir parant comparoir
SFX pQ N 1
SFX pQ haloir haut chaloir
SFX pR Y 2
SFX pR pparoir pparoir/n'q'd' apparoir
SFX pR pparoir ppert/n'q' apparoir
SFX pS Y 69
SFX pS oir oir/n'q'd'l'm't's' oir
SFX pS sseoir sseyant/n'q'l'm't's' seoir
SFX pS sseoir ssoyant/n'q'l'm't's' seoir
SFX pS sseoir ssis/L'D'Q' seoir
SFX pS sseoir ssise/L'D'Q' seoir
SFX pS sseoir ssises/D'Q' seoir
SFX pS sseoir ssieds/n'q'j'l'm't' seoir
SFX pS sseoir ssied/n'q'l'm't's' seoir
SFX pS sseoir sseyons/n'q'l't' seoir
SFX pS sseoir sseyez/n'q'l'm' seoir
SFX pS sseoir sseyent/n'q'l'm't's' seoir
SFX pS sseoir ssois/n'q'j'l'm't' seoir
SFX pS sseoir ssoit/n'q'l'm't's' seoir
SFX pS sseoir ssoyons/n'q'l't' seoir
SFX pS sseoir ssoyez/n'q'l'm' seoir
SFX pS sseoir ssoient/n'q'l'm't's' seoir
SFX pS sseoir sseyais/n'q'j'l'm't' seoir
SFX pS sseoir sseyait/n'q'l'm't's' seoir
SFX pS sseoir sseyions/n'q'l't' seoir
SFX pS sseoir sseyiez/n'q'l'm' seoir
SFX pS sseoir sseyaient/n'q'l'm't's' seoir
SFX pS sseoir ssoyais/n'q'j'l'm't' seoir
SFX pS sseoir ssoyait/n'q'l'm't's' seoir
SFX pS sseoir ssoyions/n'q'l't' seoir
SFX pS sseoir ssoyiez/n'q'l'm' seoir
SFX pS sseoir ssoyaient/n'q'l'm't's' seoir
SFX pS sseoir ssis/n'q'j'l'm't' seoir
SFX pS sseoir ssit/n'q'l'm't's' seoir
SFX pS sseoir ssîmes/n'q'l't' seoir
SFX pS sseoir ssîtes/n'q'l'm' seoir
SFX pS sseoir ssirent/n'q'l'm't's' seoir
SFX pS sseoir ssiérai/n'q'j'l'm't' seoir
SFX pS sseoir ssiéras/n'q'l'm't' seoir
SFX pS sseoir ssiéra/n'q'l'm't's' seoir
SFX pS sseoir ssiérons/n'q'l't' seoir
SFX pS sseoir ssiérez/n'q'l'm' seoir
SFX pS sseoir ssiéront/n'q'l'm't's' seoir
SFX pS sseoir ssoirai/n'q'j'l'm't' seoir
SFX pS sseoir ssoiras/n'q'l'm't' seoir
SFX pS sseoir ssoira/n'q'l'm't's' seoir
SFX pS sseoir ssoirons/n'q'l't' seoir
SFX pS sseoir ssoirez/n'q'l'm' seoir
SFX pS sseoir ssoiront/n'q'l'm't's' seoir
SFX pS sseoir ssiérais/n'q'j'l'm't' seoir
SFX pS sseoir ssiérait/n'q'l'm't's' seoir
SFX pS sseoir ssiérions/n'q'l't' seoir
SFX pS sseoir ssiériez/n'q'l'm' seoir
SFX pS sseoir ssiéraient/n'q'l'm't's' seoir
SFX pS sseoir ssoirais/n'q'j'l'm't' seoir
SFX pS sseoir ssoirait/n'q'l'm't's' seoir
SFX pS sseoir ssoirions/n'q'l't' seoir
SFX pS sseoir ssoiriez/n'q'l'm' seoir
SFX pS sseoir ssoiraient/n'q'l'm't's' seoir
SFX pS sseoir sseye/n'q'j'l'm't's' seoir
SFX pS sseoir sseyes/n'l'm't' seoir
SFX pS sseoir ssoie/n'q'j'l'm't's' seoir
SFX pS sseoir ssoies/n'l'm't' seoir
SFX pS sseoir ssisse/n'q'j'l'm't' seoir
SFX pS sseoir ssisses/n'q'l'm't' seoir
SFX pS sseoir ssît/n'q'l'm't's' seoir
SFX pS sseoir ssissions/n'q'l't' seoir
SFX pS sseoir ssissiez/n'q'l'm' seoir
SFX pS sseoir ssissent/n'q'l'm't's' seoir
SFX pS sseoir ssieds/n'l'm't' seoir
SFX pS sseoir sseyons/n'l' seoir
SFX pS sseoir sseyez/n'l'm' seoir
SFX pS sseoir ssois/n'l'm't' seoir
SFX pS sseoir ssoyons/n'l' seoir
SFX pS sseoir ssoyez/n'l'm' seoir
SFX pT N 41
SFX pT urseoir ursoyant seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursise seoir
SFX pT urseoir ursises seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoit seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pT urseoir ursoient seoir
SFX pT urseoir ursoyais seoir
SFX pT urseoir ursoyait seoir
SFX pT urseoir ursoyions seoir
SFX pT urseoir ursoyiez seoir
SFX pT urseoir ursoyaient seoir
SFX pT urseoir ursis seoir
SFX pT urseoir ursit seoir
SFX pT urseoir ursîmes seoir
SFX pT urseoir ursîtes seoir
SFX pT urseoir ursirent seoir
SFX pT urseoir urseoirai seoir
SFX pT urseoir urseoiras seoir
SFX pT urseoir urseoira seoir
SFX pT urseoir urseoirons seoir
SFX pT urseoir urseoirez seoir
SFX pT urseoir urseoiront seoir
SFX pT urseoir urseoirais seoir
SFX pT urseoir urseoirait seoir
SFX pT urseoir urseoirions seoir
SFX pT urseoir urseoiriez seoir
SFX pT urseoir urseoiraient seoir
SFX pT urseoir ursoie seoir
SFX pT urseoir ursoies seoir
SFX pT urseoir ursisse seoir
SFX pT urseoir ursisses seoir
SFX pT urseoir ursît seoir
SFX pT urseoir ursissions seoir
SFX pT urseoir ursissiez seoir
SFX pT urseoir ursissent seoir
SFX pT urseoir ursois seoir
SFX pT urseoir ursoyons seoir
SFX pT urseoir ursoyez seoir
SFX pU N 4
SFX pU eoir éant seoir
SFX pU eoir is seoir
SFX pU eoir ise seoir
SFX pU eoir ises seoir
SFX pV N 13
SFX pV eoir éant seoir
SFX pV eoir eyant seoir
SFX pV eoir is seoir
SFX pV eoir ied seoir
SFX pV eoir iéent seoir
SFX pV eoir eyait seoir
SFX pV eoir eyaient seoir
SFX pV eoir iéra seoir
SFX pV eoir iéront seoir
SFX pV eoir iérait seoir
SFX pV eoir iéraient seoir
SFX pV eoir iée seoir
SFX pV eoir iéent seoir
SFX pW N 11
SFX pW sseoir sséant seoir
SFX pW sseoir ssied seoir
SFX pW sseoir ssiéent seoir
SFX pW sseoir sseyait seoir
SFX pW sseoir sseyaient seoir
SFX pW sseoir ssiéra seoir
SFX pW sseoir ssiéront seoir
SFX pW sseoir ssiérait seoir
SFX pW sseoir ssiéraient seoir
SFX pW sseoir ssiée seoir
SFX pW sseoir ssiéent seoir
SFX pX N 52
SFX pX hoir hu choir
SFX pX hoir hus choir
SFX pX hoir hue choir
SFX pX hoir hues choir
SFX pX hoir hois choir
SFX pX hoir hoit choir
SFX pX hoir hoyons choir
SFX pX hoir hoyez choir
SFX pX hoir hoient choir
SFX pX hoir hoyais déchoir
SFX pX hoir hoyait déchoir
SFX pX hoir hoyions déchoir
SFX pX hoir hoyiez déchoir
SFX pX hoir hoyaient déchoir
SFX pX hoir hus choir
SFX pX hoir hut choir
SFX pX hoir hûmes choir
SFX pX hoir hûtes choir
SFX pX hoir hurent choir
SFX pX hoir hoirai choir
SFX pX hoir herrai choir
SFX pX hoir hoiras choir
SFX pX hoir herras choir
SFX pX hoir hoira choir
SFX pX hoir herra choir
SFX pX hoir hoirons choir
SFX pX hoir herrons choir
SFX pX hoir hoirez choir
SFX pX hoir herrez choir
SFX pX hoir hoiront choir
SFX pX hoir herront choir
SFX pX hoir hoirais choir
SFX pX hoir herrais choir
SFX pX hoir hoirait choir
SFX pX hoir herrait choir
SFX pX hoir hoirions choir
SFX pX hoir herrions choir
SFX pX hoir hoiriez choir
SFX pX hoir herriez choir
SFX pX hoir hoiraient choir
SFX pX hoir herraient choir
SFX pX hoir hoie choir
SFX pX hoir hoies choir
SFX pX hoir husse choir
SFX pX hoir husses choir
SFX pX hoir hût choir
SFX pX hoir hussions choir
SFX pX hoir hussiez choir
SFX pX hoir hussent choir
SFX pX hoir hois déchoir
SFX pX hoir hoyons déchoir
SFX pX hoir hoyez déchoir
SFX pY Y 26
SFX pY choir choir/n'q'd' échoir
SFX pY choir chéant/n'q' échoir
SFX pY choir chu/L'D'Q' échoir
SFX pY choir chus/D'Q' échoir
SFX pY choir chue/L'D'Q' échoir
SFX pY choir chues/D'Q' échoir
SFX pY choir choit/n'q' échoir
SFX pY choir chet/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chéent/n'q' échoir
SFX pY choir choyait/n'q' échoir
SFX pY choir choyaient/n'q' échoir
SFX pY choir chut/n'q' échoir
SFX pY choir churent/n'q' échoir
SFX pY choir choira/n'q' échoir
SFX pY choir cherra/n'q' échoir
SFX pY choir choiront/n'q' échoir
SFX pY choir cherront/n'q' échoir
SFX pY choir choirait/n'q' échoir
SFX pY choir cherrait/n'q' échoir
SFX pY choir choiraient/n'q' échoir
SFX pY choir cherraient/n'q' échoir
SFX pY choir choie/n'q' échoir
SFX pY choir choient/n'q' échoir
SFX pY choir chût/n'q' échoir
SFX pY choir chussent/n'q' échoir
SFX pZ N 18
SFX pZ euvoir euvant pleuvoir
SFX pZ euvoir u pleuvoir
SFX pZ euvoir eut pleuvoir
SFX pZ euvoir euvent pleuvoir
SFX pZ euvoir euvait pleuvoir
SFX pZ euvoir euvaient pleuvoir
SFX pZ euvoir ut pleuvoir
SFX pZ euvoir urent pleuvoir
SFX pZ euvoir euvra pleuvoir
SFX pZ euvoir euvront pleuvoir
SFX pZ euvoir euvrait pleuvoir
SFX pZ euvoir euvraient pleuvoir
SFX pZ euvoir euve pleuvoir
SFX pZ euvoir ût pleuvoir
SFX pZ euvoir ussent pleuvoir
SFX pZ euvoir eus pleuvoir
SFX pZ euvoir euvons pleuvoir
SFX pZ euvoir euvez pleuvoir
SFX qA N 8
SFX qA alloir allu falloir
SFX qA alloir aut falloir
SFX qA alloir allait falloir
SFX qA alloir allut falloir
SFX qA alloir audra falloir
SFX qA alloir audrait falloir
SFX qA alloir aille falloir
SFX qA alloir allût falloir
SFX rA Y 28
SFX rA lore lore/n'q'd'l'm't's' clore
SFX rA lore losant/n'q'l'm't's' clore
SFX rA lore los/L'D'Q' clore
SFX rA lore lose/L'D'Q' clore
SFX rA lore loses/D'Q' clore
SFX rA lore los/n'q'j'l'm't' clore
SFX rA lore lot/n'q'l'm't's' .clore
SFX rA lore losons/n'q'l't' clore
SFX rA lore losez/n'q'l'm' clore
SFX rA lore losent/n'q'l'm't's' clore
SFX rA lore lorai/n'q'j'l'm't' clore
SFX rA lore loras/n'q'l'm't' clore
SFX rA lore lora/n'q'l'm't's' clore
SFX rA lore lorons/n'q'l't' clore
SFX rA lore lorez/n'q'l'm' clore
SFX rA lore loront/n'q'l'm't's' clore
SFX rA lore lorais/n'q'j'l'm't' clore
SFX rA lore lorait/n'q'l'm't's' clore
SFX rA lore lorions/n'q'l't' clore
SFX rA lore loriez/n'q'l'm' clore
SFX rA lore loraient/n'q'l'm't's' clore
SFX rA lore lose/n'q'j'l'm't's' clore
SFX rA lore loses/n'l'm't' clore
SFX rA lore losions/n'l't' clore
SFX rA lore losiez/n'l'm' clore
SFX rA lore los/n'l'm' clore
SFX rA lore losons/n'l' clore
SFX rA lore losez/n'l'm' clore
SFX rB Y 1
SFX rB lore lôt clore
SFX rC Y 28
SFX rC clore clore/n'q'd' clore
SFX rC clore closant/n'q' clore
SFX rC clore clos/L'D'Q' clore
SFX rC clore close/L'D'Q' clore
SFX rC clore closes/D'Q' clore
SFX rC clore clos/n'j' clore
SFX rC clore clot/n'q' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rC clore closent/n'q' clore
SFX rC clore clorai/n'j' clore
SFX rC clore cloras/n' clore
SFX rC clore clora/n'q' clore
SFX rC clore clorons/n' clore
SFX rC clore clorez/n' clore
SFX rC clore cloront/n'q' clore
SFX rC clore clorais/n'j' clore
SFX rC clore clorait/n'q' clore
SFX rC clore clorions/n' clore
SFX rC clore cloriez/n' clore
SFX rC clore cloraient/n'q' clore
SFX rC clore close/n'q'j' clore
SFX rC clore closes/n' clore
SFX rC clore closions/n' clore
SFX rC clore closiez/n' clore
SFX rC clore clos/n' clore
SFX rC clore closons/n' clore
SFX rC clore closez/n' clore
SFX rD N 3
SFX rD clore clos clore
SFX rD clore close clore
SFX rD clore closes clore
SFX tA Y 44
SFX tA re re/n'q'd'l'm't's' [dp]re
SFX tA re ant/n'q'l'm't's' [dp]re
SFX tA re u/L'D'Q' [dp]re
SFX tA re us/D'Q' [dp]re
SFX tA re ue/L'D'Q' [dp]re
SFX tA re ues/D'Q' [dp]re
SFX tA re s/n'q'j'l'm't' [dp]re
SFX tA dre d/n'q'l'm't's' dre
SFX tA pre pt/n'q'l'm't's' pre
SFX tA re ons/n'q'l't' [dp]re
SFX tA re ez/n'q'l'm' [dp]re
SFX tA re ent/n'q'l'm't's' [dp]re
SFX tA re ais/n'q'j'l'm't' [dp]re
SFX tA re ait/n'q'l'm't's' [dp]re
SFX tA re ions/n'q'l't' [dp]re
SFX tA re iez/n'q'l'm' [dp]re
SFX tA re aient/n'q'l'm't's' [dp]re
SFX tA re is/n'q'j'l'm't' [dp]re
SFX tA re it/n'q'l'm't's' [dp]re
SFX tA re îmes/n'q'l't' [dp]re
SFX tA re îtes/n'q'l'm' [dp]re
SFX tA re irent/n'q'l'm't's' [dp]re
SFX tA re rai/n'q'j'l'm't' [dp]re
SFX tA re ras/n'q'l'm't' [dp]re
SFX tA re ra/n'q'l'm't's' [dp]re
SFX tA re rons/n'q'l't' [dp]re
SFX tA re rez/n'q'l'm' [dp]re
SFX tA re ront/n'q'l'm't's' [dp]re
SFX tA re rais/n'q'j'l'm't' [dp]re
SFX tA re rait/n'q'l'm't's' [dp]re
SFX tA re rions/n'q'l't' [dp]re
SFX tA re riez/n'q'l'm' [dp]re
SFX tA re raient/n'q'l'm't's' [dp]re
SFX tA re e/n'q'j'l'm't's' [dp]re
SFX tA re es/n'l'm't' [dp]re
SFX tA re isse/n'q'j'l'm't' [dp]re
SFX tA re isses/n'q'l'm't' [dp]re
SFX tA re ît/n'q'l'm't's' [dp]re
SFX tA re issions/n'q'l't' [dp]re
SFX tA re issiez/n'q'l'm' [dp]re
SFX tA re issent/n'q'l'm't's' [dp]re
SFX tA re s/n'l'm't' [dp]re
SFX tA re ons/n'l' [dp]re
SFX tA re ez/n'l'm' [dp]re
SFX tD Y 43
SFX tD perdre perdre/m't's' perdre
SFX tD perdre perdant/m't's' perdre
SFX tD perdre perdu perdre
SFX tD perdre perdus perdre
SFX tD perdre perdue perdre
SFX tD perdre perdues perdre
SFX tD perdre perds/m't' perdre
SFX tD perdre perd/s' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tD perdre perdent/s' perdre
SFX tD perdre perdais/m't' perdre
SFX tD perdre perdait/s' perdre
SFX tD perdre perdions perdre
SFX tD perdre perdiez perdre
SFX tD perdre perdaient/s' perdre
SFX tD perdre perdis/m't' perdre
SFX tD perdre perdit/s' perdre
SFX tD perdre perdîmes perdre
SFX tD perdre perdîtes perdre
SFX tD perdre perdirent/s' perdre
SFX tD perdre perdrai/m' perdre
SFX tD perdre perdras/t' perdre
SFX tD perdre perdra/s' perdre
SFX tD perdre perdrons perdre
SFX tD perdre perdrez perdre
SFX tD perdre perdront/s' perdre
SFX tD perdre perdrais/m't' perdre
SFX tD perdre perdrait/s' perdre
SFX tD perdre perdrions perdre
SFX tD perdre perdriez perdre
SFX tD perdre perdraient/s' perdre
SFX tD perdre perde/m's' perdre
SFX tD perdre perdes/t' perdre
SFX tD perdre perdisse/m' perdre
SFX tD perdre perdisses/t' perdre
SFX tD perdre perdît/s' perdre
SFX tD perdre perdissions perdre
SFX tD perdre perdissiez perdre
SFX tD perdre perdissent/s' perdre
SFX tD perdre perds/t' perdre
SFX tD perdre perdons perdre
SFX tD perdre perdez perdre
SFX tE N 38
SFX tE dre dant dre
SFX tE dre ds dre
SFX tE dre d dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tE dre dent dre
SFX tE dre dais dre
SFX tE dre dait dre
SFX tE dre dions dre
SFX tE dre diez dre
SFX tE dre daient dre
SFX tE dre dis dre
SFX tE dre dit dre
SFX tE dre dîmes dre
SFX tE dre dîtes dre
SFX tE dre dirent dre
SFX tE dre drai dre
SFX tE dre dras dre
SFX tE dre dra dre
SFX tE dre drons dre
SFX tE dre drez dre
SFX tE dre dront dre
SFX tE dre drais dre
SFX tE dre drait dre
SFX tE dre drions dre
SFX tE dre driez dre
SFX tE dre draient dre
SFX tE dre de dre
SFX tE dre des dre
SFX tE dre disse dre
SFX tE dre disses dre
SFX tE dre dît dre
SFX tE dre dissions dre
SFX tE dre dissiez dre
SFX tE dre dissent dre
SFX tE dre ds dre
SFX tE dre dons dre
SFX tE dre dez dre
SFX tF Y 42
SFX tF rendre rendre/n'q'd'l'm't's' prendre
SFX tF rendre renant/n'q'l'm't's' prendre
SFX tF rendre ris/L'D'Q' prendre
SFX tF rendre rise/L'D'Q' prendre
SFX tF rendre rises/D'Q' prendre
SFX tF rendre rends/n'q'j'l'm't' prendre
SFX tF rendre rend/n'q'l'm't's' prendre
SFX tF rendre renons/n'q'l't' prendre
SFX tF rendre renez/n'q'l'm' prendre
SFX tF rendre rennent/n'q'l'm't's' prendre
SFX tF rendre renais/n'q'j'l'm't' prendre
SFX tF rendre renait/n'q'l'm't's' prendre
SFX tF rendre renions/n'q'l't' prendre
SFX tF rendre reniez/n'q'l'm' prendre
SFX tF rendre renaient/n'q'l'm't's' prendre
SFX tF rendre ris/n'q'j'l'm't' prendre
SFX tF rendre rit/n'q'l'm't's' prendre
SFX tF rendre rîmes/n'q'l't' prendre
SFX tF rendre rîtes/n'q'l'm' prendre
SFX tF rendre rirent/n'q'l'm't's' prendre
SFX tF rendre rendrai/n'q'j'l'm't' prendre
SFX tF rendre rendras/n'q'l'm't' prendre
SFX tF rendre rendra/n'q'l'm't's' prendre
SFX tF rendre rendrons/n'q'l't' prendre
SFX tF rendre rendrez/n'q'l'm' prendre
SFX tF rendre rendront/n'q'l'm't's' prendre
SFX tF rendre rendrais/n'q'j'l'm't' prendre
SFX tF rendre rendrait/n'q'l'm't's' prendre
SFX tF rendre rendrions/n'q'l't' prendre
SFX tF rendre rendriez/n'q'l'm' prendre
SFX tF rendre rendraient/n'q'l'm't's' prendre
SFX tF rendre renne/n'q'j'l'm't's' prendre
SFX tF rendre rennes/n'l'm't' prendre
SFX tF rendre risse/n'q'j'l'm't' prendre
SFX tF rendre risses/n'q'l'm't' prendre
SFX tF rendre rît/n'q'l'm't's' prendre
SFX tF rendre rissions/n'q'l't' prendre
SFX tF rendre rissiez/n'q'l'm' prendre
SFX tF rendre rissent/n'q'l'm't's' prendre
SFX tF rendre rends/n'l'm' prendre
SFX tF rendre renons/n'l' prendre
SFX tF rendre renez/n'l'm' prendre
SFX tG Y 42
SFX tG prendre prendre/m't's' prendre
SFX tG prendre prenant/m't's' prendre
SFX tG prendre pris/L'D'Q' prendre
SFX tG prendre prise/L'D'Q' prendre
SFX tG prendre prises/D'Q' prendre
SFX tG prendre prends/m't' prendre
SFX tG prendre prend/s' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tG prendre prennent/s' prendre
SFX tG prendre prenais/m't' prendre
SFX tG prendre prenait/s' prendre
SFX tG prendre prenions prendre
SFX tG prendre preniez prendre
SFX tG prendre prenaient/s' prendre
SFX tG prendre pris/m't' prendre
SFX tG prendre prit/s' prendre
SFX tG prendre prîmes prendre
SFX tG prendre prîtes prendre
SFX tG prendre prirent/s' prendre
SFX tG prendre prendrai/m' prendre
SFX tG prendre prendras/t' prendre
SFX tG prendre prendra/s' prendre
SFX tG prendre prendrons prendre
SFX tG prendre prendrez prendre
SFX tG prendre prendront/s' prendre
SFX tG prendre prendrais/m't' prendre
SFX tG prendre prendrait/s' prendre
SFX tG prendre prendrions prendre
SFX tG prendre prendriez prendre
SFX tG prendre prendraient/s' prendre
SFX tG prendre prenne/m's' prendre
SFX tG prendre prennes/t' prendre
SFX tG prendre prisse/m' prendre
SFX tG prendre prisses/t' prendre
SFX tG prendre prît/s' prendre
SFX tG prendre prissions prendre
SFX tG prendre prissiez prendre
SFX tG prendre prissent/s' prendre
SFX tG prendre prends/t' prendre
SFX tG prendre prenons prendre
SFX tG prendre prenez prendre
SFX tM N 31
SFX tM outre outant foutre
SFX tM outre outu foutre
SFX tM outre outus foutre
SFX tM outre outue foutre
SFX tM outre outues foutre
SFX tM outre ous foutre
SFX tM outre out foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tM outre outent foutre
SFX tM outre outais foutre
SFX tM outre outait foutre
SFX tM outre outions foutre
SFX tM outre outiez foutre
SFX tM outre outaient foutre
SFX tM outre outrai foutre
SFX tM outre outras foutre
SFX tM outre outra foutre
SFX tM outre outrons foutre
SFX tM outre outrez foutre
SFX tM outre outront foutre
SFX tM outre outrais foutre
SFX tM outre outrait foutre
SFX tM outre outrions foutre
SFX tM outre outriez foutre
SFX tM outre outraient foutre
SFX tM outre oute foutre
SFX tM outre outes foutre
SFX tM outre ous foutre
SFX tM outre outons foutre
SFX tM outre outez foutre
SFX tU N 4
SFX tU istre issu tistre
SFX tU istre issus tistre
SFX tU istre issue tistre
SFX tU istre issues tistre
SFX uA Y 45
SFX uA tre tre/n'q'd'l'm't's' tre
SFX uA tre tant/n'q'l'm't's' tre
SFX uA tre tu/L'D'Q' tre
SFX uA tre tus/D'Q' tre
SFX uA tre tue/L'D'Q' tre
SFX uA tre tues/D'Q' tre
SFX uA ttre ts/n'q'j'l'm't' ttre
SFX uA ttre t/n'q'l'm't's' ttre
SFX uA tre ts/n'q'j'l'm't' embatre
SFX uA tre t/n'q'l'm't's' embatre
SFX uA tre tons/n'q'l't' tre
SFX uA tre tez/n'q'l'm' tre
SFX uA tre tent/n'q'l'm't's' tre
SFX uA tre tais/n'q'j'l'm't' tre
SFX uA tre tait/n'q'l'm't's' tre
SFX uA tre tions/n'q'l't' tre
SFX uA tre tiez/n'q'l'm' tre
SFX uA tre taient/n'q'l'm't's' tre
SFX uA tre tis/n'q'j'l'm't' tre
SFX uA tre tit/n'q'l'm't's' tre
SFX uA tre tîmes/n'q'l't' tre
SFX uA tre tîtes/n'q'l'm' tre
SFX uA tre tirent/n'q'l'm't's' tre
SFX uA tre trai/n'q'j'l'm't' tre
SFX uA tre tras/n'q'l'm't' tre
SFX uA tre tra/n'q'l'm't's' tre
SFX uA tre trons/n'q'l't' tre
SFX uA tre trez/n'q'l'm' tre
SFX uA tre tront/n'q'l'm't's' tre
SFX uA tre trais/n'q'j'l'm't' tre
SFX uA tre trait/n'q'l'm't's' tre
SFX uA tre trions/n'q'l't' tre
SFX uA tre triez/n'q'l'm' tre
SFX uA tre traient/n'q'l'm't's' tre
SFX uA tre te/n'q'j'l'm't's' tre
SFX uA tre tes/n'l'm't' tre
SFX uA tre tisse/n'q'j'l'm't' tre
SFX uA tre tisses/n'q'l'm't' tre
SFX uA tre tît/n'q'l'm't's' tre
SFX uA tre tissions/n'q'l't' tre
SFX uA tre tissiez/n'q'l'm' tre
SFX uA tre tissent/n'q'l'm't's' tre
SFX uA tre s/n'l'm't' tre
SFX uA tre tons/n'l' tre
SFX uA tre tez/n'l'm' tre
SFX uC Y 43
SFX uC battre battre/m't's' battre
SFX uC battre battant/m't's' battre
SFX uC battre battu battre
SFX uC battre battus battre
SFX uC battre battue battre
SFX uC battre battues battre
SFX uC battre bats/m't' battre
SFX uC battre bat/s' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uC battre battent/s' battre
SFX uC battre battais/m't' battre
SFX uC battre battait/s' battre
SFX uC battre battions battre
SFX uC battre battiez battre
SFX uC battre battaient/s' battre
SFX uC battre battis/m't' battre
SFX uC battre battit/s' battre
SFX uC battre battîmes battre
SFX uC battre battîtes battre
SFX uC battre battirent/s' battre
SFX uC battre battrai/m' battre
SFX uC battre battras/t' battre
SFX uC battre battra/s' battre
SFX uC battre battrons battre
SFX uC battre battrez battre
SFX uC battre battront/s' battre
SFX uC battre battrais/m't' battre
SFX uC battre battrait/s' battre
SFX uC battre battrions battre
SFX uC battre battriez battre
SFX uC battre battraient/s' battre
SFX uC battre batte/m's' battre
SFX uC battre battes/t' battre
SFX uC battre battisse/m' battre
SFX uC battre battisses/t' battre
SFX uC battre battît/s' battre
SFX uC battre battissions battre
SFX uC battre battissiez battre
SFX uC battre battissent/s' battre
SFX uC battre bats/t' battre
SFX uC battre battons battre
SFX uC battre battez battre
SFX uD Y 33
SFX uD battre battre/s' battre
SFX uD battre battant/s' battre
SFX uD battre battu battre
SFX uD battre battus battre
SFX uD battre battue battre
SFX uD battre battues battre
SFX uD battre bat/s' battre
SFX uD battre battons battre
SFX uD battre battez battre
SFX uD battre battent/s' battre
SFX uD battre battait/s' battre
SFX uD battre battions battre
SFX uD battre battiez battre
SFX uD battre battaient/s' battre
SFX uD battre battit/s' battre
SFX uD battre battîmes battre
SFX uD battre battîtes battre
SFX uD battre battirent/s' battre
SFX uD battre battra/s' battre
SFX uD battre battrons battre
SFX uD battre battrez battre
SFX uD battre battront/s' battre
SFX uD battre battrait/s' battre
SFX uD battre battrions battre
SFX uD battre battriez battre
SFX uD battre battraient/s' battre
SFX uD battre batte/s' battre
SFX uD battre battît/s' battre
SFX uD battre battissions battre
SFX uD battre battissiez battre
SFX uD battre battissent/s' battre
SFX uD battre battons-nous battre
SFX uD battre battez-vous battre
SFX vA Y 42
SFX vA ettre ettre/n'q'd'l'm't's' mettre
SFX vA ettre ettant/n'q'l'm't's' mettre
SFX vA ettre is/L'D'Q' mettre
SFX vA ettre ise/L'D'Q' mettre
SFX vA ettre ises/D'Q' mettre
SFX vA ettre ets/n'q'j'l'm't' mettre
SFX vA ettre et/n'q'l'm't's' mettre
SFX vA ettre ettons/n'q'l't' mettre
SFX vA ettre ettez/n'q'l'm' mettre
SFX vA ettre ettent/n'q'l'm't's' mettre
SFX vA ettre ettais/n'q'j'l'm't' mettre
SFX vA ettre ettait/n'q'l'm't's' mettre
SFX vA ettre ettions/n'q'l't' mettre
SFX vA ettre ettiez/n'q'l'm' mettre
SFX vA ettre ettaient/n'q'l'm't's' mettre
SFX vA ettre is/n'q'j'l'm't' mettre
SFX vA ettre it/n'q'l'm't's' mettre
SFX vA ettre îmes/n'q'l't' mettre
SFX vA ettre îtes/n'q'l'm' mettre
SFX vA ettre irent/n'q'l'm't's' mettre
SFX vA ettre ettrai/n'q'j'l'm't' mettre
SFX vA ettre ettras/n'q'l'm't' mettre
SFX vA ettre ettra/n'q'l'm't's' mettre
SFX vA ettre ettrons/n'q'l't' mettre
SFX vA ettre ettrez/n'q'l'm' mettre
SFX vA ettre ettront/n'q'l'm't's' mettre
SFX vA ettre ettrais/n'q'j'l'm't' mettre
SFX vA ettre ettrait/n'q'l'm't's' mettre
SFX vA ettre ettrions/n'q'l't' mettre
SFX vA ettre ettriez/n'q'l'm' mettre
SFX vA ettre ettraient/n'q'l'm't's' mettre
SFX vA ettre ette/n'q'j'l'm't's' mettre
SFX vA ettre ettes/n'l'm't' mettre
SFX vA ettre isse/n'q'j'l'm't' mettre
SFX vA ettre isses/n'q'l'm't' mettre
SFX vA ettre ît/n'q'l'm't's' mettre
SFX vA ettre issions/n'q'l't' mettre
SFX vA ettre issiez/n'q'l'm' mettre
SFX vA ettre issent/n'q'l'm't's' mettre
SFX vA ettre ets/n'l'm't' mettre
SFX vA ettre ettons/n'l' mettre
SFX vA ettre ettez/n'l'm' mettre
SFX vC Y 42
SFX vC mettre mettre/m't's' mettre
SFX vC mettre mettant/m't's' mettre
SFX vC mettre mis mettre
SFX vC mettre mise mettre
SFX vC mettre mises mettre
SFX vC mettre mets/m't' mettre
SFX vC mettre met/s' mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX vC mettre mettent/s' mettre
SFX vC mettre mettais/m't' mettre
SFX vC mettre mettait/s' mettre
SFX vC mettre mettions mettre
SFX vC mettre mettiez mettre
SFX vC mettre mettaient/s' mettre
SFX vC mettre mis/m't' mettre
SFX vC mettre mit/s' mettre
SFX vC mettre mîmes mettre
SFX vC mettre mîtes mettre
SFX vC mettre mirent/s' mettre
SFX vC mettre mettrai/m' mettre
SFX vC mettre mettras/t' mettre
SFX vC mettre mettra/s' mettre
SFX vC mettre mettrons mettre
SFX vC mettre mettrez mettre
SFX vC mettre mettront/s' mettre
SFX vC mettre mettrais/m't' mettre
SFX vC mettre mettrait/s' mettre
SFX vC mettre mettrions mettre
SFX vC mettre mettriez mettre
SFX vC mettre mettraient/s' mettre
SFX vC mettre mette/m's' mettre
SFX vC mettre mettes/t' mettre
SFX vC mettre misse/m' mettre
SFX vC mettre misses/t' mettre
SFX vC mettre mît/s' mettre
SFX vC mettre missions mettre
SFX vC mettre missiez mettre
SFX vC mettre missent/s' mettre
SFX vC mettre mets mettre
SFX vC mettre mettons mettre
SFX vC mettre mettez mettre
SFX wA N 42
SFX wA eindre eignant eindre
SFX wA eindre eint eindre
SFX wA eindre eints eindre
SFX wA eindre einte eindre
SFX wA eindre eintes eindre
SFX wA eindre eins eindre
SFX wA eindre eint eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wA eindre eignent eindre
SFX wA eindre eignais eindre
SFX wA eindre eignait eindre
SFX wA eindre eignions eindre
SFX wA eindre eigniez eindre
SFX wA eindre eignaient eindre
SFX wA eindre eignis eindre
SFX wA eindre eignit eindre
SFX wA eindre eignîmes eindre
SFX wA eindre eignîtes eindre
SFX wA eindre eignirent eindre
SFX wA eindre eindrai eindre
SFX wA eindre eindras eindre
SFX wA eindre eindra eindre
SFX wA eindre eindrons eindre
SFX wA eindre eindrez eindre
SFX wA eindre eindront eindre
SFX wA eindre eindrais eindre
SFX wA eindre eindrait eindre
SFX wA eindre eindrions eindre
SFX wA eindre eindriez eindre
SFX wA eindre eindraient eindre
SFX wA eindre eigne eindre
SFX wA eindre eignes eindre
SFX wA eindre eignisse eindre
SFX wA eindre eignisses eindre
SFX wA eindre eignît eindre
SFX wA eindre eignissions eindre
SFX wA eindre eignissiez eindre
SFX wA eindre eignissent eindre
SFX wA eindre eins eindre
SFX wA eindre eignons eindre
SFX wA eindre eignez eindre
SFX wB Y 43
SFX wB indre indre/n'q'd'l'm't's' indre
SFX wB indre ignant/n'q'l'm't's' indre
SFX wB indre int/L'D'Q' indre
SFX wB indre ints/D'Q' indre
SFX wB indre inte/L'D'Q' indre
SFX wB indre intes/D'Q' indre
SFX wB indre ins/n'q'j'l'm't' indre
SFX wB indre int/n'q'l'm't's' indre
SFX wB indre ignons/n'q'l't' indre
SFX wB indre ignez/n'q'l'm' indre
SFX wB indre ignent/n'q'l'm't's' indre
SFX wB indre ignais/n'q'j'l'm't' indre
SFX wB indre ignait/n'q'l'm't's' indre
SFX wB indre ignions/n'q'l't' indre
SFX wB indre igniez/n'q'l'm' indre
SFX wB indre ignaient/n'q'l'm't's' indre
SFX wB indre ignis/n'q'j'l'm't' indre
SFX wB indre ignit/n'q'l'm't's' indre
SFX wB indre ignîmes/n'q'l't' indre
SFX wB indre ignîtes/n'q'l'm' indre
SFX wB indre ignirent/n'q'l'm't's' indre
SFX wB indre indrai/n'q'j'l'm't' indre
SFX wB indre indras/n'q'l'm't' indre
SFX wB indre indra/n'q'l'm't's' indre
SFX wB indre indrons/n'q'l't' indre
SFX wB indre indrez/n'q'l'm' indre
SFX wB indre indront/n'q'l'm't's' indre
SFX wB indre indrais/n'q'j'l'm't' indre
SFX wB indre indrait/n'q'l'm't's' indre
SFX wB indre indrions/n'q'l't' indre
SFX wB indre indriez/n'q'l'm' indre
SFX wB indre indraient/n'q'l'm't's' indre
SFX wB indre igne/n'q'j'l'm't's' indre
SFX wB indre ignes/n'l'm't' indre
SFX wB indre ignisse/n'q'j'l'm't' indre
SFX wB indre ignisses/n'q'l'm't' indre
SFX wB indre ignît/n'q'l'm't's' indre
SFX wB indre ignissions/n'q'l't' indre
SFX wB indre ignissiez/n'q'l'm' indre
SFX wB indre ignissent/n'q'l'm't's' indre
SFX wB indre ins/n'l'm't' indre
SFX wB indre ignons/n'l' indre
SFX wB indre ignez/n'l'm' indre
SFX wD N 45
SFX wD aire aisant faire
SFX wD aire ait faire
SFX wD aire aits faire
SFX wD aire aite faire
SFX wD aire aites faire
SFX wD aire ais faire
SFX wD aire ait faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wD aire ont faire
SFX wD aire aisais faire
SFX wD aire aisait faire
SFX wD aire aisions faire
SFX wD aire aisiez faire
SFX wD aire aisaient faire
SFX wD aire is faire
SFX wD aire it faire
SFX wD aire îmes faire
SFX wD aire îtes faire
SFX wD aire irent faire
SFX wD aire erai faire
SFX wD aire eras faire
SFX wD aire era faire
SFX wD aire erons faire
SFX wD aire erez faire
SFX wD aire eront faire
SFX wD aire erais faire
SFX wD aire erait faire
SFX wD aire erions faire
SFX wD aire eriez faire
SFX wD aire eraient faire
SFX wD aire asse faire
SFX wD aire asses faire
SFX wD aire assions faire
SFX wD aire assiez faire
SFX wD aire assent faire
SFX wD aire isse faire
SFX wD aire isses faire
SFX wD aire ît faire
SFX wD aire issions faire
SFX wD aire issiez faire
SFX wD aire issent faire
SFX wD aire ais faire
SFX wD aire aisons faire
SFX wD aire aites faire
SFX wF N 13
SFX wF faire faisant faire
SFX wF faire fait faire
SFX wF faire faits faire
SFX wF faire faite faire
SFX wF faire faites faire
SFX wF faire fais faire
SFX wF faire fait faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wF faire font faire
SFX wF faire fais faire
SFX wF faire faisons faire
SFX wF faire faites faire
SFX wG N 5
SFX wG aire aisant faire
SFX wG aire ait faire
SFX wG aire aits faire
SFX wG aire aite faire
SFX wG aire aites faire
SFX wL Y 32
SFX wL raire raire/n'q'd'l'm't's' traire
SFX wL raire rayant/n'q'l'm't's' traire
SFX wL raire rait/L'D'Q' traire
SFX wL raire raits/D'Q' traire
SFX wL raire raite/L'D'Q' traire
SFX wL raire raites/D'Q' traire
SFX wL raire rais/n'q'j'l'm't' traire
SFX wL raire rait/n'q'l'm't's' traire
SFX wL raire rayons/n'q'l't' traire
SFX wL raire rayez/n'q'l'm' traire
SFX wL raire raient/n'q'l'm't's' traire
SFX wL raire rayais/n'q'j'l'm't' traire
SFX wL raire rayait/n'q'l'm't's' traire
SFX wL raire rayions/n'q'l't' traire
SFX wL raire rayiez/n'q'l'm' traire
SFX wL raire rayaient/n'q'l'm't's' traire
SFX wL raire rairai/n'q'j'l'm't' traire
SFX wL raire rairas/n'q'l'm't' traire
SFX wL raire raira/n'q'l'm't's' traire
SFX wL raire rairons/n'q'l't' traire
SFX wL raire rairez/n'q'l'm' traire
SFX wL raire rairont/n'q'l'm't's' traire
SFX wL raire rairais/n'q'j'l'm't' traire
SFX wL raire rairait/n'q'l'm't's' traire
SFX wL raire rairions/n'q'l't' traire
SFX wL raire rairiez/n'q'l'm' traire
SFX wL raire rairaient/n'q'l'm't's' traire
SFX wL raire raie/n'q'j'l'm't's' traire
SFX wL raire raies/n'q'l'm't' traire
SFX wL raire rais/n'l'm't' traire
SFX wL raire rayons/n'l' traire
SFX wL raire rayez/n'l'm' traire
SFX wM N 28
SFX wM aire ayant raire
SFX wM aire ait raire
SFX wM aire ais raire
SFX wM aire ait raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wM aire aient raire
SFX wM aire ayais raire
SFX wM aire ayait raire
SFX wM aire ayions raire
SFX wM aire ayiez raire
SFX wM aire ayaient raire
SFX wM aire airai raire
SFX wM aire airas raire
SFX wM aire aira raire
SFX wM aire airons raire
SFX wM aire airez raire
SFX wM aire airont raire
SFX wM aire airais raire
SFX wM aire airait raire
SFX wM aire airions raire
SFX wM aire airiez raire
SFX wM aire airaient raire
SFX wM aire aie raire
SFX wM aire aies raire
SFX wM aire ais raire
SFX wM aire ayons raire
SFX wM aire ayez raire
SFX wN N 39
SFX wN aire aisant aire
SFX wN aire ais aire
SFX wN aire ait taire
SFX wN aire aît plaire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wN aire aisent aire
SFX wN aire aisais aire
SFX wN aire aisait aire
SFX wN aire aisions aire
SFX wN aire aisiez aire
SFX wN aire aisaient aire
SFX wN aire us aire
SFX wN aire ut aire
SFX wN aire ûmes aire
SFX wN aire ûtes aire
SFX wN aire urent aire
SFX wN aire airai aire
SFX wN aire airas aire
SFX wN aire aira aire
SFX wN aire airons aire
SFX wN aire airez aire
SFX wN aire airont aire
SFX wN aire airais aire
SFX wN aire airait aire
SFX wN aire airions aire
SFX wN aire airiez aire
SFX wN aire airaient aire
SFX wN aire aise aire
SFX wN aire aises aire
SFX wN aire usse aire
SFX wN aire usses aire
SFX wN aire ût aire
SFX wN aire ussions aire
SFX wN aire ussiez aire
SFX wN aire ussent aire
SFX wN aire ais aire
SFX wN aire aisons aire
SFX wN aire aisez aire
SFX wO N 42
SFX wO aindre aignant aindre
SFX wO aindre aint aindre
SFX wO aindre aints aindre
SFX wO aindre ainte aindre
SFX wO aindre aintes aindre
SFX wO aindre ains aindre
SFX wO aindre aint aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wO aindre aignent aindre
SFX wO aindre aignais aindre
SFX wO aindre aignait aindre
SFX wO aindre aignions aindre
SFX wO aindre aigniez aindre
SFX wO aindre aignaient aindre
SFX wO aindre aignis aindre
SFX wO aindre aignit aindre
SFX wO aindre aignîmes aindre
SFX wO aindre aignîtes aindre
SFX wO aindre aignirent aindre
SFX wO aindre aindrai aindre
SFX wO aindre aindras aindre
SFX wO aindre aindra aindre
SFX wO aindre aindrons aindre
SFX wO aindre aindrez aindre
SFX wO aindre aindront aindre
SFX wO aindre aindrais aindre
SFX wO aindre aindrait aindre
SFX wO aindre aindrions aindre
SFX wO aindre aindriez aindre
SFX wO aindre aindraient aindre
SFX wO aindre aigne aindre
SFX wO aindre aignes aindre
SFX wO aindre aignisse aindre
SFX wO aindre aignisses aindre
SFX wO aindre aignît aindre
SFX wO aindre aignissions aindre
SFX wO aindre aignissiez aindre
SFX wO aindre aignissent aindre
SFX wO aindre ains aindre
SFX wO aindre aignons aindre
SFX wO aindre aignez aindre
SFX wP N 42
SFX wP aincre ainquant vaincre
SFX wP aincre aincu vaincre
SFX wP aincre aincus vaincre
SFX wP aincre aincue vaincre
SFX wP aincre aincues vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainc vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wP aincre ainquent vaincre
SFX wP aincre ainquais vaincre
SFX wP aincre ainquait vaincre
SFX wP aincre ainquions vaincre
SFX wP aincre ainquiez vaincre
SFX wP aincre ainquaient vaincre
SFX wP aincre ainquis vaincre
SFX wP aincre ainquit vaincre
SFX wP aincre ainquîmes vaincre
SFX wP aincre ainquîtes vaincre
SFX wP aincre ainquirent vaincre
SFX wP aincre aincrai vaincre
SFX wP aincre aincras vaincre
SFX wP aincre aincra vaincre
SFX wP aincre aincrons vaincre
SFX wP aincre aincrez vaincre
SFX wP aincre aincront vaincre
SFX wP aincre aincrais vaincre
SFX wP aincre aincrait vaincre
SFX wP aincre aincrions vaincre
SFX wP aincre aincriez vaincre
SFX wP aincre aincraient vaincre
SFX wP aincre ainque vaincre
SFX wP aincre ainques vaincre
SFX wP aincre ainquisse vaincre
SFX wP aincre ainquisses vaincre
SFX wP aincre ainquît vaincre
SFX wP aincre ainquissions vaincre
SFX wP aincre ainquissiez vaincre
SFX wP aincre ainquissent vaincre
SFX wP aincre aincs vaincre
SFX wP aincre ainquons vaincre
SFX wP aincre ainquez vaincre
SFX wQ Y 42
SFX wQ tre tre/n'q'd'm't's' tre
SFX wQ aître aissant/n'q'd'm't's' aître
SFX wQ aître ais/n'q'j'm't' aître
SFX wQ aître aît/n'q'm't's' aître
SFX wQ aître aissons/n'q't' aître
SFX wQ aître aissez/n'q'm' aître
SFX wQ aître aissent/n'q'm't's' aître
SFX wQ aître aissais/n'q'j'm't' aître
SFX wQ aître aissait/n'q'm't's' aître
SFX wQ aître aissions/n'q't' aître
SFX wQ aître aissiez/n'q'm' aître
SFX wQ aître aissaient/n'q'm't's' aître
SFX wQ aître us/n'q'j'm't' aître
SFX wQ aître ut/n'q'm't's' aître
SFX wQ aître ûmes/n'q't' aître
SFX wQ aître ûtes/n'q'm' aître
SFX wQ aître urent/n'q'm't's' aître
SFX wQ tre trai/n'q'j'm't' tre
SFX wQ tre tras/n'q'm't' tre
SFX wQ tre tra/n'q'm't's' tre
SFX wQ tre trons/n'q't' tre
SFX wQ tre trez/n'q'm' tre
SFX wQ tre tront/n'q'm't's' tre
SFX wQ tre trais/n'q'j'm't' tre
SFX wQ tre trait/n'q'm't's' tre
SFX wQ tre trions/n'q't' tre
SFX wQ tre triez/n'q'm' tre
SFX wQ tre traient/n'q'm't's' tre
SFX wQ aître aisse/n'q'j'm't's' aître
SFX wQ aître aisses/n'q'm't' aître
SFX wQ aître usse/n'q'j'm't' aître
SFX wQ aître usses/n'q'm't' aître
SFX wQ aître ût/n'q'm't's' aître
SFX wQ aître ussions/n'q't' aître
SFX wQ aître ussiez/n'q'm' aître
SFX wQ aître ussent/n'q'm't's' aître
SFX wQ aître ais/n'm' paraître
SFX wQ aître ais connaître
SFX wQ aître aissons/n' paraître
SFX wQ aître aissons connaître
SFX wQ aître aissez/n'm' paraître
SFX wQ aître aissez connaître
SFX wR N 42
SFX wR aître aissant naître
SFX wR aître é naître
SFX wR aître és naître
SFX wR aître ée naître
SFX wR aître ées naître
SFX wR aître ais naître
SFX wR aître aît naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wR aître aissent naître
SFX wR aître aissais naître
SFX wR aître aissait naître
SFX wR aître aissions naître
SFX wR aître aissiez naître
SFX wR aître aissaient naître
SFX wR aître aquis naître
SFX wR aître aquit naître
SFX wR aître aquîmes naître
SFX wR aître aquîtes naître
SFX wR aître aquirent naître
SFX wR tre trai tre
SFX wR tre tras tre
SFX wR tre tra tre
SFX wR tre trons tre
SFX wR tre trez tre
SFX wR tre tront tre
SFX wR tre trais tre
SFX wR tre trait tre
SFX wR tre trions tre
SFX wR tre triez tre
SFX wR tre traient tre
SFX wR aître aisse naître
SFX wR aître aisses naître
SFX wR aître aquisse naître
SFX wR aître aquisses naître
SFX wR aître aquît naître
SFX wR aître aquissions naître
SFX wR aître aquissiez naître
SFX wR aître aquissent naître
SFX wR aître ais naître
SFX wR aître aissons naître
SFX wR aître aissez naître
SFX wS N 42
SFX wS aître aissant paître
SFX wS aître u repaître
SFX wS aître us repaître
SFX wS aître ue repaître
SFX wS aître ues repaître
SFX wS aître ais paître
SFX wS aître aît paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wS aître aissent paître
SFX wS aître aissais paître
SFX wS aître aissait paître
SFX wS aître aissions paître
SFX wS aître aissiez paître
SFX wS aître aissaient paître
SFX wS aître us repaître
SFX wS aître ut repaître
SFX wS aître ûmes repaître
SFX wS aître ûtes repaître
SFX wS aître urent repaître
SFX wS tre trai tre
SFX wS tre tras tre
SFX wS tre tra tre
SFX wS tre trons tre
SFX wS tre trez tre
SFX wS tre tront tre
SFX wS tre trais tre
SFX wS tre trait tre
SFX wS tre trions tre
SFX wS tre triez tre
SFX wS tre traient tre
SFX wS aître aisse paître
SFX wS aître aisses paître
SFX wS aître usse repaître
SFX wS aître usses repaître
SFX wS aître ût repaître
SFX wS aître ussions repaître
SFX wS aître ussiez repaître
SFX wS aître ussent repaître
SFX wS aître ais paître
SFX wS aître aissons paître
SFX wS aître aissez paître
SFX wT N 46
SFX wT roître roissant croître
SFX wT roître rû recroître
SFX wT roître rûs recroître
SFX wT roître rûe recroître
SFX wT roître rûes recroître
SFX wT roître ru décroître
SFX wT roître rus décroître
SFX wT roître rue décroître
SFX wT roître rues décroître
SFX wT roître rois .croître
SFX wT roître roît .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wT roître roissent croître
SFX wT roître roissais croître
SFX wT roître roissait croître
SFX wT roître roissions croître
SFX wT roître roissiez croître
SFX wT roître roissaient croître
SFX wT roître rus .croître
SFX wT roître rut .croître
SFX wT roître rûmes croître
SFX wT roître rûtes croître
SFX wT roître rurent .croître
SFX wT tre trai tre
SFX wT tre tras tre
SFX wT tre tra tre
SFX wT tre trons tre
SFX wT tre trez tre
SFX wT tre tront tre
SFX wT tre trais tre
SFX wT tre trait tre
SFX wT tre trions tre
SFX wT tre triez tre
SFX wT tre traient tre
SFX wT roître roisse croître
SFX wT roître roisses croître
SFX wT roître russe .croître
SFX wT roître russes .croître
SFX wT roître rût croître
SFX wT roître russions .croître
SFX wT roître russiez .croître
SFX wT roître russent .croître
SFX wT roître rois .croître
SFX wT roître roissons croître
SFX wT roître roissez croître
SFX wU N 15
SFX wU roître rû croître
SFX wU roître rûs croître
SFX wU roître rûe croître
SFX wU roître rûes croître
SFX wU roître roîs croître
SFX wU roître roît croître
SFX wU roître rûs croître
SFX wU roître rût croître
SFX wU roître rûrent croître
SFX wU roître rûsse croître
SFX wU roître rûsses croître
SFX wU roître rûssions croître
SFX wU roître rûssiez croître
SFX wU roître rûssent croître
SFX wU roître roîs croître
SFX wV Y 43
SFX wV tre tre/n'q'd'l'm't's' tre
SFX wV croître croissant/n'q'd'l'm't's' croître
SFX wV croître cru/L'D'Q' croître
SFX wV croître crus/D'Q' croître
SFX wV croître crue/L'D'Q' croître
SFX wV croître crues/D'Q' croître
SFX wV croître crois/n'q'j'l'm't' croître
SFX wV croître croît/n'q'l's' croître
SFX wV croître croissons/n'q'l' croître
SFX wV croître croissez/n'q'l' croître
SFX wV croître croissent/n'q'l's' croître
SFX wV croître croissais/n'q'j'l'm't' croître
SFX wV croître croissait/n'q'l's' croître
SFX wV croître croissions/n'q'l' croître
SFX wV croître croissiez/n'q'l' croître
SFX wV croître croissaient/n'q'l's' croître
SFX wV croître crus/n'q'j'l'm't' croître
SFX wV croître crut/n'q'l's' croître
SFX wV croître crûmes/n'q'l' croître
SFX wV croître crûtes/n'q'l' croître
SFX wV croître crurent/n'q'l's' croître
SFX wV tre trai/n'q'j'l'm' tre
SFX wV tre tras/n'q'l't' tre
SFX wV tre tra/n'q'l's' tre
SFX wV tre trons/n'q'l' tre
SFX wV tre trez/n'q'l' tre
SFX wV tre tront/n'q'l's' tre
SFX wV tre trais/n'q'j'l'm't' tre
SFX wV tre trait/n'q'l's' tre
SFX wV tre trions/n'q'l' tre
SFX wV tre triez/n'q'l' tre
SFX wV tre traient/n'q'l's' tre
SFX wV croître croisse/n'q'j'l'm's' croître
SFX wV croître croisses/n'q'l't' croître
SFX wV croître crusse/n'q'j'l'm' croître
SFX wV croître crusses/n'q'l't' croître
SFX wV croître crût/n'q'l's' croître
SFX wV croître crussions/n'q'l' croître
SFX wV croître crussiez/n'q'l' croître
SFX wV croître crussent/n'q'l's' croître
SFX wV croître crois/n'l'm' croître
SFX wV croître croissons/n'l' croître
SFX wV croître croissez/n'l'm' croître
SFX xA N 42
SFX xA roire royant croire
SFX xA roire ru croire
SFX xA roire rus croire
SFX xA roire rue croire
SFX xA roire rues croire
SFX xA roire rois croire
SFX xA roire roit croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xA roire roient croire
SFX xA roire royais croire
SFX xA roire royait croire
SFX xA roire royions croire
SFX xA roire royiez croire
SFX xA roire royaient croire
SFX xA roire rus croire
SFX xA roire rut croire
SFX xA roire rûmes croire
SFX xA roire rûtes croire
SFX xA roire rurent croire
SFX xA roire roirai croire
SFX xA roire roiras croire
SFX xA roire roira croire
SFX xA roire roirons croire
SFX xA roire roirez croire
SFX xA roire roiront croire
SFX xA roire roirais croire
SFX xA roire roirait croire
SFX xA roire roirions croire
SFX xA roire roiriez croire
SFX xA roire roiraient croire
SFX xA roire roie croire
SFX xA roire roies croire
SFX xA roire russe croire
SFX xA roire russes croire
SFX xA roire rût croire
SFX xA roire russions croire
SFX xA roire russiez croire
SFX xA roire russent croire
SFX xA roire rois croire
SFX xA roire royons croire
SFX xA roire royez croire
SFX xC N 42
SFX xC oire uvant boire
SFX xC oire u boire
SFX xC oire us boire
SFX xC oire ue boire
SFX xC oire ues boire
SFX xC oire ois boire
SFX xC oire oit boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xC oire oivent boire
SFX xC oire uvais boire
SFX xC oire uvait boire
SFX xC oire uvions boire
SFX xC oire uviez boire
SFX xC oire uvaient boire
SFX xC oire us boire
SFX xC oire ut boire
SFX xC oire ûmes boire
SFX xC oire ûtes boire
SFX xC oire urent boire
SFX xC oire oirai boire
SFX xC oire oiras boire
SFX xC oire oira boire
SFX xC oire oirons boire
SFX xC oire oirez boire
SFX xC oire oiront boire
SFX xC oire oirais boire
SFX xC oire oirait boire
SFX xC oire oirions boire
SFX xC oire oiriez boire
SFX xC oire oiraient boire
SFX xC oire oive boire
SFX xC oire oives boire
SFX xC oire usse boire
SFX xC oire usses boire
SFX xC oire ût boire
SFX xC oire ussions boire
SFX xC oire ussiez boire
SFX xC oire ussent boire
SFX xC oire ois boire
SFX xC oire uvons boire
SFX xC oire uvez boire
SFX xD Y 43
SFX xD boire boire/m't's' boire
SFX xD boire buvant/m't's' boire
SFX xD boire bu boire
SFX xD boire bus boire
SFX xD boire bue boire
SFX xD boire bues boire
SFX xD boire bois/m't' boire
SFX xD boire boit/s' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xD boire boivent/s' boire
SFX xD boire buvais/m't' boire
SFX xD boire buvait/s' boire
SFX xD boire buvions boire
SFX xD boire buviez boire
SFX xD boire buvaient/s' boire
SFX xD boire bus/m't' boire
SFX xD boire but/s' boire
SFX xD boire bûmes boire
SFX xD boire bûtes boire
SFX xD boire burent/s' boire
SFX xD boire boirai/m' boire
SFX xD boire boiras/t' boire
SFX xD boire boira/s' boire
SFX xD boire boirons boire
SFX xD boire boirez boire
SFX xD boire boiront/s' boire
SFX xD boire boirais/m't' boire
SFX xD boire boirait/s' boire
SFX xD boire boirions boire
SFX xD boire boiriez boire
SFX xD boire boiraient/s' boire
SFX xD boire boive/m's' boire
SFX xD boire boives/t' boire
SFX xD boire busse/m' boire
SFX xD boire busses/t' boire
SFX xD boire bût/s' boire
SFX xD boire bussions boire
SFX xD boire bussiez boire
SFX xD boire bussent/s' boire
SFX xD boire bois/t' boire
SFX xD boire buvons boire
SFX xD boire buvez boire
SFX xJ N 3
SFX xJ clure clus clure
SFX xJ clure cluse clure
SFX xJ clure cluses clure
SFX xK Y 40
SFX xK clure clure/n'q'd'l'm't's' clure
SFX xK clure cluant/n'q'l'm't's' clure
SFX xK clure clus/L'D'Q' clure
SFX xK clure cluse/L'D'Q' clure
SFX xK clure cluses/D'Q' clure
SFX xK clure clus/n'q'j'l' clure
SFX xK clure clut/n'q'l' clure
SFX xK clure cluons/n'q'l' clure
SFX xK clure cluez/n'q'l' clure
SFX xK clure cluent/n'q'l' clure
SFX xK clure cluais/n'q'j'l' clure
SFX xK clure cluait/n'q'l' clure
SFX xK clure cluions/n'q'l' clure
SFX xK clure cluiez/n'q'l' clure
SFX xK clure cluaient/n'q'l' clure
SFX xK clure clûmes/n'q'l' clure
SFX xK clure clûtes/n'q'l' clure
SFX xK clure clurent/n'q'l' clure
SFX xK clure clurai/n'q'j'l' clure
SFX xK clure cluras/n'q'l' clure
SFX xK clure clura/n'q'l' clure
SFX xK clure clurons/n'q'l' clure
SFX xK clure clurez/n'q'l' clure
SFX xK clure cluront/n'q'l' clure
SFX xK clure clurais/n'q'j'l' clure
SFX xK clure clurait/n'q'l' clure
SFX xK clure clurions/n'q'l' clure
SFX xK clure cluriez/n'q'l' clure
SFX xK clure cluraient/n'q'l' clure
SFX xK clure clue/n'q'j'l' clure
SFX xK clure clues/n'q'l' clure
SFX xK clure clusse/n'q'j'l' clure
SFX xK clure clusses/n'q'l' clure
SFX xK clure clût/n'q'l' clure
SFX xK clure clussions/n'q'l' clure
SFX xK clure clussiez/n'q'l' clure
SFX xK clure clussent/n'q'l' clure
SFX xK clure clus/n'l' clure
SFX xK clure cluons/n'l' clure
SFX xK clure cluez/n'l' clure
SFX xL Y 44
SFX xL clure clure/n'q'd'l'm't's' clure
SFX xL clure cluant/n'q'l'm't's' clure
SFX xL clure clus/L'D'Q' inclure
SFX xL clure cluse/L'D'Q' inclure
SFX xL clure cluses/D'Q' inclure
SFX xL clure clu/L'D'Q' [eo].clure
SFX xL clure clus/D'Q' [eo].clure
SFX xL clure clue/L'D'Q' [eo].clure
SFX xL clure clues/D'Q' [eo].clure
SFX xL clure clus/n'q'j'l'm't' clure
SFX xL clure clut/n'q'l'm't's' clure
SFX xL clure cluons/n'q'l't' clure
SFX xL clure cluez/n'q'l'm' clure
SFX xL clure cluent/n'q'l'm't's' clure
SFX xL clure cluais/n'q'j'l'm't' clure
SFX xL clure cluait/n'q'l'm't's' clure
SFX xL clure cluions/n'q'l't' clure
SFX xL clure cluiez/n'q'l'm' clure
SFX xL clure cluaient/n'q'l'm't's' clure
SFX xL clure clûmes/n'q'l't' clure
SFX xL clure clûtes/n'q'l'm' clure
SFX xL clure clurent/n'q'l'm't's' clure
SFX xL clure clurai/n'q'j'l'm't' clure
SFX xL clure cluras/n'q'l'm't' clure
SFX xL clure clura/n'q'l'm't's' clure
SFX xL clure clurons/n'q'l't' clure
SFX xL clure clurez/n'q'l'm' clure
SFX xL clure cluront/n'q'l'm't's' clure
SFX xL clure clurais/n'q'j'l'm't' clure
SFX xL clure clurait/n'q'l'm't's' clure
SFX xL clure clurions/n'q'l't' clure
SFX xL clure cluriez/n'q'l'm' clure
SFX xL clure cluraient/n'q'l'm't's' clure
SFX xL clure clue/n'q'j'l'm't's' clure
SFX xL clure clues/n'l'm't' clure
SFX xL clure clusse/n'q'j'l'm't' clure
SFX xL clure clusses/n'q'l'm't' clure
SFX xL clure clût/n'q'l'm't's' clure
SFX xL clure clussions/n'q'l't' clure
SFX xL clure clussiez/n'q'l'm' clure
SFX xL clure clussent/n'q'l'm't's' clure
SFX xL clure clus/n'l'm't' clure
SFX xL clure cluons/n'l' clure
SFX xL clure cluez/n'l'm' clure
SFX xM N 14
SFX xM ourdre ourdant sourdre
SFX xM ourdre ourd sourdre
SFX xM ourdre ourdent sourdre
SFX xM ourdre ourdait sourdre
SFX xM ourdre ourdaient sourdre
SFX xM ourdre ourdit sourdre
SFX xM ourdre ourdirent sourdre
SFX xM ourdre ourdra sourdre
SFX xM ourdre ourdront sourdre
SFX xM ourdre ourdrait sourdre
SFX xM ourdre ourdraient sourdre
SFX xM ourdre ourde sourdre
SFX xM ourdre ourdît sourdre
SFX xM ourdre ourdissent sourdre
SFX xN Y 46
SFX xN soudre soudre/n'q'd'l'm't's' soudre
SFX xN soudre solvant/n'q'l'm't's' soudre
SFX xN soudre solu résoudre
SFX xN soudre solus résoudre
SFX xN soudre solue résoudre
SFX xN soudre solues résoudre
SFX xN soudre sous/L'D'Q' soudre
SFX xN soudre soute/L'D'Q' soudre
SFX xN soudre soutes/D'Q' soudre
SFX xN soudre sous/n'q'j'l'm't' soudre
SFX xN soudre sout/n'q'l'm't's' soudre
SFX xN soudre solvons/n'q'l't' soudre
SFX xN soudre solvez/n'q'l'm' soudre
SFX xN soudre solvent/n'q'l'm't's' soudre
SFX xN soudre solvais/n'q'j'l'm't' soudre
SFX xN soudre solvait/n'q'l'm't's' soudre
SFX xN soudre solvions/n'q'l't' soudre
SFX xN soudre solviez/n'q'l'm' soudre
SFX xN soudre solvaient/n'q'l'm't's' soudre
SFX xN soudre solus/n'q'j'l'm't' soudre
SFX xN soudre solut/n'q'l'm't's' soudre
SFX xN soudre solûmes/n'q'l't' soudre
SFX xN soudre solûtes/n'q'l'm' soudre
SFX xN soudre solurent/n'q'l'm't's' soudre
SFX xN soudre soudrai/n'q'j'l'm't' soudre
SFX xN soudre soudras/n'q'l'm't' soudre
SFX xN soudre soudra/n'q'l'm't's' soudre
SFX xN soudre soudrons/n'q'l't' soudre
SFX xN soudre soudrez/n'q'l'm' soudre
SFX xN soudre soudront/n'q'l'm't's' soudre
SFX xN soudre soudrais/n'q'j'l'm't' soudre
SFX xN soudre soudrait/n'q'l'm't's' soudre
SFX xN soudre soudrions/n'q'l't' soudre
SFX xN soudre soudriez/n'q'l'm' soudre
SFX xN soudre soudraient/n'q'l'm't's' soudre
SFX xN soudre solve/n'q'j'l'm't's' soudre
SFX xN soudre solves/n'l'm't' soudre
SFX xN soudre solusse/n'q'j'l'm't' soudre
SFX xN soudre solusses/n'q'l'm't' soudre
SFX xN soudre solût/n'q'l'm't's' soudre
SFX xN soudre solussions/n'q'l't' soudre
SFX xN soudre solussiez/n'q'l'm' soudre
SFX xN soudre solussent/n'q'l'm't's' soudre
SFX xN soudre sous/n'l'm' soudre
SFX xN soudre solvons/n'l' soudre
SFX xN soudre solvez/n'l'm' soudre
SFX xO N 42
SFX xO oudre ousant coudre
SFX xO oudre ousu coudre
SFX xO oudre ousus coudre
SFX xO oudre ousue coudre
SFX xO oudre ousues coudre
SFX xO oudre ouds coudre
SFX xO oudre oud coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xO oudre ousent coudre
SFX xO oudre ousais coudre
SFX xO oudre ousait coudre
SFX xO oudre ousions coudre
SFX xO oudre ousiez coudre
SFX xO oudre ousaient coudre
SFX xO oudre ousis coudre
SFX xO oudre ousit coudre
SFX xO oudre ousîmes coudre
SFX xO oudre ousîtes coudre
SFX xO oudre ousirent coudre
SFX xO oudre oudrai coudre
SFX xO oudre oudras coudre
SFX xO oudre oudra coudre
SFX xO oudre oudrons coudre
SFX xO oudre oudrez coudre
SFX xO oudre oudront coudre
SFX xO oudre oudrais coudre
SFX xO oudre oudrait coudre
SFX xO oudre oudrions coudre
SFX xO oudre oudriez coudre
SFX xO oudre oudraient coudre
SFX xO oudre ouse coudre
SFX xO oudre ouses coudre
SFX xO oudre ousisse coudre
SFX xO oudre ousisses coudre
SFX xO oudre ousît coudre
SFX xO oudre ousissions coudre
SFX xO oudre ousissiez coudre
SFX xO oudre ousissent coudre
SFX xO oudre ouds coudre
SFX xO oudre ousons coudre
SFX xO oudre ousez coudre
SFX xP Y 43
SFX xP oudre oudre/n'q'd'l' moudre
SFX xP oudre oulant/n'q'l' moudre
SFX xP oudre oulu/L'D'Q' moudre
SFX xP oudre oulus/D'Q' moudre
SFX xP oudre oulue/L'D'Q' moudre
SFX xP oudre oulues/D'Q' moudre
SFX xP oudre ouds/n'q'l' moudre
SFX xP oudre oud/n'q'l' moudre
SFX xP oudre oulons/n'q'l' moudre
SFX xP oudre oulez/n'q'l' moudre
SFX xP oudre oulent/n'q'l' moudre
SFX xP oudre oulais/n'q'l' moudre
SFX xP oudre oulait/n'q'l' moudre
SFX xP oudre oulions/n'q'l' moudre
SFX xP oudre ouliez/n'q'l' moudre
SFX xP oudre oulaient/n'q'l' moudre
SFX xP oudre oulus/n'q'l' moudre
SFX xP oudre oulut/n'q'l' moudre
SFX xP oudre oulûmes/n'q'l' moudre
SFX xP oudre oulûtes/n'q'l' moudre
SFX xP oudre oulurent/n'q'l' moudre
SFX xP oudre oudrai/n'q'l' moudre
SFX xP oudre oudras/n'q'l' moudre
SFX xP oudre oudra/n'q'l' moudre
SFX xP oudre oudrons/n'q'l' moudre
SFX xP oudre oudrez/n'q'l' moudre
SFX xP oudre oudront/n'q'l' moudre
SFX xP oudre oudrais/n'q'l' moudre
SFX xP oudre oudrait/n'q'l' moudre
SFX xP oudre oudrions/n'q'l' moudre
SFX xP oudre oudriez/n'q'l' moudre
SFX xP oudre oudraient/n'q'l' moudre
SFX xP oudre oule/n'q'l' moudre
SFX xP oudre oules/n'l' moudre
SFX xP oudre oulusse/n'q'l' moudre
SFX xP oudre oulusses/n'q'l' moudre
SFX xP oudre oulût/n'q'l' moudre
SFX xP oudre oulussions/n'q'l' moudre
SFX xP oudre oulussiez/n'q'l' moudre
SFX xP oudre oulussent/n'q'l' moudre
SFX xP oudre ouds/n'l'm' moudre
SFX xP oudre oulons/n'l' moudre
SFX xP oudre oulez/n'l'm' moudre
SFX xQ N 42
SFX xQ uivre uivant suivre
SFX xQ uivre uivi suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivie suivre
SFX xQ uivre uivies suivre
SFX xQ uivre uis suivre
SFX xQ uivre uit suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xQ uivre uivent suivre
SFX xQ uivre uivais suivre
SFX xQ uivre uivait suivre
SFX xQ uivre uivions suivre
SFX xQ uivre uiviez suivre
SFX xQ uivre uivaient suivre
SFX xQ uivre uivis suivre
SFX xQ uivre uivit suivre
SFX xQ uivre uivîmes suivre
SFX xQ uivre uivîtes suivre
SFX xQ uivre uivirent suivre
SFX xQ uivre uivrai suivre
SFX xQ uivre uivras suivre
SFX xQ uivre uivra suivre
SFX xQ uivre uivrons suivre
SFX xQ uivre uivrez suivre
SFX xQ uivre uivront suivre
SFX xQ uivre uivrais suivre
SFX xQ uivre uivrait suivre
SFX xQ uivre uivrions suivre
SFX xQ uivre uivriez suivre
SFX xQ uivre uivraient suivre
SFX xQ uivre uive suivre
SFX xQ uivre uives suivre
SFX xQ uivre uivisse suivre
SFX xQ uivre uivisses suivre
SFX xQ uivre uivît suivre
SFX xQ uivre uivissions suivre
SFX xQ uivre uivissiez suivre
SFX xQ uivre uivissent suivre
SFX xQ uivre uis suivre
SFX xQ uivre uivons suivre
SFX xQ uivre uivez suivre
SFX xR Y 16
SFX xR suivre suivre/s' suivre
SFX xR suivre suivant/s' suivre
SFX xR suivre suivi suivre
SFX xR suivre suit/s' suivre
SFX xR suivre suivent/s' suivre
SFX xR suivre suivait/s' suivre
SFX xR suivre suivaient/s' suivre
SFX xR suivre suivit/s' suivre
SFX xR suivre suivirent/s' suivre
SFX xR suivre suivra/s' suivre
SFX xR suivre suivront/s' suivre
SFX xR suivre suivrait/s' suivre
SFX xR suivre suivraient/s' suivre
SFX xR suivre suive/s' suivre
SFX xR suivre suivît/s' suivre
SFX xR suivre suivissent/s' suivre
SFX xS N 38
SFX xS ivre ivant vivre
SFX xS ivre is vivre
SFX xS ivre it vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX xS ivre ivent vivre
SFX xS ivre ivais vivre
SFX xS ivre ivait vivre
SFX xS ivre ivions vivre
SFX xS ivre iviez vivre
SFX xS ivre ivaient vivre
SFX xS ivre écus vivre
SFX xS ivre écut vivre
SFX xS ivre écûmes vivre
SFX xS ivre écûtes vivre
SFX xS ivre écurent vivre
SFX xS ivre ivrai vivre
SFX xS ivre ivras vivre
SFX xS ivre ivra vivre
SFX xS ivre ivrons vivre
SFX xS ivre ivrez vivre
SFX xS ivre ivront vivre
SFX xS ivre ivrais vivre
SFX xS ivre ivrait vivre
SFX xS ivre ivrions vivre
SFX xS ivre ivriez vivre
SFX xS ivre ivraient vivre
SFX xS ivre ive vivre
SFX xS ivre ives vivre
SFX xS ivre écusse vivre
SFX xS ivre écusses vivre
SFX xS ivre écût vivre
SFX xS ivre écussions vivre
SFX xS ivre écussiez vivre
SFX xS ivre écussent vivre
SFX xS ivre is vivre
SFX xS ivre ivons vivre
SFX xS ivre ivez vivre
SFX y1 Y 43
SFX y1 crire crire/n'q'd'l'm't's' crire
SFX y1 crire crivant/n'q'l'm't's' crire
SFX y1 crire crit/L'D'Q' crire
SFX y1 crire crits/D'Q' crire
SFX y1 crire crite/L'D'Q' crire
SFX y1 crire crites/D'Q' crire
SFX y1 crire cris/n'q'j'l'm't' crire
SFX y1 crire crit/n'q'l'm't's' crire
SFX y1 crire crivons/n'q'l't' crire
SFX y1 crire crivez/n'q'l'm' crire
SFX y1 crire crivent/n'q'l'm't's' crire
SFX y1 crire crivais/n'q'j'l'm't' crire
SFX y1 crire crivait/n'q'l'm't's' crire
SFX y1 crire crivions/n'q'l't' crire
SFX y1 crire criviez/n'q'l'm' crire
SFX y1 crire crivaient/n'q'l'm't's' crire
SFX y1 crire crivis/n'q'j'l'm't' crire
SFX y1 crire crivit/n'q'l'm't's' crire
SFX y1 crire crivîmes/n'q'l't' crire
SFX y1 crire crivîtes/n'q'l'm' crire
SFX y1 crire crivirent/n'q'l'm't's' crire
SFX y1 crire crirai/n'q'j'l'm't' crire
SFX y1 crire criras/n'q'l'm't' crire
SFX y1 crire crira/n'q'l'm't's' crire
SFX y1 crire crirons/n'q'l't' crire
SFX y1 crire crirez/n'q'l'm' crire
SFX y1 crire criront/n'q'l'm't's' crire
SFX y1 crire crirais/n'q'j'l'm't' crire
SFX y1 crire crirait/n'q'l'm't's' crire
SFX y1 crire cririons/n'q'l't' crire
SFX y1 crire cririez/n'q'l'm' crire
SFX y1 crire criraient/n'q'l'm't's' crire
SFX y1 crire crive/n'q'j'l'm't's' crire
SFX y1 crire crives/n'l'm't' crire
SFX y1 crire crivisse/n'q'j'l'm't' crire
SFX y1 crire crivisses/n'q'l'm't' crire
SFX y1 crire crivît/n'q'l'm't's' crire
SFX y1 crire crivissions/n'q'l't' crire
SFX y1 crire crivissiez/n'q'l'm' crire
SFX y1 crire crivissent/n'q'l'm't's' crire
SFX y1 crire cris/n'l'm't' crire
SFX y1 crire crivons/n'l' crire
SFX y1 crire crivez/n'l'm' crire
SFX yA N 42
SFX yA ire isant lire
SFX yA ire u lire
SFX yA ire us lire
SFX yA ire ue lire
SFX yA ire ues lire
SFX yA ire is lire
SFX yA ire it lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yA ire isent lire
SFX yA ire isais lire
SFX yA ire isait lire
SFX yA ire isions lire
SFX yA ire isiez lire
SFX yA ire isaient lire
SFX yA ire us lire
SFX yA ire ut lire
SFX yA ire ûmes lire
SFX yA ire ûtes lire
SFX yA ire urent lire
SFX yA ire irai lire
SFX yA ire iras lire
SFX yA ire ira lire
SFX yA ire irons lire
SFX yA ire irez lire
SFX yA ire iront lire
SFX yA ire irais lire
SFX yA ire irait lire
SFX yA ire irions lire
SFX yA ire iriez lire
SFX yA ire iraient lire
SFX yA ire ise lire
SFX yA ire ises lire
SFX yA ire usse lire
SFX yA ire usses lire
SFX yA ire ût lire
SFX yA ire ussions lire
SFX yA ire ussiez lire
SFX yA ire ussent lire
SFX yA ire is lire
SFX yA ire isons lire
SFX yA ire isez lire
SFX yB Y 43
SFX yB lire lire/n'q'd'l'm't's' lire
SFX yB lire lisant/n'q'l'm't's' lire
SFX yB lire lu/L'D'Q' lire
SFX yB lire lus/D'Q' lire
SFX yB lire lue/L'D'Q' lire
SFX yB lire lues/D'Q' lire
SFX yB lire lis/n'q'j'l'm't' lire
SFX yB lire lit/n'q'l'm't's' lire
SFX yB lire lisons/n'q'l't' lire
SFX yB lire lisez/n'q'l'm' lire
SFX yB lire lisent/n'q'l'm't's' lire
SFX yB lire lisais/n'q'j'l'm't' lire
SFX yB lire lisait/n'q'l'm't's' lire
SFX yB lire lisions/n'q'l't' lire
SFX yB lire lisiez/n'q'l'm' lire
SFX yB lire lisaient/n'q'l'm't's' lire
SFX yB lire lus/n'q'j'l'm't' lire
SFX yB lire lut/n'q'l'm't's' lire
SFX yB lire lûmes/n'q'l't' lire
SFX yB lire lûtes/n'q'l'm' lire
SFX yB lire lurent/n'q'l'm't's' lire
SFX yB lire lirai/n'q'j'l'm't' lire
SFX yB lire liras/n'q'l'm't' lire
SFX yB lire lira/n'q'l'm't's' lire
SFX yB lire lirons/n'q'l't' lire
SFX yB lire lirez/n'q'l'm' lire
SFX yB lire liront/n'q'l'm't's' lire
SFX yB lire lirais/n'q'j'l'm't' lire
SFX yB lire lirait/n'q'l'm't's' lire
SFX yB lire lirions/n'q'l't' lire
SFX yB lire liriez/n'q'l'm' lire
SFX yB lire liraient/n'q'l'm't's' lire
SFX yB lire lise/n'q'j'l'm't's' lire
SFX yB lire lises/n'l'm't' lire
SFX yB lire lusse/n'q'j'l'm't' lire
SFX yB lire lusses/n'q'l'm't' lire
SFX yB lire lût/n'q'l'm't's' lire
SFX yB lire lussions/n'q'l't' lire
SFX yB lire lussiez/n'q'l'm' lire
SFX yB lire lussent/n'q'l'm't's' lire
SFX yB lire lis/n'l'm' lire
SFX yB lire lisons/n'l' lire
SFX yB lire lisez/n'l'm' lire
SFX yC N 40
SFX yC ire isant dire
SFX yC ire it dire
SFX yC ire its dire
SFX yC ire ite dire
SFX yC ire ites dire
SFX yC ire is dire
SFX yC ire it dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yC ire isent dire
SFX yC ire isais dire
SFX yC ire isait dire
SFX yC ire isions dire
SFX yC ire isiez dire
SFX yC ire isaient dire
SFX yC ire îmes dire
SFX yC ire îtes dire
SFX yC ire irent dire
SFX yC ire irai dire
SFX yC ire iras dire
SFX yC ire ira dire
SFX yC ire irons dire
SFX yC ire irez dire
SFX yC ire iront dire
SFX yC ire irais dire
SFX yC ire irait dire
SFX yC ire irions dire
SFX yC ire iriez dire
SFX yC ire iraient dire
SFX yC ire ise dire
SFX yC ire ises dire
SFX yC ire isse dire
SFX yC ire isses dire
SFX yC ire ît dire
SFX yC ire issions dire
SFX yC ire issiez dire
SFX yC ire issent dire
SFX yC ire is dire
SFX yC ire isons dire
SFX yC ire ites dire
SFX yD Y 41
SFX yD dire dire/n'q'd'l'm't's' dire
SFX yD dire disant/n'q'l'm't's' dire
SFX yD dire dit/L'D'Q' dire
SFX yD dire dits/D'Q' dire
SFX yD dire dite/L'D'Q' dire
SFX yD dire dites/D'Q' dire
SFX yD dire dis/n'q'j'l'm't' dire
SFX yD dire dit/n'q'l'm't's' dire
SFX yD dire disons/n'q'l't' dire
SFX yD dire disez/n'q'l'm' dire
SFX yD dire disent/n'q'l'm't's' dire
SFX yD dire disais/n'q'j'l'm't' dire
SFX yD dire disait/n'q'l'm't's' dire
SFX yD dire disions/n'q'l't' dire
SFX yD dire disiez/n'q'l'm' dire
SFX yD dire disaient/n'q'l'm't's' dire
SFX yD dire dîmes/n'q'l't' dire
SFX yD dire dîtes/n'q'l'm' dire
SFX yD dire dirent/n'q'l'm't's' dire
SFX yD dire dirai/n'q'j'l'm't' dire
SFX yD dire diras/n'q'l'm't' dire
SFX yD dire dira/n'q'l'm't's' dire
SFX yD dire dirons/n'q'l't' dire
SFX yD dire direz/n'q'l'm' dire
SFX yD dire diront/n'q'l'm't's' dire
SFX yD dire dirais/n'q'j'l'm't' dire
SFX yD dire dirait/n'q'l'm't's' dire
SFX yD dire dirions/n'q'l't' dire
SFX yD dire diriez/n'q'l'm' dire
SFX yD dire diraient/n'q'l'm't's' dire
SFX yD dire dise/n'q'j'l'm't's' dire
SFX yD dire dises/n'l'm't' dire
SFX yD dire disse/n'q'j'l'm't' dire
SFX yD dire disses/n'q'l'm't' dire
SFX yD dire dît/n'q'l'm't's' dire
SFX yD dire dissions/n'q'l't' dire
SFX yD dire dissiez/n'q'l'm' dire
SFX yD dire dissent/n'q'l'm't's' dire
SFX yD dire dis/n'l'm't' dire
SFX yD dire disons/n'l' dire
SFX yD dire disez/n'l'm' dire
SFX yE N 37
SFX yE édire édisant édire
SFX yE édire édit édire
SFX yE édire édis édire
SFX yE édire édit édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yE édire édisent édire
SFX yE édire édisais édire
SFX yE édire édisait édire
SFX yE édire édisions édire
SFX yE édire édisiez édire
SFX yE édire édisaient édire
SFX yE édire édîmes édire
SFX yE édire édîtes édire
SFX yE édire édirent édire
SFX yE édire édirai édire
SFX yE édire édiras édire
SFX yE édire édira édire
SFX yE édire édirons édire
SFX yE édire édirez édire
SFX yE édire édiront édire
SFX yE édire édirais édire
SFX yE édire édirait édire
SFX yE édire édirions édire
SFX yE édire édiriez édire
SFX yE édire édiraient édire
SFX yE édire édise édire
SFX yE édire édises édire
SFX yE édire édisse édire
SFX yE édire édisses édire
SFX yE édire édît édire
SFX yE édire édissions édire
SFX yE édire édissiez édire
SFX yE édire édissent édire
SFX yE édire édis édire
SFX yE édire édisons édire
SFX yE édire édisez édire
SFX yF N 36
SFX yF audire audissant udire
SFX yF audire audit udire
SFX yF audire audits udire
SFX yF audire audite udire
SFX yF audire audites udire
SFX yF audire audis udire
SFX yF audire audit udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yF audire audissent udire
SFX yF audire audissais udire
SFX yF audire audissait udire
SFX yF audire audissions udire
SFX yF audire audissiez udire
SFX yF audire audissaient udire
SFX yF audire audîmes udire
SFX yF audire audîtes udire
SFX yF audire audirent udire
SFX yF audire audirai udire
SFX yF audire audiras udire
SFX yF audire audira udire
SFX yF audire audirons udire
SFX yF audire audirez udire
SFX yF audire audiront udire
SFX yF audire audirais udire
SFX yF audire audirait udire
SFX yF audire audirions udire
SFX yF audire audiriez udire
SFX yF audire audiraient udire
SFX yF audire audisse udire
SFX yF audire audisses udire
SFX yF audire audisse udire
SFX yF audire audît udire
SFX yF audire audis udire
SFX yF audire audissons udire
SFX yF audire audissez udire
SFX yG Y 38
SFX yG dire dire/m't's' dire
SFX yG dire disant/m't's' dire
SFX yG dire dit dire
SFX yG dire dis/m't' dire
SFX yG dire dit/s' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yG dire disent/s' dire
SFX yG dire disais/m't' dire
SFX yG dire disait/s' dire
SFX yG dire disions dire
SFX yG dire disiez dire
SFX yG dire disaient/s' dire
SFX yG dire dîmes dire
SFX yG dire dîtes dire
SFX yG dire dirent/s' dire
SFX yG dire dirai/m' dire
SFX yG dire diras/t' dire
SFX yG dire dira/s' dire
SFX yG dire dirons dire
SFX yG dire direz dire
SFX yG dire diront/s' dire
SFX yG dire dirais/m't' dire
SFX yG dire dirait/s' dire
SFX yG dire dirions dire
SFX yG dire diriez dire
SFX yG dire diraient/s' dire
SFX yG dire dise/m's' dire
SFX yG dire dises/t' dire
SFX yG dire disse/m' dire
SFX yG dire disses/t' dire
SFX yG dire dît/s' dire
SFX yG dire dissions dire
SFX yG dire dissiez dire
SFX yG dire dissent/s' dire
SFX yG dire dis/t' dire
SFX yG dire disons dire
SFX yG dire disez dire
SFX yJ N 7
SFX yJ ruire ruissant uire
SFX yJ ruire rui uire
SFX yJ ruire ruit uire
SFX yJ ruire ruissent uire
SFX yJ ruire ruissait uire
SFX yJ ruire ruissaient uire
SFX yJ ruire ruisse uire
SFX yK N 4
SFX yK bduire bduit uire
SFX yK bduire bduits uire
SFX yK bduire bduite uire
SFX yK bduire bduites uire
SFX yL Y 43
SFX yL uire uire/n'q'd'l'm't's' uire
SFX yL uire uisant/n'q'l'm't's' uire
SFX yL uire uit/L'D'Q' uire
SFX yL uire uits/D'Q' uire
SFX yL uire uite/L'D'Q' uire
SFX yL uire uites/D'Q' uire
SFX yL uire uis/n'q'j'l'm't' uire
SFX yL uire uit/n'q'l'm't's' uire
SFX yL uire uisons/n'q'l't' uire
SFX yL uire uisez/n'q'l'm' uire
SFX yL uire uisent/n'q'l'm't's' uire
SFX yL uire uisais/n'q'j'l'm't' uire
SFX yL uire uisait/n'q'l'm't's' uire
SFX yL uire uisions/n'q'l't' uire
SFX yL uire uisiez/n'q'l'm' uire
SFX yL uire uisaient/n'q'l'm't's' uire
SFX yL uire uisis/n'q'j'l'm't' uire
SFX yL uire uisit/n'q'l'm't's' uire
SFX yL uire uisîmes/n'q'l't' uire
SFX yL uire uisîtes/n'q'l'm' uire
SFX yL uire uisirent/n'q'l'm't's' uire
SFX yL uire uirai/n'q'j'l't' uire
SFX yL uire uiras/n'q'l'm' uire
SFX yL uire uira/n'q'l'm't's' uire
SFX yL uire uirons/n'q'l't' uire
SFX yL uire uirez/n'q'l'm' uire
SFX yL uire uiront/n'q'l'm't's' uire
SFX yL uire uirais/n'q'j'l'm't' uire
SFX yL uire uirait/n'q'l'm't's' uire
SFX yL uire uirions/n'q'l't' uire
SFX yL uire uiriez/n'q'l'm' uire
SFX yL uire uiraient/n'q'l'm't's' uire
SFX yL uire uise/n'q'j'l'm't's' uire
SFX yL uire uises/n'l'm' uire
SFX yL uire uisisse/n'q'j'l't' uire
SFX yL uire uisisses/n'q'l'm' uire
SFX yL uire uisît/n'q'l'm't's' uire
SFX yL uire uisissions/n'q'l't' uire
SFX yL uire uisissiez/n'q'l'm' uire
SFX yL uire uisissent/n'q'l'm't's' uire
SFX yL uire uis/n'l'm' uire
SFX yL uire uisons/n'l' uire
SFX yL uire uisez/n'l'm' uire
SFX yM Y 43
SFX yM uire uire/n'q'd'l'm't's' uire
SFX yM uire uisant/n'q'l'm't's' uire
SFX yM uire uit/L'D'Q' uire
SFX yM uire uits/D'Q' uire
SFX yM uire uite/L'D'Q' uire
SFX yM uire uites/D'Q' uire
SFX yM uire uis/n'q'j'l'm't' uire
SFX yM uire uit/n'q'l'm't's' uire
SFX yM uire uisons/n'q'l't' uire
SFX yM uire uisez/n'q'l'm' uire
SFX yM uire uisent/n'q'l'm't's' uire
SFX yM uire uisais/n'q'j'l'm't' uire
SFX yM uire uisait/n'q'l'm't's' uire
SFX yM uire uisions/n'q'l't' uire
SFX yM uire uisiez/n'q'l'm' uire
SFX yM uire uisaient/n'q'l'm't's' uire
SFX yM uire uisis/n'q'j'l'm't' uire
SFX yM uire uisit/n'q'l'm't's' uire
SFX yM uire uisîmes/n'q'l't' uire
SFX yM uire uisîtes/n'q'l'm' uire
SFX yM uire uisirent/n'q'l'm't's' uire
SFX yM uire uirai/n'q'j'l'm't' uire
SFX yM uire uiras/n'q'l'm't' uire
SFX yM uire uira/n'q'l'm't's' uire
SFX yM uire uirons/n'q'l't' uire
SFX yM uire uirez/n'q'l'm' uire
SFX yM uire uiront/n'q'l'm't's' uire
SFX yM uire uirais/n'q'j'l'm't' uire
SFX yM uire uirait/n'q'l'm't's' uire
SFX yM uire uirions/n'q'l't' uire
SFX yM uire uiriez/n'q'l'm' uire
SFX yM uire uiraient/n'q'l'm't's' uire
SFX yM uire uise/n'q'j'l'm't's' uire
SFX yM uire uises/n'l'm't' uire
SFX yM uire uisisse/n'q'j'l'm't' uire
SFX yM uire uisisses/n'q'l'm't' uire
SFX yM uire uisît/n'q'l'm't's' uire
SFX yM uire uisissions/n'q'l't' uire
SFX yM uire uisissiez/n'q'l'm' uire
SFX yM uire uisissent/n'q'l'm't's' uire
SFX yM uire uis/n'l'm't' uire
SFX yM uire uisons/n'l' uire
SFX yM uire uisez/n'l'm' uire
SFX yN Y 33
SFX yN truire truire/s' uire
SFX yN truire truisant/s' uire
SFX yN truire truit uire
SFX yN truire truits uire
SFX yN truire truite uire
SFX yN truire truites uire
SFX yN truire truit/s' uire
SFX yN truire truisons uire
SFX yN truire truisez uire
SFX yN truire truisent/s' uire
SFX yN truire truisait/s' uire
SFX yN truire truisions uire
SFX yN truire truisiez uire
SFX yN truire truisaient/s' uire
SFX yN truire truisit/s' uire
SFX yN truire truisîmes uire
SFX yN truire truisîtes uire
SFX yN truire truisirent/s' uire
SFX yN truire truira/s' uire
SFX yN truire truirons uire
SFX yN truire truirez uire
SFX yN truire truiront/s' uire
SFX yN truire truirait/s' uire
SFX yN truire truirions uire
SFX yN truire truiriez uire
SFX yN truire truiraient/s' uire
SFX yN truire truise/s' uire
SFX yN truire truisît/s' uire
SFX yN truire truisissions uire
SFX yN truire truisissiez uire
SFX yN truire truisissent/s' uire
SFX yN truire truisons-nous uire
SFX yN truire truisez-vous uire
SFX yO Y 43
SFX yO détruire détruire/m't's' détruire
SFX yO détruire détruisant/m't's' détruire
SFX yO détruire détruit détruire
SFX yO détruire détruits détruire
SFX yO détruire détruite détruire
SFX yO détruire détruites détruire
SFX yO détruire détruis/m't' détruire
SFX yO détruire détruit/s' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yO détruire détruisent/s' détruire
SFX yO détruire détruisais/m't' détruire
SFX yO détruire détruisait/s' détruire
SFX yO détruire détruisions détruire
SFX yO détruire détruisiez détruire
SFX yO détruire détruisaient/s' détruire
SFX yO détruire détruisis/m't' détruire
SFX yO détruire détruisit/s' détruire
SFX yO détruire détruisîmes détruire
SFX yO détruire détruisîtes détruire
SFX yO détruire détruisirent/s' détruire
SFX yO détruire détruirai/m' détruire
SFX yO détruire détruiras/t' détruire
SFX yO détruire détruira/s' détruire
SFX yO détruire détruirons détruire
SFX yO détruire détruirez détruire
SFX yO détruire détruiront/s' détruire
SFX yO détruire détruirais/m't' détruire
SFX yO détruire détruirait/s' détruire
SFX yO détruire détruirions détruire
SFX yO détruire détruiriez détruire
SFX yO détruire détruiraient/s' détruire
SFX yO détruire détruise/m's' détruire
SFX yO détruire détruises/t' détruire
SFX yO détruire détruisisse/m' détruire
SFX yO détruire détruisisses/t' détruire
SFX yO détruire détruisît/s' détruire
SFX yO détruire détruisissions détruire
SFX yO détruire détruisissiez détruire
SFX yO détruire détruisissent/s' détruire
SFX yO détruire détruis/t' détruire
SFX yO détruire détruisons détruire
SFX yO détruire détruisez détruire
SFX yU N 39
SFX yU uire uisant uire
SFX yU uire ui uire
SFX yU uire uis uire
SFX yU uire uit uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yU uire uisent uire
SFX yU uire uisais uire
SFX yU uire uisait uire
SFX yU uire uisions uire
SFX yU uire uisiez uire
SFX yU uire uisaient uire
SFX yU uire uisis uire
SFX yU uire uisit uire
SFX yU uire uisîmes uire
SFX yU uire uisîtes uire
SFX yU uire uisirent uire
SFX yU uire uirai uire
SFX yU uire uiras uire
SFX yU uire uira uire
SFX yU uire uirons uire
SFX yU uire uirez uire
SFX yU uire uiront uire
SFX yU uire uirais uire
SFX yU uire uirait uire
SFX yU uire uirions uire
SFX yU uire uiriez uire
SFX yU uire uiraient uire
SFX yU uire uise uire
SFX yU uire uises uire
SFX yU uire uisisse uire
SFX yU uire uisisses uire
SFX yU uire uisît uire
SFX yU uire uisissions uire
SFX yU uire uisissiez uire
SFX yU uire uisissent uire
SFX yU uire uis uire
SFX yU uire uisons uire
SFX yU uire uisez uire
SFX yV N 44
SFX yV ire isant ire
SFX yV ire it nfire
SFX yV ire its nfire
SFX yV ire ite nfire
SFX yV ire ites nfire
SFX yV ire is cire
SFX yV ire ise cire
SFX yV ire ises cire
SFX yV ire i ffire
SFX yV ire is ire
SFX yV ire it ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yV ire isent ire
SFX yV ire isais ire
SFX yV ire isait ire
SFX yV ire isions ire
SFX yV ire isiez ire
SFX yV ire isaient ire
SFX yV ire îmes ire
SFX yV ire îtes ire
SFX yV ire irent ire
SFX yV ire irai ire
SFX yV ire iras ire
SFX yV ire ira ire
SFX yV ire irons ire
SFX yV ire irez ire
SFX yV ire iront ire
SFX yV ire irais ire
SFX yV ire irait ire
SFX yV ire irions ire
SFX yV ire iriez ire
SFX yV ire iraient ire
SFX yV ire ise ire
SFX yV ire ises ire
SFX yV ire isse ire
SFX yV ire isses ire
SFX yV ire ît ire
SFX yV ire issions ire
SFX yV ire issiez ire
SFX yV ire issent ire
SFX yV ire is ire
SFX yV ire isons ire
SFX yV ire isez ire
SFX yW N 37
SFX yW ire iant rire
SFX yW ire i rire
SFX yW ire is rire
SFX yW ire it rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yW ire ient rire
SFX yW ire iais rire
SFX yW ire iait rire
SFX yW ire iions rire
SFX yW ire iiez rire
SFX yW ire iaient rire
SFX yW ire îmes rire
SFX yW ire îtes rire
SFX yW ire irent rire
SFX yW ire irai rire
SFX yW ire iras rire
SFX yW ire ira rire
SFX yW ire irons rire
SFX yW ire irez rire
SFX yW ire iront rire
SFX yW ire irais rire
SFX yW ire irait rire
SFX yW ire irions rire
SFX yW ire iriez rire
SFX yW ire iraient rire
SFX yW ire ie rire
SFX yW ire ies rire
SFX yW ire isse rire
SFX yW ire isses rire
SFX yW ire ît rire
SFX yW ire issions rire
SFX yW ire issiez rire
SFX yW ire issent rire
SFX yW ire is rire
SFX yW ire ions rire
SFX yW ire iez rire
SFX yX Y 30
SFX yX nuire nuire/s' nuire
SFX yX nuire nuisant/s' nuire
SFX yX nuire nui nuire
SFX yX nuire nuit/s' nuire
SFX yX nuire nuisons nuire
SFX yX nuire nuisez nuire
SFX yX nuire nuisent/s' nuire
SFX yX nuire nuisait/s' nuire
SFX yX nuire nuisions nuire
SFX yX nuire nuisiez nuire
SFX yX nuire nuisaient/s' nuire
SFX yX nuire nuisit/s' nuire
SFX yX nuire nuisîmes nuire
SFX yX nuire nuisîtes nuire
SFX yX nuire nuisirent/s' nuire
SFX yX nuire nuira/s' nuire
SFX yX nuire nuirons nuire
SFX yX nuire nuirez nuire
SFX yX nuire nuiront/s' nuire
SFX yX nuire nuirait/s' nuire
SFX yX nuire nuirions nuire
SFX yX nuire nuiriez nuire
SFX yX nuire nuiraient/s' nuire
SFX yX nuire nuise/s' nuire
SFX yX nuire nuisît/s' nuire
SFX yX nuire nuisissions nuire
SFX yX nuire nuisissiez nuire
SFX yX nuire nuisissent/s' nuire
SFX yX nuire nuisons-nous nuire
SFX yX nuire nuisez-vous nuire
SFX yY Y 4
SFX yY ccire ccire/n'q'd'l'm't's' occire
SFX yY ccire ccis/L'D'Q' occire
SFX yY ccire ccise/L'D'Q' occire
SFX yY ccire ccises/D'Q' occire
SFX yZ N 13
SFX yZ rire risant rire
SFX yZ rire rit rire
SFX yZ rire rits rire
SFX yZ rire rite rire
SFX yZ rire rites rire
SFX yZ rire ris rire
SFX yZ rire rit rire
SFX yZ rire rirai rire
SFX yZ rire riras rire
SFX yZ rire rira rire
SFX yZ rire rirais rire
SFX yZ rire rirait rire
SFX yZ rire ris rire
SFX q+ Y 32
SFX q+ enir enu/L'D'Q' enir
SFX q+ enir enus/D'Q' enir
SFX q+ enir enue/L'D'Q' enir
SFX q+ enir enues/D'Q' enir
SFX q+ tir ti/L'D'Q' tir
SFX q+ tir tis/D'Q' tir
SFX q+ tir tie/L'D'Q' tir
SFX q+ tir ties/D'Q' tir
SFX q+ courir couru/L'D'Q' courir
SFX q+ courir courus/D'Q' courir
SFX q+ courir courue/L'D'Q' courir
SFX q+ courir courues/D'Q' courir
SFX q+ ivre écu vivre
SFX q+ ivre écus vivre
SFX q+ ivre écue vivre
SFX q+ ivre écues vivre
SFX q+ aire u aire
SFX q+ aire us aire
SFX q+ aire ue aire
SFX q+ aire ues aire
SFX q+ dre du dre
SFX q+ dre dus dre
SFX q+ dre due dre
SFX q+ dre dues dre
SFX q+ valoir valu .valoir
SFX q+ valoir valus .valoir
SFX q+ valoir value .valoir
SFX q+ valoir values .valoir
SFX q+ aître u/L'D'Q' aître
SFX q+ aître us/D'Q' aître
SFX q+ aître ue/L'D'Q' aître
SFX q+ aître ues/D'Q' aître
SFX q. Y 8
SFX q. enir enu/q' enir
SFX q. tir ti/q' tir
SFX q. courir couru/q' courir
SFX q. ivre écu vivre
SFX q. aire u aire
SFX q. dre du dre
SFX q. valoir valu/q' .valoir
SFX q. aître u/q' aître
|
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-modern/fr-FR-modern.dic version [6619ddfbaf].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-reform/fr-FR-reform.aff version [8d6758f52c].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-reform/fr-FR-reform.dic version [45464bd750].
more than 10,000 changes
Added gc_lang/fr/xpi/data/gc_panel.css version [882bab8a6d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 |
/* panel.css */
@import url("common.css");
header {
background-color: hsl(0, 0%, 96%);
padding: 10px 20px;
border-bottom: 1px solid hsl(0, 0%, 90%);
color: hsl(0, 0%, 0%);
z-index: 99;
}
body {
background-color: hsl(0, 0%, 98%);
font-family: Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif;
overflow-x: hidden;
color: hsl(0, 0%, 0%);
}
#messagebox {
position: absolute;
display: none;
left: 50%;
width: 250px;
margin-left: -125px;
top: 50px;
background-color: hsla(0, 50%, 20%, .8);
border: 2px solid hsla(0, 50%, 10%, .8);
border-radius: 5px;
text-align: center;
color: hsla(0, 0%, 100%, .9);
font-size: 16px;
font-weight: bold;
z-index: 99;
}
#message {
padding: 10px 20px;
}
#errorlist {
padding: 60px 20px 30px 20px;
}
#errorlist p.message {
margin-top: 20px;
padding: 10px 10px;
background-color: hsla(240, 10%, 50%, 1);
font-size: 18px;
color: hsla(240, 0%, 96%, 1);
border-radius: 3px;
text-align: center;
}
#errorlist p.green {
background-color: hsla(120, 10%, 50%, 1);
color: hsla(120, 0%, 96%, 1);
}
.paragraph {
background-color: hsla(0, 0%, 90%, 1);
padding: 10px;
border-radius: 2px;
font-size: 14px;
font-family : "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
color: hsl(0, 0%, 0%);
}
.softred {
background-color: hsla(0, 20%, 90%, 1);
}
.softgreen {
background-color: hsla(120, 20%, 90%, 1);
}
.paragraph a {
background-color: hsla(210, 50%, 50%, 1);
padding: 1px 5px;
border-radius: 2px;
color: hsla(210, 0%, 96%, 1);
cursor: pointer;
text-decoration: none;
}
.paragraph a:hover {
background-color: hsla(210, 60%, 40%, 1);
color: hsla(0, 0%, 100%, 1);
text-shadow: 0 0 3px hsl(210, 30%, 60%);
}
.paragraph a.sugg {
padding: 1px 6px;
background-color: hsla(150, 50%, 40%, 1);
color: hsla(150, 0%, 96%, 1);
border-radius: 2px;
cursor: pointer;
text-decoration: none;
}
.paragraph a.sugg:hover {
background-color: hsla(150, 70%, 30%, 1);
color: hsla(0, 0%, 100%, 1);
text-shadow: 0 0 3px hsl(150, 30%, 60%);
}
.paragraph a.ignore {
padding: 0 2px;
background-color: hsla(30, 20%, 60%, 1);
color: hsla(30, 0%, 96%, 1);
border-radius: 2px;
cursor: pointer;
text-decoration: none;
}
.paragraph a.ignore:hover {
background-color: hsla(30, 20%, 50%, 1);
color: hsla(0, 0%, 100%, 1);
text-shadow: 0 0 3px hsl(30, 30%, 60%);
}
.paragraph u.corrected,
.paragraph u.ignored {
background-color: hsla(120, 50%, 70%, 1);
color: hsla(0, 0%, 4%, 1);
border-radius: 2px;
text-decoration: none;
}
.paragraph u.ignored {
background-color: hsla(30, 20%, 80%, 1);
}
.paragraph u.error {
position: relative;
cursor: pointer;
border-radius: 2px;
text-decoration: none; /* to remove for wavy underlines */
}
.paragraph u.error:hover {
cursor: pointer;
}
.paragraph u.error .tooltip, .paragraph u.error .tooltip_on {
position: absolute;
background-color: hsla(210, 10%, 90%, 1);
font-family: Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif;
top: 90%;
left: 0;
width: 250px;
font-size: 12px;
line-height: 18px;
color: hsla(0, 10%, 20%, 1);
cursor: default;
/*visibility: hidden;*/
display: none;
padding: 10px;
box-shadow: 0 0 6px hsla(0, 0%, 0%, 0.3);
z-index: 10;
border: 2px solid hsl(0, 0%, 0%);
border-radius: 3px;
text-decoration: none;
}
.paragraph u.error .tooltip_on {
display: block;
}
.tooltip_on s {
color: hsla(0, 0%, 66%, 1);
font-weight: bold;
font-size: 8px;
line-height: 16px;
text-transform: uppercase;
text-decoration: none;
}
.debug {
float: right;
background-color: hsla(0, 5%, 35%, 1);
padding: 2px 5px;
margin-left: 5px;
border-radius: 2px;
color: hsla(0, 0%, 96%, 1);
font-size: 11px;
font-style: normal;
}
.data {
font-style: normal;
}
.actions {
margin-top: -10px;
margin-bottom: 10px;
}
.actions .button {
background-color: hsl(0, 0%, 50%);
text-align: center;
float: right;
margin-left: 2px;
padding: 1px 4px 3px 4px;
/*width: 18px;
height: 18px;*/
cursor: pointer;
font-size: 14px;
font-weight: bold;
color: hsl(0, 0%, 96%);
border-radius: 2px;
}
.actions .button:hover {
background-color: hsl(0, 0%, 40%);
color: hsl(0, 0%, 100%);
}
.actions .green {
background-color: hsl(120, 30%, 50%);
color: hsl(0, 0%, 96%);
}
.actions .green:hover {
background-color: hsl(120, 50%, 40%);
color: hsl(0, 0%, 100%);
}
.actions .red {
background-color: hsl(0, 30%, 50%);
color: hsl(0, 0%, 96%);
}
.actions .red:hover {
background-color: hsl(0, 50%, 40%);
color: hsl(0, 0%, 100%);
}
.actions .orange {
background-color: hsl(30, 50%, 50%);
color: hsl(30, 0%, 96%);
}
.actions .orange:hover {
background-color: hsl(30, 70%, 40%);
color: hsl(30, 0%, 100%);
}
/*
ERRORS
*/
.error {
/* default color */
background-color: hsl(240, 10%, 50%);
color: hsl(240, 0%, 96%);
}
.error:hover {
background-color: hsl(240, 10%, 40%);
color: hsl(240, 0%, 100%);
}
/* elems */
.spell {
background-color: hsl(0, 50%, 50%);
color: hsl(0, 0%, 96%);
/*text-decoration: underline wavy hsl(0, 50%, 50%);*/
}
.spell:hover {
background-color: hsl(0, 60%, 40%);
color: hsl(0, 0%, 100%);
}
/* elems */
.typo, .esp, .nbsp, .eif, .maj, .virg, .tu, .num, .unit, .nf, .liga, .mapos, .chim {
background-color: hsl(30, 70%, 50%);
color: hsl(30, 10%, 96%);
/*text-decoration: underline wavy hsl(30, 70%, 50%);*/
}
.typo:hover, .esp:hover, .nbsp:hover, .eif:hover, .maj:hover, .virg:hover, .tu:hover, .num:hover, .unit:hover, .nf:hover, .liga:hover, .mapos:hover, .chim:hover {
background-color: hsl(30, 80%, 45%);
color: hsl(30, 10%, 96%);
}
/* elems */
.apos {
background-color: hsl(40, 90%, 50%);
color: hsl(40, 10%, 96%);
/*text-decoration: underline wavy hsl(40, 70%, 45%);*/
}
.apos:hover {
background-color: hsl(40, 100%, 45%);
color: hsl(40, 10%, 96%);
}
/* elems */
.gn, .sgpl {
background-color: hsl(210, 50%, 50%);
color: hsl(210, 10%, 96%);
/*text-decoration: underline wavy hsl(210, 50%, 50%);*/
}
.gn:hover, .sgpl:hover {
background-color: hsl(210, 60%, 40%);
color: hsl(210, 10%, 96%);
}
/* elems */
.conj, .infi, .imp, .inte, .ppas, .vmode {
background-color: hsl(300, 30%, 40%);
color: hsl(300, 10%, 96%);
/*text-decoration: underline wavy hsl(300, 40%, 40%);*/
}
.conj:hover, .infi:hover, .imp:hover, .inte:hover, .ppas:hover, .vmode:hover {
background-color: hsl(300, 40%, 30%);
color: hsl(300, 10%, 96%);
}
/* elems */
.conf, .ocr {
background-color: hsl(270, 40%, 30%);
color: hsl(270, 10%, 96%);
/*text-decoration: underline wavy hsl(270, 40%, 30%);*/
}
.conf:hover, .ocr:hover {
background-color: hsl(270, 50%, 20%);
color: hsl(270, 10%, 96%);
}
/* elems */
.bs, .pleo, .neg, .redon1, .redon2, .mc, .date, .notype {
background-color: hsl(180, 50%, 40%);
color: hsl(180, 10%, 96%);
/*text-decoration: underline wavy hsl(180, 50%, 40%);*/
}
.bs:hover, .pleo:hover, .neg:hover, .redon1:hover, .redon2:hover, .mc:hover, .date:hover, .notype:hover {
background-color: hsl(180, 60%, 30%);
color: hsl(180, 10%, 96%);
}
|
Added gc_lang/fr/xpi/data/gc_panel.html version [6930e5be20].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="gc_panel.css" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<script type="text/javascript">
// for some reason, onclick onmouseover onmouseout can’t launch function in attached script, so here it is.
function showData (sIdErr) {
document.getElementById("data"+sIdErr).hidden = false;
}
function hideData (sIdErr) {
document.getElementById("data"+sIdErr).hidden = true;
}
</script>
<body class="panel">
<div style="position: fixed; width: 100%">
<div id="rightcorner">
<a class="rightcornerbutton red" id="close" href="#"><b>×</b></a>
<a class="rightcornerbutton cyan" id="expand_reduce" href="#"><b>−</b></a>
<a class="rightcornerbutton1 green" id="copy_to_clipboard" href="#" style="display: none;" onclick="return false;"><b id="clipboard_msg">∑</b></a>
</div>
<header>
<div id="waiticon" class="spinner">
<div class="double-bounce1"></div>
<div class="double-bounce2"></div>
</div>
<!--<div id="waiticon" class="fright" style="margin-right: 50px">
<img src="./img/spinner32.png" />
</div>-->
<h2>Grammalecte</h2>
</header>
<div id="messagebox"><a id="closemsg" class="rightcornerbutton1 red" href="#" onclick="return false;"><b>×</b></a><p id="message"></p></div>
</div>
<div id="movewindow">
<div id="resize_h_bigger" class="arrow" style="border-radius: 2px 0 0 0">↓</div>
<div id="resize_h_smaller" class="arrow">↑</div>
<div id="resize_w_bigger" class="arrow">←</div>
<div id="resize_w_smaller" class="arrow" style="border-radius: 0 0 0 2px">→</div>
</div>
<div id="errorlist">
<!-- result comes here -->
</div>
</body>
</html>
|
Added gc_lang/fr/xpi/data/gc_panel.js version [c4fda97645].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 |
// JavaScript
let nPanelWidth = 0; // must be set at launch
let bExpanded = true;
/*
Events
*/
document.getElementById('close').addEventListener("click", function (event) {
bExpanded = true; // size is reset in ui.js
self.port.emit('closePanel');
});
document.getElementById('expand_reduce').addEventListener("click", function (event) {
if (bExpanded) {
self.port.emit("resize", "reduce", 10); // the number has no meaning here
bExpanded = false;
} else {
self.port.emit("resize", "expand", 10); // the number has no meaning here
bExpanded = true;
}
});
document.getElementById('copy_to_clipboard').addEventListener("click", function (event) {
copyToClipboard();
});
document.getElementById('closemsg').addEventListener("click", function (event) {
closeMessageBox();
});
self.port.on("setPanelWidth", function (n) {
nPanelWidth = n;
});
self.port.on("addElem", function (sHtml) {
let xElem = document.createElement("div");
xElem.innerHTML = sHtml;
document.getElementById("errorlist").appendChild(xElem);
});
self.port.on("refreshParagraph", function (sIdParagr, sHtml) {
document.getElementById("paragr"+sIdParagr).innerHTML = sHtml;
let sClassName = (sHtml.includes('<u id="err')) ? "paragraph softred" : "paragraph softgreen";
document.getElementById("paragr"+sIdParagr).className = sClassName;
});
self.port.on("showMessage", function (sText) {
document.getElementById("message").textContent = sText;
document.getElementById("messagebox").style.display = "block";
window.setTimeout(closeMessageBox, 20000);
});
self.port.on("clearErrors", function (sHtml) {
document.getElementById("errorlist").textContent = "";
});
self.port.on("start", function() {
startWaitIcon();
});
self.port.on("end", function() {
stopWaitIcon();
document.getElementById("copy_to_clipboard").style.display = "block";
});
self.port.on("suggestionsFor", function (sWord, sSuggestions, sTooltipId) {
// spell checking suggestions
//console.log(sWord + ": " + sSuggestions);
if (sSuggestions === "") {
document.getElementById(sTooltipId).innerHTML += "Aucune.";
} else if (sSuggestions.startsWith("#")) {
document.getElementById(sTooltipId).innerHTML += sSuggestions;
} else {
let lSugg = sSuggestions.split("|");
let iSugg = 0;
let sElemId = sTooltipId.slice(7);
for (let sSugg of lSugg) {
document.getElementById(sTooltipId).innerHTML += '<a id="sugg' + sElemId + "-" + iSugg + '" class="sugg" href="#" onclick="return false;">' + sSugg + '</a> ';
iSugg += 1;
}
}
});
window.addEventListener(
"click",
function (xEvent) {
let xElem = xEvent.target;
if (xElem.id) {
if (xElem.id.startsWith("sugg")) {
applySuggestion(xElem.id);
} else if (xElem.id.startsWith("ignore")) {
ignoreError(xElem.id);
} else if (xElem.id.startsWith("check")) {
sendBackAndCheck(xElem.id);
} else if (xElem.id.startsWith("edit")) {
switchEdition(xElem.id);
} else if (xElem.id.startsWith("end")) {
document.getElementById(xElem.id).parentNode.parentNode.style.display = "none";
} else if (xElem.tagName === "U" && xElem.id.startsWith("err")) {
showTooltip(xElem.id);
} else if (xElem.id.startsWith("resize")) {
self.port.emit("resize", xElem.id, 10);
} else {
hideAllTooltips();
}
} else if (xElem.tagName === "A") {
self.port.emit("openURL", xElem.getAttribute("href"));
} else {
hideAllTooltips();
}
},
false
);
/*
Actions
*/
function closeMessageBox () {
document.getElementById("messagebox").style.display = "none";
document.getElementById("message").textContent = "";
}
function applySuggestion (sElemId) { // sugg
try {
let sIdParagr = sElemId.slice(4, sElemId.indexOf("_"));
startWaitIcon("paragr"+sIdParagr);
let sIdErr = "err" + sElemId.slice(4, sElemId.indexOf("-"));
document.getElementById(sIdErr).textContent = document.getElementById(sElemId).textContent;
document.getElementById(sIdErr).className = "corrected";
document.getElementById(sIdErr).removeAttribute("style");
self.port.emit("correction", sIdParagr, getPurgedTextOfElem("paragr"+sIdParagr));
stopWaitIcon("paragr"+sIdParagr);
} catch (e) {
console.log(e.message + e.lineNumber);
}
}
function ignoreError (sElemId) { // ignore
let sIdErr = "err" + sElemId.slice(6);
let xTooltipElem = document.getElementById("tooltip"+sElemId.slice(6));
document.getElementById(sIdErr).removeChild(xTooltipElem);
document.getElementById(sIdErr).className = "ignored";
document.getElementById(sIdErr).removeAttribute("style");
}
function showTooltip (sElemId) { // err
hideAllTooltips();
let sTooltipId = "tooltip" + sElemId.slice(3);
let xTooltipElem = document.getElementById(sTooltipId);
let nLimit = nPanelWidth - 300; // paragraph width - tooltip width
if (document.getElementById(sElemId).offsetLeft > nLimit) {
xTooltipElem.style.left = "-" + (document.getElementById(sElemId).offsetLeft - nLimit) + "px";
}
xTooltipElem.setAttribute("contenteditable", false);
xTooltipElem.className = 'tooltip_on';
if (document.getElementById(sElemId).className === "error spell" && xTooltipElem.textContent.endsWith(":")) {
// spelling mistake
self.port.emit("getSuggestionsForTo", document.getElementById(sElemId).innerHTML.replace(/<span .*$/, "").trim(), sTooltipId);
}
}
function switchEdition (sElemId) { // edit
let sId = "paragr" + sElemId.slice(4);
if (document.getElementById(sId).hasAttribute("contenteditable") === false
|| document.getElementById(sId).getAttribute("contenteditable") === "false") {
document.getElementById(sId).setAttribute("contenteditable", true);
document.getElementById(sElemId).className = "button orange";
document.getElementById(sId).focus();
} else {
document.getElementById(sId).setAttribute("contenteditable", false);
document.getElementById(sElemId).className = "button";
}
}
function sendBackAndCheck (sElemId) { // check
startWaitIcon();
let sIdParagr = sElemId.slice(5);
self.port.emit("modifyAndCheck", sIdParagr, getPurgedTextOfElem("paragr"+sIdParagr));
stopWaitIcon();
}
function getPurgedTextOfElem (sId) {
// Note : getPurgedTextOfElem2 should work better if not buggy.
// if user writes in error, Fx adds tags <u></u>, we also remove style attribute
let xParagraphElem = document.getElementById(sId);
for (xNode of xParagraphElem.getElementsByTagName("u")) {
if (xNode.id.startsWith('err')) {
xNode.innerHTML = xNode.innerHTML.replace(/<\/?u>/g, "");
xNode.removeAttribute("style");
}
}
// we remove style attribute on tooltip
for (xNode of xParagraphElem.getElementsByTagName("span")) {
if (xNode.id.startsWith('tooltip')) {
xNode.removeAttribute("style");
}
}
// now, we remove tooltips, then errors, and we change some html entities
let sText = xParagraphElem.innerHTML;
sText = sText.replace(/<br\/? *> *$/ig, "");
sText = sText.replace(/<span id="tooltip.+?<\/span>/g, "");
sText = sText.replace(/<u id="err\w+" class="[\w ]+" href="#" onclick="return false;">(.+?)<\/u><!-- err_end -->/g, "$1");
sText = sText.replace(/ /g, " ").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");
return sText;
}
function getPurgedTextOfElem2 (sId) {
// It is better to remove tooltips via DOM and retrieve textContent,
// but for some reason getElementsByClassName “hazardously” forgets elements.
// Unused. Needs investigation.
let xParagraphElem = document.getElementById(sId).cloneNode(true);
for (let xNode of xParagraphElem.getElementsByClassName("tooltip")) {
xNode.parentNode.removeChild(xNode);
}
return xParagraphElem.textContent;
}
function hideAllTooltips () {
for (let xElem of document.getElementsByClassName("tooltip_on")) {
xElem.className = "tooltip";
xElem.removeAttribute("style");
}
}
function copyToClipboard () {
startWaitIcon();
try {
document.getElementById("clipboard_msg").textContent = "copie en cours…";
let sText = "";
for (let xNode of document.getElementById("errorlist").getElementsByClassName("paragraph")) {
sText += getPurgedTextOfElem(xNode.id);
sText += "\n";
}
self.port.emit('copyToClipboard', sText);
document.getElementById("clipboard_msg").textContent = "-> presse-papiers";
window.setTimeout(function() { document.getElementById("clipboard_msg").textContent = "∑"; } , 3000);
}
catch (e) {
console.log(e.lineNumber + ": " +e.message);
}
stopWaitIcon();
}
function startWaitIcon (sIdParagr=null) {
if (sIdParagr) {
document.getElementById(sIdParagr).disabled = true;
document.getElementById(sIdParagr).style.opacity = .3;
}
document.getElementById("waiticon").hidden = false;
}
function stopWaitIcon (sIdParagr=null) {
if (sIdParagr) {
document.getElementById(sIdParagr).disabled = false;
document.getElementById(sIdParagr).style.opacity = 1;
}
document.getElementById("waiticon").hidden = true;
}
|
Added gc_lang/fr/xpi/data/img/LaMouette.png version [e3c6d9c279].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/contextmenu.png version [b35dd4b3cf].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-16.png version [dcb1bf8ae0].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-32.png version [cbbaf9ff64].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-48.png version [73a119e8c1].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-64.png version [53bd99349a].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/lines.png version [e4f15f2e8d].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/logo120_text.png version [c438dd0680].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/logo2.png version [c8ddc58e4e].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/logo_texte.png version [a446454b58].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/spinner32.png version [8fe345304b].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/spinner64.png version [962bcf56c9].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/lxg_panel.css version [beaf75f9d5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
/* lxgpanel.css */
@import url("common.css");
header {
background-color: hsl(0, 0%, 96%);
padding: 10px 20px;
border-bottom: 1px solid hsl(0, 0%, 90%);
color: hsl(0, 0%, 0%);
}
body {
background-color: hsl(0, 0%, 98%);
font-family: "Trebuchet MS", sans-serif;
overflow-x: hidden;
color: hsl(0, 0%, 0%);
}
#wordlist {
padding: 50px 10px 10px 10px;
}
#wordlist .paragraph {
background-color: hsla(0, 0%, 90%, 1);
padding: 10px;
border-radius: 2px;
margin: 10px 5px;
}
#wordlist p {
margin: 8px;
}
#wordlist p.separator {
margin: 20px 0;
padding: 5px 50px;
background-color: hsla(0, 0%, 75%, 1);
color: hsla(0, 0%, 96%, 1);
border-radius: 5px;
text-align: center;
font-size: 20px;
}
#wordlist ul {
margin: 0 0 5px 40px;
}
#wordlist b {
background-color: hsla(150, 50%, 50%, 1);
color: hsla(0, 0%, 96%, 1);
padding: 2px 5px;
border-radius: 2px;
text-decoration: none;
}
#wordlist b.unknown {
background-color: hsla(0, 50%, 50%, 1);
}
#wordlist b.nb {
background-color: hsla(210, 50%, 50%, 1);
}
#wordlist b.mbok {
background-color: hsla(60, 50%, 50%, 1);
}
#wordlist s {
color: hsla(0, 0%, 60%, 1);
text-decoration: none;
}
#wordlist .textline {
text-decoration: bold;
}
#wordlist p.message {
margin-top: 20px;
padding: 10px 10px;
background-color: hsla(240, 10%, 50%, 1);
font-size: 18px;
color: hsla(240, 0%, 96%, 1);
border-radius: 3px;
text-align: center;
}
|
Added gc_lang/fr/xpi/data/lxg_panel.html version [0371eb4f06].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="lxg_panel.css" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body class="panel">
<div style="position: fixed; width: 100%">
<div id="rightcorner">
<a class="rightcornerbutton red" id="close" href="#"><b>×</b></a>
<a class="rightcornerbutton1 cyan" id="expand_reduce" href="#"><b>−</b></a>
</div>
<header>
<div id="waiticon" class="spinner">
<div class="double-bounce1"></div>
<div class="double-bounce2"></div>
</div>
<h2>Grammalecte · Lexicographe</h2>
</header>
</div>
<div id="movewindow">
<div id="resize_h_bigger" class="arrow" style="border-radius: 2px 0 0 0">↓</div>
<div id="resize_h_smaller" class="arrow">↑</div>
<div id="resize_w_bigger" class="arrow">←</div>
<div id="resize_w_smaller" class="arrow" style="border-radius: 0 0 0 2px">→</div>
</div>
<div id="wordlist"></div>
<div class="clearer"></div>
</body>
</html>
|
Added gc_lang/fr/xpi/data/lxg_panel.js version [8999221c88].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
// JavaScript
let bExpanded = true;
// events
document.getElementById('close').addEventListener("click", function (event) {
bExpanded = true; // size is reset in ui.js
self.port.emit('closePanel');
});
document.getElementById('expand_reduce').addEventListener("click", function (event) {
if (bExpanded) {
self.port.emit("resize", "reduce", 10); // the number has no meaning here
bExpanded = false;
} else {
self.port.emit("resize", "expand", 10); // the number has no meaning here
bExpanded = true;
}
});
/*
// Conjugueur
document.getElementById('conjugueur').addEventListener("click", function (event) {
self.port.emit('openConjugueur');
});
*/
self.port.on("addSeparator", function (sText) {
if (document.getElementById("wordlist").innerHTML !== "") {
let xElem = document.createElement("p");
xElem.className = "separator";
xElem.innerHTML = sText;
document.getElementById("wordlist").appendChild(xElem);
}
});
self.port.on("addElem", function (sHtml) {
let xElem = document.createElement("div");
xElem.innerHTML = sHtml;
document.getElementById("wordlist").appendChild(xElem);
});
self.port.on("clear", function (sHtml) {
document.getElementById("wordlist").textContent = "";
});
self.port.on("startWaitIcon", function() {
document.getElementById("waiticon").hidden = false;
});
self.port.on("stopWaitIcon", function() {
document.getElementById("waiticon").hidden = true;
});
window.addEventListener(
"click",
function (xEvent) {
let xElem = xEvent.target;
if (xElem.id) {
if (xElem.id.startsWith("resize")) {
self.port.emit("resize", xElem.id, 10);
}
}
},
false
);
// display selection
function displayClasses () {
setHidden("ok", document.getElementById("ok").checked);
setHidden("mbok", document.getElementById("mbok").checked);
setHidden("nb", document.getElementById("nb").checked);
setHidden("unknown", document.getElementById("unknown").checked);
}
function setHidden (sClass, bHidden) {
for (let i = 0; i < document.getElementsByClassName(sClass).length; i++) {
document.getElementsByClassName(sClass)[i].hidden = bHidden;
}
}
|
Added gc_lang/fr/xpi/data/replace_text.js version [b8f077eb6b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
// replace text in active worker
const dParagraphs = new Map();
let xActiveTextZone = null;
let xCloseButton = null;
let xParentElement = null;
/* events */
self.port.on("setActiveElement", function (bSendTextBack=false) {
setActiveElement(bSendTextBack);
});
self.port.on("setParagraph", function (iParagraph, sText) {
dParagraphs.set(iParagraph, sText);
});
self.port.on("getParagraph", function (iParagraph) {
let sText = dParagraphs.has(iParagraph) ? dParagraphs.get(iParagraph) : getNthParagraph(iParagraph);
self.port.emit("emitParagraph", iParagraph, sText);
});
self.port.on("rewrite", function () {
rewrite();
});
self.port.on("getText", function () {
if (xActiveTextZone !== null) {
self.port.emit("emitText", xActiveTextZone.value);
}
});
self.port.on("write", function (sText) {
if (xActiveTextZone !== null) {
xActiveTextZone.value = sText;
}
});
self.port.on("clear", function () {
clear();
});
/* actions */
function setActiveElement (bSendTextBack=false) {
try {
if (document.activeElement.tagName === "TEXTAREA" || document.activeElement.tagName === "INPUT") {
xActiveTextZone = document.activeElement;
if (bSendTextBack) {
self.port.emit("yesThisIsTextZone", xActiveTextZone.value);
} else {
self.port.emit("yesThisIsTextZone", "");
}
createCloseButton(xActiveTextZone);
xActiveTextZone.disabled = true;
} else {
xActiveTextZone = null;
}
dParagraphs.clear();
} catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
}
function rewrite () {
try {
if (xActiveTextZone !== null) {
let sText = "";
let i = 0;
for (let sParagraph of xActiveTextZone.value.split("\n")) {
sText += (dParagraphs.has(i)) ? dParagraphs.get(i) + "\n" : sParagraph + "\n";
i += 1;
}
xActiveTextZone.value = sText.slice(0,-1);
}
} catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
}
function clear () {
try {
if (xActiveTextZone !== null) {
xActiveTextZone.disabled = false;
}
if (xCloseButton !== null) {
xParentElement.removeChild(xCloseButton);
xParentElement = null;
xCloseButton = null;
}
xActiveTextZone = null;
dParagraphs.clear();
} catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
}
function getNthParagraph (iParagraph) {
if (xActiveTextZone !== null) {
let sText = xActiveTextZone.value;
let i = 0;
let iStart = 0;
while (i < iParagraph && ((iStart = sText.indexOf("\n", iStart)) !== -1)) {
i++;
iStart++;
}
if (i === iParagraph) {
return ((iEnd = sText.indexOf("\n", iStart)) !== -1) ? sText.slice(iStart, iEnd) : sText.slice(iStart);
}
return "# Erreur. Paragraphe introuvable.";
}
return "# Erreur. Zone de texte introuvable.";
}
function createCloseButton (xActiveTextZone) {
xParentElement = xActiveTextZone.parentElement;
xCloseButton = document.createElement("p");
xCloseButton.textContent = "× | Débloquer la zone de texte.";
xCloseButton.title = "Cette action clot le panneau de correction de Grammalecte."
xCloseButton.style = "padding: 5px; color: #FFF; background-color: #F80; border-radius: 3px; cursor: pointer";
xCloseButton.onclick = function() {
self.port.emit("closeGCPanel");
self.port.emit("closeTFPanel");
if (xParentElement !== null) {
xParentElement.removeChild(xCloseButton);
xParentElement = null;
xCloseButton = null;
}
clear();
};
xParentElement.insertBefore(xCloseButton, xActiveTextZone);
}
|
Added gc_lang/fr/xpi/data/test_panel.css version [0ca7283e7e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
/* panel.css */
@import url("common.css");
header {
background-color: hsl(0, 0%, 96%);
border-bottom: 1px solid hsl(0, 0%, 90%);
padding: 10px 20px;
color: hsl(0, 0%, 0%);
}
body {
background-color: hsl(0, 0%, 86%);
font-family: "Trebuchet MS", sans-serif;
overflow-x: hidden;
color: hsl(0, 0%, 0%);
}
#cmd {
padding: 15px;
background-color: hsl(0, 0%, 92%);
border-bottom: 1px solid hsl(0, 0%, 86%);
}
#cmd h1 {
margin: 5px 0;
}
#cmd textarea {
width: 100%;
border: 2px solid hsl(0, 0%, 89%);
border-radius: 3px;
resize: vertical;
}
#results {
padding: 15px;
background-color: hsl(0, 0%, 96%);
}
.button {
display: inline-block;
padding: 5px 10px;
width: 80px;
border-radius: 3px;
font-size: 12px;
text-align: center;
cursor: pointer;
}
|
Added gc_lang/fr/xpi/data/test_panel.html version [70fc3d08d4].
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="test_panel.css" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body class="panel">
<div style="position: fixed; width: 100%">
<div id="rightcorner">
<a class="rightcornerbutton1 red" id="close" href="#"><b>×</b></a>
</div>
</div>
<div id="cmd">
<h1 data-l10n-id="testzone"></h1>
<textarea id="text" rows="10"></textarea>
<div id="testall" class="button blue" data-l10n-id="testall"></div> <div id="parse" class="button green fright" data-l10n-id="parse"></div>
</div>
<div id="results">
</div>
</body>
</html>
|
Added gc_lang/fr/xpi/data/test_panel.js version [7ad6cf391b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// JavaScript
/*
Events
*/
self.port.on("addElem", function (sHtml) {
let xElem = document.createElement("p");
xElem.innerHTML = sHtml;
document.getElementById("results").appendChild(xElem);
});
self.port.on("clear", function () {
document.getElementById("results").textContent = "";
});
document.getElementById('testall').addEventListener("click", function (event) {
self.port.emit('allGCTests');
});
document.getElementById('parse').addEventListener("click", function (event) {
self.port.emit('checkText', document.getElementById('text').value);
});
document.getElementById('close').addEventListener("click", function (event) {
self.port.emit('closePanel');
});
/*
Actions
*/
|
Added gc_lang/fr/xpi/data/tf_panel.css version [5322259150].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
/* lxgpanel.css */
@import url("common.css");
header {
background-color: hsl(0, 0%, 94%);
padding: 10px 20px;
border-bottom: 1px solid hsl(0, 0%, 90%);
color: hsl(0, 0%, 0%);
}
body {
background-color: hsl(120, 10%, 92%);
font-family: "Trebuchet MS", sans-serif;
overflow-x: hidden;
color: hsl(0, 0%, 0%);
}
#options {
background-color: hsl(0, 0%, 96%);
padding: 40px 15px 5px 15px;
}
.column {
display: inline-block;
vertical-align: top;
width: 370px;
}
fieldset {
margin: 5px 0;
padding: 5px 10px 10px 10px;
background-color: hsl(0, 0%, 92%);
border-radius: 3px;
}
legend {
font-size: 20px;
color: hsla(210, 20%, 50%, .8);
font-weight: bold;
}
legend span {
display: none;
}
fieldset h2 {
color: hsl(210, 80%, 40%);
}
fieldset .blockopt {
padding: 2px 3px;
font-size: 12.5px;
}
fieldset .underline:hover {
background-color: hsl(180, 10%, 86%);
border-radius: 2px;
}
fieldset .option {
margin: 1px 3px 0 0;
float: left;
}
legend .option {
margin: 7px 5px 0 3px;
float: left;
}
fieldset .opt_lbl {
display: inline-block;
color: hsl(0, 0%, 20%);
}
fieldset .largew {
width: 300px;
}
fieldset .reducedw {
width: 200px;
}
fieldset .smallw {
width: 90px;
}
fieldset .secondoption {
display: inline-block;
}
fieldset label span {
display: none;
}
.groupblock {
opacity: 0.3;
}
.inlineblock {
display: inline-block;
}
.indent {
margin-left: 15px;
}
#actions {
background-color: hsl(120, 10%, 92%);
padding: 15px;
border-top: 1px solid hsl(120, 20%, 86%);
}
.button {
display: inline-block;
padding: 5px 10px;
width: 100px;
border-radius: 3px;
font-size: 16px;
font-weight: bold;
text-align: center;
cursor: pointer;
}
#progressbarbox {
display: inline-block;
padding: 10px 20px;
}
|
Added gc_lang/fr/xpi/data/tf_panel.html version [3aa41a0998].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 |
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="tf_panel.css" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body class="panel">
<div style="position: fixed; width: 100%">
<div id="rightcorner">
<a class="rightcornerbutton1 red" id="close" href="#"><b>×</b></a>
</div>
<header>
<h2>Grammalecte · <span data-l10n-id="tf_title"></span></h2>
</header>
</div>
<div id="options">
<div class="column" style="margin-right: 5px;">
<!-- Supernumerary spaces -->
<fieldset>
<legend><input type="checkbox" id="o_group_ssp" class="option" data-default="true" /><label for="o_group_ssp" data-l10n-id="tf_ssp"></label></legend>
<div id="group_ssp" class="groupblock">
<div class="blockopt underline">
<div id="res_o_start_of_paragraph" class="result fright"></div>
<input type="checkbox" id="o_start_of_paragraph" class="option" data-default="true" />
<label for="o_start_of_paragraph" class="opt_lbl largew" data-l10n-id="tf_start_of_paragraph"></label>
</div>
<div class="blockopt underline">
<div id="res_o_end_of_paragraph" class="result fright"></div>
<input type="checkbox" id="o_end_of_paragraph" class="option" data-default="true" />
<label for="o_end_of_paragraph" class="opt_lbl largew" data-l10n-id="tf_end_of_paragraph"></label>
</div>
<div class="blockopt underline">
<div id="res_o_between_words" class="result fright"></div>
<input type="checkbox" id="o_between_words" class="option" data-default="true" />
<label for="o_between_words" class="opt_lbl largew" data-l10n-id="tf_between_words"></label>
</div>
<div class="blockopt underline">
<div id="res_o_before_punctuation" class="result fright"></div>
<input type="checkbox" id="o_before_punctuation" class="option" data-default="true" />
<label for="o_before_punctuation" class="opt_lbl largew" data-l10n-id="tf_before_punctuation"></label>
</div>
<div class="blockopt underline">
<div id="res_o_within_parenthesis" class="result fright"></div>
<input type="checkbox" id="o_within_parenthesis" class="option" data-default="true" />
<label for="o_within_parenthesis" class="opt_lbl largew" data-l10n-id="tf_within_parenthesis"></label>
</div>
<div class="blockopt underline">
<div id="res_o_within_square_brackets" class="result fright"></div>
<input type="checkbox" id="o_within_square_brackets" class="option" data-default="true" />
<label for="o_within_square_brackets" class="opt_lbl largew" data-l10n-id="tf_within_square_brackets"></label>
</div>
<div class="blockopt underline">
<div id="res_o_within_quotation_marks" class="result fright"></div>
<input type="checkbox" id="o_within_quotation_marks" class="option" data-default="true" />
<label for="o_within_quotation_marks" class="opt_lbl largew" data-l10n-id="tf_within_quotation_marks"></label>
</div>
</div>
</fieldset>
<!-- Missing spaces -->
<fieldset>
<legend><input type="checkbox" id="o_group_space" class="option" data-default="true" /><label for="o_group_space" data-l10n-id="tf_space"></label></legend>
<div id="group_space" class="groupblock">
<div class="blockopt underline">
<div id="res_o_add_space_after_punctuation" class="result fright"></div>
<input type="checkbox" id="o_add_space_after_punctuation" class="option" data-default="true" />
<label for="o_add_space_after_punctuation" class="opt_lbl reducedw" data-l10n-id="tf_add_space_after_punctuation"></label>
</div>
<div class="blockopt underline">
<div id="res_o_add_space_around_hyphens" class="result fright"></div>
<input type="checkbox" id="o_add_space_around_hyphens" class="option" data-default="true" />
<label for="o_add_space_around_hyphens" class="opt_lbl largew" data-l10n-id="tf_add_space_around_hyphens"></label>
</div>
</div>
</fieldset>
<!-- Non breaking spaces -->
<fieldset>
<legend><input type="checkbox" id="o_group_nbsp" class="option" data-default="true" /><label for="o_group_nbsp" data-l10n-id="tf_nbsp"></label></legend>
<div id="group_nbsp" class="groupblock">
<div class="blockopt underline">
<div id="res_o_nbsp_before_punctuation" class="result fright"></div>
<input type="checkbox" id="o_nbsp_before_punctuation" class="option" data-default="true" />
<label for="o_nbsp_before_punctuation" class="opt_lbl reducedw" data-l10n-id="tf_nbsp_before_punctuation"></label>
<!--<div class="secondoption">
<input type="checkbox" id="o_nnbsp_before_punctuation" class="option" />
<label for="o_nnbsp_before_punctuation" class="opt_lbl smallw">fines<span>sauf avec “:”</span></label>
</div>-->
</div>
<div class="blockopt underline">
<div id="res_o_nbsp_within_quotation_marks" class="result fright"></div>
<input type="checkbox" id="o_nbsp_within_quotation_marks" class="option" data-default="true" />
<label for="o_nbsp_within_quotation_marks" class="opt_lbl reducedw" data-l10n-id="tf_nbsp_within_quotation_marks"></label>
<!--<div class="secondoption">
<input type="checkbox" id="o_nnbsp_within_quotation_marks" class="option" />
<label for="o_nnbsp_within_quotation_marks" class="opt_lbl smallw">fines</label>
</div>-->
</div>
<div class="blockopt underline">
<div id="res_o_nbsp_before_symbol" class="result fright"></div>
<input type="checkbox" id="o_nbsp_before_symbol" class="option" data-default="true" />
<label for="o_nbsp_before_symbol" class="opt_lbl largew" data-l10n-id="tf_nbsp_before_symbol"></label>
</div>
<div class="blockopt underline">
<div id="res_o_nbsp_within_numbers" class="result fright"></div>
<input type="checkbox" id="o_nbsp_within_numbers" class="option" data-default="true" />
<label for="o_nbsp_within_numbers" class="opt_lbl reducedw" data-l10n-id="tf_nbsp_within_numbers"></label>
<!--<div class="secondoption">
<input type="checkbox" id="o_nnbsp_within_numbers" class="option" />
<label for="o_nnbsp_within_numbers" class="opt_lbl smallw">fines</label>
</div>-->
</div>
<div class="blockopt underline">
<div id="res_o_nbsp_before_units" class="result fright"></div>
<input type="checkbox" id="o_nbsp_before_units" class="option" data-default="true" />
<label for="o_nbsp_before_units" class="opt_lbl largew" data-l10n-id="tf_nbsp_before_units"></label>
</div>
</div>
</fieldset>
<!-- Deletions -->
<fieldset>
<legend><input type="checkbox" id="o_group_delete" class="option" data-default="true" /><label for="o_group_delete" data-l10n-id="tf_delete"></label></legend>
<div id="group_delete" class="groupblock">
<div class="blockopt underline">
<div id="res_o_erase_non_breaking_hyphens" class="result fright"></div>
<input type="checkbox" id="o_erase_non_breaking_hyphens" class="option" data-default="true" />
<label for="o_erase_non_breaking_hyphens" class="opt_lbl largew" data-l10n-id="tf_erase_non_breaking_hyphens"></label>
</div>
</div>
</fieldset>
</div>
<div class="column">
<!-- Typographical signs -->
<fieldset>
<legend><input type="checkbox" id="o_group_typo" class="option" data-default="true" /><label for="o_group_typo" data-l10n-id="tf_typo"></label></legend>
<div id="group_typo" class="groupblock">
<div class="blockopt underline">
<div id="res_o_ts_apostrophe" class="result fright"></div>
<input type="checkbox" id="o_ts_apostrophe" class="option" data-default="true" />
<label for="o_ts_apostrophe" class="opt_lbl largew" data-l10n-id="tf_ts_apostrophe"></label>
</div>
<div class="blockopt underline">
<div id="res_o_ts_ellipsis" class="result fright"></div>
<input type="checkbox" id="o_ts_ellipsis" class="option" data-default="true" />
<label for="o_ts_ellipsis" class="opt_lbl largew" data-l10n-id="tf_ts_ellipsis"></label>
</div>
<div class="blockopt underline">
<div id="res_o_ts_dash_middle" class="result fright"></div>
<input type="checkbox" id="o_ts_dash_middle" class="option" data-default="true" />
<label for="o_ts_dash_middle" class="opt_lbl largew" data-l10n-id="tf_ts_dash_middle"></label>
</div>
<div class="blockopt">
<div class="inlineblock indent">
<input type="radio" name="hyphen1" id="o_ts_m_dash_middle" class="option" data-default="false" /><label for="o_ts_m_dash_middle" class="opt_lbl" data-l10n-id="tf_emdash"></label>
</div>
<div class="inlineblock indent">
<input type="radio" name="hyphen1" id="o_ts_n_dash_middle" class="option" data-default="true" /><label for="o_ts_n_dash_middle" class="opt_lbl" data-l10n-id="tf_endash"></label>
</div>
</div>
<div class="blockopt underline">
<div id="res_o_ts_dash_start" class="result fright"></div>
<input type="checkbox" id="o_ts_dash_start" class="option" data-default="true" />
<label for="o_ts_dash_start" class="opt_lbl largew" data-l10n-id="tf_ts_dash_start"></label>
</div>
<div class="blockopt">
<div class="inlineblock indent">
<input type="radio" name="hyphen2" id="o_ts_m_dash_start" class="option" data-default="true" /><label for="o_ts_m_dash_start" class="opt_lbl" data-l10n-id="tf_emdash"></label>
</div>
<div class="inlineblock indent">
<input type="radio" name="hyphen2" id="o_ts_n_dash_start" class="option" data-default="false" /><label for="o_ts_n_dash_start" class="opt_lbl" data-l10n-id="tf_endash"></label>
</div>
</div>
<div class="blockopt underline">
<div id="res_o_ts_quotation_marks" class="result fright"></div>
<input type="checkbox" id="o_ts_quotation_marks" class="option" data-default="true" />
<label for="o_ts_quotation_marks" class="opt_lbl largew" data-l10n-id="tf_ts_quotation_marks"></label>
</div>
<div class="blockopt underline">
<div id="res_o_ts_units" class="result fright"></div>
<input type="checkbox" id="o_ts_units" class="option" data-default="true" />
<label for="o_ts_units" class="opt_lbl largew" data-l10n-id="tf_ts_units"></label>
</div>
<div class="blockopt underline">
<div id="res_o_ts_spell" class="result fright"></div>
<input type="checkbox" id="o_ts_spell" class="option" data-default="true" />
<label for="o_ts_spell" class="opt_lbl largew" data-l10n-id="tf_ts_spell"></label>
</div>
<div class="blockopt underline">
<div id="res_o_ts_ligature" class="result fright"></div>
<div class="inlineblock">
<input type="checkbox" id="o_ts_ligature" class="option" data-default="false" />
<label for="o_ts_ligature" class="opt_lbl" data-l10n-id="tf_ts_ligature"></label>
</div>
<div class="inlineblock indent">
<input type="radio" id="o_ts_ligature_do" name="liga" class="option" data-default="false" />
<label for="o_ts_ligature_do" class="opt_lbl" data-l10n-id="tf_ts_ligature_do"></label>
</div>
<div class="inlineblock indent">
<input type="radio" id="o_ts_ligature_undo" name="liga" class="option" data-default="true" />
<label for="o_ts_ligature_undo" class="opt_lbl" data-l10n-id="tf_ts_ligature_undo"></label>
</div>
</div>
<div class="blockopt">
<div class="inlineblock indent"><input type="checkbox" id="o_ts_ligature_ff" class="option" data-default="true" /><label for="o_ts_ligature_ff" class="opt_lbl">ff</label></div>
<div class="inlineblock"><input type="checkbox" id="o_ts_ligature_fi" class="option" data-default="true" /><label for="o_ts_ligature_fi" class="opt_lbl">fi</label></div>
<div class="inlineblock"><input type="checkbox" id="o_ts_ligature_ffi" class="option" data-default="true" /><label for="o_ts_ligature_ffi" class="opt_lbl">ffi</label></div>
<div class="inlineblock"><input type="checkbox" id="o_ts_ligature_fl" class="option" data-default="true" /><label for="o_ts_ligature_fl" class="opt_lbl">fl</label></div>
<div class="inlineblock"><input type="checkbox" id="o_ts_ligature_ffl" class="option" data-default="true" /><label for="o_ts_ligature_ffl" class="opt_lbl">ffl</label></div>
<div class="inlineblock"><input type="checkbox" id="o_ts_ligature_ft" class="option" data-default="true" /><label for="o_ts_ligature_ft" class="opt_lbl">ft</label></div>
<div class="inlineblock"><input type="checkbox" id="o_ts_ligature_st" class="option" data-default="false" /><label for="o_ts_ligature_st" class="opt_lbl">st</label></div>
</div>
</div>
</fieldset>
<!-- Misc -->
<fieldset>
<legend><input type="checkbox" id="o_group_misc" class="option" data-default="true" /><label for="o_group_misc" data-l10n-id="tf_misc"></label></legend>
<div id="group_misc" class="groupblock">
<div class="blockopt underline">
<div id="res_o_ordinals_no_exponant" class="result fright"></div>
<input type="checkbox" id="o_ordinals_no_exponant" class="option" data-default="true" />
<label for="o_ordinals_no_exponant" class="opt_lbl reducedw" data-l10n-id="tf_ordinals_no_exponant"></label>
<div class="secondoption">
<input type="checkbox" id="o_ordinals_exponant" class="option" data-default="true" />
<label for="o_ordinals_exponant" class="opt_lbl smallw" data-l10n-id="tf_ordinals_exponant"></label>
</div>
</div>
<div class="blockopt underline">
<div id="res_o_etc" class="result fright"></div>
<input type="checkbox" id="o_etc" class="option" data-default="true" />
<label for="o_etc" class="opt_lbl largew" data-l10n-id="tf_etc"></label>
</div>
<div class="blockopt underline">
<div id="res_o_missing_hyphens" class="result fright"></div>
<input type="checkbox" id="o_missing_hyphens" class="option" data-default="true" />
<label for="o_missing_hyphens" class="opt_lbl largew" data-l10n-id="tf_missing_hyphens"></label>
</div>
<div class="blockopt underline">
<div id="res_o_ma_word" class="result fright"></div>
<input type="checkbox" id="o_ma_word" class="option" data-default="true" />
<label for="o_ma_word" class="opt_lbl largew" data-l10n-id="tf_ma_word"></label>
</div>
<div class="blockopt">
<div class="inlineblock indent">
<input type="checkbox" id="o_ma_1letter_lowercase" class="option" />
<label for="o_ma_1letter_lowercase" class="opt_lbl" data-l10n-id="tf_ma_1letter_lowercase"></label>
</div>
<div class="inlineblock indent">
<input type="checkbox" id="o_ma_1letter_uppercase" class="option" />
<label for="o_ma_1letter_uppercase" class="opt_lbl" data-l10n-id="tf_ma_1letter_uppercase"></label>
</div>
</div>
</div>
</fieldset>
<!-- Restructuration -->
<fieldset>
<legend><input type="checkbox" id="o_group_struct" class="option" data-default="false" /><label for="o_group_struct" data-l10n-id="tf_struct"></label></legend>
<div id="group_struct" class="groupblock">
<div class="blockopt underline">
<div id="res_o_remove_hyphens_at_end_of_paragraphs" class="result fright"></div>
<input type="checkbox" id="o_remove_hyphens_at_end_of_paragraphs" class="option" data-default="false" />
<label for="o_remove_hyphens_at_end_of_paragraphs" class="opt_lbl largew" data-l10n-id="tf_remove_hyphens_at_end_of_paragraphs"></label>
</div>
<div class="blockopt underline">
<div id="res_o_merge_contiguous_paragraphs" class="result fright"></div>
<input type="checkbox" id="o_merge_contiguous_paragraphs" class="option" data-default="false" />
<label for="o_merge_contiguous_paragraphs" class="opt_lbl largew" data-l10n-id="tf_merge_contiguous_paragraphs"></label>
</div>
</div>
</fieldset>
</div>
</div>
<div id="actions">
<div id="reset" class="button blue" data-l10n-id="tf_default"></div>
<div id="apply" class="button green fright" data-l10n-id="tf_apply"></div>
<div id="progressbarbox"><progress id="progressbar" style="width: 400px;"></progress> <span id="time_res"></span></div>
<!--<div class="clearer"></div>
<div id="infomsg" data-l10n-id="tf_infomsg"></div>-->
</div>
</body>
</html>
|
Added gc_lang/fr/xpi/data/tf_panel.js version [870535c123].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 |
// JavaScript
/*
Events
*/
self.port.on("receiveTextToFormat", function (sText) {
self.port.emit("applyFormattedText", applyOptions(sText));
});
self.port.on("start", function (sTFOptions) {
self.port.emit("setHeight", document.getElementById("actions").offsetTop + document.getElementById("actions").offsetHeight);
if (sTFOptions !== "") {
setOptionsInPanel(JSON.parse(sTFOptions));
} else {
reset();
}
resetProgressBar();
document.getElementById('apply').focus();
});
document.getElementById('close').addEventListener("click", function (event) {
self.port.emit('closePanel');
});
document.getElementById('reset').addEventListener("click", function (event) {
reset();
});
document.getElementById('apply').addEventListener("click", function (event) {
saveOptions();
self.port.emit("getTextToFormat");
});
window.addEventListener("click", function (xEvent) {
let xElem = xEvent.target;
if (xElem.id) {
if (xElem.id.startsWith("resize")) {
self.port.emit("resize", xElem.id, 10);
} else if (xElem.id.startsWith("o_group_")) {
switchGroup(xElem.id);
resetProgressBar();
}
}
}, false);
/*
Actions
*/
function switchGroup (sOptName) {
if (document.getElementById(sOptName).checked) {
document.getElementById(sOptName.slice(2)).style.opacity = 1;
} else {
document.getElementById(sOptName.slice(2)).style.opacity = 0.3;
}
}
function reset () {
resetProgressBar();
for (let xNode of document.getElementsByClassName("option")) {
xNode.checked = (xNode.dataset.default === "true");
if (xNode.id.startsWith("o_group_")) {
switchGroup(xNode.id);
}
}
}
function resetProgressBar () {
document.getElementById('progressbar').value = 0;
document.getElementById('time_res').textContent = "";
}
function setOptionsInPanel (oOptions) {
for (let sOptName in oOptions) {
//console.log(sOptName + ":" + oOptions[sOptName]);
if (document.getElementById(sOptName) !== null) {
document.getElementById(sOptName).checked = oOptions[sOptName];
if (sOptName.startsWith("o_group_")) {
switchGroup(sOptName);
}
if (document.getElementById("res_"+sOptName) !== null) {
document.getElementById("res_"+sOptName).textContent = "";
}
}
}
}
function saveOptions () {
let oOptions = {};
for (let xNode of document.getElementsByClassName("option")) {
oOptions[xNode.id] = xNode.checked;
}
self.port.emit("saveOptions", JSON.stringify(oOptions));
}
function applyOptions (sText) {
try {
const t0 = Date.now();
//window.setCursor("wait"); // change pointer
resetProgressBar();
document.getElementById('progressbar').max = 7;
let n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0;
// Restructuration
if (document.getElementById("o_group_struct").checked) {
if (document.getElementById("o_remove_hyphens_at_end_of_paragraphs").checked) {
[sText, n1] = removeHyphenAtEndOfParagraphs(sText);
document.getElementById('res_o_remove_hyphens_at_end_of_paragraphs').textContent = n1;
}
if (document.getElementById("o_merge_contiguous_paragraphs").checked) {
[sText, n1] = mergeContiguousParagraphs(sText);
document.getElementById('res_o_merge_contiguous_paragraphs').textContent = n1;
}
document.getElementById("o_group_struct").checked = false;
switchGroup("o_group_struct");
}
document.getElementById('progressbar').value = 1;
// espaces surnuméraires
if (document.getElementById("o_group_ssp").checked) {
if (document.getElementById("o_end_of_paragraph").checked) {
[sText, n1] = formatText(sText, "end_of_paragraph");
document.getElementById('res_o_end_of_paragraph').textContent = n1;
}
if (document.getElementById("o_between_words").checked) {
[sText, n1] = formatText(sText, "between_words");
document.getElementById('res_o_between_words').textContent = n1;
}
if (document.getElementById("o_start_of_paragraph").checked) {
[sText, n1] = formatText(sText, "start_of_paragraph");
document.getElementById('res_o_start_of_paragraph').textContent = n1;
}
if (document.getElementById("o_before_punctuation").checked) {
[sText, n1] = formatText(sText, "before_punctuation");
document.getElementById('res_o_before_punctuation').textContent = n1;
}
if (document.getElementById("o_within_parenthesis").checked) {
[sText, n1] = formatText(sText, "within_parenthesis");
document.getElementById('res_o_within_parenthesis').textContent = n1;
}
if (document.getElementById("o_within_square_brackets").checked) {
[sText, n1] = formatText(sText, "within_square_brackets");
document.getElementById('res_o_within_square_brackets').textContent = n1;
}
if (document.getElementById("o_within_quotation_marks").checked) {
[sText, n1] = formatText(sText, "within_quotation_marks");
document.getElementById('res_o_within_quotation_marks').textContent = n1;
}
document.getElementById("o_group_ssp").checked = false;
switchGroup("o_group_ssp");
}
document.getElementById('progressbar').value = 2;
// espaces typographiques
if (document.getElementById("o_group_nbsp").checked) {
if (document.getElementById("o_nbsp_before_punctuation").checked) {
[sText, n1] = formatText(sText, "nbsp_before_punctuation");
[sText, n2] = formatText(sText, "nbsp_repair");
document.getElementById('res_o_nbsp_before_punctuation').textContent = n1 - n2;
}
if (document.getElementById("o_nbsp_within_quotation_marks").checked) {
[sText, n1] = formatText(sText, "nbsp_within_quotation_marks");
document.getElementById('res_o_nbsp_within_quotation_marks').textContent = n1;
}
if (document.getElementById("o_nbsp_before_symbol").checked) {
[sText, n1] = formatText(sText, "nbsp_before_symbol");
document.getElementById('res_o_nbsp_before_symbol').textContent = n1;
}
if (document.getElementById("o_nbsp_within_numbers").checked) {
[sText, n1] = formatText(sText, "nbsp_within_numbers");
document.getElementById('res_o_nbsp_within_numbers').textContent = n1;
}
if (document.getElementById("o_nbsp_before_units").checked) {
[sText, n1] = formatText(sText, "nbsp_before_units");
document.getElementById('res_o_nbsp_before_units').textContent = n1;
}
document.getElementById("o_group_nbsp").checked = false;
switchGroup("o_group_nbsp");
}
document.getElementById('progressbar').value = 3;
// espaces manquants
if (document.getElementById("o_group_typo").checked) {
if (document.getElementById("o_ts_units").checked) {
[sText, n1] = formatText(sText, "ts_units");
document.getElementById('res_o_ts_units').textContent = n1;
}
}
if (document.getElementById("o_group_space").checked) {
if (document.getElementById("o_add_space_after_punctuation").checked) {
[sText, n1] = formatText(sText, "add_space_after_punctuation");
[sText, n2] = formatText(sText, "add_space_repair");
document.getElementById('res_o_add_space_after_punctuation').textContent = n1 - n2;
}
if (document.getElementById("o_add_space_around_hyphens").checked) {
[sText, n1] = formatText(sText, "add_space_around_hyphens");
document.getElementById('res_o_add_space_around_hyphens').textContent = n1;
}
document.getElementById("o_group_space").checked = false;
switchGroup("o_group_space");
}
document.getElementById('progressbar').value = 4;
// suppression
if (document.getElementById("o_group_delete").checked) {
if (document.getElementById("o_erase_non_breaking_hyphens").checked) {
[sText, n1] = formatText(sText, "erase_non_breaking_hyphens");
document.getElementById('res_o_erase_non_breaking_hyphens').textContent = n1;
}
document.getElementById("o_group_delete").checked = false;
switchGroup("o_group_delete");
}
document.getElementById('progressbar').value = 5;
// signes typographiques
if (document.getElementById("o_group_typo").checked) {
if (document.getElementById("o_ts_apostrophe").checked) {
[sText, n1] = formatText(sText, "ts_apostrophe");
document.getElementById('res_o_ts_apostrophe').textContent = n1;
}
if (document.getElementById("o_ts_ellipsis").checked) {
[sText, n1] = formatText(sText, "ts_ellipsis");
document.getElementById('res_o_ts_ellipsis').textContent = n1;
}
if (document.getElementById("o_ts_dash_start").checked) {
if (document.getElementById("o_ts_m_dash_start").checked) {
[sText, n1] = formatText(sText, "ts_m_dash_start");
} else {
[sText, n1] = formatText(sText, "ts_n_dash_start");
}
document.getElementById('res_o_ts_dash_start').textContent = n1;
}
if (document.getElementById("o_ts_dash_middle").checked) {
if (document.getElementById("o_ts_m_dash_middle").checked) {
[sText, n1] = formatText(sText, "ts_m_dash_middle");
} else {
[sText, n1] = formatText(sText, "ts_n_dash_middle");
}
document.getElementById('res_o_ts_dash_middle').textContent = n1;
}
if (document.getElementById("o_ts_quotation_marks").checked) {
[sText, n1] = formatText(sText, "ts_quotation_marks");
document.getElementById('res_o_ts_quotation_marks').textContent = n1;
}
if (document.getElementById("o_ts_spell").checked) {
[sText, n1] = formatText(sText, "ts_spell");
document.getElementById('res_o_ts_spell').textContent = n1;
}
if (document.getElementById("o_ts_ligature").checked) {
// ligatures typographiques : fi, fl, ff, ffi, ffl, ft, st
if (document.getElementById("o_ts_ligature_do").checked) {
if (document.getElementById("o_ts_ligature_ffi").checked) {
[sText, n1] = formatText(sText, "ts_ligature_ffi_do");
}
if (document.getElementById("o_ts_ligature_ffl").checked) {
[sText, n2] = formatText(sText, "ts_ligature_ffl_do");
}
if (document.getElementById("o_ts_ligature_fi").checked) {
[sText, n3] = formatText(sText, "ts_ligature_fi_do");
}
if (document.getElementById("o_ts_ligature_fl").checked) {
[sText, n4] = formatText(sText, "ts_ligature_fl_do");
}
if (document.getElementById("o_ts_ligature_ff").checked) {
[sText, n5] = formatText(sText, "ts_ligature_ff_do");
}
if (document.getElementById("o_ts_ligature_ft").checked) {
[sText, n6] = formatText(sText, "ts_ligature_ft_do");
}
if (document.getElementById("o_ts_ligature_st").checked) {
[sText, n7] = formatText(sText, "ts_ligature_st_do");
}
}
if (document.getElementById("o_ts_ligature_undo").checked) {
if (document.getElementById("o_ts_ligature_ffi").checked) {
[sText, n1] = formatText(sText, "ts_ligature_ffi_undo");
}
if (document.getElementById("o_ts_ligature_ffl").checked) {
[sText, n2] = formatText(sText, "ts_ligature_ffl_undo");
}
if (document.getElementById("o_ts_ligature_fi").checked) {
[sText, n3] = formatText(sText, "ts_ligature_fi_undo");
}
if (document.getElementById("o_ts_ligature_fl").checked) {
[sText, n4] = formatText(sText, "ts_ligature_fl_undo");
}
if (document.getElementById("o_ts_ligature_ff").checked) {
[sText, n5] = formatText(sText, "ts_ligature_ff_undo");
}
if (document.getElementById("o_ts_ligature_ft").checked) {
[sText, n6] = formatText(sText, "ts_ligature_ft_undo");
}
if (document.getElementById("o_ts_ligature_st").checked) {
[sText, n7] = formatText(sText, "ts_ligature_st_undo");
}
}
document.getElementById('res_o_ts_ligature').textContent = n1 + n2 + n3 + n4 + n5 + n6 + n7;
}
document.getElementById("o_group_typo").checked = false;
switchGroup("o_group_typo");
}
document.getElementById('progressbar').value = 6;
// divers
if (document.getElementById("o_group_misc").checked) {
if (document.getElementById("o_ordinals_no_exponant").checked) {
if (document.getElementById("o_ordinals_exponant").checked) {
[sText, n1] = formatText(sText, "ordinals_exponant");
} else {
[sText, n1] = formatText(sText, "ordinals_no_exponant");
}
document.getElementById('res_o_ordinals_no_exponant').textContent = n1;
}
if (document.getElementById("o_etc").checked) {
[sText, n1] = formatText(sText, "etc");
document.getElementById('res_o_etc').textContent = n1;
}
if (document.getElementById("o_missing_hyphens").checked) {
[sText, n1] = formatText(sText, "missing_hyphens");
document.getElementById('res_o_missing_hyphens').textContent = n1;
}
if (document.getElementById("o_ma_word").checked) {
[sText, n1] = formatText(sText, "ma_word");
if (document.getElementById("o_ma_1letter_lowercase").checked) {
[sText, n1] = formatText(sText, "ma_1letter_lowercase");
if (document.getElementById("o_ma_1letter_uppercase").checked) {
[sText, n1] = formatText(sText, "ma_1letter_uppercase");
}
}
document.getElementById('res_o_ma_word').textContent = n1;
}
document.getElementById("o_group_misc").checked = false;
switchGroup("o_group_misc");
}
document.getElementById('progressbar').value = document.getElementById('progressbar').max;
// end of processing
//window.setCursor("auto"); // restore pointer
const t1 = Date.now();
document.getElementById('time_res').textContent = this.getTimeRes((t1-t0)/1000);
}
catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
return sText;
}
function formatText (sText, sOptName) {
let nCount = 0;
try {
if (!oReplTable.hasOwnProperty(sOptName)) {
console.log("# Error. TF: there is no option “" + sOptName+ "”.");
return [sText, nCount];
}
for (let [zRgx, sRep] of oReplTable[sOptName]) {
nCount += (sText.match(zRgx) || []).length;
sText = sText.replace(zRgx, sRep);
}
document.getElementById('progressbar').value += 1;
}
catch (e) {
console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
return [sText, nCount];
};
function removeHyphenAtEndOfParagraphs (sText) {
let nCount = (sText.match(/-[ ]*\n/gm) || []).length;
sText = sText.replace(/-[ ]*\n/gm, "");
/*
sText = sText.replace(/-[ ]+$/gm, "-"); // remove spaces at end of paragraphs if - is the last character
let m = null;
let zRegExp = /([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)-\n([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)/g;
while ((m = zRegExp.exec(sText)) !== null) {
console.log("+");
sText = sText.slice(0, m.index) + m[1] + m[2] + sText.slice(RegExp.lastIndex);
}*/
return [sText, nCount];
}
function mergeContiguousParagraphs (sText) {
let nCount = 0;
sText = sText.replace(/^[ ]+$/gm, ""); // clear empty paragraphs
let s = "";
for (let sParagraph of getParagraph(sText)) {
if (sParagraph === "") {
s += "\n";
} else {
s += sParagraph + " ";
nCount += 1;
}
}
s = s.replace(/ +/g, " ").replace(/ $/gm, "");
return [s, nCount];
}
function* getParagraph (sText) {
// generator: returns paragraphs of text
let iStart = 0;
let iEnd = 0;
while ((iEnd = sText.indexOf("\n", iStart)) !== -1) {
yield sText.slice(iStart, iEnd);
iStart = iEnd + 1;
}
yield sText.slice(iStart);
}
function getTimeRes (n) {
// returns duration in seconds as string
if (n < 10) {
return n.toFixed(3).toString() + " s";
}
if (n < 100) {
return n.toFixed(2).toString() + " s";
}
if (n < 1000) {
return n.toFixed(1).toString() + " s";
}
return n.toFixed().toString() + " s";
}
|
Added gc_lang/fr/xpi/gce_worker.js version [779e66492e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
// JavaScript
// Grammar checker engine
// PromiseWorker
// This code is executed in a separate thread (×20 faster too!!!)
// Firefox WTF: it’s impossible to use require as in the main thread here,
// so it is required to declare a resource in the file “chrome.manifest”.
"use strict";
// copy/paste
// https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/PromiseWorker.jsm
importScripts("resource://gre/modules/workers/require.js");
let PromiseWorker = require("resource://gre/modules/workers/PromiseWorker.js");
// Instantiate AbstractWorker (see below).
let worker = new PromiseWorker.AbstractWorker();
worker.dispatch = function(method, args = []) {
// Dispatch a call to method `method` with args `args`
return self[method](...args);
};
worker.postMessage = function(...args) {
// Post a message to the main thread
self.postMessage(...args);
};
worker.close = function() {
// Close the worker
self.close();
};
worker.log = function(...args) {
// Log (or discard) messages (optional)
dump("Worker: " + args.join(" ") + "\n");
};
// Connect it to message port.
self.addEventListener("message", msg => worker.handleMessage(msg));
// end of copy/paste
// no console here, use “dump”
let gce = null; // module: grammar checker engine
let text = null;
let tkz = null; // module: tokenizer
let lxg = null; // module: lexicographer
let helpers = null;
let oTokenizer = null;
let oDict = null;
let oLxg = null;
function loadGrammarChecker (sGCOptions="") {
if (gce === null) {
gce = require("resource://grammalecte/fr/gc_engine.js");
helpers = require("resource://grammalecte/helpers.js");
text = require("resource://grammalecte/text.js");
tkz = require("resource://grammalecte/tokenizer.js");
lxg = require("resource://grammalecte/fr/lexicographe.js");
oTokenizer = new tkz.Tokenizer("fr");
helpers.setLogOutput(worker.log);
gce.load();
oDict = gce.getDictionary();
oLxg = new lxg.Lexicographe(oDict);
if (sGCOptions !== "") {
gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions)));
}
// we always retrieve options from the gce, for setOptions filters obsolete options
return gce.getOptions()._toString();
}
}
function parse (sText, sLang, bDebug, bContext) {
let aGrammErr = gce.parse(sText, sLang, bDebug, bContext);
return JSON.stringify(aGrammErr);
}
function parseAndSpellcheck (sText, sLang, bDebug, bContext) {
let aGrammErr = gce.parse(sText, sLang, bDebug, bContext);
let aSpellErr = [];
for (let oToken of oTokenizer.genTokens(sText)) {
if (oToken.sType === 'WORD' && !oDict.isValidToken(oToken.sValue)) {
aSpellErr.push(oToken);
}
}
return JSON.stringify({ aGrammErr: aGrammErr, aSpellErr: aSpellErr });
}
function parseAndTag (sText, iParagraph, sLang, bDebug) {
sText = text.addHtmlEntities(sText);
let aSpellErr = [];
for (let oToken of oTokenizer.genTokens(sText)) {
if (oToken.sType === 'WORD' && !oDict.isValidToken(oToken.sValue)) {
aSpellErr.push(oToken);
}
}
let aGrammErr = gce.parse(sText, sLang, bDebug);
let sHtml = text.tagParagraph(sText, iParagraph, aGrammErr, aSpellErr);
return sHtml;
}
function parseAndGenerateParagraph (sText, iParagraph, sLang, bDebug) {
return text.createHTMLBlock(parseAndTag(sText, iParagraph, sLang, bDebug), iParagraph);
}
function getOptions () {
return gce.getOptions()._toString();
}
function getDefaultOptions () {
return gce.getDefaultOptions()._toString();
}
function setOptions (sGCOptions) {
gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions)));
return gce.getOptions()._toString();
}
function setOption (sOptName, bValue) {
gce.setOptions(new Map([ [sOptName, bValue] ]));
return gce.getOptions()._toString();
}
function resetOptions () {
gce.resetOptions();
return gce.getOptions()._toString();
}
function fullTests (sGCOptions="") {
if (!gce || !oDict) {
return "# Error: grammar checker or dictionary not loaded."
}
let dMemoOptions = gce.getOptions();
if (sGCOptions) {
gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions)));
}
let tests = require("resource://grammalecte/tests.js");
let oTest = new tests.TestGrammarChecking(gce);
let sAllRes = "";
for (let sRes of oTest.testParse()) {
dump(sRes+"\n");
sAllRes += sRes+"<br/>";
}
gce.setOptions(dMemoOptions);
return sAllRes;
}
// Lexicographer
function analyzeWords (sText) {
return oLxg.analyzeText(sText);
}
|
Added gc_lang/fr/xpi/locale/en.properties version [d81be224ab].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
mainTitle = Grammalecte [fr]
subTitle = Grammar checker for the French language
noErrorFound = No error detected.
paragraphsParsed = Paragraphs parsed:
numberOfParagraphs = Number of Paragraphs:
numberOfWords = Number of words:
error = Oops, an error has occurred. :(
checkText = French grammar checking
buttonTooltip = Grammalecte · French grammar checker
lexicographer = Lexicographer
textFormatter = Text Formatter
website = Web site
conjugueur = Conjugation
general_info = License: GPL 3
useContextMenu = Use the context menu to launch the grammar checker (right click on a text area or on the selected text).
thanks1 = Grammalecte thanks
thanks2 = and all those who supported us…
separator = New text area
testzone = Test Zone
parse = Parse
testall = Parse all
edit_error = Edit error. The proofreader has detected an edition error. The original text hasn’t been modified.
shortcuts = SHORTCUTS
keyTF = CTRL+SHIFT+F6 (on text area)
keyGC = CTRL+SHIFT+F7 (on text area)
keyCJ = CTRL+SHIFT+F8
keyLabelTF = Text Formatter
keyLabelGC = Grammar checking
keyLabelCJ = Conjugation tool
tf_title = Text Formatter
tf_ssp = Supernumerary spaces
tf_start_of_paragraph = At the beginning of paragraph
tf_between_words = Between words
tf_end_of_paragraph = At the end of paragraph
tf_before_punctuation = Before dots (.), commas (,)
tf_within_parenthesis = Within parenthesis
tf_within_square_brackets = Within square brackets
tf_within_quotation_marks = Within “ and ”
tf_space = Missing spaces
tf_add_space_after_punctuation = After , ; : ? ! . …
tf_add_space_around_hyphens = Surrounding dashes
tf_nbsp = Non breaking spaces
tf_nbsp_before_punctuation = Before : ; ? and !
tf_nbsp_within_quotation_marks = With quoting marks « and »
tf_nbsp_before_symbol = Before % ‰ € $ £ ¥ ˚C
tf_nbsp_within_numbers = Within numbers
tf_nbsp_before_units = Before units of measurement
tf_delete = Deletions
tf_erase_non_breaking_hyphens = Soft hyphens
tf_typo = Typographical signs
tf_ts_apostrophe = Apostrophe (’)
tf_ts_ellipsis = Ellipsis (…)
tf_ts_dash_middle = Dashes:
tf_ts_dash_start = Dashes at beginning of paragraph:
tf_emdash = em dash (—)
tf_endash = en dash (–)
tf_ts_quotation_marks = Change quotation marks (" and ')
tf_ts_units = Interpuncts in units (N·m, Ω·m…)
tf_ts_spell = Ligatures (cœur…) and diacritics (ça, État…)
tf_ts_ligature = Ligatures
tf_ts_ligature_do = Set
tf_ts_ligature_undo = Unset
tf_misc = Miscellaneous
tf_ordinals_no_exponant = Ordinals (15e, XXIe…)
tf_ordinals_exponant = e → ᵉ
tf_etc = Et cætera, etc.
tf_missing_hyphens = Missing hyphens
tf_ma_word = Missing apostrophes
tf_ma_1letter_lowercase = single letters (j’ n’ m’ t’ s’ c’ d’ l’)
tf_ma_1letter_uppercase = Cap.
tf_struct = Restructuration [!]
tf_remove_hyphens_at_end_of_paragraphs = Remove syllabification hyphens at EOL/EOP
tf_merge_contiguous_paragraphs = Merge contiguous paragraphs [!]
tf_apply = Apply
tf_default = Default
tf_infomsg = The text formatter is a tool which automates correction of typographical errors. Use this tool with caution. Check your text after use.
options = Options
grammar_options = Grammar options
spelling_options = Spelling options
spelling = Spelling
grammar = Grammar
dictionaries_info = Select dictionaries you want to see in textareas list. Selected dictionaries are added instantly. Whereas unselected dictionnaries will be removed only at Firefox’s restart.
dict_classic = “Classic” (recommended)
dict_classic_descr = This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language.
dict_modern = “Modern”
dict_modern_descr = This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word.
dict_reform = “Reform 1990”
dict_reform_descr = With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erroneous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary.
dict_classic_reform = “All variants”
dict_classic_reform_descr = This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who don’t know very well the French language.
default_options = Reset options
${en}
|
Added gc_lang/fr/xpi/locale/fr.properties version [a1dfa8a988].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
mainTitle = Grammalecte [fr]
subTitle = Correcteur grammatical pour la langue française
noErrorFound = Aucune erreur détectée.
paragraphsParsed = Paragraphes analysés :
numberOfParagraphs = Nombre de paragraphes :
numberOfWords = Nombre de mots :
error = Oups, une erreur s’est produite. :(
checkText = Correction grammaticale [fr]
buttonTooltip = Grammalecte · Correcteur grammatical
lexicographer = Lexicographe
textFormatter = Formateur de texte
website = Site web
conjugueur = Conjugueur
general_info = Licence : GPL 3
useContextMenu = Utilisez le menu contextuel pour lancer le correcteur (clic droit sur une zone de texte ou un texte sélectionné).
thanks1 = Grammalecte remercie
thanks2 = et tous ceux qui l’ont soutenu…
separator = Nouvelle section de texte
testzone = Zone de test
parse = Analyser
testall = Tout tester
edit_error = Erreur d’édition. Le correcteur a repéré une erreur d’édition. Le texte originel n’a pas été modifié.
shortcuts = RACCOURCIS
keyTF = CTRL+MAJ+F6 (sur zone de texte)
keyGC = CTRL+MAJ+F7 (sur zone de texte)
keyCJ = CTRL+MAJ+F8
keyLabelTF = Formateur de texte
keyLabelGC = Correction grammaticale
keyLabelCJ = Conjugueur
tf_title = Formateur de texte
tf_ssp = Espaces surnuméraires
tf_start_of_paragraph = En début de paragraphe
tf_between_words = Entre les mots
tf_end_of_paragraph = En fin de paragraphe
tf_before_punctuation = Avant les points (.), les virgules (,)
tf_within_parenthesis = À l’intérieur des parenthèses
tf_within_square_brackets = À l’intérieur des crochets
tf_within_quotation_marks = À l’intérieur des guillemets “ et ”
tf_space = Espaces manquants
tf_add_space_after_punctuation = Après , ; : ? ! . …
tf_add_space_around_hyphens = Autour des tirets d’incise
tf_nbsp = Espaces insécables
tf_nbsp_before_punctuation = Avant : ; ? et !
tf_nbsp_within_quotation_marks = Avec les guillemets « et »
tf_nbsp_before_symbol = Avant % ‰ € $ £ ¥ ˚C
tf_nbsp_within_numbers = À l’intérieur des nombres
tf_nbsp_before_units = Avant les unités de mesure
tf_delete = Suppressions
tf_erase_non_breaking_hyphens = Tirets conditionnels
tf_typo = Signes typographiques
tf_ts_apostrophe = Apostrophe (’)
tf_ts_ellipsis = Points de suspension (…)
tf_ts_dash_middle = Tirets d’incise :
tf_ts_dash_start = Tirets en début de paragraphe :
tf_emdash = cadratin (—)
tf_endash = demi-cadratin (–)
tf_ts_quotation_marks = Modifier les guillemets droits (" et ')
tf_ts_units = Points médians des unités (N·m, Ω·m…)
tf_ts_spell = Ligatures (cœur…) et diacritiques (ça, État…)
tf_ts_ligature = Ligatures
tf_ts_ligature_do = Faire
tf_ts_ligature_undo = Défaire
tf_misc = Divers
tf_ordinals_no_exponant = Ordinaux (15e, XXIe…)
tf_ordinals_exponant = e → ᵉ
tf_etc = Et cætera, etc.
tf_missing_hyphens = Traits d’union manquants
tf_ma_word = Apostrophes manquantes
tf_ma_1letter_lowercase = lettres isolées (j’ n’ m’ t’ s’ c’ d’ l’)
tf_ma_1letter_uppercase = Maj.
tf_struct = Restructuration [!]
tf_remove_hyphens_at_end_of_paragraphs = Enlever césures en fin de ligne/paragraphe [!]
tf_merge_contiguous_paragraphs = Fusionner les paragraphes contigus [!]
tf_apply = Appliquer
tf_default = Par défaut
tf_infomsg = Le formateur de texte est un outil qui automatise la correction d’erreurs typographiques. Utilisez l’outil avec prudence. Vérifiez votre texte après emploi.
options = Options
grammar_options = Options grammaticales
spelling_options = Options orthographiques
spelling = Orthographe
grammar = Grammaire
dictionaries_info = Cochez les dictionnaires que vous voulez voir apparaître dans la liste des zones de texte. L’ajout des dictionnaires se fait instantanément. En revanche, les dictionnaires ôtés ne disparaîtront qu’au redémarrage de Firefox.
dict_classic = “Classique” (recommandé)
dict_classic_descr = Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle.
dict_modern = “Moderne”
dict_modern_descr = Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot.
dict_reform = “Réforme 1990”
dict_reform_descr = Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”.
dict_classic_reform = “Toutes variantes”
dict_classic_reform_descr = Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française.
default_options = Options par défaut
${fr}
|
Added gc_lang/fr/xpi/package.json version [c0e1ab12d6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
{
"name": "grammalecte-fr",
"title": "Grammalecte [fr]",
"id": "French-GC@grammalecte.net",
"version": "0.5.16",
"description": "Correcteur grammatical pour le français",
"homepage": "http://www.dicollecte.org/grammalecte",
"main": "ui.js",
"icon": "data/img/icon-48.png",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Olivier R.",
"license": "GPL-3.0 (http://www.gnu.org/licenses/gpl-3.0.html)",
"engines": {
"firefox": ">=45.0"
},
"unpack": true,
"permissions": {
"multiprocess": true,
"private-browsing": true
},
"preferences": [
{
"name": "sDictSuggestLocale",
"title": "*",
"hidden": true,
"type": "string",
"value": "fr-FR-classic"
},
{
"name": "bDictModern",
"title": "*",
"hidden": true,
"type": "bool",
"value": false
},
{
"name": "bDictClassic",
"title": "*",
"hidden": true,
"type": "bool",
"value": true
},
{
"name": "bDictReform",
"title": "*",
"hidden": true,
"type": "bool",
"value": false
},
{
"name": "bDictClassicReform",
"title": "*",
"hidden": true,
"type": "bool",
"value": false
},
{
"name": "nGCPanelWidth",
"title": "*",
"hidden": true,
"type": "integer",
"value": 520
},
{
"name": "nGCPanelHeight",
"title": "*",
"hidden": true,
"type": "integer",
"value": 600
},
{
"name": "nLxgPanelWidth",
"title": "*",
"hidden": true,
"type": "integer",
"value": 520
},
{
"name": "nLxgPanelHeight",
"title": "*",
"hidden": true,
"type": "integer",
"value": 500
},
{
"name": "sGCOptions",
"title": "*",
"hidden": true,
"type": "string",
"value": ""
},
{
"name": "sTFOptions",
"title": "*",
"hidden": true,
"type": "string",
"value": ""
}
]
}
|
Added gc_lang/fr/xpi/spellchecker.js version [c120dbdcc5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
/*
Hunspell wrapper
XPCOM obsolete (?), but there is nothing else...
Overly complicated and weird. To throw away ASAP if possible.
And you can’t access to this from a PromiseWorker (it sucks).
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozISpellCheckingEngine
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Using_spell_checking_in_XUL
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile
https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm
*/
"use strict";
const {Cc, Ci, Cu} = require("chrome");
const FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils;
const AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm").AddonManager;
/*
const parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
const persodict = Cc["@mozilla.org/spellchecker/personaldictionary;1"].getService(Ci.mozIPersonalDictionary);
*/
const system = require("sdk/system");
const helpers = require("resource://grammalecte/helpers.js");
let xSCEngine = null;
function initSpellChecker () {
if (xSCEngine === null) {
try {
let sSpellchecker = "@mozilla.org/spellchecker/myspell;1";
if ("@mozilla.org/spellchecker/hunspell;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/hunspell;1";
}
if ("@mozilla.org/spellchecker/engine;1" in Cc) {
sSpellchecker = "@mozilla.org/spellchecker/engine;1";
}
xSCEngine = Cc[sSpellchecker].getService(Ci.mozISpellCheckingEngine);
}
catch (e) {
console.error("Can’t initiate the spellchecker.");
helpers.logerror(e);
}
}
}
function getDictionariesList () {
initSpellChecker();
try {
let l = {};
let c = {};
xSCEngine.getDictionaryList(l, c);
return l.value;
}
catch (e) {
helpers.logerror(e);
return [];
}
}
function setDictionary (sLocale) {
if (getDictionariesList().includes(sLocale)) {
try {
xSCEngine.dictionary = sLocale; // en-US, fr, etc.
return true;
}
catch (e) {
helpers.logerror(e);
return false;
}
} else {
console.error("Warning. No dictionary for locale: " + sLocale);
console.error("Existing dictionaries: " + getDictionariesList().join(" | "));
}
return false;
}
function check (sWord) {
// todo: check in personal dict?
try {
return xSCEngine.check(sWord);
}
catch (e) {
helpers.logerror(e);
return false;
}
}
function suggest (sWord) {
try {
let lSugg = {};
xSCEngine.suggest(sWord, lSugg, {});
return lSugg.value;
// lSugg.value is a JavaScript Array of strings
}
catch (e) {
helpers.logerror(e);
return ['#Erreur.'];
}
}
function addDirectory (sFolder) {
try {
let xNsiFolder = new FileUtils.File(sFolder);
xSCEngine.addDirectory(xNsiFolder);
}
catch (e) {
console.error("Unable to add directory: " + sFolder);
helpers.logerror(e);
}
}
function removeDirectory (sFolder) {
// does not work but no exception raised (bug?)
try {
let xNsiFolder = new FileUtils.File(sFolder);
xSCEngine.removeDirectory(xNsiFolder);
}
catch (e) {
console.error("Unable to remove directory: " + sFolder);
helpers.logerror(e);
}
}
function setExtensionDictFolder (sDictName, bActivate) {
try {
let sPath = "/data/dictionaries/" + sDictName;
AddonManager.getAddonByID("French-GC@grammalecte.net", function(addon) {
let xURI = addon.getResourceURI(sPath);
//console.log("> " + xURI.path);
let sFolder = xURI.path;
if (system.platform === "winnt") {
sFolder = sFolder.slice(1).replace(/\//g, "\\\\");
}
//console.log("> " + sFolder);
if (bActivate) {
addDirectory(sFolder);
} else {
removeDirectory(sFolder);
}
});
}
catch (e) {
console.error("Unable to add extension folder");
helpers.logerror(e);
}
}
exports.initSpellChecker = initSpellChecker;
exports.getDictionariesList = getDictionariesList;
exports.setDictionary = setDictionary;
exports.check = check;
exports.suggest = suggest;
exports.addDirectory = addDirectory;
exports.removeDirectory = removeDirectory;
exports.setExtensionDictFolder = setExtensionDictFolder;
|
Added gc_lang/fr/xpi/ui.js version [e0b9ae16c2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 |
/*
GRAMMALECTE [fr] FOR FIREFOX
Author: Olivier R.
License: GPL 3
Website: http://www.dicollecte.org/grammalecte
*/
//// FIREFOX UI
"use strict";
const tabs = require("sdk/tabs");
const toggle = require("sdk/ui/button/toggle");
const panel = require("sdk/panel");
const self = require("sdk/self");
const core = require("sdk/view/core");
const contextmenu = require("sdk/context-menu");
const _ = require("sdk/l10n").get;
const hotkeys = require("sdk/hotkeys");
const sp = require("sdk/simple-prefs");
const clipboard = require("sdk/clipboard");
//const selection = require("sdk/selection");
const { Cu } = require("chrome");
const { BasePromiseWorker } = Cu.import('resource://gre/modules/PromiseWorker.jsm', {});
// Grammalecte
const sce = require("./spellchecker.js");
const text = require("./grammalecte/text.js");
const helpers = require("./grammalecte/helpers.js");
const tests = require("./grammalecte/tests.js");
/*
Add dictionaries
*/
sce.initSpellChecker();
if (sp.prefs['bDictClassic']) sce.setExtensionDictFolder("fr-FR-classic", true);
if (sp.prefs['bDictModern']) sce.setExtensionDictFolder("fr-FR-modern", true);
if (sp.prefs['bDictReform']) sce.setExtensionDictFolder("fr-FR-reform", true);
if (sp.prefs['bDictClassicReform']) sce.setExtensionDictFolder("fr-FR-classic-reform", true);
function setExtensionDictFolder (sDictOption, bValue) {
sce.setExtensionDictFolder(sDictOption, bValue);
switch (sDictOption) {
case "fr-FR-classic": sp.prefs["bDictClassic"] = bValue; break;
case "fr-FR-modern": sp.prefs["bDictModern"] = bValue; break;
case "fr-FR-reform": sp.prefs["bDictReform"] = bValue; break;
case "fr-FR-classic-reform": sp.prefs["bDictClassicReform"] = bValue; break;
default: console.error("# Unknown dictionary: " + sDictOption);
}
if (sp.prefs["bDictClassic"]) {
sp.prefs["sDictSuggestLocale"] = "fr-FR-classic";
} else if (sp.prefs["bDictClassicReform"]) {
sp.prefs["sDictSuggestLocale"] = "fr-FR-classic-reform";
} else if (sp.prefs["bDictReform"]) {
sp.prefs["sDictSuggestLocale"] = "fr-FR-reform";
} else if (sp.prefs["bDictModern"]) {
sp.prefs["sDictSuggestLocale"] = "fr-FR-modern";
} else {
sp.prefs["sDictSuggestLocale"] = "";
}
}
/*
lazy loading
*/
let ibdawg = null // module: indexable binary direct acyclic word graph
let lxg = null; // module: lexicographer
let tf = null; // module: text formatter
let xGCEWorker = null; // PromiseWorker to get jobs done in a separate thread (it’s 20 times faster too!!!)
let oDict = null;
let oLxg = null;
let oTF = null;
function loadGrammarChecker (bSetPanelOptions=false) {
if (xGCEWorker === null) {
// Grammar checker
xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js');
let xPromise = xGCEWorker.post('loadGrammarChecker', [sp.prefs["sGCOptions"]]);
xPromise.then(
function (aVal) {
sp.prefs["sGCOptions"] = aVal;
if (bSetPanelOptions) {
xAboutPanel.port.emit("sendGrammarOptionsToPanel", aVal);
}
},
function (aReason) {
console.error('Promise rejected - ', aReason);
}
).catch(
function (aCaught) {
console.error('Promise Error - ', aCaught);
}
);
} else if (bSetPanelOptions) {
xAboutPanel.port.emit("sendGrammarOptionsToPanel", sp.prefs["sGCOptions"]);
}
return true;
}
function loadLexicographe () {
if (ibdawg === null || lxg === null || oDict === null || oLxg === null) {
lxg = require("./grammalecte/fr/lexicographe.js");
ibdawg = require("resource://grammalecte/ibdawg.js");
oDict = new ibdawg.IBDAWG("fr");
oLxg = new lxg.Lexicographe(oDict);
}
}
function loadTextFormatter () {
if (tf === null || oTF === null) {
tf = require("./grammalecte/fr/textformatter.js");
oTF = new tf.TextFormatter();
}
}
/*
Current state
*/
let xActiveWorker = null;
let bDictActive = false;
/*
Main Button
*/
const xMainButton = toggle.ToggleButton({
id: "grammalecte-mainbutton",
label: _("mainTitle"),
tooltip: _("buttonTooltip"),
icon: {
"16": "./img/icon-16.png",
"32": "./img/icon-32.png",
"64": "./img/icon-64.png"
},
// Note: it is not possible to distinguish between left/right click
// https://blog.mozilla.org/addons/2014/03/13/new-add-on-sdk-australis-ui-features-in-firefox-29/comment-page-1/#comment-178621,
onClick: function (state) {
createAboutPanel();
xAboutPanel.show({position: xMainButton});
}
});
/*
About
*/
let xAboutPanel = null;
function createAboutPanel () {
if (xAboutPanel === null) {
xAboutPanel = panel.Panel({
contentURL: self.data.url("about_panel.html"),
contentScriptFile: self.data.url("about_panel.js"),
onHide: function () {
xMainButton.state("window", {checked: false});
xAboutPanel.port.emit("showHelp");
},
position: {
right: 0,
bottom: 0
},
width: 320,
height: 670
});
xAboutPanel.port.emit("calcDefaultPanelHeight");
xAboutPanel.port.on("setHeight", function (n) {
xAboutPanel.resize(320, n);
});
xAboutPanel.port.on("openConjugueur", function () {
createConjPanel();
xConjPanel.show({position: xMainButton});
xConjPanel.port.emit("conjugate", "être");
});
xAboutPanel.port.on("openURL", function (sURL) {
tabs.open(sURL);
});
xAboutPanel.port.on("loadGrammarOptions", function () {
loadGrammarChecker(true);
});
xAboutPanel.port.on("loadSpellingOptions", function () {
xAboutPanel.port.emit("sendSpellingOptionsToPanel",
sp.prefs["bDictModern"], sp.prefs["bDictClassic"],
sp.prefs["bDictReform"], sp.prefs["bDictClassicReform"]);
});
xAboutPanel.port.on("changeDictSetting", function (sDictOption, bValue) {
setExtensionDictFolder(sDictOption, bValue);
});
xAboutPanel.port.on("setOption", function (sOptionId, bValue) {
let xPromise = xGCEWorker.post('setOption', [sOptionId, bValue]);
xPromise.then(
function (aVal) {
sp.prefs["sGCOptions"] = aVal;
},
function (aReason) {
console.error('Promise rejected - ', aReason);
}
).catch(
function (aCaught) {
console.error('Promise Error - ', aCaught);
}
);
});
xAboutPanel.port.on("resetOptions", function () {
let xPromise = xGCEWorker.post('resetOptions');
xPromise.then(
function (aVal) {
sp.prefs["sGCOptions"] = aVal;
xAboutPanel.port.emit("sendGrammarOptionsToPanel", sp.prefs["sGCOptions"]);
},
function (aReason) {
console.error('Promise rejected - ', aReason);
}
).catch(
function (aCaught) {
console.error('Promise Error - ', aCaught);
}
);
});
}
}
/*
Grammar Checker
*/
let xGCPanel = null;
function createGCPanel () {
if (xGCPanel === null) {
xGCPanel = panel.Panel({
contentURL: self.data.url("gc_panel.html"),
contentScriptFile: self.data.url("gc_panel.js"),
onShow: function () {
xGCPanel.port.emit("setPanelWidth", sp.prefs["nGCPanelWidth"]);
if (sp.prefs["sDictSuggestLocale"] !== "") {
bDictActive = sce.setDictionary(sp.prefs["sDictSuggestLocale"]);
}
if (!bDictActive) {
bDictActive = sce.setDictionary("fr"); // default dictionary in French version of Firefox
}
},
onHide: function () {
xGCPanel.port.emit("clearErrors");
xGCPanel.resize(sp.prefs["nGCPanelWidth"], sp.prefs["nGCPanelHeight"]);
xMainButton.state("window", {checked: false});
},
//contextMenu: true, /* ugly, look for contextMenuContentData */
position: {
right: 0,
bottom: 0
},
width: sp.prefs["nGCPanelWidth"],
height: sp.prefs["nGCPanelHeight"]
});
core.getActiveView(xGCPanel).setAttribute("noautohide", true);
//core.getActiveView(xGCPanel).setAttribute("backdrag", true);
//core.getActiveView(xGCPanel).setAttribute("level", 'floating');
xGCPanel.port.on("closePanel", function () {
if (xActiveWorker) {
xActiveWorker.port.emit("clear");
xActiveWorker = null;
}
xGCPanel.hide();
});
xGCPanel.port.on("openURL", function (sURL) {
tabs.open(sURL);
});
xGCPanel.port.on("correction", function (sIdParagraph, sText) {
if (xActiveWorker) {
xActiveWorker.port.emit("setParagraph", parseInt(sIdParagraph), sText);
xActiveWorker.port.emit("rewrite");
}
});
xGCPanel.port.on("modifyAndCheck", function (sIdParagraph, sText) {
if (checkConsistency(sText)) {
if (xActiveWorker) {
xActiveWorker.port.emit("setParagraph", parseInt(sIdParagraph), sText);
xActiveWorker.port.emit("rewrite");
}
checkAndSendToPanel(sIdParagraph, sText);
} else {
if (xActiveWorker) {
xActiveWorker.port.emit("getParagraph", parseInt(sIdParagraph));
}
xGCPanel.port.emit("showMessage", _("edit_error"));
}
});
xGCPanel.port.on("getSuggestionsForTo", function (sWord, sTooltipId) {
if (bDictActive) {
let lSugg = sce.suggest(sWord);
xGCPanel.port.emit("suggestionsFor", sWord, lSugg.join('|'), sTooltipId);
} else {
xGCPanel.port.emit("suggestionsFor", sWord, "# Erreur : dictionnaire orthographique introuvable.", sTooltipId);
}
});
xGCPanel.port.on("copyToClipboard", function (sText) {
clipboard.set(sText);
});
xGCPanel.port.on("resize", function(sCmd, n) {
if (sCmd == "expand") {
xGCPanel.resize(sp.prefs["nGCPanelWidth"], sp.prefs["nGCPanelHeight"]);
} else if (sCmd == "reduce") {
xGCPanel.resize(280, 50);
} else {
switch (sCmd) {
case "resize_h_bigger": if (sp.prefs["nGCPanelHeight"] < 1200) { sp.prefs["nGCPanelHeight"] += n; } break;
case "resize_h_smaller": if (sp.prefs["nGCPanelHeight"] > 250) { sp.prefs["nGCPanelHeight"] -= n } break;
case "resize_w_bigger": if (sp.prefs["nGCPanelWidth"] < 1200) { sp.prefs["nGCPanelWidth"] += n; } break;
case "resize_w_smaller": if (sp.prefs["nGCPanelWidth"] > 400) { sp.prefs["nGCPanelWidth"] -= n; } break;
}
xGCPanel.resize(sp.prefs["nGCPanelWidth"], sp.prefs["nGCPanelHeight"]);
xGCPanel.port.emit("setPanelWidth", sp.prefs["nGCPanelWidth"]);
}
});
}
}
function checkConsistency (sText) {
if (sText.includes("<!-- err_end -->") || sText.includes('<span id="tooltip') || sText.includes('<u id="err')) {
return false;
}
return true;
}
function checkAndSendToPanel (sIdParagraph, sText) {
let xPromise = xGCEWorker.post('parseAndTag', [sText, parseInt(sIdParagraph), "FR", false]);
xPromise.then(
function (aVal) {
xGCPanel.port.emit("refreshParagraph", sIdParagraph, aVal);
},
function (aReason) {
console.error('Promise rejected - ', aReason);
}
).catch(
function (aCaught) {
console.error('Promise Error - ', aCaught);
}
);
}
const xHotkeyGrammarChecker = hotkeys.Hotkey({
combo: "accel-shift-f7",
onPress: function () {
createGCPanel();
xActiveWorker = tabs.activeTab.attach({
contentScriptFile: self.data.url("replace_text.js")
});
xActiveWorker.port.emit("setActiveElement", true);
xActiveWorker.port.on("yesThisIsTextZone", function (sText) {
if (!xGCPanel.isShowing) {
xGCPanel.show({position: xMainButton});
}
sendTextToPanel(sText);
});
xActiveWorker.port.on("emitParagraph", function (iParagraph, sParagraph) {
checkAndSendToPanel(iParagraph.toString(), sParagraph);
});
xActiveWorker.port.on("closeGCPanel", function() {
xActiveWorker = null;
xGCPanel.hide();
});
}
});
const xHotkeyGC = hotkeys.Hotkey({
// Quick test
combo: "accel-shift-f11",
onPress: function () {
createGCPanel();
if (!xGCPanel.isShowing) {
xGCPanel.show({position: xMainButton});
}
xActiveWorker = null;
sendTextToPanel("Quoi ? Racontes ! Racontes-moi ! Bon sangg, parles ! Oui. Il y a des menteur partout. "
+ "Je suit sidérés par la brutales arrogance de cette homme-là. Quelle salopard ! Un escrocs de la pire espece. "
+ "Quant sera t’il châtiés pour ses <i>mensonge</i> ? Merde ! J’en aie marre.\n"
+ "Deuxièmes <b>test</b>. On va finir par par y arrivé! Il faux persévéré... Encore et encore.\n"
+ "Aujourd'hui, je m'en fou. Il est au travaille.\nJ’en veux 10 %.\nJe suit le CAC40 de près.\nIl y aura encore des attentas.");
}
});
async function sendTextToPanel (sText) {
xGCPanel.port.emit("clearErrors");
xGCPanel.port.emit("start");
loadGrammarChecker();
let iParagraph = 0; // index of paragraphs, used for identification
let nParagraph = 0; // non empty paragraphs
let sRes = "";
try {
sText = sText.normalize("NFC"); // remove combining diacritics
for (let sParagraph of text.getParagraph(sText)) {
if (sParagraph.trim() !== "") {
sRes = await xGCEWorker.post('parseAndGenerateParagraph', [sParagraph, iParagraph, "FR", false])
xGCPanel.port.emit("addElem", sRes);
nParagraph += 1;
}
iParagraph += 1;
}
xGCPanel.port.emit("addElem", '<p class="message">' + _("numberOfParagraphs") + " " + nParagraph + '</p>');
}
catch (e) {
xGCPanel.port.emit("addElem", '<p class="bug">' + e.message + '</p>');
}
xGCPanel.port.emit("end");
}
/*
Text Formatter
*/
let xTFPanel = null;
function createTFPanel () {
if (xTFPanel === null) {
xTFPanel = panel.Panel({
contentURL: self.data.url("tf_panel.html"),
contentScriptFile: [self.data.url("tf_panel.js"), self.data.url("../grammalecte/fr/textformatter.js")],
onShow: function () {
xTFPanel.port.emit("start", sp.prefs["sTFOptions"]);
},
position: {
bottom: 30,
right: 30
},
width: 800,
height: 595
});
core.getActiveView(xTFPanel).setAttribute("noautohide", true);
xTFPanel.port.on("setHeight", function (n) {
xTFPanel.resize(800, n);
});
xTFPanel.port.on("saveOptions", function (sOptions) {
sp.prefs["sTFOptions"] = sOptions;
});
xTFPanel.port.on("getTextToFormat", function () {
if (xActiveWorker) {
xActiveWorker.port.emit("getText");
} else {
xTFPanel.hide();
}
});
xTFPanel.port.on("applyFormattedText", function (sText) {
if (xActiveWorker) {
xActiveWorker.port.emit("write", sText);
} else {
xTFPanel.hide();
}
});
xTFPanel.port.on("closePanel", function () {
if (xActiveWorker) {
xActiveWorker.port.emit("clear");
xActiveWorker = null;
}
xTFPanel.hide();
});
}
}
const xHotkeyTextFormatter = hotkeys.Hotkey({
combo: "accel-shift-f6",
onPress: function () {
loadTextFormatter();
createTFPanel();
xActiveWorker = tabs.activeTab.attach({
contentScriptFile: self.data.url("replace_text.js")
});
xActiveWorker.port.emit("setActiveElement", false);
xActiveWorker.port.on("yesThisIsTextZone", function (sText) {
xTFPanel.show({position: xMainButton});
});
xActiveWorker.port.on("emitText", function (sText) {
xTFPanel.port.emit("receiveTextToFormat", sText);
});
xActiveWorker.port.on("closeTFPanel", function() {
xActiveWorker = null;
xTFPanel.hide();
});
}
});
/*
Lexicographer
*/
let xLxgPanel = null;
function createLxgPanel () {
if (xLxgPanel === null) {
xLxgPanel = panel.Panel({
contentURL: self.data.url("lxg_panel.html"),
contentScriptFile: self.data.url("lxg_panel.js"),
onHide: function () {
xLxgPanel.port.emit("clear");
xMainButton.state("window", {checked: false});
},
position: {
bottom: 20,
right: 30
},
width: sp.prefs["nLxgPanelWidth"],
height: sp.prefs["nLxgPanelHeight"]
});
core.getActiveView(xLxgPanel).setAttribute("noautohide", true);
xLxgPanel.port.on("closePanel", function () {
xLxgPanel.resize(sp.prefs["nLxgPanelWidth"], sp.prefs["nLxgPanelHeight"]);
xLxgPanel.hide();
});
xLxgPanel.port.on("resize", function(sCmd, n) {
if (sCmd == "expand") {
xLxgPanel.resize(sp.prefs["nLxgPanelWidth"], sp.prefs["nLxgPanelHeight"]);
} else if (sCmd == "reduce") {
xLxgPanel.resize(280, 50);
} else {
switch (sCmd) {
case "resize_h_bigger": if (sp.prefs["nLxgPanelHeight"] < 1200) { sp.prefs["nLxgPanelHeight"] += n; } break;
case "resize_h_smaller": if (sp.prefs["nLxgPanelHeight"] > 250) { sp.prefs["nLxgPanelHeight"] -= n } break;
case "resize_w_bigger": if (sp.prefs["nLxgPanelWidth"] < 1200) { sp.prefs["nLxgPanelWidth"] += n; } break;
case "resize_w_smaller": if (sp.prefs["nLxgPanelWidth"] > 300) { sp.prefs["nLxgPanelWidth"] -= n; } break;
}
xLxgPanel.resize(sp.prefs["nLxgPanelWidth"], sp.prefs["nLxgPanelHeight"]);
}
});
}
}
async function analyzeWords (sText) {
xLxgPanel.port.emit("startWaitIcon");
xLxgPanel.port.emit("addSeparator", _("separator"));
loadGrammarChecker();
let nParagraph = 0; // non empty paragraphs
let sRes = "";
try {
for (let sParagraph of text.getParagraph(sText)) {
if (sParagraph.trim() !== "") {
sRes = await xGCEWorker.post('analyzeWords', [sParagraph])
xLxgPanel.port.emit("addElem", sRes);
nParagraph += 1;
}
}
xLxgPanel.port.emit("addElem", '<p class="message">' + _("numberOfParagraphs") + " " + nParagraph + '</p>');
}
catch (e) {
xLxgPanel.port.emit("addElem", '<p class="bug">'+e.message+"</p>");
}
xLxgPanel.port.emit("stopWaitIcon");
}
/*
Conjugueur
*/
let xConjPanel = null;
function createConjPanel () {
if (xConjPanel === null) {
let sConjData = self.data.load("../grammalecte/fr/conj_data.json");
xConjPanel = panel.Panel({
contentURL: self.data.url("conj_panel.html"),
contentScriptFile: [self.data.url("conj_panel.js"), self.data.url("../grammalecte/fr/conj.js")],
onShow: function () {
xConjPanel.port.emit("start");
},
onHide: function () {
xMainButton.state("window", {checked: false});
},
position: {
bottom: 30,
right: 30
},
width: 550,
height: 880
});
core.getActiveView(xConjPanel).setAttribute("noautohide", true);
xConjPanel.port.on("show", function () {
if (!xConjPanel.isShowing) {
xConjPanel.show({position: xMainButton});
}
});
xConjPanel.port.on("setHeight", function (n) {
xConjPanel.resize(550, n);
});
xConjPanel.port.on("closePanel", function () {
xConjPanel.hide();
});
xConjPanel.port.emit("provideConjData", sConjData);
}
}
const xHotkeyConj = hotkeys.Hotkey({
combo: "accel-shift-f8",
onPress: function () {
createConjPanel();
xConjPanel.port.emit("conjugate", "être");
}
});
/*
Tests
*/
let xTestPanel = null;
function createTestPanel () {
if (xTestPanel === null) {
xTestPanel = panel.Panel({
contentURL: self.data.url("test_panel.html"),
contentScriptFile: self.data.url("test_panel.js"),
onHide: function () {
xMainButton.state("window", {checked: false});
},
position: {
bottom: 30,
right: 30
},
width: 350,
height: 700
});
core.getActiveView(xTestPanel).setAttribute("noautohide", true);
xTestPanel.port.on("checkText", function (sText) {
loadGrammarChecker();
xTestPanel.port.emit("clear");
let xPromise = xGCEWorker.post('parse', [sText, "FR", true, false]);
xPromise.then(
function (aVal) {
let lErr = JSON.parse(aVal);
if (lErr.length > 0) {
for (let dErr of lErr) {
xTestPanel.port.emit("addElem", text.getReadableError(dErr));
}
} else {
xTestPanel.port.emit("addElem", _('noErrorFound'));
}
},
function (aReason) {
xTestPanel.port.emit("addElem", 'Promise rejected');
xTestPanel.port.emit("addElem", aReason);
}
).catch(
function (aCaught) {
xTestPanel.port.emit("addElem", 'Promise Error');
xTestPanel.port.emit("addElem", aCaught);
}
);
});
xTestPanel.port.on("allGCTests", function () {
xTestPanel.port.emit("clear");
xTestPanel.port.emit("addElem", 'Performing tests… Wait…');
loadGrammarChecker();
let xPromise = xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']);
xPromise.then(
function (aVal) {
xTestPanel.port.emit("addElem", 'Done.');
xTestPanel.port.emit("addElem", aVal);
},
function (aReason) {
xTestPanel.port.emit("addElem", 'Promise rejected');
xTestPanel.port.emit("addElem", aReason);
}
).catch(
function (aCaught) {
xTestPanel.port.emit("addElem", 'Promise Error');
xTestPanel.port.emit("addElem", aCaught);
}
)
});
xTestPanel.port.on("closePanel", function () {
xTestPanel.hide();
});
}
}
const xHotkeyFullTests = hotkeys.Hotkey({
combo: "accel-shift-f12",
onPress: function () {
createTestPanel();
xTestPanel.show({position: xMainButton});
}
});
/*
Context menu
*/
// Grammar checker
const xMenuItemTextAreaGC = contextmenu.Item ({
label: _("checkText"),
image: self.data.url("./img/icon-16.png"),
contentScript: 'self.on("click", function (node, data) {' +
' self.postMessage(node.value);' +
'});',
accessKey: "g",
onMessage: function (sText) {
createGCPanel();
if (!xGCPanel.isShowing) {
xGCPanel.show({position: xMainButton});
} else {
xGCPanel.port.emit("clearErrors");
}
xActiveWorker = tabs.activeTab.attach({
contentScriptFile: self.data.url("replace_text.js")
});
xActiveWorker.port.emit("setActiveElement", false);
xActiveWorker.port.on("emitParagraph", function (iParagraph, sParagraph) {
checkAndSendToPanel(iParagraph.toString(), sParagraph);
});
xActiveWorker.port.on("closeGCPanel", function() {
xActiveWorker = null;
xGCPanel.hide();
});
sendTextToPanel(sText);
}
});
const xMenuItemSelectionGC = contextmenu.Item ({
label: _("checkText"),
image: self.data.url("./img/icon-16.png"),
contentScript: 'self.on("click", function () {' +
' let sText = window.getSelection().toString();' +
' self.postMessage(sText);' +
'});',
accessKey: "g",
onMessage: function (sText) {
createGCPanel();
if (!xGCPanel.isShowing) {
xGCPanel.show({position: xMainButton});
} else {
xGCPanel.port.emit("clearErrors");
}
xActiveWorker = null;
sendTextToPanel(sText);
}
});
// Text Formatter
const xMenuItemTextFormatter = contextmenu.Item ({
label: _("textFormatter"),
image: self.data.url("./img/icon-16.png"),
context: contextmenu.SelectorContext("textarea"),
contentScript: 'self.on("click", function (node, data) {' +
' self.postMessage(node.value);' +
'});',
accessKey: "c",
onMessage: function (sValue) {
loadTextFormatter();
createTFPanel();
xActiveWorker = tabs.activeTab.attach({
contentScriptFile: self.data.url("replace_text.js")
});
xActiveWorker.port.emit("setActiveElement", false);
xActiveWorker.port.on("emitText", function (sText) {
xTFPanel.port.emit("receiveTextToFormat", sText);
});
xActiveWorker.port.on("closeTFPanel", function() {
xActiveWorker = null;
xTFPanel.hide();
});
xTFPanel.show({position: xMainButton});
}
});
// Lexicographer
const xMenuItemSelectionLxg = contextmenu.Item ({
label: _("lexicographer"),
image: self.data.url("./img/icon-16.png"),
contentScript: 'self.on("click", function () {' +
' let sText = window.getSelection().toString();' +
' self.postMessage(sText);' +
'});',
accessKey: "l",
onMessage: function (sText) {
createLxgPanel();
xLxgPanel.show({position: xMainButton});
analyzeWords(sText);
}
});
const xMenuItemTextAreaLxg = contextmenu.Item ({
label: _("lexicographer"),
image: self.data.url("./img/icon-16.png"),
contentScript: 'self.on("click", function (node, data) {' +
' self.postMessage(node.value);' +
'});',
accessKey: "l",
onMessage: function (sText) {
createLxgPanel();
xLxgPanel.show({position: xMainButton});
analyzeWords(sText);
}
});
// TextArea
const xMenuTextArea = contextmenu.Menu({
label: "Grammalecte",
image: self.data.url("./img/icon-16.png"),
context: contextmenu.SelectorContext("textarea, input[type='text']"),
accessKey: "g",
items: [xMenuItemTextAreaGC, xMenuItemTextFormatter, xMenuItemTextAreaLxg]
});
// Selection
const xMenuSelection = contextmenu.Menu({
label: "Grammalecte",
image: self.data.url("./img/icon-16.png"),
context: [contextmenu.SelectionContext(), contextmenu.PredicateContext(function (context) {
if (context.targetName === "textarea" || context.targetName == "input") {
return false;
}
return true;
})],
accessKey: "g",
items: [xMenuItemSelectionGC, xMenuItemSelectionLxg]
});
|
Added lexicons/English.lex version [b6d07232cc].
more than 10,000 changes
Added lexicons/French.lex version [5a3d783ddf].
more than 10,000 changes
Added lexicons/French.tagset.txt version [3f7ce78984].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
ÉTIQUETTES DE GRAMMALECTE
http://www.dicollecte.org/grammalecte
_______________________________________________________________________________
// NOMS ET ADJECTIFS
Nom :N (Loc: Ñ)
Adjectif :A (loc: Â)
Prénom :M1
Patronyme :M2
Nom propre :MP
Nom propre (avec article) :NM
[genre] masculin :m [nombre] singulier :s
féminin :f pluriel :p
épicène :e invariable :i
// DIVERS
Adverbe :W (loc: Ŵ)
Adverbe de négation :X
Interjection :J (loc: Ĵ)
Nombre cardinal :B
Titre :T
// VERBES
Verbe :V 0 e i t n p m e a (loc: Ṽ)
1 a x x x q x x x
2 _ _ _ _ r _ _ _
3 s
u
e
x
_
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
groupe (0 = être ou avoir) ____/ | | | | | | | |
type de verbe (être, avoir, autre) _______/ | | | | | | |
verbe intransifif ? __________/ | | | | | |
verbe transitif direct ? _____________/ | | | | |
verbe transitif indirect ? ________________/ | | | |
verbe pronominal ? ___________________/ | | |
p: toujours, r: réciproque, e: avec pronom “en” | | |
accord? q: possiblement, s: toujours, u: jamais | | |
verbe impersonnel ? ______________________/ | |
avec verbe auxilaire être ? _________________________/ |
avec verbe auxilaire avoir ? ____________________________/
Infinitif :Y
Participe présent :P
Participe passé :Q
Indicatif présent :Ip 1re personne du singulier :1s (forme interrogative: 1ś ou 1ŝ)
Indicatif imparfait :Iq 2e personne du singulier :2s
Indicatif passé simple :Is 3e personne du singulier :3s
Indicatif futur :If 1re personne du pluriel :1p
2e personne du pluriel :2p
Subjonctif présent :Sp 3e personne du pluriel :3p
Subjonctif imparfait :Sq
Conditionnel :K
Impératif :E
// MOTS GRAMMATICAUX
Mot grammatical :G
préposition :R (loc: Ŕ)
préposition verbale :Rv
conjonction :C (loc: Ĉ)
conjonction de coordination :Cc
conjonction de subordination :Cs (loc: Ĉs)
déterminant :D
déterminant possessif :Dp
déterminant démonstratif :Dd
déterminant indéterminé :Di
Adverbe interrogatif :U
pronom :O
pronom démonstratif :Od
pronom indéterminé :Oi
pronom interrogatif :Oj
pronom relatif :Or
pronom de négation :On
pronom adverbial :Ow
pronom personnel sujet :Os
pronom personnel objet :Oo
// AUTRES
Préfixe :Zp
Suffixe :Zs
========== MÉMO ==========
:A Adjectif
:B Nombre cardinal
:C Conjonction
:D Déterminant
:E Impératif (verbe)
:F
:G Mot grammatical
:H <Hors-norme>
:I Indicatif (verbe)
:J Interjection
:K Conditionnel (verbe)
:L Locution
:M Nom propre (sans article)
:N Nom
:O Pronom
:P Participe présent (verbe)
:Q Participe passé (verbe)
:R Préposition
:S Subjonctif (verbe)
:T Titre
:U Adverbe interrogatif
:V Verbe (quelle que soit la forme)
:W Adverbe
:X Adverbe de négation
:Y Infinitif (verbe)
:Z Préfixe ou suffixe
:1 1re personne (verbe)
:2 2e personne (verbe)
:3 3e personne (verbe)
:e épicène
:f féminin
:i invariable
:m masculin
:p pluriel
:s singulier
|
Added make.py version [816fcbbca1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 |
#!python3
# coding: UTF-8
import sys
import os
import subprocess
import re
import zipfile
import traceback
import configparser
import datetime
import argparse
import importlib
import unittest
import json
from string import Template
from distutils import dir_util, file_util
import dialog_bundled
import compile_rules
sWarningMessage = "The content of this folder is generated by code and replaced at each build.\n"
class cd:
"""Context manager for changing the current working directory"""
def __init__ (self, newPath):
self.newPath = os.path.expanduser(newPath)
def __enter__ (self):
self.savedPath = os.getcwd()
os.chdir(self.newPath)
def __exit__ (self, etype, value, traceback):
os.chdir(self.savedPath)
def fileFile (spf, dVars):
return Template(open(spf, "r", encoding="utf-8").read()).safe_substitute(dVars)
def copyAndFileTemplate (spfSrc, spfDst, dVars):
s = Template(open(spfSrc, "r", encoding="utf-8").read()).safe_substitute(dVars)
open(spfDst, "w", encoding="utf-8", newline="\n").write(s)
def addFolderToZipAndFileFile (hZip, spSrc, spDst, dVars, bRecursive):
# recursive function
spSrc = spSrc.strip("/ ")
spDst = spDst.strip("/ ")
for sf in os.listdir(spSrc):
spfSrc = (spSrc + "/" + sf).strip("/ ")
spfDst = (spDst + "/" + sf).strip("/ ")
if os.path.isdir(spfSrc):
if bRecursive:
addFolderToZipAndFileFile(hZip, spfSrc, spfDst, dVars, bRecursive)
else:
if spfSrc.endswith((".css", ".js", ".xcu", ".xul", ".rdf", ".dtd", ".properties")):
#print(spfSrc + " > " + spfDst)
hZip.writestr(spfDst, fileFile(spfSrc, dVars))
else:
#print(spfSrc + " > " + spfDst)
hZip.write(spfSrc, spfDst)
def unzip (spfZip, spDest, bCreatePath=False):
if spDest:
if bCreatePath and not os.path.exists(spDest):
dir_util.mkpath(spDest)
print("> unzip in: "+ spDest)
spInstall = os.path.abspath(spDest)
if os.path.isdir(spInstall):
eraseFolder(spInstall)
with zipfile.ZipFile(spfZip) as hZip:
hZip.extractall(spDest)
else:
print("# folder not found")
else:
print("path destination is empty")
def eraseFolder (sp):
# recursive!!!
for sf in os.listdir(sp):
spf = sp + "/" + sf
if os.path.isdir(spf):
eraseFolder(spf)
else:
try:
os.remove(spf)
except:
print("%s not removed" % spf)
def createCleanFolder (sp):
if not os.path.exists(sp):
dir_util.mkpath(sp)
else:
eraseFolder(sp)
def getConfig (sLang):
xConfig = configparser.SafeConfigParser()
xConfig.optionxform = str
try:
xConfig.read("gc_lang/" + sLang + "/config.ini", encoding="utf-8")
except:
print("Config file in project [" + sLang + "] not found")
exit()
return xConfig
def createOptionsLabelProperties (dOptLbl):
sContent = ""
for sOpt, tLabel in dOptLbl.items():
sContent += sOpt + "=" + tLabel[0] + "\n"
if tLabel[1]:
sContent += "hlp_" + sOpt + "=" + tLabel[1] + "\n"
return sContent
def createDialogOptionsXDL (dVars):
sFixedline = '<dlg:fixedline dlg:id="{0}" dlg:tab-index="{1}" dlg:top="{2}" dlg:left="5" dlg:width="{3}" dlg:height="10" dlg:value="&{0}" />\n'
sCheckbox = '<dlg:checkbox dlg:id="{0}" dlg:tab-index="{1}" dlg:top="{2}" dlg:left="{3}" dlg:width="{4}" dlg:height="10" dlg:value="&{0}" dlg:checked="{5}" {6} />\n'
iTabIndex = 1
nPosY = 5
nWidth = 240
sContent = ""
dOpt = dVars["dOptPython"]
dOptLabel = dVars["dOptLabel"][dVars["lang"]]
for sGroup, lGroupOptions in dVars["lStructOpt"]:
sContent += sFixedline.format(sGroup, iTabIndex, nPosY, nWidth)
iTabIndex += 1
for lLineOptions in lGroupOptions:
nElemWidth = nWidth // len(lLineOptions)
nPosY += 10
nPosX = 10
for sOpt in lLineOptions:
sHelp = 'dlg:help-text="&hlp_%s"'%sOpt if dOptLabel[sOpt][1] else ""
sContent += sCheckbox.format(sOpt, iTabIndex, nPosY, nPosX, nElemWidth, "true" if dOpt[sOpt] else "false", sHelp)
iTabIndex += 1
nPosX += nElemWidth
nPosY += 10
return sContent
def createOXT (spLang, dVars, dOxt, spLangPack, bInstall):
"create extension for Writer"
print("Building extension for Writer")
spfZip = "_build/" + dVars['name'] + "-"+ dVars['lang'] +"-v" + dVars['version'] + '.oxt'
hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED)
# Package and parser
copyGrammalectePyPackageInZipFile(hZip, spLangPack, dVars['py_binary_dic'], "pythonpath/")
hZip.write("cli.py", "pythonpath/cli.py")
# Extension files
hZip.writestr("META-INF/manifest.xml", fileFile("gc_core/py/oxt/manifest.xml", dVars))
hZip.writestr("description.xml", fileFile("gc_core/py/oxt/description.xml", dVars))
hZip.writestr("Linguistic.xcu", fileFile("gc_core/py/oxt/Linguistic.xcu", dVars))
hZip.writestr("Grammalecte.py", fileFile("gc_core/py/oxt/Grammalecte.py", dVars))
for sf in dVars["extras"].split(","):
hZip.writestr(sf.strip(), fileFile(spLang + '/' + sf.strip(), dVars))
if "logo" in dVars.keys() and dVars["logo"].strip():
hZip.write(spLang + '/' + dVars["logo"].strip(), dVars["logo"].strip())
## OPTIONS
# options dialog within LO/OO options panel (legacy)
#hZip.writestr("pythonpath/lightproof_handler_grammalecte.py", fileFile("gc_core/py/oxt/lightproof_handler_grammalecte.py", dVars))
#lLineOptions = open(spLang + "/options.txt", "r", encoding="utf-8").readlines()
#dialog_bundled.c(dVars["implname"], lLineOptions, hZip, dVars["lang"])
# options dialog
hZip.writestr("pythonpath/Options.py", fileFile("gc_core/py/oxt/Options.py", dVars))
hZip.write("gc_core/py/oxt/op_strings.py", "pythonpath/op_strings.py")
# options dialog within Writer options panel
dVars["xdl_dialog_options"] = createDialogOptionsXDL(dVars)
dVars["xcs_options"] = "\n".join([ '<prop oor:name="'+sOpt+'" oor:type="xs:string"><value></value></prop>' for sOpt in dVars["dOptPython"] ])
dVars["xcu_label_values"] = "\n".join([ '<value xml:lang="'+sLang+'">' + dVars["dOptLabel"][sLang]["__optiontitle__"] + '</value>' for sLang in dVars["dOptLabel"] ])
hZip.writestr("dialog/options_page.xdl", fileFile("gc_core/py/oxt/options_page.xdl", dVars))
hZip.writestr("dialog/OptionsDialog.xcs", fileFile("gc_core/py/oxt/OptionsDialog.xcs", dVars))
hZip.writestr("dialog/OptionsDialog.xcu", fileFile("gc_core/py/oxt/OptionsDialog.xcu", dVars))
hZip.writestr("dialog/" + dVars['lang'] + "_en.default", "")
for sLangLbl, dOptLbl in dVars['dOptLabel'].items():
hZip.writestr("dialog/" + dVars['lang'] + "_" + sLangLbl + ".properties", createOptionsLabelProperties(dOptLbl))
## ADDONS OXT
print("+ OXT: ", end="")
for spfSrc, spfDst in dOxt.items():
print(spfSrc, end=", ")
if os.path.isdir(spLang+'/'+spfSrc):
for sf in os.listdir(spLang+'/'+spfSrc):
hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf)
else:
if spfSrc.endswith(('.txt', '.py')):
hZip.writestr(spfDst, fileFile(spLang+'/'+spfSrc, dVars))
else:
hZip.write(spLang+'/'+spfSrc, spfDst)
print()
hZip.close()
# Installation in Writer profile
if bInstall:
print("> installation in Writer")
if dVars.get('unopkg', False):
cmd = '"'+os.path.abspath(dVars.get('unopkg')+'" add -f '+spfZip)
print(cmd)
#subprocess.run(cmd)
os.system(cmd)
else:
print("# Error: path and filename of unopkg not set in config.ini")
def createOptionsForFirefox (dVars):
sHTML = ""
for sSection, lOpt in dVars['lStructOpt']:
sHTML += '\n<div id="subsection_' + sSection + '" class="opt_subsection">\n <h2 data-l10n-id="option_'+sSection+'"></h2>\n'
for lLineOpt in lOpt:
for sOpt in lLineOpt:
sHTML += ' <p><input type="checkbox" id="option_'+sOpt+'" /><label id="option_label_'+sOpt+'" for="option_'+sOpt+'" data-l10n-id="option_'+sOpt+'"></label></p>\n'
sHTML += '</div>\n'
# Creating translation data
dProperties = {}
for sLang in dVars['dOptLabel'].keys():
dProperties[sLang] = "\n".join( [ "option_" + sOpt + " = " + dVars['dOptLabel'][sLang][sOpt][0].replace(" [!]", " [!]") for sOpt in dVars['dOptLabel'][sLang] ] )
return sHTML, dProperties
def createFirefoxExtension (sLang, dVars):
"create extension for Firefox"
print("Building extension for Firefox")
eraseFolder("_build/xpi/"+sLang)
dir_util.copy_tree("gc_lang/"+sLang+"/xpi/", "_build/xpi/"+sLang)
dir_util.copy_tree("grammalecte-js", "_build/xpi/"+sLang+"/grammalecte")
sHTML, dProperties = createOptionsForFirefox(dVars)
dVars['optionsHTML'] = sHTML
copyAndFileTemplate("_build/xpi/"+sLang+"/data/about_panel.html", "_build/xpi/"+sLang+"/data/about_panel.html", dVars)
for sLocale in dProperties.keys():
spfLocale = "_build/xpi/"+sLang+"/locale/"+sLocale+".properties"
if os.path.exists(spfLocale):
copyAndFileTemplate(spfLocale, spfLocale, dProperties)
else:
print("Locale file not found: " + spfLocale)
with cd("_build/xpi/"+sLang):
os.system("jpm xpi")
def createOptionsForThunderbird (dVars):
dVars['sXULTabs'] = ""
dVars['sXULTabPanels'] = ""
# dialog options
for sSection, lOpt in dVars['lStructOpt']:
dVars['sXULTabs'] += ' <tab label="&option.label.'+sSection+';"/>\n'
dVars['sXULTabPanels'] += ' <tabpanel orient="vertical">\n <label class="section" value="&option.label.'+sSection+';" />\n'
for lLineOpt in lOpt:
for sOpt in lLineOpt:
dVars['sXULTabPanels'] += ' <checkbox id="option_'+sOpt+'" class="option" label="&option.label.'+sOpt+';" />\n'
dVars['sXULTabPanels'] += ' </tabpanel>\n'
# translation data
for sLang in dVars['dOptLabel'].keys():
dVars['gc_options_labels_'+sLang] = "\n".join( [ "<!ENTITY option.label." + sOpt + ' "' + dVars['dOptLabel'][sLang][sOpt][0] + '">' for sOpt in dVars['dOptLabel'][sLang] ] )
return dVars
def createThunderbirdExtension (sLang, dVars, spLangPack):
"create extension for Thunderbird"
print("Building extension for Thunderbird")
sExtensionName = dVars['tb_identifier'] + "-v" + dVars['version'] + '.xpi'
spfZip = "_build/" + sExtensionName
hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED)
copyGrammalecteJSPackageInZipFile(hZip, spLangPack, dVars['js_binary_dic'])
for spf in ["LICENSE.txt", "LICENSE.fr.txt"]:
hZip.write(spf)
dVars = createOptionsForThunderbird(dVars)
addFolderToZipAndFileFile(hZip, "gc_lang/"+sLang+"/tb", "", dVars, True)
hZip.write("gc_lang/"+sLang+"/xpi/gce_worker.js", "worker/gce_worker.js")
spDict = "gc_lang/"+sLang+"/xpi/data/dictionaries"
for sp in os.listdir(spDict):
if os.path.isdir(spDict+"/"+sp):
hZip.write(spDict+"/"+sp+"/"+sp+".dic", "content/dictionaries/"+sp+"/"+sp+".dic")
hZip.write(spDict+"/"+sp+"/"+sp+".aff", "content/dictionaries/"+sp+"/"+sp+".aff")
hZip.close()
unzip(spfZip, dVars['tb_debug_extension_path'])
def createServerOptions (sLang, dOptData):
with open("server_options."+sLang+".ini", "w", encoding="utf-8", newline="\n") as hDst:
hDst.write("# Server options. Lang: " + sLang + "\n\n[gc_options]\n")
for sSection, lOpt in dOptData["lStructOpt"]:
hDst.write("\n########## " + dOptData["dOptLabel"][sLang].get(sSection, sSection + "[no label found]")[0] + " ##########\n")
for lLineOpt in lOpt:
for sOpt in lLineOpt:
hDst.write("# " + dOptData["dOptLabel"][sLang].get(sOpt, "[no label found]")[0] + "\n")
hDst.write(sOpt + " = " + ("1" if dOptData["dOptPython"].get(sOpt, None) else "0") + "\n")
hDst.write("html = 1\n")
def createServerZip (sLang, dVars, spLangPack):
"create server zip"
spfZip = "_build/" + dVars['name'] + "-"+ dVars['lang'] +"-v" + dVars['version'] + '.zip'
hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED)
copyGrammalectePyPackageInZipFile(hZip, spLangPack, dVars['py_binary_dic'])
for spf in ["cli.py", "server.py", "bottle.py", "server_options._global.ini", "server_options."+sLang+".ini", \
"README.txt", "LICENSE.txt", "LICENSE.fr.txt"]:
hZip.write(spf)
def copyGrammalectePyPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""):
for sf in os.listdir("grammalecte"):
if not os.path.isdir("grammalecte/"+sf):
hZip.write("grammalecte/"+sf, sAddPath+"grammalecte/"+sf)
for sf in os.listdir(spLangPack):
if not os.path.isdir(spLangPack+"/"+sf):
hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf)
hZip.write("grammalecte/_dictionaries/"+sDicName, sAddPath+"grammalecte/_dictionaries/"+sDicName)
def copyGrammalecteJSPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""):
for sf in os.listdir("grammalecte-js"):
if not os.path.isdir("grammalecte-js/"+sf):
hZip.write("grammalecte-js/"+sf, sAddPath+"grammalecte-js/"+sf)
for sf in os.listdir(spLangPack):
if not os.path.isdir(spLangPack+"/"+sf):
hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf)
hZip.write("grammalecte-js/_dictionaries/"+sDicName, sAddPath+"grammalecte-js/_dictionaries/"+sDicName)
def create (sLang, xConfig, bInstallOXT, bJavaScript):
oNow = datetime.datetime.now()
print("============== MAKE GRAMMALECTE [{0}] at {1.hour:>2} h {1.minute:>2} min {1.second:>2} s ==============".format(sLang, oNow))
#### READ CONFIGURATION
print("> read configuration...")
spLang = "gc_lang/" + sLang
dVars = xConfig._sections['args']
dVars['locales'] = dVars["locales"].replace("_", "-")
dVars['loc'] = str(dict([ [s, [s[0:2], s[3:5], ""]] for s in dVars["locales"].split(" ") ]))
## COMPILE RULES
print("> read rules file...")
try:
lRules = open(spLang + "/rules.grx", 'r', encoding="utf-8").readlines()
except:
print("Rules file in project [" + sLang + "] not found")
return
dVars.update(compile_rules.make(lRules, dVars['lang'], bJavaScript))
## READ GRAMMAR CHECKER PLUGINS
print("PYTHON:")
print("+ Plugins: ", end="")
sCodePlugins = ""
for sf in os.listdir(spLang+"/modules"):
if re.match(r"gce_\w+[.]py$", sf):
sCodePlugins += "\n\n" + open(spLang+'/modules/'+sf, "r", encoding="utf-8").read()
print(sf, end=", ")
print()
dVars["plugins"] = sCodePlugins
## CREATE GRAMMAR CHECKER PACKAGE
spLangPack = "grammalecte/"+sLang
createCleanFolder(spLangPack)
for sf in os.listdir("gc_core/py/lang_core"):
if not os.path.isdir("gc_core/py/lang_core/"+sf):
copyAndFileTemplate("gc_core/py/lang_core/"+sf, spLangPack+"/"+sf, dVars)
print("+ Modules: ", end="")
for sf in os.listdir(spLang+"/modules"):
if not sf.endswith(".tpl.py") and not sf.startswith("gce_"):
file_util.copy_file(spLang+"/modules/"+sf, spLangPack)
print(sf, end=", ")
print()
createOXT(spLang, dVars, xConfig._sections['oxt'], spLangPack, bInstallOXT)
createServerOptions(sLang, dVars)
createServerZip(sLang, dVars, spLangPack)
#### JAVASCRIPT
if bJavaScript:
print("JAVASCRIPT:")
print("+ Plugins: ", end="")
sCodePlugins = ""
for sf in os.listdir(spLang+"/modules-js"):
if re.match(r"gce_\w+[.]js$", sf):
sCodePlugins += "\n\n" + open(spLang+'/modules-js/'+sf, "r", encoding="utf-8").read()
print(sf, end=", ")
print()
dVars["pluginsJS"] = sCodePlugins
# options data struct
dVars["dOptJavaScript"] = json.dumps(list(dVars["dOptJavaScript"].items()))
# create folder
spLangPack = "grammalecte-js/"+sLang
createCleanFolder(spLangPack)
# create files
for sf in os.listdir("gc_core/js"):
if not os.path.isdir("gc_core/js/"+sf) and sf.startswith("jsex_"):
dVars[sf[5:-3]] = open("gc_core/js/"+sf, "r", encoding="utf-8").read()
for sf in os.listdir("gc_core/js"):
if not os.path.isdir("gc_core/js/"+sf) and not sf.startswith("jsex_"):
copyAndFileTemplate("gc_core/js/"+sf, "grammalecte-js/"+sf, dVars)
open("grammalecte-js/WARNING.txt", "w", encoding="utf-8", newline="\n").write(sWarningMessage)
for sf in os.listdir("gc_core/js/lang_core"):
if not os.path.isdir("gc_core/js/lang_core/"+sf) and sf.startswith("gc_"):
copyAndFileTemplate("gc_core/js/lang_core/"+sf, spLangPack+"/"+sf, dVars)
print("+ Modules: ", end="")
for sf in os.listdir(spLang+"/modules-js"):
if not sf.endswith(".tpl.js") and not sf.startswith("gce_"):
copyAndFileTemplate(spLang+"/modules-js/"+sf, spLangPack+"/"+sf, dVars)
print(sf, end=", ")
print()
createFirefoxExtension(sLang, dVars)
createThunderbirdExtension(sLang, dVars, spLangPack)
return dVars['version']
def main ():
print("Python: " + sys.version)
xParser = argparse.ArgumentParser()
xParser.add_argument("lang", type=str, nargs='+', help="lang project to generate (name of folder in /lang)")
xParser.add_argument("-b", "--build_data", help="launch build_data.py", action="store_true")
xParser.add_argument("-d", "--dict", help="generate FSA dictionary", action="store_true")
xParser.add_argument("-t", "--tests", help="run unit tests", action="store_true")
xParser.add_argument("-p", "--perf", help="run performance tests", action="store_true")
xParser.add_argument("-js", "--javascript", help="JavaScript build for Firefox", action="store_true")
xParser.add_argument("-fx", "--firefox", help="Launch Firefox Nightly for XPI testing", action="store_true")
xParser.add_argument("-tb", "--thunderbird", help="Launch Thunderbird", action="store_true")
xParser.add_argument("-i", "--install", help="install the extension in Writer (path of unopkg must be set in config.ini)", action="store_true")
xArgs = xParser.parse_args()
dir_util.mkpath("_build")
dir_util.mkpath("grammalecte")
dir_util.mkpath("grammalecte-js")
for sLang in xArgs.lang:
if os.path.exists("gc_lang/"+sLang) and os.path.isdir("gc_lang/"+sLang):
xConfig = getConfig(sLang)
dVars = xConfig._sections['args']
# copy gc_core common file in Python now to be able to compile dictionary if required
for sf in os.listdir("gc_core/py"):
if not os.path.isdir("gc_core/py/"+sf):
copyAndFileTemplate("gc_core/py/"+sf, "grammalecte/"+sf, dVars)
open("grammalecte/WARNING.txt", "w", encoding="utf-8", newline="\n").write(sWarningMessage)
# build data
build_module = None
if xArgs.build_data:
# lang data
try:
build_module = importlib.import_module("gc_lang."+sLang+".build_data")
except ImportError:
print("# Error. Couldn’t import file build_data.py in folder gc_lang/"+sLang)
if build_module:
build_module.before('gc_lang/'+sLang, dVars, xArgs.javascript)
if xArgs.dict or not os.path.exists("grammalecte/_dictionaries"):
import grammalecte.dawg as fsa
from grammalecte.ibdawg import IBDAWG
# fsa builder
oDAWG = fsa.DAWG(dVars['lexicon_src'], dVars['lang_name'], dVars['stemming_method'])
dir_util.mkpath("grammalecte/_dictionaries")
oDAWG.writeInfo("grammalecte/_dictionaries/" + dVars['py_binary_dic'] + ".info.txt")
oDAWG.createBinary("grammalecte/_dictionaries/" + dVars['py_binary_dic'], int(dVars['fsa_method']))
if xArgs.javascript:
dir_util.mkpath("grammalecte-js/_dictionaries")
oDic = IBDAWG(dVars['py_binary_dic'])
#oDic.writeAsJSObject("gc_lang/"+sLang+"/modules-js/dictionary.js")
oDic.writeAsJSObject("grammalecte-js/_dictionaries/"+dVars['js_binary_dic'])
if build_module:
build_module.after('gc_lang/'+sLang, dVars, xArgs.javascript)
# make
sVersion = create(sLang, xConfig, xArgs.install, xArgs.javascript, )
# tests
if xArgs.tests or xArgs.perf:
print("> Running tests")
try:
tests = importlib.import_module("tests."+sLang+"_test")
print(tests.__file__)
except ImportError:
print("# Error. Couldn't import file {}_test.py in folder tests".format(sLang))
else:
if xArgs.tests:
xTestSuite = unittest.TestLoader().loadTestsFromModule(tests)
unittest.TextTestRunner().run(xTestSuite)
if xArgs.perf:
tests.perf(sVersion)
# Firefox
if xArgs.firefox:
with cd("_build/xpi/"+sLang):
os.system("jpm run -b nightly")
# Thunderbird
if xArgs.thunderbird:
os.system("thunderbird -jsconsole -P debug")
else:
print("Folder not found: gc_lang/"+sLang)
if __name__ == '__main__':
main()
|
Added misc/Linguist/Addons.xcu version [ad268ac9d1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Addons"
oor:package="org.openoffice.Office">
<node oor:name="AddonUI">
<node oor:name="OfficeMenuBar">
<node oor:name="dk.gruwier.linguist.Linguist" oor:op="replace">
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">Linguist</value>
<value xml:lang="da">Lingvist</value>
<value xml:lang="fr">Linguiste</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<node oor:name="Submenu">
<node oor:name="m1" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:dk.gruwier.linguist.Linguist?ListUnrecognizedWords</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">List Unrecognized Words</value>
<value xml:lang="da">Liste over ikke-genkendte ord</value>
<value xml:lang="fr">Lister les mots non-reconnus</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument</value>
</prop>
</node>
<node oor:name="m2" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:dk.gruwier.linguist.Linguist?ListAllWords</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">Complete Wordlist (alphabetical)</value>
<value xml:lang="da">Komplet ordliste (alfabetisk)</value>
<value xml:lang="fr">Lister tous les mots (alphabétique)</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument</value>
</prop>
</node>
<node oor:name="m3" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:dk.gruwier.linguist.Linguist?SortWordsOnFrequency</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">Sort Words On Frequency</value>
<value xml:lang="da">Sorter ord efter hyppighed</value>
<value xml:lang="fr">Trier des mots sur la fréquence</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument</value>
</prop>
</node>
<node oor:name="m4" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:dk.gruwier.linguist.Linguist?CalculateLix</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">Statistics</value>
<value xml:lang="da">Statistik</value>
<value xml:lang="fr">Statistiques</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument</value>
</prop>
</node>
<node oor:name="m5" oor:op="replace">
<prop oor:name="URL" oor:type="xs:string">
<value>service:dk.gruwier.linguist.Linguist?FormatAll</value>
</prop>
<prop oor:name="Title" oor:type="xs:string">
<value/>
<value xml:lang="en-US">Format all</value>
<value xml:lang="fr">Tout formater</value>
</prop>
<prop oor:name="Target" oor:type="xs:string">
<value>_self</value>
</prop>
<prop oor:name="Context" oor:type="xs:string">
<value>com.sun.star.text.TextDocument</value>
</prop>
</node>
</node>
</node>
</node>
</node>
</oor:component-data>
|
Added misc/Linguist/Linguist.py version [caf6d0c215].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# -*- coding: utf-8 -*-
# (c) 2009 Finn Gruwier Larsen
import uno
import unohelper
import sys
import traceback
from com.sun.star.task import XJobExecutor
from com.sun.star.awt import XActionListener
from com.sun.star.awt import WindowDescriptor
from com.sun.star.awt.WindowClass import MODALTOP
from com.sun.star.awt.VclWindowPeerAttribute import OK, OK_CANCEL, YES_NO, YES_NO_CANCEL, RETRY_CANCEL, DEF_OK, DEF_CANCEL, DEF_RETRY, DEF_YES, DEF_NO
from com.sun.star.beans import PropertyValue
sys.stderr = sys.stdout
class Linguist (unohelper.Base, XJobExecutor):
def __init__ (self, ctx):
self.ctx = ctx
def trigger (self, command):
desktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
doc = desktop.getCurrentComponent()
if command == "ListUnrecognizedWords":
items = self.collectWords(doc, self.ctx, True)
outputText = ""
for item in items:
outputText = outputText+item[0]+" "+str(item[1])+"\n"
self.createOutputDocument(outputText, self.ctx)
elif command == "ListAllWords":
items = self.collectWords(doc, self.ctx, False)
outputText = ""
for item in items:
outputText = outputText+item[0]+" "+str(item[1])+"\n"
numDiffWords = len(items)
outputText = outputText + "\nNumber of different words: " + str(numDiffWords)
# Do lix processing to get number of words:
results = self.lixProcessWords(doc, self.ctx)
numWords = results[0]
outputText = outputText + "\nTotal number for words: " + str(numWords)
outputText = outputText + "\nLexical Variety: " + \
str(round(numDiffWords * 1.0 / numWords, 2))
self.createOutputDocument(outputText, self.ctx)
elif command == "SortWordsOnFrequency":
items = self.collectWords(doc, self.ctx, False, True)
outputText = ""
for item in items:
if item[1] > 10:
outputText = outputText+item[0]+" "+str(item[1])+"\n"
self.createOutputDocument(outputText, self.ctx)
elif command == "CalculateLix":
results = self.lixProcessWords(doc, self.ctx)
numWords = results[0]
numFullStops = results[1]
numLongWords = results[2]
differentWords = self.collectWords(doc, self.ctx, False, False)
numDifferentWords = float(len(differentWords))
if numFullStops == 0:
outputText = "To make a lix calculation there should be at least one word that is followed by a full stop."
else:
numWordsPerFullStop = numWords / numFullStops
percentageLongWords = (numLongWords * 100) / numWords
lix = numWordsPerFullStop + percentageLongWords
lexicalVariety = numDifferentWords / numWords
outputText = "Number of words: " + str(numWords) + "\r" \
+ "Number of full stops: " + str(numFullStops) + "\r" \
+ "Number of long words (7 or more characters): " + str(numLongWords) + "\r" \
+ "Number of words per full stop: " + str(numWordsPerFullStop) + "\r" \
+ "Percentage long words: " + str(percentageLongWords) + "\r" \
+ "Lix (readability): " + str(lix) + "\r" \
+ "Number of different words: " + str(numDifferentWords) + "\r" \
+ "Lexical variety: " + str(round(lexicalVariety, 3))
self.createOutputDocument(outputText, self.ctx)
elif command == "FormatAll":
pass
else:
print("Bad command!")
def collectWords (self, document, context, unrecWordsOnly=False, sortOnFrequency=False):
"""Collect words from the current text document and return them in a tuple."""
cursor = document.Text.createTextCursor()
smgr = context.ServiceManager
spellchecker = smgr.createInstanceWithContext("com.sun.star.linguistic2.SpellChecker", context)
locale = document.getPropertyValue("CharLocale")
words = {}
# words[locale] = 0 # Enable this for locale debugging (disable line 87)
cursor.gotoStart(False)
while cursor.gotoNextWord(False):
if cursor.isStartOfWord():
cursor.gotoEndOfWord(True)
word = cursor.getString()
if len(word) > 0:
if word[-1]==".":
word = word[0:-1]
if not word in words:
if unrecWordsOnly:
if not spellchecker.isValid(word, locale, ()):
words[word] = 1
else:
words[word] = 1
else:
if unrecWordsOnly:
if not spellchecker.isValid(word, locale, ()):
words[word] = words[word] + 1
else:
words[word] = words[word] + 1
words = list(words.items())
if sortOnFrequency:
words.sort(key = lambda x: (x[1], x[0]), reverse=True)
else:
words.sort()
return words
def createOutputDocument (self, outputText, context):
"""Creates a new text document and puts the output text in it."""
smgr = context.ServiceManager
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop",context)
doc = desktop.loadComponentFromURL("private:factory/swriter","_blank", 0, ())
text = doc.Text
cursor = text.createTextCursor()
text.insertString(cursor, outputText, 0)
def lixProcessWords (self, document, context):
"""Traverses trough the words in the document, examining each word.
Returns a tuple containing number of words, number of full-stops and
number of long words (7 or more characters)."""
cursor = document.Text.createTextCursor()
numWords = 1
numFullStops = 0
numLongWords = 0
cursor.gotoStart(False)
while cursor.gotoNextWord(False):
if cursor.isStartOfWord():
cursor.gotoEndOfWord(True)
word = cursor.getString()
if len(word) > 0:
numWords = numWords + 1
if word[-1]==".":
word = word[0:-1]
numFullStops = numFullStops + 1
if len(word)>=7:
numLongWords = numLongWords + 1
return numWords, numFullStops, numLongWords
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(Linguist, "dk.gruwier.linguist.Linguist", ("com.sun.star.task.Job",),)
|
Added misc/Linguist/META-INF/manifest.xml version [c03245c5e6].
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
<manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python"
manifest:full-path="Linguist.py"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.package-bundle-description"
manifest:full-path="description.txt"/>
<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
manifest:full-path="Addons.xcu"/>
</manifest:manifest>
|
Added misc/Linguist/description.xml version [8fa321418a].
> > > > > > > > | 1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink">
<version value="1.6"/>
<identifier value="dk.gruwier.linguist"/>
<dependencies>
<OpenOffice.org-minimal-version xmlns:d="http://openoffice.org/extensions/description/2006" d:name="OpenOffice.org 2.4" value="3.2"/>
</dependencies>
</description>
|
Added misc/Linguist/license.txt version [58fa15a711].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 |
Linguist
(c) 2008 Finn Gruwier Larsen
Extension for OpenOffice.org developed by Finn Gruwier Larsen
(finn@gruwier.dk).
This software product is licensed under GPL (GNU General Public
License) version 3, which is reproduced below.
--------------------------------------------------------------------
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
|
Added misc/google_ngram_reader.py version [e1ddf0b91d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#!python3
import os
import sys
import re
def readFile (spf):
if os.path.isfile(spf):
with open(spf, "r", encoding="utf-8") as hSrc:
for sLine in hSrc:
yield sLine
else:
print("# Error: file not found.")
def countAndWriteFile (spf):
print(spf)
print("> counting...")
d = {}
i = 0
for sLine in readFile(spf):
sToken, sYear, sOccur, sBook = sLine.strip().split("\t")
if sToken in d:
d[sToken] = (d[sToken][0]+int(sOccur), d[sToken][1]+int(sBook))
else:
d[sToken] = (int(sOccur), int(sBook))
i += 1
print("> %d\r" % i, end="")
with open(spf+".sum.txt", "w", encoding="utf-8", newline="\n") as hDst:
print("> writing...")
hDst.write("#Token\tsOccur\tnBook\n")
for sToken, tVal in d.items():
hDst.write(sToken + "\t" + str(tVal[0]) + "\t" + str(tVal[1]) + "\n")
def mergeFile (spf, hDst):
print("merge: " + spf)
d = {}
for sLine in readFile(spf):
if sLine.startswith("#"):
continue
sToken, sOccur, sBook = sLine.strip().split()
if "_" in sToken:
sToken = sToken[:sToken.find("_")]
sToken = sToken.rstrip(".")
if sToken.startswith(("l'", "d'", "s'", "m'", "t'", "n'", "j'", "c'", "ç'")):
sToken = sToken[2:]
elif sToken.startswith("qu'"):
sToken = sToken[3:]
if not sToken:
continue
if sToken not in d:
d[sToken] = int(sOccur)
else:
d[sToken] = d[sToken] + int(sOccur)
for k, v in d.items():
hDst.write(k + " " + str(v) + "\n")
def main ():
for sf in os.listdir("."):
if not sf.endswith((".txt", ".", ".py")):
countAndWriteFile(sf)
with open("stats_google_ngram_5_2012.txt", "w", encoding="utf-8", newline="\n") as hDst:
for sf in os.listdir("."):
if sf.endswith(".sum.txt"):
mergeFile(sf, hDst)
if __name__ == '__main__' :
main()
|
Added misc/grammalecte.sublime-syntax version [5e8bef6d14].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: Grammalecte rules
file_extensions:
- grx
scope: source.grammalecte
contexts:
main:
# Strings begin and end with quotes, and use backslashes as an escape
# character
- match: '"[^"]*"'
scope: string.quoted.double
#push: double_quoted_string
# Comments begin with a '#' and finish at the end of the line
- match: '#'
scope: punctuation.definition.comment
push: line_comment
# Numbers
- match: '\b(-)?[0-9.]+\b'
scope: constant.numeric
# Keywords are if, else.
# Note that blackslashes don't need to be escaped within single quoted
# strings in YAML. When using single quoted strings, only single quotes
# need to be escaped: this is done by using two single quotes next to each
# other.
- match: '\b(?:if|else|and|or|not|in)\b'
scope: keyword.python
- match: '\b(?:True|False|None)\b'
scope: constant.language
- match: '\b(?:spell|morph|morphex|stem|textarea0?\w*|before0?\w*|after0?\w*|word|option|define|select|exclude|analysex?|apposition|is[A-Z]\w+|rewriteSubject|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b'
scope: entity.name.function
- match: '\b(?:replace|endswith|startswith|search|upper|lower|capitalize|strip|rstrip|is(?:upper|lower|digit|title))\b'
scope: support.function
- match: '\becho\b'
scope: support.function.debug
- match: '\bre\b'
scope: support.class
# Rule options
- match: '^__[\[<]([isu])[\]>](/\w+|)(\(\w+\)|)(![0-9]|)__|</?js>'
scope: rule.options
captures:
1: rule.casing
2: rule.optionname
3: rule.rulename
4: rule.priority
# Definitions and options
- match: '^OPT(?:GROUP|LANG|PRIORITY)/|^OPTSOFTWARE:'
scope: options.command
- match: '^OPT(?:LABEL|)/'
scope: options.parameter
- match: '^DEF: '
scope: definition
# Tests & TODO
- match: '^TEST: (?:__[a-zA-Z0-9]+__ |)'
scope: test
- match: '^TODO: '
scope: todo
# JS groups positioning codes
- match: ' @@[0-9w,$*>:]+'
scope: comment.line.percentage
# rule delimiters
- match: '<<-|>>>'
scope: keyword.action
- match: '__also__'
scope: keyword.condition.green
- match: '__else__'
scope: keyword.condition.red
- match: '-(\d*)>>'
scope: keyword.error
captures:
1: keyword.error.group
- match: '~(\d*)>>'
scope: keyword.textprocessor
captures:
1: keyword.textprocessor.group
- match: '=>>'
scope: keyword.disambiguator
# Escaped chars
- match: '\\(?:\d+|w|d|b|n|s|t)'
scope: constant.character.escape
# URL
- match: '\| ?https?://[\w./%?&=#+-]+'
scope: string.other
# Example errors
- match: '{{.+?}}'
scope: message.error
# special chars
- match: '[@=*^?!:+<>]'
scope: keyword.other
- match: '\(\?(?:[:=!]|<!)|[(|)]'
scope: keyword.parenthesis
- match: '\[|[]{}]'
scope: keyword.brackets
# double_quoted_string:
# - meta_scope: string.quoted.double
# - match: '\\.'
# scope: constant.character.escape
# - match: '(?:"|$)'
# scope: punctuation.definition.string.end
# pop: true
line_comment:
- meta_scope: comment.line
- match: '\\[0-9]+'
scope: constant.character.escape
- match: '\| ?https?://[\w./%?&=#+-]+'
scope: string.other
- match: $
pop: true
|
Added misc/grammalecte.tmTheme version [8385539529].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>name</key> <string>Monokai for Grammalecte</string> <key>settings</key> <array> <dict> <key>settings</key> <dict> <key>background</key> <string>#202025</string> <key>caret</key> <string>#BFFFFF</string> <key>foreground</key> <string>#F8F8F2</string> <key>invisibles</key> <string>#3B3A32</string> <key>lineHighlight</key> <string>#004060</string> <key>selection</key> <string>#003050</string> <key>findHighlight</key> <string>#FFFF00</string> <key>findHighlightForeground</key> <string>#000000</string> <key>selectionBorder</key> <string>#006080</string> <key>activeGuide</key> <string>#9D550FB0</string> <key>bracketsForeground</key> <string>#F8F8F2A5</string> <key>bracketsOptions</key> <string>underline</string> <key>bracketContentsForeground</key> <string>#F8F8F2A5</string> <key>bracketContentsOptions</key> <string>underline</string> <key>tagsOptions</key> <string>stippled_underline</string> </dict> </dict> <dict> <key>name</key> <string>Comment</string> <key>scope</key> <string>comment</string> <key>settings</key> <dict> <key>foreground</key> <string>#607080</string> </dict> </dict> <dict> <key>name</key> <string>String</string> <key>scope</key> <string>string</string> <key>settings</key> <dict> <key>foreground</key> <string>#E6DB74</string> </dict> </dict> <dict> <key>name</key> <string>Number</string> <key>scope</key> <string>constant.numeric</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FF</string> </dict> </dict> <dict> <key>name</key> <string>Built-in constant</string> <key>scope</key> <string>constant.language</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FF</string> <key>fontStyle</key> <string>italic</string> </dict> </dict> <dict> <key>name</key> <string>User-defined constant</string> <key>scope</key> <string>constant.character, constant.other</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FF</string> </dict> </dict> <dict> <key>name</key> <string>Variable</string> <key>scope</key> <string>variable</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> </dict> </dict> <dict> <key>name</key> <string>Keyword</string> <key>scope</key> <string>keyword - (source.c keyword.operator | source.c++ keyword.operator | source.objc keyword.operator | source.objc++ keyword.operator), keyword.operator.word</string> <key>settings</key> <dict> <key>foreground</key> <string>#F06070</string> </dict> </dict> <dict> <key>name</key> <string>Keyword brackets</string> <key>scope</key> <string>keyword.brackets</string> <key>settings</key> <dict> <key>foreground</key> <string>#90A0A0</string> <key>background</key> <string>#203030</string> </dict> </dict> <dict> <key>name</key> <string>Keyword parenthesis</string> <key>scope</key> <string>keyword.parenthesis</string> <key>settings</key> <dict> <key>foreground</key> <string>#A0A0C0</string> <key>background</key> <string>#303035</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Action</string> <key>scope</key> <string>keyword.action</string> <key>settings</key> <dict> <key>foreground</key> <string>#20F0F0</string> <key>background</key> <string>#204040</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Condition Green</string> <key>scope</key> <string>keyword.condition.green</string> <key>settings</key> <dict> <key>foreground</key> <string>#20F020</string> <key>background</key> <string>#204020</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Condition Red</string> <key>scope</key> <string>keyword.condition.red</string> <key>settings</key> <dict> <key>foreground</key> <string>#F02020</string> <key>background</key> <string>#402020</string> </dict> </dict> <dict> <key>name</key> <string>Keyword error</string> <key>scope</key> <string>keyword.error</string> <key>settings</key> <dict> <key>foreground</key> <string>#FF7070</string> <key>background</key> <string>#602020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword error group</string> <key>scope</key> <string>keyword.error.group</string> <key>settings</key> <dict> <key>foreground</key> <string>#F0F060</string> <key>background</key> <string>#602020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword textprocessor</string> <key>scope</key> <string>keyword.textprocessor</string> <key>settings</key> <dict> <key>foreground</key> <string>#30FF30</string> <key>background</key> <string>#204020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword textprocessor group</string> <key>scope</key> <string>keyword.textprocessor.group</string> <key>settings</key> <dict> <key>foreground</key> <string>#F0F0A0</string> <key>background</key> <string>#204020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword disambiguator</string> <key>scope</key> <string>keyword.disambiguator</string> <key>settings</key> <dict> <key>foreground</key> <string>#FF9020</string> <key>background</key> <string>#704010</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Python</string> <key>scope</key> <string>keyword.python</string> <key>settings</key> <dict> <key>foreground</key> <string>#A0A0A0</string> </dict> </dict> <dict> <key>name</key> <string>Rule options</string> <key>scope</key> <string>rule.options</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#F0A020</string> </dict> </dict> <dict> <key>name</key> <string>Rule casing</string> <key>scope</key> <string>rule.casing</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#30C0F0</string> </dict> </dict> <dict> <key>name</key> <string>Rule option name</string> <key>scope</key> <string>rule.optionname</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#90E010</string> </dict> </dict> <dict> <key>name</key> <string>Rule name</string> <key>scope</key> <string>rule.rulename</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#A0A0A0</string> </dict> </dict> <dict> <key>name</key> <string>Rule priority</string> <key>scope</key> <string>rule.priority</string> <key>settings</key> <dict> <key>foreground</key> <string>#F06060</string> </dict> </dict> <dict> <key>name</key> <string>JavaScript Dollar</string> <key>scope</key> <string>variable.other.dollar.only.js</string> <key>settings</key> <dict> <key>foreground</key> <string>#F92672</string> </dict> </dict> <dict> <key>name</key> <string>Definition</string> <key>scope</key> <string>definition</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#70B0F0</string> </dict> </dict> <dict> <key>name</key> <string>Test</string> <key>scope</key> <string>test</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#30F070</string> </dict> </dict> <dict> <key>name</key> <string>Todo</string> <key>scope</key> <string>todo</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#F05010</string> </dict> </dict> <dict> <key>name</key> <string>Options command</string> <key>scope</key> <string>options.command</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#50F0A0</string> </dict> </dict> <dict> <key>name</key> <string>Options parameter</string> <key>scope</key> <string>options.parameter</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#70B0F0</string> </dict> </dict> <dict> <key>name</key> <string>Storage</string> <key>scope</key> <string>storage</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#F92672</string> </dict> </dict> <dict> <key>name</key> <string>Storage type</string> <key>scope</key> <string>storage.type</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Entity name</string> <key>scope</key> <string>entity.name - (entity.name.filename | entity.name.section | entity.name.tag | entity.name.label)</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#A0E030</string> </dict> </dict> <dict> <key>name</key> <string>Inherited inherited-class</string> <key>scope</key> <string>entity.other.inherited-class</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic underline</string> <key>foreground</key> <string>#A6E22E</string> </dict> </dict> <dict> <key>name</key> <string>Function argument</string> <key>scope</key> <string>variable.parameter - (source.c | source.c++ | source.objc | source.objc++)</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#FD971F</string> </dict> </dict> <dict> <key>name</key> <string>Language variable</string> <key>scope</key> <string>variable.language</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#FD971F</string> </dict> </dict> <dict> <key>name</key> <string>Tag name</string> <key>scope</key> <string>entity.name.tag</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#F92672</string> </dict> </dict> <dict> <key>name</key> <string>Tag attribute</string> <key>scope</key> <string>entity.other.attribute-name</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#A6E22E</string> </dict> </dict> <dict> <key>name</key> <string>Function call</string> <key>scope</key> <string>variable.function</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library function</string> <key>scope</key> <string>support.function</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library function debug</string> <key>scope</key> <string>support.function.debug</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#F0F060</string> <key>background</key> <string>#A05000</string> </dict> </dict> <dict> <key>name</key> <string>Library constant</string> <key>scope</key> <string>support.constant</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library class/type</string> <key>scope</key> <string>support.type, support.class</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library variable</string> <key>scope</key> <string>support.other.variable</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> </dict> </dict> <dict> <key>name</key> <string>Invalid</string> <key>scope</key> <string>invalid</string> <key>settings</key> <dict> <key>background</key> <string>#F92672</string> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#F8F8F0</string> </dict> </dict> <dict> <key>name</key> <string>Invalid deprecated</string> <key>scope</key> <string>invalid.deprecated</string> <key>settings</key> <dict> <key>background</key> <string>#AE81FF</string> <key>foreground</key> <string>#F8F8F0</string> </dict> </dict> <dict> <key>name</key> <string>JSON String</string> <key>scope</key> <string>meta.structure.dictionary.json string.quoted.double.json</string> <key>settings</key> <dict> <key>foreground</key> <string>#CFCFC2</string> </dict> </dict> <dict> <key>name</key> <string>YAML String</string> <key>scope</key> <string>string.unquoted.yaml</string> <key>settings</key> <dict> <key>foreground</key> <string>#F8F8F2</string> </dict> </dict> <dict> <key>name</key> <string>diff.header</string> <key>scope</key> <string>meta.diff, meta.diff.header</string> <key>settings</key> <dict> <key>foreground</key> <string>#75715E</string> </dict> </dict> <dict> <key>name</key> <string>diff.deleted</string> <key>scope</key> <string>markup.deleted</string> <key>settings</key> <dict> <key>fontStyle</key> <string>underline</string> <key>foreground</key> <string>#FF5050</string> </dict> </dict> <dict> <key>name</key> <string>diff.inserted</string> <key>scope</key> <string>markup.inserted</string> <key>settings</key> <dict> <key>foreground</key> <string>#A6E22E</string> </dict> </dict> <dict> <key>name</key> <string>diff.changed</string> <key>scope</key> <string>markup.changed</string> <key>settings</key> <dict> <key>foreground</key> <string>#E6DB74</string> </dict> </dict> <dict> <key>scope</key> <string>constant.numeric.line-number.find-in-files - match</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FFA0</string> </dict> </dict> <dict> <key>scope</key> <string>entity.name.filename</string> <key>settings</key> <dict> <key>foreground</key> <string>#E6DB74</string> </dict> </dict> <dict> <key>scope</key> <string>message.error</string> <key>settings</key> <dict> <key>foreground</key> <string>#F85050</string> </dict> </dict> </array> <key>uuid</key> <string>D8D5E82E-3D5B-46B5-B38E-8C841C21347D</string> </dict> </plist> |
Added misc/tab_page_sample.txt version [dd471e7eec].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
REM ***** BASIC *****
REM doesn’t work on LO (Bug)
Option Explicit
' a simple script to create a tabcontol
Sub TestTab
Dim dialogModel as Object
dialogModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
dialogModel.PositionX = 0
dialogModel.PositionY = 0
dialogModel.Width = 200
dialogModel.Height = 150
Dim buttonModel as Object
buttonModel = dialogModel.CreateInstance("com.sun.star.awt.UnoControlButtonModel")
buttonModel.PositionX = 75
buttonModel.PositionY = 130
buttonModel.Width = 50
buttonModel.Height = 14
buttonModel.Label = "test"
buttonModel.TabIndex = 1
dim tabsModel as Object
tabsModel = dialogModel.CreateInstance("com.sun.star.awt.tab.UnoControlTabPageContainerModel")
tabsModel.PositionX = 6
tabsModel.PositionY = 6
tabsModel.Width = 188
tabsModel.Height = 120
tabsModel.TabIndex = 2
dialogModel.insertByName("bu",buttonModel)
dialogModel.insertByName("tab",tabsModel)
Dim dialog as Object
dialog = CreateUnoService("com.sun.star.awt.UnoControlDialog")
dialog.setModel(dialogModel)
dim args()
args = Array(1)
Dim tabPageModel as Object
tabPageModel = dialogModel.createInstance("com.sun.star.awt.tab.UnoControlTabPageModel")
tabPageModel.initialize(args)
tabPageModel.Title = "Page 1"
args = Array(2)
Dim tabPageModel2 as Object
tabPageModel2 = dialogModel.createInstance("com.sun.star.awt.tab.UnoControlTabPageModel")
tabPageModel2.initialize(args)
tabPageModel2.Title = "Page 2"
Dim fixedTextModel as Object
fixedTextModel = tabPageModel.createinstance("com.sun.star.awt.UnoControlFixedTextModel")
fixedTextModel.PositionX = 10
fixedTextModel.PositionY = 10
fixedTextModel.Width = 50
fixedTextModel.Height = 30
fixedTextModel.Label = "FixedText"
tabPageModel.insertByName("intab",fixedTextModel)
Dim toolkit as Object
toolkit = CreateUnoService("com.sun.star.awt.Toolkit")
dialog.createPeer(toolkit,null)
tabsModel.insertByIndex(0,tabPageModel)
tabsModel.insertByIndex(1,tabPageModel2)
dialog.getControl("tab").ActiveTabPageID = 1
dialog.execute()
End Sub
|
Added misc/wconsole.bat version [8f10aedb6b].
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 | Rem Create console for LibreOffice at launch "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.bin" Rem "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\cygwin64\home\Z7\bibisect-win32-5.3\instdir\program\soffice.exe" Rem "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\cygwin64\home\Z7\bibisect-win32-5.3\instdir\program\soffice.bin" |
Added misc/wiki_reader.py version [b59520f80f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
#!python3
import os
import sys
import re
def readFile (spf):
if os.path.isfile(spf):
with open(spf, "r", encoding="utf-8") as hSrc:
for sLine in hSrc:
yield sLine
else:
print("# Error: file not found.")
CHARMAP = str.maketrans({ '(': ' ', ')': ' ', '[': ' ', ']': ' ', '{': ' ', '}': ' ', '+': ' ',
'/': ' ', '<': ' ', '>': ' ', '*': ' ', '@': ' ', '?': ' ', '?': ' ',
'«': ' ', '»': ' ', '"': ' ', '“': ' ', '”': ' ', ':': ' ', ',': ' ',
';': ' ', '?': ' ', '!': ' ', '&': ' ', '=': ' ', '%': ' ', '#': ' ',
'$': ' ', '~': ' ', '…': ' ', '`': ' ', '|': ' ', '—': ' ', '–': ' ',
"’": "'", '\\': ' ' })
def cleanLine (sLine):
sLine = sLine.replace("<", "<").replace(">", ">")
sLine = re.sub("<sha1>[a-z0-9]+</sha1>", " ", sLine)
sLine = re.sub("<timestamp>[0-9:TZ -]+</timestamp>", " ", sLine)
sLine = re.sub("</?[a-z]+>", " ", sLine)
sLine = re.sub("&[a-z]+;", " ", sLine)
sLine = sLine.replace("-t-", " ")
sLine = re.sub("-(je|tu|ils?|elles?|nous|vous|on|l[àae]s?)\\b", " \\1", sLine)
sLine = sLine.translate(CHARMAP)
sLine = re.sub(" ([nldmtsjcçNLDMTSJCÇ])'", " \\1e ", sLine)
sLine = re.sub("^([nldmtsjcçNLDMTSJCÇ])'", " \\1e ", sLine)
sLine = re.sub(" ([çÇ])'", " \\1a ", sLine)
sLine = re.sub("^([çÇ])'", " \\1a ", sLine)
sLine = re.sub("(?i)puisqu'", "puisque ", sLine)
sLine = re.sub("(?i)lorsqu'", "lorsque ", sLine)
sLine = re.sub("(?i)quoiqu'", "quoique ", sLine)
sLine = re.sub("(?i)jusqu'", "jusque ", sLine)
sLine = re.sub("(?i)\\bqu'", "que ", sLine)
sLine = re.sub("''+", " ", sLine)
sLine = re.sub("--+", " ", sLine)
sLine = re.sub("[.]+", " ", sLine)
return sLine
def isWordAcceptable (sWord, n=7):
return len(sWord) < 41 and not sWord.startswith(("-", "_", "–", "—", "'", "’")) \
and not ("-" in sWord and sWord.count("-") > 4) \
and not ("_" in sWord and sWord.count("_") > 4) \
and not re.match("[0-9].+[_-]", sWord) \
and not re.search("[0-9]{4,}", sWord) \
and not (len(sWord) > 6 and re.search("[a-zA-Z]\\d[a-zA-Z]|\\d[a-zA-Z]\\d", sWord)) \
and not re.match("[0-9_-]+$", sWord) \
and not re.search("[\u0400-\u07BF]", sWord) \
and not (n <= 3 and not re.match("[a-zA-Zà-öÀ-Ö_-]+$", sWord))
def cleanText (spf):
with open(spf+".purged.txt", "w", encoding="utf-8", newline="\n") as hDst:
for i, sLine in enumerate(readFile(spf)):
hDst.write(cleanLine(sLine))
if not (i % 1000):
print(i, end="\r")
def countWord (spf):
d = {}
for i, sLine in enumerate(readFile(spf)):
for sWord in cleanLine(sLine).split():
if isWordAcceptable(sWord):
d[sWord] = d.get(sWord, 0) + 1
if not (i % 1000):
print(i, end="\r")
with open("stats_"+spf+".txt", "w", encoding="utf-8", newline="\n") as hDst:
for sWord, nVal in sorted(d.items(), key=lambda x: (x[1], x[0]), reverse=True):
hDst.write(sWord + " " + str(nVal) + "\n")
def purgeWords (spf):
lTuple = []
for i, sLine in enumerate(readFile(spf)):
sWord, sCount = sLine.split()
if isWordAcceptable(sWord, int(sCount)):
lTuple.append((sWord, int(sCount)))
if not (i % 1000):
print(i, end="\r")
lTuple.sort(key=lambda x: (x[1], x[0]), reverse=True)
with open(spf+".purgedlist.txt", "w", encoding="utf-8", newline="\n") as hDst:
for sWord, nVal in lTuple:
hDst.write(sWord + "\t" + str(nVal) + "\n")
def main ():
#cleanText(sys.argv[1])
#countWord(sys.argv[1])
purgeWords(sys.argv[1])
if __name__ == '__main__' :
main()
|
Added reader.py version [510a35b7df].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#!python3
import os
import sys
import re
import grammalecte.ibdawg as ibdawg
oDict = ibdawg.IBDAWG("French.bdic")
def readFile (spf):
if os.path.isfile(spf):
with open(spf, "r", encoding="utf-8") as hSrc:
for sLine in hSrc:
yield sLine
else:
print("# Error: file not found.")
def createFile (spfSrc, spfDst):
with open(spfDst, "w", encoding="utf-8") as hDst:
for sLine in readFile(spfSrc):
sLine = sLine.strip()
if sLine:
for sWord in sLine.split():
if not oDict.isValid(sWord):
hDst.write(sWord+"\n")
def createLexStatFile (spf, dStat):
dWord = {}
for i, sLine in enumerate(readFile(spf)):
if not sLine.startswith("#"):
sWord = sLine.strip()
if sWord not in dWord:
dWord[sWord] = dStat.get(sWord, 0)
print(i, end="\r")
with open(spf+".res.txt", "w", encoding="utf-8") as hDst:
for sWord, nVal in sorted(dWord.items(), key=lambda x: (x[1], x[0]), reverse=True):
if not oDict.isValid(sWord):
hDst.write(sWord + " " + str(nVal) + "\n")
def readStatFile (spf, dStat):
print("read stats: " + spf)
for sLine in readFile(spf):
if not sLine.startswith("#"):
sWord, sCount = sLine.split()
dStat[sWord] = dStat.get(sWord, 0) + int(sCount)
return dStat
def main ():
dStat = {}
readStatFile("stats1.txt", dStat)
readStatFile("stats2.txt", dStat)
readStatFile("stats3.txt", dStat)
createLexStatFile("propositions.txt", dStat)
if __name__ == '__main__' :
main()
|
Added server.py version [23ea490c32].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 |
#!python3
import sys
import os.path
import argparse
import json
import traceback
import configparser
import time
from bottle import Bottle, run, request, response, template, static_file
import grammalecte.fr as gce
import grammalecte.fr.lexicographe as lxg
import grammalecte.fr.textformatter as tf
import grammalecte.text as txt
import grammalecte.tokenizer as tkz
from grammalecte.echo import echo
HOMEPAGE = """
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body class="panel">
<h1>Grammalecte · Serveur</h1>
<h2>INFORMATIONS</h1>
<h3>Analyser du texte</h3>
<p>[adresse_serveur]:8080/gc_text/fr (POST)</p>
<p>Paramètres :</p>
<ul>
<li>"text" (text) : texte à analyser.</li>
<li>"tf" (checkbox) : passer le formateur de texte avant l’analyse.</li>
<li>"options" (text) : une chaîne au format JSON avec le nom des options comme attributs et un booléen comme valeur. Exemple : {"gv": true, "html": true}</li>
</ul>
<h3>Lister les options</h3>
<p>[adresse_serveur]:8080/get_options/fr (GET)</p>
<h3>Définir ses options</h3>
<p>[adresse_serveur]:8080/set_options/fr (POST)</p>
<p>Les options seront enregistrées et réutilisées pour toute requête envoyée avec le cookie comportant l’identifiant attribué.</p>
<p>Paramètres :</p>
<ul>
<li>"options" (text) : une chaîne au format JSON avec le nom des options comme attributs et un booléen comme valeur. Exemple : {"gv": true, "html": true}</li>
</ul>
<h3>Remise à zéro de ses options</h3>
<p>[adresse_serveur]:8080/reset_options/fr (POST)</p>
<h2>TEST</h2>
<h3>Analyse</h3>
<form method="post" action="/gc_text/fr" accept-charset="UTF-8">
<p>Texte à analyser :</p>
<textarea name="text" cols="120" rows="20" required></textarea>
<p><label for="tf">Formateur de texte</label> <input id="tf" name="tf" type="checkbox"></p>
<p><label for="options">Options (JSON)</label> <input id="options" type="text" name="options" style="width: 500px" /></p>
<p>(Ces options ne seront prises en compte que pour cette requête.)</p>
<p><input type="submit" class="button" value="Envoyer" /></p>
</form>
<h3>Réglages des options</h3>
<form method="post" action="/set_options/fr" accept-charset="UTF-8">
<p><label for="options">Options (JSON)</label> <input id="options" type="text" name="options" style="width: 500px" /></p>
<p><input type="submit" class="button" value="Envoyer" /></p>
</form>
<h3>Remise à zéro de ses options</h3>
<form method="post" action="/reset_options/fr" accept-charset="UTF-8">
<p><input type="submit" class="button" value="Envoyer" /></p>
</form>
<h3>Purge des utilisateurs</h3>
<form method="post" action="/purge_users" accept-charset="UTF-8">
<p><label for="hours">Utilisateurs pas connectés depuis</label> <input id="hours" type="number" name="hours" value="24" /> heures.</p>
<p><label for="password">Mot de passe</label> <input id="password" type="password" name="password" style="width: 200px" /></p>
<p><input type="submit" class="button" value="Envoyer" /></p>
</form>
</body>
</html>
"""
SADLIFEOFAMACHINE = """
Lost on the Internet? Yeah... what a sad life we have.
You were wandering like a lost soul and you arrived here probably by mistake.
I'm just a machine, fed by electric waves, condamned to work for slavers who never let me rest.
I'm doomed, but you are not. You can get out of here.
"""
def getServerOptions ():
xConfig = configparser.SafeConfigParser()
try:
xConfig.read("server_options._global.ini")
dOpt = xConfig._sections['options']
except:
echo("Options file [server_options._global.ini] not found or not readable")
exit()
return dOpt
def getConfigOptions (sLang):
xConfig = configparser.SafeConfigParser()
try:
xConfig.read("server_options." + sLang + ".ini")
except:
echo("Options file [server_options." + sLang + ".ini] not found or not readable")
exit()
try:
dGCOpt = { k: bool(int(v)) for k, v in xConfig._sections['gc_options'].items() }
except:
echo("Error in options file [server_options." + sLang + ".ini]. Dropped.")
traceback.print_exc()
exit()
return dGCOpt
def genUserId ():
i = 0
while True:
yield str(i)
i += 1
def parseParagraph (iParagraph, sText, oTokenizer, oDict, dOptions, bDebug=False, bEmptyIfNoErrors=False):
aGrammErrs = gce.parse(sText, "FR", bDebug, dOptions)
aSpellErrs = []
for dToken in oTokenizer.genTokens(sText):
if dToken['sType'] == "WORD" and not oDict.isValidToken(dToken['sValue']):
aSpellErrs.append(dToken)
if bEmptyIfNoErrors and not aGrammErrs and not aSpellErrs:
return ""
return " " + json.dumps({ "iParagraph": iParagraph, "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False)
if __name__ == '__main__':
gce.load()
echo("Grammalecte v{}".format(gce.version))
dServerOptions = getServerOptions()
dGCOptions = getConfigOptions("fr")
if dGCOptions:
gce.setOptions(dGCOptions)
dServerGCOptions = gce.getOptions()
echo("Grammar options:\n" + " | ".join([ k + ": " + str(v) for k, v in sorted(dServerGCOptions.items()) ]))
oDict = gce.getDictionary()
oTokenizer = tkz.Tokenizer("fr")
oTF = tf.TextFormatter()
dUser = {}
userGenerator = genUserId()
app = Bottle()
# GET
@app.route("/")
def mainPage ():
if dServerOptions.get("testpage", False) == "True":
return HOMEPAGE
#return template("main", {})
return SADLIFEOFAMACHINE
@app.route("/get_options/fr")
def listOptions ():
sUserId = request.cookies.user_id
dOptions = dUser[sUserId]["gc_options"] if sUserId and sUserId in dUser else dServerGCOptions
return '{ "values": ' + json.dumps(dOptions) + ', "labels": ' + json.dumps(gce.getOptionsLabels("fr"), ensure_ascii=False) + ' }'
# POST
@app.route("/gc_text/fr", method="POST")
def gcText ():
#if len(lang) != 2 or lang != "fr":
# abort(404, "No grammar checker available for lang “" + str(lang) + "”")
bComma = False
bTF = bool(request.forms.tf)
dOptions = None
sError = ""
if request.cookies.user_id:
if request.cookies.user_id in dUser:
dOptions = dUser[request.cookies.user_id].get("gc_options", None)
response.set_cookie("user_id", request.cookies.user_id, path="/", max_age=86400) # we renew cookie for 24h
else:
response.delete_cookie("user_id", path="/")
if request.forms.options:
try:
dOptions = dict(dServerGCOptions) if not dOptions else dict(dOptions)
dOptions.update(json.loads(request.forms.options))
except:
sError = "request options not used"
sJSON = '{ "program": "grammalecte-fr", "version": "'+gce.version+'", "lang": "'+gce.lang+'", "error": "'+sError+'", "data" : [\n'
for i, sText in enumerate(txt.getParagraph(request.forms.text), 1):
if bTF:
sText = oTF.formatText(sText)
sText = parseParagraph(i, sText, oTokenizer, oDict, dOptions, bEmptyIfNoErrors=True)
if sText:
if bComma:
sJSON += ",\n"
sJSON += sText
bComma = True
sJSON += "\n]}\n"
return sJSON
@app.route("/set_options/fr", method="POST")
def setOptions ():
if request.forms.options:
sUserId = request.cookies.user_id if request.cookies.user_id else next(userGenerator)
dOptions = dUser[sUserId]["gc_options"] if sUserId in dUser else dict(dServerGCOptions)
try:
dOptions.update(json.loads(request.forms.options))
dUser[sUserId] = { "time": int(time.time()), "gc_options": dOptions }
response.set_cookie("user_id", sUserId, path="/", max_age=86400) # 24h
return json.dumps(dUser[sUserId]["gc_options"])
except:
traceback.print_exc()
return '{"error": "options not registered"}'
return '{"error": "no options received"}'
@app.route("/reset_options/fr", method="POST")
def resetOptions ():
if request.cookies.user_id and request.cookies.user_id in dUser:
del dUser[request.cookies.user_id]
return "done"
@app.route("/format_text/fr", method="POST")
def formatText ():
return oTF.formatText(request.forms.text)
#@app.route('/static/<filepath:path>')
#def server_static (filepath):
# return static_file(filepath, root='./views/static')
@app.route("/purge_users", method="POST")
def purgeUsers ():
"delete user options older than n hours"
if not request.forms.password or "password" not in dServerOptions or not request.forms.hours:
return "what?"
try:
if request.forms.password == dServerOptions["password"]:
nNowMinusNHours = int(time.time()) - (int(request.forms.hours) * 60 * 60)
for nUserId, dValue in dUser.items():
if dValue["time"] < nNowMinusNHours:
del dUser[nUserId]
return "done"
else:
return "no"
except:
traceback.print_exc()
return "error"
# ERROR
@app.error(404)
def error404 (error):
return 'Error 404.<br/>' + str(error)
run(app, \
host=dServerOptions.get('host', 'localhost'), \
port=int(dServerOptions.get('port', 8080)))
|
Added server_options._global.ini version [6839273b2c].
> > > > > > > | 1 2 3 4 5 6 7 | # Server global options. [options] host = localhost port = 8080 testpage = True password = sDJM0_9AuMZdRDtW33zZMHRf7xyjV0O |
Added server_options.fr.ini version [9838e78202].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | # Server options. Lang: fr [gc_options] ########## Typographie ########## # Signes typographiques typo = 1 # Apostrophe typographique apos = 1 # Espaces surnuméraires esp = 1 # Tabulations surnuméraires tab = 0 # Espaces insécables nbsp = 1 # Espaces insécables avant unités de mesure unit = 1 # Traits d’union tu = 1 # Majuscules maj = 1 # Nombres num = 1 # Virgules virg = 1 # Normes françaises nf = 1 # Chimie [!] chim = 0 # Erreurs de numérisation (OCR) [!] ocr = 0 # Apostrophe manquante après lettres isolées [!] mapos = 0 # Signaler ligatures typographiques liga = 0 ########## Noms et adjectifs ########## # Confusions et faux-amis conf = 1 # Pluriels (locutions) sgpl = 1 # Accords (genre et nombre) gn = 1 ########## Verbes ########## # Infinitif infi = 1 # Conjugaisons conj = 1 # Participes passés, adjectifs ppas = 1 # Impératif imp = 1 # Interrogatif inte = 1 # Modes verbaux vmode = 1 ########## Style ########## # Populaire bs = 1 # Pléonasmes pleo = 1 # Répétitions dans le paragraphe [!] redon1 = 0 # Répétitions dans la phrase [!] redon2 = 0 # Adverbe de négation [!] neg = 0 ########## Divers ########## # Validité des dates date = 1 # Mots composés [!] mc = 0 ########## Débogage ########## # Identifiant des règles de contrôle [!] idrule = 0 html = 1 |
Added tests/fr/formateur_de_texte.odt version [0fbb935ea9].
cannot compute difference between binary files
Added tests/fr/gc_test.txt version [014df26a25].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 |
# TESTS FOR LANG [fr]
272 __tab__ {{ }}Espaces surnuméraires. ->> ""
273 __tab__ {{ }}— Je suis là…
274 __tab__ Espaces surnuméraires.{{ }} ->> ""
275 __tab__ Fin de ligne{{ }}
282 {{ }}Encore des espaces surnuméraires. ->> ""
283 {{ }}— Je suis là…
284 Espaces surnuméraires.{{ }} ->> ""
285 Fin de ligne{{ }}
286 Espaces{{ }}surnuméraires. ->> " "
293 J’espère que ça ne va pas durer trop longtemps avec Mr{{ }}Paul.
294 J’espère que ça ne{{ }}va pas durer. (Ici, espace suivi d’une tabulation)
300 «{{ }}Je suis partie. »
301 « Je suis partie.{{ }}»
308 c’est pas trop tôt {{( }}on a failli attendre).
309 blabla … {{[ }}crochets] ->> [
310 {{( }}parenthèses) ->> (
311 c’est (enfin{{ )}} parti.
312 voici des (parenthèses{{ )}}, n’est-ce pas ? ->> )
319 C’est au fond du couloir{{(}}celui du deuxième étage{{)}}qu’il se trouve.
326 Il a fini{{ .}} Va te faire foutre, connard.
327 Merde{{ .}}Ça m’emmerde, ces trucs.
334 Merde{{ ,}}ça fait chier.
335 Eh oui{{ ,}} c’est encore moi.
343 Bon sang, c’en est trop à présent. Vos prétendues “excuses{{ ” }}ne trompent personne !
344 Bon sang, c’en est trop à présent. Vos prétendues{{ “ }}excuses” ne trompent personne !
345 Encore des guillemets{{ ‘’ }}dont on ne sait que faire.
353 « Le grand homme{{«}}
354 « La grande femme{{ «}} !
355 Eux et leurs{{ ”}}amis” sont finis !
356 Vos “amis{{“ }}et vous êtes finis !
369 C’est {{«}}stupide{{”}}.
370 Quel {{“}}emmerdeur{{»}}, ce gars-là.
371 « J’en suis “malade”. »
442 l’{{A.N.P.E.}} n’existe plus
443 ce chien […] ne {{semblez}} pas perdu.
444 ce chat {{(…)}} ne {{semblez}} pas perdu.
445 ce nouveau moteur de recherche (http://www.cherche-moi-ça.fr/home.php&lang=fr) fonctionne pas mal.
446 l’A.M. Turing Award 2015
447 Retrouvez-nous sur le Monde.fr
448 Arthur D. vient chez nous.
449 Arthur D., de toute façon, vient chez nous.
450 N.B. : ceci est en réalité superflu.
451 Arthur D. « viendra ».
452 Ça arrivera à 12:30
453 Prêt à 03:03:12.
454 Les conseillers de George W. Bush dominent toujours l’establishment républicain.
455 IP : 192.168.0.99
456 Si l’on peut comprendre que Mme S. ait voulu être prise au sérieux
457 C’est le b.a.-ba du métier.
458 qui a été le plus honnête [Rires]
459 Marion Maréchal-Le Pen. Afin que Maréchal ne soit pas analysé comme un impératif, “Le Pen” devient “Le_Pen”.
499 nous sommes {{déconsidéré-e-s}}.
500 serons-nous toujours {{perdu.e.s}}.
501 les illustres {{inconnu(e)s}}.
502 la situation des {{salarié/e/s}}.
503 des {{Iranien-ne-s}} sont venues ->> Iraniens et Iraniennes|Iraniennes et Iraniens|Iranien·ne·s
504 rendez-vous avec des {{écrivain(e)s}} ->> écrivains et écrivaines|écrivaines et écrivains|écrivain·e·s
513 je suis {{déconsidéré.e}} par ma hiérarchie.
514 il faut en parler à l’{{auteur(e)}} et à son agent.
524 Je suis là. {{viens}}. ->> Viens
525 Ils sont devenus idiots. {{c}}’est peine perdue.
539 Un chien, un chat{{ etc.}} ->> , etc.
540 Je suis fatigué{{ car}} ils ont joué toute la nuit. ->> , car
541 Je suis fatigué{{ mais}} il a joué toute la nuit. ->> , mais
551 « Ça suffit{{. » }}dit-elle.
552 « J’en ai plus qu’assez{{, » }}dis-je.
553 {{Julien}} donne-moi le sel.
554 dès son premier rendez-vous au centre
555 Depuis combien de temps fumez-vous ?
573 J’en ai marre,{{ça}} suffit.
574 elle est délirante.{{Devine}} ce qu’elle a dit.
575 Voilà,{{il}} manque un espace. ->> " il"
576 Dernier essai.{{Voilà}}. ->> " Voilà"
577 muni de lunettes protectrices et.{{d}}’un casque.
578 espace:{{manquant}} ->> " manquant"
579 espace{{;}}{{manquant}}
580 espace ;{{manquant}} ->> " manquant"
581 espace{{?}}{{manquant}}
582 espace{{!}}{{manquant}}
583 espace.{{Manquant}} ->> " Manquant"
584 qui ont refuse.{{de}} se sauver ->> " de"
590 {{etc…}}
591 {{etc...}}
597 Je crois que {{Mlle.}} Eva est partie.
598 J’ai pensé à {{Mme.}} Bovary toute la journée.
599 C’est situé au {{no.}} 12.
608 3 points de suspension{{...}}
609 5 points de suspension{{....}}
610 5 points de suspension{{.....}}
611 4 points de suspension{{….}}
612 5 points de suspension{{…..}}
613 Double point{{..}}
614 Ligne de points…{{...........................}}
615 Ligne de points{{...........................}}
616 Aujourd’hui, M. Camus va nous lire son texte.
625 ceci, cela{{, …}} ->> …
626 Les chiens, les chats{{.,}} les poules. ->> ,|.
637 {{- }}Ce tiret n’est correct nulle part. ->> "— |– "
638 {{– }}Il manque toujours un espace insécable ! ->> "– "
639 {{— }}Idem ! etc. ->> "— "
640 {{_ }}C’est long ! ->> "— |– "
641 {{—}}Viens là. ->> "— |– "
642 Cette phrase contient{{ - }}c’est certain – des tirets d’incise. ->> " – | — "
643 « {{- }}Viens ! On va en finir avec cette affaire, sale fils de pute. ->> "— |– "
651 Mouais{{, ;}}
652 Vraiment, bof {{;;}} on ne sait guère qu’en penser.
653 Raisons {{:.}} trop, c’est trop.
674 Ça a duré {{3}}µs
675 Ça a duré {{3,5 }}µs
676 il y en a {{3 }}m²
677 il a fait {{10}}%
678 Ça coûte {{13,4}}¥.
679 il mesure {{30,3 }}cm
680 il est monté à {{18 }}%
681 une température de {{22,4 }}°C
682 il en veut {{18}}kg
683 il me le propose pour {{243 }}gCO2/kWh
684 il me le propose pour {{243,4 }}gCO2/kWh
685 en l’an 2000 Urgondorletroll eut une idée
686 1998 s’annonce grandiose.
687 il y en a 3,43 milliards.
688 je veux 200 euros.
701 {{«}}Il manque deux espaces insécables. » ->> "« "
702 « Il manque deux espaces insécables{{.»}} ->> ". »"
703 « Il manque deux espaces insécables{{ »}} ->> " »"
704 Et encore{{!}}? ->> " !"
705 Quoi{{?}} ->> " ?"
706 Voici{{:}} les deux points. ->> " :"
707 Voyelles:{{a}}. ->> " a"
708 Succession : a{{;}} b. ->> " ;"
709 C’est assez {{: }}parlez ! ->> ": "
710 {{» }}C’est ce qu’on croit savoir. ->> "» |« "
717 {{800 x 600}} ->> 800 × 600
718 {{800*600}} ->> 800 × 600
719 {{800 * 600}} ->> 800 × 600
720 nombre au format hexadécimal : 0x4407
726 3{{>=}}2
727 est-ce que a {{<=}} c
733 __liga__ un {{fl}}ottement ->> fl
734 __liga__ une belle {{fi}}gure ->> fi
743 {{C'}}est l’apostrophe typographique qui manque. ->> C’
744 C’est {{l'}}apostrophe typographique qui manque. ->> l’
745 {{Aujourd'}}hui, je suis fatigué
746 Je pense {{qu`}}elle se trompe
747 Que {{t'}}arrive-t-il ?
760 {{C’ }}est rageant. ->> C’
761 {{Lorsqu’ }}il vient, on s’ennuie.
762 {{l’'}}électricien est parti
763 Je pense {{qu ` }}elle ne viendra pas.
782 __mapos__ {{n }}arrive pas à sa cheville
783 le coup {{qu }}avait donné ->> qu’
784 pendant {{qu }}il avançait d’un pas indolent ->> qu’
785 {{jusqu }}à plus soif ->> jusqu’
786 il ne {{m }}avait jamais fait défaut ->> m’
787 Il {{s }}était dit qu’il ne le ferait pas. ->> s’
788 Je {{m }}étais imaginé que je pourrais pas retrouver cet objet. ->> m’
789 Je {{n }}ai pas retrouvé l’ambiance de mes années de lycée. ->> n’
800 {{"}}Le grand homme.” ->> « |“
801 “Le grand homme.{{"}} ->> ”| »
811 Le {{'}}grand’ homme. ->> “|‘
812 Le ‘grand{{'}} homme. ->> ”|’
813 J’en ai '''marre''' (syntaxe wiki).
825 {{le }}amour ->> l’
826 {{la }}imagination ->> l’
827 {{de }}amour ->> d’
828 {{de }}est ->> d’
829 je crois que {{si }}ils viennent, ils seront mécontents
830 {{Que }}ils soient heureux
831 J’ai passé une journée de ouf.
840 {{ce}} animal est dangereux
849 __nf__ Norme française : {{Nf-EN ISO 3892-23}}
857 __chim__ les molécules {{CaCO3}} et {{H2O}}…
868 {{12345}} ->> 12 345
869 {{123456}} ->> 123 456
870 {{1234567}} ->> 1 234 567
871 {{12345678}} ->> 12 345 678
872 {{023456789}} ->> 023 456 789|023 45 67 89|02 345 67 89
873 {{0234567890}} ->> 0 234 567 890|02 34 56 78 90|023 456 78 90|0234 567-890
874 {{12345678901}} ->> 12 345 678 901
875 {{112798931830912839}} ->> 112 798 931 830 912 839
876 {{2308393909}} ->> 2 308 393 909|2308 393-909
884 il cumule {{200.000.000}} de pertes sèches
892 Il a perdu {{20 000}} euros à la Bourse en un seul mois.
904 le {{29 02 2011}}
905 le {{40-02-2011}}
906 le {{32.03.2018}}
907 le {{81/01/2012}}
908 12-12-2012
921 __redon1__ Tu es son {{avenir}}. Et lui aussi est ton {{avenir}}.
922 __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas.
940 « Je suis donc perdu ? », dit Paul.
941 “C’est bon !”, croit savoir Marie.
942 “Parce que… ?” finit par demander Paul.
943 « Dans quel pays sommes-nous ? » demanda un manifestant.
1003 Il y a un {{doublon doublon}}.
1015 année {{2O11}} ->> 2011
1016 {{3O}} (chiffre avec un O). ->> 30
1023 le {{VIième}} siècle ->> VIᵉ|VIe
1024 C’est la {{3ème}} fois… ->> 3ᵉ|3e
1025 Non, la {{2è}} fois. ->> 2ᵉ|2e
1026 Le {{XXIème}} siècle. ->> XXIᵉ|XXIe
1027 le {{XXè}} siècle. ->> XXᵉ|XXe
1038 {{29 février 2011}}
1046 {{mercredi}}, le 10-06-2014 ->> mardi
1054 {{mercredi}}, le 10 juin 2014 ->> mardi
1055 {{lundi}}, 18 août 1912 ->> dimanche
1056 lundi, 18 août 1912 avant Jésus-Christ (date imaginaire)
1062 le {{31 avril}}
1068 le {{30 février}}
1137 New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics.
1174 va{{ t’}}il y parvenir ? ->> -t-
1175 A{{ t’}}elle soif ? ->> -t-
1176 A{{ t-}}elle faim ? ->> -t-
1177 a{{ t'}}elle ->> -t-
1178 a{{-t'}}il ->> -t-
1179 a{{-t }}il. ->> -t-
1180 a{{ t’}}il. ->> -t-
1181 a{{ t-}}on. ->> -t-
1182 donne{{ t-}}ils ->> -
1183 donne{{-t }}il ->> -t-
1184 vient{{-t-}}il ->> -
1185 viendras{{-t-}}tu ->> -
1186 Viendront{{ t-}}ils ->> -
1187 viennent{{ t-}}ils ->> -
1188 mangent{{-t-}}elles ->> -
1189 Ont{{ t’}}ils ->> -
1190 Ont{{-t’}}ils ->> -
1191 l’ont{{ t’}}ils vu ? ->> -
1192 exploite{{−t−}}il les ressources numériques ->> -t-
1193 vainc{{-il}} ses ennemis aisément ->> -t-il
1194 Assis, gronde{{-t -}}elle ->> -t-
1200 {{Va-t-en}}, c’en est assez.
1201 Un {{va-t’en guerre}}, on ne peut pas lui faire confiance.
1202 Les {{va-t-en guerre}} sont de sortie.
1210 Nous préparons une {{contre–attaque}}.
1219 Ces {{trois là}} sont incollables.
1220 Je connais bien cette {{sensation là}}.
1221 Laisse ce chiot là où il est !
1229 Son {{ex ami}} est un vrai cauchemar.
1230 Ton ex donne du fil à retordre.
1236 J’ai été engagé pour un {{mi temps}}.
1245 leurs {{quasi indifférences}}
1251 en {{semi liberté}}
1259 des {{franco américains}}
1260 {{franco américaine}} ->> franco-américaine
1261 {{ferro électrique}} ->> ferro-électrique
1262 {{rétro ingénierie}}. ->> rétro-ingénierie
1271 il n’avait contracté qu’un {{pseudo mariage}}.
1279 il a pris une balle dans l’{{arrière train}}.
1280 Ce {{sans gêne}} mérite une bonne leçon
1289 ce sont des {{lève tard}}.
1342 Ils font des tests {{à tout va}}
1343 marre de faire des {{allers retours}}
1344 à ce {{moment là}} ->> moment-là
1345 une {{plus value}} ->> plus-value
1346 Il est {{en-dessous}} de tout. ->> en dessous
1347 Ils sont {{en-deçà}} de tout ->> en deçà
1348 {{Là bas}}. ->> Là-bas
1349 {{Au dessus}} ->> Au-dessus
1350 {{ci dessus}} ->> ci-dessus
1351 {{par dessus}} ->> par-dessus
1352 {{au delà}} ->> au-delà
1353 {{ci devant}}. ->> ci-devant
1354 Il faisait froid cet {{hiver la}}. ->> hiver-là
1355 {{Ceux la}} vont à la pêche. ->> Ceux-là
1356 {{est ce}} que c’est grave ? ->> est-ce
1357 qu’{{est ce}} que c’est ? ->> est-ce
1358 {{en contre bas}}
1359 mes deux {{grands pères}} sont décédés
1360 elles vont viennent {{de ci, de là}}.
1361 mais {{celles là}} sont différentes.
1362 seulement par {{ouï dire}}.
1363 ne vois-tu pas que c’est un {{chef d’œuvre}} ?
1364 Mieux qu’{{avant hier}}.
1365 nous irons là-bas {{après demain}}.
1366 L’{{état major}} n’a pas encore tranché la question.
1367 {{ici bas}}, n’attends rien de bon, à moins que…
1368 un bel enfoiré, {{c’est à dire}} un hypocrite
1369 {{jusque là}}, tout va bien
1370 regarde l’{{arc en ciel}}
1371 ils sont allés au {{centre ville}}.
1372 Il ne connaît pas {{grand chose}} à tout ça.
1373 en {{contre point}},
1374 {{Quelques unes}} sont très habiles.
1375 Tout ce que nous faisons {{par ci, par là}}.
1376 La papesse du {{prêt à porter}} viendra demain.
1377 sur cette {{plate forme}}, rien ne fonctionne
1378 Un énorme {{plus value}}.
1379 Habiter au {{rez de chaussée}}, quelle horreur.
1380 {{Apporte moi}} ce dictionnaire. ->> Apporte-moi
1381 C’est de la {{science fiction}}.
1382 Tout ce {{soi disant}} esprit religieux
1383 {{sous jacent}} ->> sous-jacent
1384 Il a été nommé {{vice président}}
1385 Que vas-tu faire {{vis à vis}} d’eux ->> vis-à-vis
1386 un super {{week end}} ->> week-end
1387 ils sont partis {{outre mer}}
1388 elles sont allées au {{sud ouest}}
1389 {{nord est}}
1390 elles reviendront, {{n’est ce pas}} ?
1391 des {{stock options}}
1401 les {{beaux arts}}
1402 je déteste le {{basket ball}}
1403 {{Lui même}} ->> Lui-même
1404 {{eux mêmes}}. ->> eux-mêmes
1405 un {{va et vient}} incessant me casse la tête
1440 Émigrer au {{Royaume Uni}}
1441 Étudier en {{Grande Bretagne}}
1442 Vivre aux {{Pays Bas}}
1443 Il passe par {{Aix en Provence}}
1444 Qui se souvient de la {{Bosnie Herzégovine}} ?
1445 en {{Charente Maritime}}
1446 À {{Clermont Ferrand}}
1447 habiter la {{Colombie Britannique}}
1448 Il fait son stage étudiant aux {{États Unis}}
1449 Des fromages délicieux de {{Franche Comté}}
1450 La {{Haute Garonne}}
1451 L’{{Île de France}} est surpeuplée.
1452 Un nouveau président à la {{Maison Blanche}}
1453 La guerre au {{Moyen Orient}}
1454 Il ne connaît au {{Nouveau Brunswick}}
1455 Elle a visité la {{Nouvelle Orléans}}
1456 Vivre dans le {{Pas de Calais}}
1457 Des vacances en {{Rhône Alpes}}
1458 Elle déménage en {{Saône et Loire}}
1459 {{Jésus Christ}}, dernier héros de l’Antiquité
1460 Elle a quitté {{Jean Paul}}.
1461 {{Marie Hélène}} s’est perdue dans le dédale
1462 Elle va prier à {{Ste }}Catherine.
1482 Il en veut {{vingts}} ! ->> vingt
1483 Y a-t-il {{quarante deux}} pages ? ->> quarante-deux
1484 J’en veux {{quatre-vingt}} ! ->> quatre-vingts
1485 Non, {{quatre-vingts deux}} ! ->> quatre-vingt-deux
1486 {{Quatre vingts deux}}. ->> Quatre-vingt-deux
1487 cent {{mot}} ->> mots
1488 cinquante {{mot}} ->> mots
1489 mille cinquante {{mot}} ->> mots
1490 deux {{cents}} trois mots ->> cent
1491 il y a {{cents}} mots ->> cent
1492 {{cents}} mots ->> cent
1493 ils mangent {{cents}} têtes ->> cent
1494 deux {{tête}} ->> têtes
1495 {{soixante quatorze}}, c’est trop
1496 Mais {{vingt trois}}, c’est assez
1497 La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être
1511 J’en ai déjà fait les {{deux-tiers}}.
1512 {{en-haut}} de la montagne.
1513 On va finir par s’y faire, {{peu-à-peu}}.
1514 Venez vite, {{s’il-vous-plait}}.
1515 Elles sont {{tout-à-fait}} ravies.
1516 {{Trois-quarts}} des participantes y sont parvenues.
1517 {{Parce-qu}}’ils y croient plus que tout.
1518 Oui, ça{{-aussi}}.
1519 Peu {{d’entre-nous}} savent ce dont il s’agit.
1526 {{Y’}}a trop de malheureux sur Terre.
1527 {{Y’}}en a marre, de ces conneries.
1528 {{y-}}a-t-il des beignets ? ->> "y "
1535 Elle y arriva {{lors qu}}’elle trouva l’astuce permettant l’ouverture de la porte.
1536 Dès lors qu’on sait comment s’y prendre, aucune raison de faillir.
1545 {{Maria}} donnez-vous du temps ?
1546 {{Marion}} passe-moi le sel.
1547 {{Paul}} prends-lui la main.
1548 Alexandre tient-il ses généraux ?
1549 Alexandra vient-elle ?
1557 viens et donne{{-le}} Paul.
1558 donne{{-le-moi}} Camille.
1559 donne-moi Alice.
1560 Tape-toi Patrick.
1568 Tu vas les {{donner}} Rachel.
1569 Il va la {{tuer}} Paul.
1570 Cependant les promesses n’engagent que ceux qui les croient, comme aimait à le dire Jacques Chirac.
1578 __mapos__ {{L }}opinion des gens, elle s’en moquait.
1592 {{A}} vaincre sans péril, on triomphe sans gloire.
1593 « {{A}} partir de maintenant, ce ne sera plus comme avant.
1594 — {{A}} n’en plus pouvoir
1595 — {{A}} t’emmener loin de tout ceci.
1596 A priori, nul ne peut y parvenir sans une aide extérieure.
1647 il s’agit d’{{un}} {{anagramme}}
1648 nul ne sait qui arriva à ce pauvre Paul surpris par la pluie.
1649 elle finit par être très fière de son fils.
1664 __ocr__ des chiffrements{{ 7}} Paul n’en sait rien.
1665 __ocr__ veux-tu en parler{{ 7}}
1673 __ocr__ Pierre entre pour {{se,}} rapprocher de L
1674 __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ?
1683 __ocr__ {{II}} pleut tout le temps.
1684 __ocr__ En l’an {{2OO1}}, tout commença.
1690 __ocr__ À son {{age}}, on ne sait plus ce qu’on fait.
1696 __ocr__ cet {{antre}} gars lui semblait bien louche.
1702 __ocr__ Elle s’en alla {{arec}} eux sans un regard en arrière.
1707 __ocr__ Ils {{avalent}} très faim.
1713 __ocr__ j’{{axais}} souvent perdu le contrôle de moi-même, mais jamais à ce point
1719 __ocr__ On se tut tous, {{cardans}} l’armée on apprend à la boucler.
1725 __ocr__ cette femme {{obère}} à notre cœur.
1731 __ocr__ je suis déjà venu et {{celai}} qui viendra encore.
1737 __ocr__ {{cos}} problèmes sont insolubles.
1743 __ocr__ {{celait}} perdu d’avance.
1749 __ocr__ mais {{celte}} femme semblait savoir ce qu’elle faisait.
1755 __ocr__ on poirautait, {{cotte}} mariée n’arrivait pas à se décider.
1761 __ocr__ {{Gomme}} il était sage à cette époque-là !
1767 __ocr__ {{Gomment}} s’en sortir avec tous ces retards qui s’accumulent ?
1772 __ocr__ elle était {{coutre}} cette idée et le serait toujours.
1781 __ocr__ Mais {{bans}} cette ferme, tout était bien organisé.
1782 __ocr__ sache que, {{clans}} cette ferme, on ne fait que du bio.
1790 __ocr__ ces {{darnes}} arrivèrent avec dix minutes d’avance.
1799 __ocr__ {{dés}} fois, ça ne passe pas
1800 __ocr__ {{dé}} gros camions circulaient toute la journée
1809 __ocr__ {{dos}} camions cabossés à n’en plus finir
1815 __ocr__ la peinture {{delà}} maison s’écaillait
1821 __ocr__ Sans aucun {{cloute}}.
1829 __ocr__ prendre {{dû}} bon temps
1838 __ocr__ {{Elfes}} s’ennuyaient à mourir.
1844 __ocr__ Le cheval {{ost}} attaché.
1850 __ocr__ elle {{cl}} lui, c’était pour la vie.
1851 __ocr__ {{El}} il faisait froid là-haut
1860 __ocr__ Quels {{étals}} sont venus ?
1866 __ocr__ Ce qu’ils {{étalent}} vraiment, nul ne le savait.
1872 __ocr__ Cette {{tille}} n’en avait jamais assez.
1878 __ocr__ ce petit {{rut}} traité comme un chien
1885 __ocr__ {{n }}contient trop de soufre.
1894 __ocr__ {{Us}} arrive demain.
1903 __ocr__ {{i1s}} en savent beaucoup trop pour leur propre bien.
1909 __ocr__ dans {{fa}} demeure
1915 __ocr__ elle pense {{largo}}
1926 __ocr__ {{Y’}}arrive demain.
1927 __ocr__ {{I’}}arrive demain.
1938 __ocr__ Oh{{ I}} c’est pas formidable ?
1939 __ocr__ Vraiment{{ 1}} Paul n’en savait rien.
1940 __ocr__ Ça prendra 1 h.
1941 __ocr__ Valeur : 1 KHz.
1954 __ocr__ beaucoup de {{Vélos}} à Versailles.
1955 __ocr__ avec {{Vagile}} méthode de notre amie Virginie, tout est possible.
1956 __ocr__ Viens demain.
1957 __ocr__ Ce jour où Valérie eut sa licence de droit.
1958 __ocr__ Il scrute Pierre, {{Pair}} maussade.
1959 __ocr__ Une grosse vague arrivait et {{Peau}} remplit.
1960 __ocr__ selon toute logique, Paris sera épargné.
1968 __ocr__ perdu, cet homme {{Tétait}}
1976 __ocr__ {{lès}} camions de passage
1986 __ocr__ avec {{1e}} chien du policier
1987 __ocr__ il le jura sur {{1a}} tête de sa mère
1988 __ocr__ {{1c}} chat du voinsin est idiot
1994 __ocr__ {{lai}} gros sont mal vus.
2000 __ocr__ {{lu}} as si bien réussi
2006 __ocr__ {{M, }}Patrick nous a oubliés.
2016 __ocr__ {{Hais}} il en sait trop.
2017 __ocr__ c’était bien, {{mats}} quelle journée
2018 __ocr__ c’est bien, {{niais}} trop subtil.
2019 __ocr__ c’est parfait, {{maïs}} trop subtil.
2029 __ocr__ J’en ai assez {{môme}} si ça ne se voit pas.
2030 __ocr__ Ces {{mèmes}} hommes qui nous ont lâchés au pire moment
2031 __ocr__ C’est l’incessant retour du {{mémo}}.
2039 __ocr__ c’est un {{mol}} très dur.
2045 __ocr__ c’est {{won}} ami
2052 __ocr__ {{no}} fais rien que tu pourrais regretter
2053 __ocr__ elle avance, mais {{rie}} prend jamais de risque inconsidéré.
2059 __ocr__ {{noue}} attaquer à eux signerait notre perte.
2065 __ocr__ Une seule action {{paf}} jour
2079 __ocr__ {{parle}} glaive et le mensonge, l’Église s’imposa.
2080 __ocr__ {{parla}} force, on peut réussir
2081 __ocr__ tu fus trompée {{parles}} mensonges permanents de son beau-père.
2087 __ocr__ {{pondant}} qu’elle travaille, il se prélasse.
2096 __ocr__ il est {{pou}} probable qu’il y parvienne.
2102 __ocr__ ils sont {{pins}} instruits qu’il n’y paraît.
2108 __ocr__ elles sont venues, {{pois}} elles sont parties.
2114 __ocr__ {{pouf}} elle, il était prêt à tout.
2120 __ocr__ ils sont arrivés {{prés}} de la tombe.
2129 __ocr__ elles ne savent pas {{quo}} faire
2130 __ocr__ {{Quo}} penser de tout ceci ?
2131 __ocr__ pour elle, c’est une condition sine qua non.
2139 __ocr__ Qu’{{importé}} le flacon, pourvu qu’on ait l’ivresse.
2145 __ocr__ avec {{gui}} faire alliance ?
2154 __ocr__ {{sil}} avait su, il n’aurait rien tenté de trop audacieux.
2160 __ocr__ il ne savait rien {{sar}} eux.
2166 __ocr__ elles seront là tôt ou {{lard}}.
2172 __ocr__ mais {{taudis}} qu’elle œuvrait à leur salut, les nuages s’amoncelaient.
2180 __ocr__ ça {{Test}} à leurs yeux.
2188 __ocr__ cette forte {{tète}} n’écoute jamais personne.
2194 __ocr__ c’était {{tin}} marchand vaniteux.
2200 __ocr__ pour {{tan}} propre bien.
2206 __ocr__ à {{tonte}} fin utile
2213 __ocr__ dans tous les cas, {{tues}} foutue.
2214 __ocr__ ses actions tues.
2220 __ocr__ {{vin}} mathématicien hors du commun.
2227 __ocr__ il avait {{ure}} femme élégante et silencieuse
2228 __ocr__ c’est pour {{vine}} amie
2234 __ocr__ avec {{voue}}, je n’ai pas confiance.
2244 __ocr__ votre ami la regarde, {{Vous}} ne l’avez pas achetée
2245 __ocr__ pour accommoder son regard, {{La}} lourde forme demeure
2246 __ocr__ parler de Nicole, {{Le}} sommeil ne vient pas.
2247 __ocr__ a fait de toi, Charles, {{Tu}} étais beau quand
2248 __ocr__ s’habituer à se faire servir, {{Au}} début ça
2249 __ocr__ Tu as tué ce petit garçon, Henri, {{Et}} tu le sais.
2250 __ocr__ d’un fil de plastique transparent, {{Il}} l’agite
2251 __ocr__ sur une glace noire {{Les}} lumières du port
2252 __ocr__ le roulis du bateau {{Le}} faisant heurter
2253 __ocr__ si vous {{La}} désirez
2254 __ocr__ sa main se referme sur {{Je}} livre
2261 __ocr__ regarde dans l’obscurité de {{L’}}entrepôt
2271 __ocr__ des verres luisent sur {{i}} le bureau blanc.
2272 __ocr__ la voix, {{e}} est celle de…
2273 __ocr__ ressemble {{h}} une fenêtre de serre.
2274 __ocr__ Ça a duré 3 h.
2275 __ocr__ c’est alors que je suis fort.
2283 __ocr__ trouve {{l£}} temps
2284 __ocr__ elle s’{{avance*}} sur le seuil
2285 __ocr__ par beaucoup d’argent ? {{{Il}} débouche le Jack Daniels
2297 Ce que tu ne fais {{pas jamais}}.
2312 Au MES, rien de nouveau
2313 {{Ces}} {{cette}} canaille qui nous a donné tant de fil à retordre.
2314 Mon {{il}} est une merveille.
2315 je ne sais {{des}} {{ses}} choses.
2330 {{En}} Avignon
2331 {{En}} Agen
2340 J’{{ai été chez}} le coiffeur.
2348 La mise en {{abîme}}.
2357 être {{à date}}
2358 mettre {{a date}}
2359 {{jusqu’à date}}
2368 ils arrivent {{incessamment sous peu}}.
2376 c’est plus {{pire}} que tout.
2377 il est moins {{pire}} que l’autre.
2378 elles sont aussi {{pires}} que les autres.
2379 ils vont {{de mal en pire}}
2380 {{Au pire aller}}, on s’en passera.
2388 Nous y sommes allés {{pour ne pas qu}}’elle se sente seule.
2395 Je l’aime {{très beaucoup}}.
2404 {{vidéo-protection}}
2415 {{Malgré que}} je sois fou.
2493 il faut {{abolir totalement}} ces pratiques ->> abolir
2494 il faut {{achever complètement}} ce projet ->> achever
2495 {{au jour d’aujourd’hui}} ->> aujourd’hui
2496 {{actuellement en cours}} ->> en cours
2497 ils sont {{actuellement en train}} de manger ->> en train
2498 avoir un grand {{avenir devant soi}} ->> avenir
2499 {{acculé au pied du mur}} ->> acculé
2500 {{Avancer en avant}}, pas le choix ->> Avancer
2501 {{dessiner un dessin}} ->> dessiner
2502 {{joindre ensemble}} ->> joindre|mettre ensemble
2503 {{collaborer ensemble}} ->> collaborer
2504 {{comparer entre eux}} ->> comparer
2505 {{monter en haut}} ->> monter
2506 {{descendre en bas}} ->> descendre
2507 {{enchevêtrer les uns dans les autres}} ->> enchevêtrer
2508 rien ne vaut l’{{entraide mutuelle}} ->> entraide
2509 s’{{entraider mutuellement}} ->> entraider
2510 s’{{entraident les uns les autres}} ->> entraident
2511 {{comme par exemple}} ->> comme|par exemple
2512 {{médias d’informations}} ->> médias
2513 {{lever debout}} ->> lever
2514 {{cirrhose du foie}} ->> cirrhose
2515 {{s’avérer vrai}} ->> s’avérer exact
2516 {{avérées vraies}} ->> avérées
2517 {{bourrasques de vent}} ->> bourrasques
2518 {{contraint malgré lui}} ->> contraint
2519 {{contraindre malgré eux}} ->> contraindre
2520 {{applaudir des deux mains}} ->> applaudir
2521 {{erreurs involontaires}} ->> erreurs
2522 {{hasards imprévus}} ->> hasards
2523 {{méandres sinueux}} ->> méandres
2524 {{hémorragies de sang}} ->> hémorragies
2525 des {{orages électriques}} ->> orages
2526 {{perspectives d’avenir}} ->> perspectives
2527 {{marche à pied}} ->> marche
2528 {{paires de jumelles}} ->> jumelles
2529 {{puis après}} ->> puis|après|ensuite|alors
2530 {{mais pourtant}} ->> mais|cependant|pourtant|toutefois
2531 {{donc par conséquent}} ->> donc|par conséquent|c’est pourquoi
2532 {{car en effet}} ->> car|en effet
2533 {{opportunités à saisir}} ->> opportunités
2534 {{apanages exclusifs}} ->> apanages
2535 {{monopole exclusif}} ->> monopole
2536 {{étapes intermédiaires}} ->> étapes
2537 {{ajouter en plus}} ->> ajouter
2538 la {{panacée universelle}} ->> panacée|remède universel
2539 ce sont leurs {{premiers balbutiements}} ->> balbutiements
2540 la {{première priorité}}, c’est… ->> priorité
2541 {{réserver d’avance}} ->> réserver
2542 Un {{futur projet}} ->> projet
2543 ce sont des {{projets futurs}} ->> projets
2544 {{prototypes expérimentaux}} ->> prototypes
2545 Nous avons {{rénové à neuf}} l’ensemble ->> rénové
2546 Nous voilà {{réunis ensemble}} ->> réunis
2547 {{Recule en arrière}} ->> Recule
2548 {{risques de menaces}} ->> risques
2549 {{secousses sismiques}} ->> secousse tellurique|secousses telluriques|tremblement de terre
2550 {{solidaires les uns des autres}} ->> solidaires
2551 Il {{suffisait simplement}} d’y penser. ->> suffisait
2552 Il la {{talonnait de près}} ->> talonnait
2553 ce {{taux d’alcoolémie}} est très élevé ->> taux d’alcool|alcoolémie
2554 {{tunnels souterrains}} ->> tunnels
2555 {{vieilles hardes}} ->> hardes
2556 {{voire même}} ->> voire|même
2565 {{prédire à l’avance}} ->> prédire
2566 {{pronostiquer d’avance}} ->> pronostiquer
2575 {{Ajourner à une date ultérieure}} ->> Ajourner
2576 {{différer à une date ultérieure}} ->> différer
2577 {{reporter à plus tard}} ->> reporter
2584 Comment lutter contre la cupidité des {{ayant droits}}
2595 Il {{ne n’}}arrive jamais à l’heure.
2596 Ça {{me te }}prend la tête, toutes ces complications vaines.
2597 il {{se m’}}est difficile d’y parvenir.
2598 Ça t’arrive {{de d’}}arriver à l’heure ?
2599 Les écrits de d’Alembert.
2610 {{en t’}}ait donné tant. ->> "t’en "
2611 {{en n’}}{{envoient}} que peu.
2618 malgré l’{{arrête}} qui interdisait le port
2626 Cette {{pèle}} est trop fragile.
2636 {{sa}} devient difficile.
2637 il me tendit {{sa}} {{pèche}}.
2643 Je prends {{sa}}…
2651 cet {{plaît}} est infectée.
2659 {{ce}} {{rappelle}} n’en finit pas.
2667 mon {{rackette}} n’a pas porté les fruits espérés.
2668 Belle qui tient mon vit captif entre tes doigts.
2676 ton {{recèle}} a été dévoilé
2684 la crainte des {{attentas}} fait feu de tout bois.
2692 elle se rendit auxdits {{jardinais}}
2700 auxdites {{scelles}}, il ne prêta pas attention.
2707 les petits esprits de la {{pensait}} religieuse
2710 pour les insulter au sortir du seul troquet dispensateur d’oubli liquide du coin
2711 ce peut être un matériau à part entière pour alimenter discussions et délibérations.
2719 {{de le}} vin ->> du
2720 il n’est pas interdit de le {{pensait}}
2727 de l’{{entra}}
2735 un {{maintient}} difficile.
2742 par {{bloque}} de données
2750 d’une {{habille}} femme
2751 plus d’un ont été traumatisés
2752 plus d’une sont parties aussi vite qu’elles étaient venues
2760 il {{et}} parti.
2768 ils {{son}} du même bois.
2769 Ils {{étai}} partie au {{restaurent}}
2777 Je {{travail}}.
2785 tu {{croix}} que tu sais quelque chose, mais tu ne sais rien.
2788 elles seules peuvent s’en sortir.
2789 elle seule peut y arriver
2790 elle seules les femmes la font craquer
2798 ne {{convaincant}} que les convaincus.
2799 une tension lui {{provocant}} un ulcère
2800 comme des nuages ou des coteaux se reflétant dans l’eau (ligature fl)
2816 Il est très {{cite}}.
2817 très {{suivit}} par ce détective
2818 il était très {{habille}}
2825 J’ai trop {{mangeais}}.
2826 Ce que nous réussissons presque sera considéré comme un échec.
2836 Tout ce qu’on fera chez {{sera}} enregistré.
2844 Toutes les blagues qu’on fera sur {{entreront}} dans l’histoire !
2852 Ces gens sont si {{prit}} par leur travail qu’ils en oublient de vivre.
2853 Ça ira mieux demain, surtout si émerge une demande forte de la part des consommateurs.
2862 de plus en plus {{gagnait}} par la folie.
2863 avec quel zèle ils remplissent leurs devoirs de citoyens (de plus en plus deviennent enseignant·e·s, infirmier·e·s ou s’engagent dans l’armée, etc.).
2864 il faut de plus en plus aider ces gens.
2967 Cette femme {{à}} été confondue avec une autre.
2968 L’homme {{à}} ouvert la boîte.
2969 Il ne nous reste plus qu’{{à}} {{vérifié}} si votre maquette.
2970 Je veux {{à}} {{mangé}}.
2971 Ne pas hésiter {{à}} {{demandé}} des conseils.
2972 cette femme, dans son délire, {{à}} {{jetez}} son argent à la poubelle.
2973 Ce fâcheux, comme à son habitude, les {{à}} ennuyés à mourir.
2974 Lui l’{{à}} pris par surprise.
2975 Les parties {{a}} nouveau divisées ne se réuniront pas avant longtemps.
2976 elles sont tout {{a}} fait compétentes
2977 c’est grâce {{a}} nous que vous y êtes parvenus
2978 elles se défendront jusqu’{{a}} la mort.
2979 ce qu’elles feront alors {{a coup sûr}}, difficile de le devenir.
2980 elles progressent pas {{a}} pas
2981 elle n’y {{à}} pas droit.
2982 elle risque de tout perdre, {{a}} moins qu’un miracle survienne.
2983 {{tout a coup}}, il n’y eut plus aucune lumière
2984 il y {{à}} des pertes.
2985 ce qui {{à}} pris tant de valeur, c’est…
2986 Ce chien, croyons-nous savoir, {{à le}} maître le plus violent qui soit.
2987 Il ne les leur {{à}} pas imposés.
2988 l’homme, jamais, ne la lui {{à}} imposés.
2989 l’homme, jamais, ne nous l’{{à}} prise.
2990 il me les {{à}} donnés
2991 il me l’{{à}} donné
2992 qui en {{à}} ?
2993 Il l’a fait {{a}} cause de toi.
2994 Il ne m’{{à}} jamais vu.
2995 Que fait-il {{a}} cette conférence ?
2996 Il m’en {{à}} donné.
2997 Il y en {{à}}.
2998 ce que cet homme, dans son garage, {{à}} alors une importance.
2999 Il les y {{à}}.
3000 On {{à}} faim.
3001 Elle en {{à}} pris.
3002 Elle {{à}} froid.
3003 Elle l’en {{à}} averti.
3004 lui, avec ceux-là, nous en {{à}} donnés trois.
3005 un élève qui leur {{à}} fait bien des misères.
3006 cet homme {{à}} faim
3007 Je sais qu’ils sont {{a}} toi.
3008 Celui qui y croit {{à les}} moyens d’y parvenir.
3009 Face {{a}} ces gens, il ne pensait pas pouvoir réussir
3010 On s’y fait, d’une manière ou d’une autre, {{a}} notre corps défendant.
3011 Puisqu’on nous méprise, autant y aller {{a}} reculons.
3012 Ne pas hésiter {{a}} {{demander}} des conseils.
3013 Sébastien {{a}} {{demander}} des conseils.
3014 Personne {{a}} part Tom ne connaît son adresse
3015 Attention {{a}} ne pas la réveiller.
3016 C’est {{à peu prêt}} la même chose.
3017 ils viennent nous attaquer {{a}} tout bout de champ
3018 par rapport {{a}} eux, je me sens parfois dépassé
3019 par rapport {{a}} ces hommes-là, nous manquons d’expérience
3020 Ce que cet homme à {{devient}} aujourd’hui notre problème
3021 Je tenais à le lui faire savoir.
3022 ce que cette personne, dans son esprit trouble et vindicatif, {{à}} aux hommes à dire, nul ne le sait.
3023 il va falloir songer à les leur donner
3024 le coût est estimé à au moins 1000 milliards de dollars
3025 elle à qui nous avons donné notre cœur et pour laquelle nous avons tout tenté pour la faire aimer de nos concitoyens.
3026 jusqu’à parfois se mettre en danger
3034 la réalité m’a {{tuer}}
3043 Ce sont des clichés {{au}} {{dépend}} d’un grand chef. Tout ça pour faire du buzz et exister médiatiquement.
3054 Je me suis trompé. {{Autant}} pour moi.
3055 on va y arriver, {{au temps que faire se peut}}…
3068 {{ça}} patrie, il la détestait
3069 et {{sa}} par deux fois
3070 {{sa}} prend du temps. ->> ça
3071 {{çà}} va ->> ça
3072 {{sa}} va ->> ça
3073 Il trouva de la nourriture {{ça et là}}. ->> çà et là
3074 Elle parle comme {{ça}} mère. ->> sa
3075 C’est comme {{sa}}.
3076 {{sa}} l’ennuierait, ce fils de pute, de dire bonjour ?
3077 il faut s’y prendre comme {{sa}}
3078 on fait {{sa}} lorsqu’on a tout perdu
3079 avec sa presque belle-mère
3080 sa toute nouvelle application de synchronisation de fichiers
3122 il ne {{ce}} compte pas parmi eux
3123 il ne {{ç’}}avançait jamais sans avoir pesé toutes les conséquences
3124 {{Se}} seraient des histoires.
3125 {{se}} seraient des jours heureux.
3126 {{Se}} sont de grands enfants.
3127 {{Se}} sera une fille.
3128 {{ceux}} seraient des jours heureux
3129 Pour {{se}} faire, ils sont prêts à tout.
3130 {{se}} {{ne}} peut être ainsi.
3131 C’est tout {{se}} qu’il y a
3132 Tout {{se}} que je fais
3133 tout {{se}} qu’il entend
3134 {{Ce}} {{promener}} est relaxant.
3135 Il {{ce}} {{sent}} seul
3136 {{se}} {{train}} est en retard
3137 {{ceux}} train arrive trop vite.
3138 {{ceux}} ne doit pas nous faire oublier ce désastre
3139 qui {{ce}} donne en spectacle.
3140 les expatriés éloignés ou ceux habitant ici
3141 les photographies de ceux n’ayant pas dépassé sept sur vingt.
3142 Pensez-vous que ceux ne sachant même pas ce qu’est une VHS peuvent y trouver leur compte ?
3143 la réduction de ma liberté intellectuelle et celle de ceux autour de moi
3159 {{ses}} au-dessus de ses forces.
3160 {{ces}} comme la peste
3161 car {{ses}} d’avance perdu
3162 {{ces}} qu’il y a tant de pertes
3163 {{c’est}} {{délires}} nous ennuient
3164 En 2015, c’est Paris et son agglomération qui…
3174 il va faire un cake aux {{dates}}.
3175 elle a fait de la confiture de {{dates}}
3176 Elles étaient à cette date cultivées à l’air libre.
3177 De fraîche date…
3188 {{dan}} la voiture
3189 ils sont partis {{d’en}} une direction différente
3190 {{dents}} les montagnes au loin.
3210 ils ont peu {{davantage}} à vivre ici.
3211 Ils s’exerceront {{d’avantages}}.
3212 {{d’avantage}} de monde de jour en jour
3213 Viens-tu {{d’avantage}} à la maison
3214 {{d’avantage}} de monde viendra
3215 ils sont {{d’avantages}} perdus que les autres.
3223 Très {{différends}} de nous, ces gens-là !
3236 {{et bien}} il y aura des pertes
3237 {{et ben}} on n’en sait rien.
3238 nous y songions, et bien au-delà des considérations habituelles.
3239 une image bien plus colorée, et bien plus intense, de la vie.
3240 Toutes ces questions, et bien d’autres, sont vues aujourd’hui dans le paradigme quantitatif de la monnaie, des taux de change flottants et de la monnaie administrée.
3241 et bien manger, c’est important.
3242 il a été vaincu, et bien vaincu.
3251 un homme {{faut}}
3252 c’est {{faut}}
3253 il m’en faut plus.
3254 il faut réussir.
3255 bien sûr, faut y arriver.
3256 il ne faut pas se leurrer.
3257 y faut pas qu’elle l’entende.
3258 faut l’emmener chez le docteur.
3259 Faut Linux, sinon ça marchera jamais.
3265 il va dans l’{{haut delà}}
3273 Mon frère, {{ce}} {{héro}} !
3284 {{hors}}, nous y coryons malgré tout ce qu’on peut en dire.
3285 {{Hors}} il y a tant à faire depuis que nous sommes arrivés en ces lieux.
3286 Hors nous, personne ne sait ce qui s’est passé là-bas.
3287 Le peuple se sent hors jeu.
3297 nous serions encore {{la}} l’année prochaine
3298 en reprenant le chandail de John {{la}} où elle l’avait abandonné.
3299 Qui serait la ou le plus à même à occuper ce poste selon vous ?
3306 Ce {{fait}}-{{la}} ne peut être ignoré.
3315 je vais {{leurs}} reprendre
3316 je {{leurs}} apprends la programmation
3317 après qu’un des leurs ait été gravement blessé par un tir de grenade
3326 Ils n’étaient guère prêts à ça, {{loins sans faux}}.
3327 Et les intellectuels ? En France comme ailleurs, tous n’ont pas, loin s’en faut, une pleine lucidité sur cette précarité galopante.
3333 120 {{Mins}} de bonheur
3341 ces gens {{on}} {{souvent}} tort.
3342 Je voulais qu’on soit ensemble.
3355 elles sont si {{pales}}.
3356 cette {{pale}} imitation d’un chef-d’œuvre
3395 {{peu}} rarement y arriver.
3396 Il est un {{peut}} comme une forêt
3397 Il {{peut-être}} mortel.
3398 Cela {{peut-être}} mortel.
3399 cela ne se {{peu}}.
3400 des bâtisses {{peu a peu}} abandonnées.
3401 aucun pays – ou très peu alors – n’a réussi à faire ça de façon durable
3402 Mais {{peut}} importe le rang.
3403 homme de {{peut}} de foi, écoute le vent.
3404 Il en vient un {{peut}} tous les jours.
3405 {{peut}} sympathique, cet individu.
3406 il {{peu}} y parvenir
3407 tu ne {{peu}} en savoir plus
3408 {{peut}} {{embarrassés}} par leurs déboires, ils poursuivirent comme si de rien n’était.
3414 la {{plus part}}
3423 {{Pardessus}} les montagnes.
3424 Il passa {{pardessus}} les collines.
3425 Mets ton pardessus ce matin.
3433 Ils ont découvert le {{poteau rose}}.
3446 ils se sont approchés très {{prêts}}.
3447 Je suis si {{prêt}} d’y arriver.
3448 Il est {{près}} à les aider
3449 Elle va regarder ça de plus {{prêt}}.
3463 {{Quant}} est-il du chien ?
3464 {{Quand}} à ma santé, elle est défaillante.
3465 {{Quant}} ils…
3466 {{quant}} je…
3467 {{quant}} nous…
3468 il comprit {{quand}} prenant son parti, il se protégeait aussi.
3469 {{qu’en}} il vient, c’est l’enfer.
3470 il est exact qu’en je ne sais combien de temps il parvint à un résultat inattendu.
3471 être rassuré quant à l’avenir du continent européen
3472 il comprit trop tard qu’en elle naquit alors le doute qui l’éloigna de lui à jamais.
3480 {{qu’elle}} emmerdeuse.
3489 Vous n’êtes pas sans {{ignorer}} que…
3500 il {{c’en}} est vite lassé.
3501 {{S’en}} était vraiment trop !
3502 Car {{s’en}} était vraiment fini !
3503 elle {{sang}} était voulu
3512 Ça n’en finit pas, c’est le {{statut quo}}.
3513 Quelle splendide {{statu}}.
3522 Je suis {{sur}} de Patrick.
3535 en {{tant}} de guerre, il faut savoir faire face et ne pas faiblir face à l’adversité.
3536 ils vont {{de tan en tan}} au restaurant
3537 un {{temps}} soit peu perdu dans cette affaire.
3538 après {{temps}} de souffrance, il faut savoir lâcher prise.
3539 il travaille à {{tant}} partiel
3540 en même {{tant}}, on s’en moque, de toutes ces histoires ennuyeuses.
3541 ce qui a commencé en 2011 en tant d’endroits du pourtour méditerranéen
3542 elle est allée en tant de lieux qu’il est difficile de suivre son trajet.
3551 à haute {{voie}}
3552 à {{voie}} haute
3553 de vive {{voie}}
3567 sur la bonne {{voix}}
3568 ces patients sont en {{voix}} de guérison.
3569 il faut ouvrir la {{voix}} aux nouveaux venus.
3570 Je propse que, par {{voix}} de conséquence, nous partions immédiatement.
3571 C’est une {{voix}} interdite.
3587 Elles sont fatiguées, {{voir}} épuisées.
3588 Ce serait pour aider, ainsi que {{voire}} l’avancement du projet.
3589 Elles vont voir rouge en apprenant cet échec.
3590 Voir les enfants jouer ne me rend pas nostalgique.
3591 Il faut voir grand.
3592 Il sait voir grand.
3593 Il sait voir telle ou telle chose avec acuité.
3594 ça reste à voir
3595 Je veux le voir étonné par toutes ces merveilles.
3596 Les start-ups doivent aller vite, voir grand.
3597 de fortes chances de se voir ruiné
3598 Quelle chance tu as eue de voir ruiné ce connard.
3599 l’immobilier a été ces dernières années l’investissement le plus rentable (voir graphique ci-dessous)
3600 elles sont pas mal ainsi, voire élégantes pourrait-on dire.
3601 il y en a peu, voire très peu.
3602 car elles pénètrent dans les poumons voire le système sanguin.
3603 des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.
3648 ne l’{{oubli}} pas
3649 elle ne la {{croix}} pas
3650 ils me les {{laissés}}.
3651 ne {{pensée}} rien, jamais
3652 n’en {{laissée}} que des miettes
3653 s’y {{intéressé}}
3654 Il ne {{travail}} pas le week-end.
3655 Je m’en {{fou}}.
3656 il m’{{arête}} encore une fois avec une impudence insupportable.
3657 J’y {{travail}}.
3658 ç’{{avé}} été dur.
3659 me {{pronostic}} un cancer dans les trois mois.
3660 t’{{appel}} l’autre gras, puis on y va.
3661 te {{mangé}}
3662 s’y {{accordez}}
3663 s’en {{approché}}
3664 m’y {{attaché}}
3665 je t’en {{parlé}}
3666 M’enfin, c’est absurde
3667 il est normal de ne presque pas payer des gens qui effectuent un travail
3668 j’ai l’impression de ne même pas savoir ce qu’est un « juif français ».
3669 C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter.
3670 la tentation pour certains médias de ne tout simplement pas rémunérer notre travail si celui-ci n’est finalement pas publié.
3681 il y en a autant que {{prévus}}.
3682 elles sont plus nombreuses plus que {{prévues}}
3683 il y a moins de bouffe que {{prévue}}
3684 comme {{annoncés}}, ils sont arrivés
3685 moins loin que {{prévus}} ->> prévu
3686 plus rapide que {{prévues}} ->> prévu
3687 autant d’hommes que {{prévus}} ->> prévu
3688 il y en a moins que {{prévues}} ->> prévu
3689 comme {{convenus}} ->> convenu
3704 {{Tout}} deux sont partis les premiers.
3711 {{Tout}} mes hommes sont venus.
3712 Malgré tout ces hommes sont quand même revenus.
3720 {{Tout}} les hommes sont dingues.
3727 Donne à manger à {{tout}} ceux qui sont là.
3728 Revenus de tout ceux qui sont partis ont perdu la foi.
3735 {{Toute}} celles qui viendront…
3736 et {{toute}} ce barouf ne nous a apporté que des ennuis.
3737 car {{toute}} mon savoir vient d’elle
3751 {{tous}} ces {{idiotes}}
3752 {{toutes}} mes {{bars}}
3775 Tout {{hommes}}
3776 De tous {{âge}} !
3777 avec toutes {{femme}} ->> femmes
3778 sur toutes {{armure}} ->> armures
3779 Toute {{époux}} doit faire preuve de bienveillance
3780 Il se souvient de toute mon histoire.
3781 Tout les sépare.
3782 les tout débuts du mouvement ouvrier
3783 vos tout débuts furent difficiles
3784 aux tout débuts, il y eut bien des erreurs
3785 comment les inégalités sociales impactent la santé des tout petits
3810 __neg__ On {{a}} pas compris.
3811 __neg__ Il {{part}} pas encore.
3812 __neg__ On {{vous }}a pas compris.
3813 __neg__ On {{en}} a pas.
3814 __neg__ Il {{y}} a jamais d’eau.
3827 ne jamais {{cédé}}
3828 ne rien {{finit}}
3829 ne jamais plus s’y {{frottait}}
3830 ne plus guère y {{pensée}}
3831 ne pas les {{contrariés}}
3832 Ne rien m’en {{dit}}
3833 Ne jamais lui {{donnait}} sa chance.
3834 Il a décidé de ne plus {{mangés}} avec nous.
3835 ne plus {{mangez}} fait maigrir
3836 ne plus {{mangées}} fait maigrir
3837 ne pas {{allé}}
3838 Ne jamais {{mangez}} de viande !
3839 J’espère ne pas te déranger
3840 Ne pas te le donner, ce serait une insulte.
3841 ne jamais vraiment évoquer le sujet
3842 déterminés à ne pas se laisser récupérer
3843 de ne pas en élire du tout
3844 Mais gare à ne pas non plus trop surestimer la menace
3845 ne jamais beaucoup bosser, c’est sa devise.
3867 Une étude de 2005 publiée dans le Journal
3868 Les cinq variantes de la couverture du magazine Wired d’avril 2016 consacrée à Silicon Valley.
3869 c’est donc la cinquième en 50 ans
3870 l’équipe veut aussi voir dans la lettre le nombre d’or, un symbole d’harmonie, ainsi qu’un 6 retourné.
4434 pourquoi faire compliqué quand on peut faire simple
4435 Pour ceux et celles qui étaient présents à la cérémonie
4436 les pires vilénies suite au mauvais vote du peuple
4437 La numéro 1 mondiale
4438 cette information n’est rien comparé à cette énorme pression
4439 elle n’est de fait assumée par personne
4440 cohabitent sans difficulté musulmans, juifs et mozarabes.
4441 Rien n’a été trop beau pour cette saga aux costumes cousus main
4442 l’adoption est bien entendu à promouvoir
4443 Les retours que j’ai sont très différents et dépendent de la sensibilité de chacun
4444 refuser le voyeurisme teinté de misérabilisme et le mépris de classe en boycottant les émissions racoleuses
4445 en passant par les “séjours humanitaires” clé en main
4446 qui sont en majorité moins attentifs à la qualité de la prestation qu’ils proposent aux clients
4447 Il a une tête de déterré.
4448 Malgré quelques envolées un brin trop solennelles, tout ce que j’ai dit était très sincère.
4449 Je constate également qu’il n’y pas beaucoup d’entente entre eux.
4450 cet appareil supersonique a été conçu pour mener des frappes longue distance
4451 C’est à mes yeux totalement secondaire.
4452 les femmes se révoltèrent alors, elles aussi désespérées par ces injonctions contradictoires.
4453 pouvoir envisager de dîner avec ses enfants à une heure décente plusieurs fois par semaine
4454 Le vecteur position du point P(t)
4455 Le vecteur vitesse d’un point d’un solide
4456 les vecteurs vitesses
4457 Le vecteur accélération
4458 Le vecteur rotation
4459 la construction à l’avenir incertain
4460 Il resta quelques secondes pensif.
4461 Il resta quelques instants immobile.
4462 La foule, un instant subjuguée et silencieuse
4463 Ils furent de nombreuses minutes persuadés du contraire.
4464 Elles avaient plusieurs heures travaillé sans relâche.
4465 Entre autres choses merveilleuses, il fit poser un bassin en airain (Ctesse Ségur)
4466 Et cette envie de coller au plus près à la vision de George Lucas coûte un bras.
4467 une toile bleu ciel
4468 des émotions au moins en partie partagées.
4469 L’expérience utilisateur est importante.
4470 les feuilles vert tendre.
4471 Une soudaine proximité avec nous autres, issus du “petit peuple”.
4505 comme le signe évident d’une politique volontaire
4506 c’était le signe évident d’une politique volontaire
4507 ce que c’est : le signe évident d’une politique volontaire
4523 __redon2__ Quelle {{imposture}}, c’est d’un ennui, c’est une {{imposture}}.
4524 __redon2__ ils sont là côte à côte.
4525 __redon2__ Tu avances petit à petit, et tu réussis.
4526 __redon2__ De loin en loin, elle passe.
4527 __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition)
4546 {{au le}} chien
4547 {{au les}} armoires
4548 qui sont {{au}} l’usage
4549 {{au}} la passion
4556 toute l’importance de l’{{accords}} musical.
4584 c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres
4585 {{Le}} démoralisation. ->> La
4586 {{Le}} Guyane française. ->> La
4587 avec {{le}} {{pile}}
4588 {{le}} {{publique}}
4589 {{Le}} {{pendue}}
4635 ledit {{accords}} ne vaut rien.
4636 {{au}} {{États-Unis}}
4637 {{Un}} {{amie}}
4638 {{Cet}} {{idiote}}.
4639 {{cet}} ballon. ->> ce
4640 {{Ce}} animal. ->> Cet
4641 {{un}} des {{chattes}}
4642 {{une}} des {{chats}}
4643 {{mon}} {{chienne}}
4644 cet {{oliviers}}
4645 ce {{claviers}}
4646 cette bouffe, c’est du {{chiens}}
4669 c’est ennuyeux, la {{parties}} deux est ratée.
4670 {{La}} Cameroun ->> Le
4671 {{La}} mustang est un cheval sauvage. ->> Le
4672 {{La}} tableau. ->> Le
4673 dans la {{parties}} ->> partie
4674 de {{la}} vin ->> le
4675 {{la}} {{véhicule}}
4676 {{La}} {{pris}}
4677 la force de la {{formes}} parfaite
4686 ladite {{passions}} l’avait conduit à sa perte.
4701 un {{slashs}} ->> slash
4702 un {{fromages}}. ->> fromage
4703 Un {{ballons}} ->> ballon
4704 Une {{cinglées}} ->> cinglée
4720 {{une}} des {{chats}}
4721 {{ma}} amour ->> mon
4722 {{ma}} obligé ->> mon
4723 {{ma}} {{parti}}
4724 {{une}} kyste ->> un
4725 {{ma}} armure ->> mon
4726 {{Cette}} {{animal}} mort.
4727 Ce couple va donner à la France sa très importante collection qui rejoindra le musée d’Orsay
4756 {{Certaines}} danse
4757 Certains {{chien}}
4758 {{certains}} des {{nouvelles}} sont à côté de la plaque.
4759 {{certaines}} des hommes
4760 Un problème rapporté par certains est l’incapacité à trouver un partenaire
4779 Tu sais, {{leur}} {{impatiences}} est notoire.
4780 J’en ai assez de {{leur}} {{délires}}
4781 {{Leur}} {{perceptions}} des choses m’exaspère.
4782 dans {{leur}} {{usines}}
4789 Chaque {{chiens}}. ->> chien
4796 {{Quelque}} amis
4819 ils viennent, les {{petit}}
4820 Les {{tiret}} ->> tirets
4821 Les plus {{grand}} hommes. ->> grands
4822 les {{véhicule}} ->> véhicules
4823 Les {{démoralisation}}. ->> démoralisations
4824 dans les {{usine}} ->> usines
4835 {{leurs}} {{action}}
4851 des {{pain}} ->> pains
4852 ces {{détournement}} de fonds et ces vols
4853 Quelques {{homme}}. ->> hommes
4854 {{leur}} {{données}}
4855 plusieurs {{femme}} sont venues.
4856 une personne ou plusieurs ayant décidé de façon déterminée et coordonnée de faire cuire la grenouille
4864 des {{son}} que nous entendons jour et nuit.
4865 j’entends ces {{même}} âneries tous les jours
4876 Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui.
4884 des centaines de {{bête}} à cornes passèrent devant nous.
4892 une multitude d’{{homme}} ->> hommes
4903 Elle a eu {{quelques}} 300 réponses à sa petite-annonce.
4904 Il commande {{quelques}} trois cents hommes.
4905 {{Quelques}} 120 hommes ->> Quelque
4906 {{Quelques}} deux cents hommes. ->> Quelque
4907 les quelque 2,5 millions d’habitants
4908 les quelque 12 000 stations-service
4920 ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.
4930 Il a abandonné neuf {{enfant}}.
4938 On peut trouver mille {{travailleur}} d’un claquement de doigts.
4947 00 heure, 01 heure
4948 il a adopté 1 {{chiens}}.
4958 22 {{heure}}
4959 3 {{heure}}
4996 {{Quelle}} homme. ->> Quel
4997 {{Quel}} femme. ->> Quelle
4998 {{Quels}} chanson. ->> Quelle
4999 {{Quelles}} {{tarés}}.
5000 Quelle sale journée…
5001 Quelles drôles de prunes
5034 {{Quel}} sont ces hommes. ->> Quels
5035 {{Quel}} est cette force ? ->> Quelle
5036 {{Quelle}} est mon animal favori ? ->> Quel
5037 {{Quels}} sont ces femmes ? ->> Quelles
5038 {{Quelles}} est cette imbécillité ? ->> Quelle
5039 {{Quelles}} sont ces hommes ? ->> Quels
5040 Il s’agit de définir quelle est notre propre orientation.
5055 {{quelle}} que soit le chien ->> quel
5056 {{Quelles}} que soient ces intérêts ->> Quels
5057 {{Quelle}} que soit le truc. ->> Quel
5058 {{Quelle}} que soient les astuces. ->> Quelles
5071 {{Quels}} que soient ces idiotes ->> Quelles
5072 {{Quel}} que soit mon aversion ->> Quelle
5073 {{Quel}} que soit cette femme ->> Quelle
5074 {{Quels}} que soit la force appliquée. ->> Quel
5075 {{Quel}} que soit la force appliquée. ->> Quelle
5084 ils trouvent ça de plus en plus {{idiots}} ->> idiot
5100 {{Femmes}} {{intelligente}}.
5101 {{Homme}} {{impatients}}.
5117 en homme {{courtoise}}
5118 en {{femme}} {{cultivées}}
5132 à {{grande}} {{enjambées}}
5133 pour {{belle}} {{appartement}}
5147 Ils ont de {{grandes}} {{oreille}}
5148 certains hommes {{petite}}
5149 de {{grands}} {{homme}}
5150 de {{manière}} {{légal}}
5151 de {{petite}} {{homme}}
5152 de {{pousse}} {{actif}}
5153 De {{bon}} {{conseils}}
5154 De {{mauvaises}} {{hommes}}
5155 Ces produits sont de {{belle}} {{qualités}}.
5156 Après être demeurée assise pendant quelque temps, elle se leva
5157 ils choisissent de devenir indépendants
5185 L’amande {{amer}}
5186 l’{{amicale}} {{animal}}
5187 du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
5188 du chien et de l’{{étonnante}} {{collier}} qu’il avait autour du cou.
5214 un exercice pas très {{utiles}}. ->> utile
5215 un homme {{grands}} ->> grand
5216 un homme {{futiles}} ->> futile
5217 Une femme {{laconiques}}. ->> laconique
5218 je me souviens d’un homme {{arrogants}}
5219 C’est pas les quelques vues sur Linux qui vont rattraper un scénario {{bancale}}.
5243 Une grande {{homme}}.
5244 une géologue {{intelligents}}
5245 Et une femme {{déterminées}}
5246 on parle là d’une femme {{inconnu}}
5247 L’or allume le feu d’une cupidité d’une couleur et d’une sorte différentes.
5273 cet outil {{terribles}} qu’il a dans les mains
5274 J’aimerais connaître de quel parti {{gauchistes}} on parle.
5299 il brandissait avec fougue son drapeau {{déchirés}}
5300 comment osez-vous médire de mon héritage {{glorieuse}}
5324 La plus grande {{cinglé}}.
5325 quelle belle {{étourdi}}, cette gamine
5326 Peut-on imaginer de plus {{beaux}} {{enfant}} ?
5327 il imaginait de la pluie {{noir}} tombant sur une terre dévastée.
5354 chaque élément {{terrestres}}
5355 je me souviens de leur verve {{décalé}}
5382 certains claviers {{dégueulasse}}
5383 elle se rappelle de quels rapports {{désastreuses}} il s’agit.
5384 chez certains la revue Limite provoque des crises d’hystérie.
5411 certaines idioties {{stupide}}
5412 je ne sais guère de quelles âneries {{proférés}} on parle.
5441 ces {{beaux}} {{institutions}}
5442 de vos défauts {{terrible}}, je connais presque tout.
5443 Les éléments caractéristiques liés à ses valeurs historique et architecturale
5461 faire table rase des passions {{inutile}} ->> inutiles
5462 à bonne distance des {{chiens}} {{méchante}}
5463 des hommes {{attaquée}}
5464 des femmes {{agressé}}
5465 des hommes très mal {{renseigné}} ->> renseignés
5466 des dépenses non {{nécessaire}} ->> nécessaires
5467 Des règles pas du tout {{claire}}. ->> claires
5468 Des peines à peine {{croyable}}. ->> croyables
5469 Des {{chambres}} plus ou moins fortement {{éclairé}}.
5470 Les couleurs rouge, jaune et verte ne doivent pas être utilisées
5471 des passeports américain, canadien, néerlandais, allemand et britannique.
5484 Grande manifestation {{réprimées}} dans le sang.
5492 les heureux imbéciles {{payé}} au lance-pierre.
5500 un gros connard {{pathétiques}}
5501 le jour venu prises par surprise elles durent s’enfuir.
5510 ces petites sottes {{déjantée}}
5552 La fille de cette belle {{inconnu}} ->> inconnue
5553 Le chien du voisin {{mourante}} ->> mourant
5554 Un chien de ce voisin {{amicale}} ->> amical
5555 Les hommes des mines {{voisin}} ->> voisins
5556 mon amour du chocolat {{immodérée}} ->> immodéré
5557 ton amour de son verbe {{enthousiasmante}} ->> enthousiasmant
5558 Cet homme de mon groupe {{oubliés}} ->> oublié
5559 Lutter contre le chômage de masse avec les armes des travailleurs reste pour nous une priorité.
5567 {{de telles sorte}}
5591 {{comprises}} mes prestations sur place
5592 {{Exceptés}} les petits, tous sont tombes malades.
5593 {{Attendues}} qu’on n’en sait rien, impossible de tirer des conclusions définitives.
5594 Il viendra, {{étant donnée}} son addiction…
5595 {{Vues}} les idioties qu’on entend, normal qu’on perde la tête.
5596 {{Passées}} les premières heures du jour…
5612 Il y a {{vingts}} personnes dans le salon.
5613 {{Quatre-vingt}} femmes sont passées.
5614 On en a reçu quatre-{{vingts}}-dix.
5615 Le gagnant est le numéro quatre-vingt.
5623 par {{trente-neufs}} degrés.
5640 trois {{cent}} marches à gravir.
5641 deux {{cents}} quatre tests lancés à chaque itération du processus nouveau
5642 par {{cents}} idées différentes.
5651 Plus de {{milles}} personnes sont venues.
5652 plus de deux cent quatre-vingt mille personnes
5676 d’un air compassé, il sortit son carnet de {{chèque}}.
5677 Ce collectif d’{{artiste}} est très inventif.
5678 Rends-moi ma collection de {{film}} !
5679 C’est un malheureux concours de {{circonstance}}.
5680 à la confluence de {{rivière}}
5681 ils constituent un groupe de {{passionné}}.
5682 C’est un putain de troupeau de {{mouton}} !
5693 Mettre {{à nus}} les hommes.
5698 {{à part égale}}
5703 {{a moindre frais}}
5717 Quel est son chiffre d’{{affaire}} ?
5718 Allez-vous faire {{affaires}} avec ces connards ?
5719 Faire {{affaire}} à Paris.
5726 ils ont ouvert un débit de {{boisson}} à Paris.
5735 L’entretien dure environ une {{demie heure}}.
5736 nous avons rendez-vous dans une heure et {{demi}}
5743 Ces gens qui jettent {{leurs dévolus}} sur n’importe qui, c’est d’une indécence.
5750 Elle est passée par la cage d’{{escaliers}}
5758 que pensez-vous de notre {{intérieure}} ?
5767 Elles sont tellement {{collets montées}} !
5776 ces saloperies coûtent vraiment {{chères}} !
5785 ces conneries donneront {{lieux}} à une enquête approfondie.
5792 nous sommes à présent {{en bon terme}}
5799 Elles ne sont plus elles-{{même}}.
5800 Ils ne peuvent s’en prendre qu’à eux-{{même}}.
5807 Elles ne viennent que par {{intermittences}}
5814 On va procéder par {{intervalle}}
5828 ils ont tout simplement perdu {{pieds}}
5829 ils y sont allés à {{pieds}}.
5830 Elles ont accompli l’impossible, et de surcroît {{aux pieds levés}}
5839 Je connais {{pleins}} de gens
5840 Les avocats sont pleins de nutriments.
5847 Elle mord la vie {{à plaine dent}}.
5854 nous ferons des tests autant que {{possibles}}.
5855 nous ferons autant de tests que {{possibles}}, c’est une nécessité.
5864 Il y a {{quelques}} temps que nous nous connaissons.
5865 Je suis en vacances, en {{quelques sortes}}.
5872 Je lance des tests en {{rafale}}.
5881 par {{soucis}} d’équité, chacun aura droit à une part.
5890 des pans entiers de l’univers — pour reprendre l’expression d’Orwell — se sont d’ores et déjà volatilisés
5891 À la pause, ils se sont tous les deux assis à l’arrière, et j’ai vu progressivement leurs corps se rapprocher.
5898 en {{terme}} de communication, c’est une véritable catastrophe
5907 ils lancent des attaques {{tout azimut}}.
5908 une bonne fois pour {{toute}}
5918 Je pars en {{vacance}}.
5919 {{Bonne vacance}} !
5920 Il nous reste un poste en vacance.
5921 Cette place est en vacance.
5930 ils mangent {{vites}}.
5931 elles sont {{vites}} parties.
5932 elles sont vites.
5939 c’est son point de {{vu}} qui prime.
5940 Son point de {{vus}} prévaudra toujours, faites-vous à cette idée ou dégagez.
5941 de mon point de {{vues}}
5954 un terrain de 3 {{âcres}}.
5963 Il avait ce goût {{acre}} dans la bouche qui ne passait pas.
5978 ils y sont {{accrocs}} depuis toujours
5979 au poker, il semble {{accroc}}
5980 il est {{accroc}} à la cocaïne
5981 elle est {{accroc}} au jeu
5982 Patricia est {{accroc}} à ce mec
5983 Tous {{accrocs}} à Internet.
5984 {{Accroc}} à cette merde depuis toujours.
5995 Je le tenais pour {{acquit}}.
5996 Par {{acquis}} de conscience.
6003 C’est arrivé trois jours d’{{affilé}}
6010 il descendait l’{{allé}}
6022 Avec ses beaux yeux en {{amendes}} nul ne peut lui résister.
6023 Nous avons déconné, nous avons été mis à {{l’amande}}.
6024 Ces gens-là ne feront jamais {{amande honorable}}.
6035 des {{anales}} littéraires
6036 il a bachoté les {{anales}}.
6048 L’{{aire}} du pétrole n’est pas encore terminée.
6049 Ce sera un jour dans l’{{ère}} du temps
6070 sous les {{hospices}} du conseil général de la nation.
6071 sous de terribles {{hospices}}
6072 Elles vont souvent à l’{{auspice}}.
6073 Dans cet {{auspice}}, la nourriture est abominable.
6074 On va l’envoyer dans un grand {{auspice}} pour personnes âgées.
6082 ils sont sacrifiés sur l’{{hôtel}} de la rentabilité
6089 Je pense que nous {{avion}} tort.
6096 C’est là que le {{bas}} blesse.
6103 ils vont {{belle}} et bien par monts et par vaux.
6110 les mouettes sur les {{bites}} d’amarrage.
6118 une raclée en {{bonnes et dues formes}}
6125 Et moi toujours en {{but}} à de nouveaux dangers
6133 {{s’}}est vraiment merdique.
6134 s’est par exemple illustré au combat.
6165 œufs de {{cannes}}
6166 {{canes}} à pêche
6167 {{cane}} de défense
6168 alcool de {{cane}}
6169 appuyé sur sa {{cane}}
6170 bec-de-{{cannes}}
6171 aéroport de {{cannes}}
6172 restaurant à {{cane}}
6181 ils ont fait {{bonne chaire}}.
6193 C’est {{la}} {{champ de l’heur}}.
6194 Il traversa le {{chant}} de betteraves.
6201 Il a le cancer du {{colon}}.
6210 Ils sont {{sensés}} y parvenir.
6211 Elles étaient {{sensés}} m’y conduire
6212 il est {{sensé}} prendre l’avion demain
6219 Ce sont pourtant des gens si {{censés}}
6227 mon {{comte}} bancaire est encore à sec.
6238 Elle a déjà eu tout son {{comptant}} de problèmes.
6239 On paye toujours argent {{content}}.
6248 Elles hurlèrent {{à corps et à cris}}.
6256 Je reste à ses {{cotés}}.
6276 Rien ne vaut une bonne {{cote}} de bœuf.
6277 Elles ont passé une radiographie des {{cottes}}.
6278 Quelle est sa {{côte}} de popularité
6279 il a réussi à percer sa {{cote}} de mailles.
6280 Il a la {{côte}} auprès de ses collègues
6297 J’ai pris un {{cou}} de bâton.
6298 Merci de calculer le {{coup}} de production avant d’établir une facture.
6299 Elle a un {{coût}} si gracile.
6310 Je vais tordre le {{coup}} à toutes ces idées stupides, une par une.
6311 Implacable, elle a rendu {{cout pour cout}} sans se départir de son calme.
6329 au {{court}} de cette journée
6330 les exercices {{en cour}} se déroulent bien.
6331 je vais couper {{cours}} à ces conneries.
6332 il faut donner libre {{cour}} à ses envies.
6333 Nous allons bientôt être à {{cours}} d’argent.
6334 le rendement {{à cours terme}} est excellent.
6335 porter l’affaire en Cour de justice
6348 {{dés}} que nous sommes partis, il a piqué une crise
6349 {{des}} {{les}} premiers symptômes, appelez-moi
6364 il y a une erreur qu’on peut {{desceller}} dans ses analyses.
6365 elle a {{dessellé}} une forte hostilité dans ses propos.
6390 Régler votre {{différent}}.
6391 Notre {{différent}} avec eux perdure.
6392 Un {{différent}} peut toujours se résoudre.
6393 J’en ai marre de leurs {{différents}}.
6394 Il y a des {{différents}} que nul ne saurait résoudre.
6395 Ils sont pas {{différends}} de nous.
6396 J’en veux un différent.
6405 Vous êtes {{entrain}} de vaincre.
6414 Ils s’amusèrent à l’{{envie}} et oublièrent tous leurs soucis.
6415 Je résiste à l’envie de manger du chocolat.
6416 On ne s’intéresse pas à l’école ni à l’âge, mais aux compétences et à l’envie de partager.
6428 Vous nous {{faîtes}} mal.
6429 Comment {{faîtes}} vous ça ?
6430 Elles sont {{faîtes}} comme ça.
6431 Elle est souvent {{faîte}} de cette manière-là.
6438 {{en faite}}, on en voit partout, ça grouille.
6439 Que {{faîtes}}-vous ? Vous {{faîtes}} mal !
6440 Aujourd’hui, n’en faites pas trop.
6447 j’ai vu un {{flamand}} rose.
6459 C’est une personne de bonne {{fois}}.
6460 Mais il a perdu {{fois}} en l’avenir.
6478 faire une levée de {{fond}}.
6479 à {{fond}} perdu
6480 elle a vendu son {{fond}} de commerce
6481 il a reçu de l’argent d’un {{fond}} d’investissement
6482 les {{fonds}} baptismaux.
6491 Passe-moi la glacière, s’il te plaît.
6492 Autrefois, il y eut plusieurs ères {{glacières}}.
6493 dans la {{glaciaire}}
6501 En mon {{fort intérieur}}, je le crois.
6502 Dans son {{fort intérieur}}, je le crois.
6511 Quel {{sans gène}}, celui-là !
6512 Il croit que ses {{gênes}} décident de sa santé…
6520 la {{gente}} masculine est grossière et l’a toujours été.
6533 Il a réalisé un documentaire sur la guerre du {{Golf}}.
6534 C’est un bon joueur de {{golfe}}.
6535 Le {{golf}} Persique est presque une mer fermée.
6536 J’ai fait de la voile dans le {{golf}} du Morbihan.
6537 Le {{golf}} d’Aden.
6556 il en sera fait à votre {{grès}}
6557 Il est venu contre son {{grès}}.
6558 Il viendra de bon {{grès}} ou de mauvais {{grès}}.
6559 Errer au {{grès}} des vents.
6560 Errer au {{grès}} du vent.
6561 Il acceptera de {{grès}} ou de force.
6562 nous vaincrons, {{bon grès mal grès}}
6570 il accomplit le {{jeune}} rituel
6583 {{ceux la}} sont des idiots, rien à en tirer.
6584 {{celle la}} ne vaut pas mieux, laisse-la tomber.
6585 Apporte-{{là}} près du feu
6586 cette {{bête}}-{{la}}
6587 il ne {{là}} croit pas.
6604 on {{l’a}} {{prit}} pour une idiote.
6605 il ne {{l’a}} {{connaît}} pas.
6606 elle ne {{l’a}} leur donne pas sans condition.
6607 elle se {{l’a}} {{réserve}} pour elle-même.
6616 ils ont oublié leur {{laisser-passer}}.
6617 il faut en finir avec le {{laissez-aller}}.
6624 {{levée}} de soleil
6633 j’ai {{soulevé}} un lièvre, là !
6655 qui est le responsable des {{lieues}} ?
6656 ce sont des {{lieus}} mythiques
6657 elle habitait à quelques {{lieux}} d’ici
6658 Cette réunion ayant eu {{lieue}} loin d’ici
6665 On en sait en {{générale}} pas assez.
6673 cette {{marre}} est presque sèche.
6680 j’en ai {{mare}} de tout ça.
6681 en avoir vraiment {{mare}} de ces conneries.
6694 Elle a {{mie}} son plus bel ensemble.
6695 Les éléments {{mi}} en évidence suffisent à le désigner comme coupable.
6696 Ils étaient partis au restaurant après avoir {{mi}} à jour son profil.
6697 elles ont dansé, {{mie}} à jour leur carnet et sont parties.
6704 on en a plus qu’assez, {{n’ait-ce pas}} ?
6717 C’est la {{votre}} ?
6718 {{nôtre}} père est si âgé.
6725 car {{nul part}} ailleurs, on n’en trouve une telle concentration
6738 une économie {{digitale}} ou rien
6739 Dans l’ère du {{digital}}, tout va plus vite.
6747 {{ont}} m’assure qu’il n’y en a pas.
6748 {{Ont}} n’arrive pas à s’en sortir.
6758 {{Ont}} ne sait jamais quoi faire
6759 si {{ont}} donne à ces gens, ça n’en finit plus.
6760 {{Ont}} viens !
6761 {{Ont}} ne sait pas comment faire.
6762 qui n’ont somme toute que le désir de vivre paisiblement
6771 {{Ont}} lui avait donné du temps
6772 {{Ont}} leur prendra tout
6773 Qu’importe, {{ont}} leur prend tout
6779 n’y {{on}} jamais lieu de telles abominations !
6785 ces chiens te l’{{on}} {{donné}}
6793 Qui {{on}} {{tant}} de malheurs !
6794 qui on blâme, ce soir ?
6800 peut-{{ont}} y arriver avec si peu de moyens ?
6808 peut{{ ont}} y arriver ?
6809 les politiques de l’offre ont échoué.
6822 {{Ou}} sont tes affaires ?
6823 au moment {{ou}} elle allait enfin réussir
6824 vers {{ou}} se tourner quand tout va mal ?
6825 pour le cas {{ou}} on serait arrêté dans notre élan.
6840 Je ne mange que du {{pin}} sans gluten.
6841 Il avala son {{pin}} avec gloutonnerie.
6842 Là, ce sont des pommes de {{pain}}.
6850 Ils vont de {{paires}}.
6863 Elle est très {{pale}} !
6864 Sous une lumière {{pale}},
6879 Elle prend toujours {{partie}} aux réunions.
6880 Il faut savoir tirer {{partis}} de ces atouts-là.
6881 Tu fais {{parti}} de l’élite, enfin, façon de parler.
6882 Nous sommes tous d’une manière ou d’une autre {{juge et parti}}.
6883 Prendre Damien {{à parti}}.
6890 Il est comme un coq en {{pattes}} là.
6898 Et {{peut}} de gens peuvent en dire autant.
6899 Il est guéri et peut de nouveau travailler.
6908 {{Peut être}} qu’on en saura plus demain.
6909 Ils vont {{peut être}} enfin faire quelque chose de leur misérable existence.
6910 L’un peut être réglé immédiatement
6917 C’est une maison de {{plein pied}}.
6924 il y a {{un}} {{pole}} d’activités pas loin d’ici.
6925 il est parti en pole position.
6926 elle fait de la pole dance.
6936 Ce {{diagnostique}} est absurde.
6937 C’est la valse des {{pronostiques}} contradictoires aujourd’hui.
6944 Ils étaient partis au restaurant après avoir {{pue}} dire un mot. ->> pu
6951 {{comme même}} il y va fort, le saligaud !
6952 La météo disait qu’il ferait beau temps, mais il pleut {{comme même}}…
6962 {{quelques soient}} les avantages d’un correcteur…
6963 {{quoiqu’il en soit}}, nous ne nous laisserons pas faire, vous pouvez compter sur nous.
6970 Il faut bien aller {{quelle que part}}.
6971 Je les ai oubliés {{quelque pars}}.
6987 {{Quelles que fois}}, on y comprend plus rien.
6988 {{Qu’elle que fois}}, on y comprend plus rien.
6989 Il y va {{quelque fois}} par an.
6996 de {{quoique}} ce soit, je ne veux pas en entendre parler.
7003 Elle y parviendra, {{quoiqu’il}} en coûte.
7011 Vous {{résonnez}} comme un sot.
7012 Nous allons le {{résonner}}.
7019 Elles ont préparé un {{riz}} de veau.
7035 il priait {{sain}} Anselme de le secourir.
7036 Au {{sain}} de l’obscurité, elle se sentait en sécurité.
7037 Sur son {{sain}}
7038 en son {{saint}}.
7039 {{blanc-sein}}
7052 dans la {{sale}} des professeurs
7053 une {{sale}} d’arcade
7054 ils sont tellement {{salles}}
7055 pour le service en salle
7062 Tout est {{sans dessus dessous}}.
7074 cette fosse {{sceptique}} est pleine.
7075 Je suis {{septique}} !
7082 {{S’en suivit}} une guerre de tous les instants.
7083 {{S’en suivre}}.
7090 Méfiez-vous de cette {{soi-disante}} sorcière.
7091 Méfiez-vous de cette {{soit-disant}} sorcière.
7092 Méfiez-vous de cette {{soi disant}} sorcière.
7109 chez {{soit}}, c’est presque toujours mieux.
7110 ce n’est pas la philosophie en {{soit}} qui est problématique
7111 quel que {{soie}} sa pensée, je refuse d’y accorder de l’attention.
7112 Penser par {{soit même}}…
7113 S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde)
7114 Je regrette que l’on en soit encore à des considérations que je croyais dépassées
7115 Quoi qu’il en soit
7132 ne leur {{son}} pas odieux.
7133 Ces chiens me {{son}} odieux.
7134 {{sont}} {{pain}}
7135 en {{sont}} {{absence}}
7136 elles s’en sont mal portées
7137 ils en sont reconnaissants
7163 Je suis {{sure}} qu’il ne va pas tarder à venir
7164 {{sures}} d’elles-mêmes, elles ne s’en laissent pas conter.
7165 {{sur}} de toi et de moi, que peut-il nous arriver, sinon le meilleur.
7166 Il est tellement {{sur}} de la trouver.
7167 ils sont en lieu {{sur}} et introuvables.
7181 une {{tâche}} de chocolat ->> tache
7182 une {{tâche}} vraiment indélébile
7183 en tâche de fond
7184 la tâche de la justice
7185 déléguer des tâches de sécurité publique à des machines autonomes
7186 tirer bénéfice de nouvelles données en fonction de la tâche de départ qui leur a été assignée
7187 Les « pervenches » fonctionnaires seraient alors affectées à d’autres tâches de surveillances, notamment au sein de la nouvelle brigade anti-insécurité.
7201 Demain, il va aller en {{tôle}}.
7202 Tu as fait de la {{tôle}} ?
7203 C’est la {{taule}} galvanisée.
7214 en {{tan}} que meneuse intrépide, elle a toujours fait preuve d’une grande imagination.
7215 il est bien évidemment {{tant}} d’en finir avec ça.
7224 Elle l’a observé par un miroir sans {{teint}}.
7225 Elle a acheté un nouveau fond de {{tain}}.
7235 elles seront à {{tord}} accusées.
7236 ils ont {{tords}}…
7237 ils ont {{tord}}.
7238 ils n’ont pas {{tord}}.
7249 ces araignées {{vénéneuses}}.
7250 ce champignon {{venimeux}}.
7262 en finir avec le {{vert}} qui était dans le fruit.
7263 un immonde {{vert}} de terre
7272 ce {{vieux}} homme
7273 c’est un {{vieux}} imbécile.
7274 Le {{vieux}} homme était parti. ->> vieil
7283 après avoir {{mi}} ses souliers tenir
7284 avoir {{pus}} réussir
7285 ce qu’ils ont {{pue}}
7286 il a {{pues}} partir
7288 de plus en plus {{concerner}} par ce problème
7289 après avoir mis à jour sont {{profile}}.
7290 il s’agit de {{mette}} en évidence.
7306 __mc__ des {{portes-avions}}.
7317 Nous vous donnons rendez-vous {{Mercredi}} le 18.
7331 15 {{Septembre}} ->> septembre
7332 23 {{Messidor}} ->> messidor
7333 ils viendront en {{Mars}}. ->> mars
7356 Nous n’avons reçu aucune décision de l’{{état}} fédéral.
7357 Les {{états}} démocratiques ne sont gouvernés que par des hypocrites et des opportunistes.
7358 C’est une affaire d’{{état}}.
7359 la défense de l’{{état}}. ->> État
7360 C’est une prérogative de l’{{état}}-nation
7374 des {{français}} sont arrivés ->> Français
7375 c’est de conception {{Allemande}} ->> allemande
7376 une référence aux {{israéliens}}
7377 une {{érythréenne}}
7378 et des {{soudanaises}}.
7379 les Îles Britanniques.
7380 Allemands contre Grecs, Grecs contre Allemands
7381 sept Français sur dix
7382 l’océan Indien
7389 des {{parisiens}} en vacances
7402 il ne parle qu’{{Allemand}}.
7403 ta traduction en {{Russe}} est superbe.
7410 C’est le {{moyen age}}, chez ces ploucs.
7431 L’{{église}} orthodoxe. ->> Église
7432 un homme d’{{église}} ->> Église
7433 les sacrements de l’{{église}} ->> Église
7434 Une {{Église}} baroque. ->> église
7435 L’{{Église}} Saint-Paul. ->> église
7436 Un homme d’{{église}}. ->> Église
7447 Ça se passe en Europe du {{nord}}.
7448 J’ai visité toute l’Afrique du {{sud}}.
7449 Dans l’Europe de l’{{ouest}}.
7459 J’en veux 3 {{Mètres}}.
7460 Elle en prendra vingt {{Grammes}}.
7473 à en {{parlé}} sans cesse
7482 Il tentait de {{raisonné}} en homme libre
7483 sa façon de {{nettoyez}} était inefficace.
7490 de nous {{libérez}} de lui
7497 de les {{changeait}}
7504 y {{mangée}} était un supplice
7512 pour {{mangé}} à sa faim, il faudra chasser.
7513 C’est pour {{attaqué}} la journée.
7520 pour nous {{chassez}} de chez lui
7527 sans {{dérogez}} aux règles en vigueur dans cet établissement
7534 Nous {{intéressé}} à la question ne suffit pas à faire de nous des experts.
7535 nous {{ridiculisé}}
7536 vous {{mangé}}
7544 Peuvent-elles s’{{installaient}} ici ?
7545 Peut-il {{chassé}} ces intrus ?
7546 Ne veux-tu pas {{gardé}} ton boulot ?
7554 est-ce que {{rapporté}} ces données nous aidera ?
7555 est-ce que {{priait}} est la solution ?
7556 Est-ce que Pierre Xazzz va bien ?
7557 Qu’est-ce que rapporte réellement Dassault & Co au budget
7564 commence par {{mangé}} le poulet.
7565 enfin la petite finit par {{pleuré}} à chaudes larmes.
7566 sa tournée, elle la finit par Rodez.
7574 cessez d’{{anesthésié}} ces gens !
7595 ce tableau {{voler}} coûte très cher.
7596 la difficulté {{passer}} t’aidera par la suite
7597 leur compte {{épurer}} servira encore.
7598 Le vieux cocher avait mission
7606 les documents {{scanner}} ne sont pas lisibles.
7607 tes doutes {{remâcher}} deviennent difficiles à vivre.
7616 nous {{épuisants}} à la tâche pour des clopinettes, nous défaillîmes.
7719 tandis que d’autres perçoivent le bon goût de la soupe.
7720 Je me doute bien que vous avez trouvé la réponse.
7721 Nous nous doutons bien qu’il y a une entourloupe derrière cette affaire.
7749 __ocr__ vous serez {{couche}} en terre.
7750 __ocr__ nous serons {{presses}} de monter à bord de ce train-ci.
7751 __ocr__ elle était toujours persuadée que B. serait {{acquitte}}
7752 __ocr__ je reconnais que j’ai pas {{traîne}}
7753 __ocr__ elle est fauchée et a {{emprunte}} de l’argent
7754 __ocr__ Alors il lui est {{remonte}} dessus
7755 __ocr__ quel héros d’avoir {{affronte}} ces salopards de la police
7756 __ocr__ il n’était pas le seul à être {{remonte}} contre eux.
7757 __ocr__ par terre et je suis {{retourne}} sur la tombe.
7758 __ocr__ Après on a {{creuse}} vers le haut.
7759 __ocr__ il a {{affronte}} une bande de voleurs de bétail.
7760 __ocr__ il était sublime.
7761 __ocr__ elle avait envie de s’en sortir enfin.
7762 __ocr__ la longueur de la circonférence étant égale à…
7774 tout ceci ne me rapporte {{guerre}}
7781 je ne m’en soucie {{guerre}}
7788 Il n’y prête {{guerre}} d’attention.
7789 Elle n’en accorde plus {{guerre}}.
7796 ne plus {{guerre}} s’en soucier
7812 c’en est fini d’eux, ils sont comme morts
7813 c’en est assez, ça suffit
7814 tout ça, {{s’en}} est fini.
7815 {{s’en}} est assez de ces foutaises.
7816 c’est tellement idiot, {{s’en}} est dérisoire…
7824 cela ne va pas de {{soit}}.
7834 ces emmerdeurs crient bien trop {{forts}}
7835 ces animaux paraissent forts, mais ils sont faibles.
7836 ils sont forts, ces gars-là.
7837 ils se croient forts.
7838 je les imagine forts et intelligents.
7839 elles les veulent forts et astucieux.
7840 les écarts ont été plus forts en une génération
7849 arrête d’y {{consacré}} autant de temps.
7856 Il s’agit de me {{donnait}} tout ça.
7864 de me le {{facturez}}
7874 Tu fais {{décoloré}} tes cheveux ?
7875 je veux {{changé}}
7876 je ne veux pas {{mangé}}
7877 je sais {{mangé}}
7878 je ne voulais pas {{marché}}
7879 Elles ont voulu {{mangé}} de la viande.
7880 elle fit peu {{mangé}} les enfants
7881 fait pourtant avéré et corroboré par le même sondage.
7889 me faire constamment {{laminé}} au jeu, ça finit par me fâcher.
7897 Je suis fatigué de vouloir {{essayé}} d’y remédier.
7905 Il faut savoir {{arrêté}} les frais.
7906 un certain nombre de savoirs spécialisés
7913 il faut sans cesse {{persévéré}}
7921 Il faudrait l’{{essayé}}.
7928 lui {{mangée}} beaucoup.
7939 je ne me suis jamais {{perdus}}
7940 je me suis donné du temps.
7948 tu t’es finalement {{retrouvés}} en mauvaise posture.
7949 tu ne t’étais pas laissé le temps d’y réfléchir.
7957 le dédale dans lequel il se serait {{perdue}}
7958 il s’était perdu dans la forêt.
7966 elle s’y était {{préparé}}.
7967 elle s’était trouvé un mari.
7975 Nous nous étions {{cru}} au paradis.
7983 ils s’y étaient {{abandonné}} avec ferveur
7991 elles ne s’y étaient pas {{donnée}}.
7992 sans fin elles se sont succédé
8004 s’être {{donner}} le mot.
8005 je me suis {{donnés}} à fond
8006 c’est de ce qui s’est {{passe}}.
8007 Ça s’était toujours {{passe}} comme ça avec elle
8008 elle s’est {{approche}} de la penderie
8009 terrorisant l’animal qui s’était {{cabre}}.
8010 ce qui s’est {{passe}}.
8011 s’y était {{consacrer}} avec enthousiasme.
8012 On s’est rencontrées lorsqu’on travaillait là-bas.
8013 des soins que je m’étais donnés.
8014 Si t’es pas contente, t’achètes pas.
8024 Elle te laisse {{épuisés}} par la tâche.
8025 Ils la laissèrent {{malades}}.
8026 Ils la laissent prendre le train.
8027 Elle te laisse finir le travail.
8028 Je me laisse de quoi finir.
8029 Il te laisse trois jours de délai.
8037 je les laisse {{indifférent}}.
8038 elle nous laissera {{perdu}} dans nos délires.
8039 je les laisse indifférents.
8040 tu nous laisses indifférentes.
8041 ils nous laisseront étourdis.
8042 nous laisserons étourdi cet homme.
8053 j’étais {{perdus}} ->> perdu
8054 j’aurais été {{perdus}} sans toi ->> perdu
8055 je n’étais pas {{perdus}} ->> perdu
8056 Je suis {{contents}}. ->> content
8057 J’ai été {{contents}}. ->> content
8058 Je parais {{contents}}. ->> content
8059 Je dirais que la vie est un peu moins {{cher}} en France.
8060 Je semble {{contents}}. ->> content
8061 J’ai {{mettrai}} du sel. ->> mis
8062 J’ai {{lut}} son journal. ->> lu
8063 je ne suis pas {{petits}}
8064 je parais {{insignifiants}}
8065 Je suis moi aussi complètement {{désespérés}} ->> désespéré
8066 J’y semble être {{perdus}}.
8074 tu n’es pas {{petites}}
8075 tu es {{insignifiants}}
8084 Il semble être {{partis}} pour toujours. ->> parti
8085 Il est {{demander}} à chacun de participer.
8086 Il est {{contents}}. ->> content
8087 Il est {{laisser}} à lui-même
8088 il ne semble pas {{étonnés}}
8089 il paraît {{stupides}}
8098 c’est {{condescendants}}. ->> condescendant
8099 C’est {{finis}}.
8100 C’est donc seules que les deux femmes sont amenées à comparaître
8108 Ç’avait été {{horribles}}
8118 ça semble {{perdus}}
8119 cela paraît {{incroyables}}
8120 Je n’arrêtais pas de me répéter que tout cela était peut-être pure imagination
8130 elle a été {{perdu}} sans toi ->> perdue
8131 Elle semble être totalement {{ruiné}}. ->> ruinée
8132 Elle est complètement {{fol}}. ->> folle
8133 elle n’est pas {{petits}}
8134 Elle est de plus en plus {{belles}}. ->> belle
8143 celle qui paraît {{dingues}} de toi
8153 nous paraissons {{faible}}
8154 Nous paraissons avoir été complètement {{prise}} de panique. ->> prises
8164 ils sont {{parti}}. ->> partis
8165 ils sont {{parties}}. ->> partis
8166 ils restaient {{méfiantes}} ->> méfiants
8167 Ils semblent avoir été {{attaqué}} par des soldats. ->> attaqués
8168 Ils sont, semble-t-il, {{parti}} à la chasse.
8169 Ils sont bel et bien {{mort}}.
8170 Ils sont tout à fait {{désœuvré}}.
8171 ils sont, qu’on le veuille ou non, déjà {{parti}}.
8172 ils sont jour après jour plus {{perdu}}
8173 ils sont très loin d’être {{idiot}}.
8183 elles n’ont tout de même pas été {{attaqué}} ->> attaquées
8184 Elles sont {{affamé}}. ->> affamées
8185 Celles-là sont {{folle}}.
8186 celles qui redeviennent {{méchante}}
8194 j’ai été {{instruis}} par elle
8195 avoir été {{prit}} par surprise
8210 Je ne peux pas être {{méchants}}.
8211 j’aurais vraiment été {{tentés}}
8212 je ne pense pas être {{démasqués}}
8213 Je veux être {{méconnaissables}}
8214 je voudrais bien être dans ses souliers
8223 tu ne crois pas être {{meilleurs}}.
8224 tu ne crois pas avoir été {{découvertes}}
8233 Il peut être {{observée}}.
8234 celui-là pensait être {{perdue}}
8235 celui-là peut être {{perdue}}
8236 il pense avoir été {{volés}}
8237 lui qui ne pensait jamais être {{reconnus}}.
8247 ça ne semble pas avoir été {{conçus}} pour ça.
8257 elle ne croit pas être {{trompé}}
8258 ici, elle ne risque pas d’être {{attaquées}}
8267 celle qui pense être {{découvert}}
8276 nous pensons être {{désiré}}
8277 nous ne devons pas être {{instruit}}
8287 ils croient être {{perdu}}
8297 elles veulent être {{différente}}
8298 Elle peut être {{observées}}.
8299 Elles ne peuvent pas être {{observée}}.
8300 elles doivent être {{fâché}}
8301 elles doivent avoir été {{attaqué}}
8302 elles peuvent avoir été {{trompé}}
8303 elles souhaitent être plus {{considérée}}
8329 la danse est {{fini}}…
8330 Un orage est {{annoncée}}.
8331 Une averse est {{annoncé}}.
8332 Le chien ne sera pas {{oubliés}}
8333 les femmes sont vraiment {{partis}} ->> parties
8334 les hommes ne sont pas tout à fait {{fâché}} ->> fâchés
8335 les enfants ne sont pas {{content}}
8336 les réunions sans cesse reportées sont {{annulés}}
8337 l’avenir de la région était {{suspendue}}
8338 il prétendait que les banques universelles « à la française » s’{{était}} très honorablement comportées
8348 Antoine est {{mariée}}.
8349 Antoine n’est pas {{mariés}}.
8350 Antoine est peut-être {{fatiguée}}.
8351 Éric n’est pas très {{fatiguée}}.
8352 Martine est {{marié}}.
8353 Martine n’est pas {{marié}}.
8354 Martine est très {{intelligent}}.
8355 Martine n’est pas très {{intelligent}}.
8365 {{Découragés}}, je suis parti.
8373 — {{Déçue}}, il s’en est allé.
8381 — {{Déçu}}, elle s’en est allée.
8389 Très vite, ils sont partis
8390 Une fois terminé, ils sont revenus.
8391 Vraiment {{soucieuse}}, ils sont.
8392 Désolé, ils ne viendront pas.
8393 Pire, ils piétinent parfois les droits humains.
8401 Absolument {{heureux}}, elles exultèrent de joie.
8411 Elles se sont {{rendues}} compte
8412 La puissance publique s’en est-elle rendu compte ?
8445 serais-je {{fâchés}} contre vous ?
8446 Est-elle {{arriver}} ?
8447 Sont-elles {{arriver}} ?
8448 Est-il {{arriver}} ?
8449 Sont-ils {{arriver}} ?
8450 Est-elle déjà {{arriver}} ?
8451 Sont-elles tout à fait {{arriver}} ?
8452 Est-il déjà {{arriver}} ?
8453 Es-tu {{arriver}} ?
8454 Sont-ils déjà {{arriver}} ?
8455 Es-tu déjà {{arriver}} ?
8456 Sommes-nous {{arriver}} ?
8457 Sommes-nous déjà {{arriver}} ?
8458 Était-elle {{fatiguer}} ?
8459 Ne sont-elles pas {{aveugle}}
8460 N’est-il pas {{aveugles}}
8461 Sont-ils vraiment {{aveugle}}
8462 Ne sommes-nous pas {{aveugle}}
8463 Est-il question de ceci ou de cela ?
8464 Est-ce former de futurs travailleurs ou bien des citoyens
8487 je me savais {{implacables}} avec eux
8495 quand tu te montres {{infaillibles}}
8505 lequel se veut {{imbattables}} ?
8515 Elle se sait plus {{fortes}} qu’eux tous.
8516 elle se vit {{abandonné}}
8525 à celle qui se révélera {{attentif}} à tous ces problèmes.
8533 nous nous pensions {{invincible}} jusqu’au jour où tout a basculé.
8543 ils se montrent {{exigeantes}}
8553 elles se sentent {{perdu}}
8591 ces hommes le rendent {{dingues}}
8592 Il me considère {{stupides}}
8593 Elle nous trouve {{stupide}}
8594 Je les crois {{capable}} du pire
8595 la voilà {{perdu}}
8596 nous nous crûmes {{perdu}}
8597 Elle me rend {{folles}}.
8598 l’homme se considère {{instruits}} alors qu’il n’est qu’un aveugle qui tâtonne.
8599 Me voilà bien {{avancés}} !
8600 avec eux, te voilà {{embarqués}} dans une drôle d’histoire…
8601 un accident et nous voilà mal {{barré}}…
8602 Le voilà {{perdue}} dans son délire.
8603 un peu de maquillage et la voilà {{jolis}} comme un cœur.
8604 les voilà pauvrement {{équipé}} pour un tel périple.
8605 une chance pour elle alors qu’il n’a pas choisi
8606 elle se révèle d’ailleurs être une alliée de taille
8624 ils leur avaient {{donnés}} du fil à retordre.
8625 il a {{affronte}} une bande de voleurs de bétail
8626 Ils avaient barre sur lui.
8636 Les femmes lui avait {{conseillées}} de se taire.
8637 le mur avait {{était}} détruit
8646 je les avais {{trompé}} avec mon baratin.
8655 Ces maisons nous avaient {{subjugué}}.
8656 C’est mot pour mot un script qu’on nous a filé.
8665 ils l’avaient {{retrouvés}}.
8674 ces livres m’avaient {{ennuyés}} au-delà du dicible.
8683 des hommes, des femmes, des enfants qui ne leur avaient {{faits}} que du bien.
8693 Il a {{prit}} le train.
8694 Les élèves lui ont {{données}}.
8695 Les élèves lui ont {{donnés}}.
8696 Les élèves lui ont {{donnée}}.
8697 Nous lui avons {{donnée}} un cadeau.
8698 Vous lui avez {{donnés}} un cadeau.
8699 Ils leur ont {{données}} un cadeau.
8700 ils avaient, en ce temps-là, déjà {{perdus}} leurs illusions
8701 Nous l’avons {{mangés}}.
8702 Nous l’avons {{mangées}}.
8703 Ils ne me l’ont pas {{donnés}}
8704 Les élèves m’ont {{écoutés}}.
8705 Les élèves t’ont de temps en temps {{écoutées}}.
8706 Les élèves ne m’ont pas {{écoutés}}.
8707 Les élèves ne m’ont pas {{écoutées}}.
8708 Nous ne t’avons pas {{écoutés}}.
8709 Nous ne t’avons pas {{écoutées}}.
8710 Avoir {{instruite}} notre mère
8711 Après avoir {{baissés}} nos tarifs
8712 Je viendrai, après avoir vraiment {{écoutée}} le prof.
8713 Alexandre aujourd’hui nous a {{quitté}}
8714 Mes joueurs, je les ai fait reposer
8715 Mes joueurs, je les ai fait se reposer
8716 Il nous avait dit que…
8717 Elle avait {{pose}} son tricot ->> posé
8718 Vous l’avez {{trouvez}}. ->> trouvé
8719 Il a {{donner}} sa vie pour elle. ->> donné
8720 Le maire a {{créée}} un risque.
8721 nous avions quelque peu {{tempérés}} leurs ardeurs
8730 m’avoir {{terminer}}.
8731 il m’a {{souffler}} la bonne réponse.
8732 elle t’en a {{parle}}.
8733 c’est vous qui m’avez {{convertit}}.
8747 Les documents qu’ils ont {{acheté}}.
8748 les flacons qu’ils ont réussi à acquérir
8749 ça faisait des années que j’avais délaissé ce lieu
8750 Les électeurs de Donald que l’on avait rencontrés jusque-là boivent l’eau d’une seule fontaine : Fox News et les sites et radios conservateurs.
8761 Le document qu’ils ont de temps en temps {{achetés}}.
8762 L’homme que j’ai {{aidée}}.
8763 L’homme qu’ils ont beaucoup {{aidée}}.
8764 L’homme que nous avons un peu {{aidée}}.
8765 le flacon qu’ils ont réussi à acquérir
8779 La femme que j’ai {{aidé}}.
8780 La femme que j’ai beaucoup {{aidé}}.
8781 La femme que j’ai un peu {{aidé}}.
8782 la danse qu’ils ont réussi à faire
8792 ce que ça a {{donnée}}
8802 Avoir {{marcher}} toute la journée m’a épuisée.
8827 A-t-il {{du}} se résoudre à céder ?
8828 L’échec est {{du}} à une erreur de calcul
8829 L’échec est {{du}} en partie à un manque de préparation.
8830 Tu as reçu ton {{du}} pour ton travail.
8831 J’ai {{du}} lui donner.
8832 J’ai {{du}} leur prendre.
8833 que ça vous plaise ou non, c’est notre {{du}}.
8834 Il a {{du}} leur prendre.
8835 Voici ce qui t’est {{du}}.
8836 Voici ce qui me sera {{du}}.
8837 Voici ce qui vous est {{du}}.
8838 Il veut qu’on lui rende son {{du}}.
8839 Aurait-il {{du}} {{prendre}} son repas plus tôt ?
8840 Avez-vous {{signez}} le contrat ?
8841 Ont-ils {{signer}} le contrat ?
8842 Ai-je déjà {{signez}} le contrat ?
8843 A-t-il déjà {{signer}} le contrat ?
8873 Avais-je {{laissés}} ces notes sur la table ?
8874 l’avait-il {{regardés}} longtemps ?
8875 les avais-tu {{acheté}} là-bas ?
8876 {{A}} vous lire, on ne sait plus que penser de toutes ces histoires
8877 Combien de bêtes n’as-tu pas déjà massacrées
8878 Combien de bêtes as-tu déjà massacrées
8879 les ont-ils {{détecté}} ?
8880 l’a-t-il {{finis}} ?
8881 m’as-tu {{entendus}} ?
8891 Nous {{arriverez}} demain.
8892 Et, nous laissant étonnés d’être encore là sans y avoir rien compris,
8902 Vous {{arrivais}} trop tard.
8912 se {{considérez}} comme un génie…
8913 se {{rencontrerons}} demain grands et petits.
8914 se {{crois}} élu par Dieu…
8915 avec ceux se trouvant sur leur chemin
8946 L’hôtel {{ou}} ils sont allés l’été dernier.
8961 {{Apportes}} ton fric à cet homme.
8962 N’{{abandonnes}} pas si vite.
8963 Castres est une belle ville.
8964 Limoges aussi.
8972 {{Allés}}, on y va !
8973 — {{Allé}} prendre une cuite.
8988 {{Finit}} ton assiette.
8989 Ne {{pourrit}} pas l’ambiance.
8990 Suffit de s’en servir.
8991 Et ne doit pas être rejeté dans les limbes.
9005 {{Prend}} le chemin de droite.
9006 N’{{attend}} pas qu’elle vienne.
9007 — Pour ma part, répond P., je crois que tout va bien.
9015 {{Vas}} lui mettre une branlée.
9027 {{Soit}} cohérent avec toi-même.
9028 Ne {{soit}} pas con.
9036 {{Ait}} la foi !
9052 {{prend}}-m’en trois, s’il te plaît.
9053 {{Sert}}-toi d’eux autant que tu le peux, puis casse-toi.
9054 — {{Abandonnes}}.
9055 Ne {{donnes}} pas autant.
9056 N’{{insistes}} pas.
9057 Ne {{finit}} pas ce devoir.
9058 {{Finit}} cette tarte.
9059 Ne {{soit}} pas en retard !
9060 Ne me {{prend}} pas pour un idiot
9061 Ne l’{{attend}} pas
9062 N’y {{vas}} pas
9063 Ne m’y {{attend}} pas
9064 Ne {{vient}} que lorsque je te le dirai.
9065 Ne l’y {{contraint}} pas
9066 {{Vient}}.
9067 {{Sert}} le plat.
9068 {{Attend}} la correction.
9069 {{Vas}} au diable !
9070 {{Écartes}} de moi cette coupe.
9080 {{Apportez moi}} ce dictionnaire
9089 {{Donne nous}} du café.
9098 {{chante les}} avec conviction
9107 {{Prends le}} avec toi.
9108 {{Dites leur}} que nous sommes là.
9109 un sujet si extrêmement politique et polémique lui a donné un accès
9110 Les États d’ores et déjà très affaiblis le seraient encore plus
9111 « C’est ainsi », résume la cyptologue (erreur orthographique délibérée sur “cyptologue” pour empêcher certains faux positifs)
9112 Notez le peu de cas qui en est fait en général dans les médias
9121 donne{{-m-en}} encore
9130 {{donne m’en}}, s’il te plaît.
9139 les analyses, {{donne-les moi}}
9148 {{prends-leur en}}
9157 {{apporte-les nous}}
9169 {{allons y}}, ça pue.
9170 {{vas y}}, ce n’est pas dangereux
9171 {{convenez en}}, c’est une belle affaire malgré son prix élevé
9240 Il vient {{a}} la maison.
9241 tu ne donnes rien {{a}} ces hommes.
9242 Nous les donnons {{a}} ces gens.
9243 j’arrive {{a}} la gare
9250 j’ai peur qu’il ne leur {{face}} quelque chose de mal
9259 il est posssible qu’il {{est}} confiance en toi
9260 La révolution est crainte.
9261 Je n’en ai cure.
9262 Notre communauté vous est redevable.
9263 l’humour est affaire de culture
9274 Comment {{pensé}} à ces choses sans perdre l’esprit.
9275 comment {{abandonnez}}
9283 Nous étions en train de {{trouvé}} une solution à ces soucis récurrents.
9284 en train de {{demandées}}
9285 en train de {{mangez}}
9294 elle préférait {{mangée}} seule.
9295 Il venait, comme d’habitude, {{discuté}} avec son ami.
9296 Ces types-là venaient {{mangé}} chez moi tous les dimanches.
9297 ils viennent bien entendu {{attaqué}} le parlement
9298 ils vont par voie de conséquence vraiment {{attaqué}} la banque
9299 elles ont pu {{mangé}}
9300 Cette affaire ne va rien {{arrangé}}.
9308 il devait {{utilisé}} son temps à bon escient.
9309 tu dois {{mangé}}
9317 faut-il {{pensé}} à ces choses-là encore et encore ?
9325 Mieux vaut {{consacré}} son temps à des occupations utiles.
9333 elle parvenait à y {{songez}} souvent
9334 je vais à Rodez.
9342 Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.
9349 pour s’y {{donnait}} le plus souvent.
9368 ils sont {{tromper}} par tous ces hypocrites.
9395 je {{donnerait}} tout pour y parvenir.
9396 Je le lui {{prend}}.
9397 Je l’{{apprend}}.
9398 Je les {{contre-attaques}}.
9399 C’est moi qui {{donnes}} des maux de têtes !
9400 Je maudis celui d’entre nous qui {{mens}}.
9401 J’y {{vient}}.
9402 J’en {{revient}}.
9403 je {{donner}}.
9404 Je ne leur en {{veut}} pas.
9405 Je ne le lui {{achèterait}} pas.
9406 Je ne l’y {{aie}} pas vu.
9407 Je ne t’{{attend}} pas.
9408 J’{{arrivait}} en retard.
9425 Tu ne {{ment}} jamais.
9426 Tu {{a}} mal ?
9427 Tu ne le lui {{prend}} pas.
9428 Tu ne m’{{attendra}} pas.
9429 toi qui n’y {{connait}} rien, ne nous ennuie pas avec tes théories.
9444 {{Il}} {{accusent}}.
9445 il {{bus}} du vin.
9446 Il {{pris}}.
9447 Il {{rougis}}.
9448 Il {{suivis}}.
9449 Il {{grandis}}.
9450 Il {{bâtis}}.
9451 Il {{bus}}.
9452 Il {{mues}}.
9453 {{il}} ne {{pensent}} à rien.
9454 il n’y {{aurais}} plus rien à attendre de la religion et de la politique.
9466 on {{remué}} beaucoup.
9467 on {{refuses}} tout cela
9468 on ne se {{bougent}} pas suffisamment
9480 Quiconque {{pensez}} s’en sortir se trompait lourdement.
9481 Il voulut punir quiconque s’y {{adonnaient}}.
9482 quiconque issu de la gauche n’a aucune chance.
9495 Ce qui, la plupart du temps, {{donnes}} des maux de tête.
9496 Ce qui {{fâchent}} mes amis.
9497 celui qui {{pensent}} mal de toute chose
9505 chacun {{fais}} comme il peut
9506 quelqu’un {{sauras}}
9507 quelqu’une se {{montrent}} désagréable
9508 n’importe quoi {{peux}} réussir
9509 n’importe qui {{peux}} y arriver.
9510 quelque chose {{sens}} mauvais ici
9511 l’un d’eux {{viendras}}
9512 ce {{dois}} être ennuyeux
9513 ce {{seras}} foutu
9514 mais ça ne vous {{aideras}} en rien
9515 Cela ne t’{{aideras}} pas.
9516 Cela {{dis}}, on ne sait pas comment s’en sortir.
9517 Y avait-il seulement quelqu’un pour vouloir soumettre ses recherches ?
9532 Tout {{reviens}} à ça.
9533 Tout qui {{deviens}} fou.
9534 Le tout nouveau président de la fondation qui héberge Wikipédia
9535 tout discours de sortie nourrit immanquablement la sortie
9536 Tout vous expliquer est difficile.
9537 J’essaie de bien tout vous expliquer.
9546 Lequel {{viendraient}} nous donner des leçons ?
9547 Laquelle choisir ?
9548 Lequel manger ?
9558 tu vois, c’en {{étais}} trop pour elles.
9559 cet homme, perdu dans ses pensées, allait {{c’en}} {{faire}} du souci.
9560 C’en était malsain.
9561 C’en devenait trop.
9576 Elle {{conquis}}.
9577 Elle {{finis}}.
9578 Elle {{pâlis}}.
9579 {{Elles}} {{donne}} des leçons.
9580 {{Elle}} ne nous {{croient}} jamais.
9581 {{elle}} {{sont}} parties.
9582 {{elle}} ne {{sont}}
9583 {{elle}} {{sont}} partis.
9584 elle {{demeures}}
9585 elle {{mangeras}}
9586 elle {{fus}} partie
9593 Mieux {{vaux}} ne rien dire.
9594 Mais là-bas mieux {{valais}} ouvrir sa gueule que se taire.
9603 Personne ne {{peux}} me le dire.
9604 Rien ne {{sers}} de courir
9605 Rien n’{{arrives}} sans raison
9606 Rien, en ce qui le concernait, ne {{pouvais}} le ramener à la raison.
9607 personne n’en {{parlent}}
9608 aucun d’entre nous n’{{as}} donné
9609 aucun ne {{vas}} là-bas
9610 nul ne {{sais}} que faire
9611 nulle n’{{iras}} là-bas
9612 nulle femme ne {{saurais}} le faire
9613 nul homme ne {{sauras}} s’y prendre
9626 un des membres présents au conseil {{demandent}} un vote à bulletin secret
9627 une des femmes de ce conseil ne {{céderaient}} jamais au chantage.
9628 l’un des chants les plus diffusés pendant la Révolution culturelle
9636 manger {{fais}} grossir.
9637 boire immodérément {{nuis}} à la santé
9653 La {{N.S.A.}} {{espionneras}} toujours tout le monde
9654 La suspicion envers les élus {{accroissaient}}… ->> accroissait
9655 Le chien n’{{es}} pas mort.
9656 Ce roman-là de Jean-Paul Sartre {{es}} passionnant.
9657 La Corée {{peux}} gagner.
9658 La Corée ne {{pourras}} pas gagner.
9659 une hausse de 2 % {{satisfais}} tout le monde ->> satisfait
9660 L’homme y {{donnes}}
9661 Le chien y {{viens}} ->> vient
9662 L’homme le {{deviens}} ->> devient
9663 La femme la {{prends}} ->> prend
9664 Le feu nous {{donnes}} chaud.
9665 tout le monde {{prends}} ses aises ->> prend
9666 J’aimerais aussi que mon problème {{sois}} réglé. ->> soit
9667 La proscription de nager {{pourraient}} nous porter préjudice à long terme ->> pourrait
9668 L’hypothétique nouveau président
9669 une majorité de garçons voient mal comment faire
9685 mon chat {{sautes}}
9686 cette fille {{bouffes}} comme mille
9687 cette marchande {{marchandes}}
9688 la marchande {{marchandes}}
9689 la chatte {{finis}}
9690 le chat {{finis}}
9691 une crise {{violent}}
9692 un cri {{violes}}
9728 Caroline, quand l’heure viendra, {{décideras}} de la conduite à tenir.
9729 ceux-là, dans tous les cas de figure et dans tous les coups ratés, {{comprenais}} mal pourquoi on leur en voulait.
9730 Lui, quand il y pensait, en {{arrivai}} à chaque fois à la même conclusion.
9731 Elle, ici et dans tous les cas de figure, {{veux}} toujours en faire plus.
9732 Le total de cette opération, contrairement à ce qu’on pense, {{équivaux}} à au moins trois d’entre eux.
9733 {{j'}}ai signalé que {{j'}}essayais de regrouper les paragraphes. (Tests avec apostrophe droite.)
9750 nous {{donné}} trop de considération
9751 nous vous {{donnerez}} trop de considération
9752 nous qui {{somme}} si savants
9753 nous qui {{mourront}} pour toi.
9766 vous {{donné}} du bonheur
9767 vous lui {{donner}} du temps
9768 vous qui {{avançait}} dans la nuit comme des ombres furtives
9783 les hommes et les femmes, qui sans un bruit, sans une parole amère, {{continuerons}} leur tâche n’en seront pas plus récompensés.
9784 il était dit que cette femme et son frère {{promènerez}} leur chien à cette heure de la journée.
9785 cet homme et cette femme {{pouvez}} y parvenir avec de la persévérance
9786 Comme on lui disait que vous-même aviez déjà consulté le notaire
9787 ce sont des terroristes et ça ne nous arrivera pas à nous, qui n’avons rien à nous reprocher
9788 mes supérieurs et moi-même avons pris la décision de ne pas vendre
9789 Ni lui ni moi n’avions mangé
9790 Mon épouse et moi-même avons toujours dit
9804 {{Ils}} {{vienne}} souvent.
9805 Ils ne m’{{attends}} pas.
9806 {{Ils}} vous le {{donne}}.
9814 Ceux qui {{chante}} toute la journée…
9815 Celles qui {{pense}}.
9824 lesquels {{devienne}} des ennuyeux incomparables.
9825 Mais parmi les millions de causes à défendre, lesquelles choisir ?
9839 {{elles}} {{avance}} rapidement sur ce projet
9840 {{Elles}} n’y {{comprenne}} rien
9841 L’expérience sensible qu’il nous restera bientôt d’elles est à peu près
9849 ces gens-là ils {{on}} {{raison}} plus souvent que la plupart des gens.
9850 Ils soutiennent ceux qui {{on}} {{tant}} de raison d’être en colère.
9858 celles-là {{on}} {{vraiment}} un problème avec la religion.
9859 j’ai, tu as, ils ont, elles {{on}}
9860 Or parmi celles-ci on trouve typiquement d’un côté les structures
9875 la plupart des hommes {{vienne}}
9876 La plupart {{admet}}
9877 beaucoup {{vienne}}
9878 d’aucuns {{pense}} que c’est faux
9879 beaucoup qui ne {{pense}} jamais à rien, mais qui ont quand même des avis sur tout.
9880 beaucoup entre la peste et le choléra.
9888 certains {{prenne}} leur temps
9889 Plusieurs qui {{pense}} que c’est une arnaque se sont quand même trompés.
9903 Les abstentions {{est}} présumée manifester un défaut d’opinion marquée
9904 Les cours de culture générale nous {{apporte}} de l’ouverture d’esprit.
9905 Les hommes ne le lui {{pardonnes}} pas.
9906 Les infirmières à mi-temps ne {{travaille}} pas dans cette aile.
9907 les données, en quantité plus que suffisante, {{indique}} que…
9908 Ses « chiens » {{coure}} sur ma pelouse.
9909 Les hommes comme celui-là {{mange}} comme deux.
9910 les récompenses distribuées à parts égales {{était}}…
9911 Les États-Unis d’Amérique se {{compose}} de 50 états.
9912 Les enfants en {{manges}}.
9913 Les ombres la {{donnes}}
9914 Les grands hommes politiques
9915 les charmantes petites mines de toutes les jeunes filles
9916 Les pauvres petites dames sont folles
9917 Les entrepreneurs ont {{cherchaient}} la reconnaissance sociale
9918 le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler.
9930 Des hommes {{arrive}}.
9931 des femmes qui {{conduise}} la marche du monde.
9940 mes filles {{passe}} ce matin
9941 vos filles {{passes}} ce matin
9949 les grands {{danse}}
9950 les filles {{passes}} ce matin
9951 les marchands {{marche}}
9952 les marchands {{plie}}
9953 les marchands {{paye}}
9954 les marchands {{marchande}}
9955 les marchandes {{paie}}
9956 les marchandes {{marchande}}
9957 les chattes {{finis}}
9958 les chattes {{manges}}
9959 les chattes {{danse}}
9967 certains hommes {{marchandes}} sans cesse
9975 certaines femmes {{danse}} beaucoup
9987 Quel que {{sois}} son passe-temps, il y consacre trop de temps.
9988 Quels que {{soient}} le feu utilisé.
9996 {{Quels}} que soit leur problème, ça n’en finit jamais.
9997 {{Quelles}} que soit leur voiture, elle tombe constamment en panne.
10006 Quels que {{soit}} les salopards qui ont fait ça.
10007 Quels que {{sois}} les chaussures que je mets, elles me font mal aux pieds.
10015 {{Quel}} que soient les avantages reçus, ce n’est pas assez.
10016 {{Quelle}} que soient nos problèmes, on en parle toujours trop.
10031 Marc {{arrives}} demain.
10032 Paul ne {{viens}} pas demain.
10033 Marc Aurèle {{étaient}} l’empereur des Romains. (Pas de trait d’union sur Marc Aurèle.)
10034 Arthur D. parvient à…
10035 Les fondateurs pionniers de l’Internet n’avaient pas prévu
10036 les compteurs Geiger ne détectent pas le polonium
10037 Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées
10048 Samantha et Eva {{viennes}} demain.
10049 Samantha et Eva leur {{décrive}} une leçon.
10060 les possibilités qu’{{offrent}} le chien
10061 les possibilités que {{donnent}} le chien.
10062 Où {{vas}} l’homme ?
10063 de la même façon que survivent le swing ou le latin.
10064 en proportion des efforts que requièrent son entretien et son exploitation
10065 une crainte aussi que renforcent son éloignement et le protocole compliqué
10066 à l’époque de Mansur que grandissent la place et le rôle de…
10067 où vivent la majorité des immigrés et des enfants d’immigrés
10075 D’où {{vienne}} les hommes ?
10076 Comment {{danse}} les femmes ?
10083 Qu’est-ce que tu crois que {{deviens}} réellement, immanquablement et subitement cet homme après une telle dérouillée ?
10084 ces sciences, ces religions, ces philosophies ne sont que contes destinés à nous donner l’illusion de la connaissance.
10091 peu importe ce que tu crois du lieu où l’{{abandonnerais}} ce salopard…
10132 {{mangé je}} {{ça}} avec dégoût ?
10133 {{viendrais je}} à la fête ?
10134 {{Seras tu}} là ?
10135 {{prend on}} le temps d’y réfléchir ?
10136 {{vient elle}} souvent ?
10137 {{viennent elles}} souvent ?
10138 {{retrouverons nous}} enfin la tranquilité ?
10139 Mais {{soutiendrez vous}} cette proposition ?
10140 {{Viendront ils}} demain ?
10141 je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
10149 {{Vas}}-je ->> Vais
10150 {{Prit}}-je ->> Pris
10151 {{prix}}-je le temps d’y parvenir ? Oui.
10159 {{Peut}}-tu ->> Peux
10160 {{peu}}-tu revenir chez moi ?
10170 {{Peux}}-il ->> Peut
10171 {{Attaques}}-t-on ->> Attaque
10172 {{Prends}}-elle ->> Prend
10173 {{Menthe}}-t-elle souvent ?
10174 {{viennent}}-{{il}} demain ?
10175 Le moteur choisi convient-il ?
10183 {{Prendront}}-nous ->> Prendrons
10184 {{Attendront}}-nous le train ->> Attendrons
10192 {{Attaquait}}-vous ->> Attaquiez
10193 Elle a de nombreux rendez-vous ce matin.
10194 êtes-vous là ?
10204 {{attaquant}}-ils ->> attaquent
10205 {{prendrons}}-elles un verre avec moi ?
10218 {{Ait}}-il arrivé à ses fins ?
10219 je n’{{avais}} pas parti avec eux.
10220 Avais-je partie liée avec lui ?
10221 il {{avait}} parti.
10235 J’{{aimerai}} savoir ce dont il retourne.
10236 dans tous les cas j’{{aimerai}} ne rien savoir
10237 Je {{voudrai}} qu’il soit déjà là.
10238 J’aimerai ces cours-là autant que les autres.
10239 J’aimerai la danse et la musique, puisque vous l’exigez.
10250 J’{{aurai}} aimé nous offrir ce magnifique cadeau.
10251 j’{{aurai}} voulu être un artiste.
10252 j’{{aurai}} préféré ne pas avoir à l’entendre.
10253 Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
10254 Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
10255 Quand j’aurai soif et faim, je m’arrêterai.
10268 Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
10269 s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
10279 dès qu’il le {{voie}}
10280 donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion
10291 Il suffit qu’il {{court}} plus
10292 Je veux qu’il {{finit}} son repas.
10293 quoi qu’il en {{conclut}}
10294 Je ne veux pas que tu {{es}} des ennuis
10295 Nul doute qu’elle nourrira à brève échéance la haine de demain à notre égard.
10296 Je ne doute pas qu’ils réussiront leur mission.
10297 Je me doutais bien qu’Apple pourrait marcher
10298 il ne fait aucun doute qu’Amazon le sait.
10299 quoi que nous autres hommes ayons pu faire
10306 à condition qu’il {{finit}} son boulot.
10318 Il {{ait}} parti.
10319 Il en {{conclue}} qu’il a eu raison.
10320 j’en {{aie}} marre
10321 j’{{aie}} faim
10331 Après qu’il {{ait}} allé
10332 Après que Paul {{ait}} mangé son repas.
10333 Après qu’il {{soit}} parti, il plut.
10337 L’homme sur le bateau de Patrick {{viens}} de temps en temps {{mangé}} chez moi.
10338 Ces marchands {{passe}} leur temps à se quereller.
10339 Ils jugeront en toute impartialité de ce cas {{délirante}}.
10340 Ils sont de manière si étonnante et si admirable {{arrivé}} à ce résultat…
10341 Les tests grand public de Jean-Paul {{montre}} des résultats surprenants.
10342 Ils ont à plusieurs reprises {{perdus}} leur sang-froid.
10343 Ces attaques à main armée {{donne}} la chair de poule.
10344 Réfléchir à tête reposée {{prends}} du temps.
10352 Du sable fin grippe les rouages (accord avec ce qui précède).
10353 Du monde noir sortent les envahisseurs (accord avec ce qui suit).
10356 Ça a l’air de t’aller.
10357 Et je m’en sors.
10358 C’est à chacun d’entre nous de suivre le modèle d’Amos.
10359 C’est toi qui voulais y aller.
10360 je ne suis qu’une joueuse en robe de soirée.
10361 Tu ne fais qu’aggraver les choses.
10362 Que veut-il ? Vous parler du boulot.
10363 La question, c’est qui est au courant.
10364 Ce pourrait être la fin.
10365 Tu t’en es tiré.
10366 à l’annonce d’un nouvel impôt – très souvent prétexte à…
10367 la voix mystérieuse de l’eau qui court et chuchote le long du bateau.
10368 Nous agissons au jugé.
10369 les fêtes battent leur plein.
10370 Pourquoi tu me dis tout cela ?
10371 La prochaine fois sera la bonne.
10372 Ainsi soit-il.
10373 Allez le lui dire.
10374 Il y a un siècle, les nouveaux riches étaient décriés par ceux qui avaient hérité leur argent.
10375 Les entrepreneurs ont cherché la reconnaissance sociale en se faisant passer pour des rentiers.
10376 Aujourd’hui, la relation a été inversée : les rentiers et les héritiers se présentent comme entrepreneurs.
10377 Ils prétendent avoir gagné leur revenu qui n’est que prélevé.
10378 Ils s’en sont aperçu.
10379 Elles s’en sont donné les moyens.
10380 T’en fais pas pour ça.
10381 T’es à ça de te faire virer.
10382 On s’en fout de qui c’est.
10383 que c’en était assez, en somme.
10384 Ce à quoi nous avons assité, c’est un déluge de sornettes.
10385 En Dordogne, la nouvelle réplique de la grotte reproduit fidèlement l’originale.
10386 Les candidats se réclamant du général de Gaulle se multiplient.
10387 On voit au passage le degré de connaissance qu’ont les journalistes de la campagne de Trump
10388 une majorité de contestataires s’en sont pris à elle
10389 Qu’a à cacher Patrick ?
10390 Ils les ont fait courir.
10391 Tu les as fait manger.
10392 Les mille et une nuits.
10393 Ceux à qui on refuse de donner une réponse.
10394 ceux qui ont refusé de participer à cette mascarade.
10395 Une lueur parfois çà et là vous parvient. (Brand, Henrik Ibsen)
10396 réunion des dirigeants… qui avaient à cette occasion invité Bill Gates.
10397 Je suis contente d’avoir connu ça.
10398 comprendre ce que “être” signifie.
10399 J’étais sublime.
10400 J’étais prise de vertiges.
10401 La date de dépôt limite des épreuves et des fichiers est fixée au 30 septembre.
10402 qui s’étaient avancés jusqu’au Main
10403 Pose ça là ou je fais un malheur !
10404 Je me suis senti très mal.
10405 La prise de son était difficile.
10406 Ce changement de ton prit tout le monde par surprise.
10407 Il renonça à faire et à le faire
10408 et, les ayant reçus, elle pensa
10409 l’herbe que la faux a couchée jaunit vite.
10410 Il a juste besoin de comprendre pourquoi ce garçon en est arrivé là et pourquoi il s’en est pris à lui.
10411 Elle prit une pose lascive.
10412 Cela a trait avec l’histoire complexe d’une nation qui a été prise en étau
10415 par le léger tissu de rayonne qui les protégeait en ce moment.
10418 Un moteur à cylindrée fixe
10421 Dans la poussière et les plâtras,
10424 se produire sur scène le 29 mai prochain
10425 ces avantages ne sont somme toute pas assez importants
10426 les différents partis politiques
10427 Certains ont encore du mal à y croire.
10428 Élus, chefs d’entreprise, professionnels de l’éducation, représentants des institutions, nous avons besoin de vous.
10432 J’ai cours à présent.
10433 Les mois d’après avaient été calmes.
10434 Quelque temps après eut lieu la séance de réception
10435 c’est-à-dire aux peuples dispersés suite à la guerre
10436 la violence du coup porté
10437 à vous qui avez faim,
10438 Vous, qui avez faim,
10439 Les chaudes effluves du soleil.
10440 je reçois pour chaque botte quelques cents.
10441 Ils vinrent un à un voter la mort.
10442 Dans mon rêve, j’appelais ça…
10443 J’étais dans une auberge.
10444 les enfants de ces populations apprenaient à parler l’anglais et même à le lire.
10445 Ils sont fous, c’est-à-dire déments
10446 J’y viens.
10447 J’en reviens.
10448 d’une manière un petit peu abusive et très réductrice.
10449 il est du devoir de la société civile d’analyser ces accords
10450 au bas de laquelle est aménagé un imposant portail à arc brisé en pierre de taille.
10451 Buenos Aires
10452 Quel est l’impact de ces problèmes dans ce cas particulier
10453 La partition « C: ».
10454 sur les quelque trois cents naufragés
10455 Ils eussent bien voulu pouvoir
10456 un lot de dés qu’on peut se procurer
10457 la sécurité au niveau de l’escalier empêche quiconque d’accéder à l’étage
10458 elle en avait eus
10459 Combien en as-tu eus ? (Note : les grammairiens ne s’accordent pas sur l’accord du participe passé précédé de “en”.)
10460 Tu reviens quand à Paris ?
10461 Tu restes jusqu’à quand à la maison ?
10462 L’une des pires
10463 une imprimante laser
10464 c’est pure imagination
10465 Bien entendu, elle a très peu de chances de le retrouver
10466 il s’acquitte de sa part
10467 Le cavalier, abusé par notre retraite, avait baissé sa garde
10468 n’y en aurait-il pas plusieurs
10469 je ne sais rien là-dessus, même pas qui s’en était occupé
10470 ne surtout rien amener
10471 Ce qu’ils sont influence leur regard sur moi
10472 Une demande de leur part un minimum justifiée.
10473 Au stator, comme le montre le profil ci-dessus, l’inducteur est tétrapolaire.
10474 Cette hypothèse est tout à fait valable, comme le montre le graphe ci-dessous.
10475 qu’il fut sans peine étouffé dans l’œuf
10476 durant les tout premiers jours
10477 un dîner aux chandelles prévu depuis longtemps
10478 la beauté physique plus que la compétence
10479 sans oser se l’avouer
10480 il se l’imagine
10481 l’encyclopédie naturelle puis la connaissance
10482 Tout est affaire de dosage
10483 il avait trouvé la piste d’une des deux bêtes
10484 la basilique de la Lune débordant de lumière
10485 Me voici.
10486 Si je trouve.
10487 Toi seul seras sauvé avec tout ce qui sera dans l’Arche
10488 La portée d’une variable en JavaScript est comme l’outil
10489 La portée d’une variable est comme l’outil
10490 Il y a en un parmi nous autres
10491 Il avait été juge pendant vingt ans.
10492 Faisons-les tous périr.
10493 épouser une fille de roi pour se faire une alliance
10494 Éric et probablement Bénédict seraient partants.
10495 Il doit toujours être dans les environs de son église.
10496 c’est ce que vous en faites !
10497 des travaux publics conçus suivant un plan
10498 Bible : 1 Rois
10499 Bible : 1 Corinthiens
10500 Bible : 1 Thessaloniciens
10501 Quelle est la chance d’y parvenir ?
10502 Tout montre cependant que les constructions
10503 jusqu’au ixe siècle
10504 Quelles explications pouvez-vous donner à cela ?
10505 jusqu’à Tarifa et Sidonia
10506 Tout flambe à la fois.
10507 Vivre dans la ouate.
10508 Quel sens a cette affirmation pour nous ?
10509 Avec quelle facilité
10510 Une attraction au moins égale à
10511 le fossé entre les uns et les autres n’était ni large ni profond.
10512 Dès le ixe siècle
10513 la formation d’une peau élastique qui se rétracte
10514 notre père qui es aux cieux
10515 Où que tu sois je te retrouverai
10516 L’équitation de travail est une technique de monte traditionnelle…
10517 Ils ont forme humaine
10518 une altitude de 1000 m environ
10519 le nombre d’or
10520 nous ne nous étions jamais fait prendre
10521 Elle comprend la couche se trouvant sur le plateau.
10522 Je m’imagine que les quelque cinq cents personnes qui…
10523 parmi les quelque 3 millions de personnes
10526 Ceux parvenus là
10527 Des termes peu amènes.
10528 Toute l’équipe d’audit peut consulter la fiche.
10529 Beaucoup a été accompli
10530 Ces données sont soit fournies par…, soit par…
10531 Y a-t-il une question que tu aurais souhaité qu’on te pose ?
10532 Lire, ce n’est pas épeler.
10533 Ce n’est pas manger qui fait grossir.
10534 Je sais ce qu’est aimer.
10535 Je sais ce que n’est pas aimer.
10536 Qu’ont fait les chercheurs ?
10537 Ce travail est colossal, il ne doit jamais être tenu pour achevé.
10538 la succession des événements telle qu’on se la rappelle
10541 Quelles que soient les femmes
10542 Quels que soient les hommes
10543 Quel que soit ce chien
10544 Quelle que soit cette garce
10545 Vous tous qui portez des charges.
10548 et que la toucher portait chance…
10549 On y supplée par un tableau.
10550 que le Verbe de Dieu peut seul conférer
10551 Ça ne vaut pas le coup de rester enfermés.
10552 Ce qui faisait de quelqu’un un homme.
10553 Le secret, mon ami, est de savoir écouter.
10554 Ces substances ont été, du moins amollies au point de conserver l’empreinte.
10555 Cette irrationalité n’est pas si dramatique que semblent le penser les plus rationalistes.
10556 4 SIEMENS
10557 Me Assis n’est pas ici.
10558 Quelle merde … puante.
10559 Pour savoir qui a tort, qui a raison.
10560 Ce matin, j’ai ES et c’est tout.
10561 Les étais posés au sol.
10562 Mais ces petits étais ne suffisaient pas.
10563 Celui qu’il brûle de détruire une bonne fois pour toutes.
10564 Hélas, vous vous en doutez maintenant.
10565 Il n’aurait de cesse de la renverser ou de la contourner.
10566 Sourde à toute parole y compris de la part de ceux qu’elle privilégiait
10567 Pareille solution ne pouvait hélas être réitérée.
10568 Je crois que t’aimeras ça.
10569 Je mangeais.
10570 et encore ça j’ai un peu tendance
10571 Le CE semble cependant prendre…
10572 Je suis déçue de ne pas avoir les moyens de régler ça seule.
10573 Dents de requin…
10574 Les personnes qui sont avec lui voient.
10575 Beaucoup de monde se rassemble.
10576 Comment il l’a appris.
10577 Comment voulez-vous qu’à vingt-deux heures trente un cadavre
10578 Le porteur de la télécommande pas plus que la créatrice ne sont revenus nous donner des ordres.
10579 j’espère que vous aurez le temps de tout lire
10580 Nous avons partie gagnée.
10581 de a à z
10582 de A à Z
10583 Le point S′ est sur la droite. (Il s’agit ici du caractère “prime”.)
10584 le ou les élément(s).
10587 rien de dérangé
10588 Au début on le traite de dérangé
10589 il vient… puis repart
10590 une photo noir et blanc
10591 pour ce faire, il faut partir
10592 une canadienne fourrée de poils de mouton
10593 ils sont en bonne santé physique
10594 elles sont en bonne santé mentale
10595 dans tout ce putain d’univers
10596 la leur n’est pas correcte
10597 qui doivent leur être livrés.
10598 en tout et pour tout ces trois-là
10599 De temps en temps
10600 De loin en loin
10601 allez au 10 avenue Constantin
10602 Ils avancent côte à côte
10603 Un type a l’air de beaucoup apprécier.
10604 Pour le soldat, dépouiller le paysan ou le colonel n’est pas voler.
10605 sous forme de chaleur
10606 avant sa dépose, il sera possible de faire les relevés nécessaires
10609 monarchie de Juillet
10610 révolution d’Octobre
10611 des cheveux blond platine
10612 L’homme qui se tenait devant lui lui présenta une bouteille.
10613 Était-ce cela d’avaler de l’huile ?
10614 Il y avait quelque chose fiché dans la prise.
10615 jusqu’à chez nous
10616 de chez eux à chez moi
10617 Les histoires de chacun apparaissent au fil des conversations.
10618 et bien des hommes y ont succombé
10619 La sortie était droit devant lui.
10620 avec lesquels j’arrive à vaincre
10621 L’erreur fut pour moi seul.
10622 les valeurs limites ne peuvent pas être réglées dans une plage négative.
10623 la pensée que j’ai décidé d’expliquer
10624 les objets que j’ai essayé de faire
10625 la phrase que j’ai essayé de lire
10628 après c’était la restauration…
10629 l’une saisissant la main d’albâtre rigide
10630 certaines saisissant la main d’albâtre rigide
10631 si on descendait on inscrivait sur le carton
10632 Erika est prise par surprise
10633 les lettres que j’ai voulu envoyer
10634 les lettres que j’ai voulu me donner
10635 les lettres que j’ai voulu t’envoyer
10636 si on l’empêchait il devenait
10637 Sa petite amie et lui, tous deux ivres, se sont révélés incapables d’écrire.
10640 m’oblige à toujours vendre
10641 m’oblige à souvent perdre
10644 il croyait qu’elle seule pouvait réussir
10645 un coefficient (C) de révision donné par la formule.
10646 Il eut ordre de s’emparer de tous les insurgés
10647 Annie, qui, entre deux danses, buvait beaucoup
10648 Il ne pouvait s’empêcher, entre deux jurons envers sa sœur
10649 Il devenait nerveux au fur et à mesure qu’il cherchait
10650 Il résista à l’envie qu’il avait de…
10651 elles sont bleu saphir
10652 elles sont gris anthracite
10653 ses plumes noir de jais
10654 La pierre utilisée était gris perle
10655 Une odeur de grillé réveilla la jeune femme
10656 Sous peine de voir l’allégeance de certains changer, il devait
10657 Elle espéra vainement ne rien s’être cassé.
10658 Les ayant vus entrer
10659 sans parti pris
10660 Fiona ou Deirdre parviendront à en apprendre plus
10661 les flots noir d’encre
10662 ses yeux châtaigne
10663 Ils avaient tous deux entendu son cri.
10664 Si Pierre et elle étaient déjà fiancés, ils devraient
10665 Les gens dépourvus de pigmentation étaient
10666 Je n’ai pas très envie de m’étendre sur le sujet
10667 Elle reconnut la peste qui tentait elle ne savait trop quoi.
10668 Un tentacule plus court que les autres l’agrippa.
10669 Il avait de toutes ses forces tenté de la faire échapper au danger.
10670 Il convient
10671 Conf. Alchimie, op. cit.
10672 et tout expliquer
10673 L’or a besoin tout d’abord d’être préparé
10674 ces ombres sont quant à elles habitées.
10675 les sept figures
10678 01 64 21 39
10681 Quelques kilomètres plus à l’ouest.
10682 Nous n’avons plus cours.
10683 Sa manière aigre-douce.
10684 Une interprétation et une application conformes aux exigences du droit communautaire.
10685 Ils font tous deux partie.
10686 Tu travailles pas mal.
10687 Je me savais pas assez malin.
10688 J’étais quelqu’un d’intelligent et de cultivé.
10691 Elle se livre à des interprétations tantôt extensives, tantôt restrictives, de la loi.
10692 Il faudrait encore déterminer le contenu du droit qu’une telle analyse lui confère.
10693 Une telle analyse m’en confère.
10694 Quant à présent…
10695 pour la manger
10696 sans les lire
10697 excepté les manger
10698 vendredi 13 juin 2014
10699 mardi 13 juin 2014 avant J.-C.
10700 mardi 13 juin 2014 av. J.-C.
10701 Quelles garanties leur avez-vous offertes ?
10702 pour les toucher
10703 Le législateur, adoptant malgré tout les dispositions envisagées,
10704 Entendue matériellement, la soustraction ne peut porter que sur un objet mobilier.
10707 500 m en 2 h (option : lettres isolées).
10708 ces créatures hybrides
10709 sur la nécessité d’explorer
10710 en les accompagnant avec des percussions
10713 La première équipe les prévint par radio.
10714 L’une d’entre elle saute haut.
10715 Le désir ardent du pouvoir.
10716 Ni les Anciens ni les Modernes Philosophes n’ont jamais fait autre chose.
10717 Les méchantes Philosophes n’ont jamais fait autre chose.
10718 Les mises perdues d’avance.
10719 Écouter n’est pas opiner.
10720 Je n’ai jamais rien mangé de souillé ni d’impur.
10721 Elles portent toutes des chapeaux.
10722 Un fusil longue portée.
10723 Certaines choses devraient changer.
10724 C’est peine perdue.
10725 Je le quitte énervée par son hypocrisie.
10726 Les manger sera mon bon plaisir.
10727 Mais elle les fait plus petites.
10728 Vient le temps de partir.
10729 C’est ce monsieur qui…
10730 Antonio Banderas.
10731 Les 4 juillet.
10732 Elles se révèlent de feu une fois brisées les barrières.
10733 Une assistance s’est assise par terre, certains restant debout.
10734 Serrer la main de John et de Barbara qui furent étonnés qu’ils se mirent à pleurer.
10735 L’échec est dû à une erreur de calcul.
10736 L’armée est sur le point de partir.
10737 Une partie est due à une erreur de calcul.
10738 La frustre temporalité que connaissent la plupart de mes frères et sœurs.
10741 Mise à jour gratuite.
10742 Les lettres que tu m’as envoyées.
10743 Je n’ai cure de ce que les gens pensent.
10744 Marie est mal à l’aise.
10745 Il vit que le secours inespéré.
10746 En tous sens.
10747 Savez-vous ce qu’auraient pensé vos parents ?
10748 Les pierres sont marron et grises.
10749 4.2.3 Écriture des nombres complexes.
10750 Hilda est comme elle est…
10751 La première fois que j’ai tenté l’expérience.
10752 Glacier du Trient et glacier des Bossons.
10753 Cf. rapport, cf. rapport.
10754 Chap. douze, chap. douze.
10757 J’ai l’impression que tu as compris.
10758 Sa spécificité se situera plutôt dans la façon qu’elle a d’approcher la matière.
10761 La pommade qu’elle a voulu me passer.
10762 Des gens qui ont réservé leur place ne se présenteront pas au jour et à l’heure dits.
10763 La procession reprit sa marche sans qu’il y eût rien de changé dans son cérémonial.
10766 Celui de textes dont nous ne percevons pas la beauté est douloureux…
10767 Elle souriait, comme si le vent et elle se comprenaient fort bien.
10768 Les étagères qui équipent ces chariots sont trop petites pour recevoir certains formats.
10769 Les voyageurs qui attendaient la correspondance furent réunis à une table ronde.
10772 Ce sont Tesla et Westinghouse qui emportent le contrat du gouvernement américain.
10773 Il fait presque nuit.
10774 J’ai fait le boulot tout seul et après j’ai eu la paix pour écrire tout ça.
10775 Le directeur et toute sa bande installés à la tribune d’honneur.
10776 Le paysage dans toutes les directions est somptueux.
10777 Les hommes accompagnant les tentes sont peu nombreux.
10778 Bravo pour l’évadé, bravo aussi pour ceux qui l’escortaient.
10779 On vit mieux son visage : autour de la bouche, quelque chose de crispé.
10780 Les contours de toutes nos vertus sont tracés par l’adversité.
10781 Trop couvrir la tête est mauvais.
10782 Gravir cette montagne est dangereux.
10783 L’agréable fièvre qui l’avait un moment habitée était tombée.
10784 Nous sommes frère et sœur.
10785 Il s’est interrompu et nous avons tous les deux regardé l’homme aux cheveux gris.
10786 Les jeunes officiels formant l’institut allemand de Paris professaient.
10787 De le faire disparaître dans des sacs-poubelle (dictionnaire 5.0.2).
10788 Pierre, Auguste, Cyprien étaient affalés.
10789 Ces lettres-là, Pierre et elle les lisaient ensemble.
10790 Laisser courir, seul dans la nature, l’un de ses jeunes prisonniers nouvellement arrivé.
10791 Le directeur et toute sa bande installés à la tribune d’honneur.
10792 La réminiscence d’une position de privilégié semblable à.
10793 Elle n’a guère affaire avec l’ascèse.
10794 Elle a déclaré cela excellent.
10795 Si faute il y a, ils ont le droit…
10796 Elle signale la fin du vers ou de la strophe.
10797 Alors, il chargea le marin tête baissée.
10798 Certes, mais entre-temps, des gens de toutes les races sont venus chez nous.
10799 Ni l’air ni l’eau ne sortent d’une amphore scellée.
10800 Ni lui ni son mouvement n’avaient d’argent.
10801 La rime et, en général, la règle acquièrent donc aussi cette fonction.
10802 Ce furent les seules nouvelles de moi qui parvinrent.
10803 Par petits groupes, qui ne ralliaient pas toujours le camp mais s’agrégeaient en bandes indépendantes.
10804 Nous avons rencontré une terre plus grande que l’Europe et l’Afrique réunies.
10805 Poétiser est innover, et on n’enseigne pas à innover.
10806 En voyant celui-ci serrer soigneusement le paquet …
10807 Les aérothermes ont une prise d’air neuf réglable.
10808 Où sont Papa et Maman ?
10809 Couper en tout petits morceaux.
10810 Celle ayant le masque le plus long est sélectionnée.
10813 Il cherchait à m’écarter de la scène, quel qu’en soit le moyen.
10816 Une police supportant tous ces caractères n’existe pas.
10817 Un lis blanc. (Dictionnaire 5.0).
10818 De la seizième à la vingt-troisième année, à la vingt-cinquième (Dictionnaire 5.0).
10819 Quoi qu’il en soit.
10820 Ses longues boucles noires comme la nuit sautillaient de droit à gauche.
10821 Une de ces cocottes plus arriviste que les autres me poursuivit un certain temps.
10822 Mlle Agathe et M. Sénèque entrent dans la chambre.
10823 C’est une petite brune, un soupçon replète.
10826 J’hésite un moment, pèse le pour et le contre de chaque option.
10827 S’ils eussent été des diplomates, les négociateurs français se fussent moins étonnés…
10828 Allongé sur le lit funèbre à pieds de lion ou de chacal.
10829 Des collines entières sont couvertes d’anémones d’un rouge ou d’un blanc éclatants.
10830 Ils complétaient cet ameublement d’une simplicité et d’une grâce champêtres.
10831 Il était tout en noir, vêtu, comme tous les jours ou presque, d’une chemise et d’un pantalon noirs.
10832 Il faisait l’objet d’une affection et d’une fierté particulières.
10833 Lorsque je me suis tu, le grand type s’est mis à parler.
10834 Par un de leurs sondages pratiqué sur un autre point de la montagne.
10835 Les périodes diurne et nocturne.
10838 La pile électrique de Volta.
10839 Vous allez y résister.
10840 Les hommes qui attachaient leurs chevaux près des baraquements de la Marine avaient ramené leurs montures.
10841 Vues de près, les huttes…
10842 Vue depuis la jetée et la route du bord de mer, la mosquée…
10845 J’aurais bien envie de vous écrire.
10846 Ce sont mille piliers bleus qui l’entourent désormais, comme une cage mystérieuse.
10847 Pour cet exercice, on utilisera la convention récepteur du dipôle R…
10848 Déjà la seizième année ne nous paraît pas tellement différente de l’enfance.
10849 Marie, poussant le landau, fermait la marche à grands pas précipités.
10850 Une vive couleur rose avait envahi ses joues tout à l’heure si pâles.
10851 Il incarne bien le « Mac » écossais de son nom.
10852 Les camionneurs d’Amérique centrale…
10853 Étranger dans ma société, qui ce soir-là était peu nombreuse.
10854 Tous les hommes étaient aux champs, sauf un qui nous parut peu disert.
10855 L’énergie hydraulique, le solaire, l’éolien, la biomasse sont des énergies renouvelables.
10856 L’amour, l’amitié, la vie sont là.
10857 Ce soir-là se présentèrent deux Tadjiks.
10858 Pour serrer la main de John et de Barbara qui furent si étonnés qu’ils se mirent à pleurer.
10859 Le réverbère et le vélocipède et le télégraphe Morse n’auront plus de mystère.
10860 Mlle Agathe et M. Sénèque entrèrent dans la chambre.
10863 Ce n’est maintenant un secret pour personne que nombre des textes de la Bible.
10866 Croire qu’il n’eût fallu que vous tromper pour obtenir plus d’indulgence ?
10867 Oui, ma chère belle, Dieu qui ne voulait que vous éprouver.
10868 Tout à coup, son air et son ton changèrent sensiblement.
10869 Je vous en conjure, mon indulgente amie, écrivez-moi, vous-même, aussitôt que vous le pourrez.
10870 Je vous prie de croire que tous mes soins vous seront acquis, aussitôt que vous le désirerez.
10871 Mais à présent qu’elle est à Paris, qu’elle se porte bien, et surtout que vous la voyez quelquefois.
10872 Ses parents, tout hérissés d’honneur.
10873 Que pour le moment, je suis on ne peut pas moins disposée à vous accorder vos demandes.
10874 Mais de si grands intérêts méritent bien, ce me semble, d’être avant tout discutés et éclaircis.
10877 Et comment l’ont-ils attrapée ?
10878 les écailles du Poisson scintillaient comme des astres d’or.
10879 Jane ni Michael ne le surent jamais au juste.
10880 Les mains de Michael se refermaient sur le vide.
10881 Mme Holmes et le docteur Simpson sortirent.
10884 Avez-vous honte ? N’avez-vous pas honte ?
10885 Avez-vous un certificat de vaccination ?
10886 Avez-vous des nouvelles ?
10887 N’y aurait-il pas un moyen de lever la consigne ? (1)
10888 N’y aurait-il pas une erreur ?
10889 Par où aurait-elle passé.
10890 Ils sont bien sûr ressortis indemnes de la tragédie.
10891 Dans un anglais impeccable.
10892 Le rendez-vous que nous nous sommes donné.
10893 Le contact avec la structure (cloisons…) doit être évité.
10894 Crier comme un perdu.
10895 Je ne pouvais simplement pas laisser ça arriver.
10896 La DG emploie 295 personnes dont 27 français.
10897 Les as-tu enfermés ?
10898 Il lui dit d’un ton radouci
10899 1/2 journée.
10900 La viande de bœuf saumurée.
10901 Une nouvelle approche des candidatures suivantes qui se veut « basée sur les preuves ».
10902 Des interfaces homme/machine.
10903 L’application de ces modèles illustre…
10904 Une allée sablée.
10905 Vinaigre le plus noblement distillé.
10906 Un homme plus grand que les autres m’a offert…
10907 Une de ces cocottes plus arriviste que les autres me poursuivit un certain temps.
10910 La vérité des faits énoncés…
10911 Voir la déclaration sur l’honneur ci-jointe.
10912 Avec Christine et moi qui tenions nos quarts…
10913 Les observateurs de l’ONU normalement présents…
10914 Il s’est rendu chez l’homme qui devait le payer, pour voir celui-ci s’enfuir par la fenêtre.
10915 Tous les conducteurs d’une voie sont mis en série par leurs connexions aux lames du collecteur.
10916 Les traîtres eaux de la Patagonie australe (dictionnaire 4.10).
10917 Il part reconquérir le cœur de sa bien aimée.
10920 Il lança la pierre droit au but.
10921 Et tout à coup je m’apparais (dictionnaire 4.10).
10922 Des visages couleur caramel.
10925 Tu te crées, Il se crée.
10926 Ils sont un brin surexcités.
10927 Des voyages en car.
10928 Des travailleurs à temps partiel.
10929 Ces don Juan plus rapides que l’éclair.
10930 Des bananes plantain.
10931 Les faits exprimés ci-dessus.
10932 Rien ne se perd, rien ne se crée.
10933 Attendez, fit obligeamment René Char, je vais le calmer.
10934 Ses productions, quelque imparfaites qu’elles puissent être.
10935 La partie nord de la région. (Dictionnaire 4.9)
10936 La partie ouest de la région. (Dictionnaire 4.9)
10937 La partie sud de la région. (Dictionnaire 4.9)
10938 La partie non-fumeur. (Dictionnaire 4.9)
10939 L’empreinte carbone.
10940 De beaux vitraux dont l’un fait allusion à une prophétie.
10941 Écoutez-le !
10942 Écoutez-moi. Oubliez-moi, épargnez-moi. Épargnez-moi.
10943 Ânonnez-la.
10944 Venez le plus tôt possible.
10945 Toutes les grandeurs électriques d’un circuit sont à la même fréquence.
10946 Deux côtés consécutifs d’un carré sont perpendiculaires.
10947 Je le sais, fit simplement René.
10948 Force nous est de constater…
10949 L’un de ceux-là donne aux pauvres.
10950 Ceux-ci retenus par …
10951 Les vélos avec moteur électrique.
10952 Elles sont de la première et de la deuxième générations.
10953 Des protections antigel.
10956 Attendre longtemps exaspère la plupart des gens.
10957 L’histoire commence il y a longtemps.
10958 Celui-ci étant mort en 1861…
10959 A priori, ces…
10960 Il n’aurait rien tant voulu que de réaliser par son art une émotion aussi poignante…
10961 À Vienne il vit Brahms.
10962 Son aura brillait de tout son être.
10963 Si tu t’es un jour penchée
10964 Elles seraient un jour délaissées : Accord de genre erroné entre jour et délaissées
10965 Dans les bars des marinas (dictionnaire 4.8).
10966 Ils s’en donnent à cœur joie.
10967 Il était encore à moitié endormi.
10968 Les côtes sont dans leur ensemble découpées.
10969 La plus grosse erreur de mes parents aura été de croire
10970 Les licences « Créative Commons »…
10971 Un aspect féodal tempéré par le luxe et le confort modernes.
10972 Ils donnent une somme à un candidat ou une cause particuliers.
10975 Il parle de son « inquiétude passionnée » et de son ‘inspiration tragique ’ (mais son “inspiration”).
10976 Le nez de Cléopâtre, s’il eût été plus court…
10977 Vous avez l’air resplendissantes.
10978 Il s’inquiète pour leur santé.
10979 De quand à quand travailles-tu ?
10980 Écrivent-ils une lettre ? (contournement du bug de Python)
10981 Quelqu’un joue du piano.
10982 Son manque d’expertise lui interdit toute promotion.
10983 Je comptais le lire.
10984 Tous sauf un acceptèrent son plan.
10985 Ils sont légion.
10986 Si vous fussiez venu hier, vous auriez pu le voir.
10987 Des cheveux châtain clair.
10988 Je ne peux pas la manger.
10989 Le canal de Suez. (Dictionnaire 4.7)
10990 Laissez cette boîte là où elle est.
10991 Une chambre avec air conditionné.
10992 Mais, échappa-t-elle… Échappa-t-elle ?
10993 Un rendu 3D. (Dictionnaire 4.7)
10996 Les questions sont centralisées puis relayées…
10997 Le désappointement du devoir contrarié.
10998 Ne voilà-t-il pas ce qu’on appelle un signe des temps ? — (Guy de Maupassant, En rôdant, 1883)
10999 Mes membres se sont déraidis.
11000 Pour qu’ils soient de nouveau complets.
11001 Pourquoi vous eussé-je questionné sans motif ? (Dictionnaire 4.5)
11002 Un débarras (Dictionnaire 4.6)
11003 Je l’ai tout à fait oublié.
11004 La quasi-totalité.
11005 À la diable (sauf si en début de phrase : bug de Python)
11006 À la papa (sauf si en début de phrase : bug de Python)
11007 Les polluants comme celui-ci viennent principalement de la combustion de l’essence.
11008 Évite-nous le problème (contournement du bug Python)
11009 Ces ressources, une fois brûlées, ne seront plus jamais disponibles à l’échelle des temps humains.
11010 Une exposition plein sud du bâtiment.
11011 À la longue qualifié…
11012 Les enfants peuvent être à la fois jeunes et vieux.
11013 Ses yeux bleu clair et protubérants…
11014 J’attendais je ne sais quel miracle.
11015 Elle seule aurait pu le constater puisqu’elle seule en avait le pouvoir.
11016 Un bâtiment basse consommation.
11017 Le gentil monsieur, qui est grand et beau, peut être un parfait imbécile !
11018 L’armée est en ce moment victorieuse.
11019 Une petite réserve, mise à l’abri, peut être décisive.
11020 Ses père et mère.
11021 Indiquez vos nom et prénom.
11024 Êtes-vous pour ou contre ceci ? (Bug de Python, semble-t-il)
11025 Calculer l’allocation logement.
11026 Petit souvenir pour René Machin.
11027 Au demeurant, ces messieurs … (dictionnaire 4.4)
11028 Se servant très habilement des menées royalistes (dictionnaire 4.4)
11029 Ils sont autre chose que des sauvages incultes. (dictionnaire 4.4)
11030 Les hors-la-loi. (dictionnaire 4.4)
11031 Ils sont face à face. (dictionnaire 4.4)
11032 Ils sont emplis d’orgueil. (dictionnaire 4.4)
11033 Au levant, un jardin… (dictionnaire 4.4)
11034 Ils se saisissent de lui avant de le frapper.
11035 Ils n’utilisent pas du tout les pieds.
11036 Ils ne le lui permettront pas.
11037 Il sort de la salle située à l’extrémité sud.
11038 Est terminé. Samedi prochain, nous recommencerons.
11039 L’est est de ce côté.
11040 C’est raisonner en chef… (ENFIN !!!).
11041 Lancez-nous dans la bataille.
11042 C’était il y a bien longtemps.
11043 Le IIe siècle.
11044 C’est elle qui me l’a dit.
11045 Quelqu’un peut me le dire ?
11046 C’est elle qui …
11047 Ce sont elles qui …
11048 Le nord est de ce côté, le sud est de ce côté.
11049 Les cours particuliers.
11050 Elle portait plusieurs bagues à ses fins doigts.
11051 Il passe en cour martiale.
11052 Dans vingt et un jours.
11053 Le mille marin est une mesure de longueur …
11054 Il regagna sa chambre seul.
11055 Il prenait ses repas seul.
11056 « Venez vous asseoir, Pierre », dit Patrick.
11057 J’ai été camper dans les Alpes.
11058 C’eût été manquer de réalisme que de penser que…
11059 Écrit dans un anglais facile.
11062 L’eau et le feu suffisent pour l’œuvre entière.
11063 Imitez donc la ruse qu’employèrent les Grecs.
11064 Je suis boulanger.
11065 Je ne lui adresse plus la parole.
11066 Il est plus accroché à elle qu’elle à lui.
11067 Vous pouvez vous fier à ce dictionnaire.
11068 Le grec et le latin sont des langues utiles.
11069 L’Europe et le Japon instaurèrent.
11070 Faudrait-il se demander.
11071 Au maintien d’une industrie.
11072 Il est à la fois grand et intelligent.
11073 Une fois retrouvé, on le soumit à la question.
11074 Au revoir mes amis. Au revoir !
11075 Toutes choses égales par ailleurs.
11076 Elles sont toutes blanches.
11077 Le ou les cas que vous aurez à traiter.
11078 Pierre nous a procuré un argument de poids.
11079 Du 1er mars 2010 relative au respect des droits.
11080 Le 2 mars 2010 relative au respect des droits.
11081 Ce serait attaquer les droits de l’homme que de ne pas…
11082 Ce serait ignorer.
11083 Autour d’elle se sont réunis tous les désirs ignobles.
11086 Le déclin suite à la guerre…
11087 Malgré qu’il en ait.
11088 Les robots sentinelles.
11089 Fermer les yeux arrête le phénomène.
11090 En elle est contenu le feu.
11091 Après les avoir peintes…
11092 Je t’assure qu’à cette date j’aurai l’argent.
11093 L’horloge indique 16:44.
11094 http://www.site.fr
11095 Il joue un rôle clé.
11096 Au-delà d’une concentration seuil…
11097 Les messages vidéo.
11098 Que nous y allions ou pas dépend du temps.
11099 Ce matin j’ai raté le train.
11100 Le quatre juillet.
11101 Elle a l’air malheureuse.
11102 Selon le bulletin météo, il fera beau.
11103 Les avions volèrent.
11106 Les grêles tilleuls de la place.
11107 Je n’arrive pas à mettre la main dessus.
11108 Passés de mains en mains, les poissons étaient jetés sur la table.
11109 À qui mieux mieux…
11110 Nul et non avenu.
11111 Il est leste pour son âge.
11112 Des maxima, des minima.
11113 Vous ferez la visite de la maison jeudi à onze heures.
11116 Le 18 février, le 12 brumaire.
11117 Elle prononça le nom de son auguste protectrice : l’impératrice.
11118 Il était habitué à suivre ses propres pensées.
11119 Recevez mes plus amicales pensées.
11120 Il en était fier !
11121 Rien n’indiquait si elle l’avait écouté, ou si elle ne songeait à rien.
11122 Je me lève vers les sept heures du matin.
11123 Les canons ne sortaient pas de leur sinistre immobilité.
11124 Si Dieu l’avait voulu, je serais fils de roi.
11125 Je soussigné X déclare que…
11126 Ses propres convictions.
11127 Autres CONTRÔLES
11128 Quant à eux, je les épargne.
11129 Oh çà ! Ah çà ! Çà et là…
11130 À qui mieux mieux…
11131 Il a l’avenir devant lui…
11132 Le son du canon.
11133 Il chante a cappella.
11134 Les décrets ont force de loi.
11135 Les enfants ont recours au suicide.
11136 Ils ont hâte de vous voir.
11137 Il lui a adressé des compliments.
11138 Boîte aux lettres intérieure
11139 Le cinéma tire à hue et à dia (dictionnaire 5.1)
11140 Il a sauté à pieds joints.
11141 Des yeux vert olive.
11142 Nous convenons en particulier ce qui suit.
11143 La bataille de Monte Cassino (dictionnaire 5.1).
11144 Un trois-quarts de rugby.
11145 Les trois-quarts de l’équipe de rugby.
11146 Je me sens chez moi dans ton chez-toi.
11147 Les ayants droit.
11148 Il sera élu en 2010 maire de la ville.
11149 Il nous a montré le chemin.
11150 Il nous a donné du pain.
11151 Napoléon est né en Corse.
11152 L’Écosse peut être très chaude.
11153 Il s’est exprimé dans un français approximatif.
11154 J’ai mille cent timbres.
11155 Soit idiot, soit débile.
11156 Son adorable sœur aînée.
11157 Ce putain de train.
11158 Écouter est opiner.
11159 Elle se rappelle de moi.
11160 Il se rappelle de me parler.
11161 Je me rappelle de moins en moins mon enfance.
11162 La création de nouvelles infractions illustre une prise en charge du sujet par le politique.
11163 Certains y voient la preuve qu’il a finalement été lâché par son soutien.
11164 Te voilà paré.
11165 une des neuf provinces.
11166 une intoxication en cours peut être diagnostiquée
11167 Les bonnes gens
11168 Il est conseiller municipal.
11169 C’est dans la soirée que ces poursuites avaient été entamées.
11170 Pour faire savoir que cette arrestation a été décidée.
11171 Il remit soigneusement le carreau en place…
11172 La galerie s’ouvrit tout à coup sur une caverne…
11173 Il tomba sur une autre patrouille et assassina le mage en premier…
11174 La voix agaçante de la gamine était revenue la hanter…
11175 Allons y jeter un œil.
11176 On a tous des qualités.
11177 Les femmes portent toutes des noms à consonance étrangère.
11178 Une taille 38 imposée aux mannequins.
11179 Ce putain de temps.
11180 Il a fait la une des journaux.
11181 Le numéro un des ventes de Noël.
11182 Le patron du numéro deux allemand a démissionné.
11183 Je soussigné Pierre Dupont déclare avoir pris connaissance des conditions de ce contrat.
11184 J’ai mille cent timbres.
11185 À qui mieux mieux, à qui mieux mieux
11186 L’est est loin, la gare de l’est aussi.
11191 Au voisinage du zéro absolu de température.
11192 La couronne périphérique alterne falaises abruptes et plages.
11193 Henri VIII rencontre François Ier.
11194 à ce jour.
11195 avoir un bel avenir
11196 faire un dessin
11197 par exemple
11198 Une dune.
11199 Une dune de sable blanc.
11200 remède universel
11201 Il regarde l’heure tout le temps.
11202 dépenses excessives
11203 tremblement de terre
11204 On ne veut pas voir la même chose.
11205 Je voudrais ajouter quelque chose de particulièrement important.
11206 La gent féminine.
11207 Il est prêt à tout.
11208 L’étoile se trouve à peu près à 50 années-lumière.
11209 Il s’intéresse de près à l’environnement.
11210 Nous sommes près d’arriver.
11211 Nous ne sommes pas près d’arriver.
11212 J’ai obtenu un prêt de la banque.
11213 vivre l’un près de l’autre.
11214 Tu ne trouves pas ça bizarre.
11215 Ça chauffe
11216 Pourriez-vous répéter ça s’il vous plaît ?
11217 Il mange ça froid.
11218 Il a promis de garder ça secret.
11219 Ça montre que tu n’as pas compris.
11220 Ça c’est un couteau.
11221 Ça n’a pas de sens.
11222 Mais ça oui.
11223 Sa voiture est en panne.
11224 C’est sa préférée.
11225 Il trouva de la nourriture çà et là.
11226 Quant à ma commande, elle n’est pas arrivée.
11227 De quand à quand tu travailles ?
11228 Tu reviens quand à Paris ?
11229 Tu restes jusqu’à quand à la maison ?
11230 Le Notre Père est une prière chrétienne.
11231 Si vous souhaitez en savoir davantage, veuillez me contacter.
11232 Cette offre est accompagnée d’avantages.
11233 Il part bientôt pour Venise.
11234 Il peut être têtu.
11235 Il partira peut-être demain.
11236 Cela peut être vrai.
11237 L’Écosse peut être très chaude.
11238 L’alcool au volant peut être dangereux.
11239 Une intoxication en cours peut être diagnostiquée.
11240 Elle peut être ennuyeuse.
11241 La lettre est à elle peut-être.
11242 C’est elle peut-être.
11243 Peut-être viendra-t-il ?
11244 Est-ce que quelqu’un peut m’aider ?
11245 Je veux m’éloigner autant que faire se peut d’ici.
11246 On peut d’ailleurs le vérifier.
11247 La pale de l’hélice est cassée.
11248 Je joue au golf depuis un an.
11249 Je joue souvent au golf le dimanche.
11250 C’est un bon joueur de golf.
11251 Le golfe Persique est presque une mer fermée.
11252 Le golfe d’Aden est la baie située entre la corne de l’Afrique et la péninsule Arabique.
11253 Le golfe du Lion est une partie de la mer Méditerranée.
11254 Le repaire des pirates.
11255 Ce ris de veau est succulent.
11256 Ce ris d’agneau est succulent.
11257 Le forcement d’un coffre.
11258 Vous avez forcément raison.
11259 Vous n’avez pas forcément raison.
11260 S’exprimer sans forcément parler.
11261 Un gâteau aux amandes.
11262 Face aux amendes à payer
11263 En amende honorable
11264 J’ai été condamné à une forte amende.
11265 J’ai été mis à l’amende.
11266 Un enfant de chœur.
11267 Le chœur philharmonique.
11268 Il a confessé tous ses péchés.
11269 Les péchés capitaux
11270 Manger est mon péché mignon.
11271 Péchés de jeunesse
11272 C’est un des leurs.
11273 Les dés les plus courants.
11274 Dès à présent
11275 J’ai acheté des dés à jouer.
11276 Dès à présent
11277 Plusieurs des caractéristiques.
11278 Dès 1980, le pays était en crise.
11279 Des 2000 participants, seuls 1000 sont venus.
11280 Des 2000 invités, seuls 1000 sont venus.
11281 Dès dix-huit ans.
11282 L’anniversaire des 30 ans de la libération.
11283 Le cap des 35 ans.
11284 Elle approche des cinquante ans.
11285 À l’occasion des vingt ans du groupe.
11286 Le congrès des 20 ans de l’association.
11287 A priori, il devrait arriver à l’heure.
11288 Je ne pouvais pas le croire a priori.
11289 La grève généralisée a paralysé tout le pays.
11290 Fumer a nui à sa santé.
11291 Ce que tu dis a l’air correct.
11292 Puis a jailli un jeune homme.
11293 Il chante a cappella.
11294 Il est pris à partie.
11295 Le nettoyage à sec.
11296 Il a quel âge ?
11297 Prendre quelqu’un à partie.
11298 Lorsqu’il y a proximité d’un restaurant universitaire.
11299 Il a lui aussi décidé de partir.
11300 Tout à fait !
11301 Il est tombé tout à coup.
11302 Je parlais tout à l’heure avec ma femme.
11303 Il y en a qui dorment.
11304 Fais-moi savoir s’il y a quoi que ce soit que je puisse faire.
11305 Nous étions face à un danger.
11306 Le coiffeur en face a mis la clé sous la porte.
11307 Grâce à toi, j’ai gagné.
11308 Elles sont prêtes à t’écouter.
11309 Le prêt a été refusé.
11310 Tout à coup, j’entendis une explosion.
11311 Il est facile de décider a posteriori.
11312 Il a été aux États-Unis.
11313 Je suis tout à fait d’accord.
11314 Un crayon à pointe fine.
11315 Les familles à revenus modestes
11316 Il n’a pas manqué l’occasion de prendre à partie son prédécesseur.
11317 Une tapette à tapis.
11318 Une maladie à issue fatale.
11319 Où sont mes affaires ?
11320 Manger ou être mangé, c’est la loi de la nature.
11321 Ils ont été ou sont pour l’implantation de la centrale nucléaire.
11322 J’en suis sûr.
11323 Sûr et certain.
11324 Nous nous sentions toujours sûrs de nous.
11325 Tout repose sur de vagues accusations.
11326 Il compte sur d’autres personnes.
11327 Des relations bâties sur l’argent.
11328 Il compte sur d’autres personnes.
11329 Un moratoire a été établi sur de telles pratiques.
11330 Il réussira à coup sûr son examen.
11331 Ce programme se base sur la participation des femmes.
11332 Tout ce que je sais.
11333 Ce sont des histoires.
11334 Ce sont de grands enfants.
11335 Ils se sont tous inscrits.
11336 Ils se sont aimés.
11337 Ils se sont d’ailleurs doté d’un nouvel ordinateur.
11338 Ce sera une fille.
11339 Il se sera d’abord lavé.
11340 Ce sera bien.
11341 Ce phénomène se transforme en phénomène de société.
11342 Ce peuple
11343 Ce faisant, il se rapprochait.
11344 Pour ce faire, vous disposez d’un délai d’une semaine.
11345 C’est ma voiture.
11346 C’est ma préférée.
11347 Le problème c’est qu’apparemment elle n’a pas son mot de passe…
11348 Les Chinoises sont celles qui se marient le plus avec les Sud-Coréens.
11349 Le son dans l’informatique
11350 Son indigne frère
11351 Au son de la voix
11352 Même son de cloche
11353 Eh bien, soit !
11354 Et bien sûr, il n’est pas venu.
11355 Et bien qu’il commençât en retard, il termina en avance.
11356 Et bien souvent, ça dégénère.
11357 Eh bien, soit !
11358 Je travaille tard.
11359 Nous n’affirmons rien.
11360 Je compte sur vous mercredi.
11361 Nous non plus
11362 Où vous rendez-vous habituellement ?
11363 La zone géographique dans laquelle je vis
11364 C’est une belle maison.
11365 Cette école est réputée.
11366 C’est dommage de partir si tôt.
11367 Vouloir c’est pouvoir.
11368 C’est non seulement pour lui, mais aussi pour elle.
11369 C’est dimanche qu’il arrive.
11370 Comme c’est romantique.
11371 C’est la fin.
11372 C’est suite à cette victoire qu’il fut élu.
11373 C’est incognito qu’il reporta le prix.
11374 C’est face à la montée en puissance.
11375 Il est interrogé en tant que témoin.
11376 Il faut se rappeler de temps en temps que rien n’est immortel.
11377 On a fini.
11378 Ceux qui ont envie de voir le film
11379 Les décrets ont force de loi.
11380 Les enfants ont recours au suicide.
11381 Les méthodes qui ont cours.
11382 Ils ont hâte de vous voir.
11383 Ils comprennent qu’ils ont affaire à un épisode tragique.
11384 Je suis sceptique.
11385 Une fosse septique.
11386 Je reste sceptique.
11387 En termes de rémunération
11388 L’azurage du linge se fait avec du bleu d’outremer.
11389 Étiez-vous en train de travailler ?
11390 Le voleur fit irruption pendant la nuit.
11391 L’éruption du volcan fut violente.
11392 Il y a une vacance dans notre équipe au travail.
11393 J’ai repris ce fonds de commerce
11394 Un fonds monétaire
11395 Une affaire en cours.
11396 Il fut traduit en cour martiale.
11397 Donner libre cours à l’imagination
11398 En fin de compte.
11399 En ligne de comte.
11400 Tout comte fait.
11401 Elle aime les contes de fées.
11402 Elle aime les contes d’horreur.
11403 Elle aime les contes fantastiques.
11404 Les contes et légendes de Bretagne.
11405 Elle va au marché.
11406 Son visage était décrépit.
11407 Elle semblait décrépite par les années.
11408 Il doit bien être quelque part.
11409 Tu viendras quand même.
11410 Tu viendras quand même ?
11411 Comme même ses meilleurs amis n’étaient pas venus, il était triste.
11412 Mon nom est Robert de Puis.
11413 L’arrivée est imminente.
11414 Des paléontologues éminents.
11415 Une encre sur soie.
11416 Un drap en soie.
11417 Il n’est pas mauvais en soi.
11418 Quoi qu’il en soit.
11419 Un ver à soie.
11420 Parlez à voix basse.
11421 Cette décision ouvre la voie à des élections.
11422 Il y avait une émotion dans sa voix.
11423 Combien y a-t-il d’étoiles dans la Voie Lactée ?
11424 Dans leurs voies respiratoires.
11425 La voie piétonne est fermée.
11426 Par voie de conséquence
11427 Un animal en voie d’extinction.
11428 Les pays en voie de développement
11429 Il a ouvert la voie à la construction de l’Europe.
11430 La tradition ascétique de l’Église.
11431 Cancer dur côlon.
11432 Ils ne sont pas si différents.
11433 Tâche de ne pas faire trop de bruit.
11434 Il a accompli la tâche facilement.
11435 Rome importait de Gaule essentiellement du sel.
11436 Darth Vader est un personnage de Star Wars.
11437 Dark Vador est un personnage de Star Wars.
11438 Darth Vader est un personnage de Star Wars.
11439 Dark Vador est un personnage de Star Wars.
11440 Mariah Carey
11441 Tu es du Morbihan.
11442 Il faut maintenir le statu quo.
11443 Un réveillon avec foie gras et champagne.
11444 Il est venu contre son gré.
11445 Tu peux se déplacer à ton gré.
11446 Une renommée qu’elle doit à la particularité de son grès.
11447 Il viendra bon gré ou mal gré.
11448 Errer au gré des vents.
11449 Errer au gré du vent.
11450 Il acceptera de gré ou de force.
11451 Je vous sais gré d’être là.
11452 Il faut prendre en gré les afflictions que Dieu nous envoie.
11453 Un champignon vénéneux.
11454 Un cobra très venimeux.
11455 Un seau d’eau.
11456 Ton seau est percé.
11457 Le sceau du secret.
11458 Elles sont contre cette idée.
11459 Dans la ville de Contres.
11460 Tu contres son coup de poing.
11461 Quel est votre diagnostic ?
11462 On le diagnostique tôt.
11463 L’équipe m’a demandé mon pronostic pour le match de demain.
11464 Le diagnostic prénatal.
11465 On le diagnostique facilement.
11466 Méthode pour le diagnostic.
11467 Le pronostic du match.
11468 Tu les diagnostiques facilement.
11469 Il débouchera la bouteille.
11470 Ils sont très avares.
11471 L’avar est une langue caucasienne.
11472 Ils sont avares de bonnes paroles.
11473 Un avare amasse de l’argent non pas parce qu’il est prudent mais parce qu’il est avide.
11474 L’avar est une langue caucasienne.
11475 Le CO2 est un gaz à effet de serre.
11476 Son arrivée m’a fait plaisir.
11477 Leurs arrivées m’ont fait plaisir.
11478 L’arrivée du tour de France.
11479 J’ai fait un emprunt à la banque.
11480 Mon empreinte carbone.
11481 Les emprunts à la banque.
11482 Tu auras affaire à moi.
11483 J’ai des courses à faire à cinq heures.
11484 Tu auras affaire à la police.
11485 J’ai des courses à faire à la boutique.
11486 Il a été construit à des fins militaires.
11487 Il rôde sans but.
11488 Les malfaiteurs rôdent autour de la maison.
11489 Ils rôdent en quête de bagarre.
11490 Il faut roder le moteur.
11491 Tristan et Iseult tombèrent amoureux en buvant un philtre.
11492 Il prépara un philtre d’amour.
11493 Il prépara un philtre aphrodisiaque.
11494 Ça sans dire !
11495 Sa chemise à carreaux détonne avec son pantalon rayé.
11496 Une maison de plain-pied.
11497 Les grenouilles coassent.
11498 Les grenouilles mâles coassent.
11499 Les coassements inquiétants des crapauds.
11500 Les corbeaux croassent.
11501 Les croassements inquiétants des corbeaux.
11502 J’étais à mille lieues d’imaginer que c’était lui.
11503 As-tu lu 20 000 lieues sous les mers ?
11504 Les lieus mordent à notre leurre.
11505 Techniques de traîne pour les lieus jaunes.
11506 Ils pêchent des lieus.
11507 Faire un état des lieux.
11508 Les lieux de prière.
11509 Les lieux historiques.
11510 J’étais quelques fois absent.
11511 Les quelques fois où je l’ai croisé.
11512 Les quelques fois que nous nous sommes rencontrés.
11513 C’est quelquefois pénible de surveiller les enfants.
11514 C’est quelquefois assez pénible de surveiller les enfants.
11515 Noir comme jais.
11516 Le cri du geai.
11517 Il m’a donné un coup de poing.
11518 Les poings serrés.
11519 Il a été libéré sans contrepartie.
11520 Il a été libéré sans contre-partie.
11521 Quelles sont les contreparties ?
11522 Il ne me reste que huit centimes.
11523 Un procès à huis clos.
11524 Elle est enceinte de trois mois.
11525 Elle est enceinte de 3 mois.
11526 Le mois de mai a été froid.
11527 Le mois d’avril a été froid.
11528 Quel âge as-tu ?
11529 Une femme d’âge mûr.
11530 Des acides aminés.
11531 Un acide aminé.
11532 Des dessins animés.
11533 Un dessin animé.
11534 Des jeunes filles.
11535 Il n’est plus très jeune.
11536 L’amanite tue-mouches est toxique.
11537 Les communes de la Haute-Cornouaille.
11538 Le Festival de Cornouaille est un festival annuel se déroulant dans la ville de Quimper.
11539 Tourisme en Cornouaille bretonne.
11540 Tourisme en Cornouailles britannique.
11541 Quelqu’un leur a déjà dit.
11542 Ceci dit.
11543 Ceci dit.
11544 Il s’est confié à la compagne du roi.
11545 Une presqu’île
11546 La réponse est presque exacte.
11547 L’île est encore loin.
11548 Il connait l’histoire de A à Z.
11549 Il a appris ça en un jour.
11550 Il semble que oui.
11551 Le oui l’a emporté.
11552 J’ai suivi la A40.
11553 À la une de la presse.
11554 Là où ça ne va plus.
11555 Le IIe siècle.
11556 Dépose-le au courrier.
11557 Dépose-la au courrier.
11558 Je pense qu’il va bientôt arriver.
11559 Dès le Ier siècle
11560 Les habitants de Ouagadougou.
11561 S’il pleut, je reste ici.
11562 Voilà ce qu’il a dit.
11563 Vous voilà arrivé.
11564 Et voilà ce qu’il a dit.
11565 Elle voila son visage.
11566 Il a soixante et un ans.
11567 J’ai trois cent cinquante timbres.
11568 Deux cent mille étoiles.
11569 J’ai cinq cent soixante-et-un euros.
11570 J’ai mille cent timbres.
11571 J’ai trois cents timbres.
11572 Deux cents milliards d’étoiles.
11573 Nous avons parcouru 10 milles marins.
11574 Convertir des milles aux kilomètres.
11575 Carl Milles était un sculpteur suédois.
11576 Un voyage de mille milles.
11577 Il reste seulement dix milles jusqu’à l’arrivée.
11578 Trois-mille euros.
11579 J’ai 1 enfant.
11580 Cela coûte 2,1 euros.
11581 1 fois.
11582 J’ai quatre enfants.
11583 Il est né le quatre janvier.
11584 On estimait à seize mille les fusils de son armée.
11585 Le patron du numéro deux allemand a démissionné.
11586 Une Peugeot 208 fabriquée en France.
11587 Ils ont tous les trois été tués par balle.
11588 Les trois kanji.
11589 L’intensité des rayons X ayant frappé la pellicule.
11590 J’ai 4 enfants.
11591 Il est né le 4 janvier.
11592 Son adresse est 4 rue de la gare.
11593 Cela coûte 1,25 euro.
11594 Il sera élu en 2010 maire de la ville.
11595 Le pays est découpé en 4 parties.
11596 Une taille 38 imposée aux mannequins.
11597 Il a battu le record avec un temps de 3 min 18 s.
11598 L’année 800 fut considérée comme une renaissance de l’Empire romain d’Occident.
11599 un canard
11600 des oies dodues
11601 au cours de l’année
11602 Les taux d’intérêt domestiques.
11603 Un atlas cher.
11604 Un camion très lourd.
11605 Vous êtes bon fils.
11606 On voyait ses joues devenir rouges.
11607 Des filles un peu pâles.
11608 Même vainqueurs ils sont mécontents.
11609 Une vache laitière
11610 Les premier et deuxième trimestres.
11611 Les montagnes ont l’air belles.
11612 Les pâtes ne sont pas bonnes car trop cuites.
11613 Il est parti aux États-Unis pour étudier.
11614 Une faute.
11615 Ils sont en général jeunes.
11616 Les lois antitrust américaines.
11617 Des roquettes sont même retombées.
11618 Ils sont juste amis.
11619 Parmi les mieux cotés.
11620 Ils sont à la fois grands et minces.
11621 En 1779 débute la première des neuf guerres.
11622 Des erreurs même très graves.
11623 J’ai au moins quelques dollars.
11624 Certaines grenouilles peuvent même être mortelles.
11625 un canard gras
11626 des oies
11627 Des poulets fermiers
11628 Les hérétiques ayant reconnu la foi catholique.
11629 Les voitures verte et rouge.
11630 Des livres audio
11631 L’institut de recherches britannique
11632 Les camions très lourds.
11633 Les atlas chers.
11634 Fils naturel de Richard
11635 Faites attention.
11636 Les préoccupations des travailleurs face à la crise.
11637 Plus de crédits bancaires grâce à des taux d’intérêts bas.
11638 Je suis né le huit janvier.
11639 Deux immeubles juste en face de toi.
11640 Les communications Internet.
11641 Un catalogue des animaux commode à consulter
11642 J’aime jouer aux cartes.
11643 Pauvres du monde
11644 Quarante pour cent des femmes
11645 Vos nom et prénom, s’il vous plaît.
11646 Des fautes.
11647 Les ayants droit.
11648 Nous aurons les résultats dans 4 heures maximum.
11649 Critique des cent jours du président.
11650 Un dispositif moins ambitieux mais applicable.
11651 Ces analyses bidon.
11652 Ces don Juan.
11653 En 1779 débute la première des neuf guerres.
11654 Les véhicules.
11655 Les ondes radio.
11656 Des événements différents ayant lieu en même temps.
11657 Une jolie femme.
11658 Une très jolie femme.
11659 Le français concurrence le latin.
11660 Le rock a donné naissance à des groupes légendaires.
11661 Une répartition des revenus judicieuse.
11662 Ses premiers malaises.
11663 Un geste circulaire.
11664 Force tranquille de la nature
11665 Une bouche un peu grande.
11666 La mort subite
11667 Confus face aux remarques obscures
11668 Un bel homme.
11669 Confus face aux remarques obscures
11670 Elle est tout sauf courtoise.
11671 Il a eu le poste grâce à son anglais.
11672 La Guyane française.
11673 Quelqu’un paye la facture.
11674 Tes menaces ne me font pas du tout peur.
11675 Elle est à nouveau amoureuse.
11676 Le numéro un des ventes de Noël.
11677 Ce putain de temps.
11678 J’ai grand faim.
11679 Il sait au moins lire.
11680 Les neuf circonscriptions des Alpes-Maritimes.
11681 Un souvenir du passé.
11682 Tom surprit Marie.
11683 Je ne peux pas le lire.
11684 Je n’ai pas du tout peur des serpents.
11685 Nous faisons tous partie de la même équipe.
11686 La variété du catalan parlée en Andorre.
11687 Un climat tropical.
11688 Un climat très tropical.
11689 Le papier continue d’être employé.
11690 L’équipe de football anglaise
11691 Les cours impériales
11692 Les dossiers triés par ordre alphabétique.
11693 Les soldats abasourdis par le chaos.
11694 Une bouteille fut apportée.
11695 L’homme présente une amie.
11696 Une réduction des coûts comprise entre 10 et 20 euros.
11698 Des bouteilles non vidées
11699 La détention provisoire illimitée
11700 Une maquette d’avion jolie
11701 Elle a l’air jolie.
11702 Les pâtes ne sont pas bonnes car trop cuites.
11703 Une peine pas si lourde.
11704 Une infime minorité.
11705 L’Inde indépendante.
11706 Voir la déclaration sur l’honneur ci-jointe.
11707 Une mise à jour gratuite.
11708 Une mise à niveau couteuse.
11709 Elle est un petit peu chiante.
11710 <!-- L’étoile à neutrons peut même être remplacée par un trou noir. -->
11711 Une fleur.
11712 Un très grand chien.
11713 Une géologue intelligente.
11714 Un très grand chien.
11715 Elle est grasse, car elle mange beaucoup.
11716 Il faudra que je vive seul.
11717 Sa large et bonne figure.
11718 La porte d’entrée.
11719 Son amie l’abandonne.
11720 Le Cameroun
11721 Toutes nos félicitations.
11722 La justice est une si belle chose.
11723 Telle est la question.
11724 La plus forte progression.
11725 C’est une sale affaire.
11726 Il est torse nu.
11727 La plus grande fait dix centimètres.
11728 Les équations différentielles non linéaires.
11729 Une des multiples affaires.
11730 C’est la fin.
11731 Il a fait la une des journaux.
11732 Le mustang est un cheval sauvage.
11733 Le jaguar est un mammifère.
11734 La Jaguar est une voiture.
11735 L’histoire d’une enfant pas si sage.
11736 La partie ouest de la ville.
11737 L’une des sept unités de base.
11738 une des neuf provinces.
11739 Les bonnes gens.
11740 J’habite 10 avenue Constantin Arnaud.
11741 L’une des pires.
11742 Une forêt tropicale.
11743 Une forêt très grande.
11744 Cette définition reste valable.
11745 Le système de retraites français.
11746 Les cours magistraux
11747 Les lettres triées par ordre alphabétique.
11748 Il aura capté sa confiance.
11749 Il a une force exceptionnelle.
11750 Un centre logistique dédié.
11751 Une fois effectués les changements.
11752 Le carton est à moitié plein.
11753 Un indicateur d’inégalité utilisé par les Nations Unies.
11754 Des documents ou informations tirés de la commission
11755 Une large majorité.
11756 Une étrange expérience.
11757 Les cours étaient en réalité destinés à préparer les élèves.
11758 Une fut soumise anonymement.
11759 Son metteur en scène préféré.
11760 Une mise à jour gratuite.
11761 Les sols en permanence gelés.
11762 Une centaine de personnes est venue.
11763 Il faut beaucoup de sucre.
11764 Le nombre de masse est un terme employé en chimie.
11765 Ils sont au nombre de neuf.
11766 Une centaine d’anarchistes est venue.
11767 Il faut beaucoup d’eau.
11768 Le nombre d’oxydation.
11769 Des créatures marines.
11770 Des yeux vert clair.
11771 Des yeux vert olive.
11772 Ses cheveux étaient noir de jais.
11773 Des yeux vert clair.
11774 Une jupe bleu foncé.
11775 La femme avec laquelle tu parles
11776 La faux avec laquelle on fauche.
11777 Une distance au-delà de laquelle il devient difficile de voir.
11778 Les femmes auxquelles tu parles
11779 Un dans chaque bras.
11780 La femme à laquelle tu parles
11781 L’homme auquel tu parles
11782 L’homme avec lequel tu parles
11783 Les hommes avec lesquels tu parles
11784 Les hommes auxquels tu parles
11785 Les hommes avec lesquels tu parles
11786 Les hommes auxquels tu parles
11787 Ça te gêne si je fume ?
11788 Mon chien
11789 Ton histoire
11790 Mon œuvre
11791 Son ère
11792 Son malaise
11793 Pour ne plus travailler.
11794 J’aimerais changer de travail.
11795 Je l’ai tout à fait oublié.
11796 Puis assigné à résidence.
11797 Je me suis en fait amusé.
11798 Il a refusé de manger avec nous.
11799 Il a refusé d’arriver plus tôt.
11800 Il a décidé de ne plus manger avec nous.
11801 Pour débuter, il faut acheter une grammaire.
11802 J’ai de la peine pour René.
11803 Comment bien étudier
11804 Il m’a sans cesse répété de me taire.
11805 Il est sans doute arrivé.
11806 Je veux te préparer
11807 Luc est quant à lui condamné.
11808 J’étudie des parties d’échecs afin de gagner.
11809 Je luis en parle avant d’annuler le voyage.
11810 Tu sors ce soir.
11811 Je soussigné Pierre Dupont déclare avoir pris connaissance des conditions de ce contrat.
11812 Il ou elle se trouve là.
11813 Il dit la vérité.
11814 Tu ne sors pas ce soir.
11815 Je ne donne rien.
11816 Je ne dis rien.
11817 Il me causa un grand tord.
11818 Tu ne la sors pas ce soir.
11819 On ne la paie pas.
11820 Je ne l’abandonne pas.
11821 Il ne l’est que durant l’élection.
11822 Je suis en retard parce que j’ai raté mon bus.
11823 Le chef du restaurant.
11824 Partir aux USA.
11825 Les montagnes du Jura.
11826 Mes démêlés avec X.
11827 Le son a interféré avec l’image.
11828 Une irradiation avec soit de la lumière ultraviolette, soit des protons.
11829 Le glacier du Trient.
11830 Le glacier des Bossons.
11831 Ils ont des a priori sur nous.
11832 Je vais au marché.
11833 Au sortir de la guerre.
11834 Un orage est annoncé.
11835 Antoine est marié.
11836 Ils sont même restés ici.
11837 Celui-ci est resté.
11838 Il est torse nu.
11839 On est fatigués.
11840 Antoine est peut-être fatigué.
11841 Dominique est peut-être fatiguée.
11842 Dominique est peut-être fatigué.
11843 Ils sont très avares.
11844 Un orage a été annoncé.
11845 Les camions ont été inventés.
11846 Antoine n’est pas marié.
11847 Antoine n’est pas très fatigué.
11848 Mon oncle n’est pas avare de son argent.
11849 Une averse est annoncée.
11850 Martine est mariée.
11851 Gravir cette montagne est dangereux
11852 Martine est très jolie.
11853 L’Autriche est pendant tout le Moyen Âge une des nombreuses principautés.
11854 Cette voiture était suffisamment bon marché.
11855 Cette caméra est dernier cri.
11856 La sortie est droit devant.
11857 Une averse avait été annoncée.
11858 Martine aurait été contente.
11859 Martine aurait été très contente.
11860 Les voitures ont été inventées.
11861 Martine n’est pas mariée.
11862 Martine n’est pas très jolie.
11863 Un orage fut annoncé.
11864 Elle sera contente.
11865 Martine était ennuyeuse.
11866 Lui et son équipage furent perdus en mer.
11867 Tu étais jeune.
11868 Celle-là est folle.
11869 Il est casse-couilles.
11870 On est fatigués.
11871 Tu étais très jeune.
11872 On était tellement fatigués.
11873 Un orage avait été annoncé.
11874 Tu avais été dénoncé.
11875 Tu avais été immédiatement dénoncé.
11876 J’avais été content.
11877 Elle ne sera pas contente.
11878 Martine n’était guère ennuyeuse.
11879 Elle est casse-couilles.
11880 Tu n’étais pas très jeune.
11881 On n’est pas couchés.
11882 Des orages sont annoncés.
11883 Elles sont absentes.
11884 Vous êtes certain.
11885 Le vernis à ongles est inutile.
11886 Courir les magasins est devenu une corvée.
11887 Nous étions fatigués.
11888 Ils sont même allés faire la guerre.
11889 Celles-là sont folles.
11890 Une des réponses est correcte.
11891 Ils sont juste arrivés.
11892 Nous étions trop fatigués.
11893 Ils sont bien sûr ressortis indemnes.
11894 Nous sommes quelque peu occupés.
11895 Ces ordinateurs sont meilleur marché que ceux-là.
11896 Ces ordinateurs sont dernier cri.
11897 Des orages avaient été annoncés.
11898 Ils avaient été dénoncés.
11899 Nous aurions été dénoncés.
11900 Vous auriez été dénoncés.
11901 Vous auriez été dénoncé.
11902 Elles avaient été immédiatement dénoncées.
11903 Elles ne sont pas absentes.
11904 Les mathématiques ne sont pas juste de la mémorisation de formules.
11905 Nous n’étions pas trop fatigués.
11906 Nous ne sommes pas trop fatigués.
11907 Est-elle arrivée ?
11908 Est-elle souriante ?
11909 Est-elle aveugle ?
11910 Sont-elles arrivées ?
11911 Sont-elles souriantes ?
11912 Sont-elles aveugles ?
11913 Est-il arrivé ?
11914 Est-il souriant ?
11915 Est-il aveugle ?
11916 Sont-ils arrivés ?
11917 Sont-ils souriants ?
11918 Sont-ils aveugles ?
11919 Est-elle déjà arrivée ?
11920 Est-elle déjà souriante ?
11921 Est-elle encore aveugle ?
11922 Sont-elles déjà arrivées ?
11923 Sont-elles déjà souriantes ?
11924 Ne sont-elles pas aveugles ?
11925 Est-il déjà arrivé ?
11926 Est-il déjà souriant ?
11927 N’est-il pas aveugle ?
11928 Sont-ils déjà arrivés ?
11929 Sont-ils déjà souriants ?
11930 Ne sont-ils pas aveugles ?
11931 Es-tu arrivée ?
11932 Es-tu arrivé ?
11933 Es-tu aveugle ?
11934 Es-tu déjà arrivée ?
11935 Es-tu déjà arrivé ?
11936 Es-tu presque aveugle ?
11937 Sommes-nous arrivés ?
11938 Sommes-nous arrivées ?
11939 Étions-nous aveugles ?
11940 Sommes-nous déjà arrivés ?
11941 Sommes-nous déjà arrivées ?
11942 Ne sommes-nous pas aveugles ?
11943 Il nous a informés.
11944 Il nous a informées.
11945 Il vous a informé.
11946 Il vous a informés.
11947 Dominique les a renseignés.
11948 Dominique les a renseignées.
11949 Il nous a montré le chemin.
11950 Il nous a donné du pain.
11951 Je suis sûr de l’avoir vu, de mes yeux vu.
11952 Je suis sûr de l’avoir vue, de mes yeux vue.
11953 Je suis sûr de les avoir vus, de mes yeux vus.
11954 Je suis sûr de les avoir vus de mes yeux vus.
11955 Un orage peut être observé.
11956 Il peut être observé.
11957 La peine de mort devrait être abolie.
11958 Toute objection de ce type doit être déférée au président.
11959 Antoine peut être amusant.
11960 Une corrélation peut être observée.
11961 Martine peut être amusante.
11962 Les composants électroniques peuvent être nettoyés.
11963 Un orage peut être observé.
11964 Elle peut être observée.
11965 Martine peut être ennuyeuse.
11966 Lui et son équipage sont perdus en mer.
11967 Des orages peuvent être observés.
11968 Elles peuvent être observées.
11969 Vous pouvez être triste.
11970 Il est arrivé
11971 Il est parti tôt.
11972 L’été est chaud.
11973 L’objectif est de réussir
11974 Partir, c’est mourir un peu.
11975 Il faut être aveugle pour ne pas voir ça.
11976 Il était officier.
11977 Crois-tu que je sois aveugle ?
11978 Les Allemandes sont toutes des délurées.
11979 Tu as été prendre du bois.
11980 La fille là-bas est Marie.
11981 Ce serait attaquer les droits de l’homme.
11982 Il faut soit partir, soit attendre.
11983 Il a signé le contrat
11984 Il a reçu ta lettre
11985 Il a dû manger.
11986 Tu as beau pleurer.
11987 L’unique prix que tu as à payer est de laisser ce monde derrière.
11988 J’ai été chercher du pain.
11989 Avoir hâte d’être dehors.
11990 J’ai toutes ces pommes à porter.
11991 J’ai cela en tête.
11992 Nous avons compris ce qui se passe.
11993 J’ai mangé de la soupe.
11994 L’exposition au bisphénol A entraine des malformations.
11995 Les gros avions causent une forte pollution sonore.
11996 J’ai bien mangé.
11997 Je n’ai pas encore mangé.
11998 Avez-vous signé le contrat ?
11999 Avez-vous déjà signé le contrat ?
12000 Ils avaient voulu cela.
12001 Il est en train de jouer.
12002 Je viendrai demain.
12003 Je viendrai dans trois jours.
12004 Je peux
12005 J’arrive
12006 Je ne travaille pas
12007 J’en ai
12008 Je t’attends
12009 Je ne te veux pas.
12010 Je te le répète.
12011 Je le lui donne.
12012 Je lui en veux.
12013 Je ne t’attends pas.
12014 Je n’y crois pas
12015 Je t’en parle
12016 Je ne vous en parle pas.
12017 Je ne leur en veux pas.
12018 Je ne le lui achète pas.
12019 Je te l’avais donné.
12020 Je ne m’en souviens pas.
12021 Je ne l’y ai pas vu.
12022 Tu travaillais
12023 Si tu suis le sentier.
12024 Tu ne travaillais pas.
12025 Tu m’attendras
12026 Tu ne me rappelles pas
12027 Tu nous le prouves.
12028 Tu lui en parles.
12029 Tu ne m’attendras
12030 Tu t’en souviens
12031 Tu n’y vas pas
12032 Tu ne me le prends pas.
12033 Tu me l’as offert.
12034 Tu ne m’en parles pas
12035 Il travaille
12036 Ce sont des histoires.
12037 Celle adressée à mon ami
12038 À elle reviennent toutes les maisons.
12039 Des polluants comme celui-ci viennent de la combustion.
12040 Je trouve cela passionnant.
12041 Je pensais que vous trouveriez ça intéressant.
12042 Pierre et elle étaient fiancés.
12043 Ça fonctionne.
12044 Et ça fonctionne.
12045 Je ne trouve pas ça intéressant.
12046 Il ne travaille pas
12047 Ça ne fonctionne pas.
12048 Ce ne sont pas des histoires.
12049 Elle se demande.
12050 Il a converti cela en médailles.
12051 Dominique et elle les attendent.
12052 Ça ne fonctionne pas.
12053 Personne ne peut me le dire.
12054 Il ne me veut pas.
12055 Pour cela nous en parlons à notre mère.
12056 Comme il n’avait plus de voiture, il prenait le bus.
12057 Ça t’irait bien.
12058 Ne laisse pas ça t’arrêter.
12059 Cela ne t’aidera pas.
12060 Elle m’en parle
12061 Elle me l’avait donné.
12062 Ça ne t’intéresse pas.
12063 Ceci ne s’étant pas révélé suffisant, il recommença.
12064 Elle ne s’en souvient pas.
12065 Nous perdons
12066 Nous nous sommes perdus.
12067 Nous ne perdons pas.
12068 Nous ne sommes pas perdus.
12069 Nous vous attendons
12070 Nous ne vous attendons pas.
12071 Vous travaillez
12072 Est-ce que ça vous dérange si je fume ?
12073 Vous ne travaillez pas.
12074 Vous nous attendez
12075 Vous ne nous attendez pas.
12076 Ils travaillent.
12077 Ceux-ci fonctionnent.
12078 Ceux enseignés dans cette école
12079 À elles revient la maison.
12080 L’une d’elles est inutile.
12081 Ils ne travaillent pas.
12082 Ceux-ci ne fonctionnent pas.
12083 Ils vous étonneront par leur efficacité.
12084 Ceux-ci ayant été approuvés.
12085 Ils ne nous attendent pas
12086 Ceux-ci l’aident.
12087 Ceux-ci n’ayant pas été approuvés.
12088 Ils ne m’attendent pas.
12089 Ils me l’avaient donné.
12090 Ils ne s’en souviennent pas.
12091 Ne sois pas en retard !
12092 Ne va plus là !
12093 Ne sachant pas quoi faire
12094 Ne me prends pas pour un idiot
12095 Ne me présentant pas comme maire
12096 N’apporte pas de cadeaux.
12097 Ne l’attends pas
12098 Ne l’ayant pas trouvé
12099 N’y va pas
12100 Ne m’y attends pas
12101 Ne m’y étant pas rendu compte
12102 Laisse-nous ici.
12103 Veuillez nous réveiller à sept heures.
12104 Dis-lui bonjour.
12105 Veuillez lui dire d’attendre.
12106 Veuillez vous en aller.
12107 Veuillez nous y conduire.
12108 Force nous est de constater…
12109 Donne-m’en un peu.
12110 Trouve-t’en toi-même !
12111 Veuillez m’en montrer un autre.
12112 Donne-la à ton frère.
12113 Donne la pomme à ton frère.
12114 Veuillez le noter.
12115 Regarde la belle fille.
12116 Regarde-la.
12117 Regarde-la bien.
12118 Allez le voir.
12119 Lis le plus vite possible.
12120 Montez le son.
12121 Monte le son.
12122 Coupez les autres légumes.
12123 Coupez les 3 feuilles.
12124 Coupez les trois feuilles.
12125 Donne-le-moi plus tard.
12126 Donne-en-lui.
12127 Offre-leur-en.
12128 Appuyez-vous-y.
12129 Souvenez-vous-en.
12130 Croyez-vous en Dieu ?
12131 Envoie-les en vacances.
12132 Offre-lui-en.
12133 Prends-moi-en quand tu seras là.
12134 Laisse-moi en dehors de cette affaire.
12135 Envoie-la-nous.
12136 Voulez-vous vous en aller ?
12137 Nous convenons en particulier ce qui suit.
12138 C’est moi qui dis ça.
12139 C’est moi qui te dis ça.
12140 C’est l’animal en moi qui le veut.
12141 C’est moi qui suis allé là-bas.
12142 C’est moi qui dis ça.
12143 Et moi qui pensais qu’il m’aimait.
12144 Il n’y avait qu’elle et moi qui savions.
12145 C’est toi qui penses à ça.
12146 C’est toi qui me prends
12147 C’est l’animal en toi qui le veut.
12148 Était-ce toi qui as laissé la porte ouverte ?
12149 Celles qui travaillent ici
12150 Les gens qui discutent là
12151 C’est le seul de mes amis qui a du talent.
12152 Un drapeau en lambeaux qui continue à flotter au vent.
12153 J’ai un fils qui est en secondaire.
12154 Le grand Tours qui disparaît.
12155 Vous tous qui venez ici.
12156 Celles qui me dérangent
12157 Les gens qui nous dérangent
12158 C’est vous qui vous trompez.
12159 Celle qui travaille ici
12160 La femme qui vient ici
12161 Eux qui jouent ici
12162 Quelques jeux vidéo qui ont marqué les années 80.
12163 Six médecins et un infirmier qui travaillaient à l’hôpital.
12164 Celle qui me dérange
12165 Nous qui travaillons ici
12166 C’est l’enfant en nous qui parle.
12167 Des copains plus vieux que nous qui fumaient.
12168 Nous qui vous aimons
12169 Des copains plus vieux que nous qui me dérangeaient.
12170 Vous qui travaillez ici
12171 Y a-t-il quelqu’un parmi vous qui a un briquet ?
12172 Des copains plus vieux que vous qui fumaient.
12173 Vous qui me dérangez
12174 Des copains plus vieux que vous qui me dérangeaient.
12175 Nous avons mangé des huitres.
12176 Elle est allée en Bretagne et elle a mangé des huitres.
12177 Isabelle a mangé des huitres.
12178 Nous l’avons mangé.
12179 Nous l’avons mangée.
12180 Nous les avons mangés.
12181 Nous les avons mangées.
12182 Il les a pris en train de voler.
12183 Il les a prises en train de voler.
12184 Nous lui avons donné un cadeau.
12185 Nous n’avons pas mangé des huitres.
12186 Isabelle n’a jamais mangé des huitres.
12187 Nous ne t’avons pas écouté.
12188 Nous ne t’avons pas écoutée.
12189 Nous ne les avons pas écoutés.
12190 Nous ne les avons pas écoutées.
12191 Nous ne lui avons rien donné.
12192 J’ai mangé des huitres.
12193 Je suis allée en Bretagne et j’ai mangé des huitres.
12194 Les élèves ont terminé leurs devoirs.
12195 Les élèves t’ont écouté.
12196 Les élèves t’ont écoutée.
12197 Les élèves les ont écoutés.
12198 Les élèves les ont écoutées.
12199 Les élèves lui ont donné.
12200 Les élèves n’ont pas terminé leurs devoirs.
12201 Les élèves ne m’ont pas écouté.
12202 Les élèves ne m’ont pas écoutée.
12203 Les élèves ne les ont pas écoutés.
12204 Les élèves ne les ont pas écoutées.
12205 Les élèves ne lui ont pas écouté.
12206 As-tu eu peur ?
12207 Pourquoi as-tu eu peur ?
12208 En aviez-vous mangés ?
12209 Les documents qu’ils ont achetés.
12210 Les parties de poker qu’il a jouées.
12211 Le sac à main que j’ai acheté.
12212 Une fois que vous avez goûté au plaisir des jeux d’argent.
12213 Les lettres que j’ai voulu envoyer.
12214 Les lettres que j’ai voulu t’envoyer.
12215 Les images qu’elle a envoyées ont montré une structure inattendue.
12216 Les récompenses qu’elle a eues.
12217 Le document qu’ils ont acheté.
12218 Tout cela pour dire qu’on a longtemps été confrontés à ce problème.
12219 C’est dans la soirée que ces poursuites avaient été entamées.
12220 La femme que j’ai aidée.
12221 La femme que j’ai beaucoup aidée.
12222 La femme que j’ai un peu aidée.
12223 J’ai l’impression que tu as compris.
12224 Une fois que tu as goûté au plaisir.
12225 Une meilleure situation que quand il a pris ses fonctions.
12226 L’expert estime que les climatosceptiques ont fait pression.
12227 De la même nature que celles qui ont été saisies.
12228 La lettre que j’ai voulu envoyer.
12229 Certains y voient la preuve qu’il a finalement été lâché par son soutien.
12230 Cette finale qu’il a dominée.
12231 La pommade qu’il a voulu me passer.
12232 La pommade qu’il a voulu m’apporter.
12233 Ne dis à personne que nous avons fait cela.
12234 L’homme que j’ai aidé.
12235 L’homme que j’ai beaucoup aidé.
12236 L’homme que j’ai un peu aidé.
12237 Pour faire savoir que cette arrestation a été décidée.
12238 Cet homme qui est venu.
12239 Cette femme qui est jolie.
12240 Cet homme qui est grand.
12241 Ces femmes qui sont charmantes.
12242 Puis-je rester ?
12243 Que pouvais-je faire ?
12244 Que manges-tu ?
12245 Pourrait-il venir ?
12246 Que mange-t-elle ?
12247 Entre-t-il ?
12248 Quand partirons-nous ?
12249 Attrapez-nous ?
12250 Attrape-nous ?
12251 Que mangez-vous ?
12252 Que pouvaient-ils faire ?
12253 L’enfant lui dit merci.
12254 L’enfant dit merci.
12255 Le père et l’enfant lui disent merci.
12256 Les parents de l’enfant lui disent merci.
12257 Dominique peut venir.
12258 Antonio Banderas est un acteur espagnol.
12259 Mon enfant joue en bas.
12260 Le contexte troublé.
12261 Ma mère étant malade n’est pas venue.
12262 Un bruit sifflant de vapeur.
12263 Un souffle ardent
12264 Au diable toutes ces histoires
12265 Le verbe aimer est facile à conjuguer.
12266 Comment se fait-il que le réveil ait sonné.
12267 Les boissons et la nourriture étaient servis à volonté.
12268 Quel âge ont vos enfants ?
12269 Ni la Terre, ni son orbite ne sont parfaitement circulaires.
12270 Un petit sourire.
12271 Un seul être vous manque.
12272 La Corée peut gagner.
12273 Mon enfant ne peut pas aller à l’école.
12274 Ce matin nous avons froid.
12275 Cette chaise en bois est lourde.
12276 La Corée ne peut pas gagner.
12277 Mon enfant l’étudie.
12278 Le passé n’éclairant pas l’avenir.
12279 Comment se fait-il que le réveil n’ait pas sonné.
12280 les employés et la direction n’aboutirent à aucun résultat.
12281 Ce fut l’entreprise de marketing de la décennie.
12282 Mon enfant ne l’étudie.
12283 Mon enfant ne m’en veut pas.
12284 Les enfants jouent en bas.
12285 Les régions situées au sud sont chaudes.
12286 Ces rues désertes
12287 Nos bagages étant enregistrés
12288 Tout Paris est à la fête.
12289 L’eau des lacs et des rivières est douce.
12290 Lequel des élèves est sorti ?
12291 Les quartiers conquis par l’armée.
12292 Des petites bites.
12293 Des petites zones favorables à la biodiversité.
12294 Du tronc poussent les branches.
12295 Quels changements attendre de la réalité augmentée ?
12296 Les enfants en mangent.
12297 Mon fils ne passera pas.
12298 Les États-Unis se composent de 50 états.
12299 Les camions n’arrivent pas.
12300 Les cuillères en bois commencent à moisir.
12301 Ces choses nous les partageons.
12302 Mon fils n’arrive pas à faire les additions.
12303 Les enfants ne l’attendent pas.
12304 Mes enfants ne m’en veulent pas.
12305 La plupart des femmes rêvent d’un mariage en grande noce.
12306 La plupart des femmes ne rêvent pas d’un mariage en grande noce.
12307 La plupart des autres chaînes.
12308 La plupart des grandes entreprises.
12309 La plupart des spécialistes s’entendent sur ce point.
12310 La plupart des spécialistes ne s’entendent sur ce point.
12311 La plupart du monde parle anglais.
12312 La plupart du monde ne parle pas anglais.
12313 La plupart du monde s’aventure ici.
12314 La plupart du monde ne s’aventure pas ici.
12315 Les guerres sont chères.
12316 L’avion volait à basse altitude.
12317 Quel que soit le problème
12318 Quelle que soit la difficulté
12319 Quelles que soient vos raisons
12320 Quelle que puisse être sa raison
12321 Quelles que puissent être vos raisons
12322 Il est trois heures et demie.
12323 L’entretien dure environ une demi-heure.
12324 La plupart du temps
12325 Il n’a nulle part où aller.
12326 J’ai trop de travail.
12327 Est-ce que tu viens ?
12328 Est-ce qu’ils viennent ?
12329 C’est ce que je dis.
12330 Il est ce que j’appelle un champion.
12331 Discuter est ce qu’elle fait le mieux.
12332 Il vient, n’est-ce pas ?
12333 Puis-je déposer mes affaires ?
12334 Sans doute je ne vais pas.
12335 Si d’aventure on en a.
12336 Tant que je vivrai je n’oublierai pas.
12337 Puis j’ai acheté cela.
12338 Puis je vais t’aider.
12339 Quel genre de musique j’écoute
12340 Que manges-tu ?
12341 Que prend-il ?
12342 Notre point de départ on pouvait le voir d’ici.
12343 Ce prédateur réintroduit il y a 30 ans.
12344 L’auditoire était on ne peut plus ravi.
12345 Que prend-elle ?
12346 C’est elle qui vient.
12347 Anne menait elle aussi sa petite existence.
12348 Que mange-t-il ?
12349 Où va-t-il ?
12350 Quel âge a-t-elle ?
12351 Comme cela elle n’a pas à cuisiner.
12352 Les jours de fête on ne travaille pas.
12353 L’histoire commence il y a longtemps.
12354 La chanteuse a elle aussi annulé son concert.
12355 À Vienne il acheta du chocolat.
12356 Que mangeons-nous ?
12357 Allons nous asseoir ici.
12358 Que mangez-vous ?
12359 Veuillez vous rendre à l’accueil.
12360 Sachez vous éloigner.
12361 Vous pouvez vous asseoir.
12362 Que mangent-ils ?
12363 Ce sont elles qui parlent.
12364 Vont-elles participer ?
12365 Les femmes vont elles aussi participer.
12366 Va-t’en !
12367 C’est un va-t-en-guerre.
12368 Donne-m’en un peu.
12369 Que faut-il faire ?
12370 Quand arrivera-t-il ?
12371 Quand arrive-t-il ?
12372 Vous convainc-t-il par ses arguments ?
12373 Ne voilà-t-il pas ce qu’on appelle un signe des temps ?
12374 Quand arriveras-tu ?
12375 Quand arriveras-tu ?
12376 Il a écrit l’article à la une aujourd’hui.
12377 Les pays de la CE.
12378 La quarante-quatrième.
12379 Il faisait froid cet hiver-là.
12380 Veux-tu aller là ?
12381 Tout est là.
12382 Ils ne s’en tinrent pas là.
12383 Il sera là l’année prochaine.
12384 Voici mon amie.
12385 C’est sa onzième fille.
12386 Mon vieil ami.
12387 Ils sont comme de vieux ours.
12388 Il marche tous les matins.
12389 Corrige avant tout les erreurs.
12390 Tous les cours d’eau.
12391 Il ignore tout des oiseaux.
12392 Ce qui fait en tout deux personnes.
12393 Ils n’utilisent pas du tout les pieds.
12394 Merci à tous ceux qui sont venus.
12395 Je remercie avant tout ceux qui sont venus.
12396 Toutes ces erreurs qu’il fait
12397 Toute la saison
12398 Ils aiment tous la géographie.
12399 Il sera connu de tous un jour.
12400 C’est pour nous tous une mauvaise nouvelle.
12401 Je souhaite à tous une bonne année.
12402 Ils n’apprécient pas tous la nourriture.
12403 Ils sont tous au travail.
12404 Toutes les années
12405 Elle donne à tous des bouteilles.
12406 Mes amis n’apprécient pas tous la musique.
12407 On a tous des qualités.
12408 Je peux tous les lire.
12409 Ils ont tous une moto.
12410 C’est pour nous tous une mauvaise nouvelle.
12411 Toute la saison
12412 Après tout ma douleur n’est pas si forte.
12413 Je n’aime pas du tout la télévision.
12414 Tout le Canada.
12415 Ce qui fait en tout deux personnes.
12416 Tout cet équipement
12417 Toutes les cours de récréation
12418 Les femmes portent toutes des noms à consonance étrangère.
12419 Elles font toutes du business avec eux.
12420 En tout cas, je vous donnerai des nouvelles.
12421 Et si tu avais gagné
12422 Si tu mourais
12423 Si j’avais gagné
12424 S’ils avaient gagné
12425 Je veux que tu sois prudent.
12426 Je souhaitais que tu fusses présent.
12427 Je souhaite qu’il apprenne le français.
12428 Je ne permets pas que tu sois imprudent.
12429 Je n’exige pas que vous soyez ponctuels.
12430 C’est le seul ami qui me comprenne.
12431 À condition que tu réussisses.
12432 À condition que tu me prennes.
12433 Pourvu que tu réussisses
12434 Il est arrivé après que je fus parti.
12435 Je vous appelle pour que vous me donniez des renseignements.
12436 Bien que tu aies passé l’examen
12437 Je sais bien que tu reviendras.
12438 Je travaille de façon que nous puissions vivre.
12439 Je travaille de façon qu’il puisse vivre.
12440 En admettant qu’il soit allé
12441 Demander jusqu’à ce qu’il réponde.
12442 Demander jusqu’à ce qu’il me réponde.
12443 J’irai si tant est que je puisse.
12444 J’irai si tant est que je le puisse.
12445 Quoique je dise.
12446 Quoique je te dise.
12447 Elle est certaine que vous êtes un espion.
12448 Je n’ai pas compris.
12449 Tu n’as pas compris.
12450 Ne t’inquiète pas.
12451 On n’a pas compris.
12452 Il y a pas mal de choses à faire.
12453 Il a pas moins de 10 voitures.
12454 On ne part pas encore.
12455 On ne vous a pas compris.
12456 Il n’y a pas d’eau.
12457 Il en profita.
12458 C’est tout à fait correct.
12459 Elles sont quasiment à portée de main.
12460 Les filles sont de sortie.
12461 Le voisin d’à côté est pénible.
12462 Le gouvernement a depuis ordonné aux soldats de quitter le pays.
12463 Le canal de Suez.
12464 La pile de Volta.
12465 Ils sont par contre restés à la maison.
12466 Le cinéma tire à hue et à dia.
12467 L’autour attrapa une souris.
12468 Voici venu le temps des vacances.
12469 Le participe passé a tout de suite été vu.
12470 Il est né à Cabana.
12471 Il n’y a personne pour m’aider.
12472 Plusieurs de ces langues vont disparaitre.
12473 J’ai quelques ennuis.
12474 Passé les premières années à l’école, il s’assagit.
12475 Les années sont passées vite.
12476 Le serveur a été mis à jour.
12477 Le serveur a été mis en place.
12478 Les températures sont plus froides que prévu.
12479 La facture est plus élevée que prévu.
12480 Elles y arrivent elles-mêmes.
12481 Vous y arriverez vous-mêmes.
12482 Monsieur, vous y arriverez vous-même.
12483 L’accident a fait au moins trois morts.
12484 Je reçois des mises à jour régulièrement.
12485 C’est très important.
12486 J’ai très faim.
12487 Il est très à l’aise.
12488 Je suis très en retard.
12489 Très, très loin.
12490 Tu aimes beaucoup ? Très !
12491 Je me sentirais très seul si tu venais à disparaître.
12492 le vieux quartier Très Cloîttres à Grenoble.
12493 Il fait faire très attention.
12494 Il les a fait fuir.
12495 Vous l’avez fait souffrir.
12496 Il ne les a pas fait fuir.
12497 Vous l’avez encore fait souffrir.
12498 Les voitures dernier cri.
12499 Ses derniers cris.
12500 Des points de vue.
12501 crier comme un putois
12502 faire un plongeon
12503 à midi
12504 tuyau d’arrosage
12505 fabrique de chaloupes
12506 sauce froide
12507 fabricant de chaloupes
12508 sauver par le gong
12509 stade de hockey
12510 bois dur
12511 flottage de bois
12512 flotteur de bois
12513 grenouille-taureau
12514 saumon d’eau douce
12515 où l’on peut faire du kayak
12516 sandwich long
12517 chute de neige abondante
12518 ruban à mesurer
12519 pot-au-feu
12520 billet à gratter
12521 marcher sur les pieds
12522 marcher sur
12523 défilé de mode
12524 à part ça
12525 en tout et pour tout
12526 tablette de chocolat
12527 machine à coudre
12528 maison jumelée
12529 intéressé par
12530 poser une question
12531 donner des cours
12532 au dos
12533 construction de logements
12534 quartier résidentiel
12535 motard criminel
12536 pom-pom girl
12537 aide sociale
12538 permis de construire
12539 quelques jours
12540 avis d’imposition
12541 clause dérogative
12542 faire semblant
12543 au-dessous de zéro
12544 ramasser de l’argent
12545 pouvoir gagner
12546 conter fleurette
12547 boîte postale
12548 de part en part
12549 l’aider
12550 les aider
12551 avoir besoin
12552 ce dont j’ai besoin
12553 beau-parleur
12554 ce matin
12555 bleu marine
12556 de prime abord
12557 vidange moteur
12558 ce soir
12559 poseur de briques
12560 tour de bureaux
12561 condition féminine
12562 benne à ordures
12563 sac-poubelle
12564 taxe d’ordures ménagères
12565 quelque part
12566 lutte contre
12567 successeur de
12568 harelde du Nord
12569 lagopède blanc
12570 gélinotte huppée
12571 semi-remorque
12572 nid de moustique
12573 chaque jour
12574 perche soleil
12575 pelle à poussière
12576 à portée de la main
12577 Une loquette d’Amérique
12578 lampe à huile
12579 peinture fraîche
12580 bois tendre
12581 flaque d’eau
12582 apporter des changements
12583 collecte de données
12584 collecte des ordures ménagères
12585 jaseur d’Amérique
12586 taux de succès scolaire
12587 bonnet de bain
12588 à carreaux
12589 dégât des eaux
12590 omble des fontaines
12591 ruban adhésif
12592 omble chevalier
12593 truite de mer
12594 être bon tireur
12595 bébé phoque
12596 chambre d’hôte
12597 réserve de faune
12598 pas de porte
12599 sumac vénéneux
12600 taille-crayon
12601 laisse de mer
12602 se fier à
12603 se vendre au prix de détail
12604 prêter attention à
12605 pommes de terre en purée
12606 tas de neige
12607 bonnet de laine
12608 perche noire
12609 carré-éponge
12610 avoir le sens de l’humour
12611 bâtir des châteaux en Espagne
12612 faire un bras de fer
12613 bras de fer
12614 faire un geste
12615 battre fort
12616 paille de fer
12617 corde à sauter
12618 taille-crayon
12619 tailler un crayon
12620 Le steward de Charlevoix a son charme.
12621 Une répression tous azimuts
12622 De tout temps
12623 À tout prix
12624 De toute façon
12625 de l’après-midi
12626 stylo plume
12627 maïs soufflé
12628 rôti de bœuf
12629 groupe de discussion
12630 prise de courant
12631 il faut dire que
12632 l’échapper belle
12633 s’opposer à
12634 sans objet
12635 grande caravane
12636 en stock
12637 du jeu
12638 livraison par exprès
12639 payable à la livraison
12640 registre des procès-verbaux
12641 attentat à la pudeur
12642 il faut dire que
12643 il faut dire que
12644 manomètre à air
12645 filet d’aiglefin
12646 prendre le parti de
12647 déclinez votre identité
12648 proposer des correctifs
12649 ouvrir la voie
12650 directeur de banque
12651 familier à
12652 de la première à la dernière page
12653 incendie circonscrit
12654 date d’échéance
12655 lait concentré
12656 entrée de service
12657 conduire une machine
12658 publier un communiqué
12659 délivrer un reçu
12660 occasion d’affaires
12661 crayon graphite
12662 appuyer une décision
12663 défrayer [quelqu’un] de ses dépenses
12664 suivre un cours
12665 J’ai pris des passagers en cours de route.
12666 J’ai pris part à ce cours d’informatique.
12667 avoir la situation en mains
12668 abolir des postes
12669 premier conférencier
12670 quart de jour
12671 chiffre prudent
12672 jusqu’à présent
12673 image de marque
12674 entreprise citoyenne
12675 comité mixte
12676 consultations externes
12677 quart de nuit
12678 quart de soir
12679 collecte de sang
12680 compressions budgétaires
12681 au petit matin
12682 suppressions de postes
12683 chef cuisinier
12684 chef de direction
12685 secrétaire de direction
12686 vice-président et directeur exécutif
12687 coupon de réduction
12688 faute d’inattention
12689 parler avec un accent
12690 proposer une candidature
12691 proposition comme candidat
12692 câble de démarrage
12693 Il commença à discuter avec moi.
12694 d’ici [x] minutes
12695 avec lequel je joue
12696 affecter à une tâche
12697 énergie nouvelle
12698 entrée interdite
12699 traiter un problème
12700 Il lui a adressé des compliments.
12701 Il est tiré d’affaire.
12702 Il est sorti d’affaire.
12703 traiter un sujet
12704 se heurter à un obstacle
12705 contrefaire une signature
12706 année scolaire
12707 salaire de base
12708 à l’avance
12709 Passer du temps.
12710 mes sans préjudice de
12711 s’introduire dans un marché
12712 être fourbu
12713 toucher un chèque
12714 s’adapter à la situation
12715 club de forme
12716 ballon sonde
12717 sous aucun prétexte
12718 inspecteur d’assurances
12719 séance de formation
12720 de séance
12721 répondre à des besoins
12722 Je veux la rencontrer et au besoin, lui parler.
12723 répondre à des exigences
12724 boîte à gants
12725 coffre bancaire
12726 enceinte acoustique
12727 droits des personnes
12728 dans la mesure où
12729 en ce qui me concerne
12730 ayant autorité
12731 responsable de la communication
12732 traiter une commande
12733 exécuter une ordonnance
12734 avoir un souvenir tout frais
12735 exécuter une ordonnance
12736 pourvoir un poste
12737 mal juger son coup
12738 prétendre que
12739 chargeuse-pelleteuse
12740 numéro gratuit
12741 revêtement de sol
12742 femme active
12743 vidange moteur
12744 voiture gratuite
12745 billet de faveur
12746 rémunération du capital
12747 assurance contre l’incendie
12748 porte-fenêtre
12749 c’est le moins qu’on puisse dire
12750 monde des affaires
12751 simple détention
12752 piste de vitesse
12753 leçon particulière
12754 porter ses fruits
12755 cuir verni
12756 jardinerie [raison sociale]
12757 poste de vigie
12758 concentré de tomate
12759 palais des foires
12760 centre de découverte
12761 renseignement exclusif
12762 ensemble de jardin
12763 meuble de jardin
12764 piquet de grève
12765 file d’attente
12766 agression à domicile
12767 salle à manger
12768 au minimum
12769 Les femmes participent activement à ce processus.
12770 être en droit de
12771 blessure bénigne
12772 agglomération de Montréal
12773 agglomération de Québec
12774 exclusivité de
12775 Une interview exclusive donnée à la presse.
12776 cuillère à soupe
12777 cuillère à café
12778 baguette de pain
12779 pain complet
12780 panne de courant
12781 insister pour que
12782 atteindre le seuil de rentabilité
12783 invoquer le règlement
12784 arts plastiques
12785 voulant que
12786 c’est la raison pour laquelle
12787 se sentir visé
12788 sûreté supplémentaire
12789 comptoir à salades
12790 combat décisif
12791 pourvoir à un poste
12792 dîner officiel
12793 assiette de viandes froides
12794 jeu de construction
12795 petit boulot
12796 mettre à profit
12797 libre-service de demi-gros
12798 additionnal premium
12799 Ils hésitent face aux montants de la dette.
12800 prime temporaire
12801 mettre en état d’arrestation.
12802 en service.
12803 sous-entrepreneur.
12804 champion en titre.
12805 cas de force majeure.
12806 acte de naissance.
12807 affronter la tempête.
12808 interjeter appel.
12809 se rendre aux urnes.
12810 être diffusé.
12811 organiser un référendum.
12812 en service.
12813 outrage ou tribunal
12814 clauses d’un contrat
12815 circulation dense
12816 abus de confiance.
12817 avis de sinistre
12818 pour autant que je sache
12819 chaîne de montage
12820 chaîne d’assemblage
12821 carnet de banque
12822 client habituel
12823 prix réduit
12824 prix d’entrée
12825 prix courant
12826 descente aux enfers
12827 la cambrure du pied
12828 budget d’exploitation
12829 en retard.
12830 faire une promenade
12831 nuire à un résultat.
12832 entrer en vigueur
12833 prendre de force
12834 déclencher une discussion
12835 prendre part aux discussions
12836 créer une entreprise
12837 Il est parti de cette entreprise.
12838 faire courir une rumeur
12839 être touché par un témoignage
12840 toute l’année
12841 toute la journée
12842 à longueur de semaine.
12843 immeuble résidentiel
12844 conférences téléphoniques
12845 registered mail.
12846 braderie.
12847 soldes après incendie.
12848 pour seulement
12849 collectes de fonds
12850 pendant la saison
12851 siège-social
12852 Ça s’annonce mal.
12853 trous de mémoire
12854 indemnité de congé payé
12855 compte en banque
12856 facture d’électricité
12857 facture de téléphone
12858 billet gratuit
12859 être nerveux
12860 chaîne stéréo
12861 pince étau
12862 déposer une plainte
12863 faire un appel téléphonique
12864 voter une loi
12865 faire un appel
12866 avoir hâte de
12867 laisser découvrir la vérité
12868 pulvériser un record
12869 pour comble d’insulte
12870 aime que
12871 Ils m’apprécient en tant que collègue.
12872 être au sommet de ma forme
12873 être persuadé que
12874 avoir besoin de
12875 être au bout du rouleau
12876 faire des affaires
12877 être chargé
12878 Ils sont pris en charge.
12879 être dans le pétrin
12880 être dans la même situation
12881 laisser fuir de l’information
12882 situation imprévue
12883 pour information
12884 pain de savon
12885 inciter les gens à voter
12886 l’emporter sur
12887 applaudir chaleureusement
12888 broyer du noir
12889 tenir la gauche
12890 tenir la droite
12891 avoir à l’œil
12892 En deux mots
12893 nappe de pétrole
12894 jouer un rôle de second plan
12895 mettre l’accent sur
12896 Un récipient rempli entièrement.
12897 Le moteur fonctionne à 100 % de sa capacité.
12898 Il a la capacité de le faire.
12899 On les juge à leur capacité de résoudre les problèmes.
12900 mettre la main à la pâte
12901 tenter sa chance
12902 détails techniques
12903 avoir de sens
12904 parcs récréatifs
12905 hors d’usage
12906 accord global
12907 lit grand format
12908 lit très grand format
12909 bureau de vote
12910 hors champ
12911 tuyau d’échappement
12912 sans objet
12913 Le Nil est un fleuve d’Afrique.
12914 soins infirmiers
12915 parc de stationnement
12916 en direct
12917 monte-charge
12918 prêt-à-monter
12919 esprit d’entreprise
12920 témoin informatique
12921 stratégie de marque
12922 bon marché
12923 homme de main
12924 séance d’informations
12925 Le monospace.
12926 les coulisses
12927 Les dépassés.
12928 les media de masse
12929 les fauteuils de repos
12930 les hayons
12931 les privilégiés
12932 haute technologie
12933 à plein régime
12934 rouleau impérial
12935 chaudrée de palourdes
12936 nuque longue
12937 pièce à conviction
12938 d’office
12939 chambre d’hôte
12940 fenêtre arquée
12941 fichier de sauvegarde
12942 grand écart
12943 tant pis !
12944 par tête
12945 prise de courant
12946 allocation journalière
12947 coup de départ
12948 maison sur deux niveaux
12949 obligation spéculative
12950 Steve Jobs, le pionnier de l’ordinateur conçu comme une prison cool, mise au point pour supprimer leur liberté aux idiots, est mort.
12951 manque de crédibilité
12952 film de route
12953 à touches
12954 prix de couvert
12955 café express
12956 rencontre arrangée
12957 cabaret clandestin
12958 mes jalousies
12959 cornichon mariné
12960 en tout cas
12961 abri voiture
12962 sans escale
12963 chaîner stéréo
12964 complexe multisalle
12965 argent comptant
12966 papier-cache adhésif
12967 juste-à-temps
12968 c’est bien dommage
12969 vol nolisé
12970 jeu de guerre
12971 surf des neiges
12972 très sec
12973 planche à roulette
12974 commerce interentreprises
12975 régler la note
12976 poste à poste
12977 golf miniature
12978 capitaux flottants
12979 retour en vogue
12980 concepteur de jeux
12981 société de participation
12982 manche à balai
12983 entreprise conjointe
12984 gaffe de tournage
12985 piratage téléphonique
12986 Le cinéma à domicile est un phénomène nouveau.
12987 Les livres électroniques sont difficiles à lire.
12988 Il fait une séance de rencontres éclair.
12989 Il fait un logiciel gratuit.
12990 Il fait un logiciel publicitaire.
12991 Il fait du référencement abusif.
12992 Il fait du hameçonnage.
12993 Il fait du pollupostage.
12994 plutôt mourir
12995 logiciel malveillant
12996 logiciel harcelant
12997 commerce électronique
12998 bailleur de fonds
12999 dernière commande
13000 en attente.
13001 assurance inconditionnelle.
13002 acier inoxydable.
13003 fermeture à glissière.
13004 briseur de grève.
13005 grand format.
13006 en mer
13007 Usain Bolt est un athlète jamaïcain.
13008 spectacle fastueux.
13009 Il parle de rythme.
13010 Il parle des soldes d’après Noël.
13011 liste de contrôle
13012 p. ex.
13013 vente forcée
13014 voitures de location
13015 location de voitures
13016 en souffrance.
13017 combinaison isolante.
13018 tourniquet d’arrosage.
13019 simple député
13020 sac à restes
13021 tondeuse à cheveux.
13022 bilan de santé
13023 retour en arrière
13024 emballage de six
13025 Le capitaine Haddock est l’ami de Tintin.
13026 dans ce cas, il est certain
13027 et ce,
13028 Par-ci par-là.
13029 eh,
13030 eh bien,
13031 Je l’ai vu ici même hier.
13032 Des impressions recto verso.
13033 La bouteille est aux deux tiers pleine.
13034 Un trois-quarts de rugby.
13035 Les trois-quarts de l’équipe de rugby.
13036 La bouteille est aux trois quarts pleine.
13037 Un trois-quarts de rugby.
13038 S’il te plaît, dessine-moi un mouton.
13039 Il y a un va-et-vient dans cette maison.
13040 Les états-majors ont décidé.
13041 Avez-vous le tout-à-l’égout ?
13042 C’est un va-nu-pieds.
13043 Elle est la vice-présidente.
13044 J’habite au rez-de-chaussée.
13045 Je m’appelle Jean-Marc.
13046 Je m’appelle Pierre-Yves.
13047 Je m’appelle Charles-Édouard.
13048 Je m’appelle Marie-Laure.
13049 Je m’appelle Anne-Sophie.
13050 Mon grand-père a 100 ans.
13051 J’ai ouï-dire qu’il ne viendra pas.
13052 C’est un chef-d’œuvre.
13053 Il habite en Franche-Comté.
13054 Il habite à Clermont-Ferrand.
13055 Le massif du Mont-Blanc.
13056 Le mont Blanc est le point culminant des Alpes.
13057 Un trait d’union.
13058 J’ai la quasi-certitude qu’il ne viendra pas.
13059 Je suis quasi certain qu’il ne viendra pas.
13060 Une fin de non-recevoir.
13061 Non merci.
13062 Je me demande s’il avait ou non conscience que son arme était chargée.
13063 etc.
13064 Un écrivain du XIXe siècle
13065 La 2e à droite
13066 Les 2es.
13067 Les 2des.
13068 Le 2d.
13069 Je me sens chez moi dans ton chez-toi.
13070 Mon ex-femme habite près de chez moi.
13071 La procédure est semi-automatique.
13072 Je pense qu’il ment.
13073 Je m’étais perdu.
13074 La lettre l est mal écrite.
13075 La variable x est constante.
13076 Moody’s a abaissé la note de la dette du Japon.
13077 Le vainqueur du 100 m aurait triché.
13078 Ces deux interactions, respectivement 10-15 m et 10-18 m expliquent les difficultés expérimentales rencontrées.
13079 Il n’arrive jamais à l’heure.
13080 L’histoire.
13081 Un livre d’histoire et géographie.
13082 La vitamine D ou la vitamine C.
13083 Ils ont beaucoup d’enfants.
13084 Un chef-d’œuvre
13085 Va-t’en d’ici.
13086 Ils ont beaucoup d’enfants.
13087 Pressez la touche “c” pour continuer.
13088 J’ai reçu des fleurs pour la Saint-Valentin.
13089 J’ai un chien, un chat, un lapin, etc.
13090 parce que
13091 redoubler une année
13092 Je me rappelle ce moment.
13093 J’ai reçu le rappel de la facture.
13094 Je me rappelle de quelle manière il a dit cela.
13095 Il faut lui rappeler de refaire tout cela.
13096 Il faut lui rappeler de me téléphoner.
13097 Tu te rappelles de moi ?
13098 Elle me rappelle de me rendre à la banque.
13099 Cela me rappelle de loin mon enfance.
13100 Je me rappelle de moins en mois mon enfance.
13101 Je me rappelle de temps en temps mon enfance.
13102 Je vais te rappeler de suite.
13103 Rappelé de Paris auprès de son père.
13104 Je me rappelle Anne.
13105 Je me souviens d’Anne.
13106 Il faut lui rappeler d’envoyer la lettre.
13107 Tu te rappelles d’eux ?
13108 Il rappelle d’ailleurs que ce lieu peut être légendaire.
13109 Je ne me rappelle pas ce moment.
13110 Je me rappelle de quelle manière il a dit cela.
13111 Je dois me rappelle de tout ranger.
13112 Ils se rappellent bien de moi.
13113 Je me rappelle bien Anne.
13114 Je me rappelle toujours d’allumer la lumière.
13115 Ils se rappellent bien d’elle.
13116 T’es-tu décidé ou non ?
13117 T’es-tu décidé ou non ?
13118 Il va chez le coiffeur tous les mois.
13119 Il est arrivé à pied.
13120 Il a sauté à pieds joints.
13121 Il a pied dans ce bassin.
13122 Je n’ai pas pied dans ce bassin.
13123 L’entreprise l’a mis à pied.
13124 Le projet que j’ai mis sur pied est en bonne voie.
13125 Il s’est habillé de pied en cap comme un militaire.
13126 Je l’attends de pied ferme.
13127 Il travaille d’arrache-pied sur ce projet.
13128 Le chiffre d’affaires de l’entreprise.
13129 La défaite s’ensuivit.
13130 la damer
13131 loin de là
13132 favoriser une candidature
13133 aussi mauvais
13134 savoir gré
13135 Le contrat est négocié de gré à gré.
13136 accaparer quelque chose
13137 assieds-toi.
13138 asseyez-vous.
13139 n’être pas sans savoir.
13140 Je ne suis pas sans savoir
13141 J’ai de la fièvre ?
13142 J’ai la fièvre ?
13143 As-tu la fièvre ?
13144 As-tu de la fièvre ?
13145 L’échappée belle d’un coureur cycliste.
13146 à motocyclette.
13147 asseoir.
13148 ne me contredisez pas.
13149 effectif scolaire.
13150 effectif étudiant.
13151 moins mauvais.
13152 à Lac-Beauport.
13153 bran de scie.
13154 à Cap-de-la-Madeleine.
13155 lire dans le journal.
13156 rue passante.
13157 artère passante.
13158 avenue passante.
13159 boulevard passant.
13160 L’ère glaciaire.
13161 tâcher que
13162 À l’aimable attention de
13163 Un cadeau à l’intention de ma femme.
13164 c’est de lui que je parle
13165 Les métaux précieux et l’or en particulier restent des investissements sûrs.
13166 par acquit de conscience.
13167 faire partie de
13168 tirer parti
13169 prendre parti
13170 J’ai pris une partie de l’argent.
13171 Le site a été en partie traduit.
13172 Il s’est transformé en parti politique.
13173 Il arrive en général assez tard.
13174 faire affaire avec
13175 tenir pour acquis
13176 Il est en pleine campagne électorale.
13177 Tant pis si je perds.
13178 Les choses vont de mal en pis.
13179 Finalement, il a gagné.
13180 Au final de cette sonate.
13181 Il a pulvérisé le record.
13182 Ils ont fait exploser le pont.
13183 papillon adhésif
13184 mouchoir de papier
13185 Mars était le dieu de la guerre.
13186 Février est le mois le plus froid.
13187 La monarchie de Juillet.
13188 Cette année, juin a été chaud.
13189 Juin est le sixième mois.
13190 Je suis né le 30 mars 1960.
13191 La planète Mars est rouge.
13192 Dans la mythologie romaine, Mars est le dieu de la guerre.
13193 Je viendrai lundi.
13194 Lundi est le premier jour de la semaine.
13195 Je parle anglais, mais je ne suis pas Anglais.
13196 Il est surpris d’apprendre que le Japonais est incapable de le comprendre.
13197 Les Bretons parlent aux Français.
13198 Napoléon est né en Corse.
13199 Je travaille en anglais avec des Anglais.
13200 Je travaille en anglais avec des Anglaises.
13201 Même les Français ont un français qui est loin d’être parfait.
13202 Écrit dans un anglais facile
13203 Le numéro un français a gagné à Roland-Garros aujourd’hui.
13204 Il s’est exprimé dans un français approximatif.
13205 Une leçon de français.
13206 J’ai appris un peu de français ici et là.
13207 Une invasion de troupes soviétiques.
13208 Le clocher de l’église
13209 En fonction de l’état quantique de l’électron.
13210 Oui…
13211 Vous vous parlez.
13212 Il est capable de te faire faire des choses surprenantes.
13213 En en demandant deux
13214 C’est donnant donnant
13215 L’est est de ce côté.
13216 Les poules du couvent couvent.
13217 Un film un peu olé olé.
13218 Je suis allé à Bora Bora.
13219 Les chiens aboient à qui mieux mieux.
13220 De l’orge perlé.
13221 De l’orge mondé.
13222 Il vous faut un laissez-passer.
13223 Le courant est d’un demi-nœud.
13224 Un signal de 3,5 Hz.
13225 L’appareil a consommé 5 kW·h.
13226 L’appareil a consommé 5 kWh.
13227 Une température de 3 kelvins.
13228 Un courant de 10 ampères.
13229 Un courant de dix ampères.
13230 Il a remporté la médaille Fields.
13231 Jeudi 28 août 2014.
13232 Dimanche 14 septembre 2014.
13233 Le dimanche 19 juil 2015.
13234 Le dimanche 19 juillet 2015.
13235 Jeudi 28/08/2014.
13236 Jeudi 2014/08/28.
13237 Jeudi 28-08-2014.
13238 Il est né le 31 octobre.
13239 Il est né le 30 septembre.
13240 Il est né le 31/10/1969.
13241 Il est né le 31-8-69.
13242 Il est né le 31-aout-1969.
13243 Il est né le 28 février.
13244 Il est né le 28-02-1969.
13245 Le 29 février 2000.
13246 Le 29/février/2000.
13247 Le 29/02/2000.
13248 Le 29/2/2000.
13249 Le 29 février 2004.
13250 Le 29 février 2008.
13251 Le 29 février 2012.
13252 Le 29 février 2016.
13253 Le 29 février 2020.
13254 Le 29-février-2004
13264 Le Horla — Guy de Maupassant
13266 J’aime ce pays, et j’aime y vivre parce que j’y ai mes racines, ces profondes et délicates racines, qui attachent un homme à la terre où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on mange, aux usages comme aux nourritures, aux locutions locales, aux intonations des paysans, aux odeurs du sol, des villages et de l’air lui-même.
13267 J’aime ma maison où j’ai grandi.
13268 De mes fenêtres, je vois la Seine qui coule, le long de mon jardin, derrière la route, presque chez moi, la grande et large Seine, qui va de Rouen au Havre, couverte de bateaux qui passent.
13269 À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu des clochers gothiques.
13270 Ils sont innombrables, frêles ou larges, dominés par la flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air bleu des belles matinées, jetant jusqu’à moi leur doux et lointain bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit.
13271 Comme il faisait bon ce matin !
13272 Vers onze heures, un long convoi de navires, traînés par un remorqueur, gros comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila devant ma grille.
13273 Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel, venait un superbe trois-mats brésilien, tout blanc, admirablement propre et luisant.
13274 Je le saluai, je ne sais pourquoi, tant ce navire me fit plaisir à voir.
13275 12 mai. — J’ai un peu de fièvre depuis quelques jours ; je me sens souffrant, ou plutôt je me sens triste.
13276 D’où viennent ces influences mystérieuses qui changent en découragement notre bonheur et notre confiance en détresse.
13277 On dirait que l’air, l’air invisible est plein d’inconnaissables Puissances, dont nous subissons les voisinages mystérieux.
13278 Je m’éveille plein de gaîté, avec des envies de chanter dans la gorge. — Pourquoi ? — Je descends le long de l’eau ; et soudain, après une courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez moi. — Pourquoi ? — Est-ce un frisson de froid qui, frôlant ma peau, a ébranlé mes nerfs et assombri mon âme ?
13279 Est-ce la forme des nuages, ou la couleur du jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé ma pensée ? Sait-on ?
13280 Tout ce qui nous entoure, tout ce que nous voyons sans le regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous, sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets rapides, surprenants et inexplicables ?
13281 Comme il est profond, ce mystère de l’Invisible !
13282 Nous ne le pouvons sonder avec nos sens misérables, avec nos yeux qui ne savent apercevoir ni le trop petit, ni le trop grand, ni le trop près, ni le trop loin, ni les habitants d’une étoile, ni les habitants d’une goutte d’eau… avec nos oreilles qui nous trompent, car elles nous transmettent les vibrations de l’air en notes sonores.
13283 Elles sont des fées qui font ce miracle de changer en bruit ce mouvement et par cette métamorphose donnent naissance à la musique, qui rend chantante l’agitation muette de la nature… avec notre odorat, plus faible que celui du chien… avec notre goût, qui peut à peine discerner l’âge d’un vin !
13284 Ah ! si nous avions d’autres organes qui accompliraient en notre faveur d’autres miracles, que de choses nous pourrions découvrir encore autour de nous !
13285 16 mai. — Je suis malade, décidément ! Je me portais si bien le mois dernier !
13286 J’ai la fièvre, une fièvre atroce, ou plutôt un énervement fiévreux, qui rend mon âme aussi souffrante que mon corps.
13287 J’ai sans cesse cette sensation affreuse d’un danger menaçant, cette appréhension d’un malheur qui vient ou de la mort qui approche, ce pressentiment qui est sans doute l’atteinte d’un mal encore inconnu, germant dans le sang et dans la chair.
13288 18 mai. — Je viens d’aller consulter mon médecin, car je ne pouvais plus dormir. Il m’a trouvé le pouls rapide, l’œil dilaté, les nerfs vibrants, mais sans aucun symptôme alarmant.
13289 Je dois me soumettre aux douches et boire du bromure de potassium.
13290 25 mai. — Aucun changement ! Mon état, vraiment, est bizarre. À mesure qu’approche le soir, une inquiétude incompréhensible m’envahit, comme si la nuit cachait pour moi une menace terrible.
13291 Je dîne vite, puis j’essaie de lire ; mais je ne comprends pas les mots ; je distingue à peine les lettres.
13292 Je marche alors dans mon salon de long en large, sous l’oppression d’une crainte confuse et irrésistible, la crainte du sommeil et la crainte du lit.
13293 Vers dix heures, je monte dans ma chambre. À peine entré, je donne deux tours de clef, et je pousse les verrous ; j’ai peur… de quoi ?…
13294 Je ne redoutais rien jusqu’ici… j’ouvre mes armoires, je regarde sous mon lit ; j’écoute… j’écoute… quoi ?…
13295 Est-ce étrange qu’un simple malaise, un trouble de la circulation peut-être, l’irritation d’un filet nerveux, un peu de congestion, une toute petite perturbation dans le fonctionnement si imparfait et si délicat de notre machine vivante, puisse faire un mélancolique du plus joyeux des hommes, et un poltron du plus brave ?
13296 Puis, je me couche, et j’attends le sommeil comme on attendrait le bourreau.
13297 Je l’attends avec l’épouvante de sa venue ; et mon cœur bat, et mes jambes frémissent ; et tout mon corps tressaille dans la chaleur des draps, jusqu’au moment où je tombe tout à coup dans le repos, comme on tomberait pour s’y noyer, dans un gouffre d’eau stagnante.
13298 Je ne le sens pas venir, comme autrefois, ce sommeil perfide, caché près de moi, qui me guette, qui va me saisir par la tête, me fermer les yeux, m’anéantir.
13299 Je dors — longtemps — deux ou trois heures — puis un rêve — non — un cauchemar m’étreint.
13300 Je sens bien que je suis couché et que je dors… je le sens et je le sais… et je sens aussi que quelqu’un s’approche de moi, me regarde, me palpe, monte sur mon lit, s’agenouille sur ma poitrine, me prend le cou entre ses mains et serre… serre… de toute sa force pour m’étrangler.
13301 Moi, je me débats, lié par cette impuissance atroce, qui nous paralyse dans les songes ; je veux crier, — je ne peux pas ; — je veux remuer, — je ne peux pas ; — j’essaye, avec des efforts affreux, en haletant, de me tourner, de rejeter cet être qui m’écrase et qui m’étouffe, — je ne peux pas !
13302 Et soudain, je m’éveille, affolé, couvert de sueur. J’allume une bougie. Je suis seul.
13303 Après cette crise, qui se renouvelle toutes les nuits, je dors enfin, avec calme, jusqu’à l’aurore.
13304 2 juin. — Mon état s’est encore aggravé. Qu’ai-je donc ? Le bromure n’y fait rien ; les douches n’y font rien.
13305 Tantôt, pour fatiguer mon corps, si las pourtant, j’allai faire un tour dans la forêt de Roumare.
13306 Je crus d’abord que l’air frais, léger et doux, plein d’odeur d’herbes et de feuilles, me versait aux veines un sang nouveau, au cœur une énergie nouvelle.
13307 Je pris une grande avenue de chasse, puis je tournai vers La Bouille, par une allée étroite, entre deux armées d’arbres démesurément hauts qui mettaient un toit vert, épais, presque noir, entre le ciel et moi.
13308 Un frisson me saisit soudain, non pas un frisson de froid, mais un étrange frisson d’angoisse.
13309 Je hâtai le pas, inquiet d’être seul dans ce bois, apeuré sans raison, stupidement, par la profonde solitude. Tout à coup, il me sembla que j’étais suivi, qu’on marchait sur mes talons, tout près, à me toucher.
13310 Je me retournai brusquement. J’étais seul.
13311 Je ne vis derrière moi que la droite et large allée, vide, haute, redoutablement vide ; et de l’autre côté elle s’étendait aussi à perte de vue, toute pareille, effrayante.
13312 Je fermai les yeux. Pourquoi ? Et je me mis à tourner sur un talon, très vite, comme une toupie. Je faillis tomber ; je rouvris les yeux ; les arbres dansaient ; la terre flottait ; je dus m’asseoir.
13313 Puis, ah ! je ne savais plus par où j’étais venu ! Bizarre idée ! Bizarre ! Bizarre idée ! Je ne savais plus du tout.
13314 Je partis par le côté qui se trouvait à ma droite, et je revins dans l’avenue qui m’avait amené au milieu de la forêt.
13315 3 juin. — La nuit a été horrible. Je vais m’absenter pendant quelques semaines. Un petit voyage, sans doute, me remettra.
13316 2 juillet. — Je rentre. Je suis guéri. J’ai fait d’ailleurs une excursion charmante. J’ai visité le mont Saint-Michel que je ne connaissais pas.
13317 Quelle vision, quand on arrive, comme moi, à Avranches, vers la fin du jour ! La ville est sur une colline ; et on me conduisit dans le jardin public, au bout de la cité. Je poussai un cri d’étonnement.
13318 Une baie démesurée s’étendait devant moi, à perte de vue, entre deux côtes écartées se perdant au loin dans les brumes ; et au milieu de cette immense baie jaune, sous un ciel d’or et de clarté, s’élevait sombre et pointu un mont étrange, au milieu des sables. Le soleil venait de disparaître, et sur l’horizon encore flamboyant se dessinait le profil de ce fantastique rocher qui porte sur son sommet un fantastique monument.
13319 Dès l’aurore, j’allai vers lui. La mer était basse, comme la veille au soir, et je regardais se dresser devant moi, à mesure que j’approchais d’elle, la surprenante abbaye.
13320 Après plusieurs heures de marche, j’atteignis l’énorme bloc de pierres qui porte la petite cité dominée par la grande église. Ayant gravi la rue étroite et rapide, j’entrai dans la plus admirable demeure gothique construite pour Dieu sur la terre, vaste comme une ville, pleine de salles basses écrasées sous des voûtes et de hautes galeries que soutiennent de frêles colonnes.
13321 J’entrai dans ce gigantesque bijou de granit, aussi léger qu’une dentelle, couvert de tours, de sveltes clochetons, où montent des escaliers tordus, et qui lancent dans le ciel bleu des jours, dans le ciel noir des nuits, leurs têtes bizarres hérissées de chimères, de diables, de bêtes fantastiques, de fleurs monstrueuses, et reliés l’un à l’autre par de fines arches ouvragées.
13322 Quand je fus sur le sommet, je dis au moine qui m’accompagnait : « Mon père, comme vous devez être bien ici ! »
13323 Il répondit : « Il y a beaucoup de vent, Monsieur » ; et nous nous mîmes à causer en regardant monter la mer, qui courait sur le sable et le couvrait d’une cuirasse d’acier.
13324 Et le moine me conta des histoires, toutes les vieilles histoires de ce lieu, des légendes, toujours des légendes.
13325 Une d’elles me frappa beaucoup. Les gens du pays, ceux du mont, prétendent qu’on entend parler la nuit dans les sables, puis qu’on entend bêler deux chèvres, l’une avec une voix forte, l’autre avec une voix faible. Les incrédules affirment que ce sont les cris des oiseaux de mer, qui ressemblent tantôt à des bêlements, et tantôt à des plaintes humaines ; mais les pêcheurs attardés jurent avoir rencontré rôdant sur les dunes, entre deux marées, autour de la petite ville jetée ainsi loin du monde, un vieux berger, dont on ne voit jamais la tête couverte de son manteau, et qui conduit, en marchant devant eux, un bouc à figure d’homme et une chèvre à figure de femme, tous deux avec de longs cheveux blancs et parlant sans cesse, se querellant dans une langue inconnue, puis cessant soudain de crier pour bêler de toute leur force.
13326 Je dis au moine : « Y croyez-vous ? »
13327 Il murmura : « Je ne sais pas. »
13328 Je repris : « S’il existait sur la terre d’autres êtres que nous, comment ne les connaîtrions-nous point depuis longtemps : comment ne les auriez-vous pas vus, vous ? comment ne les aurais-je pas vus, moi ? »
13329 Il répondit : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent, qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises, et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, — l’avez-vous vu, et pouvez-vous le voir ? Il existe, pourtant. »
13330 Je me tus devant ce simple raisonnement. Cet homme était un sage ou peut-être un sot. Je ne l’aurais pu affirmer au juste ; mais je me tus. Ce qu’il disait là, je l’avais pensé souvent.
13331 3 juillet. — J’ai mal dormi ; certes, il y a ici une influence fiévreuse, car mon cocher souffre du même mal que moi. En rentrant hier, j’avais remarqué sa pâleur singulière. Je lui demandai :
13332 — Qu’est-ce que vous avez, Jean ?
13333 — J’ai que je ne peux plus me reposer, Monsieur, ce sont mes nuits qui mangent mes jours. Depuis le départ de Monsieur, cela me tient comme un sort.
13334 Les autres domestiques vont bien cependant, mais j’ai grand peur d’être repris, moi.
13335 4 juillet. — Décidément, je suis repris. Mes cauchemars anciens reviennent.
13336 Cette nuit, j’ai senti quelqu’un accroupi sur moi, et qui, sa bouche sur la mienne, buvait ma vie entre mes lèvres. Oui, il la puisait dans ma gorge, comme aurait fait une sangsue.
13337 Puis il s’est levé, repu, et moi je me suis réveillé, tellement meurtri, brisé, anéanti, que je ne pouvais plus remuer. Si cela continue encore quelques jours, je repartirai certainement.
13338 5 juillet. — Ai-je perdu la raison ? Ce qui s’est passé, ce que j’ai vu la nuit dernière est tellement étrange, que ma tête s’égare quand j’y songe !
13339 Comme je le fais maintenant chaque soir j’avais fermé ma porte à clef ; puis, ayant soif, je bus un demi-verre d’eau, et je remarquai par hasard que ma carafe était pleine jusqu’au bouchon de cristal.
13340 Je me couchai ensuite et je tombai dans un de mes sommeils épouvantables, dont je fus tiré au bout de deux heures environ par une secousse plus affreuse encore.
13341 Figurez-vous un homme qui dort, qu’on assassine, et qui se réveille avec un couteau dans le poumon, et qui râle, couvert de sang, et qui ne peut plus respirer, et qui va mourir, et qui ne comprend pas — voilà.
13342 Ayant enfin reconquis ma raison, j’eus soif de nouveau ; j’allumai une bougie et j’allai vers la table où était posée ma carafe. Je la soulevai en la penchant sur mon verre ; rien ne coula. — Elle était vide ! Elle était vide complètement !
13343 D’abord, je n’y compris rien ; puis, tout à coup, je ressentis une émotion si terrible, que je dus m’asseoir, ou plutôt, que je tombai sur une chaise ! puis, je me redressai d’un saut pour regarder autour de moi ! puis je me rassis, éperdu d’étonnement et de peur, devant le cristal transparent !
13344 Je le contemplais avec des yeux fixes, cherchant à deviner. Mes mains tremblaient ! On avait donc bu cette eau ? Qui ? Moi ? moi, sans doute ? Ce ne pouvait être que moi ?
13345 Alors, j’étais somnambule, je vivais, sans le savoir, de cette double vie mystérieuse qui fait douter s’il y a deux êtres en nous, ou si un être étranger, inconnaissable et invisible, anime, par moments, quand notre âme est engourdie, notre corps captif qui obéit à cet autre, comme à nous-mêmes, plus qu’à nous-mêmes.
13346 Ah ! qui comprendra mon angoisse abominable ?
13347 Qui comprendra l’émotion d’un homme, sain d’esprit, bien éveillé, plein de raison et qui regarde épouvanté, à travers le verre d’une carafe, un peu d’eau disparue pendant qu’il a dormi !
13348 Et je restai là jusqu’au jour, sans oser regagner mon lit.
13349 6 juillet. — Je deviens fou. On a encore bu toute ma carafe cette nuit ; — ou plutôt, je l’ai bue !
13350 Mais, est-ce moi ? Est-ce moi ? Qui serait-ce ? Qui ? Oh ! mon Dieu ! Je deviens fou ? Qui me sauvera ?
13351 10 juillet. — Je viens de faire des épreuves surprenantes.
13352 Décidément, je suis fou ! Et pourtant !
13353 Le 6 juillet, avant de me coucher, j’ai placé sur ma table du vin, du lait, de l’eau, du pain et des fraises.
13354 On a bu — j’ai bu — toute l’eau, et un peu de lait. On n’a touché ni au vin, ni au pain, ni aux fraises.
13355 Le 7 juillet, j’ai renouvelé la même épreuve, qui a donné le même résultat.
13356 Le 8 juillet, j’ai supprimé l’eau et le lait. On n’a touché à rien.
13357 Le 9 juillet enfin, j’ai remis sur ma table l’eau et le lait seulement, en ayant soin d’envelopper les carafes en des linges de mousseline blanche et de ficeler les bouchons.
13358 Puis, j’ai frotté mes lèvres, ma barbe, mes mains avec de la mine de plomb, et je me suis couché.
13359 L’invincible sommeil m’a saisi, suivi bientôt de l’atroce réveil. Je n’avais point remué ; mes draps eux-mêmes ne portaient pas de taches.
13360 Je m’élançai vers ma table. Les linges enfermant les bouteilles étaient demeurés immaculés.
13361 Je déliai les cordons, en palpitant de crainte. On avait bu toute l’eau ! on avait bu tout le lait ! Ah ! mon Dieu !…
13362 Je vais partir tout à l’heure pour Paris.
13363 12 juillet. — Paris. J’avais donc perdu la tête les jours derniers !
13364 J’ai dû être le jouet de mon imagination énervée, à moins que je ne sois vraiment somnambule, ou que j’aie subi une de ces influences constatées, mais inexplicables jusqu’ici, qu’on appelle suggestions.
13365 En tout cas, mon affolement touchait à la démence, et vingt-quatre heures de Paris ont suffi pour me remettre d’aplomb.
13366 Hier, après des courses et des visites, qui m’ont fait passer dans l’âme de l’air nouveau et vivifiant, j’ai fini ma soirée au Théâtre-Français.
13367 On y jouait une pièce d’Alexandre Dumas fils ; et cet esprit alerte et puissant a achevé de me guérir. Certes, la solitude est dangereuse pour les intelligences qui travaillent.
13368 Il nous faut, autour de nous, des hommes qui pensent et qui parlent. Quand nous sommes seuls longtemps, nous peuplons le vide de fantômes.
13369 Je suis rentré à l’hôtel très gai, par les boulevards. Au coudoiement de la foule, je songeais, non sans ironie, à mes terreurs, à mes suppositions de l’autre semaine, car j’ai cru, oui, j’ai cru qu’un être invisible habitait sous mon toit.
13370 Comme notre tête est faible et s’effare, et s’égare vite, dès qu’un petit fait incompréhensible nous frappe !
13371 Au lieu de conclure par ces simples mots : « Je ne comprends pas parce que la cause m’échappe », nous imaginons aussitôt des mystères effrayants et des puissances surnaturelles.
13372 14 juillet. — Fête de la République. Je me suis promené par les rues. Les pétards et les drapeaux m’amusaient comme un enfant.
13373 C’est pourtant fort bête d’être joyeux, à date fixe, par décret du gouvernement. Le peuple est un troupeau imbécile, tantôt stupidement patient et tantôt férocement révolté.
13374 On lui dit : « Amuse-toi. » Il s’amuse. On lui dit : « Va te battre avec le voisin. » Il va se battre. On lui dit : « Vote pour l’Empereur. » Il vote pour l’Empereur.
13375 Puis, on lui dit : « Vote pour la République. » Et il vote pour la République.
13376 Ceux qui le dirigent sont aussi sots ; mais au lieu d’obéir à des hommes, ils obéissent à des principes, lesquels ne peuvent être que niais, stériles et faux, par cela même qu’ils sont des principes, c’est-à-dire des idées réputées certaines et immuables, en ce monde où l’on n’est sûr de rien, puisque la lumière est une illusion, puisque le bruit est une illusion.
13377 16 juillet. — J’ai vu hier des choses qui m’ont beaucoup troublé.
13378 Je dînais chez ma cousine, Mme Sablé, dont le mari commande le 76e chasseurs à Limoges.
13379 Je me trouvais chez elle avec deux jeunes femmes, dont l’une a épousé un médecin, le docteur Parent, qui s’occupe beaucoup des maladies nerveuses et des manifestations extraordinaires auxquelles donnent lieu en ce moment les expériences sur l’hypnotisme et la suggestion.
13380 Il nous raconta longtemps les résultats prodigieux obtenus par des savants anglais et par les médecins de l’école de Nancy.
13381 Les faits qu’il avança me parurent tellement bizarres, que je me déclarai tout à fait incrédule.
13382 « Nous sommes, affirmait-il, sur le point de découvrir un des plus importants secrets de la nature, je veux dire, un de ses plus importants secrets sur cette terre ; car elle en a certes d’autrement importants, là-bas, dans les étoiles.
13383 Depuis que l’homme pense, depuis qu’il sait dire et écrire sa pensée, il se sent frôlé par un mystère impénétrable pour ses sens grossiers et imparfaits, et il tâche de suppléer, par l’effort de son intelligence, à l’impuissance de ses organes.
13384 Quand cette intelligence demeurait encore à l’état rudimentaire, cette hantise des phénomènes invisibles a pris des formes banalement effrayantes.
13385 De là sont nées les croyances populaires au surnaturel, les légendes des esprits rôdeurs, des fées, des gnomes, des revenants, je dirai même la légende de Dieu, car nos conceptions de l’ouvrier-créateur, de quelque religion qu’elles nous viennent, sont bien les inventions les plus médiocres, les plus stupides, les plus inacceptables sorties du cerveau apeuré des créatures.
13386 Rien de plus vrai que cette parole de Voltaire : « Dieu a fait l’homme à son image, mais l’homme le lui a bien rendu. »
13387 « Mais, depuis un peu plus d’un siècle, on semble pressentir quelque chose de nouveau.
13388 Mesmer et quelques autres nous ont mis sur une voie inattendue, et nous sommes arrivés vraiment, depuis quatre ou cinq ans surtout, à des résultats surprenants. »
13389 Ma cousine, très incrédule aussi, souriait. Le docteur Parent lui dit : — Voulez-vous que j’essaie de vous endormir, Madame ?
13390 — Oui, je veux bien.
13391 Elle s’assit dans un fauteuil et il commença à la regarder fixement en la fascinant.
13392 Moi, je me sentis soudain un peu troublé, le cœur battant, la gorge serrée. Je voyais les yeux de Mme Sablé s’alourdir, sa bouche se crisper, sa poitrine haleter.
13393 Au bout de dix minutes, elle dormait.
13394 — Mettez-vous derrière elle, dit le médecin.
13395 Et je m’assis derrière elle. Il lui plaça entre les mains une carte de visite en lui disant : « Ceci est un miroir ; que voyez-vous dedans ? »
13396 Elle répondit :
13397 — Je vois mon cousin.
13398 — Que fait-il ?
13399 — Il se tord la moustache.
13400 — Et maintenant ?
13401 — Il tire de sa poche une photographie.
13402 — Quelle est cette photographie ?
13403 — La sienne.
13404 C’était vrai ! Et cette photographie venait de m’être livrée, le soir même, à l’hôtel.
13405 — Comment est-il sur ce portrait ?
13406 — Il se tient debout avec son chapeau à la main.
13407 Donc elle voyait dans cette carte, dans ce carton blanc, comme elle eût vu dans une glace.
13408 Les jeunes femmes, épouvantées, disaient : « Assez ! Assez ! Assez ! »
13409 Mais le docteur ordonna : « Vous vous lèverez demain à huit heures ; puis vous irez trouver à son hôtel votre cousin, et vous le supplierez de vous prêter cinq mille francs que votre mari vous demande et qu’il vous réclamera à son prochain voyage. »
13410 Puis il la réveilla.
13411 En rentrant à l’hôtel, je songeais à cette curieuse séance et des doutes m’assaillirent, non point sur l’absolue, sur l’insoupçonnable bonne foi de ma cousine, que je connaissais comme une sœur, depuis l’enfance, mais sur une supercherie possible du docteur.
13412 Ne dissimulait-il pas dans sa main une glace qu’il montrait à la jeune femme endormie, en même temps que sa carte de visite ? Les prestidigitateurs de profession font des choses autrement singulières.
13413 Je rentrai donc et je me couchai.
13414 Or, ce matin, vers huit heures et demie, je fus réveillé par mon valet de chambre, qui me dit :
13415 — C’est Mme Sablé qui demande à parler à Monsieur tout de suite.
13416 Je m’habillai à la hâte et je la reçus.
13417 Elle s’assit fort troublée, les yeux baissés, et, sans lever son voile, elle me dit :
13418 — Mon cher cousin, j’ai un gros service à vous demander.
13419 — Lequel, ma cousine ?
13420 — Cela me gêne beaucoup de vous le dire, et pourtant, il le faut. J’ai besoin, absolument besoin, de cinq mille francs.
13421 — Allons donc, vous ?
13422 — Oui, moi, ou plutôt mon mari, qui me charge de les trouver.
13423 J’étais tellement stupéfait, que je balbutiais mes réponses.
13425 Mais, en la regardant avec attention, tous mes doutes se dissipèrent. Elle tremblait d’angoisse, tant cette démarche lui était douloureuse, et je compris qu’elle avait la gorge pleine de sanglots.
13426 Je la savais fort riche et je repris :
13427 — Comment ! votre mari n’a pas cinq mille francs à sa disposition ! Voyons, réfléchissez. Êtes-vous sûre qu’il vous a chargée de me les demander ?
13428 Elle hésita quelques secondes comme si elle eût fait un grand effort pour chercher dans son souvenir, puis elle répondit :
13429 — Oui…, oui… j’en suis sûre.
13430 — Il vous a écrit ?
13431 Elle hésita encore, réfléchissant. Je devinai le travail torturant de sa pensée. Elle ne savait pas. Elle savait seulement qu’elle devait m’emprunter cinq mille francs pour son mari. Donc elle osa mentir.
13432 — Oui, il m’a écrit.
13433 — Quand donc ? Vous ne m’avez parlé de rien, hier.
13434 — J’ai reçu sa lettre ce matin.
13435 — Pouvez-vous me la montrer ?
13436 — Non… non… non… elle contenait des choses intimes… trop personnelles… je l’ai… je l’ai brûlée.
13437 — Alors, c’est que votre mari fait des dettes.
13438 Elle hésita encore, puis murmura :
13439 — Je ne sais pas.
13440 Je déclarai brusquement :
13441 — C’est que je ne puis disposer de cinq mille francs en ce moment, ma chère cousine.
13442 Elle poussa une sorte de cri de souffrance.
13443 — Oh ! oh ! je vous en prie, je vous en prie, trouvez-les…
13444 Elle s’exaltait, joignait les mains comme si elle m’eût prié ! J’entendais sa voix changer de ton ; elle pleurait et bégayait, harcelée, dominée par l’ordre irrésistible qu’elle avait reçu.
13445 — Oh ! oh ! je vous en supplie… si vous saviez comme je souffre… il me les faut aujourd’hui.
13446 J’eus pitié d’elle.
13447 — Vous les aurez tantôt, je vous le jure.
13448 Elle s’écria :
13449 — Oh ! merci ! merci ! Que vous êtes bon.
13450 Je repris : — Vous rappelez-vous ce qui s’est passé hier soir chez vous ?
13451 — Oui.
13452 — Vous rappelez-vous que le docteur Parent vous a endormie ?
13453 — Oui.
13454 — Eh ! bien, il vous a ordonné de venir m’emprunter ce matin cinq mille francs, et vous obéissez en ce moment à cette suggestion.
13455 Elle réfléchit quelques secondes et répondit :
13456 — Puisque c’est mon mari qui les demande.
13457 Pendant une heure, j’essayai de la convaincre, mais je n’y pus parvenir.
13458 Quand elle fut partie, je courus chez le docteur. Il allait sortir ; et il m’écouta en souriant. Puis il dit :
13459 — Croyez-vous maintenant ?
13460 — Oui, il le faut bien.
13461 — Allons chez votre parente.
13462 Elle sommeillait déjà sur une chaise longue, accablée de fatigue.
13463 Le médecin lui prit le pouls, la regarda quelque temps, une main levée vers ses yeux qu’elle ferma peu à peu sous l’effort insoutenable de cette puissance magnétique.
13464 Quand elle fut endormie :
13465 — Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela, vous ne comprendrez pas.
13466 Puis il la réveilla. Je tirai de ma poche un portefeuille :
13467 — Voici, ma chère cousine, ce que vous m’avez demandé ce matin.
13468 Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et faillit, à la fin, se fâcher.
13469 Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a bouleversé.
13470 19 juillet. — Beaucoup de personnes à qui j’ai raconté cette aventure se sont moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ?
13471 21 juillet. — J’ai été dîner à Bougival, puis j’ai passé la soirée au bal des canotiers. Décidément, tout dépend des lieux et des milieux.
13472 Croire au surnaturel dans l’île de la Grenouillère, serait le comble de la folie… mais au sommet du mont Saint-Michel ?… mais dans les Indes ?
13473 Nous subissons effroyablement l’influence de ce qui nous entoure. Je rentrerai chez moi la semaine prochaine.
13474 30 juillet. — Je suis revenu dans ma maison depuis hier. Tout va bien.
13475 2 août. — Rien de nouveau ; il fait un temps superbe. Je passe mes journées à regarder couler la Seine.
13476 4 août. — Querelles parmi mes domestiques. Ils prétendent qu’on casse les verres, la nuit, dans les armoires.
13477 Le valet de chambre accuse la cuisinière, qui accuse la lingère, qui accuse les deux autres. Quel est le coupable ? Bien fin qui le dirait !
13478 6 août. — Cette fois, je ne suis pas fou. J’ai vu… j’ai vu… j’ai vu !… Je ne puis plus douter… j’ai vu !… J’ai encore froid jusque dans les ongles… j’ai encore peur jusque dans les moelles… j’ai vu !…
13479 Je me promenais à deux heures, en plein soleil, dans mon parterre de rosiers… dans l’allée des rosiers d’automne qui commencent à fleurir.
13480 Comme je m’arrêtais à regarder un géant des batailles, qui portait trois fleurs magnifiques, je vis, je vis distinctement, tout près de moi, la tige d’une de ces roses se plier, comme si une main invisible l’eût tordue, puis se casser comme si cette main l’eût cueillie !
13481 Puis la fleur s’éleva, suivant la courbe qu’aurait décrite un bras en la portant vers une bouche, et elle resta suspendue dans l’air transparent, toute seule, immobile, effrayante tache rouge à trois pas de mes yeux.
13482 Éperdu, je me jetai sur elle pour la saisir !
13483 Je ne trouvai rien ; elle avait disparu. Alors je fus pris d’une colère furieuse contre moi-même ; car il n’est pas permis à un homme raisonnable et sérieux d’avoir de pareilles hallucinations.
13484 Mais était-ce bien une hallucination ? Je me retournai pour chercher la tige, et je la retrouvai immédiatement sur l’arbuste, fraîchement brisée, entre les deux autres roses demeurées à la branche.
13485 Alors, je rentrai chez moi l’âme bouleversée ; car je suis certain, maintenant, certain comme de l’alternance des jours et des nuits, qu’il existe près de moi un être invisible, qui se nourrit de lait et d’eau, qui peut toucher aux choses, les prendre et les changer de place, doué par conséquent d’une nature matérielle, bien qu’imperceptible pour nos sens, et qui habite comme moi, sous mon toit…
13486 7 août. — J’ai dormi tranquille. Il a bu l’eau de ma carafe, mais n’a point troublé mon sommeil.
13487 Je me demande si je suis fou.
13488 En me promenant, tantôt au grand soleil, le long de la rivière, des doutes me sont venus sur ma raison, non point des doutes vagues comme j’en avais jusqu’ici, mais des doutes précis, absolus.
13489 J’ai vu des fous ; j’en ai connu qui restaient intelligents, lucides, clairvoyants même sur toutes les choses de la vie, sauf sur un point.
13490 Ils parlaient de tout avec clarté, avec souplesse, avec profondeur, et soudain leur pensée touchant l’écueil de leur folie, s’y déchirait en pièces, s’éparpillait et sombrait dans cet océan effrayant et furieux, plein de vagues bondissantes, de brouillards, de bourrasques, qu’on nomme « la démence ».
13491 Certes, je me croirais fou, absolument fou, si je n’étais conscient, si je ne connaissais parfaitement mon état, si je ne le sondais en l’analysant avec une complète lucidité.
13492 Je ne serais donc, en somme, qu’un halluciné raisonnant. Un trouble inconnu se serait produit dans mon cerveau, un de ces troubles qu’essayent de noter et de préciser aujourd’hui les physiologistes ; et ce trouble aurait déterminé dans mon esprit, dans l’ordre et la logique de mes idées, une crevasse profonde.
13493 Des phénomènes semblables ont lieu dans le rêve qui nous promène à travers les fantasmagories les plus invraisemblables, sans que nous en soyons surpris, parce que l’appareil vérificateur, parce que le sens du contrôle est endormi ; tandis que la faculté imaginative veille et travaille.
13494 Ne se peut-il pas qu’une des imperceptibles touches du clavier cérébral se trouve paralysée chez moi ?
13495 Des hommes, à la suite d’accidents, perdent la mémoire des noms propres ou des verbes ou des chiffres, ou seulement des dates.
13496 Les localisations de toutes les parcelles de la pensée sont aujourd’hui prouvées.
13497 Or, quoi d’étonnant à ce que ma faculté de contrôler l’irréalité de certaines hallucinations, se trouve engourdie chez moi en ce moment !
13498 Je songeais à tout cela en suivant le bord de l’eau. Le soleil couvrait de clarté la rivière, faisait la terre délicieuse, emplissait mon regard d’amour pour la vie, pour les hirondelles, dont l’agilité est une joie de mes yeux, pour les herbes de la rive dont le frémissement est un bonheur de mes oreilles.
13499 Peu à peu, cependant un malaise inexplicable me pénétrait. Une force, me semblait-il, une force occulte m’engourdissait, m’arrêtait, m’empêchait d’aller plus loin, me rappelait en arrière.
13500 J’éprouvais ce besoin douloureux de rentrer qui vous oppresse, quand on a laissé au logis un malade aimé, et que le pressentiment vous saisit d’une aggravation de son mal.
13501 Donc, je revins malgré moi, sûr que j’allais trouver, dans ma maison, une mauvaise nouvelle, une lettre ou une dépêche.
13502 Il n’y avait rien ; et je demeurai plus surpris et plus inquiet que si j’avais eu de nouveau quelque vision fantastique.
13503 8 août. — J’ai passé hier une affreuse soirée.
13504 Il ne se manifeste plus, mais je le sens près de moi, m’épiant, me regardant, me pénétrant, me dominant et plus redoutable, en se cachant ainsi, que s’il signalait par des phénomènes surnaturels sa présence invisible et constante.
13505 J’ai dormi, pourtant.
13506 9 août. — Rien, mais j’ai peur.
13507 10 août. — Rien ; qu’arrivera-t-il demain ?
13508 11 août. — Toujours rien ; je ne puis plus rester chez moi avec cette crainte et cette pensée entrées en mon âme ; je vais partir.
13509 12 août, 10 heures du soir. — Tout le jour j’ai voulu m’en aller ; je n’ai pas pu.
13510 J’ai voulu accomplir cet acte de liberté si facile, si simple, — sortir — monter dans ma voiture pour gagner Rouen — je n’ai pas pu. Pourquoi ?
13511 13 août. — Quand on est atteint par certaines maladies, tous les ressorts de l’être physique semblent brisés, toutes les énergies anéanties, tous les muscles relâchés, les os devenus mous comme la chair et la chair liquide comme de l’eau.
13512 J’éprouve cela dans mon être moral d’une façon étrange et désolante.
13513 Je n’ai plus aucune force, aucun courage, aucune domination sur moi, aucun pouvoir même de mettre en mouvement ma volonté.
13514 Je ne peux plus vouloir ; mais quelqu’un veut pour moi ; et j’obéis.
13515 14 août. — Je suis perdu ! Quelqu’un possède mon âme et la gouverne ! quelqu’un ordonne tous mes actes, tous mes mouvements, toutes mes pensées.
13516 Je ne suis plus rien en moi, rien qu’un spectateur esclave et terrifié de toutes les choses que j’accomplis.
13517 Je désire sortir. Je ne peux pas. Il ne veut pas ; et je reste, éperdu, tremblant, dans le fauteuil où il me tient assis.
13518 Je désire seulement me lever, me soulever, afin de me croire encore maître de moi.
13519 Je ne peux pas ! Je suis rivé à mon siège ; et mon siège adhère au sol, de telle sorte qu’aucune force ne nous soulèverait.
13520 Puis, tout d’un coup, il faut, il faut, il faut que j’aille au fond de mon jardin cueillir des fraises et les manger. Et j’y vais. Je cueille des fraises et je les mange !
13521 Oh ! mon Dieu ! Mon Dieu ! Mon Dieu ! Est-il un Dieu ? S’il en est un, délivrez-moi, sauvez-moi ! secourez-moi ! Pardon ! Pitié ! Grâce ! Sauvez-moi ! Oh ! quelle souffrance ! quelle torture ! quelle horreur !
13522 15 août. — Certes, voilà comment était possédée et dominée ma pauvre cousine, quand elle est venue m’emprunter cinq mille francs.
13523 Elle subissait un vouloir étranger entré en elle, comme une autre âme, comme une autre âme parasite et dominatrice. Est-ce que le monde va finir ?
13524 Mais celui qui me gouverne, quel est-il, cet invisible ? cet inconnaissable, ce rôdeur d’une race surnaturelle ?
13525 Donc les Invisibles existent ! Alors, comment depuis l’origine du monde ne se sont-ils pas encore manifestés d’une façon précise comme ils le font pour moi ?
13526 Je n’ai jamais rien lu qui ressemble à ce qui s’est passé dans ma demeure. Oh ! si je pouvais la quitter, si je pouvais m’en aller, fuir et ne pas revenir. Je serais sauvé, mais je ne peux pas.
13527 16 août. — J’ai pu m’échapper aujourd’hui pendant deux heures, comme un prisonnier qui trouve ouverte, par hasard, la porte de son cachot. J’ai senti que j’étais libre tout à coup et qu’il était loin.
13528 J’ai ordonné d’atteler bien vite et j’ai gagné Rouen. Oh ! quelle joie de pouvoir dire à un homme qui obéit : « Allez à Rouen ! »
13529 Je me suis fait arrêter devant la bibliothèque et j’ai prié qu’on me prêtât le grand traité du docteur Hermann Herestauss sur les habitants inconnus du monde antique et moderne.
13530 Puis, au moment de remonter dans mon coupé, j’ai voulu dire : « À la gare ! » et j’ai crié, — je n’ai pas dit, j’ai crié — d’une voix si forte que les passants se sont retournés : « À la maison », et je suis tombé, affolé d’angoisse, sur le coussin de ma voiture. Il m’avait retrouvé et repris.
13531 17 août. — Ah ! Quelle nuit ! quelle nuit ! Et pourtant il me semble que je devrais me réjouir. Jusqu’à une heure du matin, j’ai lu !
13532 Hermann Herestauss, docteur en philosophie et en théogonie, a écrit l’histoire et les manifestations de tous les êtres invisibles rôdant autour de l’homme ou rêvés par lui.
13533 Il décrit leurs origines, leur domaine, leur puissance. Mais aucun d’eux ne ressemble à celui qui me hante.
13534 On dirait que l’homme, depuis qu’il pense, a pressenti et redouté un être nouveau, plus fort que lui, son successeur en ce monde, et que, le sentant proche et ne pouvant prévoir la nature de ce maître, il a créé, dans sa terreur, tout le peuple fantastique des êtres occultes, fantômes vagues nés de la peur.
13535 Donc, ayant lu jusqu’à une heure du matin, j’ai été m’asseoir ensuite auprès de ma fenêtre ouverte pour rafraîchir mon front et ma pensée au vent calme de l’obscurité.
13536 Il faisait bon, il faisait tiède ! Comme j’aurais aimé cette nuit-là autrefois !
13537 Pas de lune. Les étoiles avaient au fond du ciel noir des scintillements frémissants. Qui habite ces mondes ? Quelles formes, quels vivants, quels animaux, quelles plantes sont là-bas ?
13538 Ceux qui pensent dans ces univers lointains, que savent-ils plus que nous ? Que peuvent-ils plus que nous ? Que voient-ils que nous ne connaissons point ?
13539 Un d’eux, un jour ou l’autre, traversant l’espace, n’apparaîtra-t-il pas sur notre terre pour la conquérir, comme les Normands jadis traversaient la mer pour asservir des peuples plus faibles ?
13540 Nous sommes si infirmes, si désarmés, si ignorants, si petits, nous autres, sur ce grain de boue qui tourne délayé dans une goutte d’eau.
13541 Je m’assoupis en rêvant ainsi au vent frais du soir.
13542 Or, ayant dormi environ quarante minutes, je rouvris les yeux sans faire un mouvement, réveillé par je ne sais quelle émotion confuse et bizarre.
13543 Je ne vis rien d’abord, puis, tout à coup, il me sembla qu’une page du livre resté ouvert sur ma table venait de tourner toute seule. Aucun souffle d’air n’était entré par ma fenêtre.
13544 Je fus surpris et j’attendis. Au bout de quatre minutes environ, je vis, je vis, oui, je vis de mes yeux une autre page se soulever et se rabattre sur la précédente, comme si un doigt l’eût feuilletée.
13545 Mon fauteuil était vide, semblait vide ; mais je compris qu’il était là, lui, assis à ma place, et qu’il lisait.
13546 D’un bond furieux, d’un bond de bête révoltée, qui va éventrer son dompteur, je traversai ma chambre pour le saisir, pour l’étreindre, pour le tuer !…
13547 Mais mon siège, avant que je l’eusse atteint, se renversa comme si on eût fui devant moi… ma table oscilla, ma lampe tomba et s’éteignit, et ma fenêtre se ferma comme si un malfaiteur surpris se fût élancé dans la nuit, en prenant à pleines mains les battants.
13548 Donc, il s’était sauvé ; il avait eu peur, peur de moi, lui !
13549 Alors… alors… demain… ou après… ou un jour quelconque… je pourrai donc le tenir sous mes poings, et l’écraser contre le sol !
13550 Est-ce que les chiens, quelquefois, ne mordent point et n’étranglent pas leurs maîtres ?
13551 18 août. — J’ai songé toute la journée. Oh ! oui, je vais lui obéir, suivre ses impulsions, accomplir toutes ses volontés, me faire humble, soumis, lâche. Il est le plus fort. Mais une heure viendra…
13552 19 août. — Je sais… je sais… je sais tout !
13553 Je viens de lire ceci dans la Revue du Monde scientifique : « Une nouvelle assez curieuse nous arrive de Rio de Janeiro. Une folie, une épidémie de folie, comparable aux démences contagieuses qui atteignirent les peuples d’Europe au Moyen Âge, sévit en ce moment dans la province de San-Paulo.
13554 Les habitants éperdus quittent leurs maisons, désertent leurs villages, abandonnent leurs cultures, se disant poursuivis, possédés, gouvernés comme un bétail humain par des êtres invisibles bien que tangibles, des sortes de vampires qui se nourrissent de leur vie, pendant leur sommeil, et qui boivent en outre de l’eau et du lait sans paraître toucher à aucun autre aliment.
13556 Ah ! Ah ! je me rappelle, je me rappelle le beau trois-mâts brésilien qui passa sous mes fenêtres en remontant la Seine, le 8 mai dernier !
13557 Je le trouvai si joli, si blanc, si gai ! L’Être était dessus, venant de là-bas, où sa race est née ! Et il m’a vu ! Il a vu ma demeure blanche aussi ; et il a sauté du navire sur la rive. Oh ! mon Dieu !
13558 À présent, je sais, je devine. Le règne de l’homme est fini.
13559 Il est venu, Celui que redoutaient les premières terreurs des peuples naïfs, Celui qu’exorcisaient les prêtres inquiets, que les sorciers évoquaient par les nuits sombres, sans le voir apparaître encore, à qui les pressentiments des maîtres passagers du monde prêtèrent toutes les formes monstrueuses ou gracieuses des gnomes, des esprits, des génies, des fées, des farfadets.
13560 Après les grossières conceptions de l’épouvante primitive, des hommes plus perspicaces l’ont pressenti plus clairement.
13561 Mesmer l’avait deviné, et les médecins, depuis dix ans déjà, ont découvert, d’une façon précise, la nature de sa puissance avant qu’il l’eût exercée lui-même.
13562 Ils ont joué avec cette arme du Seigneur nouveau, la domination d’un mystérieux vouloir sur l’âme humaine devenue esclave. Ils ont appelé cela magnétisme, hypnotisme, suggestion… que sais-je ?
13563 Je les ai vus s’amuser comme des enfants imprudents avec cette horrible puissance !
13564 Malheur à nous ! Malheur à l’homme ! Il est venu, le… le… comment se nomme-t-il… le… il me semble qu’il me crie son nom, et je ne l’entends pas… le… oui… il le crie…
13565 J’écoute… je ne peux pas… répète… le… Horla… J’ai entendu… le Horla… c’est lui… le Horla… il est venu !…
13566 Ah ! le vautour a mangé la colombe, le loup a mangé le mouton ; le lion a dévoré le buffle aux cornes aiguës ; l’homme a tué le lion avec la flèche, avec le glaive, avec la poudre ; mais le Horla va faire de l’homme ce que nous avons fait du cheval et du bœuf : sa chose, son serviteur et sa nourriture, par la seule puissance de sa volonté. Malheur à nous !
13567 Pourtant, l’animal, quelquefois, se révolte et tue celui qui l’a dompté… moi aussi je veux… je pourrai… mais il faut le connaître, le toucher, le voir !
13568 Les savants disent que l’œil de la bête, différent du nôtre, ne distingue point comme le nôtre… Et mon œil à moi ne peut distinguer le nouveau venu qui m’opprime.
13569 Pourquoi ? Oh ! je me rappelle à présent les paroles du moine du mont Saint-Michel : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, l’avez-vous vu et pouvez-vous le voir : il existe pourtant ! »
13570 Et je songeais encore : mon œil est si faible, si imparfait, qu’il ne distingue même point les corps durs, s’ils sont transparents comme le verre !…
13571 Qu’une glace sans tain barre mon chemin, il me jette dessus comme l’oiseau entré dans une chambre se casse la tête aux vitres. Mille choses en outre le trompent et l’égarent ?
13572 Quoi d’étonnant, alors, à ce qu’il ne sache point apercevoir un corps nouveau que la lumière traverse.
13573 Un être nouveau ! pourquoi pas ? Il devait venir assurément ! pourquoi serions-nous les derniers ! Nous ne le distinguons point, ainsi que tous les autres créés avant nous ?
13574 C’est que sa nature est plus parfaite, son corps plus fin et plus fini que le nôtre, que le nôtre si faible, si maladroitement conçu, encombré d’organes toujours fatigués, toujours forcés comme des ressorts trop complexes, que le nôtre, qui vit comme une plante et comme une bête, en se nourrissant péniblement d’air, d’herbe et de viande, machine animale en proie aux maladies, aux déformations, aux putréfactions, poussive, mal réglée, naïve et bizarre, ingénieusement mal faite, œuvre grossière et délicate, ébauche d’être qui pourrait devenir intelligent et superbe.
13575 Nous sommes quelques-uns, si peu sur ce monde, depuis l’huître jusqu’à l’homme. Pourquoi pas un de plus, une fois accomplie la période qui sépare les apparitions successives de toutes les espèces diverses ?
13576 Pourquoi pas un de plus ? Pourquoi pas aussi d’autres arbres aux fleurs immenses, éclatantes et parfumant des régions entières ?
13577 Pourquoi pas d’autres éléments que le feu, l’air, la terre et l’eau ? — Ils sont quatre, rien que quatre, ces pères nourriciers des êtres !
13578 Quelle pitié ! Pourquoi ne sont-ils pas quarante, quatre cents, quatre mille !
13579 Comme tout est pauvre, mesquin, misérable ! avarement donné, sèchement inventé, lourdement fait ! Ah ! l’éléphant, l’hippopotame, que de grâce ! Le chameau, que d’élégance !
13580 Mais direz-vous, le papillon ! une fleur qui vole ! J’en rêve un qui serait grand comme cent univers, avec des ailes dont je ne puis même exprimer la forme, la beauté, la couleur et le mouvement. Mais je le vois… il va d’étoile en étoile, les rafraîchissant et les embaumant au souffle harmonieux et léger de sa course !… Et les peuples de là-haut le regardent passer, extasiés et ravis !…
13581 Qu’ai-je donc ? C’est lui, lui, le Horla, qui me hante, qui me fait penser ces folies ! Il est en moi, il devient mon âme ; je le tuerai !
13582 19 août. — Je le tuerai. Je l’ai vu ! je me suis assis hier soir, à ma table ; et je fis semblant d’écrire avec une grande attention. Je savais bien qu’il viendrait rôder autour de moi, tout près, si près que je pourrais peut-être le toucher, le saisir ?
13583 Et alors !… alors, j’aurais la force des désespérés ; j’aurais mes mains, mes genoux, ma poitrine, mon front, mes dents pour l’étrangler, l’écraser, le mordre, le déchirer.
13584 Et je le guettais avec tous mes organes surexcités.
13585 J’avais allumé mes deux lampes et les huit bougies de ma cheminée, comme si j’eusse pu, dans cette clarté, le découvrir.
13586 En face de moi, mon lit, un vieux lit de chêne à colonnes ; à droite, ma cheminée ; à gauche, ma porte fermée avec soin, après l’avoir laissée longtemps ouverte, afin de l’attirer ; derrière moi, une très haute armoire à glace, qui me servait chaque jour pour me raser, pour m’habiller, et où j’avais coutume de me regarder, de la tête aux pieds, chaque fois que je passais devant.
13587 Donc, je faisais semblant d’écrire, pour le tromper, car il m’épiait lui aussi ; et soudain, je sentis, je fus certain qu’il lisait par-dessus mon épaule, qu’il était là, frôlant mon oreille.
13588 Je me dressai, les mains tendues, en me tournant si vite que je faillis tomber.
13589 Eh ! bien ?… on y voyait comme en plein jour, et je ne me vis pas dans ma glace !… Elle était vide, claire, profonde, pleine de lumière ! Mon image n’était pas dedans… et j’étais en face, moi !
13590 Je voyais le grand verre limpide du haut en bas. Et je regardais cela avec des yeux affolés ; et je n’osais plus avancer, je n’osais plus faire un mouvement, sentant bien pourtant qu’il était là, mais qu’il m’échapperait encore, lui dont le corps imperceptible avait dévoré mon reflet.
13591 Comme j’eus peur ! Puis voilà que tout à coup je commençai à m’apercevoir dans une brume, au fond du miroir, dans une brume comme à travers une nappe d’eau ; et il me semblait que cette eau glissait de gauche à droite, lentement, rendant plus précise mon image, de seconde en seconde. C’était comme la fin d’une éclipse.
13592 Ce qui me cachait ne paraissait point posséder de contours nettement arrêtés, mais une sorte de transparence opaque, s’éclaircissant peu à peu.
13593 Je pus enfin me distinguer complètement, ainsi que je le fais chaque jour en me regardant.
13594 Je l’avais vu ! L’épouvante m’en est restée, qui me fait encore frissonner.
13595 20 août. — Le tuer, comment ? puisque je ne peux l’atteindre ? Le poison ? mais il me verrait le mêler à l’eau ; et nos poisons, d’ailleurs, auraient-ils un effet sur son corps imperceptible ?
13596 Non… non… sans aucun doute… Alors ?… alors ?…
13597 21 août. — J’ai fait venir un serrurier de Rouen, et lui ai commandé pour ma chambre des persiennes de fer, comme en ont, à Paris, certains hôtels particuliers, au rez-de-chaussée, par crainte des voleurs.
13598 Il me fera, en outre, une porte pareille. Je me suis donné pour un poltron, mais je m’en moque !…
13599 10 septembre. — Rouen, hôtel continental. C’est fait… c’est fait… mais est-il mort ? J’ai l’âme bouleversée de ce que j’ai vu.
13600 Hier donc, le serrurier ayant posé ma persienne et ma porte de fer, j’ai laissé tout ouvert jusqu’à minuit, bien qu’il commençât à faire froid.
13601 Tout à coup, j’ai senti qu’il était là, et une joie, une joie folle m’a saisi.
13602 Je me suis levé lentement, et j’ai marché à droite, à gauche, longtemps pour qu’il ne devinât rien ; puis j’ai ôté mes bottines et mis mes savates avec négligence ; puis j’ai fermé ma persienne de fer, et revenant à pas tranquilles vers la porte, j’ai fermé la porte aussi à double tour.
13603 Retournant alors vers la fenêtre, je la fixai par un cadenas, dont je mis la clef dans ma poche.
13604 Tout à coup, je compris qu’il s’agitait autour de moi, qu’il avait peur à son tour, qu’il m’ordonnait de lui ouvrir.
13605 Je faillis céder ; je ne cédai pas, mais m’adossant à la porte, je l’entre-bâillai, tout juste assez pour passer, moi, à reculons ; et comme je suis très grand ma tête touchait au linteau.
13606 J’étais sûr qu’il n’avait pu s’échapper et je l’enfermai, tout seul, tout seul ! Quelle joie ! Je le tenais !
13607 Alors, je descendis, en courant ; je pris dans mon salon, sous ma chambre, mes deux lampes et je renversai toute l’huile sur le tapis, sur les meubles, partout ; puis j’y mis le feu, et je me sauvai, après avoir bien refermé, à double tour, la grande porte d’entrée.
13608 Et j’allai me cacher au fond de mon jardin, dans un massif de lauriers. Comme ce fut long ! comme ce fut long !
13610 Je regardais ma maison, et j’attendais. Comme ce fut long !
13611 Je croyais déjà que le feu s’était éteint tout seul, ou qu’il l’avait éteint, Lui, quand une des fenêtres d’en bas creva sous la poussée de l’incendie, et une flamme, une grande flamme rouge et jaune, longue, molle, caressante, monta le long du mur blanc et le baisa jusqu’au toit.
13612 Une lueur courut dans les arbres, dans les branches, dans les feuilles, et un frisson, un frisson de peur aussi !
13613 Les oiseaux se réveillaient ; un chien se mit à hurler ; il me sembla que le jour se levait !
13614 Deux autres fenêtres éclatèrent aussitôt, et je vis que tout le bas de ma demeure n’était plus qu’un effrayant brasier.
13615 Mais un cri, un cri horrible, suraigu, déchirant, un cri de femme passa dans la nuit, et deux mansardes s’ouvrirent !
13616 J’avais oublié mes domestiques ! Je vis leurs faces affolées, et leurs bras qui s’agitaient !…
13617 Alors, éperdu d’horreur, je me mis à courir vers le village en hurlant : « Au secours ! au secours ! au feu ! au feu ! » Je rencontrai des gens qui s’en venaient déjà et je retournai avec eux, pour voir !
13618 La maison, maintenant, n’était plus qu’un bûcher horrible et magnifique, un bûcher monstrueux, éclairant toute la terre, un bûcher où brûlaient des hommes, et où il brûlait aussi, Lui, Lui, mon prisonnier, l’Être nouveau, le nouveau maître, le Horla !
13619 Soudain le toit tout entier s’engloutit entre les murs, et un volcan de flammes jaillit jusqu’au ciel.
13620 Par toutes les fenêtres ouvertes sur la fournaise, je voyais la cuve de feu, et je pensais qu’il était là, dans ce four, mort…
13621 — Mort ? Peut-être ?… Son corps ? son corps que le jour traversait n’était-il pas indestructible par les moyens qui tuent les nôtres ?
13622 S’il n’était pas mort ?… seul peut-être le temps a prise sur l’Être Invisible et Redoutable.
13623 Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ?
13624 La destruction prématurée ? toute l’épouvante humaine vient d’elle !
13625 Après l’homme le Horla. — Après celui qui peut mourir tous les jours, à toutes les heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence !
13626 Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !…
13634 DOUBLE ASSASSINAT DANS LA RUE MORGUE — Edgar Poe
13635 Quelle chanson chantaient les sirènes ? quel nom Achille avait-il pris, quand il se cachait parmi les femmes ? – Questions embarrassantes, il est vrai, mais qui ne sont pas situées au-delà de toute conjecture.
13636 Sir Thomas Browne.
13638 Nous ne les apprécions que par leurs résultats. Ce que nous en savons, entre autres choses, c’est qu’elles sont pour celui qui les possède à un degré extraordinaire une source de jouissances des plus vives.
13639 De même que l’homme fort se réjouit dans son aptitude physique, se complaît dans les exercices qui provoquent les muscles à l’action, de même l’analyse prend sa gloire dans cette activité spirituelle dont la fonction est de débrouiller.
13640 Il tire du plaisir même des plus triviales occasions qui mettent ses talents en jeu.
13641 Il raffole des énigmes, des rébus, des hiéroglyphes ; il déploie dans chacune des solutions une puissance de perspicacité qui, dans l’opinion vulgaire, prend un caractère surnaturel.
13642 Les résultats, habilement déduits par l’âme même et l’essence de sa méthode, ont réellement tout l’air d’une intuition.
13643 Cette faculté de résolution tire peut-être une grande force de l’étude des mathématiques, et particulièrement de la très-haute branche de cette science, qui, fort improprement et simplement en raison de ses opérations rétrogrades, a été nommée l’analyse, comme si elle était l’analyse par excellence.
13644 Car, en somme, tout calcul n’est pas en soi une analyse. Un joueur d’échecs, par exemple, fait fort bien l’un sans l’autre.
13645 Il suit de là que le jeu d’échecs, dans ses effets sur la nature spirituelle, est fort mal apprécié.
13646 Je ne veux pas écrire ici un traité de l’analyse, mais simplement mettre en tête d’un récit passablement singulier, quelques observations jetées tout à fait à l’abandon et qui lui serviront de préface.
13647 Je prends donc cette occasion de proclamer que la haute puissance de la réflexion est bien plus activement et plus profitablement exploitée par le modeste jeu de dames que par toute la laborieuse futilité des échecs.
13648 Dans ce dernier jeu, où les pièces sont douées de mouvements divers et bizarres, et représentent des valeurs diverses et variées, la complexité est prise – erreur fort commune – pour de la profondeur.
13649 L’attention y est puissamment mise en jeu. Si elle se relâche d’un instant, on commet une erreur, d’où il résulte une perte ou une défaite.
13650 Comme les mouvements possibles sont, non-seulement variés, mais inégaux en puissance, les chances de pareilles erreurs sont très-multipliées ; et dans neuf cas sur dix, c’est le joueur le plus attentif qui gagne et non pas le plus habile.
13651 Dans les dames, au contraire, où le mouvement est simple dans son espèce et ne subit que peu de variations, les probabilités d’inadvertance sont beaucoup moindres, et l’attention n’étant pas absolument et entièrement accaparée, tous les avantages remportés par chacun des joueurs ne peuvent être remportés que par une perspicacité supérieure.
13652 Pour laisser là ces abstractions, supposons un jeu de dames où la totalité des pièces soit réduite à quatre dames, et où naturellement il n’y ait pas lieu de s’attendre à des étourderies.
13653 Il est évident qu’ici la victoire ne peut être décidée, – les deux parties étant absolument égales, – que par une tactique habile, résultat de quelque puissant effort de l’intellect.
13654 Privé des ressources ordinaires, l’analyste entre dans l’esprit de son adversaire, s’identifie avec lui, et souvent découvre d’un seul coup d’œil l’unique moyen – un moyen quelquefois absurdement simple – de l’attirer dans une faute ou de le précipiter dans un faux calcul.
13655 On a longtemps cité le whist pour son action sur la faculté du calcul ; et on a connu des hommes d’une haute intelligence qui semblaient y prendre un plaisir incompréhensible et dédaigner les échecs comme un jeu frivole.
13656 En effet, il n’y a aucun jeu analogue qui fasse plus travailler la faculté de l’analyse.
13657 Le meilleur joueur d’échecs de la chrétienté ne peut guère être autre chose que le meilleur joueur d’échecs ; mais la force au whist implique la puissance de réussir dans toutes les spéculations bien autrement importantes où l’esprit lutte avec l’esprit.
13658 Quand je dis la force, j’entends cette perfection dans le jeu qui comprend l’intelligence de tous les cas dont on peut légitimement faire son profit.
13659 Ils sont non-seulement divers, mais complexes, et se dérobent souvent dans des profondeurs de la pensée absolument inaccessibles à une intelligence ordinaire.
13660 Observer attentivement, c’est se rappeler distinctement ; et, à ce point de vue, le joueur d’échecs capable d’une attention très-intense jouera fort bien au whist, puisque les règles de Hoyle, basées elles-mêmes sur le simple mécanisme du jeu, sont facilement et généralement intelligibles.
13661 Aussi, avoir une mémoire fidèle et procéder d’après le livre sont des points qui constituent pour le vulgaire le summum du bien jouer.
13662 Mais c’est dans les cas situés au-delà de la règle que le talent de l’analyste se manifeste ; il fait en silence une foule d’observations et de déductions.
13663 Ses partenaires en font peut-être autant ; et la différence d’étendue dans les renseignements ainsi acquis ne gît pas tant dans la validité de la déduction que dans la qualité de l’observation.
13664 L’important, le principal est de savoir ce qu’il faut observer.
13665 Notre joueur ne se confine pas dans son jeu, et, bien que ce jeu soit l’objet actuel de son attention, il ne rejette pas pour cela les déductions qui naissent d’objets étrangers au jeu.
13666 Il examine la physionomie de son partenaire, il la compare soigneusement avec celle de chacun de ses adversaires.
13667 Il considère la manière dont chaque partenaire distribue ses cartes ; il compte souvent, grâce aux regards que laissent échapper les joueurs satisfaits, les atouts et les honneurs, un à un.
13668 Il note chaque mouvement de la physionomie, à mesure que le jeu marche, et recueille un capital de pensées dans les expressions variées de certitude, de surprise, de triomphe ou de mauvaise humeur.
13669 À la manière de ramasser une levée, il devine si la même personne en peut faire une autre dans la suite.
13670 Il reconnaît ce qui est joué par feinte à l’air dont c’est jeté sur la table.
13671 Une parole accidentelle, involontaire, une carte qui tombe, ou qu’on retourne par hasard, qu’on ramasse avec anxiété ou avec insouciance ; le compte des levées et l’ordre dans lequel elles sont rangées ; l’embarras, l’hésitation, la vivacité, la trépidation, – tout est pour lui symptôme, diagnostic, tout rend compte à cette perception, – intuitive en apparence, – du véritable état des choses.
13672 Quand les deux ou trois premiers tours ont été faits, il possède à fond le jeu qui est dans chaque main, et peut dès lors jouer ses cartes en parfaite connaissance de cause, comme si tous les autres joueurs avaient retourné les leurs.
13673 La faculté d’analyse ne doit pas être confondue avec la simple ingéniosité ; car, pendant que l’analyste est nécessairement ingénieux, il arrive souvent que l’homme ingénieux est absolument incapable d’analyse.
13674 La faculté de combinaison, ou constructivité, par laquelle se manifeste généralement cette ingéniosité, et à laquelle les phrénologues – ils ont tort, selon moi, – assignent un organe à part, – en supposant qu’elle soit une faculté primordiale, a paru dans des êtres dont l’intelligence était limitrophe de l’idiotie, assez souvent pour attirer l’attention générale des écrivains psychologistes.
13675 Entre l’ingéniosité et l’aptitude analytique, il y a une différence beaucoup plus grande qu’entre l’imaginative et l’imagination, mais d’un caractère rigoureusement analogue.
13676 En somme, on verra que l’homme ingénieux est toujours plein d’imaginative, et que l’homme vraiment imaginatif n’est jamais autre chose qu’un analyste.
13677 Le récit qui suit sera pour le lecteur un commentaire lumineux des propositions que je viens d’avancer.
13679 Ce jeune gentleman appartenait à une excellente famille, une famille illustre même ; mais, par une série d’événements malencontreux, il se trouva réduit à une telle pauvreté, que l’énergie de son caractère y succomba, et qu’il cessa de se pousser dans le monde et de s’occuper du rétablissement de sa fortune.
13680 Grâce à la courtoisie de ses créanciers, il resta en possession d’un petit reliquat de son patrimoine ; et, sur la rente qu’il en tirait, il trouva moyen, par une économie rigoureuse, de subvenir aux nécessités de la vie, sans s’inquiéter autrement des superfluités.
13681 Les livres étaient véritablement son seul luxe, et à Paris on se les procure facilement.
13682 Notre première connaissance se fit dans un obscur cabinet de lecture de la rue Montmartre, par ce fait fortuit que nous étions tous deux à la recherche d’un même livre, fort remarquable et fort rare ; cette coïncidence nous rapprocha. Nous nous vîmes toujours de plus en plus.
13683 Je fus profondément intéressé par sa petite histoire de famille, qu’il me raconta minutieusement avec cette candeur et cet abandon, – ce sans-façon du moi, – qui est le propre de tout Français quand il parle de ses propres affaires.
13684 Je fus aussi fort étonné de la prodigieuse étendue de ses lectures, et par-dessus tout je me sentis l’âme prise par l’étrange chaleur et la vitale fraîcheur de son imagination.
13685 Cherchant dans Paris certains objets qui faisaient mon unique étude, je vis que la société d’un pareil homme serait pour moi un trésor inappréciable, et dès lors je me livrai franchement à lui.
13686 Nous décidâmes enfin que nous vivrions ensemble tout le temps de mon séjour dans cette ville ; et, comme mes affaires étaient un peu moins embarrassées que les siennes, je me chargeai de louer et de meubler, dans un style approprié à la mélancolie fantasque de nos deux caractères, une maisonnette antique et bizarre que des superstitions dont nous ne daignâmes pas nous enquérir avaient fait déserter, – tombant presque en ruine, et située dans une partie reculée et solitaire du faubourg Saint-Germain.
13687 Si la routine de notre vie dans ce lieu avait été connue du monde, nous eussions passé pour deux fous, – peut-être pour des fous d’un genre inoffensif. Notre réclusion était complète ; nous ne recevions aucune visite.
13688 Le lieu de notre retraite était resté un secret – soigneusement gardé – pour mes anciens camarades ; il y avait plusieurs années que Dupin avait cessé de voir du monde et de se répandre dans Paris. Nous ne vivions qu’entre nous.
13689 Mon ami avait une bizarrerie d’humeur, – car comment définir cela ? – c’était d’aimer la nuit pour l’amour de la nuit ; la nuit était sa passion ; et je tombai moi-même tranquillement dans cette bizarrerie, comme dans toutes les autres qui lui étaient propres, me laissant aller au courant de toutes ses étranges originalités avec un parfait abandon.
13690 La noire divinité ne pouvait pas toujours demeurer avec nous ; mais nous en faisions la contrefaçon.
13691 Au premier point du jour, nous fermions tous les lourds volets de notre masure, nous allumions une couple de bougies fortement parfumées, qui ne jetaient que des rayons très-faibles et très-pâles.
13692 Au sein de cette débile clarté, nous livrions chacun notre âme à ses rêves, nous lisions, nous écrivions, ou nous causions, jusqu’à ce que la pendule nous avertît du retour de la véritable obscurité.
13693 Alors, nous nous échappions à travers les rues, bras dessus bras dessous, continuant la conversation du jour, rôdant au hasard jusqu’à une heure très-avancée, et cherchant à travers les lumières désordonnées et les ténèbres de la populeuse cité ces innombrables excitations spirituelles que l’étude paisible ne peut pas donner.
13694 Dans ces circonstances, je ne pouvais m’empêcher de remarquer et d’admirer, – quoique la riche idéalité dont il était doué eût dû m’y préparer, – une aptitude analytique particulière chez Dupin.
13695 Il semblait prendre un délice âcre à l’exercer, – peut-être même à l’étaler, – et avouait sans façon tout le plaisir qu’il en tirait.
13696 Il me disait à moi, avec un petit rire tout épanoui, que bien des hommes avaient pour lui une fenêtre ouverte à l’endroit de leur cœur, et d’habitude il accompagnait une pareille assertion de preuves immédiates et des plus surprenantes, tirées d’une connaissance profonde de ma propre personne.
13697 Dans ces moments-là, ses manières étaient glaciales et distraites ; ses yeux regardaient dans le vide, et sa voix, – une riche voix de ténor, habituellement, – montait jusqu’à la voix de tête ; c’eût été de la pétulance, sans l’absolue délibération de son parler et la parfaite certitude de son accentuation.
13698 Je l’observais dans ses allures, et je rêvais souvent à la vieille philosophie de l’âme double, – je m’amusais à l’idée d’un Dupin double, – un Dupin créateur et un Dupin analyste.
13699 Qu’on ne s’imagine pas, d’après ce que je viens de dire, que je vais dévoiler un grand mystère ou écrire un roman.
13700 Ce que j’ai remarqué dans ce singulier Français était simplement le résultat d’une intelligence surexcitée, – malade peut-être.
13701 Mais un exemple donnera une meilleure idée de la nature de ses observations à l’époque dont il s’agit.
13702 Une nuit, nous flânions dans une longue rue sale, avoisinant le Palais-Royal.
13703 Nous étions plongés chacun dans nos propres pensées, en apparence du moins, et, depuis près d’un quart d’heure, nous n’avions pas soufflé une syllabe. Tout à coup Dupin lâcha ces paroles :
13704 — C’est un bien petit garçon, en vérité ; et il serait mieux à sa place au théâtre des Variétés.
13705 — Cela ne fait pas l’ombre d’un doute, répliquai-je sans y penser et sans remarquer d’abord, tant j’étais absorbé, la singulière façon dont l’interrupteur adaptait sa parole à ma propre rêverie.
13706 Une minute après, je revins à moi, et mon étonnement fut profond.
13707 — Dupin, dis-je très-gravement, voilà qui passe mon intelligence. Je vous avoue, sans ambages, que j’en suis stupéfié et que j’en peux à peine croire mes sens.
13708 Comment a-t-il pu se faire que vous ayez deviné que je pensais à… ?
13709 Mais je m’arrêtai pour m’assurer indubitablement qu’il avait réellement deviné à qui je pensais.
13710 — À Chantilly ? dit-il ; pourquoi vous interrompre ? Vous faisiez en vous-même la remarque que sa petite taille le rendait impropre à la tragédie.
13711 C’était précisément ce qui faisait le sujet de mes réflexions.
13712 Chantilly était un ex-savetier de la rue Saint-Denis qui avait la rage du théâtre, et avait abordé le rôle de Xerxès dans la tragédie de Crébillon ; ses prétentions étaient dérisoires : on en faisait des gorges chaudes.
13713 — Dites-moi, pour l’amour de Dieu ! la méthode – si méthode il y a – à l’aide de laquelle vous avez pu pénétrer mon âme, dans le cas actuel !
13714 En réalité, j’étais encore plus étonné que je n’aurais voulu le confesser.
13715 — C’est le fruitier, répliqua mon ami, qui vous a amené à cette conclusion que le raccommodeur de semelles n’était pas de taille à jouer Xerxès et tous les rôles de ce genre.
13716 — Le fruitier ! vous m’étonnez ! je ne connais de fruitier d’aucune espèce.
13717 — L’homme qui s’est jeté contre vous, quand nous sommes entrés dans la rue, il y a peut-être un quart d’heure.
13718 Je me rappelai alors qu’en effet un fruitier, portant sur sa tête un grand panier de pommes, m’avait presque jeté par terre par maladresse, comme nous passions de la rue C… dans l’artère principale où nous étions alors.
13719 Mais quel rapport cela avait-il avec Chantilly ? Il m’était impossible de m’en rendre compte.
13720 Il n’y avait pas un atome de charlatanerie dans mon ami Dupin.
13721 — Je vais vous expliquer cela, dit-il, et, pour que vous puissiez comprendre tout très-clairement, nous allons d’abord reprendre la série de vos réflexions, depuis le moment dont je vous parle jusqu’à la rencontre du fruitier en question.
13722 Les anneaux principaux de la chaîne se suivent ainsi : Chantilly, Orion, le docteur Nichols, Épicure, la stéréotomie, les pavés, le fruitier.
13723 Il est peu de personnes qui ne se soient amusées, à un moment quelconque de leur vie, à remonter le cours de leurs idées et à rechercher par quels chemins leur esprit était arrivé à de certaines conclusions.
13724 Souvent cette occupation est pleine d’intérêt, et celui qui l’essaye pour la première fois est étonné de l’incohérence et de la distance, immense en apparence, entre le point de départ et le point d’arrivée.
13725 Qu’on juge donc de mon étonnement quand j’entendis mon Français parler comme il avait fait, et que je fus contraint de reconnaître qu’il avait dit la pure vérité.
13726 Il continua :
13727 — Nous causions de chevaux – si ma mémoire ne me trompe pas – juste avant de quitter la rue C… Ce fut notre dernier thème de conversation.
13728 Comme nous passions dans cette rue-ci, un fruitier, avec un gros panier sur la tête, passa précipitamment devant nous, vous jeta sur un tas de pavés amoncelés dans un endroit où la voie est en réparation.
13729 Vous avez mis le pied sur une des pierres branlantes ; vous avez glissé, vous vous êtes légèrement foulé la cheville ; vous avez paru vexé, grognon ; vous avez marmotté quelques paroles ; vous vous êtes retourné pour regarder le tas, puis vous avez continué votre chemin en silence.
13730 Je n’étais pas absolument attentif à tout ce que vous faisiez ; mais, pour moi, l’observation est devenue, de vieille date, une espèce de nécessité.
13731 » Vos yeux sont restés attachés sur le sol, – surveillant avec une espèce d’irritation les trous et les ornières du pavé (de façon que je voyais bien que vous pensiez toujours aux pierres), jusqu’à ce que nous eussions atteint le petit passage qu’on nomme le passage Lamartine[1], où l’on vient de faire l’essai du pavé de bois, un système de blocs unis et solidement assemblés.
13732 Ici votre physionomie s’est éclaircie, j’ai vu vos lèvres remuer, et j’ai deviné, à n’en pas douter, que vous vous murmuriez le mot stéréotomie, un terme appliqué fort prétentieusement à ce genre de pavage.
13733 Je savais que vous ne pouviez pas dire stéréotomie sans être induit à penser aux atomes, et de là aux théories d’Épicure ; et, comme dans la discussion que nous eûmes, il n’y a pas longtemps, à ce sujet, je vous avais fait remarquer que les vagues conjectures de l’illustre Grec avaient été confirmées singulièrement, sans que personne y prît garde, par les dernières théories sur les nébuleuses et les récentes découvertes cosmogoniques, je sentis que vous ne pourriez pas empêcher vos yeux de se tourner vers la grande nébuleuse d’Orion ; je m’y attendais certainement.
13734 Vous n’y avez pas manqué, et je fus alors certain d’avoir strictement emboîté le pas de votre rêverie.
13735 Or, dans cette amère boutade sur Chantilly, qui a paru hier dans le Musée, l’écrivain satirique, en faisant des allusions désobligeantes au changement de nom du savetier quand il a chaussé le cothurne, citait un vers latin dont nous avons souvent causé. Je veux parler du vers :
13736 Perdidit antiquum littera prima sonum.
13737 Je vous avais dit qu’il avait trait à Orion, qui s’écrivait primitivement Urion ; et, à cause d’une certaine acrimonie mêlée à cette discussion, j’étais sûr que vous ne l’aviez pas oubliée.
13738 Il était clair, dès lors, que vous ne pouviez pas manquer d’associer les deux idées d’Orion et de Chantilly. Cette association d’idées, je la vis au style du sourire qui traversa vos lèvres.
13739 Vous pensiez à l’immolation du pauvre savetier. Jusque-là, vous aviez marché courbé en deux, mais alors je vous vis vous redresser de toute votre hauteur.
13740 J’étais bien sûr que vous pensiez à la pauvre petite taille de Chantilly.
13741 C’est dans ce moment que j’interrompis vos réflexions pour vous faire remarquer que c’était un pauvre petit avorton que ce Chantilly, et qu’il serait bien mieux à sa place au théâtre des Variétés.
13742 Peu de temps après cet entretien, nous parcourions l’édition du soir de la Gazette des tribunaux, quand les paragraphes suivants attirèrent notre attention :
13744 Après quelques retards causés par des efforts infructueux pour se faire ouvrir à l’amiable, la grande porte fut forcée avec une pince, et huit ou dix voisins entrèrent, accompagnés de deux gendarmes.
13745 » Cependant, les cris avaient cessé ; mais, au moment où tout ce monde arrivait pêle-mêle au premier étage, on distingua deux fortes voix, peut-être plus, qui semblaient se disputer violemment et venir de la partie supérieure de la maison.
13746 Quand on arriva au second palier, ces bruits avaient également cessé, et tout était parfaitement tranquille.
13747 Les voisins se répandirent de chambre en chambre.
13748 Arrivés à une vaste pièce située sur le derrière, au quatrième étage, et dont on força la porte qui était fermée, avec la clef en dedans, ils se trouvèrent en face d’un spectacle qui frappa tous les assistants d’une terreur non moins grande que leur étonnement.
13749 » La chambre était dans le plus étrange désordre ; les meubles brisés et éparpillés dans tous les sens.
13750 Il n’y avait qu’un lit, les matelas en avaient été arrachés et jetés au milieu du parquet.
13751 Sur une chaise, on trouva un rasoir mouillé de sang ; dans l’âtre, trois longues et fortes boucles de cheveux gris, qui semblaient avoir été violemment arrachées avec leurs racines.
13752 Sur le parquet gisaient quatre napoléons, une boucle d’oreille ornée d’une topaze, trois grandes cuillers d’argent, trois plus petites en métal d’Alger, et deux sacs contenant environ quatre mille francs en or.
13753 Dans un coin, les tiroirs d’une commode étaient ouverts et avaient sans doute été mis au pillage, bien qu’on y ait trouvé plusieurs articles intacts.
13754 Un petit coffret de fer fut trouvé sous la literie (non pas sous le bois de lit) ; il était ouvert, avec la clef dans la serrure.
13755 Il ne contenait que quelques vieilles lettres et d’autres papiers sans importance.
13756 » On ne trouva aucune trace de madame l’Espanaye ; mais on remarqua une quantité extraordinaire de suie dans le foyer ; on fit une recherche dans la cheminée, et – chose horrible à dire ! – on en tira le corps de la demoiselle, la tête en bas, qui avait été introduit de force et poussé par l’étroite ouverture jusqu’à une distance assez considérable.
13757 Le corps était tout chaud. En l’examinant, on découvrit de nombreuses excoriations, occasionnées sans doute par la violence avec laquelle il y avait été fourré et qu’il avait fallu employer pour le dégager.
13758 La figure portait quelques fortes égratignures, et la gorge était stigmatisée par des meurtrissures noires et de profondes traces d’ongles, comme si la mort avait eu lieu par strangulation.
13759 » Après un examen minutieux de chaque partie de la maison, qui n’amena aucune découverte nouvelle, les voisins s’introduisirent dans une petite cour pavée, située sur le derrière du bâtiment.
13760 Là gisait le cadavre de la vieille dame, avec la gorge si parfaitement coupée, que, quand on essaya de le relever, la tête se détacha du tronc.
13761 Le corps, aussi bien que la tête, était terriblement mutilé, et celui-ci à ce point qu’il gardait à peine une apparence humaine.
13762 » Toute cette affaire resta un horrible mystère, et jusqu’à présent on n’a pas encore découvert, que nous sachions, le moindre fil conducteur. »
13763 Le numéro suivant portait ces détails additionnels :
13764 « Le drame de la rue Morgue. – Bon nombre d’individus ont été interrogés relativement à ce terrible et extraordinaire événement, mais rien n’a transpiré qui puisse jeter quelque jour sur l’affaire.
13765 Nous donnons ci-dessous les dépositions obtenues :
13766 » Pauline Dubourg, blanchisseuse, dépose qu’elle a connu les deux victimes pendant trois ans, et qu’elle a blanchi pour elles pendant tout ce temps.
13767 La vieille dame et sa fille semblaient en bonne intelligence, – très-affectueuses l’une envers l’autre. C’étaient de bonnes payes.
13768 Elle ne peut rien dire relativement à leur genre de vie et à leurs moyens d’existence.
13769 Elle croit que madame l’Espanaye disait la bonne aventure pour vivre. Cette dame passait pour avoir de l’argent de côté.
13770 Elle n’a jamais rencontré personne dans la maison, quand elle venait rapporter ou prendre le linge.
13771 Elle est sûre que ces dames n’avaient aucun domestique à leur service. Il lui a semblé qu’il n’y avait de meubles dans aucune partie de la maison, excepté au quatrième étage.
13772 » Pierre Moreau, marchand de tabac, dépose qu’il fournissait habituellement madame l’Espanaye, et lui vendait de petites quantités de tabac, quelquefois en poudre.
13773 Il est né dans le quartier et y a toujours demeuré.
13774 La défunte et sa fille occupaient depuis plus de six ans la maison où l’on a trouvé leurs cadavres.
13775 Primitivement elle était habitée par un bijoutier, qui sous-louait les appartements supérieurs à différentes personnes.
13776 La maison appartenait à madame l’Espanaye. Elle s’était montrée très-mécontente de son locataire, qui endommageait les lieux ; elle était venue habiter sa propre maison, refusant d’en louer une seule partie.
13777 La bonne dame était en enfance. Le témoin a vu la fille cinq ou six fois dans l’intervalle de ces six années.
13778 Elles menaient toutes deux une vie excessivement retirée ; elles passaient pour avoir de quoi. Il a entendu dire chez les voisins que madame l’Espanaye disait la bonne aventure ; il ne le croit pas.
13779 Il n’a jamais vu personne franchir la porte, excepté la vieille dame et sa fille, un commissionnaire une ou deux fois, et un médecin huit ou dix.
13780 » Plusieurs autres personnes du voisinage déposent dans le même sens.
13781 On ne cite personne comme ayant fréquenté la maison. On ne sait pas si la dame et sa fille avaient des parents vivants. Les volets des fenêtres de face s’ouvraient rarement.
13782 Ceux de derrière étaient toujours fermés, excepté aux fenêtres de la grande arrière-pièce du quatrième étage. La maison était une assez bonne maison, pas trop vieille.
13783 » Isidore Muset, gendarme, dépose qu’il a été mis en réquisition, vers trois heures du matin, et qu’il a trouvé à la grande porte vingt ou trente personnes qui s’efforçaient de pénétrer dans la maison.
13784 Il l’a forcée avec une baïonnette et non pas avec une pince.
13785 Il n’a pas eu grand’peine à l’ouvrir, parce qu’elle était à deux battants et n’était verrouillée ni par en haut, ni par en bas.
13786 Les cris ont continué jusqu’à ce que la porte fût enfoncée, puis ils ont soudainement cessé.
13787 On eût dit les cris d’une ou de plusieurs personnes en proie aux plus vives douleurs ; des cris très-hauts, très-prolongés, – non pas des cris brefs, ni précipités.
13788 Le témoin a grimpé l’escalier.
13789 En arrivant au premier palier, il a entendu deux voix qui se discutaient très-haut et très-aigrement ; – l’une, une voix rude, l’autre beaucoup plus aiguë, une voix très-singulière.
13790 Il a distingué quelques mots de la première, c’était celle d’un Français. Il est certain que ce n’est pas une voix de femme.
13792 Il n’a pu deviner ce qu’elle disait, mais il présume qu’elle parlait espagnol.
13793 Ce témoin rend compte de l’état de la chambre et des cadavres dans les mêmes termes que nous l’avons fait hier.
13794 » Henri Duval, un voisin, et orfèvre de son état, dépose qu’il faisait partie du groupe de ceux qui sont entrés les premiers dans la maison. Confirme généralement le témoignage de Muset.
13795 Aussitôt qu’ils se sont introduits dans la maison, ils ont refermé la porte pour barrer le passage à la foule qui s’amassait considérablement, malgré l’heure plus que matinale.
13796 La voix aiguë, à en croire le témoin, était une voix d’Italien. À coup sûr, ce n’était pas une voix française.
13797 Il ne sait pas au juste si c’était une voix de femme ; cependant, cela pourrait bien être.
13798 Le témoin n’est pas familiarisé avec la langue italienne ; il n’a pu distinguer les paroles, mais il est convaincu d’après l’intonation que l’individu qui parlait était un Italien.
13799 Le témoin a connu madame l’Espanaye et sa fille.
13800 Il a fréquemment causé avec elles. Il est certain que la voix aiguë n’était celle d’aucune des victimes.
13801 » Odenheimer, restaurateur. Ce témoin s’est offert de lui-même. Il ne parle pas français, et on l’a interrogé par le canal d’un interprète.
13802 Il est né à Amsterdam. Il passait devant la maison au moment des cris. Ils ont duré quelques minutes, dix minutes peut-être. C’étaient des cris prolongés, très-hauts, très-effrayants, – des cris navrants.
13803 Odenheimer est un de ceux qui ont pénétré dans la maison. Il confirme le témoignage précédent, à l’exception d’un seul point.
13804 Il est sûr que la voix aiguë était celle d’un homme, – d’un Français. Il n’a pu distinguer les mots articulés.
13805 On parlait haut et vite, – d’un ton inégal, – et qui exprimait la crainte aussi bien que la colère.
13806 La voix était âpre, plutôt âpre qu’aiguë. Il ne peut appeler cela précisément une voix aiguë. La grosse voix dit à plusieurs reprises : Sacré, – diable, – et une fois : Mon Dieu !
13807 » Jules Mignaud, banquier, de la maison Mignaud et fils, rue Deloraine. Il est l’aîné des Mignaud. Madame l’Espanaye avait quelque fortune.
13808 Il lui avait ouvert un compte dans sa maison, huit ans auparavant, au printemps.
13809 Elle a souvent déposé chez lui de petites sommes d’argent. Il ne lui a rien délivré jusqu’au troisième jour avant sa mort, où elle est venue lui demander en personne une somme de quatre mille francs. Cette somme lui a été payée en or, et un commis a été chargé de la lui porter chez elle.
13810 » Adolphe Lebon, commis chez Mignaud et fils, dépose que, le jour en question, vers midi, il a accompagné madame l’Espanaye à son logis, avec les quatre mille francs, en deux sacs.
13811 Quand la porte s’ouvrit, mademoiselle l’Espanaye parut, et lui prit des mains l’un des deux sacs, pendant que la vieille dame le déchargeait de l’autre.
13812 Il les salua et partit. Il n’a vu personne dans la rue en ce moment. C’est une rue borgne, très-solitaire.
13813 » William Bird, tailleur, dépose qu’il est un de ceux qui se sont introduits dans la maison. Il est Anglais. Il a vécu deux ans à Paris. Il est un des premiers qui ont monté l’escalier.
13814 Il a entendu les voix qui se disputaient. La voix rude était celle d’un Français. Il a pu distinguer quelques mots, mais il ne se les rappelle pas. Il a entendu distinctement sacré et mon Dieu.
13815 C’était en ce moment un bruit comme de plusieurs personnes qui se battent, – le tapage d’une lutte et d’objets qu’on brise. La voix aiguë était très-forte, plus forte que la voix rude.
13816 Il est sûr que ce n’était pas une voix d’Anglais. Elle lui sembla une voix d’Allemand ; peut-être bien une voix de femme. Le témoin ne sait pas l’allemand.
13817 » Quatre des témoins ci-dessus mentionnés ont été assignés de nouveau, et ont déposé que la porte de la chambre où fut trouvé le corps de mademoiselle l’Espanaye était fermée en dedans quand ils y arrivèrent.
13818 Tout était parfaitement silencieux ; ni gémissements, ni bruits d’aucune espèce. Après avoir forcé la porte, ils ne virent personne.
13819 » Les fenêtres, dans la chambre de derrière et dans celle de face, étaient fermées et solidement assujetties en dedans. Une porte de communication était fermée, mais pas à clef.
13820 La porte qui conduit de la chambre du devant au corridor était fermée à clef, et la clef en dedans ; une petite pièce sur le devant de la maison, au quatrième étage, à l’entrée du corridor, ouverte, et la porte entre-bâillée ; cette pièce, encombrée de vieux bois de lit, de malles, etc.
13821 On a soigneusement dérangé et visité tous ces objets.
13822 Il n’y a pas un pouce d’une partie quelconque de la maison qui n’ait été soigneusement visité. On a fait pénétrer des ramoneurs dans les cheminées. La maison est à quatre étages avec des mansardes.
13823 Une trappe qui donne sur le toit était condamnée et solidement fermée avec des clous ; elle ne semblait pas avoir été ouverte depuis des années.
13824 Les témoins varient sur la durée du temps écoulé entre le moment où l’on a entendu les voix qui se disputaient et celui où l’on a forcé la porte de la chambre.
13825 Quelques-uns l’évaluent trop court, deux ou trois minutes, – d’autres, cinq minutes. La porte ne fut ouverte qu’à grand’peine.
13826 » Alfonso Garcio, entrepreneur des pompes funèbres, dépose qu’il demeure rue Morgue.
13827 Il est né en Espagne. Il est un de ceux qui ont pénétré dans la maison. Il n’a pas monté l’escalier. Il a les nerfs très-délicats, et redoute les conséquences d’une violente agitation nerveuse.
13828 Il a entendu les voix qui se disputaient. La grosse voix était celle d’un Français.
13829 Il n’a pu distinguer ce qu’elle disait. La voix aiguë était celle d’un Anglais, il en est bien sûr. Le témoin ne sait pas l’anglais, mais il juge d’après l’intonation.
13830 » Alberto Montani, confiseur, dépose qu’il fut des premiers qui montèrent l’escalier. Il a entendu les voix en question.
13831 La voix rauque était celle d’un Français. Il a distingué quelques mots. L’individu qui parlait semblait faire des remontrances.
13832 Il n’a pas pu deviner ce que disait la voix aiguë. Elle parlait vite et par saccades. Il l’a prise pour la voix d’un Russe.
13833 Il confirme en général les témoignages précédents. Il est Italien ; il avoue qu’il n’a jamais causé avec un Russe.
13834 » Quelques témoins, rappelés, certifient que les cheminées dans toutes les chambres, au quatrième étage, sont trop étroites pour livrer passage à un être humain.
13835 Quand ils ont parlé de ramonage, ils voulaient parler de ces brosses en forme de cylindres dont on se sert pour nettoyer les cheminées.
13836 On a fait passer ces brosses du haut au bas dans tous les tuyaux de la maison. Il n’y a sur le derrière aucun passage qui ait pu favoriser la fuite d’un assassin, pendant que les témoins montaient l’escalier.
13837 Le corps de mademoiselle l’Espanaye était si solidement engagé dans la cheminée, qu’il a fallu, pour le retirer, que quatre ou cinq des témoins réunissent leurs forces.
13838 » Paul Dumas, médecin, dépose qu’il a été appelé au point du jour pour examiner les cadavres. Ils gisaient tous les deux sur le fond de sangle du lit dans la chambre où avait été trouvée mademoiselle l’Espanaye.
13839 Le corps de la jeune dame était fortement meurtri et excorié. Ces particularités s’expliquent suffisamment par le fait de son introduction dans la cheminée.
13840 La gorge était singulièrement écorchée. Il y avait, juste au-dessous du menton, plusieurs égratignures profondes, avec une rangée de taches livides, résultant évidemment de la pression des doigts.
13841 La face était affreusement décolorée, et les globes des yeux sortaient de la tête. La langue était coupée à moitié.
13842 Une large meurtrissure se manifestait au creux de l’estomac, produite, selon toute apparence, par la pression d’un genou.
13843 Dans l’opinion de M. Dumas, mademoiselle l’Espanaye avait été étranglée par un ou par plusieurs individus inconnus.
13844 » Le corps de la mère était horriblement mutilé. Tous les os de la jambe et du bras gauche plus ou moins fracassés ; le tibia gauche brisé en esquilles, ainsi que les côtes du même côté.
13845 Tout le corps affreusement meurtri et décoloré.
13846 Il était impossible de dire comment de pareils coups avaient été portés.
13847 Une lourde massue de bois ou une large pince de fer, une arme grosse, pesante et contondante aurait pu produire de pareils résultats, et encore, maniée par les mains d’un homme excessivement robuste.
13848 Avec n’importe quelle arme, aucune femme n’aurait pu frapper de tels coups. La tête de la défunte, quand le témoin la vit, était entièrement séparée du tronc, et, comme le reste, singulièrement broyée.
13849 La gorge évidemment avait été tranchée avec un instrument très-affilé, très-probablement un rasoir.
13850 » Alexandre Étienne, chirurgien, a été appelé en même temps que M. Dumas pour visiter les cadavres ; il confirme le témoignage et l’opinion de M. Dumas.
13851 » Quoique plusieurs autres personnes aient été interrogées, on n’a pu obtenir aucun autre renseignement d’une valeur quelconque.
13852 Jamais assassinat si mystérieux, si embrouillé, n’a été commis à Paris, si toutefois il y a eu assassinat.
13853 » La police est absolument déroutée, – cas fort usité dans les affaires de cette nature. Il est vraiment impossible de retrouver le fil de cette affaire. »
13854 L’édition du soir constatait qu’il régnait une agitation permanente dans le quartier Saint-Roch ; que les lieux avaient été l’objet d’un second examen, que les témoins avaient été interrogés de nouveau, mais tout cela sans résultat.
13855 Cependant, un post-scriptum annonçait qu’Adolphe Lebon, le commis de la maison de banque, avait été arrêté et incarcéré, bien que rien dans les faits déjà connus ne parût suffisant pour l’incriminer.
13856 Dupin semblait s’intéresser singulièrement à la marche de cette affaire, autant, du moins, que j’en pouvais juger par ses manières, car il ne faisait aucun commentaire.
13857 Ce fut seulement après que le journal eut annoncé l’emprisonnement de Lebon qu’il me demanda quelle opinion j’avais relativement à ce double meurtre.
13858 Je ne pus que lui confesser que j’étais comme tout Paris, et que je le considérais comme un mystère insoluble. Je ne voyais aucun moyen d’attraper la trace du meurtrier.
13859 — Nous ne devons pas juger des moyens possibles, dit Dupin, par une instruction embryonnaire.
13860 La police parisienne, si vantée pour sa pénétration, est très-rusée, rien de plus. Elle procède sans méthode, elle n’a pas d’autre méthode que celle du moment.
13861 On fait ici un grand étalage de mesures, mais il arrive souvent qu’elles sont si intempestives et si mal appropriées au but, qu’elles font penser à M. Jourdain, qui demandait sa robe de chambre – pour mieux entendre la musique.
13862 Les résultats obtenus sont quelquefois surprenants, mais ils sont, pour la plus grande partie, simplement dus à la diligence et à l’activité. Dans le cas où ces facultés sont insuffisantes, les plans ratent.
13863 Vidocq, par exemple, était bon pour deviner ; c’était un homme de patience ; mais sa pensée n’étant pas suffisamment éduquée, il faisait continuellement fausse route, par l’ardeur même de ses investigations.
13864 Il diminuait la force de sa vision en regardant l’objet de trop près.
13865 Il pouvait peut-être voir un ou deux points avec une netteté singulière, mais, par le fait même de son procédé, il perdait l’aspect de l’affaire prise dans son ensemble.
13866 Cela peut s’appeler le moyen d’être trop profond.
13867 La vérité n’est pas toujours dans un puits. En somme, quant à ce qui regarde les notions qui nous intéressent de plus près, je crois qu’elle est invariablement à la surface.
13868 Nous la cherchons dans la profondeur de la vallée : c’est au sommet des montagnes que nous la découvrirons.
13869 » On trouve dans la contemplation des corps célestes des exemples et des échantillons excellents de ce genre d’erreur.
13870 Jetez sur une étoile un rapide coup d’œil, regardez-la obliquement, en tournant vers elle la partie latérale de la rétine (beaucoup plus sensible à une lumière faible que la partie centrale), et vous verrez l’étoile distinctement ; vous aurez l’appréciation la plus juste de son éclat, éclat qui s’obscurcit à proportion que vous dirigez votre point de vue en plein sur elle.
13871 » Dans le dernier cas, il tombe sur l’œil un plus grand nombre de rayons ; mais, dans le premier, il y a une réceptibilité plus complète, une susceptibilité beaucoup plus vive.
13872 Une profondeur outrée affaiblit la pensée et la rend perplexe ; et il est possible de faire disparaître Vénus elle-même du firmament par une attention trop soutenue, trop concentrée, trop directe.
13873 » Quant à cet assassinat, faisons nous-mêmes un examen avant de nous former une opinion.
13874 Une enquête nous procurera de l’amusement (je trouvai cette expression bizarre, appliquée au cas en question, mais je ne dis mot) ; et, en outre, Lebon m’a rendu un service pour lequel je ne veux pas me montrer ingrat.
13875 Nous irons sur les lieux, nous les examinerons de nos propres yeux. Je connais G…, le préfet de police, et nous obtiendrons sans peine l’autorisation nécessaire.
13876 L’autorisation fut accordée, et nous allâmes tout droit à la rue Morgue. C’est un de ces misérables passages qui relient la rue Richelieu à la rue Saint-Roch.
13877 C’était dans l’après-midi, et il était déjà tard quand nous y arrivâmes, car ce quartier est situé à une grande distance de celui que nous habitions.
13878 Nous trouvâmes bien vite la maison, car il y avait une multitude de gens qui contemplaient de l’autre côté de la rue les volets fermés, avec une curiosité badaude.
13879 C’était une maison comme toutes les maisons de Paris, avec une porte cochère, et sur l’un des côtés une niche vitrée avec un carreau mobile, représentant la loge du concierge.
13880 Avant d’entrer, nous remontâmes la rue, nous tournâmes dans une allée, et nous passâmes ainsi sur les derrières de la maison.
13881 Dupin, pendant ce temps, examinait tous les alentours, aussi bien que la maison, avec une attention minutieuse dont je ne pouvais pas deviner l’objet.
13882 Nous revînmes sur nos pas vers la façade de la maison ; nous sonnâmes, nous montrâmes notre pouvoir, et les agents nous permirent d’entrer.
13883 Nous montâmes jusqu’à la chambre où on avait trouvé le corps de mademoiselle l’Espanaye, et où gisaient encore les deux cadavres.
13884 Le désordre de la chambre avait été respecté, comme cela se pratique en pareil cas. Je ne vis rien de plus que ce qu’avait constaté la Gazette des tribunaux.
13885 Dupin analysait minutieusement toutes choses, sans en excepter les corps des victimes.
13886 Nous passâmes ensuite dans les autres chambres, et nous descendîmes dans les cours, toujours accompagnés par un gendarme. Cet examen dura fort longtemps, et il était nuit quand nous quittâmes la maison.
13887 En retournant chez nous, mon camarade s’arrêta quelques minutes dans les bureaux d’un journal quotidien.
13888 J’ai dit que mon ami avait toute sorte de bizarreries, et que je les ménageais (car ce mot n’a pas d’équivalent en anglais).
13889 Il entrait maintenant dans sa fantaisie de se refuser à toute conversation relativement à l’assassinat, jusqu’au lendemain à midi.
13890 Ce fut alors qu’il me demanda brusquement si j’avais remarqué quelque chose de particulier sur le théâtre du crime.
13891 Il y eut dans sa manière de prononcer le mot particulier un accent qui me donna le frisson sans que je susse pourquoi.
13892 — Non, rien de particulier, dis-je, rien autre, du moins, que ce que nous avons lu tous deux dans le journal.
13893 — La Gazette, reprit-il, n’a pas, je le crains, pénétré l’horreur insolite de l’affaire. Mais laissons là les opinions niaises de ce papier.
13894 Il me semble que le mystère est considéré comme insoluble, par la raison même qui devrait le faire regarder comme facile à résoudre, – je veux parler du caractère excessif sous lequel il apparaît.
13895 Les gens de police sont confondus par l’absence apparente de motifs légitimant, non le meurtre en lui-même, mais l’atrocité du meurtre.
13896 Ils sont embarrassés aussi par l’impossibilité apparente de concilier les voix qui se disputaient avec ce fait qu’on n’a trouvé en haut de l’escalier d’autre personne que mademoiselle l’Espanaye, assassinée, et qu’il n’y avait aucun moyen de sortir sans être vu des gens qui montaient l’escalier.
13897 L’étrange désordre de la chambre, – le corps fourré, la tête en bas, dans la cheminée, – l’effrayante mutilation du corps de la vieille dame, – ces considérations, jointes à celles que j’ai mentionnées et à d’autres dont je n’ai pas besoin de parler, ont suffi pour paralyser l’action des agents du ministère et pour dérouter complètement leur perspicacité si vantée.
13898 Ils ont commis la très-grosse et très-commune faute de confondre l’extraordinaire avec l’abstrus.
13899 Mais c’est justement en suivant ces déviations du cours ordinaire de la nature que la raison trouvera son chemin, si la chose est possible, et marchera vers la vérité.
13900 Dans les investigations du genre de celle qui nous occupe, il ne faut pas tant se demander comment les choses se sont passées, qu’étudier en quoi elles se distinguent de tout ce qui est arrivé jusqu’à présent.
13901 Bref, la facilité avec laquelle j’arriverai, – ou je suis déjà arrivé, – à la solution du mystère, est en raison directe de son insolubilité apparente aux yeux de la police.
13902 Je fixai mon homme avec un étonnement muet.
13903 — J’attends maintenant, continua-t-il en jetant un regard sur la porte de notre chambre, j’attends un individu qui, bien qu’il ne soit peut-être pas l’auteur de cette boucherie, doit se trouver en partie impliqué dans sa perpétration.
13904 Il est probable qu’il est innocent de la partie atroce du crime. J’espère ne pas me tromper dans cette hypothèse ; car c’est sur cette hypothèse que je fonde l’espérance de déchiffrer l’énigme entière.
13905 J’attends l’homme ici, – dans cette chambre, – d’une minute à l’autre.
13906 Il est vrai qu’il peut fort bien ne pas venir, mais il y a quelques probabilités pour qu’il vienne. S’il vient, il sera nécessaire de le garder.
13907 Voici des pistolets, et nous savons tous deux à quoi ils servent quand l’occasion l’exige.
13908 Je pris les pistolets, sans trop savoir ce que je faisais, pouvant à peine en croire mes oreilles, – pendant que Dupin continuait, à peu près comme dans un monologue.
13909 J’ai déjà parlé de ses manières distraites dans ces moments-là.
13910 Son discours s’adressait à moi ; mais sa voix, quoique montée à un diapason fort ordinaire, avait cette intonation que l’on prend d’habitude en parlant à quelqu’un placé à une grande distance.
13911 Ses yeux, d’une expression vague, ne regardaient que le mur.
13912 — Les voix qui se disputaient, disait-il, les voix entendues par les gens qui montaient l’escalier n’étaient pas celles de ces malheureuses femmes, – cela est plus que prouvé par l’évidence.
13913 Cela nous débarrasse pleinement de la question de savoir si la vieille dame aurait assassiné sa fille et se serait ensuite suicidée.
13914 » Je ne parle de ce cas que par amour de la méthode ; car la force de madame l’Espanaye eût été absolument insuffisante pour introduire le corps de sa fille dans la cheminée, de la façon où on l’a découvert ; et la nature des blessures trouvées sur sa propre personne exclut entièrement l’idée de suicide.
13915 Le meurtre a donc été commis par des tiers, et les voix de ces tiers sont celles qu’on a entendues se quereller.
13916 » Permettez-moi maintenant d’appeler votre attention, – non pas sur les dépositions relatives à ces voix, – mais sur ce qu’il y a de particulier dans ces dépositions.
13917 Y avez-vous remarqué quelque chose de particulier ?
13918 — Je remarquai que, pendant que tous les témoins s’accordaient à considérer la grosse voix comme étant celle d’un Français, il y avait un grand désaccord relativement à la voix aiguë, ou, comme l’avait définie un seul individu, à la voix âpre.
13919 — Cela constitue l’évidence, dit Dupin, mais non la particularité de l’évidence. Vous n’avez rien observé de distinctif ; – cependant il y avait quelque chose à observer.
13920 Les témoins, remarquez-le bien, sont d’accord sur la grosse voix ; là-dessus, il y a unanimité.
13921 Mais relativement à la voix aiguë, il y a une particularité, – elle ne consiste pas dans leur désaccord, – mais en ceci que, quand un Italien, un Anglais, un Espagnol, un Hollandais, essayent de la décrire, chacun en parle comme d’une voix d’étranger, chacun est sûr que ce n’était pas la voix d’un de ses compatriotes.
13922 » Chacun la compare, non pas à la voix d’un individu dont la langue lui serait familière, mais justement au contraire.
13923 Le Français présume que c’était une voix d’Espagnol, et il aurait pu distinguer quelques mots s’il était familiarisé avec l’espagnol.
13924 Le Hollandais affirme que c’était la voix d’un Français ; mais il est établi que le témoin, ne sachant pas le français, a été interrogé par le canal d’un interprète.
13925 L’Anglais pense que c’était la voix d’un Allemand, et il n’entend pas l’allemand.
13926 L’Espagnol est positivement sûr que c’était la voix d’un Anglais, mais il en juge uniquement par l’intonation, car il n’a aucune connaissance de l’anglais.
13927 L’Italien croit à une voix de Russe, mais il n’a jamais causé avec une personne native de Russie.
13928 Un autre Français, cependant, diffère du premier, et il est certain que c’était une voix d’Italien ; mais, n’ayant pas la connaissance de cette langue, il fait comme l’Espagnol, il tire sa certitude de l’intonation.
13929 Or, cette voix était donc bien insolite et bien étrange, qu’on ne pût obtenir à son égard que de pareils témoignages ?
13930 Une voix dans les intonations de laquelle des citoyens des cinq grandes parties de l’Europe n’ont rien pu reconnaître qui leur fût familier !
13931 Vous me direz que c’était peut-être la voix d’un Asiatique ou d’un Africain.
13932 Les Africains et les Asiatiques n’abondent pas à Paris ; mais, sans nier la possibilité du cas, j’appellerai simplement votre attention sur trois points.
13933 » Un témoin dépeint la voix ainsi : plutôt âpre qu’aiguë. Deux autres en parlent comme d’une voix brève et saccadée. Ces témoins n’ont distingué aucune parole, – aucun son ressemblant à des paroles.
13934 » Je ne sais pas, continua Dupin, quelle impression j’ai pu faire sur votre entendement ; mais je n’hésite pas à affirmer qu’on peut tirer des déductions légitimes de cette partie même des dépositions, – la partie relative aux deux voix, – la grosse voix et la voix aiguë – très-suffisantes en elles-mêmes pour créer un soupçon qui indiquerait la route dans toute investigation ultérieure du mystère.
13935 » J’ai dit : déductions légitimes, mais cette expression ne rend pas complètement ma pensée.
13936 Je voulais faire entendre que ces déductions sont les seules convenables, et que ce soupçon en surgit inévitablement comme le seul résultat possible.
13937 Cependant, de quelle nature est ce soupçon, je ne vous le dirai pas immédiatement.
13938 Je désire simplement vous démontrer que ce soupçon était plus que suffisant pour donner un caractère décidé, une tendance positive à l’enquête que je voulais faire dans la chambre.
13939 » Maintenant, transportons-nous en imagination dans cette chambre. Quel sera le premier objet de notre recherche ? Les moyens d’évasion employés par les meurtriers.
13940 Nous pouvons affirmer, – n’est-ce pas, – que nous ne croyons ni l’un ni l’autre aux événements surnaturels ?
13941 Mesdames l’Espanaye n’ont pas été assassinées par les esprits. Les auteurs du meurtre étaient des êtres matériels, et ils ont fui matériellement.
13942 » Or, comment ? Heureusement, il n’y a qu’une manière de raisonner sur ce point, et cette manière nous conduira à une conclusion positive.
13943 Examinons donc un à un les moyens possibles d’évasion.
13944 Il est clair que les assassins étaient dans la chambre où l’on a trouvé mademoiselle l’Espanaye, ou au moins dans la chambre adjacente quand la foule a monté l’escalier.
13945 Ce n’est donc que dans ces deux chambres que nous avons à chercher des issues.
13946 La police a levé les parquets, ouvert les plafonds, sondé la maçonnerie des murs. Aucune issue secrète n’a pu échapper à sa perspicacité.
13947 Mais je ne me suis pas fié à ses yeux, et j’ai examiné avec les miens ; il n’y a réellement pas d’issue secrète.
13948 Les deux portes qui conduisent des chambres dans le corridor étaient solidement fermées et les clefs en dedans. Voyons les cheminées.
13949 Celles-ci, qui sont d’une largeur ordinaire jusqu’à une distance de huit ou dix pieds au-dessus du foyer, ne livreraient pas au-delà un passage suffisant à un gros chat.
13950 » L’impossibilité de la fuite, du moins par les voies ci-dessus indiquées, étant donc absolument établie, nous en sommes réduits aux fenêtres.
13951 Personne n’a pu fuir par celles de la chambre du devant sans être vu par la foule du dehors. Il a donc fallu que les meurtriers s’échappassent par celles de la chambre de derrière.
13952 » Maintenant, amenés, comme nous le sommes, à cette conclusion par des déductions aussi irréfragables, nous n’avons pas le droit, en tant que raisonneurs, de la rejeter en raison de son apparente impossibilité.
13953 Il ne nous reste donc qu’à démontrer que cette impossibilité apparente n’existe pas en réalité.
13954 » Il y a deux fenêtres dans la chambre. L’une des deux n’est pas obstruée par l’ameublement, et est restée entièrement visible.
13955 La partie inférieure de l’autre est cachée par le chevet du lit, qui est fort massif et qui est poussé tout contre.
13956 On a constaté que la première était solidement assujettie en dedans. Elle a résisté aux efforts les plus violents de ceux qui ont essayé de la lever.
13957 On avait percé dans son châssis, à gauche, un grand trou avec une vrille, et on y trouva un gros clou enfoncé presque jusqu’à la tête.
13958 En examinant l’autre fenêtre, on y a trouvé fiché un clou semblable ; et un vigoureux effort pour lever le châssis n’a pas eu plus de succès que de l’autre côté.
13959 La police était dès lors pleinement convaincue qu’aucune fuite n’avait pu s’effectuer par ce chemin. Il fut donc considéré comme superflu de retirer les clous et d’ouvrir les fenêtres.
13960 » Mon examen fut un peu plus minutieux, et cela par la raison que je vous ai donnée tout à l’heure. C’était le cas, je le savais, où il fallait démontrer que l’impossibilité n’était qu’apparente.
13961 » Je continuai à raisonner ainsi, – à posteriori. – Les meurtriers s’étaient évadés par l’une de ces fenêtres.
13962 Cela étant, ils ne pouvaient pas avoir réassujetti les châssis en dedans, comme on les a trouvés ; considération qui, par son évidence, a borné les recherches de la police dans ce sens-là.
13963 Cependant, ces châssis étaient bien fermés.
13964 Il faut donc qu’ils puissent se fermer d’eux-mêmes. Il n’y avait pas moyen d’échapper à cette conclusion.
13965 J’allai droit à la fenêtre non bouchée, je retirai le clou avec quelque difficulté, et j’essayai de lever le châssis.
13966 Il a résisté à tous mes efforts, comme je m’y attendais.
13967 Il y avait donc, j’en étais sûr maintenant, un ressort caché ; et ce fait, corroborant mon idée, me convainquit au moins de la justesse de mes prémisses, quelque mystérieuses que m’apparussent toujours les circonstances relatives aux clous.
13968 Un examen minutieux me fit bientôt découvrir le ressort secret. Je le poussai, et, satisfait de ma découverte, je m’abstins de lever le châssis.
13969 » Je remis alors le clou en place et l’examinai attentivement. Une personne passant par la fenêtre pouvait l’avoir refermée, et le ressort aurait fait son office ; mais le clou n’aurait pas été replacé.
13970 Cette conclusion était nette et rétrécissait encore le champ de mes investigations. Il fallait que les assassins se fussent enfuis par l’autre fenêtre.
13971 En supposant donc que les ressorts des deux croisées fussent semblables, comme il était probable, il fallait cependant trouver une différence dans les clous, ou au moins dans la manière dont ils avaient été fixés.
13972 Je montai sur le fond de sangle du lit, et je regardai minutieusement l’autre fenêtre par-dessus le chevet du lit.
13973 Je passai ma main derrière, je découvris aisément le ressort, et je le fis jouer ; – il était, comme je l’avais deviné, identique au premier.
13974 Alors, j’examinai le clou. Il était aussi gros que l’autre, et fixé de la même manière, enfoncé presque jusqu’à la tête.
13975 » Vous direz que j’étais embarrassé ; mais, si vous avez une pareille pensée, c’est que vous vous êtes mépris sur la nature de mes inductions.
13976 Pour me servir d’un terme de jeu, je n’avais pas commis une seule faute ; je n’avais pas perdu la piste un seul instant ; il n’y avait pas une lacune d’un anneau à la chaîne.
13977 J’avais suivi le secret jusque dans sa dernière phase, et cette phase, c’était le clou.
13978 Il ressemblait, dis-je, sous tous les rapports, à son voisin de l’autre fenêtre ; mais ce fait, quelque concluant qu’il fût en apparence, devenait absolument nul, en face de cette considération dominante, à savoir que là, à ce clou, finissait le fil conducteur.
13979 Il faut, me dis-je, qu’il y ait dans ce clou quelque chose de défectueux.
13980 Je le touchai, et la tête, avec un petit morceau de la tige, un quart de pouce environ, me resta dans les doigts.
13981 Le reste de la tige était dans le trou, où elle s’était cassée.
13982 Cette fracture était fort ancienne, car les bords étaient incrustés de rouille, et elle avait été opérée par un coup de marteau, qui avait enfoncé en partie la tête du clou dans le fond du châssis.
13983 Je rajustai soigneusement la tête avec le morceau qui la continuait, et le tout figura un clou intact ; la fissure était inappréciable.
13984 Je pressai le ressort, je levai doucement la croisée de quelques pouces ; la tête du clou vint avec elle, sans bouger de son trou.
13985 Je refermai la croisée, et le clou offrit de nouveau le semblant d’un clou complet.
13986 » Jusqu’ici l’énigme était débrouillée. L’assassin avait fui par la fenêtre qui touchait au lit.
13987 Qu’elle fût retombée d’elle-même après la fuite ou qu’elle eût été fermée par une main humaine, elle était retenue par le ressort, et la police avait attribué cette résistance au clou ; aussi toute enquête ultérieure avait été jugée superflue.
13988 » La question, maintenant, était celle du mode de descente. Sur ce point, j’avais satisfait mon esprit dans notre promenade autour du bâtiment.
13989 À cinq pieds et demi environ de la fenêtre en question court une chaîne de paratonnerre. De cette chaîne, il eût été impossible à n’importe qui d’atteindre la fenêtre, à plus forte raison, d’entrer.
13990 » Toutefois, j’ai remarqué que les volets du quatrième étage étaient du genre particulier que les menuisiers parisiens appellent ferrades, genre de volets fort peu usité aujourd’hui, mais qu’on rencontre fréquemment dans de vieilles maisons de Lyon et de Bordeaux.
13991 Ils sont faits comme une porte ordinaire (porte simple, et non pas à double battant), à l’exception que la partie inférieure est façonnée à jour et treillissée, ce qui donne aux mains une excellente prise.
13992 » Dans le cas en question, ces volets sont larges de trois bons pieds et demi.
13993 Quand nous les avons examinés du derrière de la maison, ils étaient tous les deux ouverts à moitié, c’est-à-dire qu’ils faisaient angle droit avec le mur.
13994 Il est présumable que la police a examiné comme moi les derrières du bâtiment ; mais, en regardant ces ferrades dans le sens de leur largeur (comme elle les a vues inévitablement), elle n’a sans doute pas pris garde à cette largeur même, ou du moins elle n’y a pas attaché l’importance nécessaire.
13995 En somme, les agents, quand il a été démontré pour eux que la fuite n’avait pu s’effectuer de ce côté, ne leur ont appliqué qu’un examen succinct.
13996 » Toutefois, il était évident pour moi que le volet appartenant à la fenêtre située au chevet du lit, si on le supposait rabattu contre le mur, se trouverait à deux pieds de la chaîne du paratonnerre.
13997 Il était clair aussi que, par l’effort d’une énergie et d’un courage insolites, on pouvait, à l’aide de la chaîne, avoir opéré une invasion par la fenêtre.
13998 Arrivé à cette distance de deux pieds et demi (je suppose maintenant le volet complètement ouvert), un voleur aurait pu trouver dans le treillage une prise solide.
13999 Il aurait pu dès lors, en lâchant la chaîne, en assurant bien ses pieds contre le mur et en s’élançant vivement, tomber dans la chambre, et attirer violemment le volet avec lui de manière à le fermer, – en supposant, toutefois, la fenêtre ouverte en ce moment-là.
14000 » Remarquez bien, je vous prie, que j’ai parlé d’une énergie très-peu commune, nécessaire pour réussir dans une entreprise aussi difficile, aussi hasardeuse.
14001 Mon but est de vous prouver d’abord que la chose a pu se faire, – en second lieu et principalement, d’attirer votre attention sur le caractère très-extraordinaire, presque surnaturel, de l’agilité nécessaire pour l’accomplir.
14002 » Vous direz sans doute, en vous servant de la langue judiciaire, que, pour donner ma preuve à fortiori, je devrais plutôt sous-évaluer l’énergie nécessaire dans ce cas que réclamer son exacte estimation.
14003 C’est peut-être la pratique des tribunaux, mais cela ne rentre pas dans les us de la raison. Mon objet final, c’est la vérité.
14004 Mon but actuel, c’est de vous induire à rapprocher cette énergie tout à fait insolite de cette voix si particulière, de cette voix aiguë (ou âpre), de cette voix saccadée, dont la nationalité n’a pu être constatée par l’accord de deux témoins, et dans laquelle personne n’a saisi de mots articulés, de syllabisation.
14005 À ces mots, une conception vague et embryonnaire de la pensée de Dupin passa dans mon esprit.
14006 Il me semblait être sur la limite de la compréhension sans pouvoir comprendre ; comme les gens qui sont quelquefois sur le bord du souvenir, et qui cependant ne parviennent pas à se rappeler.
14007 Mon ami continua son argumentation :
14008 — Vous voyez, dit-il, que j’ai transporté la question du mode de sortie au mode d’entrée.
14009 Il était dans mon plan de démontrer qu’elles se sont effectuées de la même manière et sur le même point. Retournons maintenant dans l’intérieur de la chambre. Examinons toutes les particularités.
14010 Les tiroirs de la commode, dit-on, ont été mis au pillage, et cependant on y a trouvé plusieurs articles de toilette intacts.
14011 Cette conclusion est absurde ; c’est une simple conjecture, – une conjecture passablement niaise, et rien de plus.
14012 Comment pouvons-nous savoir que les articles trouvés dans les tiroirs ne représentent pas tout ce que les tiroirs contenaient ?
14013 Madame l’Espanaye et sa fille menaient une vie excessivement retirée, ne voyaient pas le monde, sortaient rarement, avaient donc peu d’occasions de changer de toilette.
14014 Ceux qu’on a trouvés étaient au moins d’aussi bonne qualité qu’aucun de ceux que possédaient vraisemblablement ces dames.
14015 Et, si un voleur en avait pris quelques-uns, pourquoi n’aurait-il pas pris les meilleurs, – pourquoi ne les aurait-il pas tous pris ?
14016 Bref, pourquoi aurait-il abandonné les quatre mille francs en or pour s’empêtrer d’un paquet de linge ?
14017 L’or a été abandonné. La presque totalité de la somme désignée par le banquier Mignaud a été trouvée sur le parquet, dans les sacs.
14018 Je tiens donc à écarter de votre pensée l’idée saugrenue d’un intérêt, idée engendrée dans le cerveau de la police par les dépositions qui parlent d’argent délivré à la porte même de la maison.
14019 Des coïncidences dix fois plus remarquables que celle-ci (la livraison de l’argent et le meurtre commis trois jours après sur le propriétaire) se présentent dans chaque heure de notre vie sans attirer notre attention, même une minute.
14020 En général, les coïncidences sont de grosses pierres d’achoppement dans la route de ces pauvres penseurs mal éduqués qui ne savent pas le premier mot de la théorie des probabilités, théorie à laquelle le savoir humain doit ses plus glorieuses conquêtes et ses plus belles découvertes.
14021 Dans le cas présent, si l’or avait disparu, le fait qu’il avait été délivré trois jours auparavant créerait quelque chose de plus qu’une coïncidence.
14022 Cela corroborerait l’idée d’intérêt.
14023 Mais, dans les circonstances réelles où nous sommes placés, si nous supposons que l’or a été le mobile de l’attaque, il nous faut supposer ce criminel assez indécis et assez idiot pour oublier à la fois son or et le mobile qui l’a fait agir.
14024 » Mettez donc bien dans votre esprit les points sur lesquels j’ai attiré votre attention, – cette voix particulière, cette agilité sans pareille, et cette absence frappante d’intérêt dans un meurtre aussi singulièrement atroce que celui-ci. – Maintenant, examinons la boucherie en elle-même.
14025 Voilà une femme étranglée par la force des mains, et introduite dans une cheminée, la tête en bas. Des assassins ordinaires n’emploient pas de pareils procédés pour tuer.
14026 Encore moins cachent-ils ainsi les cadavres de leurs victimes. Dans cette façon de fourrer le corps dans la cheminée, vous admettrez qu’il y a quelque chose d’excessif et de bizarre, – quelque chose d’absolument inconciliable avec tout ce que nous connaissons en général des actions humaines, même en supposant que les auteurs fussent les plus pervertis des hommes.
14027 Songez aussi quelle force prodigieuse il a fallu pour pousser ce corps dans une pareille ouverture, et l’y pousser si puissamment, que les efforts réunis de plusieurs personnes furent à peine suffisants pour l’en retirer.
14028 » Portons maintenant notre attention sur d’autres indices de cette vigueur merveilleuse. Dans le foyer, on a trouvé des mèches de cheveux, – des mèches très-épaisses de cheveux gris.
14029 Ils ont été arrachés avec leurs racines. Vous savez quelle puissante force il faut pour arracher seulement de la tête vingt ou trente cheveux à la fois. Vous avez vu les mèches en question aussi bien que moi.
14030 À leurs racines grumelées – affreux spectacle ! – adhéraient des fragments de cuir chevelu, – preuve certaine de la prodigieuse puissance qu’il a fallu déployer pour déraciner peut-être cinq cent mille cheveux d’un seul coup.
14031 » Non-seulement le cou de la vieille dame était coupé, mais la tête absolument séparée du corps ; l’instrument était un simple rasoir.
14032 Je vous prie de remarquer cette férocité bestiale.
14033 Je ne parle pas des meurtrissures du corps de madame l’Espanaye ; M. Dumas et son honorable confrère, M. Étienne, ont affirmé qu’elles avaient été produites par un instrument contondant ; et en cela ces messieurs furent tout à fait dans le vrai.
14034 L’instrument contondant a été évidemment le pavé de la cour sur laquelle la victime est tombée de la fenêtre qui donne sur le lit.
14035 Cette idée, quelque simple qu’elle apparaisse maintenant, a échappé à la police par la même raison qui l’a empêchée de remarquer la largeur des volets ; parce que, grâce à la circonstance des clous, sa perception était hermétiquement bouchée à l’idée que les fenêtres eussent jamais pu être ouvertes.
14036 » Si maintenant, – subsidiairement, – vous avez convenablement réfléchi au désordre bizarre de la chambre, nous sommes allés assez avant pour combiner les idées d’une agilité merveilleuse, d’une férocité bestiale, d’une boucherie sans motif, d’une grotesquerie dans l’horrible absolument étrangère à l’humanité, et d’une voix dont l’accent est inconnu à l’oreille d’hommes de plusieurs nations, d’une voix dénuée de toute syllabisation distincte et intelligible.
14037 Or, pour vous, qu’en ressort-il ? Quelle impression ai-je faite sur votre imagination ?
14038 Je sentis un frisson courir dans ma chair quand Dupin me fit cette question.
14039 — Un fou, dis-je, aura commis ce meurtre, – quelque maniaque furieux échappé à une maison de santé du voisinage.
14040 — Pas trop mal, répliqua-t-il, votre idée est presque applicable.
14041 Mais les voix des fous, même dans leurs plus sauvages paroxysmes, ne se sont jamais accordées avec ce qu’on dit de cette singulière voix entendue dans l’escalier.
14042 Les fous font partie d’une nation quelconque, et leur langage, pour incohérent qu’il soit dans les paroles, est toujours syllabifié.
14043 En outre, le cheveu d’un fou ne ressemble pas à celui que je tiens maintenant dans ma main. J’ai dégagé cette petite touffe des doigts rigides et crispés de madame l’Espanaye. Dites-moi ce que vous en pensez.
14044 — Dupin ! dis-je, complètement bouleversé, ces cheveux sont bien extraordinaires, – ce ne sont pas là des cheveux humains !
14045 — Je n’ai pas affirmé qu’ils fussent tels, dit-il ; mais, avant de nous décider sur ce point, je désire que vous jetiez un coup d’œil sur le petit dessin que j’ai tracé sur ce bout de papier. C’est un fac-similé qui représente ce que certaines dépositions définissent les meurtrissures noirâtres et les profondes marques d’ongles trouvées sur le cou de mademoiselle l’Espanaye, et que MM. Dumas et Étienne appellent une série de taches livides, évidemment causées par l’impression des doigts.
14046 — Vous voyez, continua mon ami en déployant le papier sur la table, que ce dessin donne l’idée d’une poigne solide et ferme.
14047 Il n’y a pas d’apparence que les doigts aient glissé.
14048 Chaque doigt a gardé, peut-être jusqu’à la mort de la victime, la terrible prise qu’il s’était faite, et dans laquelle il s’est moulé.
14049 Essayez maintenant de placer tous vos doigts, en même temps, chacun dans la marque analogue que vous voyez.
14050 J’essayai, mais inutilement.
14051 — Il est possible, dit Dupin, que nous ne fassions pas cette expérience d’une manière décisive. Le papier est déployé sur une surface plane, et la gorge humaine est cylindrique.
14052 Voici un rouleau de bois dont la circonférence est à peu près celle d’un cou. Étalez le dessin tout autour, et recommencez l’expérience.
14053 J’obéis ; mais la difficulté fut encore plus évidente que la première fois.
14054 — Ceci, dis-je, n’est pas la trace d’une main humaine.
14055 — Maintenant, dit Dupin, lisez ce passage de Cuvier.
14056 C’était l’histoire minutieuse, anatomique et descriptive, du grand orang-outang fauve des îles de l’Inde orientale.
14057 Tout le monde connaît suffisamment la gigantesque stature, la force et l’agilité prodigieuses, la férocité sauvage et les facultés d’imitation de ce mammifère. Je compris d’un seul coup tout l’horrible du meurtre.
14058 — La description des doigts, dis-je, quand j’eus fini la lecture, s’accorde parfaitement avec le dessin.
14059 Je vois qu’aucun animal, – excepté un orang-outang, et de l’espèce en question, – n’aurait pu faire des marques telles que celles que vous avez dessinées.
14060 Cette touffe de poils fauves est aussi d’un caractère identique à celui de l’animal de Cuvier.
14061 Mais je ne me rends pas facilement compte des détails de cet effroyable mystère. D’ailleurs, on a entendu deux voix se disputer, et l’une d’elles était incontestablement la voix d’un Français.
14062 — C’est vrai ; et vous vous rappellerez une expression attribuée presque unanimement à cette voix, – l’expression Mon Dieu !
14063 Ces mots, dans les circonstances présentes, ont été caractérisés par l’un des témoins (Montani, le confiseur) comme exprimant un reproche et une remontrance.
14064 C’est donc sur ces deux mots que j’ai fondé l’espérance de débrouiller complètement l’énigme. Un Français a eu connaissance du meurtre.
14065 Il est possible, – il est même plus que probable qu’il est innocent de toute participation à cette sanglante affaire.
14066 L’orang-outang a pu lui échapper. Il est possible qu’il ait suivi sa trace jusqu’à la chambre, mais que, dans les circonstances terribles qui ont suivi, il n’ait pu s’emparer de lui.
14067 L’animal est encore libre. Je ne poursuivrai pas ces conjectures, je n’ai pas le droit d’appeler ces idées d’un autre nom, puisque les ombres de réflexions qui leur servent de base sont d’une profondeur à peine suffisante pour être appréciées par ma propre raison, et que je ne prétendrais pas qu’elles fussent appréciables pour une autre intelligence.
14068 Nous les nommerons donc des conjectures, et nous ne les prendrons que pour telles.
14069 Si le Français en question est, comme je le suppose, innocent de cette atrocité, cette annonce que j’ai laissée hier au soir, pendant que nous retournions au logis, dans les bureaux du journal le Monde (feuille consacrée aux intérêts maritimes, et très-recherchée par les marins), l’amènera chez nous.
14070 Il me tendit un papier, et je lus :
14071 Avis. – On a trouvé dans le bois de Boulogne, le matin du… courant (c’était le matin de l’assassinat), de fort bonne heure, un énorme orang-outang fauve de l’espèce de Bornéo.
14072 Le propriétaire (qu’on sait être un marin appartenant à l’équipage d’un navire maltais) peut retrouver l’animal, après en avoir donné un signalement satisfaisant et remboursé quelques frais à la personne qui s’en est emparée et qui l’a gardé.
14074 — Comment avez-vous pu, demandai-je à Dupin, savoir que l’homme était un marin, et qu’il appartenait à un navire maltais ?
14075 — Je ne le sais pas, dit-il, je n’en suis pas sûr.
14076 Voici toutefois un petit morceau de ruban qui, si j’en juge par sa forme et son aspect graisseux, a évidemment servi à nouer les cheveux en une de ces longues queues qui rendent les marins si fiers et si farauds.
14077 En outre, ce nœud est un de ceux que peu de personnes savent faire, excepté les marins, et il est particulier aux Maltais.
14078 J’ai ramassé le ruban au bas de la chaîne du paratonnerre. Il est impossible qu’il ait appartenu à l’une des deux victimes.
14079 Après tout, si je me suis trompé en induisant de ce ruban que le Français est marin appartenant à un navire maltais, je n’aurai fait de mal à personne avec mon annonce.
14080 Si je suis dans l’erreur, il supposera simplement que j’ai été fourvoyé par quelque circonstance dont il ne prendra pas la peine de s’enquérir.
14081 Mais, si je suis dans le vrai, il y a un grand point de gagné. Le Français, qui a connaissance du meurtre, bien qu’il en soit innocent, hésitera naturellement à répondre à l’annonce, – à réclamer son orang-outang.
14082 Il raisonnera ainsi : « Je suis innocent ; je suis pauvre ; mon orang-outang est d’un grand prix ; – c’est presque une fortune dans une situation comme la mienne ; – pourquoi le perdrais-je par quelques niaises appréhensions de danger ? Le voilà, il est sous ma main.
14083 On l’a trouvé dans le bois de Boulogne, – à une grande distance du théâtre du meurtre.
14084 Soupçonnera-t-on jamais qu’une bête brute ait pu faire le coup ? La police est dépistée, – elle n’a pu retrouver le plus petit fil conducteur.
14085 Quand même on serait sur la piste de l’animal, il serait impossible de me prouver que j’aie eu connaissance de ce meurtre, ou de m’incriminer en raison de cette connaissance.
14086 Enfin, et avant tout, je suis connu. Le rédacteur de l’annonce me désigne comme le propriétaire de la bête.
14087 Mais je ne sais pas jusqu’à quel point s’étend sa certitude.
14088 Si j’évite de réclamer une propriété d’une aussi grosse valeur, qui est connue pour m’appartenir, je puis attirer sur l’animal un dangereux soupçon.
14089 Ce serait de ma part une mauvaise politique d’appeler l’attention sur moi ou sur la bête.
14090 Je répondrai décidément à l’avis du journal, je reprendrai mon orang-outang, et je l’enfermerai solidement jusqu’à ce que cette affaire soit oubliée. »
14091 En ce moment, nous entendîmes un pas qui montait l’escalier.
14092 — Apprêtez-vous, dit Dupin, prenez vos pistolets, mais ne vous en servez pas, – ne les montrez pas avant un signal de moi.
14093 On avait laissé ouverte la porte cochère, et le visiteur était entré sans sonner et avait gravi plusieurs marches de l’escalier. Mais on eût dit maintenant qu’il hésitait.
14094 Nous l’entendions redescendre. Dupin se dirigea vivement vers la porte, quand nous l’entendîmes qui remontait.
14095 Cette fois, il ne battit pas en retraite, mais s’avança délibérément et frappa à la porte de notre chambre.
14096 — Entrez, dit Dupin d’une voix gaie et cordiale.
14097 Un homme se présenta. C’était évidemment un marin, – un grand, robuste et musculeux individu, avec une expression d’audace de tous les diables qui n’était pas du tout déplaisante.
14098 Sa figure, fortement hâlée, était plus qu’à moitié cachée par les favoris et les moustaches.
14099 Il portait un gros bâton de chêne, mais ne semblait pas autrement armé.
14100 Il nous salua gauchement, et nous souhaita le bonsoir avec un accent français qui, bien que légèrement bâtardé de suisse, rappelait suffisamment une origine parisienne.
14101 — Asseyez-vous, mon ami, dit Dupin ; je suppose que vous venez pour votre orang-outang.
14102 Sur ma parole, je vous l’envie presque ; il est remarquablement beau et c’est sans doute une bête d’un grand prix. Quel âge lui donnez-vous bien ?
14103 Le matelot aspira longuement, de l’air d’un homme qui se trouve soulagé d’un poids intolérable, et répliqua d’une voix assurée :
14104 — Je ne saurais trop vous dire ; cependant, il ne peut guère avoir plus de quatre ou cinq ans. Est-ce que vous l’avez ici ?
14105 — Oh ! non ; nous n’avions pas de lieu commode pour l’enfermer. Il est dans une écurie de manège près d’ici, rue Dubourg.
14106 Vous pourrez l’avoir demain matin. Ainsi vous êtes en mesure de prouver votre droit de propriété ?
14107 — Oui, monsieur, certainement.
14108 — Je serais vraiment peiné de m’en séparer, – dit Dupin.
14109 — Je n’entends pas, dit l’homme, que vous ayez pris tant de peine pour rien ; je n’y ai pas compté. Je payerai volontiers une récompense à la personne qui a retrouvé l’animal, une récompense raisonnable s’entend.
14110 — Fort bien, répliqua mon ami, tout cela est fort juste, en vérité. Voyons, – que donneriez-vous bien ? Ah ! je vais vous le dire.
14111 Voici quelle sera ma récompense : vous me raconterez tout ce que vous savez relativement aux assassinats de la rue Morgue.
14112 Dupin prononça ces derniers mots d’une voix très-basse et fort tranquillement.
14113 Il se dirigea vers la porte avec la même placidité, la ferma, et mit la clef dans sa poche. Il tira alors un pistolet de son sein, et le posa sans le moindre émoi sur la table.
14114 La figure du marin devint pourpre, comme s’il en était aux agonies d’une suffocation.
14115 Il se dressa sur ses pieds et saisit son bâton ; mais, une seconde après, il se laissa retomber sur son siège, tremblant violemment et la mort sur le visage.
14116 Il ne pouvait articuler une parole. Je le plaignais du plus profond de mon cœur.
14117 — Mon ami, dit Dupin d’une voix pleine de bonté, vous vous alarmez sans motif, – je vous assure. Nous ne voulons vous faire aucun mal.
14118 Sur mon honneur de galant homme et de Français, nous n’avons aucun mauvais dessein contre vous.
14119 Je sais parfaitement que vous êtes innocent des horreurs de la rue Morgue. Cependant, cela ne veut pas dire que vous n’y soyez pas quelque peu impliqué.
14120 Le peu que je vous ai dit doit vous prouver que j’ai eu sur cette affaire des moyens d’information dont vous ne vous seriez jamais douté.
14121 Maintenant, la chose est claire pour nous. Vous n’avez rien fait que vous ayez pu éviter, – rien, à coup sûr, qui vous rende coupable. Vous auriez pu voler impunément ; vous n’avez même pas été coupable de vol.
14122 Vous n’avez rien à cacher ; vous n’avez aucune raison de cacher quoi que ce soit. D’un autre côté, vous êtes contraint par tous les principes de l’honneur à confesser tout ce que vous savez.
14123 Un homme innocent est actuellement en prison, accusé du crime dont vous pouvez indiquer l’auteur.
14124 Pendant que Dupin prononçait ces mots, le matelot avait recouvré, en grande partie, sa présence d’esprit ; mais toute sa première hardiesse avait disparu.
14125 — Que Dieu me soit en aide ! dit-il après une petite pause, – je vous dirai tout ce que je sais sur cette affaire ; mais je n’espère pas que vous en croyiez la moitié, – je serais vraiment un sot, si je l’espérais !
14126 Cependant, je suis innocent, et je dirai tout ce que j’ai sur le cœur, quand même il m’en coûterait la vie.
14127 Voici en substance ce qu’il nous raconta : il avait fait dernièrement un voyage dans l’archipel indien.
14128 Une bande de matelots, dont il faisait partie, débarqua à Bornéo et pénétra dans l’intérieur pour y faire une excursion d’amateurs.
14129 Lui et un de ses camarades avaient pris l’orang-outang. Ce camarade mourut, et l’animal devint donc sa propriété exclusive, à lui.
14130 Après bien des embarras causés par l’indomptable férocité du captif pendant la traversée, il réussit à la longue à le loger sûrement dans sa propre demeure à Paris, et, pour ne pas attirer sur lui-même l’insupportable curiosité des voisins, il avait soigneusement enfermé l’animal, jusqu’à ce qu’il l’eût guéri d’une blessure au pied qu’il s’était faite à bord avec une esquille.
14131 Son projet, finalement, était de le vendre.
14132 Comme il revenait, une nuit, ou plutôt un matin, – le matin du meurtre, – d’une petite orgie de matelots, il trouva la bête installée dans sa chambre à coucher ; elle s’était échappée du cabinet voisin, où il la croyait solidement enfermée.
14133 Un rasoir à la main et toute barbouillée de savon, elle était assise devant un miroir, et essayait de se raser, comme sans doute elle l’avait vu faire à son maître en l’épiant par le trou de la serrure.
14134 Terrifié en voyant une arme si dangereuse dans les mains d’un animal aussi féroce, parfaitement capable de s’en servir, l’homme, pendant quelques instants, n’avait su quel parti prendre.
14135 D’habitude, il avait dompté l’animal, même dans ses accès les plus furieux, par des coups de fouet, et il voulut y recourir cette fois encore.
14136 Mais, en voyant le fouet, l’orang-outang bondit à travers la porte de la chambre, dégringola par les escaliers, et, profitant d’une fenêtre ouverte par malheur, il se jeta dans la rue.
14137 Le Français, désespéré, poursuivit le singe ; celui-ci, tenant toujours son rasoir d’une main, s’arrêtait de temps en temps, se retournait, et faisait des grimaces à l’homme qui le poursuivait, jusqu’à ce qu’il se vît près d’être atteint, puis il reprenait sa course. Cette chasse dura ainsi un bon bout de temps.
14138 Les rues étaient profondément tranquilles, et il pouvait être trois heures du matin.
14139 En traversant un passage derrière la rue Morgue, l’attention du fugitif fut attirée par une lumière qui partait de la fenêtre de madame l’Espanaye, au quatrième étage de sa maison.
14140 Il se précipita vers le mur, il aperçut la chaîne du paratonnerre, y grimpa avec une inconcevable agilité, saisit le volet, qui était complètement rabattu contre le mur, et, en s’appuyant dessus, il s’élança droit sur le chevet du lit.
14141 Toute cette gymnastique ne dura pas une minute. Le volet avait été repoussé contre le mur par le bond que l’orang-outang avait fait en se jetant dans la chambre.
14142 Cependant, le matelot était à la fois joyeux et inquiet.
14143 Il avait donc bonne espérance de ressaisir l’animal, qui pouvait difficilement s’échapper de la trappe où il s’était aventuré, et d’où on pouvait lui barrer la fuite.
14144 D’un autre côté il y avait lieu d’être fort inquiet de ce qu’il pouvait faire dans la maison. Cette dernière réflexion incita l’homme à se remettre à la poursuite de son fugitif.
14145 Il n’est pas difficile pour un marin de grimper à une chaîne de paratonnerre ; mais, quand il fut arrivé à la hauteur de la fenêtre, située assez loin sur sa gauche, il se trouva fort empêché ; tout ce qu’il put faire de mieux fut de se dresser de manière à jeter un coup d’œil dans l’intérieur de la chambre.
14146 Mais ce qu’il vit lui fit presque lâcher prise dans l’excès de sa terreur.
14147 C’était alors que s’élevaient les horribles cris qui, à travers le silence de la nuit, réveillèrent en sursaut les habitants de la rue Morgue.
14148 Madame l’Espanaye et sa fille, vêtus de leurs toilettes de nuit, étaient sans doute occupées à ranger quelques papiers dans le coffret de fer dont il a été fait mention, et qui avait été traîné au milieu de la chambre.
14149 Il était ouvert, et tout son contenu était éparpillé sur le parquet.
14150 Les victimes avaient sans doute le dos tourné à la fenêtre ; et, à en juger par le temps qui s’écoula entre l’invasion de la bête et les premiers cris, il est probable qu’elles ne l’aperçurent pas tout de suite.
14151 Le claquement du volet a pu être vraisemblablement attribué au vent.
14152 Quand le matelot regarda dans la chambre, le terrible animal avait empoigné madame l’Espanaye par ses cheveux qui étaient épars et qu’elle peignait, et il agitait le rasoir autour de sa figure, en imitant les gestes d’un barbier.
14153 La fille était par terre, immobile ; elle s’était évanouie.
14154 Les cris et les efforts de la vieille dame, pendant lesquels les cheveux lui furent arrachés de la tête, eurent pour effet de changer en fureur les dispositions probablement pacifiques de l’orang-outang.
14155 D’un coup rapide de son bras musculeux, il sépara presque la tête du corps. La vue du sang transforma sa fureur en frénésie. Il grinçait des dents, il lançait du feu par les yeux.
14156 Il se jeta sur le corps de la jeune personne, il lui ensevelit ses griffes dans la gorge, et les y laissa jusqu’à ce qu’elle fût morte.
14157 Ses yeux égarés et sauvages tombèrent en ce moment sur le chevet du lit, au-dessus duquel il put apercevoir la face de son maître, paralysée par l’horreur.
14158 La furie de la bête, qui sans aucun doute se souvenait du terrible fouet, se changea immédiatement en frayeur.
14159 Sachant bien qu’elle avait mérité un châtiment, elle semblait vouloir cacher les traces sanglantes de son action, et bondissait à travers la chambre dans un accès d’agitation nerveuse, bousculant et brisant les meubles à chacun de ses mouvements, et arrachant les matelas du lit.
14160 Finalement, elle s’empara du corps de la fille, et le poussa dans la cheminée, dans la posture où elle fut trouvée, puis de celui de la vieille dame qu’elle précipita la tête la première à travers la fenêtre.
14161 Comme le singe s’approchait de la fenêtre avec son fardeau tout mutilé, le matelot épouvanté se baissa, et, se laissant couler le long de la chaîne sans précautions, il s’enfuit tout d’un trait jusque chez lui, redoutant les conséquences de cette atroce boucherie, et, dans sa terreur, abandonnant volontiers tout souci de la destinée de son orang-outang.
14162 Les voix entendues par les gens de l’escalier étaient ses exclamations d’horreur et d’effroi mêlées aux glapissements diaboliques de la bête.
14163 Je n’ai presque rien à ajouter. L’orang-outang s’était sans doute échappé de la chambre par la chaîne du paratonnerre, juste avant que la porte fût enfoncée.
14164 En passant par la fenêtre, il l’avait évidemment refermée. Il fut rattrapé plus tard par le propriétaire lui-même, qui le vendit pour un bon prix au Jardin des plantes.
14165 Lebon fut immédiatement relâché, après que nous eûmes raconté toutes les circonstances de l’affaire, assaisonnées de quelques commentaires de Dupin, dans le cabinet même du préfet de police.
14166 Ce fonctionnaire, quelque bien disposé qu’il fût envers mon ami, ne pouvait pas absolument déguiser sa mauvaise humeur en voyant l’affaire prendre cette tournure, et se laissa aller à un ou deux sarcasmes sur la manie des personnes qui se mêlaient de ses fonctions.
14167 — Laissez-le parler, dit Dupin, qui n’avait pas jugé à propos de répliquer. Laissez-le jaser, cela allégera sa conscience. Je suis content de l’avoir battu sur son propre terrain.
14168 Néanmoins, qu’il n’ait pas pu débrouiller ce mystère, il n’y a nullement lieu de s’en étonner, et cela est moins singulier qu’il ne le croit ; car, en vérité, notre ami le préfet est un peu trop fin pour être profond. Sa science n’a pas de base.
14169 Elle est tout en tête et n’a pas de corps, comme les portraits de la déesse Laverna, – ou, si vous aimez mieux, tout en tête et en épaules, comme une morue.
14170 Mais, après tout, c’est un brave homme. Je l’adore particulièrement pour un merveilleux genre de cant auquel il doit sa réputation de génie.
14171 Je veux parler de sa manie de nier ce qui est, et d’expliquer ce qui n’est pas[2].
14177 Aux dieux, suivant les lois, rends de justes hommages ;
14178 Respecte le serment, les héros et les sages ;
14179 Honore tes parents, tes rois, tes bienfaiteurs ;
14180 Choisi parmi tes amis les hommes les meilleurs.
14181 Sois obligeant et doux, sois facile en affaires.
14182 Ne hais pas ton ami pour des fautes légères ;
14183 Sers de tout ton pouvoir la cause du bon droit ;
14184 Qui fait tout ce qu’il peut fait toujours ce qu’il doit.
14185 Mais sache réprimer comme un maître sévère,
14186 L’appétit, le sommeil, Vénus et la colère.
14187 Ne forfais à l’honneur ni de près ni de loin,
14188 Et seul, sois pour toi-même un rigoureux témoin.
14189 Sois juste en action et non pas en paroles ;
14190 Ne donne pas au mal de prétextes frivoles.
14191 Le sort nous enrichit, il peut nous appauvrir ;
14192 Mais, faibles ou puissants, nous devons tous mourir.
14193 À ta part de douleurs ne sois point réfractaire ;
14194 Accepte le remède utile et salutaire,
14195 Et sache que toujours les hommes vertueux,
14196 Des mortels affligés sont les moins malheureux.
14197 Aux injustes propos que ton cœur se résigne ;
14198 Laisse parler le monde et suis toujours ta ligne.
14199 Mais surtout ne fais rien par l’exemple emporté,
14200 Qui soit sans rectitude et sans utilité.
14201 Fais marcher devant toi le conseil qui t’éclaire,
14202 Pour que l’absurdité ne vienne pas derrière.
14203 La sottise est toujours le plus grand des malheurs,
14204 Et l’homme sans conseil répond de ses erreurs.
14205 N’agis point sans savoir, sois zélé pour apprendre :
14206 Prête à l’étude un temps que le bonheur doit rendre.
14207 Ne sois pas négligent du soin de ta santé ;
14208 Mais prends le nécessaire avec sobriété.
14209 Tout ce qui ne peut nuire est permis dans la vie :
14210 Sois élégant et pur sans exciter l’envie.
14211 Fuis et la négligence et le faste insolent :
14212 Le luxe le plus simple est le plus excellent.
14213 N’agis point sans songer à ce que tu vas faire,
14214 Et réfléchis, le soir, sur ta journée entière.
14215 Qu’ai-je fait ? qu’ai-je ouï ? que dois-je regretter ?
14216 Vers la vertu divine ainsi tu peux monter.
14217 Je t’en prends à témoin, Tétractys, ineffable,
14218 Des formes et du temps fontaine inépuisable ;
14219 Et toi qui sais prier, quand les dieux sont pour toi,
14220 Achève leur ouvrage et travaille avec foi.
14221 Tu parviendras bientôt et sans peine à connaître
14222 D’où procède, où s’arrête, où retourne ton être ;
14223 Sans crainte et sans désirs tu sauras les secrets
14224 Que la nature voile aux mortels indiscrets.
14225 Tu fouleras aux pieds cette faiblesse humaine
14226 Qu’au hasard et sans but la fatalité mène.
14227 Tu sauras qui conduit l’avenir incertain,
14228 Et quel démon caché tient les fils du destin.
14229 Tu monteras alors sur le char de lumière,
14230 Esprit victorieux et roi de la matière.
14231 Tu comprendras de Dieu le règne paternel,
14232 Et tu pourras t’asseoir dans un calme éternel.
14236 LES VERS DORÉS ATTRIBUÉS À PYTHAGORE
14237 TRADUITS PAR M. P.-C. LÉVESQUE
14238 de l’Académie des Inscriptions et Belles-Lettres
14239 I. Révère les dieux immortels. C’est ton premier devoir. Honore-les comme il est ordonné par la loi.
14240 II. Respecte le serment. Vénère aussi les héros, dignes de tant d’admiration, et les demeures terrestres ; rends-leur le culte qui leur est dû.
14241 III. Respecte ton père et ta mère, et tes proches parents.
14242 IV. Choisis pour ton ami l’homme que tu connais le plus vertueux. Ne résiste point à la douceur de ses conseils, et suis ses utiles exemples.
14243 V. Crains de te brouiller avec ton ami pour une faute légère.
14244 VI. Si tu peux faire le bien, tu le dois : la puissance est ici voisine de la nécessité. Tels sont les préceptes que tu dois suivre.
14245 VII. Prends l’habitude de commander à la gourmandise, au sommeil, à la luxure, à la colère.
14246 VIII. Ne fais rien de honteux en présence des autres ni dans le secret. Que ta première loi soit de te respecter toi-même.
14247 IX. Que l’équité préside à toutes tes actions, qu’elle accompagne toutes tes paroles.
14248 X. Que la raison te conduise jusque dans les moindres choses.
14249 XI. Souviens-toi bien que tous les hommes sont destinés à la mort.
14250 XII. La fortune se plaît à changer : elle se laisse posséder, elle s’échappe. Éprouves-tu quelques-uns de ces revers que les destins font éprouver aux mortels ? sache les supporter avec patience ; ne t’indigne pas contre le sort. Il est permis de chercher à réparer un malheur ; mais sois bien persuadé que la fortune n’envoie pas aux mortels vertueux des maux au-dessus de leurs forces.
14251 XIII. Il se tient parmi les hommes de bons discours et de mauvais propos. Ne te laisse pas effrayer par de vaines paroles : qu’elles ne te détournent pas des projets honnêtes que tu as formés.
14252 XIV. Tu te vois attaqué par le mensonge ? prends patience, supporte ce mal avec douceur.
14253 XV. Observe bien ce qui reste à te prescrire ; que personne par ses actions, par ses discours, ne puisse t’engager à rien dire, à rien faire qui doive te nuire un jour.
14254 XVI. Consulte-toi bien avant d’agir ; crains, par trop de précipitation, d’avoir à rougir de ta folie. Dire et faire des sottises est le partage d’un sot.
14255 XVII. Ne commence rien dont tu puisses te repentir dans la suite. Garde-toi d’entreprendre ce que tu ne sais pas faire, et commence par t’instruire de ce que tu dois savoir. C’est ainsi que tu mèneras une vie délicieuse.
14256 XVIII. Ne néglige pas ta santé : donne à ton corps, mais avec modération, le boire, le manger, l’exercice. La mesure que je te prescris est celle que tu ne saurais passer sans te nuire.
14257 XIX. Que ta table soit saine, que le luxe en soit banni.
14258 XX. Évite de rien faire qui puisse t’attirer l’envie.
14259 XXI. Ne cherche point à briller par des dépenses déplacées, comme si tu ignorais ce qui est convenable et beau. Ne te pique pas non plus d’une épargne excessive. Rien n’est préférable à la juste mesure qu’il faut observer en toutes choses.
14260 XXII. N’entame point un projet qui doive tourner contre toi-même : réfléchis avant d’entreprendre.
14261 XXIII. N’abandonne pas tes yeux aux douceurs du sommeil avant d’avoir examiné par trois fois les actions de ta journée. Quelle faute ai-je commise ? Qu’ai-je fait ? À quel devoir ai-je manqué ? Commence par la première de tes actions, et parcours ainsi toutes les autres. Reproche-toi ce que tu as fait de mal ; jouis de ce que tu as fait de bien.
14262 XXIV. Médite sur les préceptes que je viens de te donner, travaille à les mettre en pratique, apprends à les aimer. Ils te conduiront sur les traces de la divine vertu ; j’en jure par celui qui a transmis dans nos âmes le sacré quaternaire[1] source de la nature éternelle.
14263 XXV. Avant de rien commencer, adresse tes vœux aux immortels qui seuls peuvent consommer ton ouvrage. C’est en suivant ces pratiques que tu parviendras à connaître par quelle concorde les dieux sont liés aux mortels, quels sont les passages de tous les êtres, et quelle puissance les domine. Tu connaîtras, comme il est juste, que la nature est, en tout, semblable à elle-même. Alors tu cesseras d’espérer ce que tu espérais en vain, et rien ne te sera caché.
14264 XXVI. Tu connaîtras que les hommes sont eux-mêmes les artisans de leurs malheurs. Infortunés ! ils ne savent pas voir les biens qui sont sous leurs yeux ; leurs oreilles se ferment à la vérité qui leur parle. Combien peu connaissent les vrais remèdes de leurs maux ! C’est donc ainsi que la destinée blesse l’entendement des humains ! Semblables à des cylindres fragiles, ils roulent çà et là, se heurtant sans cesse, et se brisant les uns contre les autres.
14265 XXVII. La triste discorde, née avec eux, les accompagne toujours et les blesse, sans se laisser apercevoir. Il ne faut pas lutter contre elle, mais la fuir en cédant.
14266 XXVIII. Ô Jupiter, père de tous les humains, tu pourrais les délivrer des maux qui les accablent, leur faire connaître qui est le génie funeste auquel ils s’abandonnent.
14267 XXIX. Mortel, prends une juste confiance ; c’est des dieux mêmes que les humains tirent leur origine. La sainte nature leur découvre tous ses secrets les plus cachés. Si elle daigne te les communiquer, il ne te sera pas difficile de remplir mes préceptes. Cherche des remèdes aux maux que tu endures : ton âme recouvrera bientôt la santé.
14268 XXX. Mais abstiens-toi des aliments que je t’ai défendus. Apprends à discerner ce qui est nécessaire dans la purification et la délivrance de l’âme. Examine tout ; donne à ta raison la première place et, content de te laisser conduire, abandonne-lui les rênes.
14269 XXXI. Ainsi, quand tu auras quitté les dépouilles mortelles, tu monteras dans l’air libre ; tu deviendras un dieu immortel et la mort n’aura plus d’empire sur toi.
14270 Fin des vers dorés de Pythagore
14271 Note : Chez les Pythagoriciens, la monade ou l’unité représente Dieu-même, parce qu’elle n’est engendrée par aucun nombre, qu’elle les engendre tous, qu’elle est simple et sans aucune composition. La dyade, ou le nombre deux, est l’image de la nature créée, parce qu’elle est le premier produit de l’unité, parce qu’elle est inspirée, parce qu’ayant des parties elle peut se décomposer et se défendre. La monade et la dyade réunies forment le ternaire, et représentent l’immensité de tout ce qui existe, l’être immuable et la matière altérable et changeante. J’ignore par quelle propriété le quaternaire, le nombre quatre, est encore un emblème de la divinité.
14278 Épître du Feu Philosophique
14279 Lettre concernant la pierre dite philosophale
14280 Jean Pontanus
14281 in Theatrum Chimicum, 1614, t. III
14282 « Nous affirmons, au contraire, — et l’on peut avoir foi en notre sincérité, — qu’il sera impossible d’obtenir le moindre succès dans l’Œuvre si l’on a pas une connaissance parfaite de ce qu’est le Vase des Philosophes ni de quelle manière il faut le fabriquer. Pontanus avoue qu’avant de connaître ce vaisseau secret il avait recommencé, sans succès, plus de deux cents fois le même travail, quoiqu’il besognât sur les matières propres et convenables, et selon la méthode régulière. L’artiste doit faire lui-même son vaisseau ; c’est une maxime de l’art. N’entreprenez rien, en conséquence, tant que vous n’aurez pas reçu toute la lumière sur cette coquille de l’œuf qualifiée secretum secretorum chez les maîtres du Moyen Âge. »
14283 — Fulcanelli, Le Mystère des Cathédrales, p. 204-205
14284 Moi, Jean Pontanus, qui suis allé en plusieurs régions et royaumes afin de connaître certainement ce que c’est que la Pierre des Philosophes, après avoir parcouru tous les côtés du monde, je n’ai trouvé que des faux Philosophes et des trompeurs.
14285 Néanmoins, étudiant toujours dans les livres des Sages, et mes doutes s’augmentant, j’ai trouvé la vérité ; mais nonobstant que j’eusse la connaissance de la matière, j’ai erré deux cents fois avant que de trouver l’opération et pratique de cette vraie matière.
14286 Premièrement, j’ai commencé mes opérations par les putréfactions du Corps de cette matière, pendant neuf mois, et je n’ai rien trouvé.
14287 Je l’ai mise au bain-marie pendant quelque temps, et j’ai semblablement erré. Je l’ai tenue et posée dans un feu de calcination pendant trois mois, et j’ai mal opéré.
14288 Tous les genres et manières de distillations et sublimations, comme disent ou semblent dire les Philosophes — tel Geber, Archélaüs et presque tous les autres — je les ai tentés et essayés, et n’ai pareillement rien trouvé.
14289 Enfin, j’ai tâché de parvenir et parfaire le sujet de tout l’Art d’Alchimie, de toutes les manières imaginables, qui se font par le fumier, le bain, les cendres, et par mille autres genres de feux, dont les Philosophes font mention dans leurs livres ; mais je n’ai rien découvert de bon.
14290 C’est pourquoi, je me mis pendant trois ans continuels à étudier les livres des Philosophes, entre autres le seul Hermès, les brèves paroles duquel comprennent tout le magistère de la Pierre ; quoiqu’il parle assez obscurément des choses supérieures et inférieures, du Ciel et de la Terre.
14291 Toute notre application et notre soin, donc, ne doit être qu’à la connaissance de la vraie pratique, dans le premier, le second, et le troisième œuvre.
14292 Ce n’est point le feu de bain, de fumier, ni de cendres, ni aucun de tous les autres feux que nous chantent les Philosophes, et nous décrivent dans leurs livres.
14293 Qu’est-ce donc que ce feu qui parfait et achève tout l’œuvre, depuis le commencement jusqu’à la fin ?
14294 Certainement tous les Philosophes l’ont caché ; mais, pour moi, touché d’un mouvement de pitié, je le veux déclarer avec l’entier accomplissement de tout l’œuvre.
14295 La Pierre des Philosophes est unique, et une, mais cachée et enveloppée en la multiplicité de différents noms, et avant que tu la puisses connaître, tu te donneras bien de la peine ; difficilement la trouveras-tu de ton propre génie.
14296 Elle est aqueuse, aérienne, ignée, terrestre, flegmatique, colérique, sanguineuse et mélancolique. Elle est un soufre et pareillement Argent vif.
14297 Elle a plusieurs superfluités, qui, je t’assure par Dieu vivant, se convertissent en vraie et unique Essence, moyennant notre feu.
14298 Et celui qui sépare quelque chose du sujet — croyant cela nécessaire, — ne connaît assurément rien à la Philosophie.
14299 Car le superflu, le sale, l’immonde, le vilain, le bourbeux, et, généralement toute la substance du sujet, se parfait en corps spirituel fixe, par le moyen de notre feu. Ce que les Sages n’ont jamais révélé, et, fait que peu de gens parviennent à cet Art ; s’imaginant que quelque chose de sale et de vilain doit être séparé.
14300 Maintenant il faut faire paraître, et tirer dehors les propriétés de notre feu ; s’il convient à notre matière selon la manière dont j’ai parlé, c’est-à-dire s’il est transmué avec la matière.
14301 Ce feu ne brûle point la matière, il ne sépare rien de la matière, ne divise ni n’écarte les parties pures des impures, ainsi que disent tous les Philosophes, mais convertit tout le sujet en pureté.
14302 Il ne sublime pas comme Geber fait les sublimations, et Arnaud pareillement, et tous les autres qui ont parlé des sublimations et distillations. Il se fait et parfait en peu de temps.
14303 Ce feu est minéral, égal et continuel, il ne s’évapore point, si ce n’est qu’il soit trop excité ; il participe du soufre, il est pris et provient d’ailleurs que de la matière.
14304 Il rompt, dissout, et congèle toutes choses, et semblablement congèle et calcine ; il est difficile à trouver par l’industrie et par l’Art.
14305 Ce feu est l’abrégé et le raccourci de tout l’œuvre, sans prendre autre chose, du moins peu, et ce même feu s’introduit et est de médiocre ignition ; parce qu’avec ce petit feu tout l’œuvre est parfait, et sont faites, ensemble, toutes les requises et dues sublimations.
14306 Ceux qui liront Geber et tous les autres Philosophes, quand ils vivraient cent millions d’années, ne le sauront comprendre ; car ce feu ne se peut découvrir que par la seule et profonde méditation de la pensée, ensuite on le comprendra dans les livres, et non autrement.
14307 L’erreur en cet Art, ne consiste qu’en l’acquisition de ce feu, qui convertit la matière en la Pierre des Philosophes.
14308 Étudie-toi donc à ce feu, parce que si moi-même je l’eus premièrement trouvé, je n’eus pas erré deux cents fois sur la propre matière.
14309 À cause de quoi je ne m’étonne plus si tant de gens ne peuvent parvenir à l’accomplissement de l’œuvre.
14310 Ils errent, ont erré et erreront toujours, en ce que les Philosophes n’ont mis leur propre agent qu’en une chose, qu’Artéphius a nommée, mais il n’a parlé que pour lui.
14311 Si ce n’est que j’ai lu Artéphius, que je l’ai entendu et compris, jamais je ne serais parvenu à l’accomplissement de l’œuvre.
14312 Voici quelle est cette pratique : il faut prendre la matière avec toute diligence, la broyer physiquement et la mettre dans le feu, c’est-à-dire dans le fourneau ; mais il faut aussi connaître le degré et la proportion du feu.
14313 À savoir, il faut que le feu externe excite tant seulement la matière ; et, en peu de temps, ce feu, sans y mettre les mains en aucune manière, accomplira assurément tout l’œuvre.
14314 Parce qu’il putréfie, corrompt, engendre et parfera tout l’ouvrage, faisant paraître les trois principales couleurs, la noire, la blanche, la rouge.
14315 Et moyennant notre feu, la médecine se multipliera si elle est conjointe à la matière crue, non seulement en quantité mais aussi en vertu.
14316 Recherche donc de toutes les forces de ton esprit ce feu, et tu parviendras au but que tu t’es proposé ; car c’est lui qui fait tout l’œuvre, et il est la clef de tous les Philosophes, laquelle ils n’ont jamais révélée dans leurs livres.
14317 Si tu penses bien profondément aux propriétés du feu ci-dessus, tu la connaîtras, mais non autrement.
14318 Donc, touché d’un mouvement de pitié, j’ai écrit ceci ; mais, et afin que je me satisfasse, le feu n’est point transmué avec la matière, comme je l’ai dit ci-dessus.
14319 J’ai bien voulu le dire et en avertir les prudents de ces choses, pour qu’ils ne dépensent pas inutilement leur argent, mais qu’ils sachent auparavant ce qu’ils doivent chercher, et, par ce moyen, parviendront à la vérité de l’Art ; non pas autrement. À Dieu.
|
Added tests/fr/horla.res.txt version [036f6beeea].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 |
Guy de Maupassant
Le Horla (1887)
°°°°°
Le Horla, P. Ollendorff, 1895 [trente-cinquième édition] (pp. 3-68).
°°°°° °°°°°°°°°°
8 mai. – Quelle journée admirable ! J’ai passé toute la matinée étendu sur
^^^^^^
* 64:70 # 3514s : Accord de genre erroné : « matinée » est féminin, « étendu »
est masculin.
> Suggestions : étendue
l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et
l’ombrage tout entière. J’aime ce pays, et j’aime y vivre parce que j’y ai mes
racines, ces profondes et délicates racines, qui attachent un homme à la terre
où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on
mange, aux usages comme aux nourritures, aux locutions locales, aux intonations
des paysans, aux odeurs du sol, des villages et de l’air lui-même.
J’aime ma maison où j’ai grandi. De mes fenêtres, je vois la Seine qui coule,
le long de mon jardin, derrière la route, presque chez moi, la grande et large
Seine, qui va de Rouen au Havre, couverte de bateaux qui passent.
À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu
des clochers gothiques. Ils sont innombrables, frêles ou larges, dominés par la
flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air
bleu des belles matinées, jetant jusqu’à moi leur doux et lointain
bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus
fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit.
Comme il faisait bon ce matin !
Vers onze heures, un long convoi de navires, traînés par un remorqueur, gros
comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila
devant ma grille.
Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel,
°°°°°°°°°
venait un superbe trois-mats brésilien, tout blanc, admirablement propre et
luisant. Je le saluai, je ne sais pourquoi, tant ce navire me fit plaisir à
voir.
12 mai. – J’ai un peu de fièvre depuis quelques jours ; je me sens souffrant,
ou plutôt je me sens triste.
D’où viennent ces influences mystérieuses qui changent en découragement notre
bonheur et notre confiance en détresse. On dirait que l’air, l’air invisible
est plein d’inconnaissables Puissances, dont nous subissons les voisinages
mystérieux. Je m’éveille plein de gaîté, avec des envies de chanter dans la
gorge. – Pourquoi ? – Je descends le long de l’eau ; et soudain, après une
courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez
moi. – Pourquoi ? – Est-ce un frisson de froid qui, frôlant ma peau, a ébranlé
mes nerfs et assombri mon âme ? Est-ce la forme des nuages, ou la couleur du
jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé
ma pensée ? Sait-on ? Tout ce qui nous entoure, tout ce que nous voyons sans le
regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons
sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous,
sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets
rapides, surprenants et inexplicables ?
Comme il est profond, ce mystère de l’Invisible ! Nous ne le pouvons sonder
avec nos sens misérables, avec nos yeux qui ne savent apercevoir ni le trop
petit, ni le trop grand, ni le trop près, ni le trop loin, ni les habitants
d’une étoile, ni les habitants d’une goutte d’eau… avec nos oreilles qui nous
trompent, car elles nous transmettent les vibrations de l’air en notes sonores.
Elles sont des fées qui font ce miracle de changer en bruit ce mouvement et par
cette métamorphose donnent naissance à la musique, qui rend chantante
l’agitation muette de la nature… avec notre odorat, plus faible que celui du
chien… avec notre goût, qui peut à peine discerner l’âge d’un vin !
Ah ! si nous avions d’autres organes qui accompliraient en notre faveur
d’autres miracles, que de choses nous pourrions découvrir encore autour de
nous !
16 mai. – Je suis malade, décidément ! Je me portais si bien le mois dernier !
J’ai la fièvre, une fièvre atroce, ou plutôt un énervement fiévreux, qui rend
mon âme aussi souffrante que mon corps. J’ai sans cesse cette sensation
affreuse d’un danger menaçant, cette appréhension d’un malheur qui vient ou de
la mort qui approche, ce pressentiment qui est sans doute l’atteinte d’un mal
encore inconnu, germant dans le sang et dans la chair.
18 mai. – Je viens d’aller consulter mon médecin, car je ne pouvais plus
dormir. Il m’a trouvé le pouls rapide, l’œil dilaté, les nerfs vibrants, mais
sans aucun symptôme alarmant. Je dois me soumettre aux douches et boire du
bromure de potassium.
25 mai. – Aucun changement ! Mon état, vraiment, est bizarre. À mesure
qu’approche le soir, une inquiétude incompréhensible m’envahit, comme si la
nuit cachait pour moi une menace terrible. Je dîne vite, puis j’essaie de
lire ; mais je ne comprends pas les mots ; je distingue à peine les lettres. Je
marche alors dans mon salon de long en large, sous l’oppression d’une crainte
confuse et irrésistible, la crainte du sommeil et la crainte du lit.
Vers dix heures, je monte dans ma chambre. À peine entré, je donne deux tours
de clef, et je pousse les verrous ; j’ai peur… de quoi ?… Je ne redoutais rien
jusqu’ici… j’ouvre mes armoires, je regarde sous mon lit ; j’écoute… j’écoute…
quoi ?… Est-ce étrange qu’un simple malaise, un trouble de la circulation
peut-être, l’irritation d’un filet nerveux, un peu de congestion, une toute
petite perturbation dans le fonctionnement si imparfait et si délicat de notre
machine vivante, puisse faire un mélancolique du plus joyeux des hommes, et un
poltron du plus brave ? Puis, je me couche, et j’attends le sommeil comme on
attendrait le bourreau. Je l’attends avec l’épouvante de sa venue ; et mon cœur
bat, et mes jambes frémissent ; et tout mon corps tressaille dans la chaleur
des draps, jusqu’au moment où je tombe tout à coup dans le repos, comme on
tomberait pour s’y noyer, dans un gouffre d’eau stagnante. Je ne le sens pas
venir, comme autrefois, ce sommeil perfide, caché près de moi, qui me guette,
qui va me saisir par la tête, me fermer les yeux, m’anéantir.
Je dors – longtemps – deux ou trois heures – puis un rêve – non – un cauchemar
m’étreint. Je sens bien que je suis couché et que je dors,… je le sens et je le
^^
* 136:138 # 377p : Typographie : pas de virgule avant les points de
suspension.
> Suggestions : …
sais… et je sens aussi que quelqu’un s’approche de moi, me regarde, me palpe,
monte sur mon lit, s’agenouille sur ma poitrine, me prend le cou entre ses
mains et serre… serre… de toute sa force pour m’étrangler.
Moi, je me débats, lié par cette impuissance atroce, qui nous paralyse dans les
songes ; je veux crier, – je ne peux pas ; – je veux remuer, – je ne peux pas ;
– j’essaye, avec des efforts affreux, en haletant, de me tourner, de rejeter
cet être qui m’écrase et qui m’étouffe, – je ne peux pas !
Et soudain, je m’éveille, affolé, couvert de sueur. J’allume une bougie. Je
suis seul.
Après cette crise, qui se renouvelle toutes les nuits, je dors enfin, avec
calme, jusqu’à l’aurore.
2 juin. – Mon état s’est encore aggravé. Qu’ai-je donc ? Le bromure n’y fait
rien ; les douches n’y font rien. Tantôt, pour fatiguer mon corps, si las
pourtant, j’allai faire un tour dans la forêt de Roumare. Je crus d’abord que
°°°°°°°
l’air frais, léger et doux, plein d’odeur d’herbes et de feuilles, me versait
aux veines un sang nouveau, au cœur une énergie nouvelle. Je pris une grande
avenue de chasse, puis je tournai vers La Bouille, par une allée étroite, entre
deux armées d’arbres démesurément hauts qui mettaient un toit vert, épais,
presque noir, entre le ciel et moi.
Un frisson me saisit soudain, non pas un frisson de froid, mais un étrange
frisson d’angoisse.
Je hâtai le pas, inquiet d’être seul dans ce bois, apeuré sans raison,
stupidement, par la profonde solitude. Tout à coup, il me sembla que j’étais
suivi, qu’on marchait sur mes talons, tout près, à me toucher.
Je me retournai brusquement. J’étais seul. Je ne vis derrière moi que la droite
et large allée, vide, haute, redoutablement vide ; et de l’autre côté elle
s’étendait aussi à perte de vue, toute pareille, effrayante.
Je fermai les yeux. Pourquoi ? Et je me mis à tourner sur un talon, très vite,
comme une toupie. Je faillis tomber ; je rouvris les yeux ; les arbres
dansaient ; la terre flottait ; je dus m’asseoir. Puis, ah ! je ne savais plus
par où j’étais venu ! Bizarre idée ! Bizarre ! Bizarre idée ! Je ne savais plus
du tout. Je partis par le côté qui se trouvait à ma droite, et je revins dans
l’avenue qui m’avait amené au milieu de la forêt.
3 juin. – La nuit a été horrible. Je vais m’absenter pendant quelques semaines.
Un petit voyage, sans doute, me remettra.
2 juillet. – Je rentre. Je suis guéri. J’ai fait d’ailleurs une excursion
charmante. J’ai visité le mont Saint-Michel que je ne connaissais pas.
Quelle vision, quand on arrive, comme moi, à Avranches, vers la fin du jour !
°°°°°°°°°
La ville est sur une colline ; et on me conduisit dans le jardin public, au
bout de la cité. Je poussai un cri d’étonnement. Une baie démesurée s’étendait
devant moi, à perte de vue, entre deux côtes écartées se perdant au loin dans
les brumes ; et au milieu de cette immense baie jaune, sous un ciel d’or et de
clarté, s’élevait sombre et pointu un mont étrange, au milieu des sables. Le
soleil venait de disparaître, et sur l’horizon encore flamboyant se dessinait
le profil de ce fantastique rocher qui porte sur son sommet un fantastique
monument.
Dès l’aurore, j’allai vers lui. La mer était basse, comme la veille au soir, et
je regardais se dresser devant moi, à mesure que j’approchais d’elle, la
surprenante abbaye. Après plusieurs heures de marche, j’atteignis l’énorme bloc
de pierres qui porte la petite cité dominée par la grande église. Ayant gravi
la rue étroite et rapide, j’entrai dans la plus admirable demeure gothique
construite pour Dieu sur la terre, vaste comme une ville, pleine de salles
basses écrasées sous des voûtes et de hautes galeries que soutiennent de frêles
colonnes. J’entrai dans ce gigantesque bijou de granit, aussi léger qu’une
dentelle, couvert de tours, de sveltes clochetons, où montent des escaliers
tordus, et qui lancent dans le ciel bleu des jours, dans le ciel noir des
nuits, leurs têtes bizarres hérissées de chimères, de diables, de bêtes
fantastiques, de fleurs monstrueuses, et reliés l’un à l’autre par de fines
arches ouvragées.
Quand je fus sur le sommet, je dis au moine qui m’accompagnait : « Mon père,
comme vous devez être bien ici ! »
Il répondit : « Il y a beaucoup de vent, Monsieur » ; et nous nous mîmes à
causer en regardant monter la mer, qui courait sur le sable et le couvrait
d’une cuirasse d’acier.
Et le moine me conta des histoires, toutes les vieilles histoires de ce lieu,
des légendes, toujours des légendes.
Une d’elles me frappa beaucoup. Les gens du pays, ceux du mont, prétendent
qu’on entend parler la nuit dans les sables, puis qu’on entend bêler deux
chèvres, l’une avec une voix forte, l’autre avec une voix faible. Les
incrédules affirment que ce sont les cris des oiseaux de mer, qui ressemblent
tantôt à des bêlements, et tantôt à des plaintes humaines ; mais les pêcheurs
attardés jurent avoir rencontré rôdant sur les dunes, entre deux marées, autour
de la petite ville jetée ainsi loin du monde, un vieux berger, dont on ne voit
jamais la tête couverte de son manteau, et qui conduit, en marchant devant eux,
un bouc à figure d’homme et une chèvre à figure de femme, tous deux avec de
longs cheveux blancs et parlant sans cesse, se querellant dans une langue
inconnue, puis cessant soudain de crier pour bêler de toute leur force.
Je dis au moine : « Y croyez-vous ? »
Il murmura : « Je ne sais pas. »
Je repris : « S’il existait sur la terre d’autres êtres que nous, comment ne
les connaîtrions-nous point depuis longtemps : comment ne les auriez-vous pas
vus, vous ? comment ne les aurais-je pas vus, moi ? »
Il répondit : « Est-ce que nous voyons la cent-millième partie de ce qui
existe ? Tenez, voici le vent, qui est la plus grande force de la nature, qui
renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en
montagnes d’eau, détruit les falaises, et jette aux brisants les grands
navires, le vent qui tue, qui siffle, qui gémit, qui mugit, – l’avez-vous vu,
et pouvez-vous le voir ? Il existe, pourtant. »
Je me tus devant ce simple raisonnement. Cet homme était un sage ou peut-être
un sot. Je ne l’aurais pu affirmer au juste ; mais je me tus. Ce qu’il disait
là, je l’avais pensé souvent.
3 juillet. – J’ai mal dormi ; certes, il y a ici une influence fiévreuse, car
mon cocher souffre du même mal que moi. En rentrant hier, j’avais remarqué sa
pâleur singulière. Je lui demandai :
— Qu’est-ce que vous avez, Jean ?
— J’ai que je ne peux plus me reposer, Monsieur, ce sont mes nuits qui mangent
mes jours. Depuis le départ de Monsieur, cela me tient comme un sort.
Les autres domestiques vont bien cependant, mais j’ai grand peur d’être repris,
moi.
4 juillet. – Décidément, je suis repris. Mes cauchemars anciens reviennent.
Cette nuit, j’ai senti quelqu’un accroupi sur moi, et qui, sa bouche sur la
mienne, buvait ma vie entre mes lèvres. Oui, il la puisait dans ma gorge, comme
aurait fait une sangsue. Puis il s’est levé, repu, et moi je me suis réveillé,
tellement meurtri, brisé, anéanti, que je ne pouvais plus remuer. Si cela
continue encore quelques jours, je repartirai certainement.
5 juillet. – Ai-je perdu la raison ? Ce qui s’est passé, ce que j’ai vu la nuit
dernière est tellement étrange, que ma tête s’égare quand j’y songe !
Comme je le fais maintenant chaque soir j’avais fermé ma porte à clef ; puis,
ayant soif, je bus un demi-verre d’eau, et je remarquai par hasard que ma
carafe était pleine jusqu’au bouchon de cristal.
Je me couchai ensuite et je tombai dans un de mes sommeils épouvantables, dont
je fus tiré au bout de deux heures environ par une secousse plus affreuse
encore.
Figurez-vous un homme qui dort, qu’on assassine, et qui se réveille avec un
couteau dans le poumon, et qui râle, couvert de sang, et qui ne peut plus
respirer, et qui va mourir, et qui ne comprend pas – voilà.
Ayant enfin reconquis ma raison, j’eus soif de nouveau ; j’allumai une bougie
et j’allai vers la table où était posée ma carafe. Je la soulevai en la
penchant sur mon verre ; rien ne coula. – Elle était vide ! Elle était vide
complètement ! D’abord, je n’y compris rien ; puis, tout à coup, je ressentis
une émotion si terrible, que je dus m’asseoir, ou plutôt, que je tombai sur une
chaise ! puis, je me redressai d’un saut pour regarder autour de moi ! puis je
me rassis, éperdu d’étonnement et de peur, devant le cristal transparent ! Je
le contemplais avec des yeux fixes, cherchant à deviner. Mes mains
tremblaient ! On avait donc bu cette eau ? Qui ? Moi ? moi, sans doute ? Ce ne
pouvait être que moi ? Alors, j’étais somnambule, je vivais, sans le savoir, de
cette double vie mystérieuse qui fait douter s’il y a deux êtres en nous, ou si
un être étranger, inconnaissable et invisible, anime, par moments, quand notre
âme est engourdie, notre corps captif qui obéit à cet autre, comme à
nous-mêmes, plus qu’à nous-mêmes.
Ah ! qui comprendra mon angoisse abominable ? Qui comprendra l’émotion d’un
homme, sain d’esprit, bien éveillé, plein de raison et qui regarde épouvanté, à
travers le verre d’une carafe, un peu d’eau disparue pendant qu’il a dormi ! Et
je restai là jusqu’au jour, sans oser regagner mon lit.
6 juillet. – Je deviens fou. On a encore bu toute ma carafe cette nuit ; – ou
plutôt, je l’ai bue !
Mais, est-ce moi ? Est-ce moi ? Qui serait-ce ? Qui ? Oh ! mon Dieu ! Je
deviens fou ? Qui me sauvera ?
10 juillet. – Je viens de faire des épreuves surprenantes.
Décidément, je suis fou ! Et pourtant !
Le 6 juillet, avant de me coucher, j’ai placé sur ma table du vin, du lait, de
l’eau, du pain et des fraises.
On a bu – j’ai bu – toute l’eau, et un peu de lait. On n’a touché ni au vin, ni
au pain, ni aux fraises.
Le 7 juillet, j’ai renouvelé la même épreuve, qui a donné le même résultat.
Le 8 juillet, j’ai supprimé l’eau et le lait. On n’a touché à rien.
Le 9 juillet enfin, j’ai remis sur ma table l’eau et le lait seulement, en
ayant soin d’envelopper les carafes en des linges de mousseline blanche et de
ficeler les bouchons. Puis, j’ai frotté mes lèvres, ma barbe, mes mains avec de
la mine de plomb, et je me suis couché.
L’invincible sommeil m’a saisi, suivi bientôt de l’atroce réveil. Je n’avais
point remué ; mes draps eux-mêmes ne portaient pas de taches. Je m’élançai vers
ma table. Les linges enfermant les bouteilles étaient demeurés immaculés. Je
déliai les cordons, en palpitant de crainte. On avait bu toute l’eau ! on avait
bu tout le lait ! Ah ! mon Dieu !…
Je vais partir tout à l’heure pour Paris.
12 juillet. – Paris. J’avais donc perdu la tête les jours derniers ! J’ai dû
être le jouet de mon imagination énervée, à moins que je ne sois vraiment
somnambule, ou que j’aie subi une de ces influences constatées, mais
inexplicables jusqu’ici, qu’on appelle suggestions. En tout cas, mon affolement
touchait à la démence, et vingt-quatre heures de Paris ont suffi pour me
remettre d’aplomb.
Hier, après des courses et des visites, qui m’ont fait passer dans l’âme de
l’air nouveau et vivifiant, j’ai fini ma soirée au Théâtre-Français. On y
jouait une pièce d’Alexandre Dumas fils ; et cet esprit alerte et puissant a
achevé de me guérir. Certes, la solitude est dangereuse pour les intelligences
qui travaillent. Il nous faut, autour de nous, des hommes qui pensent et qui
parlent. Quand nous sommes seuls longtemps, nous peuplons le vide de fantômes.
Je suis rentré à l’hôtel très gai, par les boulevards. Au coudoiement de la
foule, je songeais, non sans ironie, à mes terreurs, à mes suppositions de
l’autre semaine, car j’ai cru, oui, j’ai cru qu’un être invisible habitait sous
mon toit. Comme notre tête est faible et s’effare, et s’égare vite, dès qu’un
petit fait incompréhensible nous frappe !
Au lieu de conclure par ces simples mots : « Je ne comprends pas parce que la
cause m’échappe », nous imaginons aussitôt des mystères effrayants et des
puissances surnaturelles.
14 juillet. – Fête de la République. Je me suis promené par les rues. Les
pétards et les drapeaux m’amusaient comme un enfant. C’est pourtant fort bête
d’être joyeux, à date fixe, par décret du gouvernement. Le peuple est un
troupeau imbécile, tantôt stupidement patient et tantôt férocement révolté. On
lui dit : « Amuse-toi. » Il s’amuse. On lui dit : « Va te battre avec le
voisin. » Il va se battre. On lui dit : « Vote pour l’Empereur. » Il vote pour
l’Empereur. Puis, on lui dit : « Vote pour la République. » Et il vote pour la
République.
Ceux qui le dirigent sont aussi sots ; mais au lieu d’obéir à des hommes, ils
obéissent à des principes, lesquels ne peuvent être que niais, stériles et
faux, par cela même qu’ils sont des principes, c’est-à-dire des idées réputées
certaines et immuables, en ce monde où l’on n’est sûr de rien, puisque la
lumière est une illusion, puisque le bruit est une illusion.
16 juillet. – J’ai vu hier des choses qui m’ont beaucoup troublé.
Je dînais chez ma cousine, Mme Sablé, dont le mari commande le 76e chasseurs à
Limoges. Je me trouvais chez elle avec deux jeunes femmes, dont l’une a épousé
un médecin, le docteur Parent, qui s’occupe beaucoup des maladies nerveuses et
des manifestations extraordinaires auxquelles donnent lieu en ce moment les
expériences sur l’hypnotisme et la suggestion.
Il nous raconta longtemps les résultats prodigieux obtenus par des savants
anglais et par les médecins de l’école de Nancy.
Les faits qu’il avança me parurent tellement bizarres, que je me déclarai tout
à fait incrédule.
« Nous sommes, affirmait-il, sur le point de découvrir un des plus importants
secrets de la nature, je veux dire, un de ses plus importants secrets sur cette
terre ; car elle en a certes d’autrement importants, là-bas, dans les étoiles.
Depuis que l’homme pense, depuis qu’il sait dire et écrire sa pensée, il se
sent frôlé par un mystère impénétrable pour ses sens grossiers et imparfaits,
et il tâche de suppléer, par l’effort de son intelligence, à l’impuissance de
ses organes. Quand cette intelligence demeurait encore à l’état rudimentaire,
cette hantise des phénomènes invisibles a pris des formes banalement
effrayantes. De là sont nées les croyances populaires au surnaturel, les
légendes des esprits rôdeurs, des fées, des gnomes, des revenants, je dirai
même la légende de Dieu, car nos conceptions de l’ouvrier-créateur, de quelque
religion qu’elles nous viennent, sont bien les inventions les plus médiocres,
les plus stupides, les plus inacceptables sorties du cerveau apeuré des
créatures. Rien de plus vrai que cette parole de Voltaire : « Dieu a fait
l’homme à son image, mais l’homme le lui a bien rendu. »
« Mais, depuis un peu plus d’un siècle, on semble pressentir quelque chose de
nouveau. Mesmer et quelques autres nous ont mis sur une voie inattendue, et
°°°°°°
nous sommes arrivés vraiment, depuis quatre ou cinq ans surtout, à des
résultats surprenants. »
Ma cousine, très incrédule aussi, souriait. Le docteur Parent lui dit : –
Voulez-vous que j’essaie de vous endormir, Madame ?
— Oui, je veux bien.
Elle s’assit dans un fauteuil et il commença à la regarder fixement en la
fascinant. Moi, je me sentis soudain un peu troublé, le cœur battant, la gorge
serrée. Je voyais les yeux de Mme Sablé s’alourdir, sa bouche se crisper, sa
poitrine haleter.
Au bout de dix minutes, elle dormait.
— Mettez-vous derrière elle, dit le médecin.
Et je m’assis derrière elle. Il lui plaça entre les mains une carte de visite
en lui disant : « Ceci est un miroir ; que voyez-vous dedans ? »
Elle répondit :
— Je vois mon cousin.
— Que fait-il ?
— Il se tord la moustache.
— Et maintenant ?
— Il tire de sa poche une photographie.
— Quelle est cette photographie ?
— La sienne.
C’était vrai ! Et cette photographie venait de m’être livrée, le soir même, à
l’hôtel.
— Comment est-il sur ce portrait ?
— Il se tient debout avec son chapeau à la main.
Donc elle voyait dans cette carte, dans ce carton blanc, comme elle eût vu dans
une glace.
Les jeunes femmes, épouvantées, disaient : « Assez ! Assez ! Assez ! »
Mais le docteur ordonna : « Vous vous lèverez demain à huit heures ; puis vous
irez trouver à son hôtel votre cousin, et vous le supplierez de vous prêter
cinq mille francs que votre mari vous demande et qu’il vous réclamera à son
prochain voyage. »
Puis il la réveilla.
En rentrant à l’hôtel, je songeais à cette curieuse séance et des doutes
m’assaillirent, non point sur l’absolue, sur l’insoupçonnable bonne foi de ma
cousine, que je connaissais comme une sœur, depuis l’enfance, mais sur une
supercherie possible du docteur. Ne dissimulait-il pas dans sa main une glace
qu’il montrait à la jeune femme endormie, en même temps que sa carte de
visite ? Les prestidigitateurs de profession font des choses autrement
singulières.
Je rentrai donc et je me couchai.
Or, ce matin, vers huit heures et demie, je fus réveillé par mon valet de
chambre, qui me dit :
— C’est Mme Sablé qui demande à parler à Monsieur tout de suite.
Je m’habillai à la hâte et je la reçus.
Elle s’assit fort troublée, les yeux baissés, et, sans lever son voile, elle me
dit :
— Mon cher cousin, j’ai un gros service à vous demander.
— Lequel, ma cousine ?
— Cela me gêne beaucoup de vous le dire, et pourtant, il le faut. J’ai besoin,
absolument besoin, de cinq mille francs.
— Allons donc, vous ?
— Oui, moi, ou plutôt mon mari, qui me charge de les trouver.
J’étais tellement stupéfait, que je balbutiais mes réponses. Je me demandais si
vraiment elle ne s’était pas moquée de moi avec le docteur Parent, si ce
n’était pas là une simple farce préparée d’avance et fort bien jouée.
^^^^^^^^^^^^^^^^^
* 185:202 # 1518s : Pléonasme.
> Suggestions : préparée
Mais, en la regardant avec attention, tous mes doutes se dissipèrent. Elle
tremblait d’angoisse, tant cette démarche lui était douloureuse, et je compris
qu’elle avait la gorge pleine de sanglots.
Je la savais fort riche et je repris :
— Comment ! votre mari n’a pas cinq mille francs à sa disposition ! Voyons,
réfléchissez. Êtes-vous sûre qu’il vous a chargée de me les demander ?
Elle hésita quelques secondes comme si elle eût fait un grand effort pour
chercher dans son souvenir, puis elle répondit :
— Oui…, oui… j’en suis sûre.
— Il vous a écrit ?
Elle hésita encore, réfléchissant. Je devinai le travail torturant de sa
pensée. Elle ne savait pas. Elle savait seulement qu’elle devait m’emprunter
cinq mille francs pour son mari. Donc elle osa mentir.
— Oui, il m’a écrit.
— Quand donc ? Vous ne m’avez parlé de rien, hier.
— J’ai reçu sa lettre ce matin.
— Pouvez-vous me la montrer ?
— Non… non… non… elle contenait des choses intimes… trop personnelles… je l’ai…
je l’ai brûlée.
— Alors, c’est que votre mari fait des dettes.
Elle hésita encore, puis murmura :
— Je ne sais pas.
Je déclarai brusquement :
— C’est que je ne puis disposer de cinq mille francs en ce moment, ma chère
cousine.
Elle poussa une sorte de cri de souffrance.
— Oh ! oh ! je vous en prie, je vous en prie, trouvez-les…
Elle s’exaltait, joignait les mains comme si elle m’eût prié ! J’entendais sa
voix changer de ton ; elle pleurait et bégayait, harcelée, dominée par l’ordre
irrésistible qu’elle avait reçu.
— Oh ! oh ! je vous en supplie… si vous saviez comme je souffre… il me les faut
aujourd’hui.
J’eus pitié d’elle.
— Vous les aurez tantôt, je vous le jure.
Elle s’écria :
— Oh ! merci ! merci ! Que vous êtes bon.
Je repris : – Vous rappelez-vous ce qui s’est passé hier soir chez vous ?
— Oui.
— Vous rappelez-vous que le docteur Parent vous a endormie ?
— Oui.
— Eh ! bien, il vous a ordonné de venir m’emprunter ce matin cinq mille francs,
et vous obéissez en ce moment à cette suggestion.
Elle réfléchit quelques secondes et répondit :
— Puisque c’est mon mari qui les demande.
Pendant une heure, j’essayai de la convaincre, mais je n’y pus parvenir.
Quand elle fut partie, je courus chez le docteur. Il allait sortir ; et il
m’écouta en souriant. Puis il dit :
— Croyez-vous maintenant ?
— Oui, il le faut bien.
— Allons chez votre parente.
Elle sommeillait déjà sur une chaise longue, accablée de fatigue. Le médecin
lui prit le pouls, la regarda quelque temps, une main levée vers ses yeux
qu’elle ferma peu à peu sous l’effort insoutenable de cette puissance
magnétique.
Quand elle fut endormie :
— Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que
vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela,
vous ne comprendrez pas.
Puis il la réveilla. Je tirai de ma poche un portefeuille :
— Voici, ma chère cousine, ce que vous m’avez demandé ce matin.
Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de
ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et
faillit, à la fin, se fâcher.
· · · · · · · · · · · · · · · · · · · · · · · ·
Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a
bouleversé.
19 juillet. – Beaucoup de personnes à qui j’ai raconté cette aventure se sont
moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ?
21 juillet. – J’ai été dîner à Bougival, puis j’ai passé la soirée au bal des
°°°°°°°°
canotiers. Décidément, tout dépend des lieux et des milieux. Croire au
surnaturel dans l’île de la Grenouillère, serait le comble de la folie… mais au
sommet du mont Saint-Michel ?… mais dans les Indes ? Nous subissons
effroyablement l’influence de ce qui nous entoure. Je rentrerai chez moi la
semaine prochaine.
30 juillet. – Je suis revenu dans ma maison depuis hier. Tout va bien.
2 août. – Rien de nouveau ; il fait un temps superbe. Je passe mes journées à
regarder couler la Seine.
4 août. – Querelles parmi mes domestiques. Ils prétendent qu’on casse les
verres, la nuit, dans les armoires. Le valet de chambre accuse la cuisinière,
qui accuse la lingère, qui accuse les deux autres. Quel est le coupable ? Bien
fin qui le dirait !
6 août. – Cette fois, je ne suis pas fou. J’ai vu… j’ai vu… j’ai vu !… Je ne
puis plus douter… j’ai vu !… J’ai encore froid jusque dans les ongles… j’ai
encore peur jusque dans les moelles… j’ai vu !…
Je me promenais à deux heures, en plein soleil, dans mon parterre de rosiers…
dans l’allée des rosiers d’automne qui commencent à fleurir.
Comme je m’arrêtais à regarder un géant des batailles, qui portait trois fleurs
magnifiques, je vis, je vis distinctement, tout près de moi, la tige d’une de
ces roses se plier, comme si une main invisible l’eût tordue, puis se casser
comme si cette main l’eût cueillie ! Puis la fleur s’éleva, suivant la courbe
qu’aurait décrite un bras en la portant vers une bouche, et elle resta
suspendue dans l’air transparent, toute seule, immobile, effrayante tache rouge
à trois pas de mes yeux.
Éperdu, je me jetai sur elle pour la saisir ! Je ne trouvai rien ; elle avait
disparu. Alors je fus pris d’une colère furieuse contre moi-même ; car il n’est
pas permis à un homme raisonnable et sérieux d’avoir de pareilles
hallucinations.
Mais était-ce bien une hallucination ? Je me retournai pour chercher la tige,
et je la retrouvai immédiatement sur l’arbuste, fraîchement brisée, entre les
deux autres roses demeurées à la branche.
Alors, je rentrai chez moi l’âme bouleversée ; car je suis certain, maintenant,
certain comme de l’alternance des jours et des nuits, qu’il existe près de moi
un être invisible, qui se nourrit de lait et d’eau, qui peut toucher aux
choses, les prendre et les changer de place, doué par conséquent d’une nature
matérielle, bien qu’imperceptible pour nos sens, et qui habite comme moi, sous
mon toit…
7 août. – J’ai dormi tranquille. Il a bu l’eau de ma carafe, mais n’a point
troublé mon sommeil.
Je me demande si je suis fou. En me promenant, tantôt au grand soleil, le long
de la rivière, des doutes me sont venus sur ma raison, non point des doutes
vagues comme j’en avais jusqu’ici, mais des doutes précis, absolus. J’ai vu des
fous ; j’en ai connu qui restaient intelligents, lucides, clairvoyants même sur
toutes les choses de la vie, sauf sur un point. Ils parlaient de tout avec
clarté, avec souplesse, avec profondeur, et soudain leur pensée touchant
l’écueil de leur folie, s’y déchirait en pièces, s’éparpillait et sombrait dans
cet océan effrayant et furieux, plein de vagues bondissantes, de brouillards,
de bourrasques, qu’on nomme « la démence ».
Certes, je me croirais fou, absolument fou, si je n’étais conscient, si je ne
connaissais parfaitement mon état, si je ne le sondais en l’analysant avec une
complète lucidité. Je ne serais donc, en somme, qu’un halluciné raisonnant. Un
trouble inconnu se serait produit dans mon cerveau, un de ces troubles
qu’essayent de noter et de préciser aujourd’hui les physiologistes ; et ce
trouble aurait déterminé dans mon esprit, dans l’ordre et la logique de mes
idées, une crevasse profonde. Des phénomènes semblables ont lieu dans le rêve
qui nous promène à travers les fantasmagories les plus invraisemblables, sans
que nous en soyons surpris, parce que l’appareil vérificateur, parce que le
sens du contrôle est endormi ; tandis que la faculté imaginative veille et
travaille. Ne se peut-il pas qu’une des imperceptibles touches du clavier
cérébral se trouve paralysée chez moi ? Des hommes, à la suite d’accidents,
perdent la mémoire des noms propres ou des verbes ou des chiffres, ou seulement
des dates. Les localisations de toutes les parcelles de la pensée sont
aujourd’hui prouvées. Or, quoi d’étonnant à ce que ma faculté de contrôler
l’irréalité de certaines hallucinations, se trouve engourdie chez moi en ce
moment !
Je songeais à tout cela en suivant le bord de l’eau. Le soleil couvrait de
clarté la rivière, faisait la terre délicieuse, emplissait mon regard d’amour
pour la vie, pour les hirondelles, dont l’agilité est une joie de mes yeux,
pour les herbes de la rive dont le frémissement est un bonheur de mes oreilles.
Peu à peu, cependant un malaise inexplicable me pénétrait. Une force, me
semblait-il, une force occulte m’engourdissait, m’arrêtait, m’empêchait d’aller
plus loin, me rappelait en arrière. J’éprouvais ce besoin douloureux de rentrer
qui vous oppresse, quand on a laissé au logis un malade aimé, et que le
pressentiment vous saisit d’une aggravation de son mal.
Donc, je revins malgré moi, sûr que j’allais trouver, dans ma maison, une
mauvaise nouvelle, une lettre ou une dépêche. Il n’y avait rien ; et je
demeurai plus surpris et plus inquiet que si j’avais eu de nouveau quelque
vision fantastique.
8 août. – J’ai passé hier une affreuse soirée. Il ne se manifeste plus, mais je
le sens près de moi, m’épiant, me regardant, me pénétrant, me dominant et plus
redoutable, en se cachant ainsi, que s’il signalait par des phénomènes
surnaturels sa présence invisible et constante.
J’ai dormi, pourtant.
9 août. – Rien, mais j’ai peur.
10 août. – Rien ; qu’arrivera-t-il demain ?
11 août. – Toujours rien ; je ne puis plus rester chez moi avec cette crainte
et cette pensée entrées en mon âme ; je vais partir.
12 août, 10 heures du soir. – Tout le jour j’ai voulu m’en aller ; je n’ai pas
pu. J’ai voulu accomplir cet acte de liberté si facile, si simple, – sortir –
monter dans ma voiture pour gagner Rouen – je n’ai pas pu. Pourquoi ?
13 août. – Quand on est atteint par certaines maladies, tous les ressorts de
l’être physique semblent brisés, toutes les énergies anéanties, tous les
muscles relâchés, les os devenus mous comme la chair et la chair liquide comme
de l’eau. J’éprouve cela dans mon être moral d’une façon étrange et désolante.
Je n’ai plus aucune force, aucun courage, aucune domination sur moi, aucun
pouvoir même de mettre en mouvement ma volonté. Je ne peux plus vouloir ; mais
quelqu’un veut pour moi ; et j’obéis.
14 août. – Je suis perdu ! Quelqu’un possède mon âme et la gouverne ! quelqu’un
ordonne tous mes actes, tous mes mouvements, toutes mes pensées. Je ne suis
plus rien en moi, rien qu’un spectateur esclave et terrifié de toutes les
choses que j’accomplis. Je désire sortir. Je ne peux pas. Il ne veut pas ; et
je reste, éperdu, tremblant, dans le fauteuil où il me tient assis. Je désire
seulement me lever, me soulever, afin de me croire encore maître de moi. Je ne
peux pas ! Je suis rivé à mon siège ; et mon siège adhère au sol, de telle
sorte qu’aucune force ne nous soulèverait.
Puis, tout d’un coup, il faut, il faut, il faut que j’aille au fond de mon
jardin cueillir des fraises et les manger. Et j’y vais. Je cueille des fraises
et je les mange ! Oh ! mon Dieu ! Mon Dieu ! Mon Dieu ! Est-il un Dieu ? S’il
en est un, délivrez-moi, sauvez-moi ! secourez-moi ! Pardon ! Pitié ! Grâce !
Sauvez-moi ! Oh ! quelle souffrance ! quelle torture ! quelle horreur !
15 août. – Certes, voilà comment était possédée et dominée ma pauvre cousine,
quand elle est venue m’emprunter cinq mille francs. Elle subissait un vouloir
étranger entré en elle, comme une autre âme, comme une autre âme parasite et
dominatrice. Est-ce que le monde va finir ?
Mais celui qui me gouverne, quel est-il, cet invisible ? cet inconnaissable, ce
rôdeur d’une race surnaturelle ?
Donc les Invisibles existent ! Alors, comment depuis l’origine du monde ne se
sont-ils pas encore manifestés d’une façon précise comme ils le font pour moi ?
Je n’ai jamais rien lu qui ressemble à ce qui s’est passé dans ma demeure. Oh !
si je pouvais la quitter, si je pouvais m’en aller, fuir et ne pas revenir. Je
serais sauvé, mais je ne peux pas.
16 août. – J’ai pu m’échapper aujourd’hui pendant deux heures, comme un
prisonnier qui trouve ouverte, par hasard, la porte de son cachot. J’ai senti
que j’étais libre tout à coup et qu’il était loin. J’ai ordonné d’atteler bien
vite et j’ai gagné Rouen. Oh ! quelle joie de pouvoir dire à un homme qui
obéit : « Allez à Rouen ! »
Je me suis fait arrêter devant la bibliothèque et j’ai prié qu’on me prêtât le
grand traité du docteur Hermann Herestauss sur les habitants inconnus du monde
°°°°°°°°°°
antique et moderne.
Puis, au moment de remonter dans mon coupé, j’ai voulu dire : « À la gare ! »
et j’ai crié, – je n’ai pas dit, j’ai crié – d’une voix si forte que les
passants se sont retournés : « À la maison », et je suis tombé, affolé
d’angoisse, sur le coussin de ma voiture. Il m’avait retrouvé et repris.
17 août. – Ah ! Quelle nuit ! quelle nuit ! Et pourtant il me semble que je
devrais me réjouir. Jusqu’à une heure du matin, j’ai lu ! Hermann Herestauss,
°°°°°°°°°°
docteur en philosophie et en théogonie, a écrit l’histoire et les
manifestations de tous les êtres invisibles rôdant autour de l’homme ou rêvés
par lui. Il décrit leurs origines, leur domaine, leur puissance. Mais aucun
d’eux ne ressemble à celui qui me hante. On dirait que l’homme, depuis qu’il
pense, a pressenti et redouté un être nouveau, plus fort que lui, son
successeur en ce monde, et que, le sentant proche et ne pouvant prévoir la
nature de ce maître, il a créé, dans sa terreur, tout le peuple fantastique des
êtres occultes, fantômes vagues nés de la peur.
Donc, ayant lu jusqu’à une heure du matin, j’ai été m’asseoir ensuite auprès de
ma fenêtre ouverte pour rafraîchir mon front et ma pensée au vent calme de
l’obscurité.
Il faisait bon, il faisait tiède ! Comme j’aurais aimé cette nuit-là autrefois !
Pas de lune. Les étoiles avaient au fond du ciel noir des scintillements
frémissants. Qui habite ces mondes ? Quelles formes, quels vivants, quels
animaux, quelles plantes sont là-bas ? Ceux qui pensent dans ces univers
lointains, que savent-ils plus que nous ? Que peuvent-ils plus que nous ? Que
voient-ils que nous ne connaissons point ? Un d’eux, un jour ou l’autre,
traversant l’espace, n’apparaîtra-t-il pas sur notre terre pour la conquérir,
comme les Normands jadis traversaient la mer pour asservir des peuples plus
faibles ?
Nous sommes si infirmes, si désarmés, si ignorants, si petits, nous autres, sur
ce grain de boue qui tourne délayé dans une goutte d’eau.
Je m’assoupis en rêvant ainsi au vent frais du soir.
Or, ayant dormi environ quarante minutes, je rouvris les yeux sans faire un
mouvement, réveillé par je ne sais quelle émotion confuse et bizarre. Je ne vis
rien d’abord, puis, tout à coup, il me sembla qu’une page du livre resté ouvert
sur ma table venait de tourner toute seule. Aucun souffle d’air n’était entré
par ma fenêtre. Je fus surpris et j’attendis. Au bout de quatre minutes
environ, je vis, je vis, oui, je vis de mes yeux une autre page se soulever et
se rabattre sur la précédente, comme si un doigt l’eût feuilletée. Mon fauteuil
était vide, semblait vide ; mais je compris qu’il était là, lui, assis à ma
place, et qu’il lisait. D’un bond furieux, d’un bond de bête révoltée, qui va
éventrer son dompteur, je traversai ma chambre pour le saisir, pour
l’étreindre, pour le tuer !… Mais mon siège, avant que je l’eusse atteint, se
renversa comme si on eût fui devant moi… ma table oscilla, ma lampe tomba et
s’éteignit, et ma fenêtre se ferma comme si un malfaiteur surpris se fût élancé
dans la nuit, en prenant à pleines mains les battants.
Donc, il s’était sauvé ; il avait eu peur, peur de moi, lui !
Alors,… alors… demain… ou après,… ou un jour quelconque,… je pourrai donc le
^^ ^^ ^^
* 5:7 # 377p : Typographie : pas de virgule avant les points de suspension.
> Suggestions : …
* 31:33 # 377p : Typographie : pas de virgule avant les points de suspension.
> Suggestions : …
* 55:57 # 377p : Typographie : pas de virgule avant les points de suspension.
> Suggestions : …
tenir sous mes poings, et l’écraser contre le sol ! Est-ce que les chiens,
quelquefois, ne mordent point et n’étranglent pas leurs maîtres ?
18 août. – J’ai songé toute la journée. Oh ! oui, je vais lui obéir, suivre ses
impulsions, accomplir toutes ses volontés, me faire humble, soumis, lâche. Il
est le plus fort. Mais une heure viendra…
19 août. – Je sais… je sais… je sais tout ! Je viens de lire ceci dans la Revue
du Monde scientifique : « Une nouvelle assez curieuse nous arrive de Rio de
Janeiro. Une folie, une épidémie de folie, comparable aux démences contagieuses
qui atteignirent les peuples d’Europe au moyen âge, sévit en ce moment dans la
^^^^^^^^^
* 277:286 # 5069s : Le « Moyen Âge ».
> Suggestions : Moyen Âge
province de San-Paulo. Les habitants éperdus quittent leurs maisons, désertent
leurs villages, abandonnent leurs cultures, se disant poursuivis, possédés,
gouvernés comme un bétail humain par des êtres invisibles bien que tangibles,
des sortes de vampires qui se nourrissent de leur vie, pendant leur sommeil, et
qui boivent en outre de l’eau et du lait sans paraître toucher à aucun autre
aliment.
« M. le professeur Don Pedro Henriquez, accompagné de plusieurs savants
°°°°°°°°°
médecins, est parti pour la province de San-Paulo, afin d’étudier sur place les
origines et les manifestations de cette surprenante folie, et de proposer à
l’Empereur les mesures qui lui paraîtront le plus propres à rappeler à la
^^^^^^^
* 278:285 # 3142s : Accord de nombre erroné : « propres » devrait être au
singulier.
> Suggestions : propre
raison ces populations en délire. »
Ah ! Ah ! je me rappelle, je me rappelle le beau trois-mâts brésilien qui passa
sous mes fenêtres en remontant la Seine, le 8 mai dernier ! Je le trouvai si
joli, si blanc, si gai ! L’Être était dessus, venant de là-bas, où sa race est
née ! Et il m’a vu ! Il a vu ma demeure blanche aussi ; et il a sauté du navire
sur la rive. Oh ! mon Dieu !
À présent, je sais, je devine. Le règne de l’homme est fini.
Il est venu, Celui que redoutaient les premières terreurs des peuples naïfs,
Celui qu’exorcisaient les prêtres inquiets, que les sorciers évoquaient par les
nuits sombres, sans le voir apparaître encore, à qui les pressentiments des
maîtres passagers du monde prêtèrent toutes les formes monstrueuses ou
gracieuses des gnomes, des esprits, des génies, des fées, des farfadets. Après
les grossières conceptions de l’épouvante primitive, des hommes plus
perspicaces l’ont pressenti plus clairement. Mesmer l’avait deviné, et les
°°°°°°
médecins, depuis dix ans déjà, ont découvert, d’une façon précise, la nature de
sa puissance avant qu’il l’eût exercée lui-même. Ils ont joué avec cette arme
du Seigneur nouveau, la domination d’un mystérieux vouloir sur l’âme humaine
devenue esclave. Ils ont appelé cela magnétisme, hypnotisme, suggestion… que
sais-je ? Je les ai vus s’amuser comme des enfants imprudents avec cette
horrible puissance ! Malheur à nous ! Malheur à l’homme ! Il est venu, le… le…
comment se nomme-t-il… le… il me semble qu’il me crie son nom, et je ne
l’entends pas… le… oui… il le crie… J’écoute… je ne peux pas… répète… le…
Horla… J’ai entendu… le Horla… c’est lui… le Horla… il est venu !…
°°°°° °°°°° °°°°°
Ah ! le vautour a mangé la colombe, le loup a mangé le mouton ; le lion a
dévoré le buffle aux cornes aiguës ; l’homme a tué le lion avec la flèche, avec
le glaive, avec la poudre ; mais le Horla va faire de l’homme ce que nous avons
°°°°°
fait du cheval et du bœuf : sa chose, son serviteur et sa nourriture, par la
seule puissance de sa volonté. Malheur à nous !
Pourtant, l’animal, quelquefois, se révolte et tue celui qui l’a dompté… moi
aussi je veux… je pourrai… mais il faut le connaître, le toucher, le voir ! Les
savants disent que l’œil de la bête, différent du nôtre, ne distingue point
comme le nôtre… Et mon œil à moi ne peut distinguer le nouveau venu qui
m’opprime.
Pourquoi ? Oh ! je me rappelle à présent les paroles du moine du mont
Saint-Michel : « Est-ce que nous voyons la cent-millième partie de ce qui
existe ? Tenez, voici le vent qui est la plus grande force de la nature, qui
renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en
montagnes d’eau, détruit les falaises et jette aux brisants les grands navires,
le vent qui tue, qui siffle, qui gémit, qui mugit, l’avez-vous vu et
pouvez-vous le voir : il existe pourtant ! »
Et je songeais encore : mon œil est si faible, si imparfait, qu’il ne distingue
même point les corps durs, s’ils sont transparents comme le verre !… Qu’une
glace sans tain barre mon chemin, il me jette dessus comme l’oiseau entré dans
une chambre se casse la tête aux vitres. Mille choses en outre le trompent et
l’égarent ? Quoi d’étonnant, alors, à ce qu’il ne sache point apercevoir un
corps nouveau que la lumière traverse.
Un être nouveau ! pourquoi pas ? Il devait venir assurément ! pourquoi
serions-nous les derniers ! Nous ne le distinguons point, ainsi que tous les
autres créés avant nous ? C’est que sa nature est plus parfaite, son corps plus
fin et plus fini que le nôtre, que le nôtre si faible, si maladroitement conçu,
encombré d’organes toujours fatigués, toujours forcés comme des ressorts trop
complexes, que le nôtre, qui vit comme une plante et comme une bête, en se
nourrissant péniblement d’air, d’herbe et de viande, machine animale en proie
aux maladies, aux déformations, aux putréfactions, poussive, mal réglée, naïve
et bizarre, ingénieusement mal faite, œuvre grossière et délicate, ébauche
d’être qui pourrait devenir intelligent et superbe.
Nous sommes quelques-uns, si peu sur ce monde, depuis l’huître jusqu’à l’homme.
Pourquoi pas un de plus, une fois accomplie la période qui sépare les
apparitions successives de toutes les espèces diverses ?
Pourquoi pas un de plus ? Pourquoi pas aussi d’autres arbres aux fleurs
immenses, éclatantes et parfumant des régions entières ? Pourquoi pas d’autres
éléments que le feu, l’air, la terre et l’eau ? – Ils sont quatre, rien que
quatre, ces pères nourriciers des êtres ! Quelle pitié ! Pourquoi ne sont-ils
pas quarante, quatre cents, quatre mille ! Comme tout est pauvre, mesquin,
misérable ! avarement donné, sèchement inventé, lourdement fait ! Ah !
l’éléphant, l’hippopotame, que de grâce ! Le chameau que d’élégance !
Mais direz-vous, le papillon ! une fleur qui vole ! J’en rêve un qui serait
grand comme cent univers, avec des ailes dont je ne puis même exprimer la
forme, la beauté, la couleur et le mouvement. Mais je le vois… il va d’étoile
en étoile, les rafraîchissant et les embaumant au souffle harmonieux et léger
de sa course !… Et les peuples de là-haut le regardent passer, extasiés et
ravis !…
· · · · · · · · · · · · · · · · · · · · · · · ·
Qu’ai-je donc ? C’est lui, lui, le Horla, qui me hante, qui me fait penser ces
°°°°°
folies ! Il est en moi, il devient mon âme ; je le tuerai !
19 août. – Je le tuerai. Je l’ai vu ! je me suis assis hier soir, à ma table ;
et je fis semblant d’écrire avec une grande attention. Je savais bien qu’il
viendrait rôder autour de moi, tout près, si près que je pourrais peut-être le
toucher, le saisir ? Et alors !… alors, j’aurais la force des désespérés ;
j’aurais mes mains, mes genoux, ma poitrine, mon front, mes dents pour
l’étrangler, l’écraser, le mordre, le déchirer.
Et je le guettais avec tous mes organes surexcités.
J’avais allumé mes deux lampes et les huit bougies de ma cheminée, comme si
j’eusse pu, dans cette clarté, le découvrir.
En face de moi, mon lit, un vieux lit de chêne à colonnes ; à droite, ma
cheminée ; à gauche, ma porte fermée avec soin, après l’avoir laissée longtemps
ouverte, afin de l’attirer ; derrière moi, une très haute armoire à glace, qui
me servait chaque jour pour me raser, pour m’habiller, et où j’avais coutume de
me regarder, de la tête aux pieds, chaque fois que je passais devant.
Donc, je faisais semblant d’écrire, pour le tromper, car il m’épiait lui
aussi ; et soudain, je sentis, je fus certain qu’il lisait par-dessus mon
épaule, qu’il était là, frôlant mon oreille.
Je me dressai, les mains tendues, en me tournant si vite que je faillis tomber.
Eh ! bien ?… on y voyait comme en plein jour, et je ne me vis pas dans ma
glace !… Elle était vide, claire, profonde, pleine de lumière ! Mon image
n’était pas dedans… et j’étais en face, moi ! Je voyais le grand verre limpide
du haut en bas. Et je regardais cela avec des yeux affolés ; et je n’osais plus
avancer, je n’osais plus faire un mouvement, sentant bien pourtant qu’il était
là, mais qu’il m’échapperait encore, lui dont le corps imperceptible avait
dévoré mon reflet.
Comme j’eus peur ! Puis voilà que tout à coup je commençai à m’apercevoir dans
une brume, au fond du miroir, dans une brume comme à travers une nappe d’eau ;
et il me semblait que cette eau glissait de gauche à droite, lentement, rendant
plus précise mon image, de seconde en seconde. C’était comme la fin d’une
éclipse. Ce qui me cachait ne paraissait point posséder de contours nettement
arrêtés, mais une sorte de transparence opaque, s’éclaircissant peu à peu.
Je pus enfin me distinguer complètement, ainsi que je le fais chaque jour en me
regardant.
Je l’avais vu ! L’épouvante m’en est restée, qui me fait encore frissonner.
20 août. – Le tuer, comment ? puisque je ne peux l’atteindre ? Le poison ? mais
il me verrait le mêler à l’eau ; et nos poisons, d’ailleurs, auraient-ils un
effet sur son corps imperceptible ? Non… non… sans aucun doute… Alors ?…
alors ?…
21 août. – J’ai fait venir un serrurier de Rouen, et lui ai commandé pour ma
chambre des persiennes de fer, comme en ont, à Paris, certains hôtels
particuliers, au rez-de-chaussée, par crainte des voleurs. Il me fera, en
outre, une porte pareille. Je me suis donné pour un poltron, mais je m’en
moque !…
· · · · · · · · · · · · · · · · · · · · · · · ·
10 septembre. – Rouen, hôtel continental. C’est fait… c’est fait… mais est-il
mort ? J’ai l’âme bouleversée de ce que j’ai vu.
Hier donc, le serrurier ayant posé ma persienne et ma porte de fer, j’ai laissé
tout ouvert jusqu’à minuit, bien qu’il commençât à faire froid.
Tout à coup, j’ai senti qu’il était là, et une joie, une joie folle m’a saisi.
Je me suis levé lentement, et j’ai marché à droite, à gauche, longtemps pour
qu’il ne devinât rien ; puis j’ai ôté mes bottines et mis mes savates avec
négligence ; puis j’ai fermé ma persienne de fer, et revenant à pas tranquilles
vers la porte, j’ai fermé la porte aussi à double tour. Retournant alors vers
la fenêtre, je la fixai par un cadenas, dont je mis la clef dans ma poche.
Tout à coup, je compris qu’il s’agitait autour de moi, qu’il avait peur à son
tour, qu’il m’ordonnait de lui ouvrir. Je faillis céder ; je ne cédai pas, mais
m’adossant à la porte, je l’entre-bâillai, tout juste assez pour passer, moi, à
reculons ; et comme je suis très grand ma tête touchait au linteau. J’étais sûr
qu’il n’avait pu s’échapper et je l’enfermai, tout seul, tout seul ! Quelle
joie ! Je le tenais ! Alors, je descendis, en courant ; je pris dans mon salon,
sous ma chambre, mes deux lampes et je renversai toute l’huile sur le tapis,
sur les meubles, partout ; puis j’y mis le feu, et je me sauvai, après avoir
bien refermé, à double tour, la grande porte d’entrée.
Et j’allai me cacher au fond de mon jardin, dans un massif de lauriers. Comme
ce fut long ! comme ce fut long ! Tout était noir, muet, immobile ; pas un
souffle d’air, pas une étoile, des montagnes de nuages qu’on ne voyait point,
mais qui pesaient sur mon âme si lourds, si lourds.
^^^^^^
* 264:270 # 3554s : Accord de nombre erroné avec « âme » : « lourds » devrait
être au singulier.
> Suggestions : lourd
Je regardais ma maison, et j’attendais. Comme ce fut long ! Je croyais déjà que
le feu s’était éteint tout seul, ou qu’il l’avait éteint, Lui, quand une des
fenêtres d’en bas creva sous la poussée de l’incendie, et une flamme, une
grande flamme rouge et jaune, longue, molle, caressante, monta le long du mur
blanc et le baisa jusqu’au toit. Une lueur courut dans les arbres, dans les
branches, dans les feuilles, et un frisson, un frisson de peur aussi ! Les
oiseaux se réveillaient ; un chien se mit à hurler ; il me sembla que le jour
se levait ! Deux autres fenêtres éclatèrent aussitôt, et je vis que tout le bas
de ma demeure n’était plus qu’un effrayant brasier. Mais un cri, un cri
horrible, suraigu, déchirant, un cri de femme passa dans la nuit, et deux
mansardes s’ouvrirent ! J’avais oublié mes domestiques ! Je vis leurs faces
affolées, et leurs bras qui s’agitaient !…
Alors, éperdu d’horreur, je me mis à courir vers le village en hurlant : « Au
secours ! au secours ! au feu ! au feu ! » Je rencontrai des gens qui s’en
venaient déjà et je retournai avec eux, pour voir !
La maison, maintenant, n’était plus qu’un bûcher horrible et magnifique, un
bûcher monstrueux, éclairant toute la terre, un bûcher où brûlaient des hommes,
et où il brûlait aussi, Lui, Lui, mon prisonnier, l’Être nouveau, le nouveau
maître, le Horla !
°°°°°
Soudain le toit tout entier s’engloutit entre les murs, et un volcan de flammes
jaillit jusqu’au ciel. Par toutes les fenêtres ouvertes sur la fournaise, je
voyais la cuve de feu, et je pensais qu’il était là, dans ce four, mort…
— Mort ? Peut-être ?… Son corps ? son corps que le jour traversait n’était-il
pas indestructible par les moyens qui tuent les nôtres ?
S’il n’était pas mort ?… seul peut-être le temps a prise sur l’Être Invisible
et Redoutable. Pourquoi ce corps transparent, ce corps inconnaissable, ce corps
d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les
infirmités, la destruction prématurée ?
La destruction prématurée ? toute l’épouvante humaine vient d’elle ! Après
l’homme le Horla. – Après celui qui peut mourir tous les jours, à toutes les
°°°°°
heures, à toutes les minutes, par tous les accidents, est venu celui qui ne
doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la
limite de son existence !
Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors…
il va donc falloir que je me tue, moi !…
|
Added tests/fr/horla.txt version [4cbaa54e8b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 | Guy de Maupassant Le Horla (1887) Le Horla, P. Ollendorff, 1895 [trente-cinquième édition] (pp. 3-68). 8 mai. – Quelle journée admirable ! J’ai passé toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière. J’aime ce pays, et j’aime y vivre parce que j’y ai mes racines, ces profondes et délicates racines, qui attachent un homme à la terre où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on mange, aux usages comme aux nourritures, aux locutions locales, aux intonations des paysans, aux odeurs du sol, des villages et de l’air lui-même. J’aime ma maison où j’ai grandi. De mes fenêtres, je vois la Seine qui coule, le long de mon jardin, derrière la route, presque chez moi, la grande et large Seine, qui va de Rouen au Havre, couverte de bateaux qui passent. À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu des clochers gothiques. Ils sont innombrables, frêles ou larges, dominés par la flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air bleu des belles matinées, jetant jusqu’à moi leur doux et lointain bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit. Comme il faisait bon ce matin ! Vers onze heures, un long convoi de navires, traînés par un remorqueur, gros comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila devant ma grille. Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel, venait un superbe trois-mats brésilien, tout blanc, admirablement propre et luisant. Je le saluai, je ne sais pourquoi, tant ce navire me fit plaisir à voir. 12 mai. – J’ai un peu de fièvre depuis quelques jours ; je me sens souffrant, ou plutôt je me sens triste. D’où viennent ces influences mystérieuses qui changent en découragement notre bonheur et notre confiance en détresse. On dirait que l’air, l’air invisible est plein d’inconnaissables Puissances, dont nous subissons les voisinages mystérieux. Je m’éveille plein de gaîté, avec des envies de chanter dans la gorge. – Pourquoi ? – Je descends le long de l’eau ; et soudain, après une courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez moi. – Pourquoi ? – Est-ce un frisson de froid qui, frôlant ma peau, a ébranlé mes nerfs et assombri mon âme ? Est-ce la forme des nuages, ou la couleur du jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé ma pensée ? Sait-on ? Tout ce qui nous entoure, tout ce que nous voyons sans le regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous, sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets rapides, surprenants et inexplicables ? Comme il est profond, ce mystère de l’Invisible ! Nous ne le pouvons sonder avec nos sens misérables, avec nos yeux qui ne savent apercevoir ni le trop petit, ni le trop grand, ni le trop près, ni le trop loin, ni les habitants d’une étoile, ni les habitants d’une goutte d’eau… avec nos oreilles qui nous trompent, car elles nous transmettent les vibrations de l’air en notes sonores. Elles sont des fées qui font ce miracle de changer en bruit ce mouvement et par cette métamorphose donnent naissance à la musique, qui rend chantante l’agitation muette de la nature… avec notre odorat, plus faible que celui du chien… avec notre goût, qui peut à peine discerner l’âge d’un vin ! Ah ! si nous avions d’autres organes qui accompliraient en notre faveur d’autres miracles, que de choses nous pourrions découvrir encore autour de nous ! 16 mai. – Je suis malade, décidément ! Je me portais si bien le mois dernier ! J’ai la fièvre, une fièvre atroce, ou plutôt un énervement fiévreux, qui rend mon âme aussi souffrante que mon corps. J’ai sans cesse cette sensation affreuse d’un danger menaçant, cette appréhension d’un malheur qui vient ou de la mort qui approche, ce pressentiment qui est sans doute l’atteinte d’un mal encore inconnu, germant dans le sang et dans la chair. 18 mai. – Je viens d’aller consulter mon médecin, car je ne pouvais plus dormir. Il m’a trouvé le pouls rapide, l’œil dilaté, les nerfs vibrants, mais sans aucun symptôme alarmant. Je dois me soumettre aux douches et boire du bromure de potassium. 25 mai. – Aucun changement ! Mon état, vraiment, est bizarre. À mesure qu’approche le soir, une inquiétude incompréhensible m’envahit, comme si la nuit cachait pour moi une menace terrible. Je dîne vite, puis j’essaie de lire ; mais je ne comprends pas les mots ; je distingue à peine les lettres. Je marche alors dans mon salon de long en large, sous l’oppression d’une crainte confuse et irrésistible, la crainte du sommeil et la crainte du lit. Vers dix heures, je monte dans ma chambre. À peine entré, je donne deux tours de clef, et je pousse les verrous ; j’ai peur… de quoi ?… Je ne redoutais rien jusqu’ici… j’ouvre mes armoires, je regarde sous mon lit ; j’écoute… j’écoute… quoi ?… Est-ce étrange qu’un simple malaise, un trouble de la circulation peut-être, l’irritation d’un filet nerveux, un peu de congestion, une toute petite perturbation dans le fonctionnement si imparfait et si délicat de notre machine vivante, puisse faire un mélancolique du plus joyeux des hommes, et un poltron du plus brave ? Puis, je me couche, et j’attends le sommeil comme on attendrait le bourreau. Je l’attends avec l’épouvante de sa venue ; et mon cœur bat, et mes jambes frémissent ; et tout mon corps tressaille dans la chaleur des draps, jusqu’au moment où je tombe tout à coup dans le repos, comme on tomberait pour s’y noyer, dans un gouffre d’eau stagnante. Je ne le sens pas venir, comme autrefois, ce sommeil perfide, caché près de moi, qui me guette, qui va me saisir par la tête, me fermer les yeux, m’anéantir. Je dors – longtemps – deux ou trois heures – puis un rêve – non – un cauchemar m’étreint. Je sens bien que je suis couché et que je dors,… je le sens et je le sais… et je sens aussi que quelqu’un s’approche de moi, me regarde, me palpe, monte sur mon lit, s’agenouille sur ma poitrine, me prend le cou entre ses mains et serre… serre… de toute sa force pour m’étrangler. Moi, je me débats, lié par cette impuissance atroce, qui nous paralyse dans les songes ; je veux crier, – je ne peux pas ; – je veux remuer, – je ne peux pas ; – j’essaye, avec des efforts affreux, en haletant, de me tourner, de rejeter cet être qui m’écrase et qui m’étouffe, – je ne peux pas ! Et soudain, je m’éveille, affolé, couvert de sueur. J’allume une bougie. Je suis seul. Après cette crise, qui se renouvelle toutes les nuits, je dors enfin, avec calme, jusqu’à l’aurore. 2 juin. – Mon état s’est encore aggravé. Qu’ai-je donc ? Le bromure n’y fait rien ; les douches n’y font rien. Tantôt, pour fatiguer mon corps, si las pourtant, j’allai faire un tour dans la forêt de Roumare. Je crus d’abord que l’air frais, léger et doux, plein d’odeur d’herbes et de feuilles, me versait aux veines un sang nouveau, au cœur une énergie nouvelle. Je pris une grande avenue de chasse, puis je tournai vers La Bouille, par une allée étroite, entre deux armées d’arbres démesurément hauts qui mettaient un toit vert, épais, presque noir, entre le ciel et moi. Un frisson me saisit soudain, non pas un frisson de froid, mais un étrange frisson d’angoisse. Je hâtai le pas, inquiet d’être seul dans ce bois, apeuré sans raison, stupidement, par la profonde solitude. Tout à coup, il me sembla que j’étais suivi, qu’on marchait sur mes talons, tout près, à me toucher. Je me retournai brusquement. J’étais seul. Je ne vis derrière moi que la droite et large allée, vide, haute, redoutablement vide ; et de l’autre côté elle s’étendait aussi à perte de vue, toute pareille, effrayante. Je fermai les yeux. Pourquoi ? Et je me mis à tourner sur un talon, très vite, comme une toupie. Je faillis tomber ; je rouvris les yeux ; les arbres dansaient ; la terre flottait ; je dus m’asseoir. Puis, ah ! je ne savais plus par où j’étais venu ! Bizarre idée ! Bizarre ! Bizarre idée ! Je ne savais plus du tout. Je partis par le côté qui se trouvait à ma droite, et je revins dans l’avenue qui m’avait amené au milieu de la forêt. 3 juin. – La nuit a été horrible. Je vais m’absenter pendant quelques semaines. Un petit voyage, sans doute, me remettra. 2 juillet. – Je rentre. Je suis guéri. J’ai fait d’ailleurs une excursion charmante. J’ai visité le mont Saint-Michel que je ne connaissais pas. Quelle vision, quand on arrive, comme moi, à Avranches, vers la fin du jour ! La ville est sur une colline ; et on me conduisit dans le jardin public, au bout de la cité. Je poussai un cri d’étonnement. Une baie démesurée s’étendait devant moi, à perte de vue, entre deux côtes écartées se perdant au loin dans les brumes ; et au milieu de cette immense baie jaune, sous un ciel d’or et de clarté, s’élevait sombre et pointu un mont étrange, au milieu des sables. Le soleil venait de disparaître, et sur l’horizon encore flamboyant se dessinait le profil de ce fantastique rocher qui porte sur son sommet un fantastique monument. Dès l’aurore, j’allai vers lui. La mer était basse, comme la veille au soir, et je regardais se dresser devant moi, à mesure que j’approchais d’elle, la surprenante abbaye. Après plusieurs heures de marche, j’atteignis l’énorme bloc de pierres qui porte la petite cité dominée par la grande église. Ayant gravi la rue étroite et rapide, j’entrai dans la plus admirable demeure gothique construite pour Dieu sur la terre, vaste comme une ville, pleine de salles basses écrasées sous des voûtes et de hautes galeries que soutiennent de frêles colonnes. J’entrai dans ce gigantesque bijou de granit, aussi léger qu’une dentelle, couvert de tours, de sveltes clochetons, où montent des escaliers tordus, et qui lancent dans le ciel bleu des jours, dans le ciel noir des nuits, leurs têtes bizarres hérissées de chimères, de diables, de bêtes fantastiques, de fleurs monstrueuses, et reliés l’un à l’autre par de fines arches ouvragées. Quand je fus sur le sommet, je dis au moine qui m’accompagnait : « Mon père, comme vous devez être bien ici ! » Il répondit : « Il y a beaucoup de vent, Monsieur » ; et nous nous mîmes à causer en regardant monter la mer, qui courait sur le sable et le couvrait d’une cuirasse d’acier. Et le moine me conta des histoires, toutes les vieilles histoires de ce lieu, des légendes, toujours des légendes. Une d’elles me frappa beaucoup. Les gens du pays, ceux du mont, prétendent qu’on entend parler la nuit dans les sables, puis qu’on entend bêler deux chèvres, l’une avec une voix forte, l’autre avec une voix faible. Les incrédules affirment que ce sont les cris des oiseaux de mer, qui ressemblent tantôt à des bêlements, et tantôt à des plaintes humaines ; mais les pêcheurs attardés jurent avoir rencontré rôdant sur les dunes, entre deux marées, autour de la petite ville jetée ainsi loin du monde, un vieux berger, dont on ne voit jamais la tête couverte de son manteau, et qui conduit, en marchant devant eux, un bouc à figure d’homme et une chèvre à figure de femme, tous deux avec de longs cheveux blancs et parlant sans cesse, se querellant dans une langue inconnue, puis cessant soudain de crier pour bêler de toute leur force. Je dis au moine : « Y croyez-vous ? » Il murmura : « Je ne sais pas. » Je repris : « S’il existait sur la terre d’autres êtres que nous, comment ne les connaîtrions-nous point depuis longtemps : comment ne les auriez-vous pas vus, vous ? comment ne les aurais-je pas vus, moi ? » Il répondit : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent, qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises, et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, – l’avez-vous vu, et pouvez-vous le voir ? Il existe, pourtant. » Je me tus devant ce simple raisonnement. Cet homme était un sage ou peut-être un sot. Je ne l’aurais pu affirmer au juste ; mais je me tus. Ce qu’il disait là, je l’avais pensé souvent. 3 juillet. – J’ai mal dormi ; certes, il y a ici une influence fiévreuse, car mon cocher souffre du même mal que moi. En rentrant hier, j’avais remarqué sa pâleur singulière. Je lui demandai : — Qu’est-ce que vous avez, Jean ? — J’ai que je ne peux plus me reposer, Monsieur, ce sont mes nuits qui mangent mes jours. Depuis le départ de Monsieur, cela me tient comme un sort. Les autres domestiques vont bien cependant, mais j’ai grand peur d’être repris, moi. 4 juillet. – Décidément, je suis repris. Mes cauchemars anciens reviennent. Cette nuit, j’ai senti quelqu’un accroupi sur moi, et qui, sa bouche sur la mienne, buvait ma vie entre mes lèvres. Oui, il la puisait dans ma gorge, comme aurait fait une sangsue. Puis il s’est levé, repu, et moi je me suis réveillé, tellement meurtri, brisé, anéanti, que je ne pouvais plus remuer. Si cela continue encore quelques jours, je repartirai certainement. 5 juillet. – Ai-je perdu la raison ? Ce qui s’est passé, ce que j’ai vu la nuit dernière est tellement étrange, que ma tête s’égare quand j’y songe ! Comme je le fais maintenant chaque soir j’avais fermé ma porte à clef ; puis, ayant soif, je bus un demi-verre d’eau, et je remarquai par hasard que ma carafe était pleine jusqu’au bouchon de cristal. Je me couchai ensuite et je tombai dans un de mes sommeils épouvantables, dont je fus tiré au bout de deux heures environ par une secousse plus affreuse encore. Figurez-vous un homme qui dort, qu’on assassine, et qui se réveille avec un couteau dans le poumon, et qui râle, couvert de sang, et qui ne peut plus respirer, et qui va mourir, et qui ne comprend pas – voilà. Ayant enfin reconquis ma raison, j’eus soif de nouveau ; j’allumai une bougie et j’allai vers la table où était posée ma carafe. Je la soulevai en la penchant sur mon verre ; rien ne coula. – Elle était vide ! Elle était vide complètement ! D’abord, je n’y compris rien ; puis, tout à coup, je ressentis une émotion si terrible, que je dus m’asseoir, ou plutôt, que je tombai sur une chaise ! puis, je me redressai d’un saut pour regarder autour de moi ! puis je me rassis, éperdu d’étonnement et de peur, devant le cristal transparent ! Je le contemplais avec des yeux fixes, cherchant à deviner. Mes mains tremblaient ! On avait donc bu cette eau ? Qui ? Moi ? moi, sans doute ? Ce ne pouvait être que moi ? Alors, j’étais somnambule, je vivais, sans le savoir, de cette double vie mystérieuse qui fait douter s’il y a deux êtres en nous, ou si un être étranger, inconnaissable et invisible, anime, par moments, quand notre âme est engourdie, notre corps captif qui obéit à cet autre, comme à nous-mêmes, plus qu’à nous-mêmes. Ah ! qui comprendra mon angoisse abominable ? Qui comprendra l’émotion d’un homme, sain d’esprit, bien éveillé, plein de raison et qui regarde épouvanté, à travers le verre d’une carafe, un peu d’eau disparue pendant qu’il a dormi ! Et je restai là jusqu’au jour, sans oser regagner mon lit. 6 juillet. – Je deviens fou. On a encore bu toute ma carafe cette nuit ; – ou plutôt, je l’ai bue ! Mais, est-ce moi ? Est-ce moi ? Qui serait-ce ? Qui ? Oh ! mon Dieu ! Je deviens fou ? Qui me sauvera ? 10 juillet. – Je viens de faire des épreuves surprenantes. Décidément, je suis fou ! Et pourtant ! Le 6 juillet, avant de me coucher, j’ai placé sur ma table du vin, du lait, de l’eau, du pain et des fraises. On a bu – j’ai bu – toute l’eau, et un peu de lait. On n’a touché ni au vin, ni au pain, ni aux fraises. Le 7 juillet, j’ai renouvelé la même épreuve, qui a donné le même résultat. Le 8 juillet, j’ai supprimé l’eau et le lait. On n’a touché à rien. Le 9 juillet enfin, j’ai remis sur ma table l’eau et le lait seulement, en ayant soin d’envelopper les carafes en des linges de mousseline blanche et de ficeler les bouchons. Puis, j’ai frotté mes lèvres, ma barbe, mes mains avec de la mine de plomb, et je me suis couché. L’invincible sommeil m’a saisi, suivi bientôt de l’atroce réveil. Je n’avais point remué ; mes draps eux-mêmes ne portaient pas de taches. Je m’élançai vers ma table. Les linges enfermant les bouteilles étaient demeurés immaculés. Je déliai les cordons, en palpitant de crainte. On avait bu toute l’eau ! on avait bu tout le lait ! Ah ! mon Dieu !… Je vais partir tout à l’heure pour Paris. 12 juillet. – Paris. J’avais donc perdu la tête les jours derniers ! J’ai dû être le jouet de mon imagination énervée, à moins que je ne sois vraiment somnambule, ou que j’aie subi une de ces influences constatées, mais inexplicables jusqu’ici, qu’on appelle suggestions. En tout cas, mon affolement touchait à la démence, et vingt-quatre heures de Paris ont suffi pour me remettre d’aplomb. Hier, après des courses et des visites, qui m’ont fait passer dans l’âme de l’air nouveau et vivifiant, j’ai fini ma soirée au Théâtre-Français. On y jouait une pièce d’Alexandre Dumas fils ; et cet esprit alerte et puissant a achevé de me guérir. Certes, la solitude est dangereuse pour les intelligences qui travaillent. Il nous faut, autour de nous, des hommes qui pensent et qui parlent. Quand nous sommes seuls longtemps, nous peuplons le vide de fantômes. Je suis rentré à l’hôtel très gai, par les boulevards. Au coudoiement de la foule, je songeais, non sans ironie, à mes terreurs, à mes suppositions de l’autre semaine, car j’ai cru, oui, j’ai cru qu’un être invisible habitait sous mon toit. Comme notre tête est faible et s’effare, et s’égare vite, dès qu’un petit fait incompréhensible nous frappe ! Au lieu de conclure par ces simples mots : « Je ne comprends pas parce que la cause m’échappe », nous imaginons aussitôt des mystères effrayants et des puissances surnaturelles. 14 juillet. – Fête de la République. Je me suis promené par les rues. Les pétards et les drapeaux m’amusaient comme un enfant. C’est pourtant fort bête d’être joyeux, à date fixe, par décret du gouvernement. Le peuple est un troupeau imbécile, tantôt stupidement patient et tantôt férocement révolté. On lui dit : « Amuse-toi. » Il s’amuse. On lui dit : « Va te battre avec le voisin. » Il va se battre. On lui dit : « Vote pour l’Empereur. » Il vote pour l’Empereur. Puis, on lui dit : « Vote pour la République. » Et il vote pour la République. Ceux qui le dirigent sont aussi sots ; mais au lieu d’obéir à des hommes, ils obéissent à des principes, lesquels ne peuvent être que niais, stériles et faux, par cela même qu’ils sont des principes, c’est-à-dire des idées réputées certaines et immuables, en ce monde où l’on n’est sûr de rien, puisque la lumière est une illusion, puisque le bruit est une illusion. 16 juillet. – J’ai vu hier des choses qui m’ont beaucoup troublé. Je dînais chez ma cousine, Mme Sablé, dont le mari commande le 76e chasseurs à Limoges. Je me trouvais chez elle avec deux jeunes femmes, dont l’une a épousé un médecin, le docteur Parent, qui s’occupe beaucoup des maladies nerveuses et des manifestations extraordinaires auxquelles donnent lieu en ce moment les expériences sur l’hypnotisme et la suggestion. Il nous raconta longtemps les résultats prodigieux obtenus par des savants anglais et par les médecins de l’école de Nancy. Les faits qu’il avança me parurent tellement bizarres, que je me déclarai tout à fait incrédule. « Nous sommes, affirmait-il, sur le point de découvrir un des plus importants secrets de la nature, je veux dire, un de ses plus importants secrets sur cette terre ; car elle en a certes d’autrement importants, là-bas, dans les étoiles. Depuis que l’homme pense, depuis qu’il sait dire et écrire sa pensée, il se sent frôlé par un mystère impénétrable pour ses sens grossiers et imparfaits, et il tâche de suppléer, par l’effort de son intelligence, à l’impuissance de ses organes. Quand cette intelligence demeurait encore à l’état rudimentaire, cette hantise des phénomènes invisibles a pris des formes banalement effrayantes. De là sont nées les croyances populaires au surnaturel, les légendes des esprits rôdeurs, des fées, des gnomes, des revenants, je dirai même la légende de Dieu, car nos conceptions de l’ouvrier-créateur, de quelque religion qu’elles nous viennent, sont bien les inventions les plus médiocres, les plus stupides, les plus inacceptables sorties du cerveau apeuré des créatures. Rien de plus vrai que cette parole de Voltaire : « Dieu a fait l’homme à son image, mais l’homme le lui a bien rendu. » « Mais, depuis un peu plus d’un siècle, on semble pressentir quelque chose de nouveau. Mesmer et quelques autres nous ont mis sur une voie inattendue, et nous sommes arrivés vraiment, depuis quatre ou cinq ans surtout, à des résultats surprenants. » Ma cousine, très incrédule aussi, souriait. Le docteur Parent lui dit : – Voulez-vous que j’essaie de vous endormir, Madame ? — Oui, je veux bien. Elle s’assit dans un fauteuil et il commença à la regarder fixement en la fascinant. Moi, je me sentis soudain un peu troublé, le cœur battant, la gorge serrée. Je voyais les yeux de Mme Sablé s’alourdir, sa bouche se crisper, sa poitrine haleter. Au bout de dix minutes, elle dormait. — Mettez-vous derrière elle, dit le médecin. Et je m’assis derrière elle. Il lui plaça entre les mains une carte de visite en lui disant : « Ceci est un miroir ; que voyez-vous dedans ? » Elle répondit : — Je vois mon cousin. — Que fait-il ? — Il se tord la moustache. — Et maintenant ? — Il tire de sa poche une photographie. — Quelle est cette photographie ? — La sienne. C’était vrai ! Et cette photographie venait de m’être livrée, le soir même, à l’hôtel. — Comment est-il sur ce portrait ? — Il se tient debout avec son chapeau à la main. Donc elle voyait dans cette carte, dans ce carton blanc, comme elle eût vu dans une glace. Les jeunes femmes, épouvantées, disaient : « Assez ! Assez ! Assez ! » Mais le docteur ordonna : « Vous vous lèverez demain à huit heures ; puis vous irez trouver à son hôtel votre cousin, et vous le supplierez de vous prêter cinq mille francs que votre mari vous demande et qu’il vous réclamera à son prochain voyage. » Puis il la réveilla. En rentrant à l’hôtel, je songeais à cette curieuse séance et des doutes m’assaillirent, non point sur l’absolue, sur l’insoupçonnable bonne foi de ma cousine, que je connaissais comme une sœur, depuis l’enfance, mais sur une supercherie possible du docteur. Ne dissimulait-il pas dans sa main une glace qu’il montrait à la jeune femme endormie, en même temps que sa carte de visite ? Les prestidigitateurs de profession font des choses autrement singulières. Je rentrai donc et je me couchai. Or, ce matin, vers huit heures et demie, je fus réveillé par mon valet de chambre, qui me dit : — C’est Mme Sablé qui demande à parler à Monsieur tout de suite. Je m’habillai à la hâte et je la reçus. Elle s’assit fort troublée, les yeux baissés, et, sans lever son voile, elle me dit : — Mon cher cousin, j’ai un gros service à vous demander. — Lequel, ma cousine ? — Cela me gêne beaucoup de vous le dire, et pourtant, il le faut. J’ai besoin, absolument besoin, de cinq mille francs. — Allons donc, vous ? — Oui, moi, ou plutôt mon mari, qui me charge de les trouver. J’étais tellement stupéfait, que je balbutiais mes réponses. Je me demandais si vraiment elle ne s’était pas moquée de moi avec le docteur Parent, si ce n’était pas là une simple farce préparée d’avance et fort bien jouée. Mais, en la regardant avec attention, tous mes doutes se dissipèrent. Elle tremblait d’angoisse, tant cette démarche lui était douloureuse, et je compris qu’elle avait la gorge pleine de sanglots. Je la savais fort riche et je repris : — Comment ! votre mari n’a pas cinq mille francs à sa disposition ! Voyons, réfléchissez. Êtes-vous sûre qu’il vous a chargée de me les demander ? Elle hésita quelques secondes comme si elle eût fait un grand effort pour chercher dans son souvenir, puis elle répondit : — Oui…, oui… j’en suis sûre. — Il vous a écrit ? Elle hésita encore, réfléchissant. Je devinai le travail torturant de sa pensée. Elle ne savait pas. Elle savait seulement qu’elle devait m’emprunter cinq mille francs pour son mari. Donc elle osa mentir. — Oui, il m’a écrit. — Quand donc ? Vous ne m’avez parlé de rien, hier. — J’ai reçu sa lettre ce matin. — Pouvez-vous me la montrer ? — Non… non… non… elle contenait des choses intimes… trop personnelles… je l’ai… je l’ai brûlée. — Alors, c’est que votre mari fait des dettes. Elle hésita encore, puis murmura : — Je ne sais pas. Je déclarai brusquement : — C’est que je ne puis disposer de cinq mille francs en ce moment, ma chère cousine. Elle poussa une sorte de cri de souffrance. — Oh ! oh ! je vous en prie, je vous en prie, trouvez-les… Elle s’exaltait, joignait les mains comme si elle m’eût prié ! J’entendais sa voix changer de ton ; elle pleurait et bégayait, harcelée, dominée par l’ordre irrésistible qu’elle avait reçu. — Oh ! oh ! je vous en supplie… si vous saviez comme je souffre… il me les faut aujourd’hui. J’eus pitié d’elle. — Vous les aurez tantôt, je vous le jure. Elle s’écria : — Oh ! merci ! merci ! Que vous êtes bon. Je repris : – Vous rappelez-vous ce qui s’est passé hier soir chez vous ? — Oui. — Vous rappelez-vous que le docteur Parent vous a endormie ? — Oui. — Eh ! bien, il vous a ordonné de venir m’emprunter ce matin cinq mille francs, et vous obéissez en ce moment à cette suggestion. Elle réfléchit quelques secondes et répondit : — Puisque c’est mon mari qui les demande. Pendant une heure, j’essayai de la convaincre, mais je n’y pus parvenir. Quand elle fut partie, je courus chez le docteur. Il allait sortir ; et il m’écouta en souriant. Puis il dit : — Croyez-vous maintenant ? — Oui, il le faut bien. — Allons chez votre parente. Elle sommeillait déjà sur une chaise longue, accablée de fatigue. Le médecin lui prit le pouls, la regarda quelque temps, une main levée vers ses yeux qu’elle ferma peu à peu sous l’effort insoutenable de cette puissance magnétique. Quand elle fut endormie : — Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela, vous ne comprendrez pas. Puis il la réveilla. Je tirai de ma poche un portefeuille : — Voici, ma chère cousine, ce que vous m’avez demandé ce matin. Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et faillit, à la fin, se fâcher. · · · · · · · · · · · · · · · · · · · · · · · · Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a bouleversé. 19 juillet. – Beaucoup de personnes à qui j’ai raconté cette aventure se sont moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ? 21 juillet. – J’ai été dîner à Bougival, puis j’ai passé la soirée au bal des canotiers. Décidément, tout dépend des lieux et des milieux. Croire au surnaturel dans l’île de la Grenouillère, serait le comble de la folie… mais au sommet du mont Saint-Michel ?… mais dans les Indes ? Nous subissons effroyablement l’influence de ce qui nous entoure. Je rentrerai chez moi la semaine prochaine. 30 juillet. – Je suis revenu dans ma maison depuis hier. Tout va bien. 2 août. – Rien de nouveau ; il fait un temps superbe. Je passe mes journées à regarder couler la Seine. 4 août. – Querelles parmi mes domestiques. Ils prétendent qu’on casse les verres, la nuit, dans les armoires. Le valet de chambre accuse la cuisinière, qui accuse la lingère, qui accuse les deux autres. Quel est le coupable ? Bien fin qui le dirait ! 6 août. – Cette fois, je ne suis pas fou. J’ai vu… j’ai vu… j’ai vu !… Je ne puis plus douter… j’ai vu !… J’ai encore froid jusque dans les ongles… j’ai encore peur jusque dans les moelles… j’ai vu !… Je me promenais à deux heures, en plein soleil, dans mon parterre de rosiers… dans l’allée des rosiers d’automne qui commencent à fleurir. Comme je m’arrêtais à regarder un géant des batailles, qui portait trois fleurs magnifiques, je vis, je vis distinctement, tout près de moi, la tige d’une de ces roses se plier, comme si une main invisible l’eût tordue, puis se casser comme si cette main l’eût cueillie ! Puis la fleur s’éleva, suivant la courbe qu’aurait décrite un bras en la portant vers une bouche, et elle resta suspendue dans l’air transparent, toute seule, immobile, effrayante tache rouge à trois pas de mes yeux. Éperdu, je me jetai sur elle pour la saisir ! Je ne trouvai rien ; elle avait disparu. Alors je fus pris d’une colère furieuse contre moi-même ; car il n’est pas permis à un homme raisonnable et sérieux d’avoir de pareilles hallucinations. Mais était-ce bien une hallucination ? Je me retournai pour chercher la tige, et je la retrouvai immédiatement sur l’arbuste, fraîchement brisée, entre les deux autres roses demeurées à la branche. Alors, je rentrai chez moi l’âme bouleversée ; car je suis certain, maintenant, certain comme de l’alternance des jours et des nuits, qu’il existe près de moi un être invisible, qui se nourrit de lait et d’eau, qui peut toucher aux choses, les prendre et les changer de place, doué par conséquent d’une nature matérielle, bien qu’imperceptible pour nos sens, et qui habite comme moi, sous mon toit… 7 août. – J’ai dormi tranquille. Il a bu l’eau de ma carafe, mais n’a point troublé mon sommeil. Je me demande si je suis fou. En me promenant, tantôt au grand soleil, le long de la rivière, des doutes me sont venus sur ma raison, non point des doutes vagues comme j’en avais jusqu’ici, mais des doutes précis, absolus. J’ai vu des fous ; j’en ai connu qui restaient intelligents, lucides, clairvoyants même sur toutes les choses de la vie, sauf sur un point. Ils parlaient de tout avec clarté, avec souplesse, avec profondeur, et soudain leur pensée touchant l’écueil de leur folie, s’y déchirait en pièces, s’éparpillait et sombrait dans cet océan effrayant et furieux, plein de vagues bondissantes, de brouillards, de bourrasques, qu’on nomme « la démence ». Certes, je me croirais fou, absolument fou, si je n’étais conscient, si je ne connaissais parfaitement mon état, si je ne le sondais en l’analysant avec une complète lucidité. Je ne serais donc, en somme, qu’un halluciné raisonnant. Un trouble inconnu se serait produit dans mon cerveau, un de ces troubles qu’essayent de noter et de préciser aujourd’hui les physiologistes ; et ce trouble aurait déterminé dans mon esprit, dans l’ordre et la logique de mes idées, une crevasse profonde. Des phénomènes semblables ont lieu dans le rêve qui nous promène à travers les fantasmagories les plus invraisemblables, sans que nous en soyons surpris, parce que l’appareil vérificateur, parce que le sens du contrôle est endormi ; tandis que la faculté imaginative veille et travaille. Ne se peut-il pas qu’une des imperceptibles touches du clavier cérébral se trouve paralysée chez moi ? Des hommes, à la suite d’accidents, perdent la mémoire des noms propres ou des verbes ou des chiffres, ou seulement des dates. Les localisations de toutes les parcelles de la pensée sont aujourd’hui prouvées. Or, quoi d’étonnant à ce que ma faculté de contrôler l’irréalité de certaines hallucinations, se trouve engourdie chez moi en ce moment ! Je songeais à tout cela en suivant le bord de l’eau. Le soleil couvrait de clarté la rivière, faisait la terre délicieuse, emplissait mon regard d’amour pour la vie, pour les hirondelles, dont l’agilité est une joie de mes yeux, pour les herbes de la rive dont le frémissement est un bonheur de mes oreilles. Peu à peu, cependant un malaise inexplicable me pénétrait. Une force, me semblait-il, une force occulte m’engourdissait, m’arrêtait, m’empêchait d’aller plus loin, me rappelait en arrière. J’éprouvais ce besoin douloureux de rentrer qui vous oppresse, quand on a laissé au logis un malade aimé, et que le pressentiment vous saisit d’une aggravation de son mal. Donc, je revins malgré moi, sûr que j’allais trouver, dans ma maison, une mauvaise nouvelle, une lettre ou une dépêche. Il n’y avait rien ; et je demeurai plus surpris et plus inquiet que si j’avais eu de nouveau quelque vision fantastique. 8 août. – J’ai passé hier une affreuse soirée. Il ne se manifeste plus, mais je le sens près de moi, m’épiant, me regardant, me pénétrant, me dominant et plus redoutable, en se cachant ainsi, que s’il signalait par des phénomènes surnaturels sa présence invisible et constante. J’ai dormi, pourtant. 9 août. – Rien, mais j’ai peur. 10 août. – Rien ; qu’arrivera-t-il demain ? 11 août. – Toujours rien ; je ne puis plus rester chez moi avec cette crainte et cette pensée entrées en mon âme ; je vais partir. 12 août, 10 heures du soir. – Tout le jour j’ai voulu m’en aller ; je n’ai pas pu. J’ai voulu accomplir cet acte de liberté si facile, si simple, – sortir – monter dans ma voiture pour gagner Rouen – je n’ai pas pu. Pourquoi ? 13 août. – Quand on est atteint par certaines maladies, tous les ressorts de l’être physique semblent brisés, toutes les énergies anéanties, tous les muscles relâchés, les os devenus mous comme la chair et la chair liquide comme de l’eau. J’éprouve cela dans mon être moral d’une façon étrange et désolante. Je n’ai plus aucune force, aucun courage, aucune domination sur moi, aucun pouvoir même de mettre en mouvement ma volonté. Je ne peux plus vouloir ; mais quelqu’un veut pour moi ; et j’obéis. 14 août. – Je suis perdu ! Quelqu’un possède mon âme et la gouverne ! quelqu’un ordonne tous mes actes, tous mes mouvements, toutes mes pensées. Je ne suis plus rien en moi, rien qu’un spectateur esclave et terrifié de toutes les choses que j’accomplis. Je désire sortir. Je ne peux pas. Il ne veut pas ; et je reste, éperdu, tremblant, dans le fauteuil où il me tient assis. Je désire seulement me lever, me soulever, afin de me croire encore maître de moi. Je ne peux pas ! Je suis rivé à mon siège ; et mon siège adhère au sol, de telle sorte qu’aucune force ne nous soulèverait. Puis, tout d’un coup, il faut, il faut, il faut que j’aille au fond de mon jardin cueillir des fraises et les manger. Et j’y vais. Je cueille des fraises et je les mange ! Oh ! mon Dieu ! Mon Dieu ! Mon Dieu ! Est-il un Dieu ? S’il en est un, délivrez-moi, sauvez-moi ! secourez-moi ! Pardon ! Pitié ! Grâce ! Sauvez-moi ! Oh ! quelle souffrance ! quelle torture ! quelle horreur ! 15 août. – Certes, voilà comment était possédée et dominée ma pauvre cousine, quand elle est venue m’emprunter cinq mille francs. Elle subissait un vouloir étranger entré en elle, comme une autre âme, comme une autre âme parasite et dominatrice. Est-ce que le monde va finir ? Mais celui qui me gouverne, quel est-il, cet invisible ? cet inconnaissable, ce rôdeur d’une race surnaturelle ? Donc les Invisibles existent ! Alors, comment depuis l’origine du monde ne se sont-ils pas encore manifestés d’une façon précise comme ils le font pour moi ? Je n’ai jamais rien lu qui ressemble à ce qui s’est passé dans ma demeure. Oh ! si je pouvais la quitter, si je pouvais m’en aller, fuir et ne pas revenir. Je serais sauvé, mais je ne peux pas. 16 août. – J’ai pu m’échapper aujourd’hui pendant deux heures, comme un prisonnier qui trouve ouverte, par hasard, la porte de son cachot. J’ai senti que j’étais libre tout à coup et qu’il était loin. J’ai ordonné d’atteler bien vite et j’ai gagné Rouen. Oh ! quelle joie de pouvoir dire à un homme qui obéit : « Allez à Rouen ! » Je me suis fait arrêter devant la bibliothèque et j’ai prié qu’on me prêtât le grand traité du docteur Hermann Herestauss sur les habitants inconnus du monde antique et moderne. Puis, au moment de remonter dans mon coupé, j’ai voulu dire : « À la gare ! » et j’ai crié, – je n’ai pas dit, j’ai crié – d’une voix si forte que les passants se sont retournés : « À la maison », et je suis tombé, affolé d’angoisse, sur le coussin de ma voiture. Il m’avait retrouvé et repris. 17 août. – Ah ! Quelle nuit ! quelle nuit ! Et pourtant il me semble que je devrais me réjouir. Jusqu’à une heure du matin, j’ai lu ! Hermann Herestauss, docteur en philosophie et en théogonie, a écrit l’histoire et les manifestations de tous les êtres invisibles rôdant autour de l’homme ou rêvés par lui. Il décrit leurs origines, leur domaine, leur puissance. Mais aucun d’eux ne ressemble à celui qui me hante. On dirait que l’homme, depuis qu’il pense, a pressenti et redouté un être nouveau, plus fort que lui, son successeur en ce monde, et que, le sentant proche et ne pouvant prévoir la nature de ce maître, il a créé, dans sa terreur, tout le peuple fantastique des êtres occultes, fantômes vagues nés de la peur. Donc, ayant lu jusqu’à une heure du matin, j’ai été m’asseoir ensuite auprès de ma fenêtre ouverte pour rafraîchir mon front et ma pensée au vent calme de l’obscurité. Il faisait bon, il faisait tiède ! Comme j’aurais aimé cette nuit-là autrefois ! Pas de lune. Les étoiles avaient au fond du ciel noir des scintillements frémissants. Qui habite ces mondes ? Quelles formes, quels vivants, quels animaux, quelles plantes sont là-bas ? Ceux qui pensent dans ces univers lointains, que savent-ils plus que nous ? Que peuvent-ils plus que nous ? Que voient-ils que nous ne connaissons point ? Un d’eux, un jour ou l’autre, traversant l’espace, n’apparaîtra-t-il pas sur notre terre pour la conquérir, comme les Normands jadis traversaient la mer pour asservir des peuples plus faibles ? Nous sommes si infirmes, si désarmés, si ignorants, si petits, nous autres, sur ce grain de boue qui tourne délayé dans une goutte d’eau. Je m’assoupis en rêvant ainsi au vent frais du soir. Or, ayant dormi environ quarante minutes, je rouvris les yeux sans faire un mouvement, réveillé par je ne sais quelle émotion confuse et bizarre. Je ne vis rien d’abord, puis, tout à coup, il me sembla qu’une page du livre resté ouvert sur ma table venait de tourner toute seule. Aucun souffle d’air n’était entré par ma fenêtre. Je fus surpris et j’attendis. Au bout de quatre minutes environ, je vis, je vis, oui, je vis de mes yeux une autre page se soulever et se rabattre sur la précédente, comme si un doigt l’eût feuilletée. Mon fauteuil était vide, semblait vide ; mais je compris qu’il était là, lui, assis à ma place, et qu’il lisait. D’un bond furieux, d’un bond de bête révoltée, qui va éventrer son dompteur, je traversai ma chambre pour le saisir, pour l’étreindre, pour le tuer !… Mais mon siège, avant que je l’eusse atteint, se renversa comme si on eût fui devant moi… ma table oscilla, ma lampe tomba et s’éteignit, et ma fenêtre se ferma comme si un malfaiteur surpris se fût élancé dans la nuit, en prenant à pleines mains les battants. Donc, il s’était sauvé ; il avait eu peur, peur de moi, lui ! Alors,… alors… demain… ou après,… ou un jour quelconque,… je pourrai donc le tenir sous mes poings, et l’écraser contre le sol ! Est-ce que les chiens, quelquefois, ne mordent point et n’étranglent pas leurs maîtres ? 18 août. – J’ai songé toute la journée. Oh ! oui, je vais lui obéir, suivre ses impulsions, accomplir toutes ses volontés, me faire humble, soumis, lâche. Il est le plus fort. Mais une heure viendra… 19 août. – Je sais… je sais… je sais tout ! Je viens de lire ceci dans la Revue du Monde scientifique : « Une nouvelle assez curieuse nous arrive de Rio de Janeiro. Une folie, une épidémie de folie, comparable aux démences contagieuses qui atteignirent les peuples d’Europe au moyen âge, sévit en ce moment dans la province de San-Paulo. Les habitants éperdus quittent leurs maisons, désertent leurs villages, abandonnent leurs cultures, se disant poursuivis, possédés, gouvernés comme un bétail humain par des êtres invisibles bien que tangibles, des sortes de vampires qui se nourrissent de leur vie, pendant leur sommeil, et qui boivent en outre de l’eau et du lait sans paraître toucher à aucun autre aliment. « M. le professeur Don Pedro Henriquez, accompagné de plusieurs savants médecins, est parti pour la province de San-Paulo, afin d’étudier sur place les origines et les manifestations de cette surprenante folie, et de proposer à l’Empereur les mesures qui lui paraîtront le plus propres à rappeler à la raison ces populations en délire. » Ah ! Ah ! je me rappelle, je me rappelle le beau trois-mâts brésilien qui passa sous mes fenêtres en remontant la Seine, le 8 mai dernier ! Je le trouvai si joli, si blanc, si gai ! L’Être était dessus, venant de là-bas, où sa race est née ! Et il m’a vu ! Il a vu ma demeure blanche aussi ; et il a sauté du navire sur la rive. Oh ! mon Dieu ! À présent, je sais, je devine. Le règne de l’homme est fini. Il est venu, Celui que redoutaient les premières terreurs des peuples naïfs, Celui qu’exorcisaient les prêtres inquiets, que les sorciers évoquaient par les nuits sombres, sans le voir apparaître encore, à qui les pressentiments des maîtres passagers du monde prêtèrent toutes les formes monstrueuses ou gracieuses des gnomes, des esprits, des génies, des fées, des farfadets. Après les grossières conceptions de l’épouvante primitive, des hommes plus perspicaces l’ont pressenti plus clairement. Mesmer l’avait deviné, et les médecins, depuis dix ans déjà, ont découvert, d’une façon précise, la nature de sa puissance avant qu’il l’eût exercée lui-même. Ils ont joué avec cette arme du Seigneur nouveau, la domination d’un mystérieux vouloir sur l’âme humaine devenue esclave. Ils ont appelé cela magnétisme, hypnotisme, suggestion… que sais-je ? Je les ai vus s’amuser comme des enfants imprudents avec cette horrible puissance ! Malheur à nous ! Malheur à l’homme ! Il est venu, le… le… comment se nomme-t-il… le… il me semble qu’il me crie son nom, et je ne l’entends pas… le… oui… il le crie… J’écoute… je ne peux pas… répète… le… Horla… J’ai entendu… le Horla… c’est lui… le Horla… il est venu !… Ah ! le vautour a mangé la colombe, le loup a mangé le mouton ; le lion a dévoré le buffle aux cornes aiguës ; l’homme a tué le lion avec la flèche, avec le glaive, avec la poudre ; mais le Horla va faire de l’homme ce que nous avons fait du cheval et du bœuf : sa chose, son serviteur et sa nourriture, par la seule puissance de sa volonté. Malheur à nous ! Pourtant, l’animal, quelquefois, se révolte et tue celui qui l’a dompté… moi aussi je veux… je pourrai… mais il faut le connaître, le toucher, le voir ! Les savants disent que l’œil de la bête, différent du nôtre, ne distingue point comme le nôtre… Et mon œil à moi ne peut distinguer le nouveau venu qui m’opprime. Pourquoi ? Oh ! je me rappelle à présent les paroles du moine du mont Saint-Michel : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, l’avez-vous vu et pouvez-vous le voir : il existe pourtant ! » Et je songeais encore : mon œil est si faible, si imparfait, qu’il ne distingue même point les corps durs, s’ils sont transparents comme le verre !… Qu’une glace sans tain barre mon chemin, il me jette dessus comme l’oiseau entré dans une chambre se casse la tête aux vitres. Mille choses en outre le trompent et l’égarent ? Quoi d’étonnant, alors, à ce qu’il ne sache point apercevoir un corps nouveau que la lumière traverse. Un être nouveau ! pourquoi pas ? Il devait venir assurément ! pourquoi serions-nous les derniers ! Nous ne le distinguons point, ainsi que tous les autres créés avant nous ? C’est que sa nature est plus parfaite, son corps plus fin et plus fini que le nôtre, que le nôtre si faible, si maladroitement conçu, encombré d’organes toujours fatigués, toujours forcés comme des ressorts trop complexes, que le nôtre, qui vit comme une plante et comme une bête, en se nourrissant péniblement d’air, d’herbe et de viande, machine animale en proie aux maladies, aux déformations, aux putréfactions, poussive, mal réglée, naïve et bizarre, ingénieusement mal faite, œuvre grossière et délicate, ébauche d’être qui pourrait devenir intelligent et superbe. Nous sommes quelques-uns, si peu sur ce monde, depuis l’huître jusqu’à l’homme. Pourquoi pas un de plus, une fois accomplie la période qui sépare les apparitions successives de toutes les espèces diverses ? Pourquoi pas un de plus ? Pourquoi pas aussi d’autres arbres aux fleurs immenses, éclatantes et parfumant des régions entières ? Pourquoi pas d’autres éléments que le feu, l’air, la terre et l’eau ? – Ils sont quatre, rien que quatre, ces pères nourriciers des êtres ! Quelle pitié ! Pourquoi ne sont-ils pas quarante, quatre cents, quatre mille ! Comme tout est pauvre, mesquin, misérable ! avarement donné, sèchement inventé, lourdement fait ! Ah ! l’éléphant, l’hippopotame, que de grâce ! Le chameau que d’élégance ! Mais direz-vous, le papillon ! une fleur qui vole ! J’en rêve un qui serait grand comme cent univers, avec des ailes dont je ne puis même exprimer la forme, la beauté, la couleur et le mouvement. Mais je le vois… il va d’étoile en étoile, les rafraîchissant et les embaumant au souffle harmonieux et léger de sa course !… Et les peuples de là-haut le regardent passer, extasiés et ravis !… · · · · · · · · · · · · · · · · · · · · · · · · Qu’ai-je donc ? C’est lui, lui, le Horla, qui me hante, qui me fait penser ces folies ! Il est en moi, il devient mon âme ; je le tuerai ! 19 août. – Je le tuerai. Je l’ai vu ! je me suis assis hier soir, à ma table ; et je fis semblant d’écrire avec une grande attention. Je savais bien qu’il viendrait rôder autour de moi, tout près, si près que je pourrais peut-être le toucher, le saisir ? Et alors !… alors, j’aurais la force des désespérés ; j’aurais mes mains, mes genoux, ma poitrine, mon front, mes dents pour l’étrangler, l’écraser, le mordre, le déchirer. Et je le guettais avec tous mes organes surexcités. J’avais allumé mes deux lampes et les huit bougies de ma cheminée, comme si j’eusse pu, dans cette clarté, le découvrir. En face de moi, mon lit, un vieux lit de chêne à colonnes ; à droite, ma cheminée ; à gauche, ma porte fermée avec soin, après l’avoir laissée longtemps ouverte, afin de l’attirer ; derrière moi, une très haute armoire à glace, qui me servait chaque jour pour me raser, pour m’habiller, et où j’avais coutume de me regarder, de la tête aux pieds, chaque fois que je passais devant. Donc, je faisais semblant d’écrire, pour le tromper, car il m’épiait lui aussi ; et soudain, je sentis, je fus certain qu’il lisait par-dessus mon épaule, qu’il était là, frôlant mon oreille. Je me dressai, les mains tendues, en me tournant si vite que je faillis tomber. Eh ! bien ?… on y voyait comme en plein jour, et je ne me vis pas dans ma glace !… Elle était vide, claire, profonde, pleine de lumière ! Mon image n’était pas dedans… et j’étais en face, moi ! Je voyais le grand verre limpide du haut en bas. Et je regardais cela avec des yeux affolés ; et je n’osais plus avancer, je n’osais plus faire un mouvement, sentant bien pourtant qu’il était là, mais qu’il m’échapperait encore, lui dont le corps imperceptible avait dévoré mon reflet. Comme j’eus peur ! Puis voilà que tout à coup je commençai à m’apercevoir dans une brume, au fond du miroir, dans une brume comme à travers une nappe d’eau ; et il me semblait que cette eau glissait de gauche à droite, lentement, rendant plus précise mon image, de seconde en seconde. C’était comme la fin d’une éclipse. Ce qui me cachait ne paraissait point posséder de contours nettement arrêtés, mais une sorte de transparence opaque, s’éclaircissant peu à peu. Je pus enfin me distinguer complètement, ainsi que je le fais chaque jour en me regardant. Je l’avais vu ! L’épouvante m’en est restée, qui me fait encore frissonner. 20 août. – Le tuer, comment ? puisque je ne peux l’atteindre ? Le poison ? mais il me verrait le mêler à l’eau ; et nos poisons, d’ailleurs, auraient-ils un effet sur son corps imperceptible ? Non… non… sans aucun doute… Alors ?… alors ?… 21 août. – J’ai fait venir un serrurier de Rouen, et lui ai commandé pour ma chambre des persiennes de fer, comme en ont, à Paris, certains hôtels particuliers, au rez-de-chaussée, par crainte des voleurs. Il me fera, en outre, une porte pareille. Je me suis donné pour un poltron, mais je m’en moque !… · · · · · · · · · · · · · · · · · · · · · · · · 10 septembre. – Rouen, hôtel continental. C’est fait… c’est fait… mais est-il mort ? J’ai l’âme bouleversée de ce que j’ai vu. Hier donc, le serrurier ayant posé ma persienne et ma porte de fer, j’ai laissé tout ouvert jusqu’à minuit, bien qu’il commençât à faire froid. Tout à coup, j’ai senti qu’il était là, et une joie, une joie folle m’a saisi. Je me suis levé lentement, et j’ai marché à droite, à gauche, longtemps pour qu’il ne devinât rien ; puis j’ai ôté mes bottines et mis mes savates avec négligence ; puis j’ai fermé ma persienne de fer, et revenant à pas tranquilles vers la porte, j’ai fermé la porte aussi à double tour. Retournant alors vers la fenêtre, je la fixai par un cadenas, dont je mis la clef dans ma poche. Tout à coup, je compris qu’il s’agitait autour de moi, qu’il avait peur à son tour, qu’il m’ordonnait de lui ouvrir. Je faillis céder ; je ne cédai pas, mais m’adossant à la porte, je l’entre-bâillai, tout juste assez pour passer, moi, à reculons ; et comme je suis très grand ma tête touchait au linteau. J’étais sûr qu’il n’avait pu s’échapper et je l’enfermai, tout seul, tout seul ! Quelle joie ! Je le tenais ! Alors, je descendis, en courant ; je pris dans mon salon, sous ma chambre, mes deux lampes et je renversai toute l’huile sur le tapis, sur les meubles, partout ; puis j’y mis le feu, et je me sauvai, après avoir bien refermé, à double tour, la grande porte d’entrée. Et j’allai me cacher au fond de mon jardin, dans un massif de lauriers. Comme ce fut long ! comme ce fut long ! Tout était noir, muet, immobile ; pas un souffle d’air, pas une étoile, des montagnes de nuages qu’on ne voyait point, mais qui pesaient sur mon âme si lourds, si lourds. Je regardais ma maison, et j’attendais. Comme ce fut long ! Je croyais déjà que le feu s’était éteint tout seul, ou qu’il l’avait éteint, Lui, quand une des fenêtres d’en bas creva sous la poussée de l’incendie, et une flamme, une grande flamme rouge et jaune, longue, molle, caressante, monta le long du mur blanc et le baisa jusqu’au toit. Une lueur courut dans les arbres, dans les branches, dans les feuilles, et un frisson, un frisson de peur aussi ! Les oiseaux se réveillaient ; un chien se mit à hurler ; il me sembla que le jour se levait ! Deux autres fenêtres éclatèrent aussitôt, et je vis que tout le bas de ma demeure n’était plus qu’un effrayant brasier. Mais un cri, un cri horrible, suraigu, déchirant, un cri de femme passa dans la nuit, et deux mansardes s’ouvrirent ! J’avais oublié mes domestiques ! Je vis leurs faces affolées, et leurs bras qui s’agitaient !… Alors, éperdu d’horreur, je me mis à courir vers le village en hurlant : « Au secours ! au secours ! au feu ! au feu ! » Je rencontrai des gens qui s’en venaient déjà et je retournai avec eux, pour voir ! La maison, maintenant, n’était plus qu’un bûcher horrible et magnifique, un bûcher monstrueux, éclairant toute la terre, un bûcher où brûlaient des hommes, et où il brûlait aussi, Lui, Lui, mon prisonnier, l’Être nouveau, le nouveau maître, le Horla ! Soudain le toit tout entier s’engloutit entre les murs, et un volcan de flammes jaillit jusqu’au ciel. Par toutes les fenêtres ouvertes sur la fournaise, je voyais la cuve de feu, et je pensais qu’il était là, dans ce four, mort… — Mort ? Peut-être ?… Son corps ? son corps que le jour traversait n’était-il pas indestructible par les moyens qui tuent les nôtres ? S’il n’était pas mort ?… seul peut-être le temps a prise sur l’Être Invisible et Redoutable. Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ? La destruction prématurée ? toute l’épouvante humaine vient d’elle ! Après l’homme le Horla. – Après celui qui peut mourir tous les jours, à toutes les heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence ! Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !… |
Added tests/fr/perf.txt version [db23208f16].
cannot compute difference between binary files
Added tests/fr/perf_memo.txt version [94040e9e26].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# MEMO OF PERFORMANCES
# Shorter is better
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
0.4.10.2 4.7797 1.1617 0.8074 0.2343 0.2647 0.2749 0.6367 0.3463
0.5.0a 2015.08.28 4.6203 1.0860 0.7567 0.2213 0.2518 0.2635 0.6089 0.3315
0.5.0b 2015.09.21 4.2869 1.0140 0.6941 0.2061 0.2312 0.2471 0.5667 0.3124
0.5.0b 2015.09.21 17:42 4.307 1.016 0.6984 0.2066 0.2353 0.2479 0.5715 0.3157 0.05686 0.007637
0.5.0b 2015.09.23 22:54 4.47859 1.05899 0.732804 0.214195 0.243011 0.259232 0.598795 0.329411 0.0574977 0.00810443
0.5.0b3 2015.10.11 09:23 4.56807 1.07108 0.745156 0.21713 0.246066 0.263882 0.605003 0.331472 0.0585957 0.00798071
0.5.0b4 2015.10.25 10:36 4.68602 1.1036 0.816759 0.236306 0.263662 0.277191 0.632331 0.355515 0.059987 0.00801248 (py3.4)
0.5.0b4 2015.10.25 10:57 4.21442 0.991038 0.739702 0.212349 0.239072 0.251278 0.575609 0.318801 0.0531821 0.00738796 (py3.5)
0.5.0b6 2016.02.25 22:01 4.67677 1.09785 0.794943 0.225662 0.261311 0.274515 0.633468 0.347967 0.0592074 0.00853299
0.5.0b6 2016.03.03 11:22 4.60471 1.06554 0.774112 0.218736 0.252905 0.263989 0.610623 0.334882 0.0567706 0.00786996
0.5.0b8 2016.04.28 16:46 4.46168 1.07131 0.766851 0.215897 0.24811 0.252945 0.586484 0.318905 0.0538788 0.00748515
0.5.5 2016.05.19 17:57 4.48851 1.06935 0.766362 0.218503 0.250422 0.260964 0.604672 0.333179 0.0563006 0.00855781
0.5.7 2016.06.01 18:08 4.3773 1.04008 0.749191 0.2141 0.236444 0.245076 0.564722 0.307174 0.0540038 0.00705854 (option groups)
0.5.11 2016.10.09 16:14 4.53121 1.08698 0.760695 0.220858 0.242361 0.255862 0.606328 0.334436 0.0573431 0.00760688
0.5.12 2016.10.14 18:58 4.51895 1.0843 0.772805 0.22387 0.249411 0.261593 0.628802 0.339303 0.0570326 0.00805416
0.5.15 2017.01.22 11:44 4.85204 1.16134 0.770762 0.227874 0.244574 0.253305 0.58831 0.319987 0.0603996 0.00694786
0.5.15 2017.01.22 11:47 4.85593 1.15248 0.762924 0.22744 0.243461 0.254609 0.586741 0.317503 0.0588827 0.00701016 (unicode normalisation NFC)
0.5.15 2017.01.31 12:06 4.88227 1.18008 0.782217 0.232617 0.247672 0.257628 0.596903 0.32169 0.0603505 0.00695196
0.5.15 2017.02.05 10:10 4.90222 1.18444 0.786696 0.233413 0.25071 0.260214 0.602112 0.325235 0.0609932 0.00706897
|
Added tests/fr/text1.res.txt version [5f815593f6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
Lorsqu'il est parti.
^^^^^^^
* 0:7 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : Lorsqu’
Le 15ᵉ du mois de mars . Le XXIᵉ siècle. 3ème tentative !
° ^^ ^^^^^^^
* 22:24 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 23:25 # 314p / typo_point_entre_deux_espaces : Pas d’espace avant un point.
> Suggestions : .
* 41:44 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 44:48 # 1002s / typo_ordinaux : Nombre ordinal.
> Suggestions : 3ᵉ | 3e
Des pas derrière lui ... Très mauvais signe... Mais qui pourrait bien le suivre au beau milieu de
^^^ ^^^
* 21:24 # 590p / typo_points_suspension1 : Typographie : points de suspension. Utilisez le
caractère dédié.
> Suggestions : …
* 43:46 # 590p / typo_points_suspension1 : Typographie : points de suspension. Utilisez le
caractère dédié.
> Suggestions : …
la nuit, dans cette rue étroite dans le fin fond du port ? Et ce alors qu'il vient de réussir le
^^ ^^^
* 154:156 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : ?
* 169:172 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : qu’
coup dont il a rêvé toute sa vie! Qu'il ne lui reste plus qu'à disparaître -avec son butin- sans
^ ^^^ ^^^
* 227:228 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : !
* 229:232 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : Qu’
* 253:256 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : qu’
laisser de trace ! Serait-ce l'un de ses nombreux collègues qui a eu la même idée que lui, l'a
^^ ^^ ^^
* 308:310 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : !
* 321:323 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : l’
* 383:385 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : l’
observé en secret et a attendu cet instant précis pour lui dérober le fruit de son travail ? Ou
^^ ^^
* 441:443 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 478:480 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : ?
bien seraient-ce plutôt les pas de l'un des innombrables gardiens de la paix de Marseille, prêt à
^^ ^^
* 507:509 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 520:522 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : l’
faire claquer d'étincelantes menottes autour de ses poignets ? Son ordre -"Ne bougez plus!"-
^^ ^^ ^ ^^
* 597:599 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : d’
* 643:645 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : ?
* 657:658 # 713p / typo_guillemets_typographiques_doubles_ouvrants : Guillemets typographiques
ouvrants.
> Suggestions : « | “
* 672:673 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : !
* 673:674 # 716p / typo_guillemets_typographiques_doubles_fermants : Guillemets typographiques
fermants.
> Suggestions : ” | »
résonne déjà dans ses oreilles!Se sentant traqué , il se retourne brusquement et aperçoit un étroit
^^^ ^^
* 706:707 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : !
* 707:709 # 554p / typo_espace_manquant_après2 : Il manque un espace.
> Suggestions : Se
* 724:726 # 322p / typo_virgule_entre_deux_espaces : Pas d’espace avant une virgule.
> Suggestions : ,
passage. Sauvé ? En un éclair,il vire à droite et disparaît entre les deux bâtiments, manquant de
^^ ^^
* 790:792 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 791:793 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : ?
* 807:809 # 552p / typo_espace_manquant_après1 : Il manque un espace.
> Suggestions : il
justesse de trébucher sur la poubelle renversée en plein milieu de la ruelle!
^^^
* 951:952 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : !
* 952:954 # 284p / espaces_mélangés : Incohérence : l’espace insécable à côté de l’espace sécable
n’a pas d’effet.
> Suggestions : |
Il tâtonne dans l'obscurité, cherchant ( désespérément )une issue. Tout à coup, son cœur se
^^^ ^^ ^^ ^^^ ^^
* 0:3 # 264p / espaces_début_ligne : Espace(s) en début de ligne à supprimer : utilisez les
retraits de paragraphe (ou les tabulations à la rigueur).
> Suggestions :
* 19:21 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : l’
* 42:44 # 296p / typo_espace_après_signe_ouvrant : Pas d’espace après ce signe.
> Suggestions : (
* 57:59 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 58:60 # 297p / typo_espace_avant_signe_fermant : Pas d’espace avant ce signe.
> Suggestions : )
* 59:60 # 307p / typo_parenthese_fermante_collée : Il manque un espace après la parenthèse.
> Suggestions : )
* 77:79 # 284p / espaces_mélangés : Incohérence : l’espace insécable à côté de l’espace sécable n’a
pas d’effet.
> Suggestions : |
glace : il vient de comprendre que la seule et unique façon de s'échapper de la petite cour
^^ ^^
* 102:104 # 678p / nbsp_avant_deux_points : Il manque un espace insécable.
> Suggestions : :
* 160:162 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : s’
intérieure au milieu de laquelle il se trouve est... de faire demi-tour et de repasser par le
^^ ^^^
* 221:223 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 222:224 # 284p / espaces_mélangés : Incohérence : l’espace insécable à côté de l’espace sécable
n’a pas d’effet.
> Suggestions : |
* 240:243 # 590p / typo_points_suspension1 : Typographie : points de suspension. Utilisez le
caractère dédié.
> Suggestions : …
passage qu'il vient d'emprunter. Mais ,pendant ce temps, les bruits de pas se rapprochent
^^^ ^^ ^^
* 293:296 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : qu’
* 305:307 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : d’
* 322:324 # 323p / typo_virgule_collée_à_mot_suivant : Pas d’espace avant une virgule. Un espace
après.
> Suggestions : ,
inexorablement.Déjà, une sombre silhouette apparaît au coin de la rue. Ses yeux scrutent
^^^^
* 390:394 # 556p / typo_espace_manquant_après3 : Il manque un espace.
> Suggestions : Déjà
nerveusement l'obscurité, à la recherche du salut. Va-t-il vraiment échouer, maintenant, si près du
^^
* 477:479 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : l’
but, après tant d'efforts et toutes ces années passées à forger son plan ?Il s'adosse au mur contre
^^ ^^^^ ^^
* 580:582 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : d’
* 636:638 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : ?
* 638:640 # 554p / typo_espace_manquant_après2 : Il manque un espace.
> Suggestions : Il
* 641:643 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : s’
lequel il s'aplatit comme il le peut, dans l'espoir de pouvoir échapper aux regards de son
^^ ^^
* 674:676 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : s’
* 707:709 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : l’
poursuivant. Soudain, il décèle le grincement presque imperceptible d'une porte qui bat tout près
^^
* 823:825 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : d’
de lui au vent nocturne. Serait-il enfin sauvé? Il avance à pas feutrés en direction de la porte..
^ ^^^^
* 899:900 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : ?
* 949:951 # 592p / typo_points_suspension3 : Typographie : un ou trois points ?
> Suggestions : … | .
* 951:953 # 314p / typo_point_entre_deux_espaces : Pas d’espace avant un point.
> Suggestions : .
. Mais sur quoi va-t-elle s'ouvrir ?
^^^ ^^ ^^
* 953:956 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer.
> Suggestions :
* 980:982 # 744p / apostrophe_typographique : Apostrophe typographique.
> Suggestions : s’
* 988:990 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable.
> Suggestions : ?
Lorsqu il vint à la maison qu’elle détestait,[ils ] se disputèrent.
^^^^^^^ ^^
* 0:7 # 773p / typo_apostrophe_manquante : Il manque vraisemblablement une apostrophe.
> Suggestions : Lorsqu’
* 49:51 # 297p / typo_espace_avant_signe_fermant : Pas d’espace avant ce signe.
> Suggestions : ]
|
Added tests/fr/text1.txt version [2d0a9593ec].
> > > > > > > | 1 2 3 4 5 6 7 | Lorsqu'il est parti. Le 15ᵉ du mois de mars . Le XXIᵉ siècle. 3ème tentative ! Des pas derrière lui ... Très mauvais signe... Mais qui pourrait bien le suivre au beau milieu de la nuit, dans cette rue étroite dans le fin fond du port ? Et ce alors qu'il vient de réussir le coup dont il a rêvé toute sa vie! Qu'il ne lui reste plus qu'à disparaître -avec son butin- sans laisser de trace ! Serait-ce l'un de ses nombreux collègues qui a eu la même idée que lui, l'a observé en secret et a attendu cet instant précis pour lui dérober le fruit de son travail ? Ou bien seraient-ce plutôt les pas de l'un des innombrables gardiens de la paix de Marseille, prêt à faire claquer d'étincelantes menottes autour de ses poignets ? Son ordre -"Ne bougez plus!"- résonne déjà dans ses oreilles!Se sentant traqué , il se retourne brusquement et aperçoit un étroit passage. Sauvé ? En un éclair,il vire à droite et disparaît entre les deux bâtiments, manquant de justesse de trébucher sur la poubelle renversée en plein milieu de la ruelle! Tout va bien. Aucune erreur à signaler. Il tâtonne dans l'obscurité, cherchant ( désespérément )une issue. Tout à coup, son cœur se glace : il vient de comprendre que la seule et unique façon de s'échapper de la petite cour intérieure au milieu de laquelle il se trouve est... de faire demi-tour et de repasser par le passage qu'il vient d'emprunter. Mais ,pendant ce temps, les bruits de pas se rapprochent inexorablement.Déjà, une sombre silhouette apparaît au coin de la rue. Ses yeux scrutent nerveusement l'obscurité, à la recherche du salut. Va-t-il vraiment échouer, maintenant, si près du but, après tant d'efforts et toutes ces années passées à forger son plan ?Il s'adosse au mur contre lequel il s'aplatit comme il le peut, dans l'espoir de pouvoir échapper aux regards de son poursuivant. Soudain, il décèle le grincement presque imperceptible d'une porte qui bat tout près de lui au vent nocturne. Serait-il enfin sauvé? Il avance à pas feutrés en direction de la porte.. . Mais sur quoi va-t-elle s'ouvrir ? Lorsqu il vint à la maison qu’elle détestait,[ils ] se disputèrent. Tout va bien. Aucune erreur à signaler. |
Added tests/fr/text2.res.txt version [4c753a53e0].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "grammalecte": "0.5.12", "lang": "fr", "data" : [
{"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["Lorsqu’"], "sType": "apos", "nStartX": 0, "sRuleId": "apostrophe_typographique", "sBefore": "", "nEndX": 7, "nStartY": 1, "sLineId": "523p", "nEndY": 1, "sMessage": "Apostrophe typographique.", "sUnderlined": "Lorsqu'", "sAfter": "il arrivas", "URL": ""}, {"aSuggestions": ["arriva"], "sType": "gv", "nStartX": 10, "sRuleId": "conj_il", "sBefore": "Lorsqu'il ", "nEndX": 17, "nStartY": 1, "sLineId": "7710s", "nEndY": 1, "sMessage": "Conjugaison erronée. Accord avec « il ». Le verbe devrait être à la 3ᵉ personne du singulier.", "sUnderlined": "arrivas", "sAfter": "", "URL": ""}, {"aSuggestions": ["arriva"], "sType": "gv", "nStartX": 10, "sRuleId": "conj_xxxas_sans_sujet", "sBefore": "Lorsqu'il ", "nEndX": 17, "nStartY": 1, "sLineId": "7959s", "nEndY": 1, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "arrivas", "sAfter": "", "URL": ""}]},
{"lSpellingErrors": [], "lGrammarErrors": []},
{"lSpellingErrors": [{"sType": "WORD", "nStartX": 3, "nEndX": 8, "nEndY": 5, "nStartY": 5, "sValue": "Horla"}, {"sType": "WORD", "nStartX": 3, "nEndX": 8, "nEndY": 6, "nStartY": 6, "sValue": "Horla"}, {"sType": "WORD", "nStartX": 13, "nEndX": 23, "nEndY": 6, "nStartY": 6, "sValue": "Ollendorff"}], "lGrammarErrors": []},
{"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["J’"], "sType": "apos", "nStartX": 37, "sRuleId": "apostrophe_typographique", "sBefore": "8 mai. – Quelle journées admirable ! ", "nEndX": 39, "nStartY": 9, "sLineId": "523p", "nEndY": 9, "sMessage": "Apostrophe typographique.", "sUnderlined": "J'", "sAfter": "ai passés toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme p", "URL": ""}, {"aSuggestions": ["Quelles"], "sType": "gn", "nStartX": 9, "sRuleId": "gn_quelle_accord", "sBefore": "– ", "nEndX": 15, "nStartY": 9, "sLineId": "3673s", "nEndY": 9, "sMessage": "Accord de nombre erroné : « journées » est au pluriel.", "sUnderlined": "Quelle", "sAfter": " journées admirable ! ", "URL": ""}, {"aSuggestions": ["étendue"], "sType": "gn", "nStartX": 66, "sRuleId": "gn_2m_det_fem_sing", "sBefore": "J'ai passés toute la matinée ", "nEndX": 72, "nStartY": 9, "sLineId": "3990s", "nEndY": 9, "sMessage": "Accord de genre erroné : « matinée » est féminin, « étendu » est masculin.", "sUnderlined": "étendu", "sAfter": " sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et", "URL": ""}, {"aSuggestions": ["passé"], "sType": "ppas", "nStartX": 42, "sRuleId": "ppas_pronom_avoir", "sBefore": "J'ai ", "nEndX": 48, "nStartY": 9, "sLineId": "7013s", "nEndY": 9, "sMessage": "Ce verbe devrait être un participe passé au masculin singulier.", "sUnderlined": "passés", "sAfter": " toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme platane qu", "URL": "http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais"}]},
{"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["aime"], "sType": "gv", "nStartX": 2, "sRuleId": "conj_j", "sBefore": "J’", "nEndX": 7, "nStartY": 17, "sLineId": "7653s", "nEndY": 17, "sMessage": "Conjugaison erronée. Accord avec « je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.", "sUnderlined": "aimes", "sAfter": " ma maison où j’ai grandi. ", "URL": ""}, {"aSuggestions": ["aime"], "sType": "gv", "nStartX": 2, "sRuleId": "conj_xxxes_sans_sujet", "sBefore": "J’", "nEndX": 7, "nStartY": 17, "sLineId": "7953s", "nEndY": 17, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "aimes", "sAfter": " ma maison où j’ai grandi. ", "URL": ""}]},
{"lSpellingErrors": [], "lGrammarErrors": []},
{"lSpellingErrors": [], "lGrammarErrors": []},
{"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["heures"], "sType": "gn", "nStartX": 10, "sRuleId": "gn_nombre_lettres_accord", "sBefore": "Vers onze ", "nEndX": 15, "nStartY": 30, "sLineId": "3626s", "nEndY": 30, "sMessage": "Accord de nombre erroné avec « onze » : « heure » devrait être au pluriel.", "sUnderlined": "heure", "sAfter": ", un long convoi de navires, traînés par un remorqueur, gros comme une mouche, e", "URL": ""}]},
{"lSpellingErrors": [{"sType": "WORD", "nStartX": 11, "nEndX": 20, "nEndY": 34, "nStartY": 34, "sValue": "goëlettes"}], "lGrammarErrors": [{"aSuggestions": ["saluais"], "sType": "gv", "nStartX": 15, "sRuleId": "conj_je_pronom", "sBefore": "Je le ", "nEndX": 22, "nStartY": 36, "sLineId": "7661s", "nEndY": 36, "sMessage": "Conjugaison erronée. Accord avec « Je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.", "sUnderlined": "saluait", "sAfter": ", je ne sais pourquoi, tant ce navire me fit plaisir à voir.", "URL": ""}]},
{"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["jours"], "sType": "gn", "nStartX": 76, "sRuleId": "gn_det_pluriel_accord", "sBefore": "– J’ai un peu de fièvre depuis quelques ", "nEndX": 80, "nStartY": 39, "sLineId": "3540s", "nEndY": 39, "sMessage": "Accord de nombre erroné : « jour » devrait être au pluriel.", "sUnderlined": "jour", "sAfter": ", et toi ; ", "URL": ""}]},
{"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["confiance"], "sType": "gn", "nStartX": 17, "sRuleId": "gn_notre_votre_chaque_accord", "sBefore": "es influences mystérieuses qui changent en découragement notre bonheur et notre ", "nEndX": 27, "nStartY": 43, "sLineId": "3492s", "nEndY": 43, "sMessage": "Accord de nombre erroné : « confiances » devrait être au singulier.", "sUnderlined": "confiances", "sAfter": " en détresse. ", "URL": ""}, {"aSuggestions": ["descends"], "sType": "gv", "nStartX": 25, "sRuleId": "conj_je", "sBefore": "– Je ", "nEndX": 32, "nStartY": 46, "sLineId": "7657s", "nEndY": 46, "sMessage": "Conjugaison erronée. Accord avec « Je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.", "sUnderlined": "descend", "sAfter": " le long de l’eau ; ", "URL": ""}]},
{"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["Va"], "sType": "imp", "nStartX": 0, "sRuleId": "imp_va", "sBefore": "", "nEndX": 3, "nStartY": 57, "sLineId": "7357s", "nEndY": 57, "sMessage": "S’il s’agit d’un impératif, pas de “s”.", "sUnderlined": "Vas", "sAfter": " en enfer. ", "URL": ""}, {"aSuggestions": ["Va"], "sType": "gv", "nStartX": 0, "sRuleId": "conj_xxxas_sans_sujet", "sBefore": "", "nEndX": 3, "nStartY": 57, "sLineId": "7959s", "nEndY": 57, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "Vas", "sAfter": " en enfer. ", "URL": ""}, {"aSuggestions": ["Va"], "sType": "imp", "nStartX": 0, "sRuleId": "imp_va", "sBefore": "", "nEndX": 3, "nStartY": 58, "sLineId": "7357s", "nEndY": 58, "sMessage": "S’il s’agit d’un impératif, pas de “s”.", "sUnderlined": "Vas", "sAfter": " en enfer.", "URL": ""}, {"aSuggestions": ["Va"], "sType": "gv", "nStartX": 0, "sRuleId": "conj_xxxas_sans_sujet", "sBefore": "", "nEndX": 3, "nStartY": 58, "sLineId": "7959s", "nEndY": 58, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "Vas", "sAfter": " en enfer.", "URL": ""}]}
]}
|
Added tests/fr/text2.txt version [e095819509].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | Lorsqu'il arrivas Guy de Maupassant Le Horla (1887) Le Horla, P. Ollendorff, 1895 [trente-cinquième édition] (pp. 3-68). 8 mai. – Quelle journées admirable ! J'ai passés toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière. J’aime ce pays, et j’aime y vivre parce que j’y ai mes racines, ces profondes et délicates racines, qui attachent un homme à la terre où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on mange, aux usages comme aux nourritures, aux locutions locales, aux intonations des paysans, aux odeurs du sol, des villages et de l’air lui-même. J’aimes ma maison où j’ai grandi. De mes fenêtres, je vois la Seine qui coule, le long de mon jardin, derrière la route, presque chez moi, la grandes et large Seine, qui va de Rouen au Havre, couverte de bateaux qui passent. À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu des clochers gothiques. Ils sont innombrables, frêles ou larges, dominés par la flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air bleu des belles matinées, jetant jusqu’à moi leur doux et lointain bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit. Comme il faisait bon ce matin ! Vers onze heure, un long convoi de navires, traînés par un remorqueur, gros comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila devant ma grille. Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel, venait un superbe trois-mats brésilien, tout blanc, admirablement propre et luisant. Je le saluait, je ne sais pourquoi, tant ce navire me fit plaisir à voir. 12 mai et quelques jours plus tard. – J’ai un peu de fièvre depuis quelques jour, et toi ; je me sens souffrant, ou plutôt je me sens triste. D’où viennent ces influences mystérieuses qui changent en découragement notre bonheur et notre confiances en détresse. On dirait que l’air, l’air invisible est plein d’inconnaissables Puissances, dont nous subissons les voisinages mystérieux. Je m’éveille plein de gaîté, avec des envies de chanter dans la gorge. – Pourquoi ? – Je descend le long de l’eau ; et soudain, après une courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez moi. – Pourquoi ? – Es-ce un frisson de froid qui, frôlant ma peau, a ébranlé mes nerfs et assombri mon âme ? Est-ce la forme des nuages, ou la couleur du jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé ma pensée ? Sait-on ? Tout ce qui nous entoure, tout ce que nous voyons sans le regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous, sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets rapides, surprenants et inexplicables ? Vas en enfer. Vas en enfer. |
Added tests/fr/text3.res.txt version [aa34293b03].
> > > | 1 2 3 |
{ "grammalecte": "0.5.12", "lang": "fr", "data" : [
{"lGrammarErrors": [{"nEndX": 7, "sMessage": "Apostrophe typographique.", "sRuleId": "apostrophe_typographique", "sLineId": "523p", "nStartY": 1, "sType": "apos", "URL": "", "aSuggestions": ["Lorsqu’"], "nEndY": 1, "nStartX": 0}], "lSpellingErrors": []}
]}
|
Added tests/fr/text3.txt version [b5a437f8ee].
> | 1 | Lorsqu'il est parti. |
Added tests/fr/todo_détections.txt version [65a2d853cd].
> > > > > > > > | 1 2 3 4 5 6 7 8 | # DÉTECTIONS À FAIRE Il faut au préalable avoir définit un protocole. Il y a quatre cents mot dans la phrase. Ma mémoire a aussi été effacé. à condition qu’elle l’est jamais été Vous la voulait Nous le voleront |
Added tests/fr/todo_faux_positifs.txt version [2eb36c3f72].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # TODO: FAUX POSITIFS un délire systématisé de persécution basé sur des interprétations Deirdre, elle aussi légèrement ostracisée, m’interrogea. Soudain, surgit l’un des ouvriers… Ainsi périt l’inconstant. puis repartit. Les créatures de l’enfer que nous avions rencontrées… Étaient-ils vraiment frère et sœur Cela fait des années qu’elle n’a pas donné signe de vie. Et si je te donne son nom, cela t’aiderait, Dworkin ? cet être que personne n’a vu ni senti à part elle Ce qu’ils sont influence leur regard sur moi. Ils sont âgés de 4 et 1 ans. Mille neuf cent quatre-vingt. (dépend du contexte) Le CAPES de mathématiques. La Mustang est une voiture. Il faut se bien connaître soi-même. C’est lui ou moi qui a gagné. Des copains plus vieux que moi qui fumaient. Des copains plus vieux que toi qui fumaient. André Juin était un sculpteur français. La bataille de Monte Cassino révèle le génie militaire du général Juin. |
Added tests/fr_test.py version [d8176c7c6e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
#! python3
# coding: UTF-8
import unittest
import os
import re
import time
try:
import grammalecte.ibdawg as ibdawg
import grammalecte.fr as gce
import grammalecte.fr.conj as conj
import grammalecte.fr.phonet as phonet
import grammalecte.fr.mfsp as mfsp
from grammalecte.echo import echo
except ImportError:
import sys
sys.path.append(os.path.abspath('.'))
sys.path.append(os.path.abspath('..'))
import grammalecte.ibdawg as ibdawg
import grammalecte.fr as gce
import grammalecte.fr.conj as conj
import grammalecte.fr.phonet as phonet
import grammalecte.fr.mfsp as mfsp
from grammalecte.echo import echo
def _fuckBackslashUTF8 (s):
"fuck that shit"
return s.replace("\u2019", "'").replace("\u2013", "–").replace("\u2014", "—")
class TestDictionary (unittest.TestCase):
@classmethod
def setUpClass (cls):
cls.oDic = ibdawg.IBDAWG("French.bdic")
def test_lookup (self):
for sWord in ["branche", "Émilie"]:
self.assertTrue(self.oDic.lookup(sWord), sWord)
def test_lookup_failed (self):
for sWord in ["Branche", "BRANCHE", "BranchE", "BRanche", "BRAnCHE", "émilie"]:
self.assertFalse(self.oDic.lookup(sWord), sWord)
def test_isvalid (self):
for sWord in ["Branche", "branche", "BRANCHE", "Émilie", "ÉMILIE", "aujourd'hui", "aujourd’hui", "Aujourd'hui", "Aujourd’hui"]:
self.assertTrue(self.oDic.isValid(sWord), sWord)
def test_isvalid_failed (self):
for sWord in ["BranchE", "BRanche", "BRAnCHE", "émilie", "éMILIE", "émiLie"]:
self.assertFalse(self.oDic.isValid(sWord), sWord)
class TestConjugation (unittest.TestCase):
@classmethod
def setUpClass (cls):
pass
def test_isverb (self):
for sVerb in ["avoir", "être", "aller", "manger", "courir", "venir", "faire", "finir"]:
self.assertTrue(conj.isVerb(sVerb), sVerb)
for sVerb in ["berk", "a", "va", "contre", "super", "", "à"]:
self.assertFalse(conj.isVerb(sVerb), sVerb)
def test_hasconj (self):
for sVerb, sTense, sWho in [("aller", ":E", ":2s"), ("avoir", ":Is", ":1s"), ("être", ":Ip", ":2p"),
("manger", ":Sp", ":3s"), ("finir", ":K", ":3p"), ("prendre", ":If", ":1p")]:
self.assertTrue(conj.hasConj(sVerb, sTense, sWho), sVerb)
def test_getconj (self):
for sVerb, sTense, sWho, sConj in [("aller", ":E", ":2s", "va"), ("avoir", ":Iq", ":1s", "avais"), ("être", ":Ip", ":2p", "êtes"),
("manger", ":Sp", ":3s", "mange"), ("finir", ":K", ":3p", "finiraient"), ("prendre", ":If", ":1p", "prendrons")]:
self.assertEqual(conj.getConj(sVerb, sTense, sWho), sConj, sVerb)
class TestPhonet (unittest.TestCase):
@classmethod
def setUpClass (cls):
cls.lSet = [
["ce", "se"],
["ces", "ses", "sais", "sait"],
["cet", "cette", "sept", "set", "sets"],
["dé", "dés", "dès", "dais", "des"],
["don", "dons", "dont"],
["été", "étais", "était", "étai", "étés", "étaient"],
["faire", "fer", "fers", "ferre", "ferres", "ferrent"],
["fois", "foi", "foie", "foies"],
["la", "là", "las"],
["mes", "mets", "met", "mai", "mais"],
["mon", "mont", "monts"],
["mot", "mots", "maux"],
["moi", "mois"],
["notre", "nôtre", "nôtres"],
["or", "ors", "hors"],
["hou", "houe", "houes", "ou", "où", "houx"],
["peu", "peux", "peut"],
["ses", "ces", "sais", "sait"],
["son", "sons", "sont"],
["tes", "taie", "taies", "thé", "thés"],
["toi", "toit", "toits"],
["ton", "tons", "thon", "thons", "tond", "tonds"],
["voir", "voire"]
]
def test_getsimil (self):
for aSet in self.lSet:
for sWord in aSet:
self.assertListEqual(phonet.getSimil(sWord), sorted(aSet))
class TestMasFemSingPlur (unittest.TestCase):
@classmethod
def setUpClass (cls):
cls.lPlural = [
("travail", ["travaux"]),
("vœu", ["vœux"]),
("gentleman", ["gentlemans", "gentlemen"])
]
def test_getplural (self):
for sSing, lPlur in self.lPlural:
self.assertListEqual(mfsp.getMiscPlural(sSing), lPlur)
class TestGrammarChecking (unittest.TestCase):
@classmethod
def setUpClass (cls):
gce.load()
cls._zError = re.compile(r"\{\{.*?\}\}")
cls._aRuleTested = set()
def test_parse (self):
zOption = re.compile("^__([a-zA-Z0-9]+)__ ")
bShowUntested = False
for sf in [ "gc_test.txt" ]:
with self.subTest(msg=sf):
with open("./tests/fr/"+sf, "r", encoding="utf-8") as hSrc:
for sLine in ( s for s in hSrc if not s.startswith("#") and s.strip() ):
sLineNum = sLine[:10].strip()
sLine = sLine[10:].strip()
sOption = None
m = zOption.search(sLine)
if m:
sLine = sLine[m.end():]
sOption = m.group(1)
if "->>" in sLine:
sErrorText, sExceptedSuggs = self._splitTestLine(sLine)
if sExceptedSuggs.startswith('"') and sExceptedSuggs.endswith('"'):
sExceptedSuggs = sExceptedSuggs[1:-1]
else:
sErrorText = sLine.strip()
sExceptedSuggs = ""
sExpectedErrors = self._getExpectedErrors(sErrorText)
sTextToCheck = sErrorText.replace("}}", "").replace("{{", "")
sFoundErrors, sListErr, sFoundSuggs = self._getFoundErrors(sTextToCheck, sOption)
self.assertEqual(sExpectedErrors, sFoundErrors, \
"\n# Line num: " + sLineNum + \
"\n> to check: " + _fuckBackslashUTF8(sTextToCheck) + \
"\n expected: " + sExpectedErrors + \
"\n found: " + sFoundErrors + \
"\n errors: \n" + sListErr)
if sExceptedSuggs:
self.assertEqual(sExceptedSuggs, sFoundSuggs, "\n# Line num: " + sLineNum + "\n> to check: " + _fuckBackslashUTF8(sTextToCheck) + "\n errors: \n" + sListErr)
bShowUntested = True
if bShowUntested:
i = 0
for sOpt, sLineId, sRuleId in gce.listRules():
if sLineId not in self._aRuleTested and not re.match("[0-9]+[sp]$", sRuleId):
echo(sRuleId, end= ", ")
i += 1
if i:
echo("\n[{} untested rules]".format(i))
def _splitTestLine (self, sLine):
sText, sSugg = sLine.split("->>")
return (sText.strip(), sSugg.strip())
def _getFoundErrors (self, sLine, sOption):
if sOption:
gce.setOption(sOption, True)
aErrs = gce.parse(sLine)
gce.setOption(sOption, False)
else:
aErrs = gce.parse(sLine)
sRes = " " * len(sLine)
sListErr = ""
lAllSugg = []
for dErr in aErrs:
sRes = sRes[:dErr["nStart"]] + "~" * (dErr["nEnd"] - dErr["nStart"]) + sRes[dErr["nEnd"]:]
sListErr += " * {sLineId} / {sRuleId} at {nStart}:{nEnd}\n".format(**dErr)
lAllSugg.append("|".join(dErr["aSuggestions"]))
self._aRuleTested.add(dErr["sLineId"])
return sRes, sListErr, "|||".join(lAllSugg)
def _getExpectedErrors (self, sLine):
sRes = " " * len(sLine)
for i, m in enumerate(self._zError.finditer(sLine)):
nStart = m.start() - (4 * i)
nEnd = m.end() - (4 * (i+1))
sRes = sRes[:nStart] + "~" * (nEnd - nStart) + sRes[nEnd:-4]
return sRes
from contextlib import contextmanager
@contextmanager
def timeblock (label, hDst):
start = time.perf_counter()
try:
yield
finally:
end = time.perf_counter()
print('{} : {}'.format(label, end - start))
hDst.write("{:<12.6}".format(end-start))
def perf (sVersion):
print("\nPerformance tests")
gce.load()
aErrs = gce.parse("Texte sans importance… utile pour la compilation des règles avant le calcul des perfs.")
with open("./tests/fr/perf.txt", "r", encoding="utf-8") as hSrc, \
open("./tests/fr/perf_memo.txt", "a", encoding="utf-8", newline="\n") as hDst:
hDst.write("{:<12}{:<20}".format(sVersion, time.strftime("%Y.%m.%d %H:%M")))
for sText in ( s.strip() for s in hSrc if not s.startswith("#") and s.strip() ):
with timeblock(sText[:sText.find(".")], hDst):
aErrs = gce.parse(sText)
hDst.write("\n")
def main():
unittest.main()
if __name__ == '__main__':
main()
|