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 SF |